var new_fieldname = ""
var form_name = "";
var file_fld = 0;
var gFieldsChanged = 0;
var frmSubmit = 0;
var file_attached = 0;
var error_color = "F3F3F3"
var off_error_color = "FFFFFF"
var on_error_color = "FFF8DC"
var form_color = "FFFFFF"

var ItemsChecked = new Object();
var frmStr = new Object();

frmStr.formBeginMessage = "The following form field(s) were incomplete or incorrect.  Fields requiring input are highlighted in gray:";
frmStr.formEndMessage = "Please complete or correct the form and submit again.";
frmStr.reqMsg = "is required";

frmStr["numeric"] = new Object();
frmStr["numeric"].message = "must be a numeric value";
frmStr["numeric"].regex = /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/; 

frmStr["integer"] = new Object();
frmStr["integer"].message = "must be a valid number (greater than 0)";
frmStr["integer"].regex = /(^-?\d\d*$)/;

frmStr["phone"] = new Object();
frmStr["phone"].message = "must be a valid phone number (xxx-xxx-xxxx)";
frmStr["phone"].regex = /^(\d\d\d-)*\d\d\d-\d\d\d\d$/;

frmStr["fein"] = new Object();
frmStr["fein"].message = "must be a valid federal employer identification number (xx-xxxxxxx)";
frmStr["fein"].regex = /^(\d\d-)*\d\d\d\d\d\d\d$/;

frmStr["ssn"] = new Object();
frmStr["ssn"].message = "must be a valid social security number (xxx-xx-xxxx)";
frmStr["ssn"].regex = /^\d\d\d-\d\d-\d\d\d\d$/;

frmStr["date"] = new Object();
frmStr["date"].message = "must be a valid date";
frmStr["date"].regex = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;

frmStr["time"] = new Object();
frmStr["time"].message = "must be a valid time";
frmStr["time"].regex = /^([1-9]|1[0-2]):[0-5]\d(:[0-5]\d(\.\d{1,3})?)?$/;

frmStr["currency"] = new Object();
frmStr["currency"].message = "must be a valid currency";
frmStr["currency"].regex = /(^\$\d{1,3}(,\d{3})*\.\d{2}$)|(^\(\$\d{1,3}(,\d{3})*\.\d{2}\)$)/;

frmStr["email"] = new Object();
frmStr["email"].message = "must be a valid email (user@company.com)";
frmStr["email"].regex = /^[a-z0-9]([a-z0-9_\-\.]*)@([a-z0-9_\-\.]*)(\.[a-z]{2,3}(\.[a-z]{2}){0,2})$/i;

frmStr["date"] = new Object();
frmStr["date"].message = "must be a date";
frmStr["date"].regex = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;


