﻿
//Trim Function
String.prototype.trim = function() {
a = this.replace(/^\s+/, '');
return a.replace(/\s+$/, '');
};


//Functions for Validation
function isPageValid(paramGroup, dateFormat, lang)
{
  obj = new Object();
  obj.msg = "";
  var objValid = true;
  var theform = document.forms[0];

  var strRequired, strTextOnly, strNumOnly, strBetween1, strBetween2 ;
  var strMust, strGreater, strLess, strEqual, strDate, strEmail, strOr ;
	switch(lang){
		case 'en-US':
			strRequired= " is Required";
			strTextOnly= " Accept Text Only";
			strNumOnly= " Accept Number Only"; 
			strBetween1= " must be between ";
			strBetween2= " and ";
			strMust= " must be ";
			strGreater= "greater than ";
			strLess="less than ";
			strOr= " or "
			strEqual="equal to ";
			strDate=" Date Format Error";
			strEmail=" Address Invalid ";
			break;
		case 'zh-HK':
			strRequired= "必須輸入";
			strTextOnly= "只接受文字輸入";
			strNumOnly= "只接受數字輸入"; 
			strBetween1= "輸入範圍必須由 ";
			strBetween2= " 至 ";
			strMust= "必須";
			strGreater= "大於 ";
			strLess="少於 ";
			strOr= " 或 "
			strEqual="等於 ";
			strDate=" 輸入日期格式不正確";
			strEmail=" 輸入格式不正確 ";
			break;
    }			
    
  for( var i=0; i<theform.elements.length; i++ )
  {
    var isValid = true;
    eName = theform.elements[i].name;
    type = theform.elements[i].ValidateType;
    isReq = theform.elements[i].isReq;
    description = theform.elements[i].Description;
    // for checking the select dropdown value
    if (theform.elements[i].tagName=="SELECT")
        eValue = theform.elements[i].options[theform.elements[i].options.selectedIndex].value;
    else        
        eValue = theform.elements[i].value;
    
    // ensure the element is existed
    if( eName && eName != '')
    {
      if( eName == '__EVENTTARGET' || eName == '__EVENTARGUMENT' || eName == '__VIEWSTATE' )
      {
        // Do Nothing
      }
      else
      {
        // Only check the elements in the same web control with the submit button
        if (isUndefined(paramGroup) || paramGroup=='' || (paramGroup && paramGroup!='' && theform.elements[i].ValidateGroup==paramGroup))
        {
            // Check the field is required or not            
          if (isReq && isReq=='true')
            isValid = !isUndefined(eValue) && eValue.trim()!='';
          if(!isValid) {obj.msg += (obj.msg!=""?"<br>":"") + description + strRequired;}
          
            // Check the field value if the validateType is defined            
          if (isValid && type && type != '')
          {
            // check text field
            if (type.substr(0,4)=="text")
            {
              isValid=isString(eValue);
              if(!isValid) {obj.msg += (obj.msg!=""?"<br>":"") + description + strTextOnly}

              // Check text length will be done by the EXTextBox Maxlength property and it will set in ucBaseEdit automatically  
              /*
              if(isValid)
                  switch (type)
                  {
                      case "text10":
                        isValid=eValue.length<=10;
                        if(!isValid) {obj.msg="Accept text not longer than 10 characters"};
                        break;
                      default:
                        break;
                  }
                */  
            }
            // check numeric field
            else if (type.substr(0,3)=="num")
            {
              isValid=isNumber(eValue);
              
              if(!isValid) {obj.msg += (obj.msg!=""?"<br>":"") + description + strNumOnly}
              if(isValid)
              {
                andPos = type.indexOf("and",3);
                //alert(andPos)
                if(andPos>=3) // between case
                {
                    isValid = eValue >= parseInt(type.substring(3,andPos)) && eValue <= parseInt(type.substring(andPos+3)); 
                    if(!isValid) {obj.msg += (obj.msg!=""?"<br>":"") + description + strBetween1 + type.substring(3,andPos) +  strBetween2 + type.substring(andPos+3)};
                }
                else              
                {
                    //alert(eValue+type.substring(3))
                    //alert(eval(eValue+type.substring(3)))
                    isValid = eval(eValue+type.substring(3));
                    if(!isValid) 
                    {
                        obj.msg += (obj.msg!=""?"<br>":"") + description + strMust;

                        if (type.indexOf(">",3)>=3) obj.msg += strGreater;
                        if (type.indexOf("<",3)>=3) obj.msg += strLess;
                        if (type.indexOf("=",3)>=3) obj.msg += (type.indexOf(">",3)>=3 || type.indexOf("<",3)>=3?" or ":"") + strEqual;
                        obj.msg += type.replace(/[^0-9.]/g, "") ; 
                    }    
                }    


              
              /*   
                  switch (type)
                  {
                      case "num+":
                        isValid=eValue>0;
                        if(!isValid) {obj.msg="Accept number greater than 0"};
                        break;
                      case "num0+":
                        isValid=eValue>=0;
                        if(!isValid) {obj.msg="Accept number greater than or equal to 0"};
                        break;
                      case "num-":
                        isValid=eValue<0;
                        if(!isValid) {obj.msg="Accept number less than 0"};
                        break;
                      case "num0-":
                        isValid=eValue<=0;
                        if(!isValid) {obj.msg="Accept number less than or equal to 0"};
                        break;
                      default:
                        break;
                  }
               */   
               }      
            }
            // check date field
            else if (type=="date")
            {
                if (eValue!="")
                {
                    isValid = chkDate(eValue, dateFormat);
                    if (!isValid) {obj.msg += (obj.msg!=""?"<br>":"") + description + strDate};
                }
            }
            // check email field
            else if (type=="email") //added by san
            {
               if(eValue!="")
               {
                   isValid = chkEmail(eValue);
                   if(!isValid) {obj.msg += (obj.msg!=""?"<br>":"") + description + strEmail};                
               }
            }
          }
          if(!isValid) objValid = false;
          //if(!isValid) {obj.field = theform.elements[i]; break;}
        }
      }
    }
  }
  
  obj.isValid = objValid;
  return obj;
}

