// ca2.js - functions for STAR Web Data Entry 
// Copyright © Cuadra Associates, Inc. 2005-2009. All rights reserved.
/*
$Rev:: 84            $:  Revision of last commit
$Author:: randy      $:  Author of last commit
$Date:: 2009-07-22 2#$:  Date of last commit
*/
if(!__ConfigVars) var __ConfigVars = new Object();
	__ConfigVars.imageDirectory="img/";	//Directory where images are stored. This gets prepended to some image filenames.
	__ConfigVars.blankImage="img/blank.gif";
	__ConfigVars.pendingImage="img/busy.gif";
	__ConfigVars.infoImage="img/warning.gif";
	__ConfigVars.errorImage="img/error.gif";
	__ConfigVars.undoIconName="caUndoButton";
	__ConfigVars.dimUndoIconName="caDimUndoButton";
	__ConfigVars.dimRedoIconName="caDimRedoButton";
	__ConfigVars.redoIconName="caRedoButton";
	__ConfigVars.focusedStyle="caFocused";
	__ConfigVars.mainFrameWindowName="mainFrame";
	__ConfigVars.loadingImageFrameName="msgFrame";
	__ConfigVars.MAXOCCLENGTH=1014;
	__ConfigVars.importPath="/cgi-bin/sfsimport.exe?skc";
	__ConfigVars.messageContainerPrefix="image_";	//Assuming this convention will speed up load times
	__ConfigVars.MaxOccurrencesToLoad=5;	//Max number of occurrences of a given field to load at one time
	__ConfigVars.DEBUGon=false;
	__ConfigVars.importPreviewWindowName="Upload Window";
	__ConfigVars.caChoices="caChoices";
	__ConfigVars.caSelections="caSelections";
	__ConfigVars.selectionPrefixString=">";
	__ConfigVars.newOptionColor="red";


if(!__GlobalVars) var __GlobalVars = new Object();
	__GlobalVars.whichAjaxFrameToggle=false;
	__GlobalVars.mdSource=null;
	__GlobalVars.fieldContainers=new Array();
	__GlobalVars.picklistTarget=null;
	__GlobalVars.pendingLookups=new Array();
	__GlobalVars.DEBUGwin=null;
	__GlobalVars.mainFrameObject=null;
	__GlobalVars.frameList=null;
	__GlobalVars.canCloseDEWindow=false;
	__GlobalVars.dirty=false;
	__GlobalVars.lastFocused=null;
	__GlobalVars.switchedFocus=false;
	__GlobalVars.picklistWindow=false;
	__GlobalVars.starwebFocus=null;
	__GlobalVars.thisFrameDoneLoading=false;
	__GlobalVars.bodyChildren=new Array();
	__GlobalVars.undoIcon=null;
	__GlobalVars.redoIcon=null;
	__GlobalVars.dimUndoIcon=null;
	__GlobalVars.dimRedoIcon=null;
	__GlobalVars.currentUndo=new Object();
	__GlobalVars.currentRedo=new Object();
	__GlobalVars.undoStack=new Array();
	__GlobalVars.redoStack=new Array();
	__GlobalVars.picklistWindows=new Array();
	__GlobalVars.authorityWindows=new Array();
	__GlobalVars.listBoxes=new Array();
	__GlobalVars.editorArray=new Array();
	__GlobalVars.fieldListSource="caRemember"

function add_js(filename) {
    var html_doc = document.getElementsByTagName('head').item(0);
    var js = document.createElement('script');
    js.setAttribute('language', 'javascript');
    js.setAttribute('type', 'text/javascript');
    js.setAttribute('src', filename);
    html_doc.appendChild(js);
    return false;
}
add_js("caMessages.js");

function noticeMD(evt){
	if (!evt) var evt = window.event;
	if(evt.target) __GlobalVars.mdSource = evt.target;
	else __GlobalVars.mdSource = evt.srcElement;
}

function caRefreshPicklist(tar){	//always called in scope of window.parent?
	var command=window.parent.opener.__GlobalVars.picklistWindows[tar];
	window.parent.opener.eval(command);
}

function caRefreshAction(elemName, immediate){
	var elem = document.getElementsByName(elemName)[0];
	if(elemName.starwebObject) elem=elemName;
	if(!elem) elem=__GlobalVars.containerCollection.getFirstField();
	while(elem!=null){
		if(parseFieldName(elem.HTMLelement.name,"originalname")==elemName) break;
		elem=__GlobalVars.containerCollection.getNextField(elem);
	}
	if(elem==null) {
		alert(caCannotFindTarget);
		return -1;
	}

	var act = elem.refreshAction;
	if(!act || !__GlobalVars.listBoxes[act]) return;
	for(var i=0;i<__GlobalVars.listBoxes[act].length;i++){			
		var qItem=new queueItem("Refresh", {target:__GlobalVars.listBoxes[act][i].HTMLelement});
		if(immediate){
			caExecRefresh(qItem);
		}
		else{
			var lookupID=queueUp(qItem,"Synch");
		}
	}
}

function caNotifyUpdate(windowName){	//this could be called by an authority window
	var aWin=__GlobalVars.authorityWindows[windowName];
	__GlobalVars.authorityWindows[windowName]=null;
	if(aWin){
		caRefreshAction(aWin, true);
		//Also need to refresh other lists in __GlobalVars.listBoxes
	}
}

function eqAttachEvent(elem, evt, func){
	if(evt.length<2) return false;
	var	evtRoot=evt;
	//if(evtRoot.substring(0,2)=="on") root=root.substring(2,root.length);
	if(evtRoot.substring(0,2)=="on") evtRoot=evtRoot.substring(2,evtRoot.length);
	if(elem.attachEvent){
		if(!elem.attachEvent("on"+evtRoot,func)) alert("Failed to attach event");
	}
	else if (elem.addEventListener){
		elem.addEventListener(evtRoot,func,false);
	}
}

function eqParentElement(elem){
	if(!elem) return -1;
	else if(elem.parentElement) return elem.parentElement;
	else if(elem.parentNode) return elem.parentNode;
	
}

function caDropMenuOutDispatch(){
	if(!__GlobalVars || !__GlobalVars.frameList) return;
	for(var i=0;i<__GlobalVars.frameList.length;i++){
		try{
			if(__GlobalVars.frameList[i]!=this.window) __GlobalVars.frameList[i].caDropMenuOut();
		} catch (e){}
	}
}

var prevEvt;
function keyPressLaunchesOnclick(evt){
	if (!evt) var evt = window.event;
	var target;
	if(evt.target) target=evt.target;
	else target=evt.srcElement;

	if(evt==prevEvt) {	//added because it seems to be sending this event twice!
		prevEvt=evt;
		return;
	}
	prevEvt=evt;
	if(evt.keyCode==13) {
		if(target.onmouseup.toString().indexOf("caxDelete")>-1){
			caDeleteOccurrence(target);
		}
		else if(target.onmouseup.toString().indexOf("caExecPicklist")>-1){
			__GlobalVars.picklistTarget=target.starwebObject.starwebParent.HTMLelement;
			caPicklist(target.starwebObject.starwebParent.HTMLelement);
		}
		else{
			target.onmouseup();
		}
	}
}

var tempChildren = new Array();
function getChildren(root){
	tempChildren = new Array();
	getChildrenR(root);
	return tempChildren;
}

function getChildrenR(root){
	tempChildren[tempChildren.length]=root;
	var children=new Array();
	if(root.children) children=root.children;
	else if(root.childNodes) children=root.childNodes;
	for(var i=0;i<children.length;i++){
		getChildrenR(children[i]);
	}
}

function caHiLiteLink(evt){
	if(__ConfigVars.focusedStyle=="") return;
	if (!evt) var evt = window.event;
	var target;
	if(evt.target) target=evt.target;
	else target=evt.srcElement;

	if(target.className.indexOf(__ConfigVars.focusedStyle)==-1) target.className+=" "+__ConfigVars.focusedStyle;
}

function caLoLiteLink(evt){
	if(__ConfigVars.focusedStyle=="") return;
	if (!evt) var evt = window.event;
	var target;
	if(evt.target) target=evt.target;
	else target=evt.srcElement;
	var styleIndex = target.className.indexOf(" "+__ConfigVars.focusedStyle);
	if(syleIndex=-1) styleIndex = target.className.indexOf(__ConfigVars.focusedStyle);
	if(styleIndex>-1){
		target.className = target.className.substring(0,styleIndex);
	}
}

function caCloseWindow(windowObject, closeDEwindows){
	try{
		if(windowObject.frames.length>0){}	//just a test to see if windowObject exists
	}
	catch(e){	//windowObject doesn't exist anymore
		return;
	}
	if(closeDEwindows==false){ 

		for(var i=0;i<windowObject.frames.length;i++){
			if(windowObject.frames[i].__GlobalVars.containerCollection.fieldContainers.length>0){//must be DE frame
//				windowObject.opener.opener.__GlobalVars.childWindows[windowObject.parent.parent.__GlobalVars.childWindows.length]=windowObject;
				var firstWindow=windowObject;
				while(firstWindow.parent!=firstWindow || firstWindow.opener){
					firstWindow=firstWindow.parent;
					if(firstWindow.opener) firstWindow=firstWindow.opener;
				}
				if(!firstWindow.__GlobalVars) firstWindow.__GlobalVars = new Object();
				if(!firstWindow.__GlobalVars.childWindows) firstWindow.__GlobalVars.childWindows=new Array();
				firstWindow.__GlobalVars.childWindows[firstWindow.__GlobalVars.childWindows.length]=windowObject;
				return;
			}
		}
	}
	try{
		for(var i=0;i<windowObject.frames.length;i++){
			if(windowObject.frames[i].__GlobalVars && windowObject.frames[i].__GlobalVars.childWindows){
				for(var j=0;j<windowObject.frames[i].__GlobalVars.childWindows.length;j++){
					caCloseWindow(windowObject.frames[i].__GlobalVars.childWindows[j], closeDEwindows);
				}
			}
		}
	}catch(e){}
	try{
		if(windowObject.__GlobalVars && windowObject.__GlobalVars.childWindows){
			for(var k=0;k<windowObject.__GlobalVars.childWindows;k++){
				caCloseWindow(windowObject.__GlobalVars.childWindows[k], closeDEwindows);
			}
		}
	}catch(e){}
	try{
		windowObject.__GlobalVars.canCloseDEWindow = true;
		windowObject.close();
	}catch(e){}
}