function frmValidCheck(frmObj) {
	ItemsChecked = new Object();
	var x = frmObj.elements.length;
	checkBeforeLeaving = false;
	if (frmObj.getAttribute("validate") == "false") return true;
	var invalidFields = new Array();
	var currentMessage,statusMessage,vType,req,fldObj,vReg,vMsg,currentRegex;
  	for (var i = 0; i < x; i++) {
		fldObj = frmObj.elements[i];
		req = fldObj.getAttribute("required");
		vType = fldObj.getAttribute("vtype");
		vReg = fldObj.getAttribute("vReg");
		if (vType != null && vType.toLowerCase() == 'numeric') { fldObj.value = fldObj.value.replace(/,/g,"");	}				
		currentRegex = (typeof(frmStr[vType]) != "undefined")?frmStr[vType].regex:vReg;
		currentMessage = (typeof(frmStr[vType]) != "undefined")?frmStr[vType].message:fldObj.getAttribute('vMsg');
		statusMessage = "";
		if (req == "1" || req == "true" || req == true) {
			statusMessage = frmValidRequired(frmObj,fldObj,frmStr.reqMsg);
		}
		if (currentRegex != null && statusMessage == "") {
			statusMessage = frmValidOther(frmObj,fldObj,currentRegex,currentMessage);
		}
		
		if (statusMessage != "") {
			var newIndex = invalidFields.length;
			invalidFields[newIndex] = new Object();
			invalidFields[newIndex].message = statusMessage;
			invalidFields[newIndex].field = fldObj.name;
		}
    }
	if (invalidFields.length > 0) {
		var validationMessageJS = frmStr.formBeginMessage+"\n\n"
		var validationMessageHTML = "<div class=\"invalidFieldHeader\">We didn't correctly capture your response to the following item(s). Please click on the link below or if you prefer, scroll to see items marked with <img src='/blog/lib/images/error.png' align='absmiddle' alt='Error'>. Many thanks!</div><br><br>"
		for (var v=0;v<invalidFields.length;v++) { 
			//fldIcon = $("ValImg"+invalidFields[v].field);
			//if (fldIcon) fldIcon.src = "/blog/lib/images/error.png";;
			validationMessageJS += unescape(invalidFields[v].message) + "\n";
			validationMessageHTML += "<div class=\"invalidFieldMessage\" onclick=\"frmNavigate('"+invalidFields[v].field+"');\" onmouseover=\"this.className='invalidFieldMessageHL';\" onmouseout=\"this.className='invalidFieldMessage';\">"+unescape(invalidFields[v].message) + "</div>";
		}
		validationMessageJS += "\n"+frmStr.formEndMessage;
		validationMessageHTML += "<br>"+frmStr.formEndMessage;

		//var vObj = $("ValidationMessages");
		/*if (vObj) {
			alert("Oops!  We found some errors.  \n\nPlease click OK to review them.");
			vObj.innerHTML = validationMessageHTML;
			vObj.style.display = "block";
			document.body.scrollTop = vObj.offsetTop+"px";
		} else {*/
			alert(validationMessageJS);
		//}
   		return false;
  	} else {
		return true;
   	}
} 

function frmNavigate(fldName) {
	var rowObj = $("form_row_"+fldName);
	var fldObj = $(fldName);
	if (rowObj) {
		document.body.scrollTop = getObjectPosition(rowObj).y;
		if (rowObj.focus()) rowObj.focus();
		else if (fldObj.focus) fldObj.focus();
		//alert(getObjectPosition(rowObj).y);
	}
}

function frmValidOther(frmObj,fldObj,expChk,msg) {
	var msg_addition = "";
 	var objRegExp = eval(expChk);
	form_field_value = trimAll(fldObj.value);
    if (form_field_value != "" && (!objRegExp.test(form_field_value))) {
    	msg_addition = unescape(fldObj.getAttribute('vlabel'))+' '+msg;
	    changeColor(frmObj,fldObj,1);
   	}
 	return(msg_addition);
}

function setRequiredField(fldObj,flag) {
	try {
		var docImg = document.getElementById("ReqImg"+fldObj.name);
		if (docImg) docImg.src =  (flag)?"/blog/lib/images/asterisk.gif":"/blog/lib/images/blank.gif";
	} catch(e) {;}
	if (fldObj.length) {
		for (var f=0;f<fldObj.length;f++) {
			fldObj[f].setAttribute("required",flag);
		}
	} else {
		fldObj.setAttribute("required",flag);
	}
}
 
