﻿function escapeXML(xmlString) {
    escapeXML(xmlString, false);
}

function escapeXML(xmlString,NotConvertAmp) {
	if(xmlString != null){
	    var regularExp = /&/g
	    if (NotConvertAmp == undefined || NotConvertAmp ==  false) // در چندین بار تبدیل و برگشت به حالت اولیه خطا ندهد
		    xmlString = xmlString.replace(regularExp, "&amp;");
		regularExp = /</g
		xmlString = xmlString.replace(regularExp, "&lt;");
		regularExp = />/g
		xmlString = xmlString.replace(regularExp, "&gt;");
		regularExp = /'/g
		xmlString = xmlString.replace(regularExp, "&apos;");
		regularExp = /"/g
		xmlString = xmlString.replace(regularExp, "&quot;");
	}
	return xmlString;
}

function escapeStr(MyStr) {
    if (MyStr != null) {
        MyStr = MyStr.replace(/&lt;/g, '<');
        MyStr = MyStr.replace(/&gt;/g, '>');
        MyStr = MyStr.replace(/&apos;/g, "'");
        MyStr = MyStr.replace(/&quot;/g, '"');
	}
	return MyStr;
}

function GetXmlDocumentObject() {
	var bDocument = false;
	if (window.ActiveXObject) {
		var aszDocumentProgIDs = ["MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.4.0", "MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument", "MSXML.DOMDocument","Microsoft.XmlDom" ];
		for(var i = 0; !bDocument && i < aszDocumentProgIDs.length; i++) {
			try {
				objXmlDoc = new ActiveXObject(aszDocumentProgIDs[i]);
				bDocument = true;
			} 
			catch(objException) {
			}
		}
	}
	if (!bDocument) {
		throw "MSXML not found on your computer.";
		return null;
	}
	return objXmlDoc;
}

function GetUrlPrefix(sslEnabled) {   
    if (document.domain.toUpperCase() != "LOCALHOST") {//for domain
        if (sslEnabled == true)   
            return "https://" + document.domain + "/"; 
        else
            return "http://" + document.domain + "/"; 
	}
	else {
		var applicationPath =  document.URLUnencoded.split('/')[3];
		return "http://"+document.domain+"/"+applicationPath+"/";//for local
	}
}

function Trim(e) {
	var CounterW
	CounterW=0
	for(i=0;i<=e.length;i++)
		if (e.substr(i,1)==" ")
				CounterW+=1
		else 
				i=e.length+1
	e=e.substr(CounterW,e.length-CounterW)
	
	CounterW=0
	for(i=e.length;i>=0;i--)
		if (e.substr(i-1,1)==" ")
				CounterW+=1
		else 
				i=-2
	e=e.substr(0,e.length-CounterW)
	return e;
}

function IsFloat(valueString) {
	if(valueString != null) {
		var regExpr = /^(\+|-)?([0-9]+\.?[0-9]*)$/;
		var result = valueString.match(regExpr);
		if(result != null)
		{
		    return true;
		}
		else
		{
		    return false;
		}
	}
	else {
		return null;
	}
}

//function IsInRangeFloat(valueString) {
//    if(valueString != null) {
//    
//        //Remove Extra 0 from begining of valueString
//        while((valueString.indexOf("0") ==0)&&(valueString.indexOf(".") !=1) && valueString.length>1)
//          valueString=valueString.substring(1,valueString.length)        

//          
//        // if valuestring in range equal it's Number()
//        if(Number(valueString).toString() == valueString) // محدوده عدد اعشاری را چک می کند
//        {
//	        return true;
//        }
//        else
//        {
//            return false;
//        }
//    }
//	else {
//		return null;
//	}
//}

function IsScientificFloat(valueString) {
	if(valueString != null) {
		var regExpr = /^(\+|-)?([0-9]+\.?[0-9]*)([eE](\+|-)?[0-9]+)?$/;
		var result = valueString.match(regExpr);
		return (result != null);
	}
	else {
		return null;
	}
}

