// <SCRIPT language="JavaScript">

function isMacIE(){
		var agt=navigator.userAgent.toLowerCase();
		if((agt.indexOf("msie") != -1) && (agt.indexOf("mac")!=-1)){
			return true;
		}else{
			return false;
		}
	}
	
	function saInArray(needle, haystack, caseSensitive){
		var i; 
		var found = false;
		if(caseSensitive){
			saRegExp = new RegExp(needle);
		} else {
			saRegExp = new RegExp(needle, "i");
		}
		for(i=0;i<haystack.length; i++){
			if(saRegExp.test(haystack[i])){ 
				found = true;
			} 
		}
		saRegExp = null;
		return found;
	}
	
	function removeOptions(selectObj){
		var i,numOpts,lastOpt; 
		numOpts = selectObj.options.length;
		(isNaN(numOpts)) ? (lastOpt = -1) : (lastOpt=numOpts-1); 
		for(i=lastOpt;i>=0; i--){
			// selectObj.remove(i);
			selectObj.options[i] = null;
		}
	}
	
	function addOption(selectObj, optText, optValue){
		var numOpts, saOpt, nextOpt;
		numOpts = selectObj.options.length;
		saOpt = new Option(optText, optValue);
		(isNaN(numOpts)) ? (nextOpt = 0) : (nextOpt=numOpts); 
		// selectObj.add(saOpt,0);
		selectObj.options[numOpts] = saOpt;
	}
	
	function saGetChildById(parentNode, childId){
		var childNodes, nextChild, parent, sibling, gotChild, cntr, foundOne;
		var currentSibling, child = false;
		var dataElements = new Array();
		var cntr=0;
		if(parentNode.hasChildNodes()){
			// get child siblings and iterate through siblings
			currentSibling =  parentNode.firstChild;
			do{
				// Check current node
				if((currentSibling.nodeType == 1) &&
					(currentSibling.id == childId)){
					child = currentSibling;
				} else { // look at children		
					if((currentSibling.nodeType == 1) && (currentSibling.hasChildNodes())){
						// look at child nodes
						var retDat = saGetChildById(currentSibling, childId);
						if(retDat){
							child = retDat;
						}
					} // end of else look at children
				}
				if(currentSibling.nextSibling){
					currentSibling = currentSibling.nextSibling;
					foundOne = true
				}else{
					foundOne=false;
				}
			} while(foundOne && !child) //; end of child sibling loop
			return child;
		}else{
			return false;
		}
	}
	
	function saGetChildrenByName(ParentNode, ChildName){
		var childNodes, nextChild, parent, sibling, gotChild, cntr, foundOne;
		var currentSibling;
		var dataElements = new Array();
		var cntr=0;
		if(parentNode.hasChildNodes()){
			// get child siblings and iterate through siblings
			currentSibling =  parentNode.firstChild;
			do{
				// Check current node
				if((currentSibling.nodeType == 1) &&
					(currentSibling.name == ChildName)){
					children[cntr++] = currentSibling;
				} else { // look at children		
					if((currentSibling.nodeType == 1) && (currentSibling.hasChildNodes())){
						// look at child nodes
						var elsFnd = saGetChildrenByName(currentSibling, ChildName);
						for(var k=0;k<elsFnd.length;k++){
							children[cntr++] = elsFnd[k];
						} 
					} // end of else look at children
				}
				if(currentSibling.nextSibling){
					currentSibling = currentSibling.nextSibling;
					foundOne = true
				}else{
					foundOne=false;
				}
			} while(foundOne) //; end of child sibling loop
			return children;
		}else{
			return false;
		}
	}
	
	function getFormDataElements(parentNode, formDataElements){
		var childNodes, nextChild, parent, sibling, gotChild, cntr, foundOne;
		var currentSibling;
		var dataElements = new Array();
		var cntr=0;
		if(parentNode.hasChildNodes()){
			// get child siblings and iterate through siblings
			currentSibling =  parentNode.firstChild;
			do{
				// Check current node
				if((currentSibling.nodeType == 1) &&
					(saInArray(currentSibling.nodeName, formDataElements, false))){
					dataElements[cntr++] = currentSibling;
				} else { // look at children		
					if((currentSibling.nodeType == 1) && (currentSibling.hasChildNodes())){
						// look at child nodes
						var elsFnd = getFormDataElements(currentSibling, formDataElements);
						for(var k=0;k<elsFnd.length;k++){
							dataElements[cntr++] = elsFnd[k];
						} 
					} // end of else look at children
				}
				if(currentSibling.nextSibling){
					currentSibling = currentSibling.nextSibling;
					foundOne = true
				}else{
					foundOne=false;
				}
			} while(foundOne) //; end ofchild sibling loop
			return dataElements;
		}
	}
	
	
	function saFormUpdateFn(saForm, saFormData, setInitVal){
		var i,j,k,numObjs,saObjData,saOpts,numOpts, saFormObjArr, 
			saFormObj, saFormArr;
		if(typeof(saForm)!= "object"){
			saFormArr = document.getElementsByName(saForm);
			if(!saFormArr){ return false } // form does not exist
			saForm = saFormArr[0];
		}
		numObjs = saFormData.length-1;
		for(i=1;i<=numObjs;i++){
			if((setInitVal) || (saFormData[0].upDateAll)){
				saObjData = saFormData[i];
			} else {
				if(saFormData[i].upDate){
					saObjData = saFormData[i];
				} else {
					continue;
				}
			}
			saFormObjArr = document.getElementsByName(saObjData.name);
			saFormObj = saFormObjArr[0];
			if(!saFormObj){continue;} // FormObj is missing try next 
			switch(saObjData.type){
				case 'text':
				case 'password':
				case 'textArea':
				case 'textarea':
				case 'hidden':
					saFormObj.value = saObjData.value;
				break;
				case 'select':
					if(saObjData.setOptions){
						saOpts = saObjData.options;
						numOpts = saOpts.length;
						removeOptions(saFormObj);
						for(j=0;j<numOpts;j++){
							addOption(saFormObj, saOpts[j].text, saOpts[j].value);
						}
					}
					if(saObjData.setBy == 'index'){
						saFormObj.selectedIndex = saObjData.selectedIndex;
						break;
					} 
					if(saObjData.setBy == 'value'){
						saOpts = saFormObj.options;
						numOpts = saOpts.length;
						for(k=0;k<numOpts;k++){
							if(saFormObj.selectedValue == saOpts[k].value){
								saFormObj.selectedIndex = k;
								break;
							} 
						} 
					}
					saFormObj.selectedIndex = 0;
				break;
				case 'radioButton':
					saButtonData = saObjData.buttons;
					if(saObjData.buttons.length <= saFormObjArr.length){
						numButtons = saObjData.buttons.length;
					} else { 
						numButtons = saFormObjArr.length;
					}
					if(saObjData.setValues){
						// saButtonData = saObjData.buttons;
						for(j=0;j<numButtons;j++){
							saFormObjArr[j].value = saButtonData[j].value;
						}
					}
					buttonChecked = false;
					for(j=0;j<numButtons;j++){
						checked = false;
						if(!buttonChecked){
							if(saFormObjArr[j].value == saObjData.checkedValue){ 
									checked = true;
							} else {
								if(saButtonData[j].checked){ checked = true;}
							}
						}
						if(checked){
							saFormObjArr[j].checked = true;
							buttonChecked = true;
						} else {
							saFormObjArr[j].checked = false;
						}
						if(saButtonData[j].disabled){
							saFormObjArr[j].disabled = true;
						} else {
							saFormObjArr[j].disabled = false;
						}
					} 
					if(!buttonChecked) {
						// saFormObjArr[0].checked = true;
					}
				break;
				case 'checkBox':
				case 'checkbox':
					saFormObj.value = saObjData.value;
					saFormObj.checked = saObjData.checked;
					saFormObj.disabled = saObjData.disabled;
				break;
			} // end of saObjType Switch
		}
	} 

	function saFormGetData(saForm) {
		var i,j,k,numObjs,saFormData,saOpts,numOpts, ptr, saChildType, dataEelements;
		if(isMacIE()){
			var formDataElements = new Array('INPUT','SELECT','Text','textarea','Password','checkbox','radio',
											'submit','reset','file','hidden','image','button');
		}else{
			var formDataElements = new Array('INPUT','SELECT','TEXTAREA');
		}
		var foundOne;
		var childNodes, currentChild, gotChild, cntr, foundOne;
		var children = new Array();
		var dataElements;
		if(typeof(saForm)!= "object"){
			var saFormArr = document.getElementsByName(saForm);
			if(!saFormArr){ return false; } // form does not exist
			saForm = saFormArr[0];
		}
		var saFormType = saForm.nodeName;
		if(saFormType.toLowerCase() == 'form'){
			dataElements = saForm.elements;
		}else{
			if(!saForm.hasChildNodes()){return false;}
			dataElements = getFormDataElements(saForm, formDataElements);
		}
		cntr=0;
		saFormData = new Array();
		for(de=0;de<dataElements.length;de++){
			currentChild=dataElements[de];
			saChildType = currentChild.type;
			if(saChildType!=null){
				saChildType.toLowerCase();
			}else{
				saChildType='';
			}
			switch(saChildType){
				case 'text':
				case 'password':
				case 'textarea':
				case 'hidden':
					saFormData[cntr] = new Object();
					saFormData[cntr].type = currentChild.type;
					saFormData[cntr].name = currentChild.name;
					saFormData[cntr].id = currentChild.id;
					saFormData[cntr].value = currentChild.value;
					cntr++;
				break;
				case 'select-one':
				case 'select-multiple':
					saFormData[cntr] = new Object();
					saFormData[cntr].type = currentChild.type;
					saFormData[cntr].name = currentChild.name;
					saFormData[cntr].id = currentChild.id;
					saFormData[cntr].selectedIndex = currentChild.selectedIndex;
					saOpts = currentChild.options;
					saFormData[cntr].value = saOpts[currentChild.selectedIndex].value;
					cntr++;
				break;
				case 'radio':
					ptr=cntr; foundOne= false;
					for(k=0;k<cntr;k++){
						if(saFormData[k].name == currentChild.name){
							foundOne = true;
							ptr = k;
							break;
						}
					}
					if(!foundOne){
						saFormData[ptr] = new Object();
						saFormData[ptr].type = currentChild.type;
						saFormData[ptr].name = currentChild.name;
						saFormData[ptr].id = currentChild.id;
						saFormData[ptr].value = '';
						cntr++;
					}
					if(currentChild.checked) { 
						saFormData[ptr].value = currentChild.value;
					}
				break;
				case 'checkBox':
				case 'checkbox':
					saFormData[cntr] = new Object();
					saFormData[cntr].type = currentChild.type;
					saFormData[cntr].name = currentChild.name;
					saFormData[cntr].id = currentChild.id;
					saFormData[cntr].value = currentChild.value;
					saFormData[cntr].checked = currentChild.checked;
					// saFormData[cntr].disbaled = currentChild.disbaled;
					cntr++;
				break;
				case 'checkbox_old':
					ptr=cntr; foundOne= false;
					for(k=0;k<cntr;k++){
						if(saFormData[k].name == currentChild.name){
							foundOne = true;
							ptr = k;
							break;
						}
					}
					if(!foundOne){
						saFormData[ptr] = new Object();
						saFormData[ptr].type = currentChild.type;
						saFormData[ptr].name = currentChild.name;
						saFormData[ptr].id = currentChild.id;
						saFormData[ptr].value = null;
						saFormData[ptr].buttons = new Array();
						cntr++;
					}
					var buttonIndx = saFormData[ptr].buttons.length;
					saFormData[ptr].buttons[buttonIndx] = new Object();
					saFormData[ptr].buttons[buttonIndx].value = currentChild.value;
					saFormData[ptr].buttons[buttonIndx].checked = currentChild.checked;
				break;
			} // end of saObjType Switch
		} // end of while
		return saFormData;
	}


