/************************************ Global Variables *************************************************/

  var countyFieldreqs = new Array();



  var formData;

  //AJAX Request Variables
  var countyReq;
  var countyFieldreq; 
  var stateFieldreq;
  var checkCountyreq; 
  
  //Span names to be dynamically populated
  var fieldName;
  var countySpanName;
  var stateSpanName;  
  
  var grpId;
 
  var updateFields;

/*********************************** AJAX Calling Methods ***************************************************/
  
function CountyFieldXMLReq(freed) {
	this.freed = freed;
	this.xmlhttp = false;
	if (window.XMLHttpRequest) {
		this.xmlhttp = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
}  
  
  
function retrieveCountyFields(url, sName, selectedCounties) {
  	var callUrl = 'ajax.displayCounties?' + url;
  	//alert('calling url ' + callUrl);
  	formData = getFormData(document.forms[0]);  
  	countySpanName = sName;

	//alert('sending url ' + url);
	var pos = -1;
	for (var i=0; i<countyFieldreqs.length; i++) {
		if (countyFieldreqs[i].freed == 1) { pos = i; break; }
	}
	if (pos == -1) { pos = countyFieldreqs.length; countyFieldreqs[pos] = new CountyFieldXMLReq(1); }
	if (countyFieldreqs[pos].xmlhttp) {
		countyFieldreqs[pos].freed = 0;
														
		if (window.XMLHttpRequest) {	
			try {
				countyFieldreqs[pos].xmlhttp.open("POST","ajax.displayCounties",true);
				countyFieldreqs[pos].xmlhttp.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
		      	countyFieldreqs[pos].xmlhttp.setRequestHeader("Content-length", url.length);
      			countyFieldreqs[pos].xmlhttp.setRequestHeader("Connection", "close");
								
			} catch ( e ) {
				alert(e);
			}						
			countyFieldreqs[pos].xmlhttp.onreadystatechange = function() {
				if (typeof(processFieldCountyChange) != 'undefined') { processFieldCountyChange(pos, url, selectedCounties);  }
			}
			countyFieldreqs[pos].xmlhttp.send(url);
		} else if (window.ActiveXObject) {	
			countyFieldreqs[pos].xmlhttp.open("POST", "ajax.displayCounties", true);
			countyFieldreqs[pos].xmlhttp.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
		    countyFieldreqs[pos].xmlhttp.setRequestHeader("Content-length", url.length);
      		countyFieldreqs[pos].xmlhttp.setRequestHeader("Connection", "close");
				
			countyFieldreqs[pos].xmlhttp.onreadystatechange = function() {
				if (typeof(processFieldCountyChange) != 'undefined') { processFieldCountyChange(pos, url, selectedCounties); }
			}      		

        	countyFieldreqs[pos].xmlhttp.send(url);        	
      	}				
	}
}  
  
  
  
  
  function retrieveCounty(id, groupid, fieldlist) 
  	{
  		var stateVal = document.getElementById('stc' + id).value;    	
		var url = "ajax.findCounty?countyfield=" + id + "&state=" + stateVal;
		var fName = "county" + id;
		var hiddenSummary = "dynamsummary" + id;
		var selectedCounties = "selcounty" + id;
		var countySpan = "dynamdata" + id;
		  	
	  	fieldName = fName;
	    if (window.XMLHttpRequest) { // Non-IE browsers
	      countyReq = new XMLHttpRequest();
	      try {
	        countyReq.open("GET", url, true);
	      } catch (e) {
	        alert(e);
	      }      
		  countyReq.onreadystatechange = function() {
			if (typeof(processCountyChange) != 'undefined') { processCountyChange(hiddenSummary, selectedCounties, countySpan, groupid, fieldlist); }
		  }      
	      countyReq.send(null);
	    } else if (window.ActiveXObject) { // IE
	      countyReq = new ActiveXObject("Microsoft.XMLHTTP");
	      if (countyReq) {        
	        countyReq.open("GET", url, true);
			countyReq.onreadystatechange = function() {
				if (typeof(processCountyChange) != 'undefined') { processCountyChange(hiddenSummary, selectedCounties, countySpan, groupid, fieldlist); }
		  	}      
	        countyReq.send();
	      }
	    }
  }

  function retrieveCountyFieldsOld(url, sName, selectedCounties) {
  	var callUrl = 'ajax.displayCounties?' + url;
  	alert('calling url ' + url);
  	formData = getFormData(document.forms[0]);  
  	countySpanName = sName;
    if (window.XMLHttpRequest) { // Non-IE browsers
      countyFieldreq = new XMLHttpRequest();      
      try {
        countyFieldreq.open("GET", callUrl, true);
      } catch (e) {
        alert(e);
      }	  
	  countyFieldreq.onreadystatechange = function() {
			if (typeof(processFieldCountyChange) != 'undefined') { processFieldCountyChange(url, selectedCounties); }
	  }   	  
	        
      countyFieldreq.send(null);
    } else if (window.ActiveXObject) { // IE
      countyFieldreq = new ActiveXObject("Microsoft.XMLHTTP");
      if (countyFieldreq) {
		countyFieldreq.open("GET", callUrl, true);      
	  	countyFieldreq.onreadystatechange = function() {
			if (typeof(processFieldCountyChange) != 'undefined') { processFieldCountyChange(url, selectedCounties); }
	  	}		
        countyFieldreq.send();
      }
    }
  }

  function retrieveStateFields(url, sName) {
  	formData = getFormData(document.forms[0]);  
  	stateSpanName = sName;
    if (window.XMLHttpRequest) { // Non-IE browsers
      stateFieldreq = new XMLHttpRequest();      
      try {
        stateFieldreq.open("GET", url, true);
      } catch (e) {
        alert(e);
      }
	  stateFieldreq.onreadystatechange = processFieldStateChange;      
      stateFieldreq.send(null);
    } else if (window.ActiveXObject) { // IE
      stateFieldreq = new ActiveXObject("Microsoft.XMLHTTP");
      if (stateFieldreq) {        
        stateFieldreq.open("GET", url, true);
		stateFieldreq.onreadystatechange = processFieldStateChange;        
        stateFieldreq.send();
      }
    }
  }


  function checkCountySelect(url, selectedCounties)  
  {  
	var callUrl = 'ajax.checkCounties?' + url;    
  	
    if (window.XMLHttpRequest) { // Non-IE browsers
      checkCountyreq = new XMLHttpRequest();      
      try {
		checkCountyreq.open("POST","ajax.checkCounties",true);
		checkCountyreq.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
		checkCountyreq.setRequestHeader("Content-length", url.length);
      	checkCountyreq.setRequestHeader("Connection", "close");        
        
      } catch (e) {
        alert(e.toString());
      }   
	  checkCountyreq.onreadystatechange = function() {
		if (typeof(processCheckCountyChange) != 'undefined') { processCheckCountyChange(selectedCounties); }
	  }   	  
      checkCountyreq.send(url);
    } else if (window.ActiveXObject) { // IE
      checkCountyreq = new ActiveXObject("Microsoft.XMLHTTP");
      if (checkCountyreq) {        
		checkCountyreq.open("POST","ajax.checkCounties",true);
		checkCountyreq.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
		checkCountyreq.setRequestHeader("Content-length", url.length);
      	checkCountyreq.setRequestHeader("Connection", "close");    

	  	checkCountyreq.onreadystatechange = function() {
			if (typeof(processCheckCountyChange) != 'undefined') { processCheckCountyChange(selectedCounties); }
	  	}   	  		    
        checkCountyreq.send(url);
      }
    }   	
  }

/*********************************** Retrieve County Methods *************************************************/

  function processCountyChange(hiddenSummary, selectedCounties, countySpan, groupid, fieldlist) {
    if (countyReq.readyState == 4) { // Complete
      if (countyReq.status == 200) { // OK response	
		var hasOtherNode = populateCountyDropDown(countyReq);			
		
		if ( hasOtherNode == true ) {
			grpId = groupid;
			updateFields =  fieldlist.split("|");		
			addCountyFromNode(countyReq, selectedCounties);

    		populateCountySummary(hiddenSummary, selectedCounties);    
    		renderCountyDataFields(selectedCounties, countySpan,groupid);  			
		}									
      } else {
        alert("Problem: " + countyReq.statusText);
      }
    }
  }
  
  
  function processCheckCountyChange(selectedCounties) {  
    if (checkCountyreq.readyState == 4) { // Complete
      if (checkCountyreq.status == 200) { // OK response
		stripWhiteSpace(checkCountyreq.responseXML);
		var xmlobject = checkCountyreq.responseXML;
		
		var root = xmlobject.getElementsByTagName('renamecounty')[0];
		var items = root.getElementsByTagName("county");
		
		var hasOtherNode = false;
		var otherName;
		var otherId;		
				
		for (var i = 0 ; i < items.length ; i++) {
			// get one item after another
			var item = items[i];
			// now we have the item object, time to get the contents
			// get the countyid
			if ( item.getElementsByTagName("countyid")[0] != null ) {
				otherId = item.getElementsByTagName("countyid")[0].firstChild.nodeValue;
				// get the countyname
				otherName = item.getElementsByTagName("countyname")[0].firstChild.nodeValue;
							
				var selCounty = document.getElementById(selectedCounties);     
  				for (var j = 0; j < selCounty.length; j++) 
  				{
					if (selCounty.options[j].value == otherId )
					{
						selCounty.options[j].text = otherName;
						break;
    				}
    			}   											
			}			
		}  																		
      } else {
        alert("Problem: " + checkCountyreq.statusText);
      }
    }
  }  
  
  
  function addCountyFromNode(req, selectedCounties)
  {  
		stripWhiteSpace(req.responseXML);
		var xmlobject = req.responseXML;
		
		var root = xmlobject.getElementsByTagName('countydata')[0];
		var items = root.getElementsByTagName("county");
		
		var hasOtherNode = false;
		var otherName;
		var otherId;		
				
		for (var i = 0 ; i < items.length ; i++) {
			// get one item after another
			var item = items[i];
			// now we have the item object, time to get the contents
			// get the countyid
			if ( item.getElementsByTagName("othercountyid")[0] != null ) {
				otherId = item.getElementsByTagName("othercountyid")[0].firstChild.nodeValue;
				// get the countyname
				otherName = item.getElementsByTagName("othercountyname")[0].firstChild.nodeValue;
			
				var stateid = item.getElementsByTagName("stateid")[0].firstChild.nodeValue;
				
				var statename = item.getElementsByTagName("statename")[0].firstChild.nodeValue;	
				
				var otherInd = item.getElementsByTagName("othercounty")[0].firstChild.nodeValue;
			
	    		var elOptNew = document.createElement('option');        
	    		elOptNew.text = otherName;
				elOptNew.value = otherId					
	    		elOptNew.statename = statename;
				elOptNew.stateid = stateid;
				elOptNew.othercounty = otherInd;				
			
				addSelectedCounty(selectedCounties, elOptNew);
			}			
		}  
      	
  } 
  
  function populateCountyDropDown(req)
  {  
  	clearCountyList();
	var countySelect = document.getElementById(fieldName);  		
	var i;
	stripWhiteSpace(req.responseXML);
	var xmlobject = req.responseXML;
	
	var root = xmlobject.getElementsByTagName('countydata')[0];
	var items = root.getElementsByTagName("county");
	
	var hasOtherNode = false;
	
	
	for (var i = 0 ; i < items.length ; i++) {
		// get one item after another
		var item = items[i];
		// now we have the item object, time to get the contents
		
		if ( item.getElementsByTagName("countyid")[0] != null ) {
			
			// get the countyid		
			var countyid = item.getElementsByTagName("countyid")[0].firstChild.nodeValue;
			// get the countyname
			var countyname = item.getElementsByTagName("countyname")[0].firstChild.nodeValue;

			var stateid = item.getElementsByTagName("stateid")[0].firstChild.nodeValue;
			// get the countyname
			var statename = item.getElementsByTagName("statename")[0].firstChild.nodeValue;
			
			//get the other ind field
			var otherInd = item.getElementsByTagName("othercounty")[0].firstChild.nodeValue;			

	    	var elOptNew = document.createElement('option');        
	    	elOptNew.text = countyname;
			elOptNew.value = countyid;
			elOptNew.statename = statename;
			elOptNew.stateid = stateid;
			elOptNew.othercounty = otherInd;
						
			
			try {
		    	countySelect.add(elOptNew, null); // standards compliant; doesn't work in IE
		  	}
		  	catch(ex) {
		    	countySelect.add(elOptNew); // IE only
		  	}					    
	    }
	    if ( item.getElementsByTagName("othercountyid")[0] != null ) {
	    	hasOtherNode = true;
	    }	    	    			    
	}
	loadFieldNames(xmlobject);  
	return hasOtherNode; 
  }  
  
   
  function clearCountyList()
  {
	var countySelect = document.getElementById(fieldName);	 
	var i;
  	for (i = countySelect.length - 1; i>=0; i--) 
  	{
    	countySelect.remove(i);
    }
  }  
  


/*********************************** Populate County Methods *************************************************/


  function processFieldCountyChange(pos, url, selectedCounties) {    
	if (typeof(countyFieldreqs[pos]) != 'undefined' && countyFieldreqs[pos].freed == 0 && countyFieldreqs[pos].xmlhttp.readyState == 4) {
		if (countyFieldreqs[pos].xmlhttp.status == 200 || countyFieldreqs[pos].xmlhttp.status == 304) {				
			document.getElementById(countySpanName).innerHTML = countyFieldreqs[pos].xmlhttp.responseText;			
			repopulateStateCountyData(formData);
			checkCountySelect(url, selectedCounties);								
      } else {
        alert("Problem: " + countyFieldreqs[pos].xmlhttp.statusText + " status code is " + countyFieldreqs[pos].xmlhttp.status);
      }
	  countyFieldreqs[pos].freed = 1;      
    }
  }

  function addCounties(hiddenSummary, stateName, countyName, selectedCounties, countySpan, groupid,fieldlist)
  {
	var stateSelect = document.getElementById(stateName);  
	var countySelect = document.getElementById(countyName);	
	var i;	
	var stateText;	
	
	grpId = groupid;
	updateFields =  fieldlist.split("|");	

  	for (i = 0 ; i < stateSelect.length; i++) 
  	{
		if (stateSelect.options[i].selected)
		{
			stateText = stateSelect.options[i].text;   		
    	}
    }
    
  	for (i = 0 ; i < countySelect.length; i++)  
  	{
		if (countySelect.options[i].selected)
		{		
	    	var elOptNew = document.createElement('option');        
	    	elOptNew.text = countySelect.options[i].text + ', ' + stateText;
			elOptNew.value = countySelect.options[i].value;
			try {
				elOptNew.statename = countySelect.options[i].statename;
				elOptNew.stateid = countySelect.options[i].stateid;
				elOptNew.othercounty = countySelect.options[i].othercounty;				
			} catch ( e ) { 				
				elOptNew.statename = countySelect.options[i].attributes['statename'].value;
				elOptNew.stateid = countySelect.options[i].attributes['stateid'].value;
				elOptNew.othercounty = countySelect.options[i].attributes['othercounty'].value;				
			}		
			addSelectedCounty(selectedCounties, elOptNew);
			if ( elOptNew.othercounty != 'Y' ) {
				checkOtherCounty(selectedCounties, elOptNew);
			}						     	
    	}
    }
	//checkOtherCounty(selectedCounties);
    populateCountySummary(hiddenSummary, selectedCounties);    
    renderCountyDataFields(selectedCounties, countySpan,groupid);  
  }

  function renderCountyDataFields(selectedCounties, countySpan, grpId)
  {
	var selCounties = document.getElementById(selectedCounties);	  
    var renderedCounties = 0;
    var allCounties = new Array();
    var i;
    var j;
  	for (i = selCounties.length - 1; i>=0; i--) 
  	{
		allCounties[renderedCounties] = selCounties.options[i].value;
		renderedCounties++;
    }    
    
    var urlString = 'grpid=' + grpId + '&count=' + renderedCounties;
    j=0;
    for ( i=allCounties.length - 1; i>=0; i-- ) 
    {
    	urlString = urlString + '&d' + j + '=' + allCounties[i];
    	j++;     		  
    }        
	document.getElementById("pleasewaitScreen").style.top = (document.body.scrollTop + 150);	
	document.getElementById("pleasewaitScreen").style.visibility="visible";
	grayOut(true, {'zindex':'50','opacity':'30'});	
	setTimeout('retrieveCountyFields("' + urlString + '", "' +  countySpan + '" , "'+ selectedCounties + '")', 10);          
  }

  function addSelectedCounty(selectedCounties, elOptNew)
  {
		var selCounty = document.getElementById(selectedCounties);     
  		for (i = selCounty.length - 1; i>=0; i--) 
  		{
			if (selCounty.options[i].value == elOptNew.value )
			{			
				return;     		
    		}
    	}       	   
		try {
	    	selCounty.add(elOptNew, null); // standards compliant; doesn't work in IE
	  	}
	  	catch(ex) {
	    	selCounty.add(elOptNew); // IE only
	  	}	    
  }


  function checkOtherCounty(selectedCounties, elOptNew)
  {
		var selOtherCounty = document.getElementById(selectedCounties);
		var otherInd = ''; 
		var stateId = '';
		var newStateId = '';		
		var valId = '';    
  		for (var j = selOtherCounty.length - 1; j>=0; j--) 
  		{  			
			try {
				otherInd = selOtherCounty.options[j].attributes['othercounty'].value;							    	    		
			} catch (e) {											
				otherInd = selOtherCounty.options[j].othercounty;
			}			
			if ( otherInd == 'Y' ) {
				try {
					stateId = selOtherCounty.options[j].attributes['stateid'].value;
 				} catch (e) {											
					stateId = selOtherCounty.options[j].stateid;
				}
				
				try {
					newStateId = elOptNew.attributes['stateid'].value;
 				} catch (e) {											
					newStateId = elOptNew.stateid;								
				}
				if ( stateId == newStateId && hasMultiCountyData(selectedCounties, stateId, j) <= 1 ) {
					valId = selOtherCounty.options[j].value;				
					removeSelectedCounty(selectedCounties, valId);				
				}
				
				
				/*							
				if ( hasMultiCountyData(selectedCounties, stateId, j) > 1 ) {
					valId = selOtherCounty.options[j].value;				
					removeSelectedCounty(selectedCounties, valId);
				} 
				*/
									
			}			
    	}       	   			   
  }

  
  function hasMultiCountyData(selectedCounties, otherStateId, otherRowNumber)
  {
  
		var selCounty = document.getElementById(selectedCounties);
		var stateId = '';   
		var stateCnt = 0; 
  		for (i = selCounty.length - 1; i>=0; i--) 
  		{  		
  			if ( i != otherRowNumber ) {
				try {
					stateId = selCounty.options[i].attributes['stateid'].value;
 				} catch (e) {											
					stateId = selCounty.options[i].stateid;
				}
				if ( stateId == otherStateId ) {
					stateCnt++;
				} 			  			  		
  			}		  
  		}
  		return stateCnt;  
  }



  function removeSelectedCounty(selectedCounties, id)
  {
		var selCounty = document.getElementById(selectedCounties);
		for (i = selCounty.length - 1; i>=0; i--) 
  		{
			if (selCounty.options[i].value == id )
			{
				selCounty.remove(i);  		
    		}
    	}    
  }

  function removeCounties(hiddenSummary, countyName, selectedCounties,countySpan, groupId,fieldlist)
  {
	var countySelect = document.getElementById(selectedCounties);	  
	grpId = groupId;	
	updateFields =  fieldlist.split("|");
		
	var removeArray = new Array();
	var removeCounter = 0;
  	for (i = countySelect.length - 1; i>=0; i--) 
  	{
		if (countySelect.options[i].selected)
		{			 			
			removeArray[removeCounter] = countySelect.options[i].value;     		
			removeCounter++;
    	}
    }        
    for ( var j = 0; j< removeArray.length; j++ ) {
    	removeSelectedCounty(selectedCounties, removeArray[j]);    	
    }
    
    populateCountySummary(hiddenSummary, selectedCounties);    
	renderCountyDataFields(selectedCounties,countySpan, groupId);  			
  }


	
  function populateCountySummary(hiddenSummary, selectedCounties)
  {
  	var data = '';
  	var countSumms = document.getElementById(hiddenSummary);	 
  	var countSelect = document.getElementById(selectedCounties);
  	
	for (var i = 0;  i < countSelect.length; i++ ) 
  	{
  		if ( i != 0 ) {
  			data = data + "|";
  		}
		data = data + countSelect.options[i].value;
    }         
  	countSumms.value = data;
  }




/*********************************** Populate State Methods *************************************************/

  function processFieldStateChange() {
    if (stateFieldreq.readyState == 4) { // Complete
      if (stateFieldreq.status == 200) { // OK response	
			document.getElementById(stateSpanName).innerHTML = stateFieldreq.responseText;
			repopulateStateCountyData(formData);			
      } else {
        alert("Problem: " + stateFieldreq.statusText);
      }
    }
  } 
  
  function populateStateSummary(hiddenSummary, selectedStates)
  {
  	var data = '';
  	var stateSumms = document.getElementById(hiddenSummary);	 
  	var stateSelect = document.getElementById(selectedStates);
  	
	for (var i = 0;  i < stateSelect.length; i++ ) 
  	{
  		if ( i != 0 ) {
  			data = data + "|";
  		}
		data = data + stateSelect.options[i].value;
    }         
  	stateSumms.value = data;
  }  
  

  
  function addStates(hiddenSummary, stateName,  selectedStates, stateSpan, groupid,fieldlist)
  {	
	grpId = groupid;
	updateFields =  fieldlist.split("|");	  

	var stateSelect = document.getElementById(stateName);  
  	for (var i = 0; i <  stateSelect.length; i++) 
  	{
		if (stateSelect.options[i].selected)
		{
			addSelectedState(selectedStates, stateSelect.options[i].value, stateSelect.options[i].text);			     	
    	}
    }
	populateStateSummary(hiddenSummary, selectedStates);	     
    renderStateDataFields(selectedStates, stateSpan, groupid);    
  }  


  function renderStateDataFields(selectedStates, stateSpan, grpId)
  {
	var selStates = document.getElementById(selectedStates);	  
    var renderedStates = 0;
    var allStates = new Array();
    var i;
  	for (i = selStates.length - 1; i>=0; i--) 
  	{
		allStates[renderedStates] = selStates.options[i].value;
		renderedStates++;
    }    
    
    var urlString = 'ajax.displayStates?grpid=' + grpId + '&count=' + renderedStates;
    var j=0;
    for ( i=allStates.length - 1; i>=0; i-- ) 
    {
    	urlString = urlString + '&d' + j + '=' + allStates[i];
    	j++;    
    }         
	retrieveStateFields(urlString, stateSpan)  
  } 


  
    function removeStates(hiddenSummary, selectedStates,stateSpan, groupId,fieldlist)
  	{
		var stateSelect = document.getElementById(selectedStates);	  
		grpId = groupId;	
		updateFields =  fieldlist.split("|");
			
		var removeArray = new Array();
		var removeCounter = 0;
	  	for (i = stateSelect.length - 1; i>=0; i--) 
	  	{
			if (stateSelect.options[i].selected)
			{			 			
				removeArray[removeCounter] = stateSelect.options[i].value;     		
				removeCounter++;
	    	}
	    }        
	    for ( var j = 0; j< removeArray.length; j++ ) {		  
	    	removeSelectedState(selectedStates, removeArray[j]);    	
	    }
	    
		populateStateSummary(hiddenSummary, selectedStates);	    
		renderStateDataFields(selectedStates, stateSpan, groupId);	
  }
  
  
  
  
  
  function addSelectedState(selectedStates, id, stateInfo)
  {
		var selState = document.getElementById(selectedStates);     
  		for (i = selState.length - 1; i>=0; i--) 
  		{
			if (selState.options[i].value == id )
			{
				return;     		
    		}
    	}       
	    var elOptNew = document.createElement('option');        
	    elOptNew.text = stateInfo;
		elOptNew.value = id			   
		try {
	    	selState.add(elOptNew, null); // standards compliant; doesn't work in IE
	  	}
	  	catch(ex) {
	    	selState.add(elOptNew); // IE only
	  	}	    
  }  
  
   
  function removeSelectedState(selectedStates, id)
  {
		var selState = document.getElementById(selectedStates);
		for (i = selState.length - 1; i>=0; i--) 
  		{
			if (selState.options[i].value == id )
			{
				selState.remove(i);  		
    		}
    	}    
  }  

  
/**************************************** Subtotal Methods ************************************************/
  
  function showWaitIcon(imgName)
  {
  	var dTag = 'wait' + imgName;
  	var imName = 'img' + imgName;
	if(document.getElementById(dTag).style.display=='none') {
		document.getElementById(dTag).style.display='inline';
		//document.getElementById(dTag).style.visibility = "visible";
	}
	else
	{
		document.getElementById(dTag).style.display='none';
	}
	Img = document.getElementById(imName);		
	//setTimeout('document.images["' + imName + '"].src = "../images/indicator.gif"', 50); 
	setTimeout("Img.src = ../images/indicator.gif",3);
			
	return true;   
  }
  

  function runSubtotal(rs, fields, totalFields,countySelect, runSubtotals)
  {
  	//showWaitIcon(countySelect);
	//updateSubtotal(rs, fields, totalFields,countySelect, runSubtotals);  		
	document.getElementById("pleasewaitScreen").style.top = (document.body.scrollTop + 150);	
	document.getElementById("pleasewaitScreen").style.visibility="visible";
	grayOut(true, {'zindex':'50','opacity':'30'});
	setTimeout('updateSubtotal("' + rs + '", "' +  fields + '" , "'+ totalFields + '", "' + countySelect+ '" , "' + runSubtotals+ '")', 10);	  
  }
  
  
  function updateSubtotal(rs, fields, totalFields,countySelect, runSubtotals)
  {	  
	  	if ( runSubtotals == 'true' ) 
	  	{
	  		calcSubtotals(rs, fields, countySelect, totalFields);	  		
	  	} else {	  	
	  		var fieldArray =  fields.split("|");	
	  		var totalArray = totalFields.split("|");
	    	
		  	for (var j=0; j < fieldArray.length; j++ ) {
		  		var fName = fieldArray[j];
		  		var totalName = totalArray[j];
		  		
		  		var val = 0;
				for (var i = 0; i < rs; i++ ) {
					try {
						if ( i != 0 ) {
							fName = fieldArray[j] + "-" + (i+1);
						}
						if ( document.getElementById(fName).value != '' && document.getElementById(fName).value != '0' ) {
							var fValue = document.getElementById(fName).value;		
							
							fValue = stripComma(fValue);
							var tmp = parseFloat(fValue)
							val = val + tmp;								
						}
					} catch ( ex ) {
						
					}			
				}  		
				var total = document.getElementById(totalName);
				total.disabled = false;
				var formatted = FormatSubtotal(val);
				total.maxLength = formatted.length;
				total.value = formatted;
				total.disabled = true;				
		  	}	  		  		  
	  	}
  		//showWaitIcon(countySelect);
  		grayOut(false);
  		document.getElementById("pleasewaitScreen").style.visibility="hidden";
  	}
  	
  function calcSubtotals(rs, fields, countySelect, totalFields)
  {  		  		
  		var fieldArray =  fields.split("|");
		var totalArray = totalFields.split("|");  		
  		var stateTotalArray = new Array(); 
		  		 		
	  	for (var colCount=0; colCount < fieldArray.length; colCount++ ) {
			var overallTotal = 0;	  
			var totalName = totalArray[colCount];								  
	  		var fName = fieldArray[colCount];	  		
			for (var k=0; k<stateTotalArray.length; k++) {							
				stateTotalArray[k].total = 0;
			}									  	
			stateRowArray = new Array();
			for (var i = 0; i < rs; i++ ) {
				try {															
					if ( i != 0 ) {
						fName = fieldArray[colCount] + "-" + (i+1);
					}
					var fieldElement = document.getElementById(fName);
					var fValue = fieldElement.value;
					
					var stOption = getStateForRow(countySelect, (i+1));				
					var addOp = 1;
					for (var k=0; k<stateTotalArray.length; k++) {							
						if ( stateTotalArray[k].value == stOption.value ) {	
							stOption = 	stateTotalArray[k];					
							addOp = 0;
						}					
					}
					if ( addOp == 1 ) {						
						stateTotalArray[stateTotalArray.length] = stOption;
					}					
					
					if ( fValue != '' &&  fValue != '0') {																
						fValue = stripComma(fValue);
						var tmp = parseFloat(fValue);
						overallTotal = tmp + overallTotal;
						stOption.total = stOption.total + tmp;						
					}						
				} catch ( ex ) {
					//alert('error with row ' + i + ' out of ' + rs);
				}
				
			}  
			for ( var i = 0; i < stateTotalArray.length; i++ ) {				
				stateTotalArray[i].totalArray[colCount] = stateTotalArray[i].total;	
			}		
			var total = document.getElementById(totalName);	
			total.disabled = false;		
			var formatted = FormatSubtotal(overallTotal);
			total.maxLength = formatted.length;
			total.value = formatted;
			total.disabled = true;
	  	}
	  	addSubtotalRows("table" + countySelect, stateTotalArray);	  
  	}  	
  	
  	function addSubtotalRows(tableName, stateArray)
  	{
  		var dataTable = document.getElementById(tableName);
		var dataTableFooter = document.getElementById(tableName).getElementsByTagName("TFOOT")[0];
		if ( dataTableFooter != null ) {
			dataTable.removeChild(dataTableFooter);
		} 			
		dataTableFooter = document.createElement("TFOOT");		
  		for ( var stateC = 0; stateC < stateArray.length; stateC++ ) {	  	
	    	var row = document.createElement("TR");
	    	var td1 = document.createElement("TD");
	    	td1.className = "header-black-yellow";
	    	td1.align="center";
	    	td1.appendChild(document.createTextNode("Subtotal for " + stateArray[stateC].text));  
	    	row.appendChild(td1);
	    	for ( var fC = 0; fC<stateArray[stateC].totalArray.length; fC++ ) {
		    	var td2 = document.createElement("TD");
				td2.className = "header-black-yellow";
				td2.align="center";
		    	td2.appendChild (document.createTextNode(FormatSubtotal(stateArray[stateC].totalArray[fC])));	    	
	    		row.appendChild(td2);	    	
	    	}	    		    		  
	    	dataTableFooter.appendChild(row);   		  		  	
  		}  	   	    	  		  	 
  		dataTable.appendChild(dataTableFooter);
  	}
  	
  	
  	var stateRowArray = new Array();
  	
	function getStateForRow(countySelect, rowNumber)
	{
		if ( stateRowArray == null || stateRowArray.length == 0 ) {
			stateRowArray = new Array();
			
			var selectedC = document.getElementById(countySelect);	
	  		for (var i = 0 ; i < selectedC.length; i++ ) 
	  		{
				var elOptNew = document.createElement('option');  
					
				try {
					elOptNew.text = selectedC.options[i].attributes['statename'].value;
					elOptNew.value = selectedC.options[i].attributes['stateid'].value;				
					    
		    			
				} catch (e) {											
					elOptNew.text = selectedC.options[i].statename;
					elOptNew.value = selectedC.options[i].stateid;
				}				
						
				elOptNew.total = 0;				
				elOptNew.totalArray = new Array();
				stateRowArray[i] = elOptNew;
	    	} 												
		}
		return stateRowArray[rowNumber - 1];		
	}

	function FormatSubtotal(nStr) 
	{   	 		
		nStr += '';
		x = nStr.split('.');
		x1 = x[0];
		x2 = x.length > 1 ? '.' + x[1] : '';
		var rgx = /(\d+)(\d{3})/;
		while (rgx.test(x1)) {
			x1 = x1.replace(rgx, '$1' + ',' + '$2');
		}
		var kd = x1 + x2;
		return kd;
	}



  function repopulateStateCountyData(formData)
  {
	var qs2 = new Querystring(formData);	
	var allCounty = document.getElementById('csgsummary_' + grpId);
	
	if ( allCounty != null ) {
		var countyArray =  allCounty.value.split("|");
		for ( var i=0; i< countyArray.length; i++ ) {
			//get current county row
			var currentRow = document.getElementById('csf_' + countyArray[i] + '_' + grpId);
			
			//get previous county row
			var prevRow = qs2.get('csf_' + countyArray[i] + '_' + grpId);
						
			if ( currentRow != null && prevRow != null ) { //this row was there before
				for ( var fl = 0 ; fl<updateFields.length; fl++ ) {
					var oldFName = updateFields[fl];
					if ( prevRow != 1 ) {
						oldFName = updateFields[fl] + "-" + prevRow;
					}
					
					var curFName = updateFields[fl]
					if ( currentRow.value != 1 ) {
						curFName = updateFields[fl] + "-" + currentRow.value;
					} 
					var v = qs2.get(oldFName);
					if ( v != null && v != '' & v != ' ' ) {
						try 
						{		
							var replVal = document.getElementById(curFName);					
							if ( replVal != null ) {
								replVal.value = v;
							}
							
						} catch ( e ) 
						{
							alert('got error ' + e.toString());
						} 										
					}				
				}																	
			} 				
		}					
	}
	grayOut(false);
  	document.getElementById("pleasewaitScreen").style.visibility="hidden";	 	
  }


/**************************************** JavaScript Utilities ************************************************/
    function loadFieldNames(xmlObject)
    {
		var root = xmlObject.getElementsByTagName('countydata')[0];
		var items = root.getElementsByTagName("fieldname");
		for (var i = 0 ; i < items.length ; i++) {
			// get one item after another
			var fName = items[i].firstChild.nodeValue;   
		}		        
    }
    
  
	function is_ws(nod) {
		return !(/[^\t\n\r ]/.test(nod.data));
	}
	
	function findWhiteSpace(node, nodeNo) {
		for (i=0; i<node.childNodes.length; i++) {
			if (node.childNodes[i].nodeType == 3 && is_ws(node.childNodes[i])) {
				nodesToDelete[nodesToDelete.length] = node.childNodes[i]
			}
			if (node.childNodes[i].hasChildNodes()) {
				findWhiteSpace(node.childNodes[i], i);
			}
		}
		node = node.parentNode;
		i = nodeNo;
	}
	
	function stripWhiteSpace(node) {
		nodesToDelete = Array();
		findWhiteSpace(node, 0);
		for(i=nodesToDelete.length-1;i>=0;i--) {
			nodeRef = nodesToDelete[i];
			nodeRef.parentNode.removeChild(nodeRef)
		}
	} 