function caLoadWindows(){
	var windowName=document.getElementsByName('__friendlyWindow')[0].value;
	if(windowName=="") return;
	if(windowName=="noFriendlyWindow") {
		debugger;	
	}
	document.getElementsByName('__friendlyWindow')[0].value="noFriendlyWindow";
	var windowHandle=window.open('',windowName);	//If the name is wrong, an unwanted window will open. Eeek!
	if(!windowHandle.__GlobalVars) {
		windowHandle.close();	//Unsure whether to leave this in or not....
		return;
	}
	if(!__GlobalVars.childWindows) __GlobalVars.childWindows = new Array();
	for(var j=windowHandle.__GlobalVars.childWindows.length-1;j>=0;j--){
		try{
			__GlobalVars.childWindows[__GlobalVars.childWindows.length]=windowHandle.__GlobalVars.childWindows[j];
		}catch(e){}
			windowHandle.__GlobalVars.childWindows.length--;
		
	}
}

function NodeStruct(node, nodeID){
	this.node=node;
	this.nodeID=nodeID;
}

function caGetNextTag(topNode, nodeStruct){
	if(!nodeStruct){
		if(topNode.childNodes.length>0){
			return new NodeStruct(topNode.childNodes[0], "0");
		}
		else return null;
	}
	if(nodeStruct.node.childNodes[0]) return new NodeStruct(nodeStruct.node.childNodes[0], nodeStruct.nodeID+".0");
	var depth;
	var node=topNode;
	var indices = nodeStruct.nodeID.split(".")
	for(depth=0;depth<indices.length-1;depth++){	//don't go to the bottom cuz we already know it doesn't have kids
		node=node.childNodes[indices[depth]];
	}
	while(node!=topNode){
		var lastDigit=parseInt(indices.pop())+1;
		while(node.childNodes[lastDigit] && !node.childNodes[lastDigit].getAttribute) lastDigit++;
		if(node.childNodes[lastDigit]){
			indices.push(lastDigit);
			return new NodeStruct(node.childNodes[lastDigit], indices.join("."));
		}
		else{
			node=node.parentNode;
			depth--;
		}
	}
	return null;
}

function caGetFinalChild(elem){
/*
	if(elem.children){
		while(elem.children.length>0){
			elem=elem.children[elem.children.length-1];
		}
		return elem;
	}
	else if (elem.childNodes){
		while(elem.childNodes.length>0){
			elem=elem.lastChild;
		}
		return elem;
	}*/
	while(elem.lastChild){
		elem=elem.lastChild;
	}
	if(elem.nodeType==3){
		if(elem.previousSibling) elem=elem.previousSibling;
		else elem=elem.parentNode;
	}
	return elem;
}

function runQueueDispatch(){
	try{
		if(	__GlobalVars.mainFrameObject && __GlobalVars.mainFrameObject.runQueue) __GlobalVars.mainFrameObject.runQueue();
		else if(window.parent && window.parent.__GlobalVars 
			&& window.parent.__GlobalVars.mainFrameObject && window.parent.__GlobalVars.mainFrameObject.runQueue) window.parent.__GlobalVars.mainFrameObject.runQueue();
	}catch(e){}
}

function checkForTab(evt){
	if (!evt) var evt = window.event;
	if(evt.keyCode==9 ){//pressed tab, skip to next field
//debugPrint("tab")
		runQueueDispatch();
	}
	if(evt.keyCode==13){//pressed enter, skip to next field
		runQueueDispatch();
	}
	if(evt.keyCode==78&&evt.altKey){//pressed Alt-n, skip to next field
		runQueueDispatch();
	}
}

function caSetFieldListSource(){
	var source=document.getElementsByName("__caFieldListSource")[0]
	if(source)__GlobalVars.fieldListSource=source.value;
}

function caOnLoad(){
	window.focus();
	try{
		if(window.parent.document.getElementById("IFrame-314159")) return null;	//This is a fake IFrame
	}catch(e){}
	if(document.getElementsByName("__sessionNumber")[0] && (window.name=="" || window.name.substring(0,4)=="Main")){
		window.name="Main"+document.getElementsByName("__sessionNumber")[0].value;
	}
	//Set __GlobalVars.fieldListSource first
	caSetFieldListSource();
	if(document.getElementsByName(__GlobalVars.fieldListSource)[0] && document.getElementsByName(__ConfigVars.caSelections)[0]){
		caInitSelections(__ConfigVars.caSelections,__GlobalVars.fieldListSource,__ConfigVars.caChoices);
	}
	if(document.getElementsByName('__friendlyWindow')[0]) caLoadWindows();
	eqAttachEvent(document,'mousedown', noticeMD);
	eqAttachEvent(document.body,'click', caDropMenuOutDispatch);
	__GlobalVars.frameList = window.parent.frames;
	if(document.getElementsByName("__dirtyFlag")[0] && document.getElementsByName("__dirtyFlag")[0].value=="Dirty"){
		window.parent.__GlobalVars.dirty=true;
	}
	
	displayCustomReportConditional();

	var allChildren = getChildren(document.body); 
	__GlobalVars.bodyChildren = allChildren;

	for(var i=0;i<allChildren.length;i++){
		allChildren[i].caElementIndex=i;
	}

	var containerCount=0;	
	for(var i=0;i<allChildren.length;i++){
		var currentTag=allChildren[i];
		try{
		if(!currentTag.getAttribute("starweb_fieldcontainer")) continue;
		__GlobalVars.containerCollection.append(new FieldContainer(currentTag, i));
		i=caGetFinalChild(currentTag).caElementIndex;
		containerCount++;
		}catch(e){}
	}
	
//	endTime=new Date().getTime();
	
	var links=document.getElementsByTagName("A");
	for(var i=0;i<links.length;i++){
		currentTag=links[i];
		if(!currentTag.linkEvtsAdded){
			eqAttachEvent(currentTag,'focus',caHiLiteLink);
			eqAttachEvent(currentTag,'blur',caLoLiteLink);
			if(currentTag.onmouseup) eqAttachEvent(currentTag,'keypress',keyPressLaunchesOnclick);
			currentTag.linkEvtsAdded = true;
		}
	}

	var undo=document.getElementsByName(__ConfigVars.undoIconName)[0];
	if(undo) window.parent.__GlobalVars.undoIcon=undo;
	var redo=document.getElementsByName(__ConfigVars.redoIconName)[0];
	if(redo) window.parent.__GlobalVars.redoIcon=redo;
	var dimUndo=document.getElementsByName(__ConfigVars.dimUndoIconName)[0];
	if(dimUndo) window.parent.__GlobalVars.dimUndoIcon=dimUndo;
	var dimRedo=document.getElementsByName(__ConfigVars.dimRedoIconName)[0];
	if(dimRedo) window.parent.__GlobalVars.dimRedoIcon=dimRedo;
	
	eqAttachEvent(document,'mouseup', runQueueDispatch);	
	eqAttachEvent(document.body,'keyup', checkForTab);

	if(containerCount==0) {
		for(var i=0;i<allChildren.length;i++){
			try{	//.save class removes .getAttribute method
			if(allChildren[i].getAttribute){
				if(allChildren[i].tagName=="A" || allChildren[i].tagName=="INPUT"){
					eqAttachEvent(allChildren[i],'focus',caEstablishElement);
					eqAttachEvent(allChildren[i],'blur',caDisestablishElement);
				}
				if(allChildren[i].getAttribute("starweb_focus")) __GlobalVars.starwebFocus=allChildren[i];//try{allChildren[i].focus();}catch(e){}
			}}catch(e){}
		}
		try{
			if(window.name==__ConfigVars.mainFrameWindowName || window.parent.mainDoneLoading) {
				window.parent.mainDoneLoading=true;
				var loadingImage = window.parent.frames[__ConfigVars.loadingImageFrameName];
				if(loadingImage) loadingImage=loadingImage.document.getElementById("loadingImage");
				else loadingImage=null;
				if(loadingImage) loadingImage.style.display="none";//src=__ConfigVars.blankImage;
			}
		}catch(e){}
		__GlobalVars.thisFrameDoneLoading=true;
		if(!window.parent.frames) return;
		for(var i=0;i<window.parent.frames.length;i++){
			if(!window.parent.frames[i].__GlobalVars || window.parent.frames[i].__GlobalVars.thisFrameDoneLoading==false) return;
		}
		
		caDispatchStarwebFocus();
		return;	//The following only apply to data entry pages	
	}
	__GlobalVars.undoIcon=window.parent.__GlobalVars.undoIcon
	__GlobalVars.redoIcon=window.parent.__GlobalVars.redoIcon;
	__GlobalVars.dimUndoIcon=window.parent.__GlobalVars.dimUndoIcon;
	__GlobalVars.dimRedoIcon=window.parent.__GlobalVars.dimRedoIcon;
	setUndoIcons();

	if(window.parent.__GlobalVars.undoIcon){
		 __GlobalVars.currentUndo = new UndoTransaction();
		 __GlobalVars.currentRedo = new UndoTransaction();		 
	}
	
	__GlobalVars.frameList = window.parent.frames;
	if(containerCount!=0){
		eqAttachEvent(window,'beforeunload', caOnBeforeUnload);
		for(var i=0;i<window.parent.frames.length;i++){
			if(!window.parent.frames[i].__GlobalVars) window.parent.frames[i].__GlobalVars= new Object();
			window.parent.frames[i].__GlobalVars.mainFrameObject=this.window;
		}
		for(var i=0;i<window.parent.frames.length;i++){
			window.parent.frames[i].__GlobalVars.mainFrameObject=this.window;
		}
	}
	if(window.name==__ConfigVars.mainFrameWindowName) {
		window.parent.mainDoneLoading=true;
		var loadingImage = window.parent.frames[__ConfigVars.loadingImageFrameName];
		if(loadingImage) loadingImage=loadingImage.document.getElementById("loadingImage");
		else loadingImage=null;
		if(loadingImage) loadingImage.style.display="none";//src=__ConfigVars.blankImage;
		caDispatchStarwebFocus();
	}	

	if(__ConfigVars.DEBUGon)__GlobalVars.DEBUGwin=window.open("asynchHints.html","DEBUGWIN");
	if(__ConfigVars.DEBUGon && __GlobalVars.DEBUGwin==null) debugger;
}

function getWindowFrames(){
	windowList=new Array();
	var i=0;
	var topWindow=window;
	while(i<10000 & topWindow!=topWindow.parent){
		topWindow=topWindow.parent;
		i++;
	}
	getWindowFr(topWindow);
	return windowList;
}

var windowFrList=new Array();
function getWindowFr(rootWindow){
	try{
		if(!rootWindow) return;
		windowList[windowList.length]=rootWindow;
		for(var i=0;i<rootWindow.frames.length;i++){
			getWindowFr(rootWindow.frames[i]);
		}
	}catch(e){return;}
}

