  /**************************************************************/

/* HOWDY ENABLING / DISABLING CONTROLS */
function toggleField(targetId){
	target = getElement(targetId);
	
	if( (target.disabled==true))
		target.disabled = false;
	 else target.disabled = true;
}

function disableField(targetId){
	target = getElement(targetId);
	target.disabled = true;
}

function enableField(targetId){
	target = getElement(targetId);
	target.disabled = false;
}


/* DATA VALIDATION / SUBMIT FORM */     

function dataChanged(el) {
    dataChangedObj = getElement("data_changed");
    if(el.value != el.defaultValue) 
      dataChangedObj.value='1';
 }


function submitForm() {

		var okSubmit = true;
    actionObj = document.getElementById("action");
		if (!actionObj)
			alert("ERROR:  form requires an 'action' field, used to provide form name to validateFields()");
    //alert(actionObj.name);
    /*
    dataChangedObj = getElement("data_changed");
    if (dataChangedObj && (dataChangedObj.value == '1') ) {
      if(actionObj.value=="Cancel") {
          okSubmit = confirm("Discard your Changes?");
      }
    }
    */
    if (okSubmit && !(actionObj.value=="Cancel")) {
    	var validateFields = 'validate';
    	if (validateData(actionObj.form) )
    		actionObj.form.Submit;
    	else
    		okSubmit=false;
    }
    return okSubmit;
  }

function validateData(formObj, validateFields) 
{
	//This function looks for validation info in the 'accept' attribute of each HTML control.  (accept is common to all input controls but is only used by type='file'.)  
	//So I use it stuff in a code as follows: accept="[required|email] [|name of field to display]"
	//TODO:  email validation is not yet implemented.  Only required.

	var strung = "";
	var badDataMsg = "";

 	var elCount = formObj.elements.length;
  for(var i=0; i < elCount; i++) {
	 	el = formObj.elements[i];

		if(el.accept)
		{
	 		fields = new Array();
			fields = el.accept.split("|");
		
			if ( (el.accept.indexOf("required") != -1) && (!el.value.length) )
			{
				badDataMsg+= (fields.length > 1 ? fields[1] : el.name)+" is required.\n"; 
				el.style.backgroundColor='#FDF779';
			}else{
				el.style.backgroundColor='#FFFFFF'; //reset to default (white) since user may have fixed error
			}

			
			if ( (el.accept.indexOf("number") != -1) && (isNaN(el.value)) )
			{
				badDataMsg+= (fields.length > 1 ? fields[1] : el.name)+" must be a number.\n"; 
				el.style.backgroundColor='#FDF779';
			}else{
				el.style.backgroundColor='#FFFFFF'; //reset to default (white) since user may have fixed error
			}

		}	
  }

  if(badDataMsg != "") {
    alert(badDataMsg);
    return false;
  }else{
  	return true;
  }
}

	
/*GET ELEMENT */
	function getElement(element) {
//		alert('element in getElement='+element);
	  if(document.all) 
	  {
	    return document.all[element];
	  } 
	  else if (document.getElementById(element)) 
	  {
	    return document.getElementById(element);
	  }
	  else
	  {
	    return document.getElementsByName(element)[0];
	  }
	}


/* SHOW / HIDE CONTROLS IF VALUE PRESENT -- use for Page OnLoad event */
  
  //show + or - image in tree-like control
  function showHideRow(unit_id) {

    var div   = getElement('div_'+unit_id);
    var img   = getElement('img_'+unit_id);
    //var flag  = getElement('row_visible_'+unit_id);
    if (div.style.visibility == 'hidden') {
      div.style.visibility = 'visible';
      div.style.display = 'block';
      img.src = "images/minus.gif";
      //flag.value = "visible";
    } else {
      div.style.visibility = 'hidden';
      div.style.display = 'none';
      img.src = "images/plus.gif";
      //flag.value = "hidden";
    }
  }


/*HIDE/SHOW div if INPUT/TEXTAREA has data*/
function showIfValued( textboxid, targetDivId ){
	textboxObj = getElement( textboxid);
//alert('SHOWIFVALUED textboxname=' + textboxObj.name + '| textboxval=' + textboxObj.value + '| textboxchecked=' + textboxObj.checked);
	if(textboxObj.value != "")
	{
		turnon (targetDivId);
	}
	else if(textboxObj.innerHTML != "")
	{
		turnon (targetDivId);
	}
	else
	{
		turnoff( targetDivId );
	}
}