function saFormPrintFormData(saFormData, saFormElements, opDoc, preFixStr, saIncl){
	if(saFormData){	
		var lines = 0;
		printAll = (saFormElements == 'All' ? true : false);
		if(!preFixStr){ preFixStr = '';}
		for(var saFormDataId in saFormData){
			var formItem = saFormData[saFormDataId];
			var typeStr = typeof formItem;
			if((typeStr.indexOf('Object') > -1)||(typeStr.indexOf('object')> -1)){
				if((saIncl)|| (printAll) ||(saInArray(formItem["name"],saFormElements))){
//					(saLevel == Null ? saLevel = 0 :  saLevel++);
					preFixStr2 = preFixStr + (preFixStr !='' ? '' : '(') + saFormDataId + (preFixStr !='' ? '.' : ') ');
					saFormPrintFormData(formItem, saFormElements, opDoc, preFixStr2, true);
				}
			} else {
				opDoc.writeln('<b>'+preFixStr+''+saFormDataId+'</b>' +'='+formItem+'<br> ');
				lines++;
			}
		}
	}
	return lines;	
 } 
 
 function sabr2nl(saFormDataAr){  
 	saRegEx = new RegExp('<<br>>', 'g');
	if(saFormDataAr){	
		for(var saFormDataId in saFormDataAr){
			var formItem = saFormDataAr[saFormDataId];
			var typeStr = typeof formItem;
			if((typeStr.indexOf('Object') > -1)||(typeStr.indexOf('object')> -1)){
				sabr2nl(formItem);
			} else {
				if((saFormDataId == 'value') && 
						((typeStr.indexOf('String') > -1)||(typeStr.indexOf('string')> -1))){
						tmp = saFormDataAr[saFormDataId]
						tmp2= tmp.replace(saRegEx,'\n');
						saFormDataAr[saFormDataId] = tmp2;
				} 
			}
		}
	}
	return saFormDataAr;	
 } 

