<!--
/*
$Id: formValidator.js,v 1.1 2007/19/01 $

WebInteractive, Open Source CMS Solutions
http://www.lokamaya.com

Copyright (c) 2007 Lokamaya

Released under the GNU General Public License

For question or modification please visit http://www.lokamaya.com
*/

function formValidator() {
  var arg = formValidator.arguments;
  if (arg[0]) this.formObject=document.forms[arg[0]];
  else this.formObject=document.forms[0];
  if(!this.formObject) {
    alert("Can not find the form!");
    return;
  }
  this.isSubmited  = false;
  this.field_index = 0;
  this.fieldSubmit = new Array();
  this.fieldObject = new Array();
  this.fieldAlias  = new Array();
  this.fieldOption = new Array();
  this.fieldDepend = new Array();
  this.colorError  = "#FFCC99";
  this.colorDefault= "";
  this.addActionArg= null;
  var thisObj=this;

  this.formObject.addField= function() {
    thisObj.addField();
  };

  this.formObject.errorStyle= function() {
    thisObj.errorStyle();
  };

  this.formObject.validateEmail= function() {
    return thisObj.validateEmail();
  };

  this.formObject.trim= function() {
    return thisObj.trim();
  };

  this.formObject.dependOn= function() {
    return thisObj.dependOn();
  };

  this.formObject.onsubmit= function() {
    return thisObj.submitEvent();
  };

  this.formObject.detectEnter= function() {
    return thisObj.detectEnter();
  };

  this.formObject.addAction= function() {
    thisObj.addAction();
  };

  this.formObject.applyAction= function() {
    thisObj.applyAction();
  };
  
  var formElement = this.formObject.elements;
  for (var i=0; i<formElement.length; i++) {
    if (formElement[i].type=='text' || formElement[i].type=='select') {
      formElement[i].onkeydown = this.formObject.detectEnter;
    }
  }  
}

formValidator.prototype.addAction = function () {
  var args = this.addAction.arguments;
  if (args[0] && args[1] && args[2]) {
    if (this.formObject[args[0]]) {
      this.addActionArgs = args[2];
      var fObj  = this.formObject[args[0]];
      var cmd   = args[1].toLowerCase(); 
      switch(cmd) {
        case 'onclick': { fObj.onclick = function (evt) { eval(args[2]); }; break; }
        case 'onfocus' : { fObj.onfocus = function (evt) { eval(args[2]); }; break; }
        case 'onblur' : { fObj.onblur = function (evt) { eval(args[2]); }; break; }
        case 'onchange': { fObj.onchange = function (evt) { eval(args[2]); }; break; }
        case 'ondblclick': { fObj.ondblclick = function (evt) { eval(args[2]); }; break; }
        case 'onmousedown': { fObj.onmousedown = function (evt) { eval(args[2]); }; break; }
        case 'onmouseup': { fObj.onmouseup = function (evt) { eval(args[2]); }; break; }
        default: { alert('Action '+cmd+' not allowed!') }
      }
    } else {
      alert('Object "' + args[0] + '" not found in the form!');
    }
  } else {
    alert('Missing argument for function: addAction');
  }
};

formValidator.prototype.applyAction = function () {
  var args = this.addAction.arguments;
};

formValidator.prototype.detectEnter = function () {
  var varE, evt;
  if (window.Event) {
    evt = window.Event;
  } else if (window.event) {
    evt = window.event;
  } else {
    return true;
  }
  
  holdE=evt.keyCode;
  setTimeout('holdE=""',100);

  if (evt.keyCode==13) {
    evt.keyCode=9;
  }
  return true;
};

formValidator.prototype.addField = function () {
  var args = this.addField.arguments;
  if (args[0] && args[1] && args[2]) {
    if (this.formObject[args[0]]) {
      var fObj = this.formObject[args[0]];
      this.fieldObject[this.field_index] = fObj;
      this.fieldAlias[this.field_index]  = args[1];
      this.fieldOption[this.field_index] = args[2];
      if (args[3]) {
        this.fieldDepend[this.field_index] = args[3];
      } else {
        this.fieldDepend[this.field_index] = false;
      }
      this.field_index++;
    } else {
      alert('Object "' + args[0] + '" not found in the form!');
    }
  } else {
    alert('Missing argument for function: addField');
  }
};