function IsInteger(valueString) {
	if(valueString != null) {
		var regExpr = /^(\+|-)?([0-9]+)([eE](\+|-)?[0-9]+)?$/;
		var result = valueString.match(regExpr);
		if(result != null)
		{
		    return true;
		}
		else
		{
		    return false;
		}
	}
	else {
		return null;
	}
}

function IsNumeric(MyStr) {
    for (var i = 0; i < MyStr.length; i++)
        if (!MyStr.charAt(i).match(/^-{0,1}\d*\.{0,1}\d+$/))
        return false;
    return true;
}

function IsClock(valueString) {
    if (valueString != null) {
        var regExpr = /^[0-2][0-9]:[0-5][0-9]:[0-5][0-9]?$/;
        if (eval(valueString.split(':')[0]) > 24)
            return false;
            
        var result = valueString.match(regExpr);
        if (result != null) {
            return true;
        }
        else {
            return false;
        }
        
    }
    else {
        return null;
    }
}

function IsInRangeInteger(valueString) {
   if(valueString != null) {
        // if valuestring in range equal it's Number()
        if(Number(valueString) < 2147483647 && Number(valueString) > -2147483648) // محدوده عدد صحیح را چک می کند
        {
	        return true;
        }
        else
        {
            return false;
        }
    }
	else {
		return null;
	}
}

function IsValidDayMonthYear(valueString) {
	if(valueString != null) {
		var reg = new RegExp();
		var regExpr = /^\d{1,2}[-\/\.]\d{1,2}[-\/\.]\d{1,4}$/;
		if(valueString.match(regExpr) != null) {
			var separatorChar = null;
			if(valueString.split('-').length == 3)
				separatorChar = '-';
			else if(valueString.split('/').length == 3)
				separatorChar = '/';
			else if(valueString.split('.').length == 3)
				separatorChar = '.';
			else
				return false;
			//Mirzaie -- I add *1 to these three formula otherwise there is an erro 
			var day =  parseInt(valueString.split(separatorChar)[0],10);
			var month = parseInt(valueString.split(separatorChar)[1],10);
			var year = parseInt(valueString.split(separatorChar)[2],10);
			//sheikhi
			if(String(year).length < 4 )
			    return false;
			//---------			    
			if(year == 0 || !((month >= 1 && month <= 6 && day >=1 && day <= 31) || (month >= 7 && month <= 12 && day >=1 && day <= 30)))
				return false;
			else
				return true;
		}
		else {
			return false;
		}
	}
	else {
		return null;
	}
}

function IsValidYearMonthDay(valueString) {
	if(valueString != null) {
		var reg = new RegExp();
		var regExpr = /^\d{1,4}[-\/\.]\d{1,2}[-\/\.]\d{1,2}$/;
		if(valueString.match(regExpr) != null) {
			var separatorChar = null;
			if(valueString.split('-').length == 3)
				separatorChar = '-';
			else if(valueString.split('/').length == 3)
				separatorChar = '/';
			else if(valueString.split('.').length == 3)
				separatorChar = '.';
			else
				return false;
			var year = parseInt(valueString.split(separatorChar)[0]);
			var month = parseInt(valueString.split(separatorChar)[1]);
			var day =  parseInt(valueString.split(separatorChar)[2]);
			if(year == 0 || !((month >= 1 && month <= 6 && day >=1 && day <= 31) || (month >= 7 && month <= 12 && day >=1 && day <= 30)))
				return false;
			else
				return true;
		}
		else {
			return false;
		}
	}
	else {
		return null;
	}
}