/*HIDE/SHOW on radio/checkbox click, 
	where HIDDEN DIVs have MATCHED ARRAYS with radio/check options*/
function showOnValue( radioId, values, targetIds ){
	//alert('radioId='+radioId);
	radioObj = getElement( 'response_'+radioId);
	if (radioObj)
//		alert('SHOW ON VALUE radioname=' + radioObj.name + '| radioval=' + radioObj.value + '| radiochecked=' + radioObj.checked);
	
	vals = new Array();
	vals = values.split(",");
	targets = new Array();
	targets =  targetIds.split(","); 
	//alert('vals=' + vals + ', vals-0=' + vals[0]);
	for(x in vals)
	{
		if( vals[x] == radioObj.value )
		{
			turnon ('div_'+targets[x]);
		}else{
			turnoff('div_'+targets[x]);
		}	
	}
}

/* HIDE/SHOW when radio/checkbox is clicked/changed */
function showIfChecked( radioId, targetDivId ){
	
	radioObj = getElement(radioId);
	//alert('SHOWIFCHECKED: radioname=' + radioObj.name + '| radiotype=' + radioObj.type + '| radiochecked=' + radioObj.checked);

	if(radioObj.checked)
	{
		turnon (targetDivId);
	}
	else
	{
		turnoff( targetDivId );
	}

}

/*HIDE/SHOW hidden div onLoad. 
	use as onLoad js function for htmlCheckboxGroups and htmlRadioGroups
	where HIDDEN DIVs have MATCHED ARRAYS with check options*/
function showOnChecked( sourceId, values, targetIds ){

	var sourceObj;
	sourceObj = getElement('response_'+ sourceId);
//alert('sourceObj ='+sourceObj);

//if(sourceObj) 	alert('sourceObj.name='+sourceObj.name);
///if(sourceObj) 	alert('sourceObj.id='+sourceObj.id);
	
	//will fail if checkbox, since htmlCheckboxGroup names checkboxes as: 
	// e.g. <input name='response_$question_id~$i'
	thisType = (sourceObj) ? sourceObj.type : "checkbox"
	
	vals = new Array();
	vals = values.split(",");
	targets = new Array();
	targets =  targetIds.split(","); 

	for(i=0; i<vals.length; i++)
	{
		showMe = 0;
		if(false && thisType=='radio')
		{
			//alert('i='+i+', sourceObj.value='+sourceObj.value+', sourceObj.checked='+sourceObj.checked);
			showMe = (vals[i] == sourceObj.value) ? 1 : 0;
			//alert('i='+i+', sourceObj.value='+sourceObj.value+', showMe='+showMe+',  vals[i]='+vals[i] + ', targets[i]='+targets[i]);
		
		}else{
			//htmlCheckboxGroup names checkboxes as: <input name='response_$question_id~$i'
			sourceObj = getElement('response_'+sourceId+'~'+i);
			showMe = sourceObj.checked ? 1 : 0;
		}

		//only show/hide if there is a target Hidden DIV specified in targets(data_popups) array
		if(targets[i]!='') 
		{
			if( showMe==1 )
			{
				//alert('GOING TO TURNON WITH targets[i]= ' + 'div_'+targets[i]);
				turnOnIds (targets[i]);
				break;
			}else{
				//alert('GOING TO TURNOFF WITH targets[i]= ' + 'div_'+targets[i]);
				turnoff('div_'+targets[i]);
			}	
		}
	}
}



/*HIDE/SHOW many hidden divs onLoad. Hidden divs are stored in data_popups col
	use as onLoad js function for htmlCheckbox (single) and htmlRadioGroups (single choice -- of course)
*/
function showMultiIfChecked( sourceId, targetIds ){
	sourceObj = getElement('response_'+sourceId);
	
	targets = new Array();
	targets =  targetIds.split(","); 

	for(i=0; i<targets.length; i++)
	{
		if (sourceObj.checked) {
			//alert('GOING TO TURNON WITH targets[i]= ' + 'div_'+targets[i]);
			turnon ('div_'+targets[i]);
		}else{
			//alert('GOING TO TURNOFF WITH targets[i]= ' + 'div_'+targets[i]);
			turnoff('div_'+targets[i]);
		}	
	}
}