function frmValidRequired(frmObj,fldObj,msg) {
	changeColor(frmObj,fldObj,0);
	var form_field_type = fldObj.getAttribute('type');
	var msg_addition = "";
	if ((form_field_type == "radio" || form_field_type == "checkbox") && ItemsChecked != null && typeof(ItemsChecked[fldObj.name]) == "undefined") {
		var anyChecked = false;
		if (typeof frmObj.elements[fldObj.name].length == "undefined") anyChecked = frmObj.elements[fldObj.name].checked;
		for (var i=0; i<frmObj.elements[fldObj.name].length; i++) {
			inst = frmObj.elements[fldObj.name][i];
			if (inst.checked) {
				anyChecked = true;
				break;
			}
		}
		if (!anyChecked) msg_addition = frmObj.elements[fldObj.name][0].getAttribute('vlabel')+' '+msg;
	} else {
		var strTemp = fldObj.value;
		strTemp = trimAll(strTemp);
		if(strTemp.length == 0){
			msg_addition = fldObj.getAttribute('vlabel')+' '+msg;
			changeColor(frmObj,fldObj,1);
		}  
	}
	ItemsChecked[fldObj.name] = true;
	return msg_addition;
}

function frmValidRange(frmObj,fldObj,msg) {
	changeColor(frmObj,fldObj,0);
	var form_field_range = fldObj.getAttribute('range');
	var msg_addition = "";
	if (form_field_range && fldObj.value.length > 0) {
		if (form_field_range.indexOf(',') > -1) { var rng = form_field_range.split(',');} //we're dealing with a list
		else if (form_field_range.indexOf('-') > -1) { var rng = form_field_range.split('-');} //we're dealing with a range
		var val_1 = rng[0]; var val_2 = (rng[1] == 'null')?'':rng[1];

		if (rng[0].indexOf('.value') > -1) val_1 = eval(rng[0]);
		if (rng[1].indexOf('.value') > -1) val_2 = eval(rng[1]);
		var form_field_value = fldObj.value;
		if (val_1 > form_field_value || (val_2.length > 2 && val_2 < form_field_value)) {
			msg_addition = msg;
	 		changeColor(frmObj,fldObj,1);
	    }  
	}
	return msg_addition;
}
 
function changeColor(frmObj,fldObj,tog) {
	fldObj.style.backgroundColor = (tog==1)?error_color:off_error_color;
	//fldObj.style.borderColor = (tog==1)?"red":"";
}

function highlightRequired(frmObj) {
	for (x=0; x < frmObj.elements.length; x++) {
		fldObj = frmObj.elements[x];
		if (fldObj.getAttribute('required') == 1 || fldObj.getAttribute('required') == "true" || fldObj.getAttribute('required') == true)
			changeColor(frmObj,fldObj,1);
	}
 }	
 