function ReplaceChar(str) {
    OldChar= String.fromCharCode(1740);//OldChar="ی";InCorrect
    NewChar= String.fromCharCode(1610);//NewChar="ي";Correct
	temp = str;
	while (temp.indexOf(OldChar) > -1) {
		pos  = temp.indexOf(OldChar);
		temp = temp.substring(0,pos) + NewChar + temp.substring((pos + OldChar.length), temp.length );
	}
	OldChar= String.fromCharCode(1705);//OldChar="ک";Incorrect
    NewChar= String.fromCharCode(1603);//NewChar="ك";Correct
	temp = temp;
	while (temp.indexOf(OldChar) > -1) {
		pos = temp.indexOf(OldChar);
		temp = temp.substring(0,pos) + NewChar + temp.substring((pos + OldChar.length), temp.length );
    }
    OldChar = String.fromCharCode(160); //OldChar=" ";Incorrect
    NewChar = String.fromCharCode(32); //NewChar=" ";Correct
    temp = temp;
    while (temp.indexOf(OldChar) > -1) {
        pos = temp.indexOf(OldChar);
        temp = temp.substring(0, pos) + NewChar + temp.substring((pos + OldChar.length), temp.length);
    }
    	
	return temp;
}

//// Check SolarDate Validation(RTL or LTR)         -- A.Mehdizadeh
function IsValidSolarDate(valueString) {
    if(valueString != null) {
        var regRTL = /(?:13\d\d)\/(0[0-9]|1[0-2])\/(0[1-9]|[12][0-9]|3[01])/;
        var regLTR = /(0[1-9]|[12][0-9]|3[01])\/(0[0-9]|1[0-2])\/(?:13\d\d)/;
        if (valueString.match(regRTL) || valueString.match(regLTR)) {
            return true;
        }
        else {
            return false;
        }
    }
    else {
        return null;
    }
}

function ReverseDate(valueString) {
    if(valueString != null) {
        var dArgs = new Array();
        dArgs = valueString.split('/');
        return (dArgs[2] + dArgs[1] + dArgs[0]);
        
    }
    else {
        return null;
    }
}

//########################## MTH ############################
function GetApproveText(Approv_Id)
{
	var operatorText = "";
	switch (Approv_Id)
	{
		case "0":
			operatorText = "اظهار نظر نشده";
			break;
		case "1":
			operatorText = "تائید شده";
			break;
		case "2":
			operatorText = "تائید کننده ندارد";
			break;
		case "3":
			operatorText = "رد شده";
			break;
	}
	return operatorText;
}

//MrMemarian 1388/06/14
//********************************************
function ConvertDateShamsiToMiladi(sYear, sMonth, sDay) {

    if (sDay == 0 && sMonth == 0 && sYear == 0) {
        dDate = new Date();

        return dDate;
    }

    //'******************* Leap year
    if (sYear == 1378) {
        if (sMonth == 12 && sDay == 10)
        { sYear = 2000; sMonth = 2; sDay = 29; return; }

        if (sMonth == 12 && sDay > 10)
            sDay--;
    }
    else
        if (sYear == 1379) {
        sDay--;

        if (sDay == 0) {
            sMonth--;
            if (sMonth > 0 && sMonth < 7) sDay = 31;
            if (sMonth > 6) sDay = 30;
            if (sMonth == 0) {
                sDay = 29;
                sMonth = 12;
                sYear--;
            }
        }
    }
    //'*******************
    var kabise = sYear % 4;
    if (kabise != 3) {
        var x1 = 20;
        var x2 = 20;
        var x3 = 21;
        var x4 = 21;
        var x7 = 22;
        var x8 = 22;
        var x9 = 21;
        var x10 = 21;
        var x11 = 20;
        var x12 = 19;
    }
    else {
        var x1 = 19;
        var x2 = 19;
        var x3 = 20;
        var x4 = 20;
        var x7 = 21;
        var x8 = 21;
        var x9 = 20;
        var x10 = 20;
        var x11 = 19;
        var x12 = 18;
    }

    if (sMonth < 10 || (sMonth == 10 && sDay < 11))
        sYear += 621;
    else
        sYear += 622;
    switch (sMonth) {
        case 1: (sDay < 12) ? (sMonth = 3, sDay += x1) : (sMonth = 4, sDay -= 11); break;
        case 2: (sDay < 11) ? (sMonth = 4, sDay += x2) : (sMonth = 5, sDay -= 10); break;
        case 3: (sDay < 11) ? (sMonth = 5, sDay += x3) : (sMonth = 6, sDay -= 10); break;
        case 4: (sDay < 10) ? (sMonth = 6, sDay += x4) : (sMonth = 7, sDay -= 9); break;
        case 5:
        case 6:
        case 8: (sDay < 10) ? (sMonth += 2, sDay += x8) : (sMonth += 3, sDay -= 9); break;
        case 7: (sDay < 9) ? (sMonth = 9, sDay += x7) : (sMonth = 10, sDay -= 8); break;
        case 9: (sDay < 10) ? (sMonth = 11, sDay += x9) : (sMonth = 12, sDay -= 9); break;
        case 10: (sDay < 11) ? (sMonth = 12, sDay += x10) : (sMonth = 1, sDay -= 10); break;
        case 11: (sDay < 12) ? (sMonth = 1, sDay += x11) : (sMonth = 2, sDay -= 11); break;
        case 12: (sDay < 10) ? (sMonth = 2, sDay += x12) : (sMonth = 3, sDay -= 9); break;
    }

    var retDate = sYear + "/" + (sMonth) + "/" + sDay;

    return retDate;
}