function getElement(str,i,separator)
{
	var ar=str.split(separator);
	var tmp = ar.length>i ? ar[i] : ''
	return(tmp)
}

function chkDate(str,dateFormat){ // t=dmy|mdy|ymd
	var tmpDate, y, m, d
	var separator = (type=='ansi'?'.':'/')
	
				separator = " "
				aFormat	= dateFormat.split(separator)
				if (aFormat.length<3)
				{
					separator = "/"
					aFormat	= dateFormat.split(separator)
					if (aFormat.length<3)
					{
						separator = "."
						aFormat	= dateFormat.split(separator)
						if (aFormat.length<3)
						{
							separator = "-"
							aFormat	= dateFormat.split(separator)
							if (aFormat.length<3)
							{
								// invalid date	format
								separator=""
							}
						}
					}
				}
					
    d= (getElement(dateFormat,0,separator).indexOf("d",0)>=0 ? parseInt(getElement(str,0,separator),10) : (getElement(dateFormat,1,separator).indexOf("d",0)>=0 ? parseInt(getElement(str,1,separator),10) :  parseInt(getElement(str,2,separator),10))) ; 					
    m= (getElement(dateFormat,0,separator).indexOf("m",0)>=0 ? parseInt(getElement(str,0,separator),10) : (getElement(dateFormat,1,separator).indexOf("m",0)>=0 ? parseInt(getElement(str,1,separator),10) :  parseInt(getElement(str,2,separator),10)))-1; 					
    y= (getElement(dateFormat,0,separator).indexOf("y",0)>=0 ? parseInt(getElement(str,0,separator),10) : (getElement(dateFormat,1,separator).indexOf("y",0)>=0 ? parseInt(getElement(str,1,separator),10) :  parseInt(getElement(str,2,separator),10))) ; 					

/*
	switch(dateFormat){
		case 'dmy':
			d=parseInt(getElement(str,0,separator),10);
			m=parseInt(getElement(str,1,separator),10)-1;
			y=parseInt(getElement(str,2,separator),10); 
			break;
		case 'mdy': 
			d=parseInt(getElement(str,1,separator),10);
			m=parseInt(getElement(str,0,separator),10)-1;
			y=parseInt(getElement(str,2,separator),10); 
			break;
		case 'ymd': 
			d=parseInt(getElement(str,2,separator),10);
			m=parseInt(getElement(str,1,separator),10)-1;
			y=parseInt(getElement(str,0,separator),10); 
			break;
		case 'ansi': 
			d=parseInt(getElement(str,2,separator),10);
			m=parseInt(getElement(str,1,separator),10)-1;
			y=parseInt(getElement(str,0,separator),10); 
			break;
	}
*/
	tmpDate=new Date(y, m, d ); 

	return((str.replace(/([^\/])/g,'')=='//' || str.replace(/([^\.])/g,'')=='..') &&
		y==tmpDate.getFullYear() && m==tmpDate.getMonth() && d==tmpDate.getDate())
}


//check email added by san start
function chkEmail(str)
{
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	return filter.test(str);
}
//check email added by san end