function GetMainObject(Object) {
  if (!Object)
  	return null;
  var orgObj = null;
  
  if (Object.length == 2 && Object[1].type === 'checkbox') {
	orgObj = Object[1];
  }
  else
  if (Object.length > 1 && (Object[0].type === 'radio' || Object[0].type === 'checkbox')) {
  	orgObj = Object[0];
  	for (i=0;i< Object.length; i++) {
  		if (Object[i].checked) {
  			orgObj = Object[i];
  			break;	
  		}
  	}
  }  
  else
  if (Object[1] != null && Object.nodeName != 'SELECT') {
	  for (i=0;i< Object.length; i++)
	   	if (Object[i].type!='hidden' && isHtmlcontrolVisible(Object[i])) {
	  		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+$/,'') == '' || ((Object.type == 'radio' || Object.type == 'checkbox') && !Object.checked));
}

function CheckNotNull(Object, message) {	
  var orgObj = GetMainObject(Object);
  if(!orgObj) return true;
    
  if (orgObj.type == 'hidden' && document.getElementById(orgObj.id + "___Frame")) {
  	var htmlEditorValue = '';
  	if (typeof FCKeditorAPI.GetInstance(orgObj.id).EditorDocument.body.textContent != 'undefined')
  		htmlEditorValue = FCKeditorAPI.GetInstance(orgObj.id).EditorDocument.body.textContent;
  	else
  		htmlEditorValue = FCKeditorAPI.GetInstance(orgObj.id).EditorDocument.body.innerText;
  	if (htmlEditorValue.length == 0 || htmlEditorValue.replace(/^\s+|\s+$/,'') == '') {
      	alert(message);
      	document.getElementById(orgObj.id + "___Frame").focus();
  		return false;
  	}
  	return true;
  }
  if(IsNull(orgObj)) {
  	  if (!isHtmlcontrolVisible(orgObj))  
  		return true;
  	  if (!message)
  	  	message = THIS_FIELD_MANDATORY;
      alert(message);
      orgObj.focus();
      return false;
  }
  return  true;
}        

function isHtmlcontrolVisible(element) {
	var tmpElement = element;
	while (tmpElement != null) {
		if (sisGetStyle(tmpElement, 'display') == "none")
			return false;
		tmpElement = tmpElement.parentNode;
	}
	return true;
/*	if (element.offsetWidth === 0 || element.offsetHeight === 0) 
		return false;  
	var height = document.documentElement.clientHeight,      
		rects = element.getClientRects(),      
		on_top = function(r) {  
					for (var x = Math.floor(r.left), x_max = Math.ceil(r.right); x <= x_max; x++)  
					for (var y = Math.floor(r.top), y_max = Math.ceil(r.bottom); y <= y_max; y++) {    
						if (document.elementFromPoint(x, y) === element) return true;  }  
					return false;
				 };
	for (var i = 0, l = rects.length; i < l; i++) {    
			var r = rects[i],        
			in_viewport = r.top > 0 ? r.top <= height : (r.bottom > 0 && r.bottom <= height);    
			if (in_viewport && on_top(r)) 
				return true;  
	}  
	return false;*/
}

function CheckHiddenNotNull(Object, Messgae) {	 
  var orgObj = GetMainObject(Object);
  if(!orgObj) return true;
    
  if(IsNull(orgObj)) {
      alert(Messgae);
      return false;
  }
  return  true;
}        

function CheckTime(timeObj,chkNull) {
    var orgObj = GetMainObject(timeObj);        
	if(!orgObj) return true;
	
    var flag = false;
    if( !chkNull && orgObj.value == "" )
		return true;
	else if( orgObj.value=="" ){
	  	if (!isHtmlcontrolVisible(orgObj))  
	  		return true;		
        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 ) {
	  	if (!isHtmlcontrolVisible(orgObj))  
	  		return true;    	
        alert(INVALID_TIME);
        orgObj.focus();
        return false;
    }
    return true;
}

function ChkValidity(obj,lowb,upb,msg) {    
    var orgObj = GetMainObject(obj);
    if(!orgObj) return true;
        
	var	a = parseInt(orgObj.value);
	
	if(a < lowb || a > upb) {
	  	if (!isHtmlcontrolVisible(orgObj))  
	  		return true;		
		alert(msg);
        orgObj.focus();
		return false;
	}
	return true;
}
function ChkDateValidity(obj,lowb,upb,msg,type) {   
    var orgObj = GetMainObject(obj);
    if(!orgObj) return true;
	if (IsNull(orgObj))
		return true;

    if(type=="JALALIDATE")
    {

	   	var dateAry = orgObj.value.split("/");
		var day = dateAry[0];
		var month = dateAry[1];
		var year = dateAry[2];
		
		var lowbAry = lowb.split("/");
		var lowbday = lowbAry[0];
		var lowbmonth = lowbAry[1];
		var lowbyear = lowbAry[2];
		
		var upbAry = upb.split("/");
		var upbday = upbAry[0];
		var upbmonth = upbAry[1];
		var upbyear = upbAry[2];
		
    }
    else
    {
    	
	   	var dateAry = orgObj.value.split("/");
		var day = dateAry[0];
		var month = dateAry[1];
		var year = dateAry[2];
		
		var lowbAry = lowb.split("-");
		var lowbday = lowbAry[2];
		var lowbmonth = lowbAry[1];
		var lowbyear = lowbAry[0];
		
		var upbAry = upb.split("-");
		var upbday = upbAry[2];
		var upbmonth = upbAry[1];
		var upbyear = upbAry[0];
		
    }
    
    var dateVal=366*year+12*month+day;
    var lowbVal=366*lowbyear+12*lowbmonth+lowbday;
    var upbVal=366*upbyear+12*upbmonth+upbday;
   
    if(dateVal>upbVal||dateVal<lowbVal) {
	  	if (!isHtmlcontrolVisible(orgObj))  
	  		return true;		
		alert(msg);
        orgObj.focus();
        return false;
	}
	return true;
}

