var w = 800, h = 600;
w = screen.availWidth;
h = screen.availHeight;
//------------------------------------------------------------------------------
function getlayer(layerName) {if (document.layers) {return eval('document.' + layerName);}else {if (document.all) {return eval('document.all.' + layerName + '.style');}else {return eval('document.getElementById("' + layerName + '").style');}}}
//------------------------------------------------------------------------------
function submitform(formname,action) {

	var validOK;
	validOK=validateInputFields();
	validOK=0;
	if (validOK==0)
	{
	SetWaitCursor(true);
	bProcessingPostRequest=true;
	gHandleBrowserOnUnload = false;
	document.forms[formname].action.value=action;
	document.forms[formname].submit();
	}
	else
	{
	return;
	}
}
//------------------------------------------------------------------------------
function openwindow (url) {
	window.open(url,'','scrollbars=yes,toolbar=yes,location=no,directories=no,resizable=yes,copyhistory=no,left=50,top=50,height=600,width=700');
}
//------------------------------------------------------------------------------
function openwindow1 (url,width,height,FormToSend,FieldPattern) {
	var leftPos = (w-width)/2, topPos = (h-height)/2;
	if (FormToSend)
	{
		if (url.indexOf('?')==-1)
			url+='?data=';
		else
			url+='&data=';	
		url+=AutoFormContents(document.forms[FormToSend].elements,FieldPattern);
	}
	window.open(url,'','scrollbars=no,toolbar=no,location=no,directories=no,resizable=yes,copyhistory=no,left=' + leftPos + ',top=' + topPos + ',height=' + height + ',width=' + width);
}
//------------------------------------------------------------------------------
function openwindow2 (url,width,height){
	var leftPos = (w-width)/2, topPos = (h-height)/2;
	window.open(url,'','scrollbars=yes,toolbar=no,location=no,directories=no,resizable=yes,copyhistory=no,left=' + leftPos + ',top=' + topPos + ',height=' + height + ',width=' + width);
}
//------------------------------------------------------------------------------
function confirmaction(formname,action,message) {
	if (window.confirm(message)) {
		gHandleBrowserOnUnload = false;
		document.forms[formname].action.value=action;document.forms[formname].submit();
	}
}
//------------------------------------------------------------------------------
function submitform1(form,action,parameters) {
	SetWaitCursor(true);
	bProcessingPostRequest=true;
	document.forms[form].elements['parameters'].value=parameters;
	submitform(form,action);
}
//------------------------------------------------------------------------------
function confirmaction1(formname,action,message,parameters) {
	document.forms[form].elements['parameters'].value=parameters;
	if (window.confirm(message)) {
		document.forms[formname].action.value=action;document.forms[formname].submit();
	}
}
//------------------------------------------------------------------------------
function openwindowmax(URL)
{
	var wOpen;
	var sOptions;
	sOptions = 'status=yes,menubar=yes,scrollbars=yes,resizable=yes,toolbar=yes';
	sOptions = sOptions + ',width=' + (screen.availWidth - 10).toString();
	sOptions = sOptions + ',height=' + (screen.availHeight - 122).toString();
	sOptions = sOptions + ',screenX=0,screenY=0,left=0,top=0';
	wOpen = window.open( '', '', sOptions );
	wOpen.location = URL;
	wOpen.focus();
	wOpen.moveTo( 0, 0 );
	wOpen.resizeTo( screen.availWidth, screen.availHeight );
}
//------------------------------------------------------------------------------
function changeCursor(control,how) {
	if (!how) {
		how = 'auto';
	}
	control.style.cursor = how;
	document.body.style.cursor = how;
}
//------------------------------------------------------------------------------
function EncodeRemoteData(data){
	var encoded="";
	encoded=data;
	while(encoded.indexOf('%')!=-1) encoded=encoded.replace('%','<PERCENT>');
	while(encoded.indexOf('&')!=-1) encoded=encoded.replace('&','<AMP>');
	while(encoded.indexOf('@')!=-1) encoded=encoded.replace('@','<AT>');
	while(encoded.indexOf('+')!=-1) encoded=encoded.replace('+','<PLUS>');
	while(encoded.indexOf('-')!=-1) encoded=encoded.replace('-','<MINUS>');
	return encoded;
}
//------------------------------------------------------------------------------
function AutoFormContents(elements,nameprefix)
{
	var buffer='';
	for( var i = 0; i < elements.length; i++ )
	{	
		if (elements[i].type!='button' && elements[i].type!='undefined' && elements[i].name)
		  if (!elements[i].disabled && elements[i].name.substring(0,nameprefix.length) == nameprefix) 
		  { 
			if (buffer!='') buffer+='@';
			switch(elements[i].type){
				case 'hidden':
				case 'text':
				case 'textarea':
				case 'select-one':
				  buffer+=elements[i].name+'='+EncodeRemoteData(elements[i].value);
				  break;
				case 'radio':
					if (elements[i].checked) buffer+=elements[i].name+'='+EncodeRemoteData(elements[i].value);
					break;
			}
		}						  						
	}
	return buffer;
}	
//------------------------------------------------------------------------------
function setPageTitle(sData) {
	if (document.all['pgTitle']) {
		StoreDataToDiv('pgTitle', sData);
	}
}
//------------------------------------------------------------------------------
function setPageSubTitle(sData) {
	if (document.all['pgSubTitle']) {
		StoreDataToDiv('pgSubTitle', sData);
	}
}
//------------------------------------------------------------------------------
function SetDivVisibility(item,value)
{
	var e
	e = getlayer(item);
	if (value) 
		e.visibility="visible";
	else
		e.visibility="hidden";
}		
//------------------------------------------------------------------------------
function bgCChange(src,c) {
	src.style.background = c;
}
//------------------------------------------------------------------------------
function SetDate(field,day,month,year){document.forms['DCONFORM'].elements[field].value=day+'.'+month+'.'+year;}
//------------------------------------------------------------------------------
function StoreDataToDiv(divname, data) {
	if (document.all[divname]) {
		document.all[divname].innerHTML='';
		document.all[divname].insertAdjacentHTML('afterBegin',data);
	}
}
//------------------------------------------------------------------------------
function requiredFieldOnChange() {
	return;
	try {
		var fValue;
		if (event.srcElement.getAttribute("required") == 1) {
			if (event.srcElement.value.length) {	
				setFieldBgColor(event.srcElement, "#FFFF99");
				fValue = event.srcElement.value;
			}
			else {
				setFieldBgColor(event.srcElement, "#FFCC33");
			}
		}
	}
	catch(err) {}
}
//------------------------------------------------------------------------------
function CheckExtendedFieldAttributes()
{
var i;
var fieldFormat = '';
var fieldLength = 0;
for (i=0;i<document.all.length;i++) 
	{	
		try
		{
			fieldFormat = document.all(i).getAttribute("format");
			fieldLength = 0;
			if ('undefined' != document.all(i).value) {
				fieldLength = document.all(i).value.length;
			}
			fieldLength = document.all(i).value;
			if (document.all(i).getAttribute("required") == 1) {
				if (fieldLength == 0) {
					setFieldBgColor(document.all(i), "#FFCC33");
				}
			}
		}
		catch(err){  }
	}
}
//------------------------------------------------------------------------------
function setFieldBgColor(field, color) {
	field.style.backgroundColor = color;
}
//------------------------------------------------------------------------------
function isNumber(ctl)
{
var intStr,matchArray;
var valPat = /^(\d*)$/;
var matchArray = ctl.match(valPat); // is the format ok?

if (matchArray == null)
{
return false;
}
return true;
}
//------------------------------------------------------------------------------
function isAmount(ctl)
{
	var allowedChars = '01234567890.,-';
	var c,i;
	for (i=0;i<ctl.length;i++) {
		c = ctl.substr(i,1);
		if (allowedChars.indexOf(c) < 0) return false;
	}
	return true;
}