function caDispatchStarwebFocus(){
	if(window.name==__ConfigVars.mainFrameWindowName) __GlobalVars.mainFrameObject=window;
	var allWindows=getWindowFrames();
	if(__GlobalVars.mainFrameObject && __GlobalVars.mainFrameObject.__GlobalVars.containerCollection && __GlobalVars.mainFrameObject.__GlobalVars.containerCollection.fieldContainers.length>0){
		caFocusMainFrame(); 
		return true;
	}
	for(var i=0;i<allWindows.length;i++){
		try{
			if(allWindows[i].__GlobalVars.starwebFocus){
				allWindows[i].__GlobalVars.starwebFocus.focus();
				return true;
			}
		}
		catch(e){ 
			continue;
		}
	}
	return false;
}

function caFocusMainFrame(){
	var haveFocused=false;
	var field=__GlobalVars.containerCollection.getFirstField();
	if(__GlobalVars.starwebFocus){
		try{
			__GlobalVars.starwebFocus.focus();
			haveFocused=true;
		}
		catch(e){}
	}
	while(haveFocused==false){
		try{
			field.HTMLelement.focus();
			haveFocused=true;
		}
		catch(e){
			field=__GlobalVars.containerCollection.getNextField(field);
		}
	}	
}

function caEstablishElement(elem){
	if(!elem) return;
	if(elem.target) elem=elem.target;
	else if (elem.srcElement) elem=elem.srcElement;
	
	var firstMatch=null;
	var allowFocus=true;
	if(!elem) return -1;
	if(elem.starwebObject){
		if(elem.starwebObject.starwebParent.starwebParent){
			var index = parseFieldName(elem.name,"occurrencenumber")-1;	//check that next and prev repeaters are loaded
			if(elem.starwebObject.starwebParent.starwebParent.repeaters[index-1] && !elem.starwebObject.starwebParent.starwebParent.repeaters[index-1].fields){
				caAddToTree(elem.starwebObject.starwebParent.starwebParent.repeaters[index-1].HTMLelement);
			}
			if(elem.starwebObject.starwebParent.starwebParent.repeaters[index+1] && !elem.starwebObject.starwebParent.starwebParent.repeaters[index+1].fields){
				caAddToTree(elem.starwebObject.starwebParent.starwebParent.repeaters[index+1].HTMLelement);
			}
		}
		for(var i=0;i<elem.starwebObject.dependencies.length;i++){		//Check all of the to-be-focused element's dependencies
			var foundOcc=false;
			var field=__GlobalVars.containerCollection.getFirstField();
			while(field!=null){
				if(parseFieldName(field.HTMLelement.name,"originalname")==elem.starwebObject.dependencies[i]){				
					if((field.validity=="TRUE" && field.HTMLelement.value!="")||(field.lookupAction==null && field.HTMLelement.value!="")){
//||(field.validity="UNKNOWN" && field.lookupAction==null)){						
						foundOcc=true;	//Found a valid occ
						break;
					}
					else if(!firstMatch) firstMatch=field;
				}
				field=__GlobalVars.containerCollection.getNextField(field);
			}
			if(!foundOcc){
				if(firstMatch) firstMatch.HTMLelement.focus();
				else __GlobalVars.lastFocused.focus();
				allowFocus=false;
//				var args={message:"You must enter a valid entry for "+elem.starwebObject.dependencies[i]+" before you may edit "+elem.starwebObject.templateName, target:elem};
				var args={target:elem, message:firstMatch.name+" "+caDependencyInvalid};
				var alertID=queueUp(new queueItem("AlertBox", args),"Synch");
				break;
			}
		}
	}
	if(allowFocus){
		__GlobalVars.lastFocused=elem;
		if(elem.className)elem.className+=" "+__ConfigVars.focusedStyle;
		else elem.className=__ConfigVars.focusedStyle;
	}
}

function caDisestablishElement(elem){
	if(elem.target) elem=elem.target;
	else if (elem.srcElement) elem=elem.srcElement;
	if(elem.className==__ConfigVars.focusedStyle) elem.className="";
	if(elem.className.indexOf(" "+__ConfigVars.focusedStyle)>-1){	//It is possible to disEstablish without first Establishing
		elem.className = elem.className.substring(0,elem.className.indexOf(" "+__ConfigVars.focusedStyle));
	}
}

function caEstablishElementRTIE(evt)
{
	evt= (evt) ? evt : (window.event) ? window.event : ""
 	var elem = evt.target ? evt.target : evt.srcElement ;
	elem.contentWindow.document.body.className='richtext richtextx';
	// Reset buttons according to where the caret is.
	runQueueDispatch();
	handleBIUSS(evt,elem.RTholdid);
}
function caDisestablishElementRTIE(evt)
{
	evt= (evt) ? evt : (window.event) ? window.event : ""
 	var elem = evt.target ? evt.target : evt.srcElement ;
	elem.contentWindow.document.body.className='richtextx';
	// Also reset buttons to normal
	resetButtonstoNormal();
	// Store current value in the Client textarea for this RichText control.
	var target=textareaFromOriginalName(elem.RTholdid);
	var editor_index=elem.contentWindow.document.body.RTholdindex;
	target.value=__GlobalVars.editorArray[editor_index].getHTMLString() ;
	fieldBlur(evt,"RT");
}
function caEstablishElementRTFF(evt)
{
	evt= (evt) ? evt : (window.event) ? window.event : ""
 	var elem = evt.target ? evt.target : evt.srcElement ;
	if(evt.target)
	{
		document.getElementById(elem.RTholdid).className='richtextFirefoxFrame';
		elem.body.className='richtextFirefoxBackground richtextx'; // works if richtext control set to richtext.css in caDE.js
	}
	// Reset buttons according to where the caret is.
	handleBIUSS(evt,elem.RTholdid);  

}

function caDisestablishElementRTFF(evt)
{
	if (__G_STOPBLUR)
	{
		__G_STOPBLUR=false;
		return;
	}
	evt= (evt) ? evt : (window.event) ? window.event : ""
  	var elem = evt.target ? evt.target : evt.srcElement ;
	if(evt.target)
	{
		var zframe=document.getElementById(elem.RTholdid);
		zframe.className='';
		elem.body.className='';
		elem.body.className='richtextx';
		handlePasteRTFF(elem);
		fieldBlur(evt,"RT");
	}
	// Also reset buttons to normal
	resetButtonstoNormal();
}
function resetButtonstoNormal()
{
	if (BUTTONARRAY.length != 0)
	{
		for (var ix=0; ix < 5; ix++)
		{
			SETBUTTON(BUTTONARRAY[ix],"NORMAL");
		}
	}	
	
	
}
/*
caCreateLookup(Element textField, Int actionID, Int queueID)
Writes a field lookup into a frame and submits the lookup
Returns -	
Parameters -
	Element textField - the input element that is being looked up
	Integer actionID - the ID number of the STARWeb action list containing the lookup operation
	Integer queueID - the ID number of the queue event that contains the lookup request
*/
var picklistWindow; 
function caCreateLookup(textField, actionID, queueID, targetWindow, optionList) {
	var lookup=false;
	if(!queueID||queueID=="undefined") return;
	try{
		//Only do this for picklists
		if(!targetWindow) lookup=true;
		if(targetWindow && __GlobalVars.picklistWindow && !__GlobalVars.picklistWindow.closed) targetWindow=__GlobalVars.picklistWindow.name;
	}catch(e){}
	if(!targetWindow) targetWindow="_self";
		
	var x = '<!DOCTYPE HTML PUBLIC "//IETF//DTD HTML 4.01//EN">\n';
	x += '<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></meta>\n';
	x += '<script language="JavaScript" SRC="caDE.js"></script>\n';
	x += '</head><body onload="document.forms[0].submit();">';
	x += '<form name="form" method="post" action="'+document.forms[0].action+
	'" accept-charset="ISO-8859-1"'+' target="'+targetWindow+'">\n';
	x += caWriteInput('___TestUTF8',String.fromCharCode(228)); // umlaut-a
	x += caWriteInput('__currentvalue', typeof HTML_to_STAR!="undefined"?HTML_to_STAR(textField.value):textField.value);
	x += caWriteInput('__a1',textField.value);
	x += caWriteInput('__pageid',document.getElementsByName("__pageid")[0].value);
	x += caWriteInput('__action',actionID);
	x += caWriteInput('__queueID',queueID);
	x += caWriteInput('__jsModel',"New");
	// append Key values
	if(textField.tagName) x += caGetKeyFields(textField);
	x += '</form></body></html>' ;

	if (targetWindow != "_self" || optionList) {	
		var picklistWindow = window.open('',targetWindow,optionList);  // shows in Firefox
		if(!__GlobalVars.childWindows) __GlobalVars.childWindows = new Array();
		__GlobalVars.childWindows[__GlobalVars.childWindows.length] = picklistWindow;
	}
	var tempIFrame=document.createElement('iframe');
	tempIFrame.setAttribute('id','IFrame'+queueID);
	tempIFrame.style.border='0px';
	tempIFrame.style.width='0px';
	tempIFrame.style.height='0px';
	IFrameObj = document.body.appendChild(tempIFrame);
	IFrameObj.contentWindow.document.open() ;
	IFrameObj.contentWindow.document.write(x) ;
	IFrameObj.contentWindow.document.close() ;
	if(!lookup)try{picklistWindow.focus();}catch(e){}
	__GlobalVars.picklistWindow = picklistWindow;
	if(queueID==-314159) document.body.removeChild(tempIFrame);		//Fake IFrame, so remove it
}

function caGetKeyFields(textField) {

  var y = "" ;
  //var form = textField.form ;
  var form = window.document.forms[0];  // found a case where textField existed but textField.form did not.

  var textFieldInputName = parseFieldName(textField.name,"inputfieldname");

  var textFieldOcc = parseFieldName(textField.name,"occurrencenumber");


  for ( var i = 0 ; i < form.elements.length ; i++ ) {
    var elem = form.elements[i] ;
	keyf= elem.getAttribute("starweb_keyfield");
	//if ( elem.starweb_keyfield ) {
	if ( keyf) {
	  var myname = elem.name;
	
	  // check.  if the keyfield is the same input field as the "current" field, ignore if not also same occ
	  var myFieldInputName = parseFieldName(elem.name,"inputfieldname");
	  if ( myFieldInputName == textFieldInputName ) {
		 if ( textFieldOcc != parseFieldName(elem.name,"occurrencenumber") ) continue;
	  }
	  var pos = myname.lastIndexOf('__') ;
	  if ( pos >= 0 ) myname = myname.substr(pos+2) ;
	  if ( elem.type == 'text' ) {
	    y += caWriteInput(myname,elem.value) ;
	  }
	  else if ( elem.type == 'radio' || elem.type == 'checkbox' ) {
	    if ( elem.checked ) y += caWriteInput(myname,elem.value) ;
	  }
	  else if ( elem.type.substr(0,6) == 'select' ) {
	    y += caWriteInput(myname,elem.value) ;
	  }
	} // if starweb_keyfield
  }
  return y ;
}
/*
caWriteInput(String name, String value)
Returns - 
	the HTML for an input element with name and value
Parameters - 
	String name  - the name of the input element
	String value - the value of the element	
*/
function caWriteInput(name,value) {
  return '<input name="' + name + '" value=\'' + value + '\'>\n' ;
}