function JCheckDate(dateObj,chkNull) {
    var orgObj = GetMainObject(dateObj);        
    if(!orgObj) return true;
        
	var flag = false;
    if( !chkNull && orgObj.value == "" )
		return true;
	else if( orgObj.value=="" ){
	  	if (!isHtmlcontrolVisible(orgObj))  
	  		return true;				
        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 ) {
	  	if (!isHtmlcontrolVisible(orgObj))  
	  		return true;		    	
        alert(INVALID_DATE);
        orgObj.focus();
        return false;
    }
    return true;
}

function GCheckDate(dateObj,chkNull) {
    var orgObj = GetMainObject(dateObj);        
    if(!orgObj) return true;
    
	var flag = false;
    if( !chkNull && orgObj.value == "" )
		return true;
	else if( orgObj.value=="" ){
	  	if (!isHtmlcontrolVisible(orgObj))  
	  		return true;		
        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 ) {
	  	if (!isHtmlcontrolVisible(orgObj))  
	  		return true;		    	
        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) {
    var orgObj1 = GetMainObject(Obj1);        
    var orgObj2 = GetMainObject(Obj2);        				
	if(!orgObj1 || !orgObj2) return true;
	    
	var  Val1, Val2;
	Val1 = orgObj1.value;
	Val2 = orgObj2.value;
	if (!isNaN(Val1))
		Val1 = Val1 * 1;
	if (!isNaN(Val2))
		Val2 = Val2 * 1;
    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) {
    var orgObj1 = GetMainObject(dateObj1);        		
    var orgObj2 = GetMainObject(dateObj2);        		
	if(!orgObj1 || !orgObj2) return true;    		
    
	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(isNaN(Val1) || isNaN(Val2) || 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) {
	editObj = GetMainObject(editObj);
	if(!editObj) return true;
			
	var value = editObj.value;
	var re = /,/g;	
	value = value.replace(re, "");	
	if (value * 1 != value)
		editObj.value = '';
}

function addCommas(editObj, e) {	
  editObj = GetMainObject(editObj);  
  if(!editObj) return true;
    
  if (!e)
  	e = window.event;
  if ((e.keyCode >= 65 && e.keyCode <= 90) || (e.keyCode >=96 && e.keyCode <= 105) || e.keyCode == 109 || e.keyCode == 110 || e.keyCode == 8 || e.keyCode == 46) {
	  var re = /,/g;	
	  var value = editObj.value;
	  value = value.replace(re, "");
	  value += '';
	  x = value.split('.');
	  x1 = x[0];
	  x2 = x.length > 1 ? '.' + x[1] : '';
	  var rgx = /(\d+)(\d{3})/;
	  while (rgx.test(x1)) {
	    x1 = x1.replace(rgx, '$1' + ',' + '$2');
	  }
	  editObj.value = x1 + x2;
  }
}

function isNumber(elem,decimal, nullable) {
	elem = GetMainObject(elem);
	if(!elem) return true;
			
	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;
}

function isEMailAddr(elem, nullable) {
	elem = GetMainObject(elem);
	if(!elem) return true; 
			
    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);
		elem.focus();
        return false;
    }
	return true;
}

function isRegular(elem, reTxt, msg) {
	elem = GetMainObject(elem);
	if(!elem) return true;
	if (IsNull(elem))
		return true;
    var str = elem.value;
    str = str.toString( );
  	if (!str.match(reTxt)) {
		alert(msg);
		elem.focus();
		return false;
	}
	return true;
}

function checkLength(elem, min, max, msg, nullable) {
	elem = GetMainObject(elem);
	if(!elem) return true;
	if (IsNull(elem))
		return true;			
    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;
}

function checkDetailContainersForm(typeName) {
		templateControl = document.getElementById('childContentTemplate_' + typeName);
		itemsCount = templateControl.parentNode.childNodes.length;
		if (templateControl.parentNode.getAttribute('itemsCount'))
			itemsCount  = templateControl.parentNode.getAttribute('itemsCount');		   		
		for(var idx=0; idx<=itemsCount; idx++) {
			if (document.getElementsByName('sisDetail[' + typeName + '][sisRecord][' + idx + '][id]').length > 0) {
				eval('var result = _checkDetail_' + typeName + '(' + idx + ');');
				if (!result)
					return false;
			}
		}
	return true;
}

function CheckFileNotNull(fileContainer, message) {
	var isValid = false;
	if (fileContainer.childNodes[0].childNodes.length >= 4) {
		for(var idx=3; idx<fileContainer.childNodes[0].childNodes.length; idx++) {
			if (!document.getElementById(fileContainer.getAttribute("colName")+"["+(idx-3)+"]")) {
				isValid = true;
				break;
			}
			else if (document.getElementById(fileContainer.getAttribute("colName")+"["+(idx-3)+"]").value != '') {
				isValid = true;
				break;				
			}
		}
	}
	if (!isValid) {
		alert(message);		
	}
	return isValid;
}

function sisGetStyle(oElm, strCssRule){	
	var strValue = "";
	try {
	if(document.defaultView && document.defaultView.getComputedStyle){
		strValue = document.defaultView.getComputedStyle(oElm, null).getPropertyValue(strCssRule);
	}
	else if(oElm.currentStyle){
		strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
			return p1.toUpperCase();
		});
		strValue = oElm.currentStyle[strCssRule];
	}
	}
	catch(ex) {}
	return strValue;
}

