// ===================================================================
// Function that adds a form field to a form 
// ===================================================================
function addSingleFormField(theForm, fieldType, fieldName, fieldValue) {
    if (document.getElementById) {
      var input = document.createElement('INPUT');
        if (document.all) { // what follows should work with NN6 but doesn't in M14
          input.type = fieldType;
          input.name = fieldName;
          input.value = fieldValue;
        }
        else if (document.getElementById) { // so here is the NN6 workaround
          input.setAttribute('type', fieldType);
          input.setAttribute('name', fieldName);
          input.setAttribute('value',  fieldValue);
        }
      theForm.appendChild(input);
    }
}
// ===================================================================
// Function that enables disabled fields 
// ===================================================================
function enableFormFields (theForm) { 
	for (i = 0; i < theForm.elements.length; i++) {		
			theForm.elements[i].disabled = false;
	}
  return true;  
}

// ===================================================================
// Function that displays a confirm box, and lets the user continue 
// or cancel
// ===================================================================
function displayConfirmWindow (theMessage) {
  if (confirm(theMessage)) {
    return true;
  }
  else {
    return false;
  }
}

// ===================================================================
// Function that takes in a form object and disables all the buttons on it.
// Useful to be called just before submitting a form, so that the buttons
// will be disabled, and user will not click twice on a submit button.
// ===================================================================
function disableFormButtons(theForm) {
	for (i = 0; i < theForm.elements.length; i++) {
		if ( (theForm.elements[i].type == "submit") ||
			 (theForm.elements[i].type == "button") ||
			 (theForm.elements[i].type == "reset") ) {
			theForm.elements[i].disabled = true;
		}
	}
}

// ===================================================================
// Function that toggles a field based on the ID of the switch and
// the toggle field
// ===================================================================
function toggleField(toggleSwitchID,toggleFieldID) {
  var toggleSwitch = document.getElementById(toggleSwitchID);
  var toggleField = document.getElementById(toggleFieldID);
  if (toggleSwitch.checked == false) {
    toggleField.disabled = true;
  }
  else {
    toggleField.disabled = false;
  }
}

