﻿var ctTypeStr = 0;
var ctTypeNbr = 1;
var ctTypeDte = 2;
var ctTypeDtm = 3;
var ctTypeTim = 4;
var _DATE_FORMAT = 'yyyy-MM-dd';var _TIME_FORMAT ="HH:mm:ss";var _DATE_TIME_FORMAT = _DATE_FORMAT +" " + _TIME_FORMAT;var ctDMY = 0;var ctYMD = 1;var ctDayIdx = 0;var ctMonthIdx = 1;var ctYearIdx = 2;var ctHM = 0;var ctHMS = 1;var ctTimYear = 1900;var ctTimMonth = 1;var ctTimDay = 1;var ctNbrThousandsSepDefault =" "
var ctNbrDecimalPlacesDefault = -1
function getEventSrc(e){if (e.originalTarget)
return e.originalTarget;return e.srcElement;}function getFormat(dataType){var formatToUse = _DATE_FORMAT;if(dataType == ctTypeDtm)
formatToUse = _DATE_TIME_FORMAT;else if(dataType == ctTypeTim)
formatToUse = _TIME_FORMAT;return formatToUse;}function OsFmtFrmElemGetInfoReturn(flgOk, objValue, objDataType){this.flgOk = flgOk;if (this.flgOk){
this.objValue = objValue;this.strPrintable = OsFmtValueGetPrintable(objDataType, objValue);}else{
this.objValue ="";this.strPrintable ="";}}function OsIsEmpty(objValue){if ((objValue == null) || (objValue +"" ==""))
return true;else
return false;}function OsParseNumberToArray(objDataType, objValue, blnRemoveThousandsSeparator){if (objDataType.intType != ctTypeNbr)
return"NaN";else{if ((blnRemoveThousandsSeparator == true) && (objDataType.strThousandsSeparator !="")){while (objValue.toString().indexOf(objDataType.strThousandsSeparator) != -1)
objValue = objValue.toString().replace(objDataType.strThousandsSeparator,'');}if (objDataType.flgIsDecimal)
var regNumberExp =/^[+,-]?(\d*)[\.,](\d+)$|^[+,-]?(\d+)$/;
else
var regNumberExp =/^[+,-]?(\d+)$/;
var arrayResult = regNumberExp.exec(objValue);if (!arrayResult)
return"NaN";
else{var arrayNumber = new Array(2);if (objValue.toString().charAt(0) =="-")
arrayNumber[0] ="-";else
arrayNumber[0] ="";
if ( objDataType.flgIsDecimal ){if (arrayResult[3] =="" || typeof(arrayResult[3]) =="undefined"){if (arrayResult[1]=="")
arrayNumber[1] ="0";else
arrayNumber[1] = arrayResult[1];arrayNumber[2] = arrayResult[2];}else{arrayNumber[1] = arrayResult[3];arrayNumber[2] ="";}}else{arrayNumber[1] = arrayResult[1];arrayNumber[2] ="";}return arrayNumber;}}}function OsDataType(intType){this.intType = intType;
if (intType == ctTypeDte || intType == ctTypeDtm){this.intFormat = OsDataType.arguments[1];if (OsIsEmpty(OsDataType.arguments[2]))
this.strSeparator ="/";
else
this.strSeparator = OsDataType.arguments[2];if (this.intFormat == ctYMD){this.intDateFirstPart = ctYearIdx;this.intDateSecondPart = ctMonthIdx;this.intDateThirdPart = ctDayIdx;}else{
this.intFormat = ctDMY;this.intDateFirstPart = ctDayIdx;this.intDateSecondPart = ctMonthIdx;this.intDateThirdPart = ctYearIdx;}if(intType == ctTypeDtm){this.intTimeFormat = ctHMS;
this.strTimeSeparator =":";
}}else{if (intType == ctTypeNbr){if (OsIsEmpty(OsDataType.arguments[1])){this.flgIsDecimal = false;this.strDecimalSeparator ="";this.strThousandsSeparator ="";this.intDecimalPlaces = ctNbrDecimalPlacesDefault;}else{this.flgIsDecimal = OsDataType.arguments[1];this.strThousandsSeparator ="";
this.intDecimalPlaces = ctNbrDecimalPlacesDefault;
if (OsIsEmpty(OsDataType.arguments[2]))
this.strDecimalSeparator =".";
else{this.strDecimalSeparator = OsDataType.arguments[2];if ( (!OsIsEmpty(OsDataType.arguments[3])) &&
(OsDataType.arguments[3] +"" !="false") )
this.strThousandsSeparator = (OsDataType.arguments[3] == this.strDecimalSeparator) ? ctNbrThousandsSepDefault : OsDataType.arguments[3];if ( (!OsIsEmpty(OsDataType.arguments[4])) && (this.flgIsDecimal == true) )
this.intDecimalPlaces = (OsDataType.arguments[4] < -1) ? ctNbrDecimalPlacesDefault : OsDataType.arguments[4];}}}else{if (intType == ctTypeTim){if (OsIsEmpty(OsDataType.arguments[1])){this.intTimeFormat = ctHMS;
this.strTimeSeparator =":";
}else{this.intTimeFormat = OsDataType.arguments[1];if (OsIsEmpty(OsDataType.arguments[2]))
this.strTimeSeparator =":";
else
this.strTimeSeparator = OsDataType.arguments[2];}}}}}function OsRemoveRightSpaces(strItemValue){strItemValue = strItemValue.toString();if (strItemValue =="")
return strItemValue;var intLastPos = strItemValue.length;while (intLastPos >= 0){var strChar = strItemValue.substring(intLastPos, intLastPos-1);if (strChar ==" "){strItemValue = strItemValue.substring(0, intLastPos-1)
intLastPos = strItemValue.length;
}else
break;}return strItemValue
}function OsRemoveLeftSpaces(strItemValue){strItemValue = strItemValue.toString();while (strItemValue !=""){if (strItemValue.charAt(0) ==' ')
strItemValue = strItemValue.substring(1, strItemValue.length)
else
break;}return strItemValue
}function OsRemoveSpaces(strItemValue){if (strItemValue +"" =="") return"";if ((strItemValue = OsRemoveLeftSpaces(strItemValue)) !="")
return OsRemoveRightSpaces(strItemValue);else
return"";}function OsParseDigits(strStream){if (strStream +"" =="") return 0;
var intDigitsCount=0;var intCount;for (intCount=0;intCount < strStream.length;intCount++){var strCurrentChar = strStream.charAt(intCount);if (isNaN(parseInt(strCurrentChar)))
return intDigitsCount;else
intDigitsCount++;}return intDigitsCount;}function OsParseSeparator(strStream){if (strStream +"" =="") return 0;
if (OsIsEmpty(OsParseSeparator.arguments[1]))
var arraySeparator = new Array ('/','-','.');
else
var arraySeparator = new Array (OsParseSeparator.arguments[1]);
var strCurrentChar = strStream.charAt(0);var intCount;for (intCount = 0;intCount < arraySeparator.length;intCount++){if (strCurrentChar == arraySeparator[intCount]){return 1;}}return 0;}function OsMsgBoxError(objField, strErrorMsg, flgSendFocus){alert(strErrorMsg);if (flgSendFocus)
objField.focus();return false;}function OsFocusReturnError(objField, flgSendFocus){if (flgSendFocus)
objField.focus();return false;}function OsFmtFrmElemGetInfo(objDataType, objField){if (objDataType.intType == ctTypeStr)
var strFieldValue = OsRemoveRightSpaces(objField.value);else
var strFieldValue = OsRemoveSpaces(objField.value);if (OsIsEmpty(strFieldValue))
return (new OsFmtFrmElemGetInfoReturn(true, null, objDataType));
if (objDataType.intType == ctTypeNbr){var arrayNumber = OsParseNumberToArray(objDataType, strFieldValue, true);if (arrayNumber =="NaN")
return (new OsFmtFrmElemGetInfoReturn(false));else{if(!objDataType.flgIsDecimal){
if(arrayNumber[1].length > 10)
return (new OsFmtFrmElemGetInfoReturn(false));var intVal = parseFloat(arrayNumber[0] + arrayNumber[1]);if(intVal < -2147483648 || intVal > 2147483647)
return (new OsFmtFrmElemGetInfoReturn(false));else
return (new OsFmtFrmElemGetInfoReturn(true, intVal.toString(), objDataType));
}else{if(arrayNumber[1].length > 28 || arrayNumber[2].length > 28)
return (new OsFmtFrmElemGetInfoReturn(false));if (arrayNumber[2] =="")
return (new OsFmtFrmElemGetInfoReturn(true, arrayNumber[0] + arrayNumber[1] +".0", objDataType));
else
return (new OsFmtFrmElemGetInfoReturn(true, arrayNumber[0] + arrayNumber[1] +"." + arrayNumber[2], objDataType));
}}}else if (objDataType.intType == ctTypeDte || objDataType.intType == ctTypeDtm || objDataType.intType == ctTypeTim){var formatToUse = getFormat(objDataType.intType);var myDate = getDateFromFormat(strFieldValue,formatToUse);if(myDate == null || myDate == 0){return (new OsFmtFrmElemGetInfoReturn(false));}else{return (new OsFmtFrmElemGetInfoReturn(true, myDate, objDataType));}}else{
return (new OsFmtFrmElemGetInfoReturn(true, strFieldValue, objDataType));}}function OsFmtValueGetPrintable(objDataType, objValue){if (OsIsEmpty(objValue))
return"";
if (objDataType.intType == ctTypeDte || objDataType.intType == ctTypeDtm || objDataType.intType == ctTypeTim){var formatToUse = getFormat(objDataType.intType);return formatDate(new Date(objValue), formatToUse);}else if (objDataType.intType == ctTypeNbr){objValue = OsRemoveSpaces(objValue);
return objValue.valueOf();}else{
objValue = OsRemoveRightSpaces(objValue);
return objValue.valueOf();}}function OsFmtFrmElemValidate(srcArg, flgRequired, flgValidateOnly, flgSendFocus, objDataType, objFormChange){var objField = null;if(srcArg.dotNetValidatorSource != null && srcArg.dotNetValidatorArguments != null){var objField = document.getElementById(srcArg.dotNetValidatorSource.controltovalidate);if(objField==null || objField.value == null || objField.value != srcArg.dotNetValidatorArguments.Value){objField ={value:srcArg.dotNetValidatorArguments.Value};
}}else
objField = srcArg;if (!(objFormChange==null))
objFormChange.value=true;if (!(flgValidateOnly)){if (objDataType.intType == ctTypeStr)
objField.value = OsRemoveRightSpaces(objField.value);else
objField.value = OsRemoveSpaces(objField.value);}if (OsIsEmpty(objField.value) && flgRequired)
return OsFocusReturnError(objField, flgRequired);if (objDataType.intType == ctTypeStr || objDataType.intType == ctTypeNbr ||
objDataType.intType == ctTypeDte || objDataType.intType == ctTypeDtm || objDataType.intType == ctTypeTim){var objProcessed = OsFmtFrmElemGetInfo(objDataType, objField);if (!objProcessed.flgOk)
return OsFocusReturnError(objField, flgRequired);if (!(flgValidateOnly))
objField.value = objProcessed.strPrintable;}else
return OsMsgBoxError(objField,"Unknown datatype to validate: '" + objDataType.intType +"'", flgSendFocus);return true;
}var dtText = new OsDataType(ctTypeStr);var dtInteger = new OsDataType(ctTypeNbr, false);var dtDecimal = new OsDataType(ctTypeNbr, true,".","", 8);
var dtDate = new OsDataType(ctTypeDte, ctYMD,"-");var dtDateTime = new OsDataType(ctTypeDtm, ctYMD,"-");var dtTime = new OsDataType(ctTypeTim, ctHMS,":");function existsInArray(array, value){var i;for (i = 0;i < array.length;i++){if ((typeof(array[i]) =="string") && (array[i] == value)){return true;}}return false;}function continueValidation(dotNetValidatorSource, arguments){var eventControl = null;if (typeof (arguments.srcElement) =="string"){eventControl = document.getElementById(arguments.srcElement);}else{return true;}if ((eventControl != null) && (typeof (eventControl.elementsToValidate) !="undefined")){var elementsToValidate = eventControl.elementsToValidate;if (elementsToValidate == null){return true;}return existsInArray(eventControl.elementsToValidate, dotNetValidatorSource.controltovalidate);}return true;}function OsCustomValidatorCurrency(source, arguments){OsCustomValidatorDecimal(source, arguments);}function OsCustomValidatorDate(source, arguments){if (continueValidation(source, arguments)){arguments.IsValid = OsFmtFrmElemValidate({dotNetValidatorSource:source, dotNetValidatorArguments:arguments}, false, false, false, dtDate, null);}}function OsCustomValidatorDateTime(source, arguments){if (continueValidation(source, arguments)){arguments.IsValid = OsFmtFrmElemValidate({dotNetValidatorSource:source, dotNetValidatorArguments:arguments}, false, false, false, dtDateTime, null);}}function OsCustomValidatorDecimal(source, arguments){if (continueValidation(source, arguments)){arguments.IsValid = OsFmtFrmElemValidate({dotNetValidatorSource:source, dotNetValidatorArguments:arguments}, false, false, false, dtDecimal, null);}}function OsCustomValidatorInteger(source, arguments){if (continueValidation(source, arguments)){arguments.IsValid = OsFmtFrmElemValidate({dotNetValidatorSource:source, dotNetValidatorArguments:arguments}, false, false, false, dtInteger, null);}}function OsCustomValidatorPhoneNumber(source, arguments){OsCustomValidatorText(source, arguments);
}function OsCustomValidatorText(source, arguments){if (continueValidation(source, arguments)){arguments.IsValid = OsFmtFrmElemValidate({dotNetValidatorSource:source, dotNetValidatorArguments:arguments}, false, false, false, dtText, null);}}function OsCustomValidatorTextNumeric(source, arguments){if (continueValidation(source, arguments)){var rx = new RegExp("\\d*");var matches = rx.exec(arguments.Value);arguments.IsValid = (matches != null && arguments.Value == matches[0]);}}function OsCustomValidatorTime(source, arguments){if (continueValidation(source, arguments)){arguments.IsValid = OsFmtFrmElemValidate({dotNetValidatorSource:source, dotNetValidatorArguments:arguments}, false, false, false, dtTime, null);}}function OSCustomValidatorRequiredField(source, arguments){if (continueValidation(source, arguments)){arguments.IsValid = (OsValidatorTrim(arguments.Value) != OsValidatorTrim(source.initialvalue));}}function OsCustomValidator(source, arguments){OsCustomValidatorUnknown(source, arguments);}function OsCustomValidatorUnknown(source, arguments){if (continueValidation(source, arguments)){alert("Unknown type in field!");OsFmtFrmElemValidate({dotNetValidatorSource:source, dotNetValidatorArguments:arguments}, false, false, false, dtText, null);}arguments.IsValid = true;}function OsLimitInput(textbox, event, maxlength){if (textbox.value.length>maxlength)
textbox.value=textbox.value.substring(0,maxlength);else if (window.event && getEventSrc(event).value.length>=maxlength){return false;}else if (event.target && event.target==textbox && textbox.value.length>=maxlength){var pressedkey=/[a-zA-Z0-9\.\,\/]/;
if (pressedkey.test(String.fromCharCode(event.which))){event.stopPropagation();return false;}}}function OsEnterKey(defaultButtonId, event){if (defaultButtonId=="")
return true;var eventSrcElement = getEventSrc(event);if (eventSrcElement && eventSrcElement.tagName=="TEXTAREA")
return true;if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)){var element=document.getElementById(defaultButtonId);if (element.tagName=="INPUT" || element.tagName=="A")
element.click();return false;}else
return true;}var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');function LZ(x){return(x<0||x>9?"":"0")+x}function formatDate(date,format){format=format+"";var result="";var i_format=0;var c="";var token="";var y=date.getUTCFullYear()+"";var M=date.getUTCMonth()+1;var d=date.getUTCDate();var E=date.getUTCDay();var H=date.getUTCHours();var m=date.getUTCMinutes();var s=date.getUTCSeconds();var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;var value=new Object();if (y.length < 4){y=""+(y-0+1900);}value["y"]=""+y;value["yyyy"]=y;value["yy"]=y.substring(2,4);value["M"]=LZ(M);value["MM"]=LZ(M);value["MMM"]=MONTH_NAMES[M-1];value["NNN"]=MONTH_NAMES[M+11];value["d"]= LZ(d);value["dd"]=LZ(d);value["E"]=DAY_NAMES[E+7];value["EE"]=DAY_NAMES[E];value["H"]=H;value["HH"]=LZ(H);if (H==0){value["h"]=12;}else if (H>12){value["h"]=H-12;}else{value["h"]=H;}value["hh"]=LZ(value["h"]);if (H>11){value["K"]=H-12;}else{value["K"]=H;}value["k"]=H+1;value["KK"]=LZ(value["K"]);value["kk"]=LZ(value["k"]);if (H > 11){value["a"]="PM";}else{value["a"]="AM";}value["m"]=m;value["mm"]=LZ(m);value["s"]=s;value["ss"]=LZ(s);while (i_format < format.length){c=format.charAt(i_format);token="";while ((format.charAt(i_format)==c) && (i_format < format.length)){token += format.charAt(i_format++);}if (value[token] != null){result=result + value[token];}else{result=result + token;}}return result;}function _isInteger(val){var digits="1234567890";for (var i=0;i < val.length;i++){if (digits.indexOf(val.charAt(i))==-1){return false;}}return true;}function _getInt(str,i,minlength,maxlength){for (var x=maxlength;x>=minlength;x--){var token=str.substring(i,i+x);if (token.length < minlength){return null;}if (_isInteger(token)){return token;}}return null;}function getDateFromFormat(val,format){val=val+"";format=format+"";var i_val=0;var i_format=0;var c="";var token="";var token2="";var x,y;var now=new Date();var year=now.getUTCFullYear();var month=now.getUTCMonth()+1;var date=1;var hh=now.getUTCHours();var mm=now.getUTCMinutes();var ss=now.getUTCSeconds();var ampm="";while (i_format < format.length){c=format.charAt(i_format);token="";while ((format.charAt(i_format)==c) && (i_format < format.length)){token += format.charAt(i_format++);}if (token=="yyyy" || token=="yy" || token=="y"){if (token=="yyyy"){x=2;y=4;}if (token=="yy"){x=2;y=2;}if (token=="y"){x=2;y=4;}year=_getInt(val,i_val,x,y);if (year==null){year = new Date().getUTCFullYear();
continue;}else{i_val += year.length;}if (year.length==2){if (year > 70){year=1900+(year-0);}else{year=2000+(year-0);}}}else if (token=="MMM"||token=="NNN"){month=0;for (var i=0;i<MONTH_NAMES.length;i++){var month_name=MONTH_NAMES[i];if (val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()){if (token=="MMM"||(token=="NNN"&&i>11)){month=i+1;if (month>12){month -= 12;}i_val += month_name.length;break;}}}if ((month < 1)||(month>12)){return 0;}}else if (token=="EE"||token=="E"){for (var i=0;i<DAY_NAMES.length;i++){var day_name=DAY_NAMES[i];if (val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()){i_val += day_name.length;break;}}}else if (token=="MM"||token=="M"){month=_getInt(val,i_val,1,2);if(month==null||(month<1)||(month>12)){return 0;}i_val+=month.length;}else if (token=="dd"||token=="d"){date=_getInt(val,i_val,1,2);if(date==null||(date<1)||(date>31)){return 0;}i_val+=date.length;}else if (token=="hh"||token=="h"){hh=_getInt(val,i_val,1,2);if(hh==null){if (date>0){hh=mm=ss=0;break;}return 0;}if (hh<1||hh>12){return 0;}i_val+=hh.length;}else if (token=="HH"||token=="H"){hh=_getInt(val,i_val,1,2);if(hh==null){if (date > 0){hh=mm=ss=0;break;}return 0;}if (hh<0||hh>23){return 0;}i_val+=hh.length;}else if (token=="KK"||token=="K"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<0)||(hh>11)){return 0;}i_val+=hh.length;}else if (token=="kk"||token=="k"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<1)||(hh>24)){return 0;}i_val+=hh.length;hh--;}else if (token=="mm"||token=="m"){mm=_getInt(val,i_val,1,2);if(mm==null||(mm<0)||(mm>59)){return 0;}i_val+=mm.length;}else if (token=="ss"||token=="s"){ss=_getInt(val,i_val,1,2);if(ss==null||(ss<0)||(ss>59)){if ( i_val<val.length ){return 0;}ss ="00";}i_val+=ss.length;}else if (token=="a"){if (val.substring(i_val,i_val+2).toLowerCase()=="am"){ampm="AM";}else if (val.substring(i_val,i_val+2).toLowerCase()=="pm"){ampm="PM";}else{return 0;}i_val+=2;}else{var tokenGot=val.substring(i_val,i_val+token.length);if (tokenGot!="" && tokenGot!=token){if ( !((token=="/" && tokenGot=="-") || (token=="-" && tokenGot=="/")) ){return 0;}}i_val+=token.length;}}if (i_val < val.length){return 0;}if (month==2){if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ){
if (date > 29){return 0;}}else{if (date > 28){return 0;}}}if ((month==4)||(month==6)||(month==9)||(month==11)){if (date > 30){return 0;}}if (hh<12 && ampm=="PM"){hh=hh-0+12;}else if (hh>11 && ampm=="AM"){hh-=12;}return Date.UTC(year,month-1,date, hh, mm, ss);}