﻿function Trim(str)
{
	return str.replace(" ","").replace("\n","").replace("\t","");
}
//;:;:;:;:;:;:;:;:;:;:;:;:;:; (*_*) ;:;:;:;:;:;:;:;:;:;:;:;:;:;
function findcontrolByID(semiId)
{
	var frm = document.forms[0];
	
	for(var i=0; i<frm.elements.length; i++)
	{
		if(frm.elements[i].id.indexOf(semiId) != -1)
			return frm.elements[i];
	}
	return null;
}

function ValidateForm(frm)
{
	
	var formIsValid = true;
	var dirtyElement;
	var ErrorArray = new Array();
	var Cnt = 0;
	
	
	
	for(var i=0; i<frm.elements.length; i++)
	{
		
		frm.elements[i].style.backgroundColor = 'white';
		if(!formIsValid)
		{
			
			ErrorArray[Cnt++] = "Please fill in the required field: «"+dirtyElement+"»";
			
			frm.elements[i-1].style.backgroundColor = 'yellow';
			formIsValid = true;

		}
		try
		{
			dirtyElement = frm.elements[i].parentElement.parentElement.children[1].innerText;
		}
		catch(e)
		{
		}
		
		switch(frm.elements[i].type)
		{
			case "checkbox":
				if(frm.elements[i].className.indexOf("Required") != -1)
				{
					var checkBoxIsChecked = false;
					for(var j=0; j<frm.elements[frm.elements[i].name].length; j++)
						checkBoxIsChecked |= frm.elements[frm.elements[i].name][j].checked;
					formIsValid &= checkBoxIsChecked;
				}
				break;
			case "password":
				break;
			case "radio":
				var isRequired = false;
				try
				{
					isRequired = ((frm.elements[i].className != "")?(frm.elements[i].className.indexOf("Required") != -1):(frm.elements[i].parentElement.parentElement.parentElement.parentElement.className.indexOf("Required") != -1));
				}
				catch(e)
				{
				}
				if(isRequired)
				{
					var radioButtonIsChecked = false;
					for(var j=0; j<frm.elements[frm.elements[i].name].length; j++)
					{
						radioButtonIsChecked |= frm.elements[frm.elements[i].name][j].checked;
					}
					formIsValid &= radioButtonIsChecked;
				}
				break;
			case "text":
				if(frm.elements[i].className.indexOf("Required") != -1)
				{
					formIsValid = formIsValid && (Trim(frm.elements[i].value).length != 0);
					
				}
				if((frm.elements[i].className.indexOf("Int") != -1)&&(Trim(frm.elements[i].value)!=""))
				{
					if((CleanInteger(frm.elements[i].value)==null)||(CleanInteger(frm.elements[i].value) < 0))
					{
						ErrorArray[Cnt++] = "«"+dirtyElement+"» must be an integer value";
						
					}
				}
				if((frm.elements[i].className.indexOf("Float") != -1)&&(Trim(frm.elements[i].value)!=""))
				{
					if((CleanDouble(frm.elements[i].value)==null)||(CleanDouble(frm.elements[i].value) < 0))
					{
						ErrorArray[Cnt++] = "مقدار عددي «"+dirtyElement+"» درست وارد نشده است.";
						
					}
				}
				if((frm.elements[i].className.indexOf("Sep") != -1)&&(Trim(frm.elements[i].value)!=""))
				{
					var val = frm.elements[i].value;
					while((val.indexOf(String.fromCharCode(44))!= -1)||(val.indexOf(String.fromCharCode(46))!= -1))
						val = val.replace(String.fromCharCode(44),"").replace(String.fromCharCode(46),"");
					if((CleanInteger(val)==null)||(CleanInteger(val) < 0))
					{
						ErrorArray[Cnt++] = "مقدار عددي «"+dirtyElement+"» درست وارد نشده است.";
						
					}
				}
				else if((frm.elements[i].className.indexOf("Date") != -1)&&(Trim(frm.elements[i].value)!=""))
				{
					var cleanDate = CleanDate(frm.elements[i].value);
					if(cleanDate == null)
					{
						ErrorArray[Cnt++] = "قالب تاريخ در «"+dirtyElement+"» صحيح نمي باشد.";
						
					}
					else frm.elements[i].value = cleanDate;
				}
				else if((frm.elements[i].className.indexOf("Hour") != -1)&&(Trim(frm.elements[i].value)!=""))
				{
					var cleanHour = CleanHour(frm.elements[i].value);
					if(cleanHour == null)
					{
						ErrorArray[Cnt++] = "قالب ساعت در «"+dirtyElement+"» صحيح نمي باشد.";
						
					}
					else frm.elements[i].value = cleanHour;
				}
				else if((frm.elements[i].className.indexOf("Email") != -1)&&(Trim(frm.elements[i].value)!=""))
				{
					if(!IsEmailValid(frm.elements[i].value))
					{
						ErrorArray[Cnt++] = "The value in «"+dirtyElement+"» is not a valid Email Address" ;
						
					}
				}
				else if((frm.elements[i].className.indexOf("Address") != -1) && (Trim(frm.elements[i].value)!=""))
				{
					if(frm.elements[i].value.indexOf("http") == -1)
					{
						frm.elements[i].value = "http://" + frm.elements[i].value;
						
					}
				}
				else if((frm.elements[i].className.indexOf("UserName") != -1)&&(Trim(frm.elements[i].value)!=""))
				{
					if(!IsUserNameValid(frm.elements[i].value))
					{
						ErrorArray[Cnt++] = "نام کاربري صحيح نمي باشد.";
						
					}
				}
				else if((frm.elements[i].className.indexOf("URL") != -1)&&(Trim(frm.elements[i].value)!=""))
				{
					if(!IsURLValid(frm.elements[i].value))
					{
						ErrorArray[Cnt++] = "قالب آدرس اينترنتي صحيح نمي باشد.";
						
					}
				}
				else if((frm.elements[i].className.indexOf("Year") != -1)&&(Trim(frm.elements[i].value)!=""))
				{
					var cleanYear = CleanYear(frm.elements[i].value);
					if(cleanYear == null)
					{
						ErrorArray[Cnt++] = "سال صحيح نمي باشد.";
						
					}
					else frm.elements[i].value = cleanYear;
				}
				break;
			case "select-multiple":
				if(frm.elements[i].className.indexOf("Required") != -1)
				{
					formIsValid &= (frm.elements[i].selectedIndex != -1);
				}
				break;
			case "select-one":
				if(frm.elements[i].className.indexOf("Required") != -1)
				{
					formIsValid &= (frm.elements[i].selectedIndex != 0);
				}
				break;
			case "textarea":
				if(frm.elements[i].className.indexOf("Required") != -1)
				{
					formIsValid &= (Trim(frm.elements[i].value).length != 0);
				}
				break;
		}
	}
	if(ErrorArray.length > 0)
	{
		var HTML = "<table class=clsError width='100%' style='BORDER-RIGHT: #cc0000 1px solid; BORDER-TOP: #cc0000 1px solid; BORDER-LEFT: #cc0000 1px solid; BORDER-BOTTOM: #cc0000 1px solid; BACKGROUND-COLOR: lemonchiffon'><tr><td><p style='LINE-HEIGHT: 1.5pc;'><ul>"
		var i;
		for(i = 0;i<ErrorArray.length;i++)
		{
			
			HTML += "<li>&nbsp;" + ErrorArray[i] + "</li>";
		}
		HTML +="</ul></td></tr></table>";
			
		divError.innerHTML = HTML;
		
	}
	
	
	return ErrorArray.length == 0;
}
//;:;:;:;:;:;:;:;:;:;:;:;:;:; (*_*) ;:;:;:;:;:;:;:;:;:;:;:;:;:;
function CleanInteger(val)
{
//	var exp = /^\s*[-\+]?\d+\s*$/;
	var exp = /^\s*\d+\s*$/;
	if (val.match(exp) == null) 
		return null;
	var num = parseInt(val, 10);
	return (isNaN(num)?null:num);
}
//;:;:;:;:;:;:;:;:;:;:;:;:;:; (*_*) ;:;:;:;:;:;:;:;:;:;:;:;:;:;
function CleanDouble(val)
{
	var exp = new RegExp("^\\s*(\\d+)?(.(\\d+))?\\s*$");
	var m = val.match(exp);
	if (m == null)
		return null;
	var cleanInput = (m[1].length>0 ? m[1] : "0") + "." + m[3];
	var num = parseFloat(cleanInput);
	return (isNaN(num)?null:num);            
}
//;:;:;:;:;:;:;:;:;:;:;:;:;:; (*_*) ;:;:;:;:;:;:;:;:;:;:;:;:;:;
function CleanDate(val)
{
        var yearFirstExp = new RegExp("^\\s*((\\d{4})|(\\d{2}))([/])(\\d{1,2})\\4(\\d{1,2})\\s*$");
        var m = val.match(yearFirstExp);
        var day, month, year;
        if (m != null ) {
            day = m[6];
            month = m[5];
            year = (m[2].length == 4) ? m[2] : "13"+m[3];
        }
        else return null;
        if((parseInt(month)<1)||(parseInt(month)>12))
			return null;
        if(parseInt(month)<=6)
        {
			if((parseInt(day)<1)||(parseInt(day)>31))
				return null;
		}
        else if((parseInt(month)>=7)&&(parseInt(month)<=11))
			{
				if((parseInt(day)<1)||(parseInt(day)>30))
					return null;
			}
			else if(parseInt(month)==12)
					if((parseInt(day)<1)||(parseInt(day)>29))
						return null;
        return (year+"/"+((month.length==1)?"0":"")+month+"/"+((day.length==1)?"0":"")+day);
}
//;:;:;:;:;:;:;:;:;:;:;:;:;:; (*_*) ;:;:;:;:;:;:;:;:;:;:;:;:;:;
function CleanHour(val)
{
        var HourFirstExp = new RegExp("^\\s*(\\d{1,2})([:])(\\d{1,2})\\s*$");
        var m = val.match(HourFirstExp);
        var hour, minute;
        if (m != null ) {
            minute = m[3];
            hour = m[1];
        }
        else return null;
        if((parseInt(minute)<0)||(parseInt(minute)>59))
			return null;
        if((parseInt(hour)<0)||(parseInt(hour)>24))
			return null;
        return (hour+":"+((minute.length==1)?"0":"")+minute);
}
//;:;:;:;:;:;:;:;:;:;:;:;:;:; (*_*) ;:;:;:;:;:;:;:;:;:;:;:;:;:;
function CleanYear(val)
{
        var YearFirstExp = new RegExp("^\\s*((\\d{4})|(\\d{2}))\\s*$");
        var m = val.match(YearFirstExp);
        var year;
        if (m != null )
            year = (m[1].length == 4) ? m[1] : ("13"+m[1]);
        else return null;
        if(parseInt(year)<0)
			return null;
        return year;
}
//;:;:;:;:;:;:;:;:;:;:;:;:;:; (*_*) ;:;:;:;:;:;:;:;:;:;:;:;:;:;
function IsEmailValid(val) {
    var rx = new RegExp("^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z.]{2,9})$");
    
    //var rx = new RegExp("\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,3}");
//    var rx = new RegExp("\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b");
    //var rx = new RegExp("^\\s*([a-z]|[A-Z])\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*\\s*$");
    var matches = val.match(rx);
    return (matches != null);
}
//;:;:;:;:;:;:;:;:;:;:;:;:;:; (*_*) ;:;:;:;:;:;:;:;:;:;:;:;:;:;
function IsURLValid(val) {
    var rx = new RegExp("^\\s*([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?\\s*$");
    var matches = val.replace("https://","").replace("http://","").match(rx);
    return (matches != null);
}
//;:;:;:;:;:;:;:;:;:;:;:;:;:; (*_*) ;:;:;:;:;:;:;:;:;:;:;:;:;:;
function IsUserNameValid(val) {
    var rx = /^\s*([-_]|[a-z]|[A-Z]|\s)+\s*$/;
    var matches = val.match(rx);
    return (matches != null);
}
//;:;:;:;:;:;:;:;:;:;:;:;:;:; (*_*) ;:;:;:;:;:;:;:;:;:;:;:;:;:;
function IsLetterOnly(val) {
    var rx = /^\s*([\u0600-\u0800]|[a-z]|[A-Z]|\s)+\s*$/;
    var matches = val.match(rx);
    return (matches != null);
}
//;:;:;:;:;:;:;:;:;:;:;:;:;:; (*_*) ;:;:;:;:;:;:;:;:;:;:;:;:;:;
function IsInRange(val,lowerBound,upperBound,isFloat)
{
	var iVal = (isFloat)?parseFloat(val):parseInt(val);
	if(iVal == null)
		return null;
	return ((iVal <= upperBound)&&(iVal >= lowerBound));
}
//;:;:;:;:;:;:;:;:;:;:;:;:;:; (*_*) ;:;:;:;:;:;:;:;:;:;:;:;:;:;
function CheckPressedIntegerKey()
{
	var str = "0123456789";
	if(str.indexOf(String.fromCharCode(window.event.keyCode)) < 0)
		window.event.returnValue = false;
}
//;:;:;:;:;:;:;:;:;:;:;:;:;:; (*_*) ;:;:;:;:;:;:;:;:;:;:;:;:;:;
function CheckPressedFloatKey()
{
	var str = "0123456789./";
	if(str.indexOf(String.fromCharCode(window.event.keyCode)) < 0)
		window.event.returnValue = false;
}
//;:;:;:;:;:;:;:;:;:;:;:;:;:; (*_*) ;:;:;:;:;:;:;:;:;:;:;:;:;:;
function IsAnyCheckBoxChecked(frm)
{
	var isChecked = false;
	for(var i=0; i<frm.elements["chkSel"].length; i++)
		isChecked = isChecked | frm.elements["chkSel"][i].checked;
	return isChecked;
}
//;:;:;:;:;:;:;:;:;:;:;:;:;:; (*_*) ;:;:;:;:;:;:;:;:;:;:;:;:;:;