//------------------------------------------------------------------------------
function isDate(textField) { 
	a=textField.value;
	dotpos1= a.indexOf('.');
	dotpos2= a.lastIndexOf('.');
	if (dotpos1>0 && dotpos1<3 && dotpos2==a.length-5 && dotpos2>=dotpos1+1) {
	d = a.substring(0,dotpos1);
	m = a.substring(dotpos1+1,dotpos2);
	y = a.substring(dotpos2+1,a.length);
	if (isInRange(y,1901,2099) && isInRange(m,1,12) && isInRange(d,1,31)) {
		if ((m==4 || m==6 || m==9 || m==11) && d>30) 
			return false
		else
			if (m==2) 
				if (d>29) 
					return false
				else 
					if (d==29 && ((y/4)!=parseInt(y/4))) 
						return false
			else 
				return true
	else
		return true
	}
	else
	return false
  }
  else
	return false
}
//------------------------------------------------------------------------------
function isTime(textField) { 
	a=textField.value;
	dotpos1= a.indexOf(':');
	dotpos2= a.lastIndexOf(':');
	if (dotpos1>0 && dotpos1<3 && dotpos2==a.length-3 && dotpos2>=dotpos1+1) {
		h = a.substring(0,dotpos1);
		m = a.substring(dotpos1+1,dotpos2);
		s = a.substring(dotpos2+1,a.length);
		if (isInRange(h,0,24) && isInRange(m,0,60) && isInRange(s,0,60)) 
			return true
		else
			return false
	}
	else
		return false
}
//------------------------------------------------------------------------------
function validateInputFields() {
	return validateForm('input');
}
function setErrBgColor(c) {
	c.style.backgroundColor='#99CCFF';
}
function setOkBgColor(c) {
	c.style.backgroundColor='#FFFF99';
}
//------------------------------------------------------------------------------
function validateForm(TagType)
{

var e;
var c;
var newCnt;
newCnt=0;
var validationCounter = 0;  
for( e = new Enumerator( document.all.tags( TagType ) ); !e.atEnd(); e.moveNext() )
{
c = e.item();

// If the field isn''t required, disabled or read-only, we exit this iteration
if ( c.disabled || c.readonly || c.type != "text")
continue;
// Once there the field is required

try
{
	// Focus the field
	c.focus(); // Will raise an error if the field is hidden but then it can''t be mandatory => OK
	// Check if we got a value
	if ( c.value == "" && c.required == "1" )
	{
		setErrBgColor(c);
		validationCounter++;
		continue;
	}

	setOkBgColor(c);

	// Only continue if the value is not empty
	if ( c.value == "" ) {
		continue;
	}
	if ( c.value != "" ) {
		newCnt++;
	}
	
	
	// Is it a ZIPcode ?
	if ( c.format == "ZIP" && !isValidZIP(c.value) ) 	{ setErrBgColor(c); validationCounter++;}

	// Is it a number ?
	if ( c.format == "numeric" && !isNumber(c.value) )  	{ setErrBgColor(c); validationCounter++;}

	// Is it a amount ?
	if ( c.format == "amount" && !isAmount(c.value) )  	{ setErrBgColor(c); validationCounter++;}

	// Is it a date ?
	if ( c.format == "date" && !isDate(c))  	{ setErrBgColor(c); validationCounter++;}

	// Is it a time ?
	if ( c.format == "time" && !isTime(c))  	{ setErrBgColor(c); validationCounter++;}

	// Is it a email address ?
	if ( c.format == "email" && !isEmail(c.value) )  	{ setErrBgColor(c); validationCounter++;}

	// Has it the right length ?
	if ( c.minlength && c.value.length < c.minlength )  	{ setErrBgColor(c); validationCounter++;}
} // end try
catch (err)
{}
}
if (newCnt==0)validationCounter=1;
return validationCounter;
}
//------------------------------------------------------------------------------