formValidator.prototype.errorStyle = function () {
  var args = this.addField.arguments;
  if (args[0]) {
    this.colorError = args[0];
  }
  if (args[1]) {
    this.colorDefault = args[1];
  }
};

formValidator.prototype.trim = function() {
  var str = this.trim.arguments[0];
  return str.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
};


formValidator.prototype.dependOn = function() {
  var args = this.dependOn.arguments;
  if (args[0] === false) {
    var str = this.trim.arguments[0];
    return str.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
  }
};

formValidator.prototype.validateEmail = function() {
  var email = this.validateEmail.arguments[0];
  var emailsplit = email.match("^(.+)@(.+)$");
  
  if(emailsplit == null) return false;
  if(emailsplit[1] != null ) {
    var regexp_user=/^\"?[\w\-_\.]*\"?$/;
    if(emailsplit[1].match(regexp_user) == null) return false;
  }
  if(emailsplit[2] != null) {
    var regex_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
    if(emailsplit[2].match(regex_domain) == null) {
      var regex_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
      if(emailsplit[2].match(regex_ip) == null) return false;
    }
    return true;
  }
  return false;
};

formValidator.prototype.submitEvent = function () {
  var i, j, getPos, intTmp, fObject, fValue, fAlias, fOption, fDepend, optionArray, optionTmp, oCommand, oValue, oDesc, process;
  var errstr = "Terdapat kesalahan dalam pengisian form:\n";
      errstr += "-------------------\n";
  var erridx = 0;
  var erropt = false;
  
  if (this.isSubmited) return false;
  
  for (i=0; i<this.fieldObject.length; i++) {
    process = true;
    fObject = this.fieldObject[i];
    fValue  = fObject.value;
    fAlias  = this.fieldAlias[i];
    fOption = this.fieldOption[i];
    fDepend = this.fieldDepend[i];
    fObject.style.backgroundColor = this.colorDefault;
    
    if (fDepend !== false) {
      var fDependAr = fDepend.split('=');
      var fDependField = this.formObject[fDependAr[0]];
      if (fDependField.value != fDependAr[1]) {
        process = false;
      }
    } 
    
    if (process) {
      optionArray = this.fieldOption[i].split('||');
      for (j=0; j<optionArray.length; j++) {
        optionTmp     = optionArray[j].split('|');
        getPos = optionTmp[0].search("=");
        oCommand = "";
        oValue   = false;
        oDesc    = optionTmp[1];
        if(getPos >= 0) {
          oCommand = optionTmp[0].substring(0,getPos);
          oValue   = optionTmp[0].substr(getPos+1);
          oValue   = this.trim(oValue);
          //if (!optionTmp[1]) oDesc = oCommand + ' = ' + oValue;
        } else {
          oCommand = optionTmp[0];
          //if (!optionTmp[1]) oDesc = 'must be ' + oCommand;
        }
        oCommand = this.trim(oCommand);
        //oDesc    = fAlias + ': ' + oDesc;
        
        erropt = false;
        switch(oCommand) {
          case "fckeditor":
          {
            var oEditor = FCKeditorAPI.GetInstance(fObject.name) ;
            fValue  = oEditor.GetXHTML ();
            fValue  = fValue.replace(/(<([^>]+)>)/ig,"");
            fValue  = fValue.replace(/([^a-z0-9])+/ig," ");
            fValue  = this.trim(fValue);
            //alert (fValue);
            break;
          }
          case "checkbox": 
          {
            intTmp = fValue.search("[^A-Za-z]");
            if(!fObject.checked) {
              erridx++;
              erropt = true;
              if (oDesc) {
                errstr += '+ ' + fAlias + ': ' + this.trim(oDesc) + "\n";
              } else {
                errstr += '+ ' + fAlias + ': harus dipilih' + "\n";
              }
            }
            break;
          }
          case "required": 
          {
            if (fValue.length == 0 && oValue != 'false') {
              erridx++;
              erropt = true;
              if (oDesc) {
                errstr += '+ ' + fAlias + ': ' + this.trim(oDesc) + "\n";
              } else {
                errstr += '+ ' + fAlias + ': harus diisi' + "\n";
              }
            }
            break;
          }
          case "not": 
          {
            if (fValue == oValue) {
              erridx++;
              erropt = true;
              if (oDesc) {
                errstr += '+ ' + fAlias + ': ' + this.trim(oDesc) + "\n";
              } else {
                errstr += '+ ' + fAlias + ': tidak boleh "0"' + "\n";
              }
            }
            break;
          }
          case "maxlength": 
          {
            intTmp = parseInt(oValue);
            if (intTmp > 0 && fValue.length > intTmp) {
              erridx++;
              erropt = true;
              if (oDesc) {
                errstr += '+ ' + fAlias + ': ' + this.trim(oDesc) + "\n";
              } else {
                errstr += '+ ' + fAlias + ': maksimum ' + oValue + ' karakter' + "\n";
              }
            }
            break;
          }
          case "minlength": 
          {
            intTmp = parseInt(oValue);
            if (intTmp > 0 && fValue.length < intTmp) {
              erridx++;
              erropt = true;
              if (oDesc) {
                errstr += '+ ' + fAlias + ': ' + this.trim(oDesc) + "\n";
              } else {
                errstr += '+ ' + fAlias + ': minimum ' + oValue + ' karakter' + "\n";
              }
            }
            break;
          }
          case "alphanumeric": 
          {
            intTmp = fValue.search("[^A-Za-z0-9]");
            if(fValue.length > 0 &&  intTmp >= 0) {
              erridx++;
              erropt = true;
              if (oDesc) {
                errstr += '+ ' + fAlias + ': ' + this.trim(oDesc) + "\n";
              } else {
                errstr += '+ ' + fAlias + ': harus karakter alfanumerik' + "\n";
              }
            }
            break;
          }
          case "numeric": 
          {
            intTmp = fValue.search("[^0-9]");
            if(fValue.length > 0 &&  intTmp >= 0) {
              erridx++;
              erropt = true;
              if (oDesc) {
                errstr += '+ ' + fAlias + ': ' + this.trim(oDesc) + "\n";
              } else {
                errstr += '+ ' + fAlias + ': harus karakter numerik (angka)' + "\n";
              }
            }
            break;
          }
          case "alphabetic": 
          {
            intTmp = fValue.search("[^A-Za-z]");
            if(fValue.length > 0 &&  intTmp >= 0) {
              erridx++;
              erropt = true;
              if (oDesc) {
                errstr += '+ ' + fAlias + ': ' + this.trim(oDesc) + "\n";
              } else {
                errstr += '+ ' + fAlias + ': harus karakter alfabetik' + "\n";
              }
            }
            break;
          }
          case "alphabeticname": 
          {
            intTmp = fValue.search("[^A-Za-z]");
            if(fValue.length > 0 &&  intTmp > 0) {
              erridx++;
              erropt = true;
              if (oDesc) {
                errstr += '+ ' + fAlias + ': ' + this.trim(oDesc) + "\n";
              } else {
                errstr += '+ ' + fAlias + ': hanya alfabetik dan spasi yang diizinkan' + "\n";
              }
            }
            break;
          }
          case "alnumhyphen": 
          {
            intTmp = fValue.search("[^A-Za-z0-9\-_]");
            if(fValue.length > 0 &&  intTmp >= 0) {
              erridx++;
              erropt = true;
              if (oDesc) {
                errstr += '+ ' + fAlias + ': ' + this.trim(oDesc) + "\n";
              } else {
                errstr += '+ ' + fAlias + ': hanya alfanumerik, "-" dan "_"' + "\n";
              }
            }
            break;
          }
          case "lessthan": 
          {
            intTmp = fValue.search("[^A-Za-z\s\-_]");
            if (isNaN(fValue)) {
              erridx++;
              erropt = true;
              errstr += '+ ' + fAlias + ' should be a number' + "\n";
            } else if (parseInt(fValue) >=  parseInt(oValue)) {
              erridx++;
              erropt = true;
              if (oDesc) {
                errstr += '+ ' + fAlias + ': ' + this.trim(oDesc) + "\n";
              } else {
                errstr += '+ ' + fAlias + ': harus lebih kecil dari ' + parseInt(oValue) + "\n";
              }
            }
            break;
          }
          case "greaterthan": 
          {
            intTmp = fValue.search("[^A-Za-z\s\-_]");
            if (isNaN(fValue)) {
              erridx++;
              erropt = true;
              errstr += '+ ' + fAlias + ': harus angka' + "\n";
            } else if (parseInt(fValue) <=  parseInt(oValue)) {
              erridx++;
              erropt = true;
              if (oDesc) {
                errstr += '+ ' + fAlias + ': ' + this.trim(oDesc) + "\n";
              } else {
                errstr += '+ ' + fAlias + ': harus lebih besar dari ' + parseInt(oValue) + "\n";
              }
            }
            break;
          }
          case "confirm": 
          {
            var fTarget = this.formObject[oValue]; 
            if(fValue != fTarget.value) {
              erridx++;
              erropt = true;
              if (oDesc) {
                errstr += '+ ' + fAlias + ': ' + this.trim(oDesc) + "\n";
              } else {
                errstr += '+ ' + fAlias + ': tidak sama' + "\n";
              }
            }
            break;
          }
          case "regexp": 
          {
            if(fValue.match(oValue)) {
              erridx++;
              erropt = true;
              if (oDesc) {
                errstr += '+ ' + fAlias + ': ' + this.trim(oDesc) + "\n";
              } else {
                errstr += '+ ' + fAlias + ': terdapat kesalahan format' + "\n";
              }
            }
            break;
          }
          case "alternate": 
          {
            var fTarget = this.formObject[oValue];
            var fTargetValue = fTarget.value;
            if(fTargetValue.length == 0 && fValue.length == 0) {
              erridx++;
              erropt = true;
              if (oDesc) {
                errstr += '+ ' + fAlias + ': ' + this.trim(oDesc) + "\n";
              } else {
                errstr += '+ ' + fAlias + ': field ini atau field alternatif tidak boleh kosong' + "\n";
              }
            }
            break;
          }
          case "email": 
          {
            if(!this.validateEmail(fValue)) {
              erridx++;
              erropt = true;
              if (oDesc) {
                errstr += '+ ' + fAlias + ': ' + this.trim(oDesc) + "\n";
              } else {
                errstr += '+ ' + fAlias + ': format email salah' + "\n";
              }
            }
            break;
          }
          case "date": 
          {
            var checkDate = true;
            var dateRequired = false;
            var dateFormatDefault = 'dd/MM/yyyy';
            var dateFormat = false;
            var oFieldFormat = false;
            
            if (oValue) dateFormatDefault = oValue;
            
            if (fObject.id) {
              oFieldFormat = fObject.id + '_dateFormat';
            } else if (fObject.name) {
              oFieldFormat = fObject.name + '_dateFormat';
            }
            
            if (oFieldFormat && this.formObject[oFieldFormat]) {
              dateFormat = this.trim(this.formObject[oFieldFormat].value);
            }
            
            if (!dateFormat) {
              dateFormat = dateFormatDefault;
            }
            
            if (dateFormat.toLowerCase() == fValue.toLowerCase()) {
              fObject.value = '';
              fValue = '';
            }
            
            if (dateRequired && fValue.length == 0) {
              checkDate = false;
            }
            
            if (checkDate && fValue.length > 0) {
              checkDate=isValidDate(fValue,dateFormat);
            }
            
	          if (!checkDate) {
              erridx++;
              erropt = true;
              if (oDesc) {
                errstr += '+ ' + fAlias + ': ' + this.trim(oDesc) + "\n";
              } else {
                errstr += '+ ' + fAlias + ': format tanggal salah (format "' + dateFormat + '")' + "\n";
              }
	          }
      
            break;
          }
          case "onclick": 
          {
            if(!this.validateEmail(fValue)) {
              erridx++;
              erropt = true;
              if (oDesc) {
                errstr += '+ ' + fAlias + ': ' + this.trim(oDesc) + "\n";
              } else {
                errstr += '+ ' + fAlias + ': error' + "\n";
              }
            }
            break;
          }
          case "checkfile": 
          {
            if (fValue.length > 0) {
              var arTmp = oValue.split('#');
              var found = false;
              for (var f=0; f<arTmp.length; f++) {
                var arMatch = new RegExp("\."+arTmp[f]+"$", "i");
                if(fValue.match(arMatch)) {
                  found = true;
                  break;
                }
              }
              if (!found) {
                erridx++;
                erropt = true;
                if (oDesc) {
                  errstr += '+ ' + fAlias + ': ' + this.trim(oDesc) + "\n";
                } else {
                  errstr += '+ ' + fAlias + ': extension tidak diizinkan' + "\n";
                }
              }
            }
            break;
          }

        }
      
        if (erropt) {
          if (!firstError) {
            if (fObject.type != 'hidden' && fObject.style.display!='none' && fObject.focus) {
              var firstError = fObject;
              fObject.style.backgroundColor = this.colorError;
            }
          }
          if (fObject.type == 'hidden' && fObject.focus) {
            fObject.style.backgroundColor = this.colorError;
          }
          break;
        }          
      }
    }
  }
  if (erridx > 0) {
    alert(errstr);
    //if (window.scroll) window.scroll(0,0);
    if (firstError && firstError.focus) firstError.focus();
    this.formObject.submit = false;
    return false;
  } else {
    this.formObject.isSubmited = true;
    this.formObject.submit = true;
    return true;
  }
};