function caSubmit(opname,fn,act,a1,a2,a3,targetWindow,closeWindow,checkRequired,op){
	try{
	fn.document.__form.__action.value = act;
	}catch(e){
		alert(caWaitForFormToLoad);
		return;
	}
	fn.document.__form.__a1.value = a1;
	fn.document.__form.__a2.value = a2;
	fn.document.__form.__a3.value = a3;
	var input=fn.document.createElement("input");
	input.name="__jsModel";
	input.type="hidden";
	input.value="New";	
	fn.document.__form.appendChild(input);
	var allWindows = getAllKnownWindows();
	if(window.name.substring(0,4)=="Main" && targetWindow=="_self" && this.__GlobalVars.childWindows && this.__GlobalVars.childWindows.length>0){
		//If this is the main window and there are child windows open, then we must select a friendly window to shuffle our child window list into
		var actualWindow;
		for(var j=0;j<this.__GlobalVars.childWindows.length;j++){
			try{
				var temp=this.__GlobalVars.childWindows[j].name;	//if it passes this test, it is a real window
				if(temp==this.name || this.__GlobalVars.childWindows[j].closed) continue;	//this window cannot be the friendly window
				actualWindow=j;
				break;
			}catch(e){}
		}
		if(j!=__GlobalVars.childWindows.length){	//found an actual window
			var input=fn.document.createElement("input");
			input.name="__friendlyWindow";
			input.type="hidden";
			input.value=__GlobalVars.childWindows[j].name;
			var fw=fn.document.getElementsByName("__friendlyWindow")[0];
			if(fw) fw.parentNode.removeChild(fw);	//Have to remove this one before we can add another
			fn.document.__form.appendChild(input);
			for(var i=0;i<__GlobalVars.childWindows.length;i++){
				if(!__GlobalVars.childWindows[j].__GlobalVars.childWindows) __GlobalVars.childWindows[j].__GlobalVars.childWindows=new Array();
				__GlobalVars.childWindows[j].__GlobalVars.childWindows[__GlobalVars.childWindows[j].__GlobalVars.childWindows.length]=__GlobalVars.childWindows[i];
			}
		}
	}
	if(opname=="Recall" && window.parent.__GlobalVars.dirty==true) checkRequired=true;
	if (closeWindow=="exit"){
		var openRecords=false;
		var dirtyWindow=null;
		var lastField;
		for(var i=0;i<allWindows.length;i++){
			try{				//Also need to make sure that dirtyWindow exists in same session as this AT.
				if(allWindows[i].__GlobalVars.containerCollection.fieldContainers.length>0 && allWindows[i].document.forms[0].__sessionNumber.value==document.forms[0].__sessionNumber.value){
					openRecords=true;
					lastField=allWindows[i].__GlobalVars.lastFocused;
					if(allWindows[i].__GlobalVars.dirty==true){	
						dirtyWindow=allWindows[i];
						break;
					}
				}
			}catch(e){ 
				continue;
			}
		}
		if(openRecords==true){	//Dirty DE window is open
			var confirmMessage= dirtyWindow!=null?caDataEntryCancelDirty:caDataEntryContinueClean;
			if(!confirm(confirmMessage)){	//Cancelled close action
				try{
					lastField.focus();
					return;
				}catch(e){ return;}
			}
		}
//		if(parent.frames.length>0) caCloseWindow(parent, true);
//		else{
			try{
			for(var i=0;i<__GlobalVars.childWindows.length;i++){
					caCloseWindow(__GlobalVars.childWindows[i], true);

			}}catch(e){}
//		}
		if(targetWindow!="_parent") targetWindow="_self";
	}
	fn.document.__form.target = targetWindow;
	
	if(closeWindow=="only"){
		if(this.parent.frames.length>0){	//this close button is in a framed window
			window.parent.close();			
			window.parent.opener.__GlobalVars.picklistWindow=null;
			try{window.parent.opener.__GlobalVars.picklistTarget.focus();}
			catch(e){}
		}
		else{
			window.close();
			window.parent.opener.__GlobalVars.picklistWindow=null;
			window.opener.__GlobalVars.picklistTarget.focus();
		}
		
		return;
	}
	else if(closeWindow=="True"){
		window.close();
	}
	if (targetWindow == "Response") {  // Paste from picklist
    // In picklist window here
		var i=0;
		while(i<5){
			try{
				var foo = window.parent.opener.frames["Response"];
				var tempTar = "Response12345";
				foo.name = tempTar;
				fn.document.__form.target = tempTar;
				fn.document.__form.submit();
				foo.name = "Response";
				try{
					window.parent.opener.__GlobalVars.picklistWindow=null;
					window.parent.opener.__GlobalVars.picklistTarget.focus();
				}catch(e){}
				window.parent.close();
				return;
			}
			catch(e){
				i++;
			}
		}
	}
	else if (targetWindow != "_self" || op) {
		if(opname=="Cancel"){
			for(var i=0;i<parent.frames.length;i++){
				if(parent.frames[i].__GlobalVars && parent.frames[i].__GlobalVars.childWindows){
					for(var j=0;j<parent.frames[i].__GlobalVars.childWindows.length;j++){
						try{
							if(!parent.__GlobalVars.childWindows) parent.__GlobalVars.childWindows=new Array();
							parent.__GlobalVars.childWindows[parent.__GlobalVars.childWindows.length]=parent.frames[i].__GlobalVars.childWindows[j];
						}catch(e){}
					}
				}
			}
			try{
				if(parent.__GlobalVars && parent.__GlobalVars.childWindows && parent.__GlobalVars.childWindows.length>0){	//Closes open picklist windows when record is cancelled
					for(var i=0;i<parent.__GlobalVars.childWindows.length;i++){
						caCloseWindow(parent.__GlobalVars.childWindows[i], false);
					}
				}
			}catch(e){}
			// Close the character map window (everywhere picklist might be closed)
			closeMapWindow();
		}
		if(targetWindow!="_parent"){
			var allow=true;
			for(var i=0;i<allWindows.length;i++){
				try{
				if(targetWindow==allWindows[i].name ){//&& ) {
					if(allWindows[i].__GlobalVars && allWindows[i].__GlobalVars.containerCollection && allWindows[i].__GlobalVars.containerCollection.fieldContainers.length>0){						
						allow=false;
						break;
					}
					for(var j=0;j<allWindows[i].frames.length;j++){
						if(allWindows[i].frames[j].__GlobalVars && allWindows[i].frames[j].__GlobalVars.containerCollection.fieldContainers.length>0){
							allow=false;
							break;
						}
					}
				}}catch(e){}
				if(allow==false){
					alert(caDataEntryWindowInUse);
					try{
						allWindows[i].frames[j].focus();
						allWindows[i].frames[j].__GlobalVars.lastFocused.focus();
					}catch(e){}
					return;
				}
			}
			if(!__GlobalVars.childWindows) __GlobalVars.childWindows = new Array();
			try{
			for(var i=0;i<parent.opener.__GlobalVars.childWindows.length;i++){
				if(targetWindow==parent.opener.__GlobalVars.childWindows[i].name){
					for(var j=0;j<parent.opener.__GlobalVars.childWindows[i].frames.length;j++){
						if(parent.opener.__GlobalVars.childWindows[i].frames[j].__GlobalVars && parent.opener.__GlobalVars.childWindows[i].frames[j].__GlobalVars.containerCollection
								&& parent.opener.__GlobalVars.childWindows[i].frames[j].__GlobalVars.containerCollection.length>0){
							alert(caDataEntryWindowInUse);
							try{
								allWindows[i].frames[j].focus();
								allWindows[i].frames[j].__GlobalVars.lastFocused.focus();
							}catch(e){}
							return;
						}
					}
				}
			}}catch(e){}
			var newWindow = window.open('', targetWindow, op) ;  // shows in Firefox?
			__GlobalVars.childWindows[__GlobalVars.childWindows.length] = newWindow;
		}
	}
	if(opname=="Update" || opname=="Cancel" || opname == "Copy" || opname=="Recall"){//Close open Authority windows
		var haveClosed=false;
		var doClose=true;
		cWindows=getChildWindows(window.parent);
		for(var i=0;i<cWindows.length;i++){
			if(!cWindows[i].closed && cWindows[i].name!= window.parent.name && cWindows[i].__GlobalVars){	
				for(var j=0;j<cWindows[i].frames.length;j++){
					if(cWindows[i].frames[j].__GlobalVars && cWindows[i].frames[j].__GlobalVars.containerCollection 
											&& cWindows[i].frames[j].__GlobalVars.containerCollection.fieldContainers.length>0){
						if(cWindows[i].frames[j].__GlobalVars.dirty){
							doClose=caConfirm(caConfirmCloseAuthorityWindow);
						}
						if (doClose)caCloseWindow(cWindows[i]); //We have an authority window
						else {
							cWindows[i].focus(); 
							return;
						}
						haveClosed=true;
						break;
					}
				}
			}
			if(haveClosed) break;
		}	
	}	
	if(opname=="Update" || opname=="Create" || opname == "Copy" || (opname=="Recall" && window.parent.__GlobalVars.dirty==true)  || (opname=="Search" && fn.__GlobalVars.containerCollection)){
		//don't submit if invalid fields present
		checkRequired = true;
		var idx = -1;
		window.parent.__GlobalVars.canCloseDEWindow=true;
		var field = fn.__GlobalVars.containerCollection.getFirstField();
		while(field){
			var RT = field.HTMLelement.getAttribute("starweb_richtext")
			if (RT)
			{
				fn.__GlobalVars.editorArray[idx=idx+1].loadSTARField(field.HTMLelement.name) ;
				var newstr=HTML_to_STAR(field.HTMLelement.value);
				newstr=caRemoveTrailingCRLFs(newstr);
				field.HTMLelement.value=newstr;	
				var RTelemfocus=caFindEditable(field.HTMLelement);				
			}			
			if(field.lookupAction!=null && field.validity!="TRUE"){
				var fieldContainerName;
				if(field.starwebParent.type=="FieldContainer") fieldContainerName=field.starwebParent.name;
				else fieldContainerName=field.starwebParent.starwebParent.name;
				field.HTMLelement.focus();
				//var message="You must correct "+fieldContainerName+" before saving.";
				var message=caGetMessage("text-only","caCorrectBeforeSaving","",fieldContainerName);				
				var args={message:message, target:field.HTMLelement};
				var alertID=fn.queueUp(new queueItem("AlertBox", args),"Synch");
				fn.runQueue();
				return;
			}
			else{								// Each instance must be processed
				
				if (field.validity == "LOCAL-ERROR" || field.validity == "LOCAL-MAXLENGTH")
				{
					var fieldContainerName;
					if(field.starwebParent.type=="FieldContainer") fieldContainerName=field.starwebParent.name;
					else fieldContainerName=field.starwebParent.starwebParent.name;

					var message=caGetMessage("text-only","caCorrectBeforeSaving","",fieldContainerName);				
					var args={message:message, target:field.HTMLelement};
					var alertID=fn.queueUp(new queueItem("AlertBox", args),"Synch");
					fn.runQueue();
				    if(field.HTMLelement.getAttribute("starweb_richtext")){
						if (whichStyle()=="IE")
						{
							RTelemfocus.focus();  // sets yellow background and blueframe
							RTelemfocus.frameElement.focus(); // scrolls to error window
						}
						else
						{
							RTelemfocus.frameElement.focus(); // scrolls to error window
							RTelemfocus.focus();  // sets yellow background and blueframe
						}
					}
					else{
						field.HTMLelement.focus();
					}
					
					return;
				}
				var required = field.HTMLelement.getAttribute("starweb_required");
				if (required && !field.HTMLelement.value){
					alert(required);
				    if(field.HTMLelement.getAttribute("starweb_richtext")){
						if (whichStyle()=="IE")
						{
							RTelemfocus.focus();  // sets yellow background and blueframe
							RTelemfocus.frameElement.focus(); // scrolls to error window
						}
						else
						{
							RTelemfocus.frameElement.focus(); // scrolls to error window
							RTelemfocus.focus();  // sets yellow background and blueframe
						}
					}
					else{
						field.HTMLelement.focus();
					}
					return;
				}
			}				
			field=fn.__GlobalVars.containerCollection.getNextField(field);
		}
		fn.document.__form.target="_parent";
		try{
			caTransformCheckboxes();
		}catch(e){}
		fn.document.__form.submit();
		if(opname=="Update"){	//notify any open windows waiting on these results
			try{
				var openerWindow=window;
				while(!openerWindow.opener) openerWindow=openerWindow.parent;
				openerWindow.opener.caNotifyUpdate(openerWindow.name);
			}catch(e){}
		}
	}
	else if(opname=="EditLink"){
		caCreateLookup({value:a1}, act, -1, targetWindow, op);
	}
	else {
		try{if(window.parent.__GlobalVars) window.parent.__GlobalVars.canCloseDEWindow=true;}catch(e){}
		if(checkRequired){	// Check for required fields
			var fields = fn.getElementsByTagNames("INPUT,TEXTAREA,SELECT");
			for(var i=0;i<fields.length;i++){
				var required = fields[i].getAttribute("starweb_required");
				if (required && !fields[i].value){
					alert(required);
					fields[i].focus();
					return;
				}

			}
		}
		var source=document.getElementsByName(opname)[0];
		if(source && targetWindow.charAt(0)!="_"){
			__GlobalVars.authorityWindows[targetWindow]=source.getAttribute("starweb_refresh");
		}
		try{			
			fn.document.__form.submit();
		}catch(e){}
	}
}

