/* Copyright (C) 2007 - 2009, Incode Systems, Inc. and John L. Lawler */ 

function chDecimalLocal(fieldValue,sDecimalSep,sThousandSep,dDecimalSep,dThousandSep){if(!sThousandSep)sThousandSep=",";var reThousand=new RegExp("["+sThousandSep+"]","g");fieldValue=fieldValue.replace(reThousand,"");if(sDecimalSep!=dDecimalSep){if(!sDecimalSep)sDecimalSep=".";var reDecimal=new RegExp("["+sDecimalSep+"]","g");fieldValue=fieldValue.replace(reDecimal,dDecimalSep);};return fieldValue;};function ValidateStringAsInt(str){var i=0;var tS=trim(str);if(tS[0]=="-"||tS[0]=="+")i++;for(;i<tS.length;i++)if(tS[i]<"0"||tS[i]>"9")return false;return true;};function money(Field,AllowNull,AllowNegative,decimalSep,thousandSep,changeToServerLocalization,ExtraParms){return decimal(Field,AllowNull,AllowNegative,decimalSep,thousandSep,changeToServerLocalization,ExtraParms);};function decimal(Field,AllowNull,AllowNegative,decimalSep,thousandSep,changeToServerLocalization,ExtraParms){if(decimalSep==null||thousandSep==null){decimalSep=DecimalSeparator;thousandSep=ThousandSeparator;if(decimalSep==null||thousandSep==null){decimalSep=".";thousandSep=",";}};var fieldValue=chDecimalLocal(Field.value,decimalSep,thousandSep,".",",");if(AllowNull==true&&trim(fieldValue)=="")return true;var AllowZero=true;if(ExtraParms&&!ExtraParms.AllowZero)AllowZero=false;if(isNaN(parseFloat(fieldValue))||parseFloat(fieldValue)!=fieldValue||(AllowZero==false&&fieldValue==0)||(AllowNegative==false&&fieldValue<0)){var msgP=(Field.title!="")?Field.title:"This field";msgP+=" must be a ";if(!AllowNull&&!AllowZero)msgP+="decimal greater than 0.";else if(!AllowNull&&!AllowNegative)msgP+="non-blank, non-negative decimal.";else if(AllowNull&&!AllowZero)msgP+="decimal greater than 0.";else if(AllowNull&&!AllowNegative)msgP+="non-negative decimal.";else if(!AllowNull&&AllowNegative)msgP+="non-blank decimal.";else if(AllowNull&&AllowNegative&&AllowZero)msgP+="decimal.";else alert("ERROR 00053: The decimal() function was called incorrectly.");msgP+=" (Format example: 2"+thousandSep+"482"+decimalSep+"99).";CreateValidatePopup(msgP,Field);return false;};if(changeToServerLocalization)Field.value=fieldValue;return true;};function non_neg_int(Field){return integer(Field,true,false,true);};function non_null_non_neg_int(Field){return integer(Field,false,false,false);};function gt_zero_int(Field){return integer(Field,true,false,false);};function non_null_gt_zero_int(Field){return integer(Field,false,false,false);};function integer(Field,AllowNull,AllowNegative,AllowLessThanOne){var fieldValue;if(Field.nodeType)fieldValue=trim(Field.value);else fieldValue=Field;if(AllowNull==true&&fieldValue=="")return true;if(isNaN(parseInt(fieldValue))||!ValidateStringAsInt(fieldValue)||(AllowLessThanOne==false&&fieldValue<1)||(AllowNegative==false&&fieldValue<0)){if(Field.nodeType){var msgP=(Field.title!="")?Field.title:"This field";msgP+=" must be a ";if(!AllowNull&&!AllowLessThanOne)msgP+="non-blank, greater than 0 integer.";else if(!AllowNull&&!AllowNegative)msgP+="non-blank, non-negative integer.";else if(AllowNull&&!AllowLessThanOne)msgP+="integer greater than 0.";else if(AllowNull&&!AllowNegative)msgP+="non-negative integer.";else if(!AllowNull&&AllowNegative)msgP+="non-blank integer.";else if(AllowNull&&AllowNegative&&AllowLessThanOne)msgP+="integer.";else alert("ERROR 00053: The integer() function was called incorrectly.");CreateValidatePopup(msgP,Field);};return false;};return true;};function non_null_char(Field){if(trim(Field.value)==""){CreateValidatePopup((Field.title!="")?Field.title+" cannot be blank.":"This field cannot be blank.",Field);return false;};return true;};function disallow_value(Field,val,msg){if(trim(Field.value)==val){CreateValidatePopup(msg,Field);return false;};return true;};function stripCharsInBag(s,bag){var i;var returnString="";for(i=0;i<s.length;i++){var c=s.charAt(i);if(bag.indexOf(c)==-1)returnString+=c;};return returnString;};function daysInFebruary(year){return((year%4==0)&&(!(year%100==0)||(year%400==0)))?29:28;};function GetDaysInMonth(m){var days=31;if(m==4||m==6||m==9||m==11)days=30;if(m==2)days=29;return days;};var dtChArray=["/","-"];function is_non_null_date(Field,dateFormat,returnISOFormat){var dtStr=Field.value;var errorMsg="";var pos1,pos2;var strYear,strMonth,strDay;strYear=strMonth=strDay="";var month,day,year;var now=new Date();var datePart=new Array(3);var minYear,maxYear,defaultDateFormat,defaultSeparator;minYear=(!window.minYear)?1890:window.minYear;maxYear=(!window.maxYear)?(new Date()).getFullYear()+2:window.maxYear;defaultDateFormat=(!window.defaultDateFormat)?"mdy":window.defaultDateFormat;defaultSeparator=(!window.defaultSeparator)?"/":window.defaultSeparator;if(!minYear)var minYear=1890;if(!maxYear)var maxYear=(new Date()).getFullYear()+2;if(!defaultDateFormat)var defaultDateFormat="mdy";if(!defaultSeparator)var defaultSeparator="/";if(trim(dtStr)==""||(DateFormatISO!=null&&trim(Field.value)==DateFormatISO))return isNonNullDateError(Field,((Field.title!="")?Field.title:"This field")+" may not be empty.");var dtCh="";for(var i=0;i<dtChArray.length;i++){if(dtStr.indexOf(dtChArray[i])!=-1){dtCh=dtChArray[i];break;}};if(!dateFormat)dateFormat=defaultDateFormat;else{dateFormat=dateFormat.toLowerCase();dateFormat=dateFormat.replace(/[^mdy]/g,"");dateFormat=dateFormat.replace(/y+/g,"y");dateFormat=dateFormat.replace(/m+/g,"m");dateFormat=dateFormat.replace(/d+/g,"d");};var yearPos=dateFormat.indexOf("y");var monthPos=dateFormat.indexOf("m");var dayPos=dateFormat.indexOf("d");if(yearPos==-1||monthPos==-1||dayPos==-1){alert("Cannot validate this date field with this dateFormat.\n"+"A valid dateFormat must contain a y, m and d.");return false;};if(dtCh==""){if(dtStr.length==8){strYear=dtStr.substr(yearPos*2,4);if(monthPos==1)strMonth=dtStr.substr((yearPos==2)?2:4,2);else strMonth=dtStr.substr(monthPos*3,2);if(dayPos==1)strDay=dtStr.substr((yearPos==2)?2:4,2);else strDay=dtStr.substr(dayPos*3,2);}else if(dtStr.length==6){strYear=dtStr.substr(yearPos*2,2);strMonth=dtStr.substr(monthPos*2,2);strDay=dtStr.substr(dayPos*2,2);}else if(dtStr.length==4){strYear=now.getFullYear().toString();strMonth=dtStr.substr((monthPos<dayPos)?0:2,2);strDay=dtStr.substr((dayPos<monthPos)?0:2,2);}else return isNonNullDateError(Field,"A date in this format must have 4,6 or 8\n\digits(e.g. 0401,050401,20050401).");}else{pos1=dtStr.indexOf(dtCh);pos2=dtStr.indexOf(dtCh,pos1+1);datePart[0]=dtStr.substring(0,pos1);if(pos2!=-1){datePart[1]=dtStr.substring(pos1+1,pos2);datePart[2]=dtStr.substring(pos2+1);strYear=datePart[yearPos];strMonth=datePart[monthPos];strDay=datePart[dayPos];}else{datePart[1]=dtStr.substring(pos1+1);strYear=now.getFullYear().toString();strMonth=datePart[(monthPos<dayPos)?0:1];strDay=datePart[(dayPos<monthPos)?0:1];}};var strYr=strYear;if(strDay.charAt(0)=="0"&&strDay.length>1)strDay=strDay.substring(1);if(strMonth.charAt(0)=="0"&&strMonth.length>1)strMonth=strMonth.substring(1);for(var i=1;i<=3;i++){if(strYr.charAt(0)=="0"&&strYr.length>1)strYr=strYr.substring(1)};month=parseInt(strMonth);day=parseInt(strDay);year=parseInt(strYr);if(strYr.length==2||strYr.length==1){var thisCentury=parseInt(now.getFullYear()/100)*100;var thisYearNoCentury=now.getFullYear()-thisCentury;if(year>thisYearNoCentury+10)year+=thisCentury-100;else year+=thisCentury;strYear=year.toString();};if(strMonth.length<1||month<1||month>12)return isNonNullDateError(Field,"Please enter a valid month");if(strDay.length<1||day<1||day>31||(month==2&&day>daysInFebruary(year))||day>GetDaysInMonth(month))return isNonNullDateError(Field,"Please enter a valid day");if(strYear.length!=4||year==0||year<minYear||year>maxYear){return isNonNullDateError(Field,"Please enter a valid year between "+minYear+" and "+maxYear);};if((pos2!=-1&&dtCh!=""&&dtStr.indexOf(dtCh,pos2+1)!=-1)||isInteger(stripCharsInBag(dtStr,dtCh))==false){return isNonNullDateError(Field,"Please enter a valid date");};datePart[yearPos]=strYear;datePart[monthPos]=StrPadLeft(strMonth,"0",2);datePart[dayPos]=StrPadLeft(strDay,"0",2);Field.value=datePart[0]+defaultSeparator+datePart[1]+defaultSeparator+datePart[2];if(returnISOFormat)return strYear+"-"+StrPadLeft(strMonth,"0",2)+"-"+StrPadLeft(strDay,"0",2);else return true;};function is_date(Field,dateFormat,returnISOFormat){if(DateFormatISO!=null&&trim(Field.value)==DateFormatISO)Field.value="";if(trim(Field.value)>"")return is_non_null_date(Field,dateFormat,returnISOFormat);else return true;};function isNonNullDateError(Field,errorMsg){CreateValidatePopup(errorMsg,Field);return false;};function ValidateDateLessThanEqualTo(a1,a2,msg){if(a1[1]&&a1[0].value=="yyyy-mm-dd")a1[0].value="";if(a2[1]&&a2[0].value=="yyyy-mm-dd")a2[0].value="";if((a1[1]&&!is_date(a1[0]))||(!a1[1]&&!is_non_null_date(a1[0])))return false;if((a2[1]&&!is_date(a2[0]))||(!a2[1]&&!is_non_null_date(a2[0])))return false;if(trim(a1[0].value)>""&&trim(a2[0].value)>""&&is_non_null_date(a1[0],null,true)>is_non_null_date(a2[0],null,true)){CreateValidatePopup(msg,a2[0]);return false;};return true;};function IntegerLessThanEqualTo(i1,i2,msg){if(!integer(i1[0],i1[1],i1[2],i1[3])||!integer(i2[0],i2[1],i2[2],i2[3]))return false;if(parseInt(i1[0].value)>parseInt(i2[0].value)){CreateValidatePopup(msg,i2[0]);return false;};return true;};function ValidateEIN(element,transform){var val=element.value;if(val.substr(2,1)=="-")val=val.replace(/\-/g,"");if(transform)element.value=val;if(non_neg_int(val))return true;else{CreateValidatePopup("EIN must be a 9 digit number, optionally separated by a hyphen as character 3.<br>E.g.: 12-3456789.",element);return false;}};function StrPadLeft(orig_str,pad_char,pad_to_len){if(orig_str.length>=pad_to_len)return orig_str;while(orig_str.length<pad_to_len){orig_str=pad_char+orig_str;};return orig_str;};function StrPadRight(orig_str,pad_char,pad_to_len){if(orig_str.length>=pad_to_len)return orig_str;while(orig_str.length<pad_to_len){orig_str=orig_str+pad_char;};return orig_str;};function FormatFloat(n,decimalPlaces){var dPos,dPart;if(isNaN(decimalPlaces))decimalPlaces=0;n=(parseFloat(n.toFixed(decimalPlaces))).toLocaleString();dPos=n.indexOf(DecimalSeparator);if(dPos==-1)dPos=n.length;dPart=StrPadRight(n.substr(dPos+1),"0",decimalPlaces);if(decimalPlaces>0)return n.substr(0,dPos)+DecimalSeparator+dPart;else if(decimalPlaces==0&&dPos!=n.length)return n.substr(0,dPos);else return n;};