function SetWaitCursorForElement(element,show,ToggleDisabled)
{
		try
		{	
			if (show)
			{
				if (element.getAttribute("originalcursor")!="wait") element.setAttribute("originalcursor",element.style.cursor);
				element.style.cursor="wait";
				if (ToggleDisabled) 
				{
					element.setAttribute("originaldisabledstate",element.disabled);
					element.disabled=true;
				}
			}
			else
			{
				element.style.cursor=element.getAttribute("originalcursor");
				if (ToggleDisabled) element.disabled=element.getAttribute("originaldisabledstate");
			}
					
		}
		catch(err){}
}

function SetWaitCursorForGroupOfTags(tagtype,show,ToggleDisabled)
{	
	var i;
	var coll;
	coll = document.all.tags(tagtype);
	if (coll!=null)
	{
		    for (i=0; i<coll.length; i++) 
			SetWaitCursorForElement(coll[i],show,ToggleDisabled);

	}

}

function SetWaitCursor(show)
{
	//running through document.all would be simpler, but is too slow!

	SetWaitCursorForElement(document.body,show,false);

	SetWaitCursorForGroupOfTags("input",show,false);
	SetWaitCursorForGroupOfTags("a",show,false);	//Don't disable links -> they look completely stupid!


}


// commented <script> tag here makes interdev colorize properly
//
//  jsrsClient.asp - javascript remote scripting client include
//  
//  Author:  Brent Ashley [jsrs@megahuge.com]
//
//  make asynchronous remote calls to server without client page refresh
//
//  see license.txt for copyright and license information