/*Force the broswer to submit checkbox values even for "unchecked" checkboxes by turning unchecked checkboxes into checked checkboxes with value=""
*/
function caTransformCheckboxes(){
	var field = __GlobalVars.mainFrameObject.__GlobalVars.containerCollection.getFirstField();
	while(field){
		if(field.type=="CheckBox" && field.HTMLelement.type=="checkbox" && field.HTMLelement.checked==false){
			var allUnchecked=true;
			var list = document.getElementsByName(field.HTMLelement.name);
			for(var j=0;j<list.length;j++){
				if(list[j].checked==true) allUnchecked=false;
			}
			if(allUnchecked){
				field.HTMLelement.value="";
				field.HTMLelement.checked=true;
				field.HTMLelement.style.visibility="hidden";
			}
		}
		field=__GlobalVars.mainFrameObject.__GlobalVars.containerCollection.getNextField(field);
	}
}

function getElementsByTagNames(list,obj) {
	if (!obj) var obj = document;
	var tagNames = list.split(',');
	var resultArray = new Array();
	for (var i=0;i<tagNames.length;i++) {
		var tags = obj.getElementsByTagName(tagNames[i]);
		for (var j=0;j<tags.length;j++) {
			resultArray.push(tags[j]);
		}
	}
	var testNode = resultArray[0];
	if (!testNode) return [];
	if (testNode.sourceIndex) {
		resultArray.sort(function (a,b) {
				return a.sourceIndex - b.sourceIndex;
		});
	}
	else if (testNode.compareDocumentPosition) {
		resultArray.sort(function (a,b) {
				return 3 - (a.compareDocumentPosition(b) & 6);
		});
	}
	return resultArray;
}

function getTopWindow(){
	var topWindow=window;
	var maxWindows=50;
	var i=0;
	try{
	while(i<maxWindows && (topWindow!=topWindow.parent || topWindow!=topWindow.opener)){
		i++;
		while(topWindow!=topWindow.parent) {
			i++;
			topWindow=topWindow.parent;
		}
		if(topWindow.opener){
			i++;
			topWindow=topWindow.opener;
		}
	}}catch(e){}
	return topWindow;
}

function getAllKnownWindows(){
	windowList=new Array();
	getWindows(getTopWindow());
	return windowList;
}

function getChildWindows(windowA){
	windowList=new Array();
	getWindows(windowA);
	return windowList;
}

var windowList=new Array();
function getWindows(rootWindow){
	try{
		if(!rootWindow) return;
		windowList[windowList.length]=rootWindow;
		for(var i=0;i<rootWindow.frames.length;i++){
			getWindows(rootWindow.frames[i]);
		}
		if(!rootWindow.__GlobalVars || !rootWindow.__GlobalVars.childWindows) return;
		for(var i=0;i<rootWindow.__GlobalVars.childWindows.length;i++){
			getWindows(rootWindow.__GlobalVars.childWindows[i]);
		}
	}catch(e){return;}
}

function closeMapWindow()
{
	if(typeof getMainFrame!="undefined")
	{
	var winx=getMainFrame();
	if (winx)
	{
		var winx=winx.mapWindow;
		if (winx && winx.open && !winx.closed) winx.close();
	}
	}
	return;
}
/************************************************
Behaviors?
*************************************************/


 // Establish initial settings of exchangeable elements, based on whether control is check or not 

function caSetDisplay(controlName /*, target...*/) {
  var control = document.getElementById(controlName);
  if(!control) control=document.getElementsByName(controlName)[0];
  if(!control) {
	  alert(caCannotFindTarget + controlName);
	  return;
  }
  var checked = control.checked ;
  var lenx = caSetDisplay.arguments.length;
  	for ( var ix = 1 ; ix < lenx ; ix += 2 )
	{
		var arg1 = caSetDisplay.arguments[ix] ;     // element to display unchecked
    	var arg2 = caSetDisplay.arguments[ix + 1] ; // element to display checked
		var elem1 = document.getElementById(arg1) ;
		var elem1id = elem1;
		var elem2 = document.getElementById(arg2) ;
		var elem2id  = elem2;
		if (!elem1)elem1 = document.getElementsByName(arg1)[0] ;
		if (!elem2)elem2 = document.getElementsByName(arg2)[0] ;
		if (!elem1 || !elem2) continue;  // one or both elements not found	
		if ( checked )
		{
			elem2.style.display = elem1.style.display ;	  
			elem1.style.display = "none" ;	  
		}
		else
		{
	  		elem1.style.display = elem2.style.display ;
	  		elem2.style.display = "none" ;
		}
		// Now set any repeated names
		if(!elem1id)
		{
			elem1 = document.getElementsByName(arg1);
			for (var jx = 1; jx < elem1.length ; jx++)
			{
				elem1[jx] = elem1[0].style.display;	
			}		
		}
		if(!elem2id)
		{
			elem2 = document.getElementsByName(arg2);
			for (var jx = 1; jx < elem2.length ; jx++)
			{
				elem2[jx] = elem2[0].style.display;	
			}		
		}	
	
	}
}

var hasAdjusted=0;
var dropMenus = new Array();
function dropMenu(id, classN){
	this.id=id;
	this.nameOfClass=classN;
}

var lastClick=0;
function caDropMenu(e,e2, alignment){
	var curTime = new Date();
	if(curTime-lastClick<100){//100ms passed
		lastClick=curTime;
		return;
	}
	lastClick=curTime;
	if(menuIsShowing){
		caDropMenuOut(e);
		return;
	}
	
	menuIsShowing=true;
	var included=false;
	var elem=document.getElementById(e);
	var elem2=document.getElementById(e2);
	if(elem==null || elem2==null){
		return false;
	}
	for(var j=0;j<dropMenus.length;j++){
		if(dropMenus[j].id==e){		//menu is already included
			included=true;
			dropMenus[j].nameOfClass=elem.className.substring(2,elem.className.length);
			break;
		}
	}
	if(included==false){
		dropMenus[dropMenus.length]=new dropMenu(e,elem.className.substring(2,elem.className.length));
	}	
	elem.className=elem.className.substring(2,elem.className.length);
	var y=caFindPos(document.getElementById(e2));
	if(alignment && alignment.toUpperCase()=="RIGHT"){
		elem.style.left=parseInt(y[0])+parseInt(elem2.getAttribute('width'))-parseInt(elem.clientWidth)+"px";
	}
	else{
		elem.style.left=y[0]+"px";
	}
	elem.style.top=y[1]+parseInt(elem2.getAttribute('height'))+"px";
}

var menuIsShowing = false;
function caDropMenuOut(){
	var curTime = new Date();
	if(curTime-lastClick<100){//100ms passed
		lastClick=curTime;
		return;
	}
	if(menuIsShowing){
		var previousClassname="";
		for(var i=0;i<dropMenus.length;i++){					//Find menu from array
			var tempE = document.getElementById(dropMenus[i].id);
			if(tempE){
				tempE.className="no"+dropMenus[i].nameOfClass;
				tempE.style.left="-9999px";
			}
		}
		menuIsShowing=false;
	}
}

function caFindPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function caConfirm(msg){
   return confirm(msg);
}