// ===================================================================
// Date Format and Validator
// Author: Matt Kruse <matt@mattkruse.com>
// http://www.mattkruse.com/
// ===================================================================

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 isValidDate(val,format){var date=getDateFromFormat(val,format);if(date==0){return false;}return true;}
function compareDates(date1,dateformat1,date2,dateformat2){var d1=getDateFromFormat(date1,dateformat1);var d2=getDateFromFormat(date2,dateformat2);if(d1==0 || d2==0){return -1;}else if(d1 > d2){return 1;}return 0;}
function formatDate(date,format){format=format+"";var result="";var i_format=0;var c="";var token="";var y=date.getYear()+"";var M=date.getMonth()+1;var d=date.getDate();var E=date.getDay();var H=date.getHours();var m=date.getMinutes();var s=date.getSeconds();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"]=M;value["MM"]=LZ(M);value["MMM"]=MONTH_NAMES[M-1];value["NNN"]=MONTH_NAMES[M+11];value["d"]=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.getYear();var month=now.getMonth()+1;var date=1;var hh=now.getHours();var mm=now.getMinutes();var ss=now.getSeconds();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=4;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){return 0;}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,token.length,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,token.length,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,token.length,2);if(hh==null||(hh<1)||(hh>12)){return 0;}i_val+=hh.length;}else if(token=="HH"||token=="H"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(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,token.length,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,token.length,2);if(ss==null||(ss<0)||(ss>59)){return 0;}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{if(val.substring(i_val,i_val+token.length)!=token){return 0;}else{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;}var newdate=new Date(year,month-1,date,hh,mm,ss);return newdate.getTime();}
function parseDate(val){var preferEuro=(arguments.length==2)?arguments[1]:false;generalFormats=new Array('y-M-d','MMM d, y','MMM d,y','y-MMM-d','d-MMM-y','MMM d');monthFirst=new Array('M/d/y','M-d-y','M.d.y','MMM-d','M/d','M-d');dateFirst =new Array('d/M/y','d-M-y','d.M.y','d-MMM','d/M','d-M');var checkList=new Array('generalFormats',preferEuro?'dateFirst':'monthFirst',preferEuro?'monthFirst':'dateFirst');var d=null;for(var i=0;i<checkList.length;i++){var l=window[checkList[i]];for(var j=0;j<l.length;j++){d=getDateFromFormat(val,l[j]);if(d!=0){return new Date(d);}}}return null;}

//-->