function ConvertDateMiladiToShamsi(gYear, gMonth, gDay) {

    gYear = (gYear == 0) ? 2000 : gYear;
    (gYear < 1000) ? (gYear += 2000) : true;
    gYear -= ((gMonth < 3) || ((gMonth == 3) && (gDay < 21))) ? 622 : 621;

    var mDay3, mDay1, mDay2, mDay4, mDay5, mDay6, mDay7, mDay8;
    var tday3, tday1, tday2, tday4, tday5, tday6, tday7, tday8;
    var day1, day2, day3, day4, day5, day6, day7, day8;
    var kab = gYear % 4;
    if (kab == 0 || kab == 1) {
        day1 = 21; mDay1 = 20; tday1 = 10;
        day2 = 20; mDay2 = 19; tday2 = 11;
        day3 = 21; mDay3 = 20; tday3 = 9;
        day4 = 21; mDay4 = 20; tday4 = 11;
        day5 = 22; mDay5 = 21; tday5 = 10;
        day6 = 23; mDay6 = 22; tday6 = 9;
        day7 = 23; mDay7 = 22; tday7 = 8;
        day8 = 22; mDay8 = 21; tday8 = 9;
    }
    else if (kab == 3) {
        day1 = 20; mDay1 = 19; tday1 = 11;
        day2 = 19; mDay2 = 18; tday2 = 12;
        day3 = 21; mDay3 = 19; tday3 = 10;
        day4 = 20; mDay4 = 19; tday4 = 12;
        day5 = 21; mDay5 = 20; tday5 = 11;
        day6 = 22; mDay6 = 21; tday6 = 10;
        day7 = 22; mDay7 = 21; tday7 = 9;
        day8 = 21; mDay8 = 20; tday8 = 10;
    }
    else if (kab == 2) {
        day1 = 21; mDay1 = 20; tday1 = 10;
        day2 = 20; mDay2 = 19; tday2 = 11;
        day3 = 20; mDay3 = 20; tday3 = 10;
        day4 = 21; mDay4 = 20; tday4 = 11;
        day5 = 22; mDay5 = 21; tday5 = 10;
        day6 = 23; mDay6 = 22; tday6 = 9;
        day7 = 23; mDay7 = 22; tday7 = 8;
        day8 = 22; mDay8 = 21; tday8 = 9;
    }
    if (kab == 2 && gDay == 20 && gMonth == 3) {
        gYear += 1;
        mDay3 = 19;
    }
    switch (gMonth) {
        case 1: (gDay < day1) ? (gMonth = 10, gDay += tday1) : (gMonth = 11, gDay -= mDay1); break;
        case 2: (gDay < day2) ? (gMonth = 11, gDay += tday2) : (gMonth = 12, gDay -= mDay2); break;
        case 3: (gDay < day3) ? (gMonth = 12, gDay += tday3) : (gMonth = 1, gDay -= mDay3); break;
        case 4: (gDay < day4) ? (gMonth = 1, gDay += tday4) : (gMonth = 2, gDay -= mDay4); break;
        case 5:
        case 6: (gDay < day5) ? (gMonth -= 3, gDay += tday5) : (gMonth -= 2, gDay -= mDay5); break;
        case 7:
        case 8:
        case 9: (gDay < day6) ? (gMonth -= 3, gDay += tday6) : (gMonth -= 2, gDay -= mDay6); break;
        case 10: (gDay < day7) ? (gMonth = 7, gDay += tday7) : (gMonth = 8, gDay -= mDay7); break;
        case 11:
        case 12: (gDay < day8) ? (gMonth -= 3, gDay += tday8) : (gMonth -= 2, gDay -= mDay8); break;
        default: break;
    }

    this.gYear = gYear;
    this.gMonth = gMonth - 1;
    this.gDay = gDay;

    return gYear + "/" + gMonth + "/" + gDay;
}