function caDEDisplayField(document,fieldName) {
  var firstsf = "" ;
  var field = __Record[fieldName] ;
  document.write(field.head) ;
  var b = field.body ;
  for (var i = 0 ; i < field.occs.length ; i++ ) {
    var occ = field.occs[i] ;
    for (var j = 0 ; j < b.length ; j++ ) {
	  document.write(b[j]) ;
	  if ( j == b.length-1 ) break ;
	  var sf = b[++j] ;
	  if ( sf == "insert" ) {
	    document.write("parent.caInsert(document,'" + fieldName + "'," + i + ");") ;
		continue ;
	  }
	  if ( firstsf == "" ) firstsf = sf ;
	  document.write(" onChange=\"parent.caChange(this,'" + fieldName + "'," + i + ",'" + sf + "');\" ") ;
	  document.write(" name=\"_" + fieldName + "_" + i + "_" + sf + '"') ;
	  var subfield = occ[sf] ;
	  if ( typeof subfield != "undefined" ) {
	    document.write(" value=\"" + subfield + '"') ;
	  }
	}
  }
  document.write(field.tail) ;
  return firstsf ;
}
function caInsert(doc,fieldName,occn) {
  doc.open() ;
  var field = __Record[fieldName] ;
  for ( var i = field.occs.length ; i > occn ; i-- ) {
    field.occs[i] = field.occs[i-1] ;
	}
  field.occs[occn] = {_:""} ;
  var firstsf = caDEDisplayField(doc,fieldName) ;
  var foo = "doc.all._"+fieldName+"_"+occn+"_"+firstsf+".focus()" ;
  eval(foo) ;
  doc.close() ;
}
function caChange(fld,fieldName,occn,sf) {
  var field = __Record[fieldName] ;
  var occ = field.occs[occn] ;
  occ[sf] = fld.value ;
}
function caUpdate(fn,act,a1,a2,a3,tar,close,op)  {
  var doc = fn.document._hiddenFrame.document ;
  doc.open() ;
  doc.write(__Record.updateForm) ; // <form + <... hidden
  for ( i in __Record ) {
    if ( i == "updateForm" ) continue ;
    var field = __Record[i] ;
	for ( j = 0 ; j < field.occs.length ; j++ ) {
      var occ = field.occs[j] ;
	  for ( k in occ ) {
	    doc.write('<input type="hidden" name="') ;
		doc.write("_"+i+"_"+j+"_"+k) ;
		doc.write('" value="') ;
		doc.write(occ[k]) ;
		doc.write('">\n') ;
	  }
    }
  }
  doc.write("</form>") ;
  caSubmit(fn.document._hiddenFrame,act,a1,a2,a3,tar,close,op) ;
}
function caCheckEnter (evt,buttonName) {
  var whichCode = (window.Event) ? evt.which : evt.keyCode;
  evt= (evt) ? evt : (window.event) ? window.event : ""
  var elem = evt.target ? evt.target : evt.srcElement ;
  if (whichCode == 13) {
    if ( buttonName.length != 0 ) {
	  if ( elem.onchange ) elem.onchange() ;	// get other events first
	  if ( elem.onblur ) elem.onblur() ;
	  var button=document.getElementById(buttonName);
	  if(!button) button=document.getElementsByName(buttonName)[0];
	  if(button) button.onclick() ;
	}
	if ( window.Event ) evt.which = 0 ; else evt.keyCode = 0 ;
  }
}

//following for custom report defintion pages
function isMacIE() {
	return (navigator.appName == "Microsoft Internet Explorer") && (navigator.appVersion.indexOf("Mac") != -1)
}
function isIE()
{
	if(navigator.appName == "Microsoft Internet Explorer")return true;
	return false;
}

//Data come down in a hidden field (target, default:"caRemember"). We need to move those values from the hidden field to the selection list.
function caInitSelections(target,remember,caChoices) {
  var t = document.getElementsByName(target)[0] ;
  var c = document.getElementsByName(caChoices)[0] ;
  //var len = document.getElementsByName(target)[0].length;
  var r = String(document.getElementsByName(remember)[0].value) ;
  var values = r.split(";") ;
  var newItem;
  for ( var i = 0 ; i < values.length ; i++ ) {
    var curval = values[i] ;
	if(c){
		for(var j=0; j<c.options.length;j++){
			if(c.options[j].value==curval){
				c.options[j].childNodes[0].nodeValue = __ConfigVars.selectionPrefixString + c.options[j].childNodes[0].nodeValue
			}
		}
	}
    if ( curval != null && curval != "null" && curval.length > 0 ) {
	  newItem=caNewOption(curval,curval,false);
	  //document.getElementsByName(target)[0].appendChild(newItem);
	  //t.options.add(newItem) ;
	  if( ! isMacIE() ) document.getElementsByName(target)[0].appendChild(newItem) ;
      else t.options.add(newItem) ;
    }
  }
}

function caMakeSelections(source,target,remember) {
  var s = document.getElementsByName(source)[0] ;
  var t = document.getElementsByName(target)[0] ;
  //var len = t.length;

  var top = s.length ;
  for ( var i = 0 ; i < top ; i++ ) {
    var opt = s.options[i] ;
    if ( opt.selected != true ) continue ;
    // try .options for mac ie
	if ( ! isMacIE() ) t.appendChild(caNewOption(opt.text,opt.value,false)) ;
	else t.options.add(caNewOption(opt.text,opt.value,false)) ;
    opt.text = __ConfigVars.selectionPrefixString + opt.text ;
    opt.selected = false ;
  }
  caRemember(t,remember) ;
}
function caRemoveSelections(source,target,remember) {
  var s = document.getElementsByName(source)[0] ;
  var t = document.getElementsByName(target)[0] ;
  for ( var i = t.length-1 ; i >= 1 ; i-- ) {
    if ( t.options[i].selected ) {
	  var tvalue = caStrip(t.options[i].value) ;
	  for ( var j = 0 ; j < s.length ; j++ ) {
	    if ( s.options[j].value == tvalue ) {
		  var foo = String(s.options[j].text) ;
		// Changed by CL to check for > before removing first char.
		// was:   s.options[j].text = foo.substr(1,foo.length-1);
		  if (foo.substr(0,__ConfigVars.selectionPrefixString.length) == __ConfigVars.selectionPrefixString) s.options[j].text = foo.substr(__ConfigVars.selectionPrefixString.length,foo.length-1) ;
		  else s.options[j].text = foo;
                //... end.
		  break ;
	    }
	  } 
	  if ( ! isMacIE() ) t.removeChild(t.childNodes[i]) ;
	  else t.options.remove(i) ;
	} // if selected
  }
  caRemember(t,remember) ;
}
function caNewOption(text,value,selected) {
  if ( ! isMacIE() ) {
    var newOption = document.createElement("Option") ;
    var newText = document.createTextNode(text);
    newOption.appendChild(newText);
    if(newOption.attributes.length>0){
      // For IE
      newOption.setAttribute("value",value);
	  newOption.selected=selected;
      //newOption.setAttribute("selected",selected);
    } else {
	  // For Netscape
	  newOption.value=value;
	  newOption.selected=selected;
	}
	return newOption ;
  }
  else {  // Mac IE
    var newOption = new Option(value) ;
    newOption.text = text ;
    newOption.value = value ;
    newOption.selected = selected ;
    return newOption ;
  }
}


function caMoveSelections(target,direction,remember) {
  var t = document.getElementsByName(target)[0] ;
  var index = t.selectedIndex ;
  if ( direction == 'up' ) {
    if ( index <= 1 ) return ;
    for ( var i = index ; i < t.length ; i++ ) {
      var opt = t.options[i] ;
	  if ( opt.selected ) caExchangeOption(t.options[i-1],opt) ;
	}
  }
  else if ( direction == 'down' ) {
    var top = t.length - 1 ;
    if ( t.options[top].selected ) return ;
    for ( var i = top-1 ; i >= index ; i-- ) {
      var opt = t.options[i] ;
	  if ( opt.selected ) caExchangeOption(t.options[i+1],opt) ;
	}
  }
  else if ( direction == 'top' ) {
    index=1;
    for ( var i = 1 ; i < t.length ; i++ ) {
      var opt = t.options[i] ;
      if ( ! opt.selected ) continue ;
	  if ( index < t.length - 1 ) {
	    if ( ! isMacIE() ) {
          var topOpt = t.removeChild(t.childNodes[i]);
	      t.insertBefore(topOpt,t.childNodes[index]) ; 
		}
		else {
		  t.options.remove(i) ;
		  t.options.add(opt,index) ;
		}
	  }
      index++;
    }  // for
  }
  else if ( direction == 'bottom' ) {
    bottom = t.length;
    i = 1 ;
    while ( i < bottom ) {
      var opt = t.options[i] ;
      if ( ! opt.selected ) {
	    i++ ;
	    continue ;
	  }
	  if ( ! isMacIE() ) {
	    var topOpt = t.removeChild(t.childNodes[i]) ;
        t.appendChild(topOpt) ;
        bottom-- ;
	  }
	  else {
	    t.options.remove(i) ;
	    t.options.add(opt) ;
	    bottom-- ;
	  }
    } // while
  } // direction == bottom

  caRemember(t,remember) ;
}
function caExchangeOption(option1,option2) {
  var ttext = option1.text ;
  var tvalue = option1.value ;
  var tselected = option1.selected ;
  option1.text = option2.text ;
  option1.value = option2.value ;
  option1.selected = option2.selected ;
  option2.text = ttext ;
  option2.value = tvalue ;
  option2.selected = tselected ;
}

function caModifySelections(target,text,remember) {
  var t = document.getElementsByName(target)[0] ;
  var index = t.selectedIndex ;
  for (var i = 0 ; i < t.length ; i++ ) {
    var opt = t.options[i] ;
	if ( ! opt.selected ) continue ;
	opt.text = caStrip(opt.text) + text ;
	opt.value = caStrip(opt.value) + text ;
	opt.selected = true;
  }
  caRemember(t,remember) ;
}
function caStrip(text) {
  var x = String(text) ;

  // Changed by CL to accomodate Field Name containing a slash.
  // was:  var ix = x.indexOf('/') ;
  var ix = x.indexOf('/Ascending') ;
  if(ix<0) ix = x.indexOf('/Descending') ;
  // ... end.

  if ( ix >= 0 ) x = x.substr(0,ix) ;
  return x ;
}

function caRemember(source,remember) {
  var x = "" ;
  for ( var i = 1 ; i < source.length ; i++ ) {
    x = x + source.options[i].text + ';' ;
  }
  //document.all[remember].value = x ;
  document.getElementsByName(remember)[0].value = x ;
}