/*

ver   date       comment
-----------------------
1.00  22Aug2000  release
1.01  06Sep2000  change location.href=url to location.replace(url) to help avoid history
1.02  12Sep2000  comment out unique string to reduce history clutter
1.03  22Sep2000  add jsrsEvalEscape so quotes and newlines in parms won't choke
1.04  23Jan2001  ie4.x bug fix, debug utility: 
  hidden iframes must be inserted in space which has been visibly rendered on screen.  
  - moved insertion point to top of body to reduce/eliminate likelihood of this being unrendered space.
  - changed DIV to SPAN to avoid line break insertion into page flow
  added jsrsDebugInfo()
  - see comment for instruction on how to use it
1.05  06Feb2001  escape jsrsError return value, use try/catch in dispatch
1.06  13Feb2001  added no-nonsense copyright and license, starting to plan for NS6

1.1   14Feb2001  Mozilla/NS6 compatibility
  - the code expects NS4, IE4+, or Mozilla (incl NS6).
  - it's up to you to tell the user if they don't have the right browser.
1.11  15Feb2001  NS6 was not reloading on recall 
  - set src to '' before reloading
  - thanks to Murray Cash

*/

// callback pool needs global scope
var jsrsContextPoolSize = 0;
var jsrsContextMaxPool = 10;
var jsrsContextPool = new Array();
var jsrsBrowser = jsrsBrowserSniff();

// constructor for context object
function jsrsContextObj( contextID ){
  
  // properties
  this.id = contextID;
  this.busy = true;
  this.callback = null;
  this.container = contextCreateContainer( contextID );
  
  // methods
  this.callURL = contextCallURL;
  this.getPayload = contextGetPayload;
  this.setVisibility = contextSetVisibility;
}

//  method functions are not privately scoped 
//  because Netscape's debugger chokes on private functions
function contextCreateContainer( containerName ){
  // creates hidden container to receive server data 
  var container;
  switch( jsrsBrowser ) {
    case 'NS':
      container = new Layer(100);
      container.name = containerName;
      container.visibility = 'hidden';
      container.clip.width = 100;
      container.clip.height = 100;
      break;
    
    case 'IE':
      document.body.insertAdjacentHTML( "afterBegin", '<span id="SPAN' + containerName + '"></span>' );
      var span = document.all( "SPAN" + containerName );
      var html = '<iframe name="' + containerName + '" src=""></iframe>';
      span.innerHTML = html;
      span.style.display = 'none';
      container = window.frames[ containerName ];
      break;
      
    case 'MOZ':  
      var span = document.createElement('SPAN');
      span.id = "SPAN" + containerName;
      document.body.appendChild( span );
      var iframe = document.createElement('IFRAME');
      iframe.name = containerName;
      span.appendChild( iframe );
      container = iframe;
      break;
  }
  return container;
}

function contextCallURL( URL ){
  switch( jsrsBrowser ) {
    case 'NS':
      this.container.src = URL;
      break;
    case 'IE':
      this.container.document.location.replace(URL);
      break;
    case 'MOZ':
      this.container.src = '';
      this.container.src = URL; 
      break;
  }  
}

function contextGetPayload(){
  switch( jsrsBrowser ) {
    case 'NS':
      return this.container.document.forms['jsrs_Form'].elements['jsrs_Payload'].value;
    case 'IE':
      return this.container.document.forms['jsrs_Form']['jsrs_Payload'].value;
    case 'MOZ':
      return window.frames[this.container.name].document.forms['jsrs_Form']['jsrs_Payload'].value; 
  }  
}

function contextSetVisibility( vis ){
  switch( jsrsBrowser ) {
    case 'NS':
      this.container.visibility = (vis)? 'show' : 'hidden';
      break;
    case 'IE':
      document.all("SPAN" + this.id ).style.display = (vis)? '' : 'none';
      break;
    case 'MOZ':
      document.getElementById("SPAN" + this.id).style.visibility = (vis)? '' : 'hidden';
      this.container.width = (vis)? 250 : 0;
      this.container.height = (vis)? 100 : 0;
      break;
  }  
}

// end of context constructor

function jsrsGetContextID(){
  var contextObj;
  for (var i = 1; i <= jsrsContextPoolSize; i++){
    contextObj = jsrsContextPool[ 'jsrs' + i ];
    if ( !contextObj.busy ){
      contextObj.busy = true;      
      return contextObj.id;
    }
  }
  // if we got here, there are no existing free contexts
  if ( jsrsContextPoolSize <= jsrsContextMaxPool ){
    // create new context
    var contextID = "jsrs" + (++jsrsContextPoolSize);
    jsrsContextPool[ contextID ] = new jsrsContextObj( contextID );
    return contextID;
  } else {
    alert( "jsrs Error:  context pool full" );
    return null;
  }
}