// ===================================================================
// Function that displays an Alert box
// or cancel
// ===================================================================
function displayAlertWindow (theMessage) {
  alert(theMessage);
}
// ===================================================================
// Popup Window Function
// ===================================================================
var windowPopupWindow = null;
function windowPopup(mypage,myname,w,h,pos,infocus){
  	if(pos == 'random'){
		LeftPosition=(screen.width)?Math.floor(Math.random()*(screen.width-w)):100;
		TopPosition=(screen.height)?Math.floor(Math.random()*((screen.height-h)-75)):100;
	}
	if(pos == 'center'){
		LeftPosition=(screen.width)?(screen.width-w)/2:100;
		TopPosition=(screen.height)?(screen.height-h)/2:100;
	}
	else if((pos != 'center' && pos != 'random') || pos == null){
		LeftPosition=100;
		TopPosition=100;
	}
	settings='width='+ w + ',height='+ h + ',top=' + TopPosition + ',left=' + LeftPosition + ',location=no,directories=no,menubar=no,toolbar=no,status=no,scrollbars=yes,resizable=yes,dependent=no';
	windowPopupWindow=window.open('',myname,settings);
	if(infocus=='front'){
    	windowPopupWindow.focus();
		windowPopupWindow.location = mypage;
	}
}
// ===================================================================
// Function that counts how many checkboxes are selected
// In Parameters are the entire form and the field name for the select all checkbox
// Function returns how many checkboxes are selected excluding the select all
// ===================================================================
function selectedCheckboxesExist(theForm, selectAllCheckbox) {
	var x = 0;
    for (var i = 0; i < document.forms[theForm.name].elements.length; i++) {
         if ((document.forms[theForm.name].elements[i].type == "checkbox") &&
         	 (document.forms[theForm.name].elements[i].name != selectAllCheckbox)) {
            if (document.forms[theForm.name].elements[i].checked == true) {
                x++;
            }
        }
    }
return x;
}
// ===================================================================
// Generic List Validation.
// PARAMETERS: theForm - The Form Object
//             selectAllCheckbox - The Name of the Check all Checkbox
//             MSG_listTitle - The list title to be displayed in the 
//                    alert
//             MSG_extraMessage - Extra message to be appended to the
//                    alert when confirming the delete.
// ===================================================================
function validateList(theForm, selectAllCheckbox, MSG_listTitle, MSG_extraMessage) {
  // we check how many checkboxes are selected
  var howmany = selectedCheckboxesExist(theForm, selectAllCheckbox);
  var MSG_confirmSelectOne = MSG_validateList['SELECTONE'] + MSG_listTitle + MSG_period;
  var MSG_confirmDeleteMessage = MSG_validateList['CONFIRMDELETE'] + MSG_listTitle + MSG_PluralParenthesis +'?';
  var MSG_confirmApproveMessage = MSG_validateList['CONFIRMAPPROVE'] + MSG_listTitle + MSG_PluralParenthesis +'?';
  var MSG_confirmUnapproveMessage = MSG_validateList['CONFIRMUNAPPROVE'] + MSG_listTitle + MSG_PluralParenthesis +'?';
  // we add extra text to the confirmation message
  if (MSG_extraMessage) {
  	MSG_confirmDeleteMessage += MSG_newline + MSG_extraMessage;  
    MSG_confirmApproveMessage += MSG_newline + MSG_extraMessage;
    MSG_confirmUnapproveMessage += MSG_newline + MSG_extraMessage;
  }
  
  if ((selectedButtonId == 'activateButton') ||
      (selectedButtonId == 'inactivateButton')) {
    if (howmany == 0) {
         alert(MSG_confirmSelectOne);
         return false;
    }
    return true;
  }  
  if ((selectedButtonId == 'deleteButton') ||
      (selectedButtonId == 'hideButton')){
    if (howmany == 0) {
         alert(MSG_confirmSelectOne);
         return false;
    }
    if (confirm(MSG_confirmDeleteMessage)) {        
        return true;
    }
  }
  return false;
}