function caResetImageCheckboxes(name,image,checked) {
  var len = document.forms[0].elements.length ;
  for ( var i = 0 ; i < len ; i++ ) {
    var thisElem = document.forms[0].elements[i] ;
	if ( thisElem.name != name) continue ;
	var isChecked = thisElem.value.substr(0,2) != '__' ;
	if ( isChecked == checked ) continue ;
	if ( ! isChecked ) thisElem.value = thisElem.value.substring(2) ;
	else thisElem.value = '__' + thisElem.value ;
  }
  for ( var i = document.images.length ; --i >= 0 ; ) {
    var thisElem = document.images[i] ;
	if ( thisElem.name != name) continue ;
	thisElem.src = image ;
  }
}

function caSetHiddenValuesAndImageCheckboxes(name,value,checked,testValue,newValue,image,alt) {
var allWindows = getAllKnownWindows()

  for ( var ix = 0 ; ix < allWindows.length ; ix++) {
	var curWindow = allWindows[ix] ;
	try { if ( curWindow == null || curWindow.closed ) continue ; }
	catch (e) { continue ; }
	if ( ! curWindow.frames || curWindow.frames.length == 0 ) {
	  //alert("No frames in" + curWindow.name) ;
	  caSetHiddenValuesInDoc(curWindow.document,name,value,checked) ;
	  caSetImageCheckboxesInDoc(curWindow.document,name,testValue,newValue,image,alt) ;
	  continue ;
	}
	for ( var fix = 0 ; fix < curWindow.frames.length ; fix++ ) {
	  //alert("Frame "+fix+" in "+curWindow.name) ;
	  var curFrame = curWindow.frames[fix] ;
	  caSetHiddenValuesInDoc(curFrame.document,name,value,checked) ;
	  caSetImageCheckboxesInDoc(curFrame.document,name,testValue,newValue,image,alt) ;
	}
  }
}


function caSetHiddenValuesInDoc(doc,name,value,checked) {
  var len = 0 ;
  if ( doc.forms[0] ) len = doc.forms[0].elements.length ;
  //alert("forms[0].len = "+len) ;

  for ( var i = 0 ; i < len ; i++ ) {
    var thisElem = doc.forms[0].elements[i] ;
	if ( thisElem.name != name || thisElem.type != 'hidden' ) continue ;
	var isChecked = false ; var compareValue ;
	if ( thisElem.value.substr(0,2) == '__' ) {
	  isChecked = false ; compareValue = thisElem.value.substring(2) ;
	}
	else {
	  isChecked = true ; compareValue = thisElem.value ;
	}
	//alert("cvalue='" + compareValue + "' isChecked=" + isChecked + " value=" + value) ;
	//if ( compareValue != value || checked == isChecked ) continue ;
	if ( ! caCompareSelectionListValues(compareValue,value) || checked == isChecked ) continue ;
	if ( checked ) thisElem.value = compareValue ;
	else thisElem.value = '__' + compareValue ;
  }
}

function caSetImageCheckboxesInDoc(doc,name,testValue,newValue,image,alt) {
  var len = 0 ;
  if ( doc.images ) len = doc.images.length ;
  //alert("images.len = " + doc.images.length) ;
  for ( var i = 0 ; i < len ; i++ ) {
    var thisElem = doc.images[i] ;
	var valueFF=doc.images[i].getAttribute("value");
	if ( thisElem.name != name || thisElem.type == 'hidden' ) continue ;
	//if ( thisElem.value != testValue ) continue ;
	if ( ! caCompareSelectionListValues(valueFF,testValue) ) continue ;
	thisElem.src = image ;
	thisElem.setAttribute("value",newValue);
	thisElem.alt = alt ;
  }
}

function caCompareSelectionListValues(value1,value2) {
  //var re=/(.*);;*::(.*)/
  var re = new RegExp("^(.*);;.*::(.*)$") ;
  var v1 = re.exec(value1) ;
  var v2 = re.exec(value2) ;
  if ( v1 == null || v2 == null ) return v1 == v2 ;
  return v1[1] == v2[1] && v1[2] == v2[2] ;
}

function caImageCheck(obj,imChecked,imUnchecked,altChecked,altUnchecked) {
  if ( arguments.length < 5 ) {
    altChecked = "Record Selected" ;
	altUnchecked = "Record Not Selected" ;
  }
  
  var value = obj.getAttribute("value") ;
  if ( value.substr(0,2) != '__' ) {  // currently checked
    caSetHiddenValuesAndImageCheckboxes(obj.name,value,false,value,"__" + value,imUnchecked,altUnchecked) ;
  }
  else {
	caSetHiddenValuesAndImageCheckboxes(obj.name,value.substring(2),true,value,value.substring(2),imChecked,altChecked) ;
  }
  return true ;
}

function caSetCheckboxes(name,checked) {  // checked = true/false
  thisfe = document.getElementsByName(name);
  for (var ix = 0; ix < thisfe.length; ix++)
  {
	if (thisfe[ix].type == 'checkbox') 
	{
		thisfe[ix].checked = checked ;	
	}
  }
  return ;
}


function caSetChecks(checked,name) {
  caSetCheckboxes(name,checked) ;
}
// start of code for expand/contract feature

function caExpandContractInit(anchorname) {
//	if(document.getElementById("caRecalledSearch")) return;
	// assumes name is unique
	var focarray = document.getElementsByName(anchorname) ;
	if ( focarray.length == 0 ) return ;

	var foc = focarray[0] ;
	// first get +/-
	var fplusminus = foc.firstChild ;

	foc = document.getElementById(anchorname + '_content') ;
	var curDisplayType = caGetExpandContract(anchorname) ;
	foc.style.display = curDisplayType ;

	if ( fplusminus ) {
		var plusMinusChar = curDisplayType == 'none' ? '+' : '-' ;
		if ( fplusminus.innerHTML == '+' || fplusminus.innerHTML == '-' )
			fplusminus.innerHTML = plusMinusChar ;
	}

	var otherDisplayType = curDisplayType == 'none' ? 'inline' : 'none' ;
	var caTemp = document.getElementById(anchorname + '_open') ;
	if ( caTemp ) caTemp.style.display = curDisplayType ;
	caTemp = document.getElementById(anchorname + '_closed') ;
	if ( caTemp ) caTemp.style.display = otherDisplayType ;

	var recalled=document.getElementById("caRecalledSearch");
	if(recalled){	//Added so that sections toggle one time upon opening if they are on a recalled search page.
		if(curDisplayType=="none"){
			caExpandContract(document.getElementsByName(anchorname)[0]);
		}
		recalled.value="false";
	}
}

function caExpandContract(loc){

	if ( document.getElementById ) {
		var anchorname = loc.getAttribute("name") ;
		var foc = loc.firstChild ;

		if ( foc.innerHTML == '+' ) foc.innerHTML = '-' ;
		else if ( foc.innerHTML == '-' ) foc.innerHTML = '+' ;

		foc = document.getElementById(anchorname + '_content') ;

		var curDisplayType = foc.style.display ;
		otherDisplayType = curDisplayType == 'none' ? 'inline' : 'none' ;

		// This is for picklist template cases
		// which assumes that picklist will be expanded initially
		foc.style.display = otherDisplayType ;
		caSetExpandContract(otherDisplayType, anchorname) ;

		caTemp = document.getElementById(anchorname + '_open') ;
		if ( caTemp ) caTemp.style.display = otherDisplayType ;
		caTemp = document.getElementById(anchorname + '_closed') ;
		if ( caTemp ) caTemp.style.display = curDisplayType ;
		}

}

function caGetExpandContract(anchorname) {
	// Assumes name is unique
	var hiddenglobal = document.getElementsByName(anchorname + "_hidden") ;
	if ( ! hiddenglobal ) return "none" ;
	if ( hiddenglobal.length == 0 ) return "none" ;
	var curValue = hiddenglobal[0].value ;
	if ( ! curValue ) return "none" ;
	return curValue ;
}

function caSetExpandContract(valx, anchorname) {
	// Assumes name is unique
	var hiddenglobal = document.getElementsByName(anchorname + "_hidden") ;
	if ( ! hiddenglobal ) return ;
	if ( hiddenglobal.length == 0 ) return ;
	if ( hiddenglobal ) hiddenglobal[0].value = valx ;
}

// end of code for expand/contract feature

function caIsEditable(elem) {
  var t = elem.tagName.toUpperCase() ;
  if (t == "A"  || t == "IMG") return false;
  if (elem.style.visibility == 'hidden' || elem.style.display == 'none')return false;
  var x = ((t == 'INPUT' && elem.type != 'hidden') || t == 'TEXTAREA' || t == 'SELECT') && ! elem.readOnly && ! elem.isDisabled ;
  return x ;
}


function caMultiExpandContract(namex)
{
	// id = 02/22/2007
	var foc;
  	var locx = document.getElementsByName(namex);
  	if (locx.length == 0) return;  

  	var loc = locx[0];
	var args = caMultiExpandContract.arguments;
		if (loc.checked)
		{
			// expand
			for (var ix = 1; ix < args.length; ix ++)
			{
				foc = document.getElementById(args[ix]) ;
				if (!foc)
				{
					foc = document.getElementsByName(args[ix])[0];	
				}
				foc.style.display = 'block' ;
			}		
		}	
		else
		{
			// contract
			for (var ix = 1; ix < args.length; ix ++)
			{
				foc = document.getElementById(args[ix]) ;
				if (!foc)
				{
					foc = document.getElementsByName(args[ix])[0];	
				}				
				foc.style.display = 'none' ;
			}			
		}
}



function caExchangeDisplay(labl1,labl2)
{
	// id =02/22/2007
	     var lenx = caExchangeDisplay.arguments.length;
		 
		 for (ix = 0; ix < lenx; ix += 2 )
		 {
         	var arg1 = caExchangeDisplay.arguments[ix];
         	var arg2 = caExchangeDisplay.arguments[ix + 1];
			var elem1 = document.getElementById(arg1);
			var elem1id = elem1;
			var elem2 = document.getElementById(arg2);
			var elem2id = elem2;
			if(!elem1)elem1= document.getElementsByName(arg1)[0];
			if(!elem2)elem2= document.getElementsByName(arg2)[0];
			if (!elem1 || !elem2)continue;
			lbl1 = elem1;
			lbl2 = elem2;
			if (lbl2.style.display == "none")
			{
                 lbl2.style.display=lbl1.style.display;
                 lbl1.style.display="none";
			}
			else if(lbl1.style.display == "none")
			{
                 lbl1.style.display=lbl2.style.display;
                 lbl2.style.display="none";
			}
			else if(lbl2.style.display != "none")
			{
                lbl1.style.display=lbl2.style.display;
				lbl2.style.display="none";                 	
			}
			else if(lbl1.style.display != "none")
			{
                 lbl2.style.display=lbl1.style.display;
				lbl1.style.display="none";                 	
			}					
			else 
			{
                 lbl2.style.display=lbl1.style.display;
                 lbl1.style.display="none";
			}
			// now set any redundant names
//			if(elem1 & !elem1id)// name 1 exists but does not have an id
			if(elem1 && !elem1id) //RAU - is this supposed to be a single & or double &&
			{
				for (var jx = 1 ; jx < elem1.length; jx++)
				{
					elem1[jx] = elem1[0].style.display	
				}
				
			}
			if(elem2 && !elem2id) // name 2 exists but does not have an id
			{
				for (var jx = 1 ; jx < elem2.length; jx++)
				{
					elem2[jx] = elem2[0].style.display	
				}
			}				

		 }

 }
 
