function GetMainObject(Object) {
  var orgObj = null;
  if (Object[1] != null && Object.nodeName != 'SELECT') {
	  for (i=0;i< Object.length; i++)
	   	if (Object[i].type!='hidden') {
	  		orgObj = Object[i];
	  		break;
	  	}
  }	
  else
  	orgObj = Object;
  return orgObj;	
}

function IsNull(Object) {
  var FieldLen, FieldVal;
  FieldVal = Object.value;
  FieldLen = FieldVal.length;
  return (FieldLen == 0 || FieldVal.replace(/^\s+|\s+$/,'') == '');
}

function CheckNotNull(Object) {	 
  if(!Object) return true; //if not exist object
  var orgObj = GetMainObject(Object);
  
  if(IsNull(orgObj)) {
      alert(THIS_FIELD_MANDATORY);
      orgObj.focus();
      return false;
  }
  return  true;
}        

function CheckHiddenNotNull(Object, Messgae) {	 
  if(!Object) return true; //if not exist object
  var orgObj = GetMainObject(Object);
  
  if(IsNull(orgObj)) {
      alert(Messgae);
      return false;
  }
  return  true;
}        

function CheckTime(timeObj,chkNull) {
	if(!timeObj) return true; //if object not exist
    var orgObj = GetMainObject(timeObj);        

    var flag = false;
    if( !chkNull && orgObj.value == "" )
		return true;
	else if( orgObj.value=="" ){
        alert(THIS_FIELD_MANDATORY);
        orgObj.focus();
        return false;
	}
	
    var timeAry = orgObj.value.split(":");
	var	hour = timeAry[0];
	var	minute = timeAry[1];
	var	second = timeAry[2];
    if( second && minute && hour ) {
        if  ( (hour >= 0 || hour <= 23) &&
			  (minute >= 0 || minute <= 59) &&
        	  (second >= 0 || second <= 59 ) )
            flag = true;
    }
    else
        flag = true;
    if ( !flag ) {
        alert(INVALID_TIME);
        orgObj.focus();
        return false;
    }
    return true;
}

function ChkValidity(obj,lowb,upb,msg) {
    if(!obj) return true; //if not exist object
    var orgObj = GetMainObject(obj);

	var	a = parseInt(orgObj.value);
	if(a < lowb || a > upb) {
		alert(msg);
        orgObj.focus();
		return false;
	}
	return true;
}

function JCheckDate(dateObj,chkNull) {
    if(!dateObj) return true; //if not exist object
    var orgObj = GetMainObject(dateObj);        
	var flag = false;
    if( !chkNull && orgObj.value == "" )
		return true;
	else if( orgObj.value=="" ){
        alert(THIS_FIELD_MANDATORY);
        orgObj.focus();
        return false;
	}
    var dateAry = orgObj.value.split("/");
    var day = dateAry[0];
    var month = dateAry[1];
    var year = dateAry[2];

    if( day && month && year ) {
        if ( day.length < 2 || month.length < 2 || year.length < 4 )
            flag = true;
        if( year > 1400 || year < 1300 )
            flag = true;
        if( month > 12 )
            flag = true;
        if ( month <= 6 && ( day>31 || day < 1 ) )
            flag = true;
        if( month > 6 && ( day>30 || day < 1 ) )
            flag = true;
    }
    else
        flag = true;
    if ( flag ) {
        alert(INVALID_DATE);
        orgObj.focus();
        return false;
    }
    return true;
}

function GCheckDate(dateObj,chkNull) {
    if(!dateObj) return true; //if not exist object
    var orgObj = GetMainObject(dateObj);        

	var flag = false;
    if( !chkNull && orgObj.value == "" )
		return true;
	else if( orgObj.value=="" ){
        alert(THIS_FIELD_MANDATORY);
        orgObj.focus();
        return false;
	}
    var dateAry = orgObj.value.split("/");
    var day = dateAry[0];
    var month = dateAry[1];
    var year = dateAry[2];

    if( day && month && year ) {
        if ( day.length < 2 || month.length < 2 || year.length < 4 )
            flag = true;
        if( year > 2020 || year < 1900 )
            flag = true;
        if( month > 12 )
            flag = true;
    	switch(month) {
        	case 2 : if ( day > 28 ) flag = true; break;
            case 4 :
            case 6 :
            case 9 :
            case 11 : if ( day > 30 ) flag = true; break;
            default : if ( day > 31 ) flag = true; break;
        }
    }
    else
        flag = true;
    if ( flag ) {
        alert(INVALID_DATE);
        orgObj.focus();
        return false;
    }
    return true;
}