/* SOURCE FILE: CheckBoxGroup.js */
function CheckBoxGroup(){this.controlBox=null;this.controlBoxChecked=null;this.maxAllowed=null;this.maxAllowedMessage=null;this.masterBehavior=null;this.formRef=null;this.checkboxWildcardNames=new Array();this.checkboxNames=new Array();this.totalBoxes=0;this.totalSelected=0;this.setControlBox=CBG_setControlBox;this.setMaxAllowed=CBG_setMaxAllowed;this.setMasterBehavior=CBG_setMasterBehavior;this.addToGroup=CBG_addToGroup;this.expandWildcards=CBG_expandWildcards;this.addWildcardCheckboxes=CBG_addWildcardCheckboxes;this.addArrayCheckboxes=CBG_addArrayCheckboxes;this.addSingleCheckbox=CBG_addSingleCheckbox;this.check=CBG_check;}
function CBG_setControlBox(name){this.controlBox=name;}
function CBG_setMaxAllowed(num,msg){this.maxAllowed=num;if(msg!=null&&msg!=""){this.maxAllowedMessage=msg;}}
function CBG_setMasterBehavior(b){this.masterBehavior = b.toLowerCase();}
function CBG_addToGroup(){if(arguments.length>0){for(var i=0;i<arguments.length;i++){this.checkboxWildcardNames[this.checkboxWildcardNames.length]=arguments[i];}}}
function CBG_expandWildcards(){if(this.formRef==null){alert("ERROR: No form element has been passed.  Cannot extract form name!");return false;}for(var i=0;i<this.checkboxWildcardNames.length;i++){var n = this.checkboxWildcardNames[i];var el = this.formRef[n];if(n.indexOf("*")!=-1){this.addWildcardCheckboxes(n);}else if(CBG_nameIsArray(el)){this.addArrayCheckboxes(n);}else{this.addSingleCheckbox(el);}}}
function CBG_addWildcardCheckboxes(name){var i=name.indexOf("*");if((i==0) ||(i==name.length-1)){searchString=(i)?name.substring(0,name.length-1):name.substring(1,name.length);for(var j=0;j<this.formRef.length;j++){currentElement = this.formRef.elements[j];currentElementName=currentElement.name;var partialName =(i)?currentElementName.substring(0,searchString.length) : currentElementName.substring(currentElementName.length-searchString.length,currentElementName.length);if(partialName==searchString){if(CBG_nameIsArray(currentElement)) this.addArrayCheckboxes(currentElement);else this.addSingleCheckbox(currentElement);}}}}
function CBG_addArrayCheckboxes(name){if((CBG_nameIsArray(this.formRef[name])) &&(this.formRef[name].length>0)){for(var i=0;i<this.formRef[name].length;i++){this.addSingleCheckbox(this.formRef[name][i]);}}}
function CBG_addSingleCheckbox(obj){if(obj != this.formRef[this.controlBox]){this.checkboxNames[this.checkboxNames.length]=obj;this.totalBoxes++;if(obj.checked){this.totalSelected++;}}}
function CBG_check(obj){var checked=obj.checked;if(this.formRef==null){this.formRef=obj.form;this.expandWildcards();if(this.controlBox==null || obj.name!=this.controlBox){this.totalSelected +=(checked)?-1:1;}}if(this.controlBox!=null&&obj.name==this.controlBox){if(this.masterBehavior=="all"){for(i=0;i<this.checkboxNames.length;i++){this.checkboxNames[i].checked=checked;}this.totalSelected=(checked)?this.checkboxNames.length:0;}else{if(!checked){obj.checked =(this.totalSelected>0)?true:false;obj.blur();}}}else{if(this.masterBehavior=="all"){if(!checked){this.formRef[this.controlBox].checked=false;this.totalSelected--;}else{this.totalSelected++;}if(this.controlBox!=null){this.formRef[this.controlBox].checked=(this.totalSelected==this.totalBoxes)?true:false;}}else{if(!obj.checked){this.totalSelected--;}else{this.totalSelected++;}if(this.controlBox!=null){this.formRef[this.controlBox].checked=(this.totalSelected>0)?true:false;}if(this.maxAllowed!=null){if(this.totalSelected>this.maxAllowed){obj.checked=false;this.totalSelected--;if(this.maxAllowedMessage!=null){alert(this.maxAllowedMessage);}return false;}}}}}
function CBG_nameIsArray(obj){return((typeof obj.type!="string")&&(obj.length>0)&&(obj[0]!=null)&&(obj[0].type=="checkbox"));}


// ===================================================================
// Generic Field Check
// strValue is the string to be verified,
// validateType is the type of filter
// ===================================================================
function genericFieldValidate(strValue, validateType) {  
  switch (validateType) {		
  	case "PHONE" :    		
        var objRegExp =  /((\(\d{3,4}\)|\d{3,4}-)\d{4,9}(-\d{1,5}|\d{0}))|(\d{4,12})/;
        break;
  	case "EMAIL" :
  		  var objRegExp  = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
        break;
    default:
    	return true;
    	break;
  } 
  return objRegExp.test(strValue); 
}