function PageHasScroll() {
    var offsetHeight, scrollHeight;
    offsetHeight = document.documentElement.offsetHeight;
    scrollHeight = document.documentElement.scrollHeight;
    if (scrollHeight > offsetHeight)
        return true;
    else
        return false;
}

function GetXY_Control(ControlObj) {
    var point = new Object();
    point.x = 0;
    point.y = 0;
    var parentElement = ControlObj;
    while (parentElement != null && parentElement.tagName != "HTML") {
        point.x += Number(parentElement.offsetLeft);
        point.y += Number(parentElement.offsetTop);
        parentElement = parentElement.offsetParent;
    }
    return point;
}

function checkMelliCode(StringValue) {
    var meli_code;
    meli_code = StringValue;
    if (meli_code.length == 10) {

        if (meli_code == '1111111111' ||
        meli_code == '0000000000' ||
        meli_code == '2222222222' ||
        meli_code == '3333333333' ||
        meli_code == '4444444444' ||
        meli_code == '5555555555' ||
        meli_code == '6666666666' ||
        meli_code == '7777777777' ||
        meli_code == '8888888888' ||
        meli_code == '9999999999') {
            return false;
        }

        c = parseInt(meli_code.charAt(9));
        n = parseInt(meli_code.charAt(0)) * 10 +
        parseInt(meli_code.charAt(1)) * 9 +
        parseInt(meli_code.charAt(2)) * 8 +
        parseInt(meli_code.charAt(3)) * 7 +
        parseInt(meli_code.charAt(4)) * 6 +
        parseInt(meli_code.charAt(5)) * 5 +
        parseInt(meli_code.charAt(6)) * 4 +
        parseInt(meli_code.charAt(7)) * 3 +
        parseInt(meli_code.charAt(8)) * 2;
        r = n - parseInt(n / 11) * 11;

        if ((r == 0 && r == c) || (r == 1 && c == 1) || (r > 1 && c == 11 - r)) { return true; } else { return false; }
    }
    else { return false; }
}

//*******************************************************