function CheckDate(dateObj, type, chkNull) {
    if( type=="JALALIDATE" )
    	return JCheckDate(dateObj,chkNull);
    else
    	return GCheckDate(dateObj,chkNull);
}

function CheckPswd(id, value, atlogin) {
	var pswd = document.getElementById(id + "_visible");
	var pswd_hide = document.getElementById( id+ "_hide");
	if ( pswd.value.length == 0 ){
		alert("لطفا رمز ورود کاربر را وارد کنيد!");
		pswd.focus();
		return  false;
	}
	 if( (!atlogin) && ( pswd.value != value ) && ( pswd.value.length < 6 ) ) {
		alert("رمز ورود بايد حداقل 6 حرف باشد!");
		pswd.focus();
		return  false;
	  }
	pswd_hide.value = MD5(pswd.value);
	return true;
}

function CompareValue(Obj1, Compop, Obj2, Msg) {
	if(!Obj1 || !Obj2) return true; //if objects not exist	
    var orgObj1 = GetMainObject(Obj1);        
    var orgObj2 = GetMainObject(Obj2);        				
    
	var  Val1, Val2;
	Val1 = orgObj1.value;
	Val2 = orgObj2.value;
    if(((Compop == "=") && (Val1 != Val2)) ||
       ((Compop == "<=") && (Val1 > Val2)) ||
       ((Compop == "<") && (Val1 >= Val2)) ||
       ((Compop == "!=") && (Val1 == Val2)) ||
       ((Compop == ">=") && (Val1 < Val2)) ||
       ((Compop == ">") && (Val1 <= Val2))) {
		alert(Msg);
		orgObj2.focus();
		return  false;
	}
	return  true;
}

function CompareDate(dateObj1, Compop, dateObj2, Msg) {
	if(!dateObj1 || !dateObj2) return true; //if objects not exist	
    var orgObj1 = GetMainObject(dateObj1);        		
    var orgObj2 = GetMainObject(dateObj2);        		
    		
	var dateAry1 = orgObj1.value.split("/");
	var dateAry2 = orgObj2.value.split("/");
	var day1 = dateAry1[0];
	var month1 = dateAry1[1];
	var year1 = dateAry1[2];
	var day2 = dateAry2[0];
	var month2 = dateAry2[1];
	var year2 = dateAry2[2];
	var  Val1, Val2;
	Val1 = 366*year1 + 31*month1 + day1;
	Val2 = 366*year2 + 31*month2 + day2;

    if( Val1 == 0 || Val2 == 0 )
    	return true;

    if(((Compop == "=") && (Val1 != Val2)) ||
       ((Compop == "<=") && (Val1 > Val2)) ||
       ((Compop == "<") && (Val1 >= Val2)) ||
       ((Compop == "!=") && (Val1 == Val2)) ||
       ((Compop == ">=") && (Val1 < Val2)) ||
       ((Compop == ">") && (Val1 <= Val2))) {
			alert(Msg);
			orgObj1.focus();
			return false;
	}
	return true;
}

function validateNumber(editObj) {
	if(!editObj) return true; //if object not exist
	var value = editObj.value;
	if (value * 1 != value)
		editObj.value = '';
}

//validates that the entry is a positive or negative number
function isNumber(elem,decimal, nullable) {
	if(!elem) return true; //if object not exist
	var str = elem.value;
    if (str == '' && nullable == true)
    	return true;	
	if (decimal > 0)
		var re = new RegExp("^[-]?\\d*\\.\\d{" + decimal + "}$"); 
	else if (decimal == 0)
		var re = /^[-]?\d*$/;
	else
		var re = /^[-]?\d*\.?\d*$/
    str = str.toString( );
	if (!str.match(re)) {
        alert(INVALID_NUMBER);
		elem.focus();
        return false;
    }
    return true;
}

// validates that the entry is formatted as an email address
function isEMailAddr(elem, nullable) {
	if(!elem) return true; //if object not exist
    var str = elem.value;
    if (str == '' && nullable == true)
    	return true;
    var re = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/;
    if (!str.match(re)) {
        alert(INVALID_EMAIL_FORMAT);
		elem.focus();
        return false;
    }
	return true;
}

function isRegular(elem, reTxt, msg) {
	if(!elem) return true; //if object not exist
    var str = elem.value;
	var re = new RegExp(reTxt); 
    str = str.toString( );
	if (!str.match(re)) {
		alert(msg);
		elem.focus();
		return false;
	}
	return true;
}
function checkLength(elem, min, max, msg, nullable) {
	if(!elem) return true; //if object not exist
    var str = elem.value;
	if (nullable && str.length == 0)
		return true;
	if (str.length < min || str.length > max) {
		alert(msg);
		elem.focus();
		return false;
	}
	return true;
}