/*
 * Find the top-most window/frame that belongs to the starweb application
 **/
function caTopper()
{

  var xok = window;
  
  while(true) {
    try {
	  var x = xok.parent.name ; // throw error if xok.parent is null, or protected
	  if ( xok == xok.parent )
	  {
	  	return xok ;  // we've got the actual window
	  }
	  xok = xok.parent;         // move up one level and try again
    }
    catch(errinfo) {
	  return xok;	
    }
  }
}





function caToggleSegment(id){
	el=document.getElementById(id);
	if(el.style.display!="none"){
		el.style.display="none";
	}
	else{
		el.style.display="block";
	}
}

function caSetCursor(thisx, cursortype)
{
	// id=02/22/2007
	if (!thisx.disabled)
	{
		thisx.style.cursor = cursortype;
	}
	else
	{
		thisx.style.cursor = "text";
	}
	
}

var elemsHash=new Array();
var elemsHashInit=false;
function caCheckDuplicates(elem) {
	var elems=document.getElementsByName(elem.name);
	if(elemsHashInit==false){	//initial load
		elemsHashInit=true;
		for(var i=0;i<elems.length;i++){
			if(!elemsHash[elems[i].value]) elemsHash[elems[i].value]=i.toString();
			else elemsHash[elems[i].value]= elemsHash[elems[i].value]+","+i.toString();
		}
	}
	var dupes=elemsHash[elem.value].split(",");
	for(var i=0;i<dupes.length;i++){
		document.getElementsByName(elem.name)[dupes[i]].checked=elem.checked;
	}
}
// Custom Reports
function caMoveSelect(target) { 
caMoveSelections(__ConfigVars.caSelections,target,__GlobalVars.fieldListSource); 
}
function caModifySelect(target) { 
caModifySelections(__ConfigVars.caSelections,target,__GlobalVars.fieldListSource); 
} 
function caMakeSelect() { 

caMakeSelections(__ConfigVars.caChoices,__ConfigVars.caSelections,__GlobalVars.fieldListSource) 
}
function caRemoveSelect() { 
caRemoveSelections(__ConfigVars.caChoices,__ConfigVars.caSelections,__GlobalVars.fieldListSource); 
}


//Professional Search
function caSearchFieldSelect(node,searchtext) { 
var frm = document.forms[0] ; 
var editv = frm[searchtext].value 
var cur = node.options[node.selectedIndex].value 
if ( cur.length > 0 && cur.substring(0,1) != '_' ) { 
if ( editv.length > 0 && editv.substring(0,1) == '/' ) { 
editv = '/' + cur + ',' + editv.substring(1,editv.length) ; 
} 
else { 
editv = '/' + cur + ' ' + editv ; 
} 
} 
}
function caSearchFragmentSelect(node,searchtext) { 
var frm = document.forms[0] ; 
var editv = frm[searchtext].value 
var cur = node.options[node.selectedIndex].value 
if ( cur.length > 0 && cur.substring(0,1) != '_' && editv.length > 0 ) { 
editv += ' and ' ; 
} 
editv += cur ; 
node.selectedIndex = -1 ; 
frm[searchtext].value = editv ; 
frm[searchtext].focus() ; 
} 

// Copy a field value to the formframe.  2nd arg is optional, with default 'mainFrame'
function caCopyTo_mainFrame(node,optFrameName) {
	if(window.name!=__ConfigVars.mainFrameWindowName) {
		if(!window.parent.mainDoneLoading) return;
	}
	var nodeName = node.name ;
	var frameName = ( arguments.length < 2 ) ? 'mainFrame' : optFrameName ;
	try{
		var temp=parent[frameName].document.__form.__action.value;
	}catch(e){	//couldn't find - form isn't loaded yet
		alert(caWaitForFormToLoad);
		return;
	}
	var target = parent[frameName].document.getElementsByName(nodeName)[0];//parent[frameName].document.getElementById(nodeName);
	switch (node.tagName){
	case "INPUT":
		switch(node.type.toUpperCase()){
			case "TEXT":
				break;
			case "CHECKBOX":
				if (!node.checked)return;
				break;
			case "RADIO":
			    if (!node.value)return;
				break;
		}
		break;
    case "SELECT":
	    break;
	}
	if ( target ) target.value = node.value ;
  else  {
	var nodeNameX = '"' + nodeName + '"';
	var frameNameX = '"' + frameName + '"';
  	alert(caGetMessage("text-only","caDataEntryCopyTo_mainFrameNameNotFound","",nodeNameX,frameNameX))
  }
}

// Execute a remote button
// The 1st argument is the name (in quotes) of the button to be clicked.
// The 2nd argument is optional, if present, must be of form 'parent.frameName' (no quotes)
// If called directly
function caRedirectActionTrigger(target,frameAddr) {
  if ( arguments.length < 2 ) frameAddr = self ;
  var button = frameAddr.document.getElementById(target);
  if ( ! button ) alert(caGetMessage("text-only","caDataEntryButtonForTargetNotFound","",target));
  else button.click() ;
  return ;
}
// Not sure how this is invoked
// get actual button to submit from selectlist value.
// The first argument should be 'this' (no quotes) 
// The 2nd argument is optional, if present, must be of form 'parent.frameName' (no quotes)
function caSubmitIndirect(selectList,frameAddr) {
  if ( selectList.tagName != 'SELECT' ) {
    //alert("Submit Indirect not in SELECT element!") ;
	alert(caGetMessage("text-only","caSubmitIndirectFails"));	
	return ;
  }
  if ( arguments.length < 2 ) frameAddr = self ;
  var button = frameAddr.document.getElementById(selectList.value);
  if ( ! button ) alert(caGetMessage("text-only","caDataEntryButtonForSelectListNotFound", "", selectList.value));
  //if ( ! button ) alert("button for "+selectList.value+" not found!") ;
  button.click() ;
}

// start of code for expand/contract feature - old version for compatibility
function caSetBlockNone(valx, anchorname) {
  // Assumes name is unique
  var hiddenglobal = document.getElementsByName(anchorname + "_hidden_value");
  hiddenglobal[0].value = valx;
}

function caGetBlockNone(anchorname) {
  var hiddenglobal = document.getElementsByName(anchorname + "_hidden_value");
  var curValue = hiddenglobal[0].value ;
  if (!curValue)
  {
	return "none";  
  }
  else
  {
	return curValue;
  }
}


function caOnReturn(anchorname) {
  // assumes name is unique
  var focarray = document.getElementsByName(anchorname);
  if (focarray.length == 0) return;  // hlw 09/27/2004 See Archives expand/contract

  var foc = focarray[0];
  // first get +/-   
  var  fplusminus = foc.firstChild;

  foc = document.getElementById(anchorname + '_plus_minus_list') ;	
  var curDisplayType = caGetBlockNone(anchorname) ;
  foc.style.display = curDisplayType ;
  fplusminus.innerHTML = curDisplayType == 'none' ? '+' : '-' ;
}


function caDsp(loc){
  if ( document.getElementById ) {
	var anchorname = loc.getAttribute("name") ;
    var foc = loc.firstChild ;
    foc.innerHTML = (foc.innerHTML == '+') ? '-' : '+' ;
	foc = document.getElementById(anchorname + '_plus_minus_list') ;
	foc.style.display = (foc.style.display == 'block') ? 'none' : 'block' ;
	caSetBlockNone(foc.style.display, anchorname) ;
  }
} 
// end of code for expand/contract feature - old version for compatibility

function caSearchFieldSelect(node,searchtext) { 
  var frm = document.forms[0] ;
  var editv = frm[searchtext].value 
  var cur = node.options[node.selectedIndex].value 
  if ( cur.length > 0 && cur.substring(0,1) != '_' ) {
    if ( editv.length > 0 && editv.substring(0,1) == '/' ) {
      editv = '/' + cur + ',' + editv.substring(1,editv.length) ;
	}
    else {
      editv = '/' + cur + ' ' + editv ; 
	}
  }
  node.selectedIndex = -1 ;
  frm[searchtext].value = editv ;
  frm[searchtext].focus() ;
}

function caSearchFragmentSelect(node,searchtext) { 
  var frm = document.forms[0] ;
  var editv = frm[searchtext].value 
  var cur = node.options[node.selectedIndex].value 
  if ( cur.length > 0 && cur.substring(0,1) != '_' && editv.length > 0 ) {
    editv += ' and ' ;
    }
  editv += cur ;
  node.selectedIndex = -1 ;
  frm[searchtext].value = editv ;
  frm[searchtext].focus() ;
}
function caRemoveTrailingCRLFs(in_strg)
{
	// backup over spaces and lf's preceded by cr until anything else is reached
	var ptr=-1;
	for (var ix=in_strg.length-1;ix>=0;ix--)
	{
		if(in_strg.substr(ix,1)=="\n" && ix>=1)
		{
			if(in_strg.substr(ix-1,1)=="\r")
			{
				ix=ix-1;
				ptr=ix;
				continue;
			}
			else {break};
		}
		if(in_strg.substr(ix,1)==" ")
		{
			ptr=ix;
			continue;
		}
		break;
	}
	if(ptr>-1)
	{
		return(in_strg.substr(0,ptr));	
	}
	else{return(in_strg)};

}	
var lcount=0;
function InternalTrace (msg)
{

	var x = document.getElementsByName("TRACETEXTAREA");  // for "local" window
	if(x.length == 0) return;
	lcount = lcount + 1;
	x[0].value =  x[0].value + lcount.toString() + " " + msg + "\n";	
}

function displayCustomReportConditional(){
	var dCRC = document.getElementsByName("DisplayCustomReportConditional")[0];
	var caRemember = document.getElementsByName("caRemember")[0];
	if(!dCRC || !caRemember) return;
	if(caRemember.value=="") dCRC.style.display="none";
}

function caJump(frame,hashloc) { 
  if ( arguments.length == 2 && hashloc && hashloc.length>0)	parent[frame].location.hash = hashloc ;
  else if (frame && frame.length>0) window.location.hash = frame ;
}