function IsNumeric4KeyPress() {
    if (event.keyCode < 45 || event.keyCode > 57 || event.keyCode == 47) //باید عدد یا نقطه ممیز باشد
        event.returnValue = false;
    else if (event.srcElement.value.indexOf('.') > -1 && event.keyCode == 46)
        event.returnValue = false; // نقطه ممیز فقط یکبار قابل استفاده میباشد
    else if (event.keyCode == 45) { // عدد منفی
        if (event.srcElement.value.indexOf('-') > -1)
            event.returnValue = false; //فقط یک کاراکتر منفی میتواند وجود داشته باشد
        else {
            event.srcElement.value = "-" + event.srcElement.value; // بازدن کلید منفی ، کاراکتر منفی به اول متن اضافه میشود
            event.returnValue = false;
        }
    }
}


function CheckTimeWithoutSecs(value) {   
    if (value == "" || value == null)
        return true;
    var splitTime = value.split(':');
    if (splitTime.length != 2)
        return false;
    else if (splitTime[0].length != 2 || splitTime[1].length != 2)
        return false;
    else if (Number(splitTime[0]) < 0 || Number(splitTime[0]) > 23)
        return false;
    else if (Number(splitTime[1]) < 0 || Number(splitTime[1]) > 59)
        return false;
    else if (splitTime.length == 3) {
        if (splitTime[2].length != 2)
            return false;
        if (Number(splitTime[2]) < 0 || Number(splitTime[2]) > 59)
            return false;
    }
    else if (splitTime.length > 2)
        return false;
    else
        return true;

    return true;
}


function CheckTime(value) {    
    if (value == "" || value == null)
        return true;
    var splitTime = value.split(':');
    if (splitTime.length < 3)
        return false;
    else if (splitTime[0].length != 2 || splitTime[1].length != 2)
        return false;
    else if (Number(splitTime[0]) < 0 || Number(splitTime[0]) > 23)
        return false;
    else if (Number(splitTime[1]) < 0 || Number(splitTime[1]) > 59)
        return false;
    else if (splitTime.length == 3) {
            if (splitTime[2].length != 2)
                return false;
            if (Number(splitTime[2]) < 0 || Number(splitTime[2]) > 59)
                return false;
    }
    else if (splitTime.length > 3)
        return false;
    else
        return true;

    return true;
}


//*************  Check Time Format  ******************
function CurrectTimeFormat(time) {
    if (time.length > 8 || time.length < 3) return '';
    var H, M, S;
    var IndexSeperator1 = time.indexOf(':');
    var IndexSeperator2 = time.indexOf(':', IndexSeperator1 + 1);
    var IndexSeperator3 = IndexSeperator2 == -1 ? -1 : time.indexOf(':', IndexSeperator2 + 1);

    if (IndexSeperator1 == -1 || IndexSeperator3 != -1) return '';

    //HOUR
    if (IndexSeperator1 != 1 && IndexSeperator1 != 2) return '';
    H = time.substring(0, IndexSeperator1);
    if (!IsNumeric(H)) return '';
    H = Number(H);
    if (H < 0 || H > 23) return '';
    if (H < 10) H = '0' + H;
    //MINUTE
    var endpoint = IndexSeperator2 == -1 ? time.length : IndexSeperator2;
    M = time.substring(IndexSeperator1 + 1, endpoint);
    if (!IsNumeric(M)) return '';
    M = Number(M);
    if (M < 0 || M > 59) return '';
    if (M < 10) M = '0' + M;

    if (IndexSeperator2 == -1)//بدون ثانیه
        S = '00'
    else {//ثانیه هم دارد
        S = time.substring(IndexSeperator2 + 1, time.length);
        if (!IsNumeric(S)) return '';
        S = Number(S);
        if (S < 0 || S > 59) return '';
        if (S < 10) S = '0' + S;
    }

    return (H + ':' + M + ':' + S);
}

function getRequestParameterValue(paramName) {
    var qryString = location.search;
    begin = qryString.indexOf(paramName + "=")
    if (begin == -1) return null
    begin += paramName.length + 1;
    end = qryString.indexOf("&", begin)
    if (end == -1) end = qryString.length;
    return qryString.substring(begin, end)
};