/* SHOW / HIDE CONTROLS - use for OnClick and OnChange events */

//if radio/checkbox is not checked, clear the associated (usually response object
function clearDataOnUnCheck(checkId, responseId )
{
  checkObj = getElement(checkId);
	if(checkObj && !checkObj.checked )
	{
		responseObj = getElement(responseId);
		//alert('responseObj= ' + responseObj.value);
		if(responseObj)
		{
			responseObj.value = "";
		}
	}
}


/*HIDE/SHOW a div if INPUT/TEXTAREA field has a value*/
function textToggle2( textboxid, targetDivId, oldDiv ){
	textboxTarget = getElement( textboxid);
	if(textboxTarget.value != "")
	{
		turnon (targetDivId);
		turnoff( oldDiv);
	}
	else
	{
		turnoff( targetDivId );
		turnon( oldDiv);
	}

}


/*simply toggle HIDE/SHOW of ONE hidden div, and CLEAR VALUE if its responseObj had value*/
function toggle( targetId, clearOnUncheck ) 
{ 
	target = getElement( 'div_' + targetId ); 

	if ((!target.style.display) || (target.style.display == "none")) 
	{
		turnon(target.id); 
	}else{
		turnoff(target.id); 
		if(clearOnUncheck!=0)
		{
			//this clears any value in the INPUT/TEXT field *inside* the hidden Div
			responseObj = getElement( 'response_' + targetId );
			//alert('responseObj.value= ' + responseObj.value);
			responseObj.value = "";
		}
	}
}

/*simply toggle HIDE/SHOW of SET OF hidden div, and CLEAR VALUE if its responseObj had value*/
function toggleSet( hiddenDivIds, clearOnUncheck ) 
{ 
	
	targets = new Array();
	targets =  hiddenDivIds.split(","); 
	//alert('targets.length ='+ targets.length);

	for(i=0; i<targets.length; i++)
	{
		showMe = 0;
		
		//note that current page1.php code puts adjacent hidden divs all into the same div, so there may only be one div
		target = getElement( 'div_' + targets[i] ); 
		if(target && target.id != '') 
		{
			//alert('target ='+ target.id);
			if ((!target.style.display) || (target.style.display == "none")) 
			{
				turnon(target.id); 
				showMe = 1;
			}else{
				turnoff(target.id); 
				showMe = 0;
			}
			//alert('showMe for target'+target.id+'='+showMe);
		}
		
		//this clears any value in the INPUT field *inside* the hidden Div
		var responseObj = getElement( 'response_' + targets[i] );
		//if(responseObj) alert('Clearing DATA in responseObj.id= ' + responseObj.id + ',\n type= ' + responseObj.type+', \n length='+responseObj.length+', \n [0]checked='+responseObj.checked+', \n showMe='+showMe+', \n showMe='+showMe);

		if(responseObj && clearOnUncheck==1 && showMe==0)
		{
			if(responseObj.type == 'radio')
			{
				var responseName = 'response_' + targets[i];
				radioObj = document.getElementsByName(responseName);
				if(radioObj.length) {
					for(var j = 0; j < radioObj.length; j++) {
						//if(radioObj) alert('Clearing DATA in radioObj.id= ' + radioObj[j].id + ',\n type= ' + radioObj[j].type+', \n length='+radioObj[j].length+', \n [0]checked='+radioObj[j].checked);
						radioObj[j].checked = false;
					}
				}		
			}else{
				responseObj.value = "";
			}
		}
	}
}



function turnon( targetId ){
	div = getElement(targetId);
	if(div)
	{
		//alert('TURNON div = ' + div.id);
      div.style.visibility = 'visible';
      div.style.display = 'block';

	}
}

function turnoff( targetId ){
	div = getElement(targetId);
	if(div)
	{
		//alert('TURNON div = ' + div.id);
      div.style.visibility = 'hidden';
      div.style.display = 'none';

	}
}


function turnOnIds(targetId){
	showDivs = new Array();
	showDivs = targetId.split("|");

	for(i=0; i<showDivs.length; i++)
	{
		thisDiv = getElement( 'div_' + showDivs[i] ); 

/*	div = getElement(targetId);
	if(div)
	{
*/
		//alert('TURNON div = ' + div.id);
    thisDiv.style.visibility = 'visible';
    thisDiv.style.display = 'block';

	}
}