function removeCurrency( strValue ) {
  var objRegExp = /\(/;
  var strMinus = '';
  var strValue = removeCommas(strValue);
  objRegExp = /\)|\(|[,]/g;
  strValue = (strValue)? strValue.replace(objRegExp,''):'';
  if(strValue.indexOf('$') >= 0){
    strValue = strValue.substring(1, strValue.length);
  }
  return strValue;
}

function removeCommas( strValue ) {
  return strValue.replace(',','');
}

function trimAll( strValue ) {
  var objRegExp = /^(\s*)$/;
    if(objRegExp.test(strValue)) {
       strValue = strValue.replace(objRegExp, '');
       if( strValue.length == 0)
          return strValue;
    }
   //check for leading & trailing spaces
   objRegExp = /^(\s*)([\W\w]*)(\b\s*$)/;
   if(objRegExp.test(strValue)) {
       //remove leading and trailing whitespace characters
       strValue = strValue.replace(objRegExp, '$2');
    }
  return strValue;
}

function showProgress(pth) {
  var strAppVersion = navigator.appVersion;
	if (navigator.userAgent.indexOf("Mac") == -1 && navigator.userAgent.indexOf("MSIE") != -1)
      window.showModelessDialog(pth,null,"dialogWidth=375px; dialogHeight:130px; center:yes");
	else 
      window.open(pth,'','width=370,height=115', true);
  return true;
}

function loadFileCopy(abRoot) {
	var el = document.getElementById("FileDialog");
	el.style.pixelTop = window.event.y - 140;
	el.style.pixelLeft = window.event.x - 50;	
	el.style.visibility="visible";
}


function setName(id,txt) {
	var sp = document.getElementById(id);
	sp.value = txt;
	sp.setAttribute("value",txt);
	sp.className = "txtInputSuccess";
	var conMnu = new Array();
	sp.oncontextmenu = function () {
		//showMenu(sp, conMnu);
		return false;
	}
}				

//START FORM SAVING CODE


var checkBeforeLeaving = true;
function isFormChanged(frmObj) {
	if (!checkBeforeLeaving) return false;
	var rtnVal = false; 
	try {
		var frm = (typeof(frmObj) == "undefined")?document.forms[0]:frmObj;
		var ele = frm.elements;
		for (var i=0; i < ele.length; i++ ) {
			if ((ele[i].type) && ele[i].type.length > 0 && isElementChanged(ele,i) && ele[i].name != "") {
				rtnVal = true;
				break;
			}
		}
	} catch(e){;}
	return rtnVal;
}

function isElementChanged( ele, i ) {
	var isEleChanged = false; 
	
	//Check to see if this the hidden field for the FCKEditor
	var elId = ele[i].getAttribute("id");
	try {
		if (ele[i].type == "hidden" && document.getElementById(elId+"___Frame")) {
			var oEditor = FCKeditorAPI.GetInstance(elId) ;
			if (oEditor.IsDirty()) return true;
		}
	} catch(e){;}

	switch ( ele[i].type ) { 
		case "text" : 
			if ( ele[i].value != ele[i].defaultValue ) return true;
			break;
		case "hidden" : 
			if ( ele[i].value != ele[i].defaultValue ) return true;
			break;
		case "textarea" : 
			if ( ele[i].value != ele[i].defaultValue ) return true;
			break;
		case "radio" :
			val = "";
			if ( ele[i].checked != ele[i].defaultChecked ) return true;
			break;
		case "select-one" : 
			return false; //By Pass select boxes
			for ( var x =0 ; x <ele[i].length; x++ ) {
				if ( ele[i].options[ x ].selected != ele[i].options[ x ].defaultSelected ) 
					return true;
			}
		break;
		case "select-multiple" :
			return false; //By Pass select boxes
			for ( var x =0 ; x <ele[i].length; x++ ) {
				if ( ele[i].options[ x ].selected != ele[i].options[ x ].defaultSelected ) 
					return true;
			}
			break;
		case "checkbox" :
			if ( ele[i].checked != ele[i].defaultChecked ) return true;
		default:
			return false;
			break;
	}
}

function xmform_toggleimg(selector) {

	var selectorobjids = selector.id.split("___");		
	var selectorobjdynRowIds = selector.id.split("_");			
	var selectorobjdynRowId = selectorobjdynRowIds[selectorobjdynRowIds.length-1];
	if (!isNaN(selectorobjdynRowId))	//check if is a dynamic row. Lame test
		selectorobjdynRowId = '_'+ selectorobjdynRowId;
	else 
		selectorobjdynRowId = '';
		
	var selectorobj = document.getElementById(selectorobjids[0]+selectorobjdynRowId);
	var images = selector.imageslist.split(',');

	for (var i=0; i < images.length; i++) {	//I would like to allow for more than just on or off for the toggle
		if (selector.src.indexOf(images[i]) > -1)
			break;
	}
	
	if (i==0) //it is unchecked, so we make this the newly selected radio
	{
		selectorobj.value = selector.on;
		selector.src = images[1];
		var rows = selectorobjids[2].split('_');
		
		for (var x=0; x < 10; x++) { //assume no more than 10 sibling objects
			if (selectorobjids[2].indexOf('radioselector' + x+'_' + rows[1]) == -1 ) {
				var elementId = selectorobjids[0]+'___' + selectorobjids[1] +'___radioselector' + x + '_' + rows[1];
				var otherselectorobj = document.getElementById(elementId);
				if (!otherselectorobj)
					break;
				otherselectorobj.src = images[0];
			}
		}
	}

}

