	var submitted=false;
	var alertMsg = "";
function isValid(htmlform){
	var valid=true;
	var elems = htmlform.elements;
	for(var i=0; i<elems.length; i++){
		for(var j=0; j<xx_req_fields.length;j++)
			if(elems[i].name==xx_req_fields[j] && elems[i].value==''){
				valid=false;
				elem=elems[i];
				elem.style.borderColor="#FF8181";
				elem.style.borderStyle="solid";
				elem.style.borderWidth="1px";
			}
	}
	if(!valid) alert("Required field(s) missing");
	return valid;
}
	function safeSubmit(sform,paramAlertMsg){
		if(!isObject(sform))return false;
		if(isdefined("doPreValidation") && doPreValidation && !isValid(sform)) return false;
		if(isValid(sform)){
			if(submitted) alert(alertMsg);
			else {
				submitted=true;
				alertMsg = paramAlertMsg;
				return true;
			}
		}	
		return false;
	}
	function isObject(obj){
		if(typeof obj != "object") return false;	
		else return true;
	}
	function toggle_on_select(selectElement,optionValue,hiddenElem,displayType){
		if (typeof selectElement == 'undefined' || typeof document.getElementById(hiddenElem) == 'undefined' ) return;
		var inverse = (optionValue.charAt(0)=="!");
		var inverse_val = optionValue.substring(1);

		for(var j=0; j<selectElement.options.length ; j++){
		
			if(selectElement.options[j].selected==true && ! inverse){
			
				if(selectElement.options[j].value==optionValue)
				try{	
					document.getElementById(hiddenElem).style.display = displayType;
				}catch(err){
					//alert(selectElement.options[j].value);
					//alert(document.getElementById(hiddenElem).style.display);
					//alert(displayType);
					//alert(err.description);
					break;
				}
				else if(selectElement.options[j].value!=optionValue)
					document.getElementById(hiddenElem).style.display="none";
				
			} else 	if(selectElement.options[j].selected==true && inverse){

				if(selectElement.options[j].value!=inverse_val)
					document.getElementById(hiddenElem).style.display=displayType;
				else if(selectElement.options[j].value==inverse_val)
					document.getElementById(hiddenElem).style.display="none";

			} 
		
		}
		
	}


function isdefined( variable){
    return (typeof(window[variable]) == "undefined")?  false: true;
}

function popUp(URL,width,height) {
day = new Date();
id = day.getTime();
eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width="+width+",height="+height+",left = 340,top = 237');");
}
function arrayIndexOf(sarray,str){
	if(!isArray(sarray)||sarray.length ==0) return -1;
	for(var i=0; i<sarray.length; i++){
		if(sarray[i]==str) return i
	}
	return -1;
}

function isArray(obj) {
   if (obj.constructor.toString().indexOf("Array") == -1)
      return false;
   else
      return true;
}

function errorFields(elements,formName){
	if(!isArray(elements)||elements.length ==0||formName==""||!isObject(document.forms[formName])) return;

	var formFields = document.forms[formName].elements;
	
	for(var i=0; i<formFields.length; i++){
		var index = arrayIndexOf(elements,formFields[i].name);
		if(index>=0){
			var elem = formFields[i];
			elem.style.borderColor="#FF8181";
			elem.style.borderStyle="solid";
			elem.style.borderWidth="1px";
		}
	}
	/*
	for(var i=0; i<fields.length; i++){
		var elements = document.getElementsByName(fields[i]);
		var elem = elements[0];
		for(var j=0; j<elements.length; j++){
			var elem = elements[j];
				//if(elem.type=="select-one"||elem.type=="text"||elem.type=="text"||elem.type=="select-multiple");
			elem.style.borderColor="#FF8181";
			elem.style.borderStyle="solid";
			elem.style.borderWidth="1px";
		}
	}
	*/
}

function alternateColor(tblname,leaveFromTop,leaveFromBottom,color)
{
	if(document.getElementById(tblname)!=null){
		for(var i=leaveFromTop; i<document.getElementById(tblname).rows.length-leaveFromBottom;i++){
			for(var j=0; j<document.getElementById(tblname).rows[i].cells.length; j++){
				var cell = document.getElementById(tblname).rows[i].cells[j];
				var style = cell.style;
				if(i%2==0)
					style.backgroundColor = color;
				else
					style.backgroundColor = "#ffffff";
			}
		}
	} 
}
		