function turnOffIdsClear( targetId, clearOnUncheck ){
	hideDivs = new Array();
	hideDivs = targetId.split("|");

	for(i=0; i<hideDivs.length; i++)
	{
		thisDiv = getElement( 'div_' + hideDivs[i] ); 
		if(thisDiv)
		{
			turnoff(thisDiv.id);
			if(clearOnUncheck == '1')
			{
				//this clears any value in the INPUT/TEXT field *inside* the hidden Div
				responseObj = getElement('response_' + hideDivs[i] );
				if(responseObj) {
					responseObj.value = "";
				}else{
					//this must be checkbox group, or radiogroup with diff names
					for(var j = 0; j < 99; j++) {
						responseObj = getElement('response_' + hideDivs[i] + '~' + j );
						if(responseObj)
						{
								responseObj.checked = false;
						}else{
							break;
						}
					}	
				}
			}
		}
	}			
}

/*turns off (Hides) a SET OF hidden divs, and CLEARs VALUE (if 2nd param=1) of each if its responseObj had value*/
function turnoffSet( hiddenDivIds, clearOnUncheck ) 
{ 
	
	targets = new Array();
	targets =  hiddenDivIds.split(","); 
	//alert('targets.length ='+ targets.length);

	for(i=0; i<targets.length; i++)
	{
		
		//note that current page1.php code puts adjacent hidden divs all into the same div, so there may only be one div
		target = getElement( 'div_' + targets[i] ); 
		if(target && target.id != '') 
		{
				turnoff(target.id); 
			//alert('HIDING div_'+target.id);
		}else{
			//skip if there is no hidden div for this value
			continue;
		}
		
		//this clears any value in the INPUT field *inside* the hidden Div
		var responseObj = getElement( 'response_' + targets[i] );
		//if(responseObj) alert('Clearing DATA in responseObj.id= ' + responseObj.id + ',\n type= ' + responseObj.type+', \n length='+responseObj.length+', \n [0]checked='+responseObj.checked+', \n showMe='+showMe+', \n showMe='+showMe);

		if(responseObj && clearOnUncheck==1 )
		{
			if(responseObj.type == 'radio')
			{
				var responseName = 'response_' + targets[i];
				radioObj = document.getElementsByName(responseName);
				if(radioObj.length) {
					for(var j = 0; j < radioObj.length; j++) {
						//if(radioObj) alert('Clearing DATA in radioObj.id= ' + radioObj[j].id + ',\n type= ' + radioObj[j].type+', \n length='+radioObj[j].length+', \n [0]checked='+radioObj[j].checked);
						radioObj[j].checked = false;
					}
				}		
			}else{
				responseObj.value = "";
			}
		}
	}
}



	function dialogBox(title, question, doWhat, responseVar, responses, prompts) {

		// call function with:
		// onclick="javascript: dialogBox(<?php echo htmlspecialchars('Title') ?>, <?php echo htmlspecialchars('Question') ?>, action, new Array('yes', 'no'), '[document.form.responseVar]', 'action');

		var myWidth = 300;
		var myHeight = 100;
		var myLeft = (screen.width - myWidth) / 2;
		var myTop = (screen.height - myHeight) / 2;

	  var myFeatures = "toolbar=0,"+
	  									"location=0,"+
	  									"directories=0,"+
	  									"status=0,"+
	  									"menubar=0,"+
	  									"scrollbars=1,"+
	  									"resizable=0,"+
								      "titlebar='yes'"+
	      							"dependent='yes'";

	  myFeatures = myFeatures +
	  						", width="  + myWidth +
	  						", height=" + myHeight +
	  						", left="   + myLeft +
	  						", top="    + myTop;
	  //alert('myFeatures=' + myFeatures);

	  var myVars	= "?title=" + title+
						      "&question=" + question +
						      "&doWhat=" + doWhat +
	      					"&responseVar=" + responseVar +
	      					"&responses=" + responses +
	      					"&prompts=" + ((prompts) ? prompts : "");

	  //alert('myVars=' + myVars );

	  popupWin = window.open("../incs/dialog.php" + myVars,'', myFeatures);

	}
	