function jsrsExecute(rspage,parameters, callback, visibility ){
  // call a server routine from client code
  //
  // rspage      - href to asp file
  // callback    - function to call on return 
  //               or null if no return needed
  //               (passes returned string to callback)
  // func        - sub or function name  to call
  // parm        - string parameter to function
  //               or array of string parameters if more than one
  // visibility  - optional boolean to make container visible for debugging
  
  // get context
  var contextObj = jsrsContextPool[ jsrsGetContextID() ];
  contextObj.callback = callback;

  var vis = (visibility == null)? false : visibility;
  contextObj.setVisibility( vis );

  // build URL to call
  var URL = rspage;

  // always send context
  URL += "&C=" + contextObj.id + "&rndnum=" + Math.floor(10000000*Math.random());
  if (parameters!=null) URL+="&" + parameters
  // make the call
    
  contextObj.callURL( URL );
  SetWaitCursor(true);
  return contextObj.id;
}

function jsrsLoaded( contextID ){
  // get context object and invoke callback
  
  SetWaitCursor(false);
  
  var contextObj = jsrsContextPool[ contextID ];
  if( contextObj.callback != null){
    contextObj.callback( jsrsUnescape( contextObj.getPayload() ), contextID );
  }
  // clean up and return context to pool
  contextObj.callback = null;
  contextObj.busy = false;
}

function jsrsError( contextID, str ){
  alert( unescape(str) );
  jsrsContextPool[ contextID ].busy = false
}

function jsrsUnescape( str ){
  // payload has slashes escaped with whacks
  return str.replace( /\\\//g, "/" );
}

function jsrsBrowserSniff(){
  if (document.layers) return "NS";
  if (document.all) return "IE";
  if (document.getElementById) return "MOZ";
  return "OTHER";
}

/////////////////////////////////////////////////
//
// user functions

function jsrsArrayFromString( s, delim ){
  // rebuild an array returned from server as string
  // optional delimiter defaults to ~
  var d = (delim == null)? '~' : delim;
  return s.split(d);
}

function jsrsDebugInfo(){
  // use for debugging by attaching to f1 (works with IE)
  // with onHelp = "return jsrsDebugInfo();" in the body tag
  var doc = window.open().document;
  doc.open;
  doc.write( 'Pool Size: ' + jsrsContextPoolSize + '<br><font face="arial" size="2"><b>' );
  for( var i in jsrsContextPool ){
    var contextObj = jsrsContextPool[i];
    doc.write( '<hr>' + contextObj.id + ' : ' + (contextObj.busy ? 'busy' : 'available') + '<br>');
    doc.write( contextObj.container.document.location.pathname + '<br>');
    doc.write( contextObj.container.document.location.search + '<br>');
    doc.write( '<table border="1"><tr><td>' + contextObj.container.document.body.innerHTML + '</td></tr></table>' );
  }
  doc.write('</table>');
  doc.close();
  return false;
}

function setAndEnableField(field,value){
	if (!field) return;
	field.disabled=false;
	field.value=value;
}

function dconField(fieldname) {
	if (!document.forms['DCONFORM'].elements[fieldname]) {
		//alert('warning: form element with name ' + fieldname + ' does not exist!');
		return;
	}
	return dconformField(fieldname).value;
}

function dconformField(fieldname) {
	if (!document.forms['DCONFORM'].elements[fieldname]) {
		//alert('warning: form element with name ' + fieldname + ' does not exist!');
		return;
	}
	return document.forms['DCONFORM'].elements[fieldname];
}

function setComboToDefault(cbo,value) {
	var i;
	for (i=0;i<cbo.options.length;i++) {
		if (cbo.options[i].value == value) {
			cbo.options[i].selected = true;
			return;
		}
	}
}

function closewindowfocusopener() {
	if (window.opener) window.opener.focus();
	window.close();
}

function indicateMandatoryFields() {
	if (document.forms['DCONFORM']) {
		var frmElems = document.forms['DCONFORM'].elements;
		for (var i=0;i<frmElems.length;i++) {
			if (frmElems[i].getAttribute('required')==1) {
				frmElems[i].style.borderBottom='1px solid red';
			}
		}
	}
}
function showHideLayer(_w,companyLimitForDownload)
{
	if (document.forms['MainAppForm'].includeIndicators.checked)
	{
		eval("document.all."+_w+".style.visibility='visible';");
	}
	else
	{
		if (document.forms['MainAppForm'].hiddenCompanyNumber.value < companyLimitForDownload)
		{
			eval("document.all."+_w+".style.visibility='hidden';");
		}
	}
} 