// ===================================================================
// String Filtering function.
// ===================================================================
function filterString(theStr, validValues) {
    var filteredOutput = '';
    for (var i=0; i<theStr.length; i++) {
       if (validValues.indexOf(theStr.charAt(i)) != -1) {
          filteredOutput += theStr.charAt(i);
       }
    }
return filteredOutput;
}
// ===================================================================
// Misc Validations
// ===================================================================
function LTrim(str){if(str==null){return null;}for(var i=0;str.charAt(i)==" ";i++);return str.substring(i,str.length);}
function RTrim(str){if(str==null){return null;}for(var i=str.length-1;str.charAt(i)==" ";i--);return str.substring(0,i+1);}
function Trim(str){return LTrim(RTrim(str));}
function LTrimAll(str){if(str==null){return str;}for(var i=0;str.charAt(i)==" " || str.charAt(i)=="\n" || str.charAt(i)=="\t";i++);return str.substring(i,str.length);}
function RTrimAll(str){if(str==null){return str;}for(var i=str.length-1;str.charAt(i)==" " || str.charAt(i)=="\n" || str.charAt(i)=="\t";i--);return str.substring(0,i+1);}
function TrimAll(str){return LTrimAll(RTrimAll(str));}
function isNull(val){return(val==null);}
function isBlank(val){if(val==null){return true;}for(var i=0;i<val.length;i++){if((val.charAt(i)!=' ')&&(val.charAt(i)!="\t")&&(val.charAt(i)!="\n")&&(val.charAt(i)!="\r")){return false;}}return true;}
function isInteger(val){if(isBlank(val)){return false;}for(var i=0;i<val.length;i++){if(!isDigit(val.charAt(i))){return false;}}return true;}
function isNumeric(val){return(parseFloat(val,10)==(val*1));}
function isArray(obj){return(typeof(obj.length)=="undefined")?false:true;}
function isDigit(num){if(num.length>1){return false;}var string="1234567890";if(string.indexOf(num)!=-1){return true;}return false;}
function setNullIfBlank(obj){if(isBlank(obj.value)){obj.value="";}}
function setFieldsToUpperCase(){for(var i=0;i<arguments.length;i++){arguments[i].value = arguments[i].value.toUpperCase();}}
function disallowBlank(obj){var msg=(arguments.length>1)?arguments[1]:"";var dofocus=(arguments.length>2)?arguments[2]:false;if(isBlank(getInputValue(obj))){if(!isBlank(msg)){alert(msg);}if(dofocus){if(isArray(obj) &&(typeof(obj.type)=="undefined")){obj=obj[0];}if(obj.type=="text"||obj.type=="textarea"||obj.type=="password"){obj.select();}obj.focus();}return true;}return false;}
function disallowModify(obj){var msg=(arguments.length>1)?arguments[1]:"";var dofocus=(arguments.length>2)?arguments[2]:false;if(getInputValue(obj)!=getInputDefaultValue(obj)){if(!isBlank(msg)){alert(msg);}if(dofocus){if(isArray(obj) &&(typeof(obj.type)=="undefined")){obj=obj[0];}if(obj.type=="text"||obj.type=="textarea"||obj.type=="password"){obj.select();}obj.focus();}setInputValue(obj,getInputDefaultValue(obj));return true;}return false;}
function commifyArray(obj,delimiter){if(typeof(delimiter)=="undefined" || delimiter==null){delimiter = ",";}var s="";if(obj==null||obj.length<=0){return s;}for(var i=0;i<obj.length;i++){s=s+((s=="")?"":delimiter)+obj[i].toString();}return s;}
function getSingleInputValue(obj,use_default,delimiter){switch(obj.type){case 'radio': case 'checkbox': return(((use_default)?obj.defaultChecked:obj.checked)?obj.value:null);case 'text': case 'hidden': case 'textarea': return(use_default)?obj.defaultValue:obj.value;case 'password': return((use_default)?null:obj.value);case 'select-one':
if(obj.options==null){return null;}if(use_default){var o=obj.options;for(var i=0;i<o.length;i++){if(o[i].defaultSelected){return o[i].value;}}return o[0].value;}if(obj.selectedIndex<0){return null;}return(obj.options.length>0)?obj.options[obj.selectedIndex].value:null;case 'select-multiple':
if(obj.options==null){return null;}var values=new Array();for(var i=0;i<obj.options.length;i++){if((use_default&&obj.options[i].defaultSelected)||(!use_default&&obj.options[i].selected)){values[values.length]=obj.options[i].value;}}return(values.length==0)?null:commifyArray(values,delimiter);}alert("FATAL ERROR: Field type "+obj.type+" is not supported for this function");return null;}
function getSingleInputText(obj,use_default,delimiter){switch(obj.type){case 'radio': case 'checkbox': 	return "";case 'text': case 'hidden': case 'textarea': return(use_default)?obj.defaultValue:obj.value;case 'password': return((use_default)?null:obj.value);case 'select-one':
if(obj.options==null){return null;}if(use_default){var o=obj.options;for(var i=0;i<o.length;i++){if(o[i].defaultSelected){return o[i].text;}}return o[0].text;}if(obj.selectedIndex<0){return null;}return(obj.options.length>0)?obj.options[obj.selectedIndex].text:null;case 'select-multiple':
if(obj.options==null){return null;}var values=new Array();for(var i=0;i<obj.options.length;i++){if((use_default&&obj.options[i].defaultSelected)||(!use_default&&obj.options[i].selected)){values[values.length]=obj.options[i].text;}}return(values.length==0)?null:commifyArray(values,delimiter);}alert("FATAL ERROR: Field type "+obj.type+" is not supported for this function");return null;}
function setSingleInputValue(obj,value){switch(obj.type){case 'radio': case 'checkbox': if(obj.value==value){obj.checked=true;return true;}else{obj.checked=false;return false;}case 'text': case 'hidden': case 'textarea': case 'password': obj.value=value;return true;case 'select-one': case 'select-multiple':
var o=obj.options;for(var i=0;i<o.length;i++){if(o[i].value==value){o[i].selected=true;}else{o[i].selected=false;}}return true;}alert("FATAL ERROR: Field type "+obj.type+" is not supported for this function");return false;}
function getInputValue(obj,delimiter){var use_default=(arguments.length>2)?arguments[2]:false;if(isArray(obj) &&(typeof(obj.type)=="undefined")){var values=new Array();for(var i=0;i<obj.length;i++){var v=getSingleInputValue(obj[i],use_default,delimiter);if(v!=null){values[values.length]=v;}}return commifyArray(values,delimiter);}return getSingleInputValue(obj,use_default,delimiter);}
function getInputText(obj,delimiter){var use_default=(arguments.length>2)?arguments[2]:false;if(isArray(obj) &&(typeof(obj.type)=="undefined")){var values=new Array();for(var i=0;i<obj.length;i++){var v=getSingleInputText(obj[i],use_default,delimiter);if(v!=null){values[values.length]=v;}}return commifyArray(values,delimiter);}return getSingleInputText(obj,use_default,delimiter);}
function getInputDefaultValue(obj,delimiter){return getInputValue(obj,delimiter,true);}
function isChanged(obj){return(getInputValue(obj)!=getInputDefaultValue(obj));}
function setInputValue(obj,value){var use_default=(arguments.length>1)?arguments[1]:false;if(isArray(obj)&&(typeof(obj.type)=="undefined")){for(var i=0;i<obj.length;i++){setSingleInputValue(obj[i],value);}}else{setSingleInputValue(obj,value);}}
function isFormModified(theform,hidden_fields,ignore_fields){if(hidden_fields==null){hidden_fields="";}if(ignore_fields==null){ignore_fields="";}var hiddenFields=new Object();var ignoreFields=new Object();var i,field;var hidden_fields_array=hidden_fields.split(',');for(i=0;i<hidden_fields_array.length;i++){hiddenFields[Trim(hidden_fields_array[i])]=true;}var ignore_fields_array=ignore_fields.split(',');for(i=0;i<ignore_fields_array.length;i++){ignoreFields[Trim(ignore_fields_array[i])]=true;}for(i=0;i<theform.elements.length;i++){var changed=false;var name=theform.elements[i].name;if(!isBlank(name)){var type=theform.elements[i].type;if(!ignoreFields[name]){if(type=="hidden"&&hiddenFields[name]){changed=isChanged(theform[name]);}else if(type=="hidden"){changed=false;}else{changed=isChanged(theform[name]);}}}if(changed){return true;}}return false;}