function isArray(obj) {
	//returns true is it is an array
	if (obj.constructor.toString().indexOf("Array") == -1)
		return false;
	else
		return true;
}
function formPopulate(varArray, formName){
	if(typeof document.forms[formName] != "object") return;
	
	if(!isArray(varArray)) return;

	var elems = document.forms[formName].elements;
	var elementType = "";
	
	for (var i=0; i<elems.length; i++){ // in elems){
		var arrayelem = false;
		elementType=elems[i].type;
		if((elems[i].name).indexOf("[]")>=0){ // considered to be an array
			var phpName = (elems[i].name).substring(0,(elems[i].name).length-2);
			
			if(elementType=="checkbox"){
			if (typeof varArray[phpName]!="undefined" && isArray(varArray[phpName])){ // the multiple select or check boxes may only have one user option making the variable non-array
			
						for(var j=0;j<varArray[phpName].length;j++){
						if(varArray[phpName][j]==elems[i].value)
							elems[i].checked=true;
					}
				} else { // if user selected only one, we don't need to traverse it (removed 'j' index)
					if(varArray[phpName]==elems[i].value)
						elems[i].checked=true;
				}
			} else if(elementType=="select-multiple"){
				
				if (typeof varArray[phpName]!="undefined"){
					if(isArray(varArray[phpName])){ // the multiple select or check boxes may only have one user option making the variable non-array
						// FOR: traversing through each elements posted by user
						for(var j=0;j<varArray[phpName].length;j++){
							// traversing through the OPTION elements to SELECT
							for(var k=0; k<elems[i].options.length; k++){
								if(elems[i].options[k].value==varArray[phpName][j])
									elems[i].options[k].selected=true;
							}
						}
					}
				}
			}
		} else if (elementType!='hidden'||elems[i].name!="action"){ // we don't want the hidden action element to be populated.
			//if alert ("Changing "+elems[i].value+" to "+varArray[elems[i].name]);
			// TEXT , TEXTAREA, HIDDEN, PASSWORD
			if(elementType=='text'||elementType=='textarea'||elementType=='hidden'||elementType=='password'){ // checking of type TEXT, TextArea, Hidden, and Password
				if(varArray[elems[i].name]) // we only try to populate if we've found any value for it
					elems[i].value=varArray[elems[i].name];
			}
					
			// RADIO, CHECKBOX(single)
			if(elementType=='radio'||elementType=='checkbox'){ // deal radio buttons separately since we don't set value, instead we CHECK
				if(elems[i].value==varArray[elems[i].name])
					elems[i].checked=true;
			}
				
			// SELECT - ONE
			if(elementType=='select-one'){  // deal radio buttons separately since we don't set value, instead we SELECT
				for(var j=0; j<elems[i].options.length; j++){
					if(elems[i].options[j].value==varArray[elems[i].name])
						elems[i].options[j].selected=true;
				}
			}
		}
	}
	return;
	
}
		var ajax_divName="";
		var ajax_functionName="";
		var ajax_requestInProgress=false;
		var ajax_receiveReq = ajax_getXmlHttpRequestObject();

		function ajax_executeURL(execUrl, divName,functionName){
			if(ajax_requestInProgress) {
				//alert("Please allow the system to complete your previous action");
				return;
			}
			ajax_divName=divName;
			ajax_functionName=functionName;
			if (ajax_receiveReq.readyState == 4 || ajax_receiveReq.readyState == 0) {
				ajax_receiveReq.open("GET", execUrl);
				ajax_receiveReq.onreadystatechange = ajax_handleResult;
				ajax_receiveReq.send(null);
				ajax_requestInProgress=true;
			}
		}

		function ajax_handleResult() {
			if (ajax_receiveReq.readyState == 4) {
			
				// we want to change the innerHTML only if the dif exists
				var divElem = document.getElementById(ajax_divName);
				if(divElem){
					divElem.innerHTML = ajax_receiveReq.responseText;
				}
				
				// freeing up the flag to say the object has completed getting response
				ajax_requestInProgress=false;
				
				// now executing the function if specified when executeURL was called
				if(eval('typeof(' + ajax_functionName + ')')=='function')
					eval(ajax_functionName+"();");

			}
		}		
		
		function ajax_getXmlHttpRequestObject() {
			if (window.XMLHttpRequest) {
				return new XMLHttpRequest(); //Not IE
			} else if(window.ActiveXObject) {		
				return new ActiveXObject("Microsoft.XMLHTTP"); //IE
			} else {		//Display your error message here. 
							//and inform the user they might want to upgrade		
							//their browser.		
				alert("Your browser doesn't support the XmlHttpRequest object.  Better upgrade to Firefox.");	
			}
		}
//////////////////////// COOKIES


// this fixes an issue with the old method, ambiguous values
// with this test document.cookie.indexOf( name + "=" );
function Get_Cookie( check_name ) {
	// first we'll split this cookie up into name/value pairs
	// note: document.cookie only returns name=value, not the other components
	var a_all_cookies = document.cookie.split( ';' );
	var a_temp_cookie = '';
	var cookie_name = '';
	var cookie_value = '';
	var b_cookie_found = false; // set boolean t/f default f

	for ( i = 0; i < a_all_cookies.length; i++ )
	{
		// now we'll split apart each name=value pair
		a_temp_cookie = a_all_cookies[i].split( '=' );


		// and trim left/right whitespace while we're at it
		cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

		// if the extracted name matches passed check_name
		if ( cookie_name == check_name )
		{
			b_cookie_found = true;
			// we need to handle case where cookie has no value but exists (no = sign, that is):
			if ( a_temp_cookie.length > 1 )
			{
				cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
			}
			// note that in cases where cookie is initialized but no value, null is returned
			return cookie_value;
			break;
		}
		a_temp_cookie = null;
		cookie_name = '';
	}
	if ( !b_cookie_found )
	{
		return null;
	}
}

function Set_Cookie( name, value, expires, path, domain, secure )
{
// set time, it's in milliseconds
var today = new Date();
today.setTime( today.getTime() );

/*
if the expires variable is set, make the correct
expires time, the current script below will set
it for x number of days, to make it for hours,
delete * 24, for minutes, delete * 60 * 24
*/
if ( expires )
{
expires = expires * 1000 * 60 * 60 * 24;
}
var expires_date = new Date( today.getTime() + (expires) );

document.cookie = name + "=" +escape( value ) +
( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
( ( path ) ? ";path=" + path : "" ) +
( ( domain ) ? ";domain=" + domain : "" ) +
( ( secure ) ? ";secure" : "" );
}