function saAddSendFormElement(saSendForm, saElementName){
		if(isMacIE()){
			saTemplateNode = saGetChildById(saSendForm,'empty');
			newNode = saTemplateNode.cloneNode();
		}else{
			newNode =  document.createElement('Input');
			newNode.setAttribute('type','hidden');
		}
		newNode.setAttribute('id',saElementName);
		newNode.setAttribute('name',saElementName);
		newNode.setAttribute('value','');
		saSendForm.appendChild(newNode);
		return saSendForm.lastChild;
	}

 // var saFormElements = new Array ('myRadio','myList','myCheckBox');

function saFormSetSendForm(saFormData, saSendForm, saSendElements, createSendElements){	
	var saSendFormElementId, dataElementId;
	if(typeof(saSendForm)!= "object"){
		var saFormArr = document.getElementsByName(saSendForm);
		if(!saFormArr){ return false } // form does not exist
		var saSendForm = saFormArr[0];
	}
	if(saFormData){
		var k=0;
		var setAll = (saSendElements == 'All' ? true : false);
		for(var i=0;i<saFormData.length; i++){
			var dataElementId = (saFormData[i].id !='' ? saFormData[i].id : saFormData[i].name); 
			if((setAll) || (saInArray(dataElementId, saSendElements))){
				switch(saFormData[i].type){
					case 'password':
					case 'text':
					case 'textArea':
					case 'textarea':
					case 'hidden':
						saSendFormElementId = dataElementId;
						saElement = saGetChildById(saSendForm,saSendFormElementId);
						if(!saElement){
							saElement = saAddSendFormElement(saSendForm,saSendFormElementId);
						}
						saElement.setAttribute('value',saFormData[i].value);
					break;
					case 'select':
					case 'select-one':
					case 'select-multiple':
						saSendFormElementId = dataElementId+'_ndx';
						saElement = saGetChildById(saSendForm,saSendFormElementId);
						if(!saElement){
							saElement = saAddSendFormElement(saSendForm,saSendFormElementId);
						}
						saElement.setAttribute('value',saFormData[i].value);
						saSendFormElementId = dataElementId;
						saElement = saGetChildById(saSendForm,saSendFormElementId);
						if(!saElement){
							saElement = saAddSendFormElement(saSendForm,saSendFormElementId);
						}
						saElement.setAttribute('value',saFormData[i].value);
					break;
					case 'radio':
						saSendFormElementId = dataElementId;
						saElement = saGetChildById(saSendForm,saSendFormElementId);
						if(!saElement){
							saElement = saAddSendFormElement(saSendForm,saSendFormElementId);
						}
						saElement.setAttribute('value',saFormData[i].value);
					break;
					case 'checkbox':
					case 'checkBox':
						saSendFormElementId = dataElementId;
						saElement = saGetChildById(saSendForm,saSendFormElementId);
						if(!saElement){
							saElement = saAddSendFormElement(saSendForm,saSendFormElementId);
						}
						saElement.setAttribute('value',(saFormData[i].checked ? 'True' : 'False'));
						saSendFormElementId = dataElementId+'_val';
						saElement = saGetChildById(saSendForm,saSendFormElementId);
						if(!saElement){
							saElement = saAddSendFormElement(saSendForm,saSendFormElementId);
						}
						saElement.setAttribute('value',saFormData[i].value);
					break;
					case 'checkbox_old':
						var formItem = saFormData[i]; // buttons array[int] of objects data
						var typeStr = typeof formItem;
						if((typeStr.indexOf('Object') > -1)||(typeStr.indexOf('object')> -1)){
							buttonsArr = formItem.buttons;
							for( var k=0;k<buttonsArr.length;k++){ // loop thru the buttons[int] array
								// process the button data objects 
								saSendFormElementId = dataElementId+'_'+k+'_ckd';
								saElement = saGetChildById(saSendForm,saSendFormElementId);
								if(!saElement){
									saElement = saAddSendFormElement(saSendForm,saSendFormElementId);
								}
								saElement.setAttribute('value',buttonsArr[k].checked);
								saSendFormElementId = dataElementId+'_'+k;
								saElement = saGetChildById(saSendForm,saSendFormElementId);
								if(!saElement){
									saElement = saAddSendFormElement(saSendForm,saSendFormElementId);
								}
								saElement.setAttribute('value',buttonsArr[k].value);
							}
						}
					break;
				}
			}
		}	
 	} 
}