// ===================================================================
// Shows/Hides an element by ID and displays as block
// ===================================================================
function toggleID(id) { 
	if (document.getElementById(id).style.visibility != 'hidden') {
    document.getElementById(id).style.visibility = 'hidden';
    document.getElementById(id).style.display = 'none';
  } 
  else {
    document.getElementById(id).style.visibility = 'visible';
    document.getElementById(id).style.display = 'block';
  }
}
// ===================================================================
// Shows an element by ID
// ===================================================================
function showID(id) { 
	if (document.getElementById(id).style.visibility == 'hidden') {
    document.getElementById(id).style.visibility = 'visible';
    document.getElementById(id).style.display = 'block';
  }
}
// ===================================================================
// Hides an element by ID
// ===================================================================
function hideID(id) { 
	if (document.getElementById(id).style.visibility == 'visible') {
    document.getElementById(id).style.visibility = 'hidden';
    document.getElementById(id).style.display = 'none';
  }
}











/* Zooming link script by Paul Anderson, copyright 2001 CNET Builder.com.
   May be freely used with attribution. Not for resale. All rights reserved. 
   Make a link zoom open by adding the event handler   
   onclick="zoomBox(event,this);return false"   
   To zoom into a new, positioned window add width, height, left, and top   
   onclick="zoomBox(event,this,640,480,100,50);return false"
   It is a Javascript 1.2 version
*/

var maxW,maxH,fromX,fromY,toX,toY,adjX,adjY,zBox,zStep=0,zLink,zNew;

function zoomBox(evt,zlink,maxw,maxh,tox,toy) {
if (arguments.length > 2) zNew=1;
scrollH=(window.pageYOffset!=null)?window.pageYOffset:document.body.scrollTop;
maxW=maxw?maxw:window.innerWidth?innerWidth:document.body.clientWidth;
maxH=maxh?maxh:window.innerHeight?innerHeight:document.body.clientHeight;
toX=tox?tox:0;
toY=(toy?toy:0)+scrollH;
fromX=evt.pageX?evt.pageX:evt.clientX;
fromY=(evt.pageY?evt.pageY:evt.clientY)+(document.all?scrollH:0);
adjX=toX+evt.screenX-fromX;
adjY=toY+evt.screenY-fromY;
if (document.createElement && document.body.appendChild && !zBox) {
	zBox=document.createElement("div");
	zBox.style.position="absolute";
	document.body.appendChild(zBox);
} else if (document.all && !zBox) {
	document.all[document.all.length-1].outerHTML+='<div id="zBoxDiv" style="position:absolute"></div>';
	zBox=document.all.zBoxDiv;
} else if (document.layers && !zBox) {
	zBox=new Layer(maxW);
	zBox.style=zBox;
	}
zLink=zlink;
doZoom();
}

function doZoom() {
zStep+=1;
zPct=(10-zStep)/10
if (document.layers) {
	zBox.moveTo(toX+zPct*(fromX-toX),toY+zPct*(fromY-toY));
	zBox.document.open();
	zBox.document.write("<table width='"+maxW*(1-zPct)+"' height="+maxH*(1-zPct)+" border=2 cellspacing=0><tr><td></td></tr></table>");
	zBox.document.close();
	} else {
	zBox.style.border="1px solid #000000";
	zBox.style.left=toX+zPct*(fromX-toX);
	zBox.style.top=toY+zPct*(fromY-toY);
	zBox.style.width=maxW*(1-zPct);
	zBox.style.height=maxH*(1-zPct);
	}
zBox.style.visibility="visible";
if (zStep < 10) setTimeout("doZoom("+fromX+","+fromY+","+toX+","+toY+")",30);
else {
	zBox.style.visibility='hidden';
	zStep=0;
	if (zLink && !zNew) location.href=zLink.href;
	else if (zLink && zNew) {
		var w=window.open(zLink.href,'','width='+maxW+',height='+maxH+',left='+adjX+',top='+adjY+',scrollbars,resizable');
		zNew=null;
		}
	}
}