﻿
document.onkeydown = function(evt) {
    evt = evt || window.event;
    var keyCode = evt.keyCode ? evt.keyCode : evt.charCode ? evt.charCode : evt.which;
    if (keyCode == '80')
        if (evt.ctrlKey) {
        evt.keyCode = 0;
        return false;
    }
}

/////////////////////////////////////////////////////////////////////////////////////////////////////
//document.write("<LINK href=\"/FarzinSoft/Theme/start/jquery-ui-1.8.8.custom.css\" type=\"text/css\" rel=\"STYLESHEET\">");
/////////////////////////////////////////////////////////////////////////////////////////////////////
switch(window.screen.width )
{
	case 1024 :
		try
		{
			document.write("<LINK href=\"/FarzinSoft/Common/CStyles/CPageStyle_1024.css\" type=\"text/css\" rel=\"STYLESHEET\">");
		}
		catch(e){}		
		break;
	default :
		document.write("<LINK href=\"/FarzinSoft/Common/CStyles/CPageStyle_1024.css\" type=\"text/css\" rel=\"STYLESHEET\">");
		break;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////					
if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function(obj, fromIndex) {
        if (fromIndex == null) {
            fromIndex = 0;
        } else if (fromIndex < 0) {
            fromIndex = Math.max(0, this.length + fromIndex);
        }
        for (var i = fromIndex, j = this.length; i < j; i++) {
            if (this[i] === obj)
                return i;
        }
        return -1;
    };
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function PersianNumbers2EnglishNumbers(strString) {
    var strTemp = strString;
    strString = "";
    while (strTemp.length != 0) {
        var cChr = strTemp.substring(0, 1);
        strString += ((cChr.charCodeAt(0) < 1632 || cChr.charCodeAt(0) > 1641) ? cChr : String.fromCharCode(cChr.charCodeAt(0) - 1584))
        strTemp = strTemp.substring(1, strTemp.length);
    }
    return strString;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
var copyIndicator = "~!@#$%^&*()_+}{0987654321`";
function OnCopyStart() {
    window.clipboardData.setData("Text", copyIndicator);
    setTimeout(OnCopyFinish, 100);
    return true;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
function OnCopyFinish() {
    if (window.clipboardData.getData("Text") == copyIndicator) {
        setTimeout(OnCopyFinish, 100);
        return;
    }
    try {
        var data = window.clipboardData.getData("Text");
        window.clipboardData.setData("Text", PersianNumbers2EnglishNumbers(data));
    } catch (e) { };
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
window.attachEvent("onload", TabContentLoadingStatusNoneDisplay);
var Utils = null;
var escapeValue = "**__**__**";
function TabContentLoadingStatusNoneDisplay() {
    window.document.body.attachEvent("oncopy", OnCopyStart);
    window.document.body.attachEvent("oncut", OnCopyStart);

    var reAuthenticationRequired = document.all("ReAuthenticationRequired");
    var result = false;
    if (reAuthenticationRequired != null && reAuthenticationRequired.value.toString().toLowerCase() == "true") {
        try {
            var url = "/FarzinSoft/eOrgan/Login/chkUserValidation.aspx"
            var features = "dialogHeight:220px; dialogWidth:400px; dialogTop:center; resizable:no; help:no; status:no; scroll:no;";
            var arrayParams = MakeDialogParameters("<B><Font style='color:indianred;' size=2>دسترسي به اين بخش مستلزم هويت‌سنجي مجدد است </Font></B>", url, window);
            result = window.showModalDialog("/FarzinSoft/Common/ModalDialog.aspx", arrayParams, features);
            if (result == null || result == false) {
                window.close();
                getUtilities();
                Utils.Logout();
                return;
            }
        } catch (e) {
            var message = "به دليل اينكه تنظيمات مربوط به Popup Blocker مرورگر شما به درستي اعمال نشده است، امكان دسترسي به اين بخش از نرم‌افزار وجود ندارد";
            message = "<DIV align=center style='width:250px;background-color:white;border-width:thin;border-color:black;border-style:solid' >" + message + "</DIV>";
            message = "<B><Font class='FarsiLabel12' Style='color:darkred' size=2>" + message + "</Font></B>";
            Loading(true, message);
            IsPagedBlocked = true;
            return;
        }
    }
    //display loading status
    if (window.parent.TabContentLoadingStatus != null && window.parent.TabContentLoadingStatus != "undefined")
        window.parent.TabContentLoadingStatus.style.display = "none";
    DataEntryChecking();
    return;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////					
//Disable right mouse click Script
var message="Function Disabled!";
///////////////////////////////////
function clickIE4() {
	if (event.button==2)
		return false;
}
function clickNS4(e) {
	if (document.layers||document.getElementById&&!document.all)
	{
		if (e.which==2||e.which==3)
			return false;
	}
}
if (document.layers)
{
	document.captureEvents(Event.MOUSEDOWN);
	document.onmousedown=clickNS4;
}
else if (document.all&&!document.getElementById)
	document.onmousedown=clickIE4;
document.oncontextmenu = new Function("return false;");
//////////////////////////////////////////////////////////////////////////////////////////////
var iIntervalId ;
if ( ! iIntervalId )
	iIntervalId = window.setInterval( AttachEventToBody, 100 ) ;
//////////////////////////////////////////////////////////////////////////////////////////////
function AttachEventToBody()
{
	if(document!=null && document.body != null)
	{
		document.body.attachEvent("onkeydown", OpenNewCardTable);
		window.clearInterval( iIntervalId ) ;
	}
}
//////////////////////////////////////////////////////////////////////////////////////////////
function OpenNewCardTable()
{
	if(event.keyCode == 123)
	{
		var iWidth  = parseInt(window.screen.width) - 30 ;
		var iHeight = parseInt(window.screen.height) - 120 ;

		var strFeatures = "Height="+iHeight+", Width="+iWidth+", left=0, top=0, resizable=no, help=no, status=no, scroll=no";
		var strURL = "/FarzinSoft/eOrgan/Home/HomeFrm.aspx?SelSoft=746B271D02168914";
		var hwnd = window.open(strURL, "NEW", strFeatures, true);
		hwnd.focus();
	}
}
//////////////////////////////////////////////////////////////////////////////////////////////
function ShowMsg(Message, Type, Icon, Direction, arryProgress) {
    try {
        var arryParams = new Array();
        arryParams[0] = (Type != null) ? Type : "OK";
        arryParams[1] = Message;
        arryParams[2] = (Icon != null) ? Icon : "warning";
        arryParams[3] = (Direction != null) ? Direction : "rtl";
        arryParams[4] = arryProgress;

        var dlgFetures = "dialogHeight:150px; dialogWidth:400px; dialogTop:center; resizable:yes; help:no; status:no; scroll:no;";
        return window.showModalDialog("/FarzinSoft/Common/GeneralMessages/GeneralMsg.htm", arryParams, dlgFetures);
    }
    catch (e) {
        var htmlLableElement = document.createElement("label");
        htmlLableElement.innerHTML = Message;
        var msg = "اشكال در نمايش صحيح پيام\r\nتنظيمات مربوط به popup blocker مرورگر شما صحيح نمي‌باشد\r\nلطفاً با مدير سيستم تماس بگيريد\r\n";
        msg += "پيام به شرح زير مي‌باشد\r\n" + htmlLableElement.innerText;
        alert(msg);
        return false;
    }
}
//////////////////////////////////////////////////////////////////////////////////////////////
function ConfirmMsg(Message, Type, Direction, AdvancedType)
{
	var arryParams = new Array();
	arryParams[0] = (Type != null) ? Type : "YesNo";
	arryParams[1] = Message;
	arryParams[2] = "question";
	arryParams[3] = (Direction != null) ? Direction : "rtl";
	arryParams[4] = null;
	arryParams[5] = (AdvancedType != null) ? AdvancedType : "Normal";
	var dlgFetures = "dialogHeight:150px; dialogWidth:400px; dialogTop:center; resizable:yes; help:no; status:no; scroll:no;";
	return window.showModalDialog("/FarzinSoft/Common/GeneralMessages/GeneralMsg.htm", arryParams, dlgFetures);
}
//////////////////////////////////////////////////////////////////////////////////////////////
function PromptMsg(Message, Type, Direction, Icon, Default)
{
	var arryParams = new Array();
	arryParams[0] = (Type != null) ? Type : "OKCANCEL";
	arryParams[1] = Message;
	arryParams[2] = Icon;
	arryParams[3] = (Direction != null) ? Direction : "rtl";
	arryParams[4] = Default;
	
	var dlgFetures = "dialogHeight:150px; dialogWidth:400px; dialogTop:center; resizable:yes; help:no; status:no; scroll:no;";	
	return window.showModalDialog("/FarzinSoft/Common/GeneralMessages/PromptMsg.htm", arryParams, dlgFetures);
}
//////////////////////////////////////////////////////////////////////////////////////////////
var strWhiteList = new Array("afrm.aspx", "ufrm.aspx", "entity/relatedfields", "advancedconfiguration/operators", "farzinreportgenerator/reportsmanagement/designtemplate/body.aspx");
var strBlackList = new Array("rptprocess.aspx");
//////////////////////////////////////////////////////////////////////////////////////////////
function DataEntryChecking() {
    var needAntiSqlInjection = true;
    var bISInBlackList = false;
    for (var iIndex = 0; iIndex < strBlackList.length; iIndex++) {
        if (window.location.toString().toLowerCase().indexOf("/" + strBlackList[iIndex]) > 0) {
            bISInBlackList = true;
            break;
        }
    }
    for (var iIndex = 0; !bISInBlackList && iIndex < strWhiteList.length; iIndex++) {
        if (window.location.toString().toLowerCase().indexOf("/" + strWhiteList[iIndex]) > 0)
            needAntiSqlInjection = false;
    }

    window.document.body.attachEvent("ondrag", function() { return false; });
    window.document.body.attachEvent("onkeydown", function() { HotKeyController(window.event); return true; });
    window.document.body.attachEvent("onkeypress", function() { CorrectPersianChars(window.event); return true; });
    //Attaching on CuteEditor
    var iframes = window.document.all.tags("IFRAME");
    for (var k = 0; k < iframes.length; k++) {
        if (iframes[k].className == null)
            continue;
        if (iframes[k].className.toLowerCase().indexOf("cuteeditor") < 0)
            continue;
        iframes[k].contentWindow.document.body.attachEvent("onkeypress", function() { var evnt = iframes[k].contentWindow.event; CorrectPersianChars(evnt) });
    }


    var j = 0;
    var oInputElements = window.document.all.tags("INPUT");
    for (j = 0; j < oInputElements.length; j++) {
        var oInput = oInputElements(j);
        if (oInput.type.toLowerCase() != "text") continue;
        if (oInput.style == null) continue;
        if (oInput.style.display != "") continue;
        if (oInput.skipValidation == "true") continue;
        if (needAntiSqlInjection) {
            oInput.attachEvent("onkeypress", onTextChange);
            oInput.attachEvent("onblur", onTextBlur);
        }
        oInput.attachEvent("onkeypress", CheckInputDataType_OnTextChange);
        oInput.attachEvent("onblur", CheckInputDataType_OnTextBlur);
    }

    var oTextAreaElements = window.document.all.tags("TEXTAREA");
    for (j = 0; j < oTextAreaElements.length; j++) {
        var oTextArea = oTextAreaElements(j);
        if (oTextArea.style == null) continue;
        if (oTextArea.style.display != "") continue;
        if (oTextArea.skipValidation == "true") continue;
        if (needAntiSqlInjection) {
            oTextArea.attachEvent("onkeypress", onTextChange);
            oTextArea.attachEvent("onblur", onTextBlur);
        }
        oTextArea.attachEvent("onkeypress", CheckInputDataType_OnTextChange);
        oTextArea.attachEvent("onblur", CheckInputDataType_OnTextBlur);
    }

    var formElements = window.document.all.tags("FORM");
    for (var k = 0; k < formElements.length; k++) {
        if (formElements[k].originSubmit != null)
            continue;
        formElements[k].originSubmit = formElements[k].submit;
        formElements[k].submit = function() { submitValidation(this) };
        formElements[k].attachEvent("onsubmit", formDataValidator);
    }

    var anchorElements = window.document.all.tags("A");
    for (var k = 0; k < anchorElements.length; k++) {
        anchorElements[k].attachEvent("onclick", anchorDataValidator);
    }
}
//////////////////////////////////////////////////////////////////////////////////////////////
function getUrlParams(url) {
    var param = null;
    var parameters = null;
    var questionMarkIndex = -1;
    var urlParams = new Array();
    var escapedParams = new Array();

    if (url == "")
        return null;

    questionMarkIndex = url.indexOf("?");
    if (questionMarkIndex <= 0) {
        return null;
    }
    parameters = url.substr(questionMarkIndex + 1).split("&");
    var urlParamsIndex = 0;
    for (var index = 0; index < parameters.length; index++) {
        var separatorIndex = -1;

        param = parameters[index];

        separatorIndex = param.indexOf("=");
        var paramName = "";
        var paramValue = "";
        if (separatorIndex >= 0) {
            paramName = param.substr(0, separatorIndex);
            paramValue = param.substr(separatorIndex + 1)
        }
        else {
            paramName = param;
            paramValue = "";
        }

        if (paramName == null || Trim(paramName) == "")
            continue;

        if (paramName.toLowerCase() == "__chn" || paramName.toLowerCase() == "__chv")
            continue;

        if (paramExists(urlParams, paramName) >= 0) {
            escapedParams[escapedParams.length] = paramName;
            continue;
        }

        if (paramValue.indexOf("%") >= 0) {
            //escapedParams[escapedParams.length] = paramName;
            //continue;
            try {
                var originParamValue = paramValue;
                paramValue = decodeURI(paramValue);
                if (originParamValue == paramValue && paramValue.indexOf("%") >= 0)
                    paramValue = unescape(paramValue);
                if (paramValue.indexOf("+") >= 0) {
                    escapedParams[escapedParams.length] = paramName;
                    continue;
                }
            } catch (e) {
                escapedParams[escapedParams.length] = paramName;
                continue;
            }
        }
        urlParams[urlParamsIndex++] = Array(paramName, paramValue);
    }
    var result = Array(urlParams, escapedParams);
    return result;
}
//////////////////////////////////////////////////////////////////////////////////////////////
function submitValidation(formElement) {
    if (typeof formElement.onsubmit == 'function')
        formElement.onsubmit();
    formDataValidator(formElement);
    formElement.originSubmit();
}
//////////////////////////////////////////////////////////////////////////////////////////////
function getUtilities(promptFlag) {
    var masterWindow = GetDialogMasterWindow(window);
    Utils = masterWindow.Utilities;
    if (Utils == null) {
        masterWindow = window.opener;
        if (masterWindow != null && masterWindow.GetDialogMasterWindow != null) {
            masterWindow = masterWindow.GetDialogMasterWindow(masterWindow);
            if (masterWindow != null) {
                Utils = masterWindow.Utilities;
                window.Utilities = Utils;
            }

        }
    }
    var showError = (promptFlag == null || (promptFlag != null && promptFlag == true));

    if (Utils == null) {
        if (showError)
            ShowMsg("خطا در محاسبه خلاصه داده‌ها - 1");
        return false;
    }
    if (Utils.CheckNewItemWnd)
        Utils.CheckNewItemWnd.RefreshKeys();
    if ((Utils.sessionKey == "" || Utils.sessionKey == null) && getData("Key") != null && getData("Key") != "")
        Utils.sessionKey = getData("Key");
    if (Utils.sessionKey == "" || Utils.sessionKey == null) {
        if (showError)
            ShowMsg("خطا در محاسبه خلاصه داده‌ها - 2");
        return false;
    }
    if ((Utils.initialVector == "" || Utils.initialVector == null) && getData("IV") != null && getData("IV") != "")
        Utils.initialVector = getData("IV");
    if (Utils.initialVector == "" || Utils.initialVector == null) {
        if (showError)
            ShowMsg("خطا در محاسبه خلاصه داده‌ها - 3");
        return false;
    }
    if ((Utils.encryptedSessionID == "" || Utils.encryptedSessionID == null) && getData("ESID") != null && getData("ESID") != "")
        Utils.encryptedSessionID = getData("ESID");
    if (Utils.encryptedSessionID == "" || Utils.encryptedSessionID == null) {
        if (showError)
            ShowMsg("خطا در محاسبه خلاصه داده‌ها - 4");
        return false;
    }
    return true;
}
//////////////////////////////////////////////////////////////////////////////////////////////
function calculateChecksum(params) {
    if (params == null)
        return null;
    var values = "";
    var printableValues = "";
    var names = "";
    var paramCount = 0;
    for (var i = 0; i < params.length; i++) {
        var paramName = params[i][0];
        var paramValue = params[i][1];
        if (paramValue.indexOf("\r\n") >= 0 || paramValue.indexOf("\r") >= 0 || paramValue.indexOf("\n") >= 0)
            continue;
        if (paramValue == escapeValue)
            continue;
        if (values.length >= 15000)
            continue;
        if (paramValue.length > 15000)
            continue;
        if (names.length > 700)
            continue;
        if (paramValue.length <= 40) {
            values += paramValue;
            printableValues += paramValue + ";";
        }
        else {
            values += Utils.HexSHA1(paramValue);
            printableValues += Utils.HexSHA1(paramValue) + ";";
            paramName = "*" + paramName;
        }
        if (names != "")
            names += ";";
        names += paramName;
        paramCount++;
    }

    //LogData("names:\r\n" + names);

    var realSessionId = Utils.encryptedSessionID;

    var hashedValues = Utils.Encrypt(Utils.HexSHA1(values));
    names = Utils.Encrypt(names);

    var checksumResult = new Array(names, hashedValues, realSessionId);
    return checksumResult;
}
//////////////////////////////////////////////////////////////////////////////////////////////
function paramExists(params, name, singleDimArrayFlag, excludeFlag, excludeIndex) {
    for (var i = 0; i < params.length; i++) {
        if (singleDimArrayFlag == true) {
            if (params[i] == name) return i;
        }
        else {
            if (excludeFlag == true) {
                if (i != excludeIndex && params[i][0] == name) {
                    return i;
                }
            }
            else {
                if (params[i][0] == name) return i;
            }
        }
    }
    return -1;
}
//////////////////////////////////////////////////////////////////////////////////////////////
function removeUrlParam(url, paramName) {
    var paramIndex = url.indexOf("&" + paramName);
    if (paramIndex < 0)
        paramIndex = url.indexOf(paramName);
        
    if (paramIndex >= 0) {
        for (var nextParamIndex = paramIndex + 1; nextParamIndex < url.length && url.charAt(nextParamIndex) != "&"; nextParamIndex++);
        var urlFirstPart = url.substr(0, paramIndex);
        var urlSecondPart = "";
        if (url.charAt(nextParamIndex) == "&")
            urlSecondPart = url.substr(nextParamIndex, url.length - nextParamIndex);
        return urlFirstPart + urlSecondPart;
    }
    return url;
}
//////////////////////////////////////////////////////////////////////////////////////////////
function getTargetPageName(url) {
    var dotAspxIndex = url.toLowerCase().indexOf(".aspx");
    var i = 0;
    for (i = dotAspxIndex; i >= 0 && url.charAt(i) != "/" && url.charAt(i) != "\\"; i--);
    var firstIndex = i;
    if (firstIndex != 0)
        firstIndex++;
    var lastIndex = dotAspxIndex + 4;
    return url.substr(firstIndex, lastIndex - firstIndex + 1);
}
//////////////////////////////////////////////////////////////////////////////////////////////
function getValidChildInputs(element) {
    if (element == null || element.childNodes.length == 0 || (element.disabled != null && element.disabled.toString().toLowerCase() == "true"))
        return null;
    var elements = new Array();
    var isValidInput = false;
    for (var index = 0; index < element.childNodes.length; index++) {
        var subElement = element.childNodes[index];
        var inputName = subElement.name;
        isValidInput = true;
        if (subElement.tagName == null)
            isValidInput = false;
        if (subElement.tagName != null && subElement.tagName.toLowerCase() != "input" && subElement.tagName.toLowerCase() != "select")
            isValidInput = false;
        if (subElement.tagName != null && subElement.tagName.toLowerCase() == "select" && subElement.multiple == true) {
            var selectedCount = 0;
            for (var i = 0; subElement.selectedIndex >= 0 && i < subElement.options.length && selectedCount < 2; i++) {
                if (subElement.options[i].selected == true)
                    selectedCount++;
            }
            if (selectedCount >= 2)
                return false;
        }
        if (subElement.tagName != null && subElement.tagName.toLowerCase() == "input" && subElement.type.toLowerCase() != "hidden" && subElement.type.toLowerCase() != "text")//&& subElement.type.toLowerCase() != "checkbox" && subElement.type.toLowerCase() != "radio")
            isValidInput = false;
        if (subElement.disabled == true)
            isValidInput = false;
        if (inputName != null) {
            if (Trim(inputName) == "")
                isValidInput = false;
            if (inputName.toLowerCase() == "__viewstate" || inputName.toLowerCase() == "__eventvalidation" || inputName.toLowerCase() == "__eventtarget" || inputName.toLowerCase() == "__eventargument")
                isValidInput = false;
            if (inputName.toLowerCase() == "__chn" || inputName.toLowerCase() == "__chv")
                isValidInput = false;
        }
        else
            isValidInput = false;
        if (isValidInput)
            elements[elements.length] = subElement;
        var subElements = getValidChildInputs(subElement);
        for (var subIndex = 0; subElements != null && subIndex < subElements.length; subIndex++)
            elements[elements.length] = subElements[subIndex];
    }
    return elements;
}
//////////////////////////////////////////////////////////////////////////////////////////////
function formDataValidator(formElement) {
    var requesterUrl = window.location.href.toLowerCase();
    if (requesterUrl.indexOf("changedbpassword.aspx") > 0)
        return;
    if (requesterUrl.indexOf("logout_fromwindowsauthentication.aspx") > 0)
        return;
    if (requesterUrl.indexOf("/sendservice/sendservicefrm.aspx") > 0)
        return;

    getUtilities();
    if (Utils.FarzinDataIntegrationChecking != null && Utils.FarzinDataIntegrationChecking.toString().toLowerCase() == "false")
        return;
        
    var httpParams = new Array();
    var httpGETParams = new Array();
    var httpGETEscapedParams = new Array();
    var paramIndex = 0;
    if (formElement == null)
        formElement = event.srcElement;
    if (formElement.tagName != "FORM")
        return;

    if (formElement.action == "")
        return;

    var startDate = new Date();
    
    //Removing old checksums
    formElement.action = removeUrlParam(formElement.action, "__stf");
    formElement.action = removeUrlParam(formElement.action, "__chn");
    formElement.action = removeUrlParam(formElement.action, "__chv");

    var inputs = "";

    //When submit method is post, some params may send to server via url (like get method). these params have to contribute in checksum calculation
    if (formElement.method.toLowerCase() == "post") {
        httpGETParams = null;
        var result = getUrlParams(formElement.action);
        if (result != null) {
            httpGETParams = result[0];
            httpGETEscapedParams = result[1];
        }
        if (httpGETParams != null) {
            for (var index = 0; index < httpGETParams.length; index++) {
                var paramName = httpGETParams[index][0];
                var paramValue = httpGETParams[index][1];

                if (paramExists(httpGETEscapedParams, paramName, true) >= 0)
                    continue;
                if (paramExists(httpParams, paramName) >= 0)
                    continue;
                if (paramName.toLowerCase() == "__chn" || paramName.toLowerCase() == "__chv")
                    continue;
                if (paramValue.indexOf("%") >= 0) {
                    //httpGETEscapedParams[httpGETEscapedParams.length] = paramName;
                    //continue;
                    try {
                        var originParamValue = paramValue;
                        paramValue = decodeURI(paramValue);
                        if (originParamValue == paramValue && paramValue.indexOf("%") >= 0)
                            paramValue = unescape(paramValue);
                        if (paramValue.indexOf("+") >= 0) {
                            httpGETEscapedParams[httpGETEscapedParams.length] = paramName;
                            continue;
                        }
                    } catch (e) {
                        httpGETEscapedParams[httpGETEscapedParams.length] = paramName;
                        continue;
                    }
                }
                httpParams[paramIndex++] = Array(paramName, paramValue);
            }
        }
    }

    //Other hidden, text and combobox input have to conribute in checksum calculation
    var formInputElements = getValidChildInputs(formElement);
    for (var index = 0; formInputElements != null && index < formInputElements.length; index++) {
        var element = formInputElements[index];
        var inputName = element.name;
        var inputValue = element.value;

        var currentIndex = paramExists(httpParams, inputName);
        if (currentIndex >= 0) {
            httpParams[currentIndex] = Array(inputName, escapeValue);
            continue;
        }
        if (paramExists(httpGETEscapedParams, inputName, true) >= 0)
            continue;
        if (inputValue.indexOf("%") >= 0) {
            //continue;
            try {
                var originInputValue = inputValue;
                inputValue = decodeURI(inputValue);
                if (originInputValue == inputValue && inputValue.indexOf("%") >= 0)
                    inputValue = unescape(inputValue);
                if (inputValue.indexOf("+") >= 0)
                    continue;
            }
            catch (e) { if (inputValue.indexOf("%u") >= 0) continue; }
        }
        httpParams[paramIndex++] = Array(inputName, inputValue);
    }

    //Calculating checksum
    //LogData(httpParams, true);
    checksumResult = calculateChecksum(httpParams);
    if (checksumResult == null || checksumResult == false)
        return;

    //Adding checksum to form by creating dynamic hidden inputs
    if (formElement.__chn != null)
        formElement.__chn.value = checksumResult[0];
    else {
        var inputTag = "<input type='hidden' name='__chn' value='" + checksumResult[0] + "' />";
        var inputElement = document.createElement(inputTag);
        formElement.appendChild(inputElement);
    }

    if (formElement.__chv != null)
        formElement.__chv.value = checksumResult[1];
    else {
        inputTag = "<input type='hidden' name='__chv' value='" + checksumResult[1] + "' />";
        inputElement = document.createElement(inputTag);
        formElement.appendChild(inputElement);
    }

    if (formElement.__esid != null)
        formElement.__esid.value = checksumResult[2];
    else {
        inputTag = "<input type='hidden' name='__esid' value='" + checksumResult[2] + "' />";
        inputElement = document.createElement(inputTag);
        formElement.appendChild(inputElement);
    }

    //Adding target page to cookie for more security and integrity
    var targetPageName = Utils.HexSHA1(getTargetPageName(formElement.action));
    document.cookie = "TargetPage=" + targetPageName + ";path=/";
    var endDate = new Date();
}
//////////////////////////////////////////////////////////////////////////////////////////////
function anchorDataValidator() {
    getUtilities();
    if (Utils.FarzinDataIntegrationChecking != null && Utils.FarzinDataIntegrationChecking.toString().toLowerCase() == "false")
        return;
        
    var anchorElement = event.srcElement;
    if (anchorElement == null)
        return;
    var url = anchorElement.href;
    if (url == null || Trim(url) == "" || url.indexOf("?") < 0 || Trim(url).toLowerCase().indexOf("javascript") == 0)
        return;

    url = removeUrlParam(url, "__stf");
    url = removeUrlParam(url, "__chn");
    url = removeUrlParam(url, "__chv");
    url = removeUrlParam(url, "__esid");

    var httpParams = null;
    var result = getUrlParams(url);
    if (result != null)
        httpParams = result[0];
    checksumResult = calculateChecksum(httpParams);
    if (checksumResult == null || checksumResult == false)
        return ;
    url += "&__chn=" + checksumResult[0] + "&__chv=" + checksumResult[1] + "&__esid=" + checksumResult[2];
    var targetPageName = Utils.HexSHA1(getTargetPageName(url));
    document.cookie = "TargetPage=" + targetPageName + ";path=/";
    anchorElement.href = url;
    return ;
}
//////////////////////////////////////////////////////////////////////////////////////////////
function ajaxDataValidator(url) {
    getUtilities();
    if (Utils.FarzinDataIntegrationChecking != null && Utils.FarzinDataIntegrationChecking.toString().toLowerCase() == "false")
        return url;
        
    url = removeUrlParam(url, "__stf");
    url = removeUrlParam(url, "__chn");
    url = removeUrlParam(url, "__chv");
    url = removeUrlParam(url, "__esid");

    var httpParams = null;
    var result = getUrlParams(url);
    if (result != null)
        httpParams = result[0];
    checksumResult = calculateChecksum(httpParams);
    if (checksumResult == null || checksumResult == false)
        return url;
    url += "&__chn=" + checksumResult[0] + "&__chv=" + checksumResult[1] + "&__esid=" + checksumResult[2];
    var targetPageName = Utils.HexSHA1(getTargetPageName(url));
    document.cookie = "TargetPage=" + targetPageName + ";path=/";
    return url;
}
//////////////////////////////////////////////////////////////////////////////////////////////
function removeHarmfulText(element) {
    var REobj = null;

    if (element == null)
        return;

    var inputText = element.value;
    if (inputText == null)
        return;

    if (element.dataType == null || element.dataType.toLowerCase() != "sql") {
        switch (event.type) {
            case "blur":
                while (inputText != null && inputText.indexOf("'") >= 0)
                    inputText = inputText.replace("'", "");
                while (inputText != null && inputText.indexOf("\"") >= 0)
                    inputText = inputText.replace("\"", "");
                element.value = inputText;
                break;
            case "keypress":
                if (event.keyCode == "'".charCodeAt(0))
                    event.keyCode = 0;
                if (event.keyCode == "\"".charCodeAt(0))
                    event.keyCode = 0;
                if (event.keyCode == ";".charCodeAt(0))
                    event.keyCode = 0;
                break;
        }

        REobj = /--/igm;
        if (REobj.test(inputText))
            element.value = "";

        //Removing all html tags
        REobj = /<\s*.+(>|\s+.*>)/igm;
        if (REobj.test(inputText))
            element.value = "";
    }
}
/////////////////////////////////////////////////////////////////////////////////////////////
function onTextChange() {
    var element = event.srcElement;

    removeHarmfulText(element);
}
//////////////////////////////////////////////////////////////////////////////////////////////
function onTextBlur() {
    var element = event.srcElement;

    removeHarmfulText(element);
}
//////////////////////////////////////////////////////////////////////////////////////////////
function truncateElementValue(element, maxLen) {
    var elementValue = element.value;
    if (elementValue.length > maxLen)
        element.value = elementValue.substr(0, maxLen);
}
//////////////////////////////////////////////////////////////////////////////////////////////
var CharMapTable = new Array(['ی'.charCodeAt(0), 'ک'.charCodeAt(0), '÷'.charCodeAt(0)], ['ي'.charCodeAt(0), 'ك'.charCodeAt(0), 'پ'.charCodeAt(0)]);
function CorrectPersianChars(evnt, element) {
    if (evnt == null && element == null)
        return;
    if (evnt != null) {
        for (var i = 0; i < CharMapTable[0].length; i++) {
            if (evnt.keyCode == CharMapTable[0][i])
                evnt.keyCode = CharMapTable[1][i];
        }
        return;
    }
    var elementValue = element.value;
    for (var i = 0; i < CharMapTable[0].length; i++) {
        var fromChar = String.fromCharCode(CharMapTable[0][i]);
        var toChar = String.fromCharCode(CharMapTable[1][i]);
        while (elementValue.indexOf(fromChar) >= 0)
            elementValue = elementValue.replace(fromChar, toChar);
    }
    element.value = elementValue;
}
//////////////////////////////////////////////////////////////////////////////////////////////
//We need to put dataType & dataLen attributes on INPUT elements
function CheckInputDataType_OnTextBlur() {
    var Event = window.event;
    var element = Event.srcElement;
    var oInputText = element.value;

    CorrectPersianChars(null, element);

    if (element.dataLen != null) truncateElementValue(element, element.dataLen);

    if (element.dataType != null) {
        switch (element.dataType.toString().toLowerCase()) {
            case 'int':
                REobj = /^[0-9]*$/igm;
                if (!REobj.test(oInputText))
                    element.value = "";
                break;
            case 'decimal':
                REobj = /^[0-9]*(\.)?[0-9]+$/igm;
                if (!REobj.test(oInputText))
                    element.value = "";
                break;
            case 'ltrnumbering':
                element.value = NumberingLeftToRightCorrection(oInputText, true);
                break;
            default:
                break;
        }
    }
}
//////////////////////////////////////////////////////////////////////////////////////////////
function CheckInputDataType_OnTextChange() {
    var Event = window.event;
    var element = Event.srcElement;
    var oInputText = element.value;

    if (element.dataLen != null) truncateElementValue(element, element.dataLen);

    if (element.dataType != null) {
        switch (element.dataType.toString().toLowerCase()) {
            case 'int':
                var key = Event.keyCode;
                if (key > 58 || key < 48)
                    Event.keyCode = 0;
                break;
            case 'decimal':
                var key = Event.keyCode;
                if (key == 46 && oInputText.indexOf('.') >= 0) {
                    Event.keyCode = 0;
                    return;
                }
                if ((key > 58 || key < 48) && key != 46)
                    Event.keyCode = 0;
                break;
            case 'ltrnumbering':
                element.value = NumberingLeftToRightCorrection(oInputText, true);
                break;
            default:
                break;
        }
    }
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function NumberingLeftToRightCorrection(strString, ExistsLeftToRightChar) {
    getUtilities();
    var LeftToRightChar = String.fromCharCode(0X202D);
    if (Utils.NumberingLeftToRightModeActive.toString().toLowerCase() == "true") {
        if (strString.indexOf(LeftToRightChar) < 0 && ExistsLeftToRightChar == true)
            strString = LeftToRightChar + strString;
        else if (ExistsLeftToRightChar == false)
            strString = strString.replace(LeftToRightChar, "");
    }
    else
        strString = strString.replace(LeftToRightChar, "");

    return strString;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function LTrim(Str) {
    var Char = Str.substring(0, 1);
    while (Char == " ") {
        Str = Str.substring(1);
        Char = Str.substring(0, 1);
    }
    return Str;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function RTrim(Str) {
    var Char = Str.substring(Str.length - 1);
    while (Char == " ") {
        Str = Str.substring(0, Str.length - 2);
        Char = Str.substring(Str.length - 1);
    }
    return Str;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function Trim(Str) {
    return RTrim(LTrim(Str));
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function GetCookie2(CookieName) {
    var Cookies, CookieNameInCookies, CookieValueInCookies
    Cookies = document.cookie;
    Cookies = Cookies.split(";")
    for (var Counter = 0; Counter < Cookies.length; Counter++) {
        var strCookie = Cookies[Counter];
        var iEqualIndex = strCookie.search("=");
        if (iEqualIndex == -1)
            continue;

        var CookieNameInCookies = strCookie.substring(0, iEqualIndex);
        var CookieValueInCookies = strCookie.substring(iEqualIndex + 1, strCookie.length);

        if (Trim(CookieNameInCookies) == Trim(CookieName))
            return CookieValueInCookies;
    }
    return -1;
}
//////////////////////////////////////////////////////////////////////////////////////////////
function SetError(bSuccess, iErrCode, strErrMsg, bTokenForced, bTokenSuspend, strTokenSerialNO) {
    var oResult = new Array(6);
    oResult[0] = bSuccess;
    oResult[1] = iErrCode;
    oResult[2] = strErrMsg;
    oResult["TokenForced"] = bTokenForced;
    oResult["TokenSuspend"] = bTokenSuspend;
    oResult["TokenSerialNO"] = strTokenSerialNO;
    return oResult;
}
//////////////////////////////////////////////////////////////////////////////////////////////
function CheckToken() {
    var oResult;
    var nl = null;
    var TokenForced = -1, TokenSuspend = -1, TokenSerialNO = "";
    try {
        TokenForced = GetCookie2("TokenForced");
        TokenSuspend = GetCookie2("TokenSuspend");
        TokenSerialNO = GetCookie2("TokenSerialNO");
        nl = new ActiveXObject("NovinAfzar.clsLocalDevice");
        nl.Init();
    }
    catch (e) {
        oResult = SetError(false, 1, "Lock support failed[Driver Error]", TokenForced, TokenSuspend, TokenSerialNO);
        return oResult;
    }

    try {
        nl.SelectDevice(TokenSerialNO);
        if (nl.ErrNo) {
            oResult = SetError(false, 2, "The required token does not exists[" + nl.ErrDescrFA + "]", TokenForced, TokenSuspend, TokenSerialNO);
            return oResult;
        }
        oResult = SetError(true, 0, "Success", TokenForced, TokenSuspend, TokenSerialNO);
        return oResult;
    }
    catch (e) {
        oResult = SetError(false, 3, "Unknown error[" + e.message + "]", TokenForced, TokenSuspend, TokenSerialNO);
        return oResult;
    }
}
//////////////////////////////////////////////////////////////////////////////////////////////
function IsTokenOKForSign() {
    var oResult;
    var oRet = new Array(2);
    oResult = CheckToken();

    oRet[0] = false;

    if(oResult[0] == true)
        oRet[0] = true;
    else if(parseInt(oResult["TokenForced"]) == 0 || parseInt(oResult["TokenForced"]) == -1)
        oRet[0] = true;
    else if(parseInt(oResult[1]) == 1)
        oRet[0] = true;
    oRet[1] = oResult[2] + "[" + oResult[1] + "]";

    return oRet;
}
//////////////////////////////////////////////////////////////////////////////////////////////
function MakeDialogParameters() {
    var ParamsArray = arguments;
    var FirstParamArray = new Array();

    if (ParamsArray.length < 2) {
        ShowMsg("خطا در فراخواني MakeDialogParameters. اشكال در تعداد پارامترها ");
        return null;
    }

    if (ParamsArray == null || ParamsArray.length == null || ParamsArray.length <= 0)
        return null;

    //If number of parameters are three & first parameter is an array, putting its elements to FirstParamArray
    if (ParamsArray.length == 3 && (ParamsArray[0] instanceof Array)) {
        for (var i = 0; i < ParamsArray[0].length; i++)
            FirstParamArray[i] = ParamsArray[0][i];
    }

    //If number of parameters are three & first parameter is an scaller value then dialogArguments is same as it
    var Parameters;
    if (ParamsArray.length == 3 && !(ParamsArray[0] instanceof Array)) {
        function ParamsClass() {
            //Check ParamsArray[0] for string 
            if (typeof (ParamsArray[0]) == "string")
                return (new String(ParamsArray[0]));
            if (typeof (ParamsArray[0]) == "number")
                return (new Number(ParamsArray[0]));
            if (typeof (ParamsArray[0]) == "boolean")
                return (new Boolean(ParamsArray[0]));
            if ((typeof (ParamsArray[0]) == "object" || ParamsArray[0] instanceof ActiveXObject) && (ParamsArray[0] != null && ParamsArray[0].xml != null))
                return (String(ParamsArray[0].xml));
            if (ParamsArray[0] == null)
                return (String(""));
            return ParamsArray[0];
        }
        Parameters = new ParamsClass();
    }
    else {
        Parameters = new Array();
        Parameters._FARZIN_DialogParamType_IsArray = true;
    }

    //Putting all parameters in Parameters variable
    var Index = 0, Offset = 0;
    for (Index = 0; FirstParamArray.length != 0 && Index < FirstParamArray.length; Index++)
        Parameters[Index] = FirstParamArray[Index];

    if (Index == 0) {
        for (Offset = 0; Offset < ParamsArray.length; Offset++)
        {
            Parameters[Offset] = ParamsArray[Offset];
        }
        Parameters.Length = Offset;
    }
    else {
        for (Offset = 1; Offset < ParamsArray.length; Offset++)
            Parameters[Index + Offset - 1] = ParamsArray[Offset];

        Parameters.Length = Index + Offset - 1;
    }

    //Correcting path if it's not a relative path
    var DestinationUrl = Parameters[Parameters.Length - 2];
    if (typeof (DestinationUrl) == "string") {
        //Triming the DestinationUrl
        DestinationUrl = DestinationUrl.replace(/^\s+|\s+$/, '');
        var SlashIndex = DestinationUrl.indexOf("/");
        if (SlashIndex != 0) {
            var PagePath = window.location.pathname;
            DestinationUrl = PagePath.substring(0, PagePath.lastIndexOf("/")) + "/" + DestinationUrl;
            if (DestinationUrl.charAt(0) != "/")
                DestinationUrl = "/" + DestinationUrl;
            Parameters[Parameters.Length - 2] = DestinationUrl;
        }
    }

    Parameters._FARZIN_DialogParam = true;

    return Parameters;
}
//////////////////////////////////////////////////////////////////////////////////////////////
var IsPagedBlocked = false;
function Loading(on, message) {
    if (IsPagedBlocked)
        return;
    if (d = document.getElementById('divLoading'))
        d.parentNode.removeChild(d);
    if (i = document.getElementById('imgLoading'))
        i.parentNode.removeChild(i);

    if (on) {
        var width = Math.max(document.body.clientWidth, Math.max(document.documentElement.clientWidth, document.body.offsetWidth));
        var height = Math.max(document.body.clientHeight, Math.max(document.documentElement.clientHeight, document.body.offsetHeight));

        try {
            if (width == 0) {
                width = Math.max(width, parseInt(window.dialogWidth, 10));
                height = Math.max(height, parseInt(window.dialogHeight, 10));
            }
        }
        catch (e) { }

        if (width > 1024)
            width = 1024;

        if (height > 768)
            height = 768;

        //background-color:#000;
        var body = document.getElementsByTagName("body")[0];
        var div = document.createElement("<div id='divLoading' style='position:absolute;filter:alpha(opacity=55);-moz-opacity:.55;opacity:.55;left:0px;top:0px;width:" + (width - 50) + "px;height:" + (height - 50) + "px'></div>");
        body.appendChild(div);

        var table = document.createElement("<table id='imgLoading' style='position:absolute;text-align:center;vertical-align:middle;left:0px;top:0px;width:" + (width - 50) + "px;height:" + (height - 50) + "px'></table>");
        var cell = table.insertRow().insertCell();
        cell.innerHTML = "<img src='/FarzinSoft/Resources/loading2.gif' alt='' />";
        if (message != null)
            cell.innerHTML += "<BR>" + message;
        body.appendChild(table);
    }
}
//////////////////////////////////////////////////////////
function saveData(name, value) {
    try {
        var oStorage = document.getElementById("divStorage");
        oStorage.setAttribute(name, value);
        oStorage.save("data");
    } catch (e) { }
}
//////////////////////////////////////////////////////////
function getData(name) {
    try {
        var oStorage = document.getElementById("divStorage");
        oStorage.load("data");
        return oStorage.getAttribute(name);
    } catch (e) { return null; }
}
//////////////////////////////////////////////////////////
var MaxLoopCount = 10;
function GetParentModalDialog(hwnd) {
    var ParentModalDialog = hwnd;
    var i = 0;
    while (ParentModalDialog != ParentModalDialog.parent && i < MaxLoopCount) {
        ParentModalDialog = ParentModalDialog.parent;
        i++;
    }
    if (i >= MaxLoopCount) {
        alert("Loop exception in GetParentModalDialog");
        throw "Loop exception in GetParentModalDialog";
    }
    return ParentModalDialog;
}
//////////////////////////////////////////////////////////
function GetFarzinMasterWindow(hwnd) {
    if (hwnd.dialogArguments != null) {
        alert("Window.dialogArguments is not null");
        throw "Window.dialogArguments is not null";
    }

    var i = 0;
    var farzinMasterDialog = hwnd;
    while (farzinMasterDialog != farzinMasterDialog.parent && i < MaxLoopCount) {
        farzinMasterDialog = farzinMasterDialog.parent;
        i++;
    }
    if (i >= MaxLoopCount) {
        alert("Loop exception in GetFarzinMasterWindow");
        throw "Loop exception in GetFarzinMasterWindow";
    }
    return farzinMasterDialog;
}
//////////////////////////////////////////////////////////
function IsUtilitiesAvailable(callback, params) {
    if (window.Utilities == null) {
        if (GetDialogMasterWindow(window).Utilities != null) {
            window.Utilities = GetDialogMasterWindow(window).Utilities;
            return true;
        }
        if (typeof callback == "function")
            setTimeout(function() { callback(params) }, 1);
        return false;
    }
    return true;
}
//////////////////////////////////////////////////////////
function GetDialogMasterWindow(hwnd) {
    var i = 0;
    var dialogMasterWindow = hwnd;
    while (dialogMasterWindow != dialogMasterWindow.parent && i < MaxLoopCount) {
        dialogMasterWindow = dialogMasterWindow.parent;
        i++;
    }
    if (i >= MaxLoopCount) {
        alert("Loop exception in GetFarzinMasterWindow");
        throw "Loop exception in GetFarzinMasterWindow";
    }
    return dialogMasterWindow;
}
//////////////////////////////////////////////////////////
function RegisterUtilities() {
    if (ParentWindow.dialogArguments == null)
        window.Utilities = GetFarzinMasterWindow(ParentWindow).Utilities;
    else
        window.Utilities = GetParentModalDialog(ParentWindow).Utilities;
}
//////////////////////////////////////////////////////////
function TotalReplace(str, oldSubStr, newSubStr) {
    while (str.indexOf(oldSubStr) >= 0)
        str = str.replace(oldSubStr, newSubStr);
    return str;
}
//////////////////////////////////////////////////////////
function LogArrayData(array) {
    for (var i = 0; i < array.length; i++) {
        var item = array[i];
        if (typeof item == 'array') {
            LogArrayData(item);
            continue;
        }
        LogData("item[" + i + "] = " + item);
    }
}
//////////////////////////////////////////////////////////
function LogData(data, createNewFile, fileType) {
    var ForReading = 1, ForWriting = 2, ForAppending = 8;
    var TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0;
    var baseFileName = "c:\\FarzinClientLog";
    var defaultFileType = "txt";
    var logFile = null;
    if (fileType != null)
        defaultFileType = fileType;
    var logFileName = baseFileName + "." + defaultFileType;

    fso = new ActiveXObject("Scripting.FileSystemObject");
    if (createNewFile) {
        var date = new Date();
        var now = date.toTimeString();
        now = TotalReplace(now, ":", "_");
        now = TotalReplace(now, " ", "_");
        now = TotalReplace(now, "+", "_");
        logFileName = baseFileName + now + "." + defaultFileType;
        if (fso.FileExists(logFileName))
            fso.DeleteFile(logFileName);
        fso.CreateTextFile(logFileName);
        logFile = fso.GetFile(logFileName);
    }
    else if (!fso.FileExists(logFileName)) {
        fso.CreateTextFile(logFileName);
        logFile = fso.GetFile(logFileName);
    }
    else {
        logFile = fso.GetFile(logFileName);
    }
    var ts = logFile.OpenAsTextStream(ForAppending, TristateTrue);
    ts.WriteLine(data);
    ts.Close();
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function ShowAlertInDataChange() {
    getUtilities();
    return Utils.AlertInDataChange.toString();
}
//////////////////////////////////////////////////////////
function ShowAlertInSessionTimeOut() {
    getUtilities();
    return Utils.AlertInSessionTimeOut.toString();
}
//////////////////////////////////////////////////////////
function ShowAlertInEditorChange() {
    getUtilities();
    return Utils.AlertInEditorChange.toString();
}
//////////////////////////////////////////////////////////
function setAlertSetting(strAlertInDataChange, strAlertInSessionTimeOut, strAlertInEditorChange) {
    getUtilities();
    Utils.AlertInDataChange = (strAlertInDataChange == null) ? Utils.AlertInDataChange : strAlertInDataChange;
    Utils.AlertInSessionTimeOut = (strAlertInSessionTimeOut == null) ? Utils.AlertInSessionTimeOut : strAlertInSessionTimeOut;
    Utils.AlertInEditorChange = (strAlertInEditorChange == null) ? Utils.AlertInEditorChange : strAlertInEditorChange;
}
//////////////////////////////////////////////////////////
var DefinedHotKeys = {
    altW: "WriteHamesh",
    altQ: "ListHamesh",
    altZ: "SendDocument",
    altG: "ShowFlow",
    altX: "ShowDependency",
    ctrlZ: "ResponseDocument",
    alt1: "SelectPreDefindedSendCommand",
    arrowUp: "ArrowUp",
    arrowDown: "ArrowDown",
    arrowLeft: "ArrowLeft",
    arrowRight: "ArrowRight",
    enter: "Enter",
    f2: "F2",
    f8: "F8",
    f9: "F9",
    f10: "F10",
    freeAlts:"B,K, U, Y, 0-9",
    freeCtrls: "G, M, U, Y, Z, Enter"
}
//////////////////////////////////////////////////////////
function HotKeyController(evnt) {
    var keyCode = evnt.keyCode;
    var keyLetter = String.fromCharCode(keyCode).toUpperCase();
    var func = "DefinedHotKeys.%" + keyLetter;
    if (evnt.shiftKey == true) {
        func = func.replace("%", "shft");
    }
    if (evnt.altKey == true) {
        func = func.replace("%", "alt");
    }
    if (evnt.ctrlKey == true) {
        func = func.replace("%", "ctrl");
    }
    switch (keyCode) {
        case 13: //Enter
            func = "DefinedHotKeys.enter";
            break;
        case 37: //Left Arrow
            func = "DefinedHotKeys.arrowLeft";
            break;
        case 38: //Up Arrow
            func = "DefinedHotKeys.arrowUp";
            break;
        case 39: //Right Arrow
            func = "DefinedHotKeys.arrowRight";
            break;
        case 40: //Down Arrow
            func = "DefinedHotKeys.arrowDown";
            break;
        case 113: //F2
            func = "DefinedHotKeys.f2";
        case 119: //F8
            func = "DefinedHotKeys.f8";
        case 120: //F9
            func = "DefinedHotKeys.f9";
        case 121: //F10
            func = "DefinedHotKeys.f10";
    }
    try {
        var pageFunc = "try{PageHotKeyController.Initialize()}catch(e){};" + "PageHotKeyController." + eval(func) + "()";
        eval(pageFunc);
    }
    catch (e) { }
}
//////////////////////////////////////////////////////////
function IsPopupBlocker() {
    var oWin = window.open("", "testpopupblocker", "width=1,height=1,top=300,left=400,resizable=yes,help=no, status=no,scroll=no,titlebar=no", true);
    if (oWin == null || typeof (oWin) == "undefined") {
        return true;
    } else {
        oWin.document.write("<font face='traffic'><b>در حال كنترل تنظيمات مرورگر</b></font>");
        setTimeout(function() { oWin.close(); }, 1000);
        return false;
    }
}
///////////////////////////////////////////////////////////
function checkClientSetting() {
    try {
        var fso = new ActiveXObject("Scripting.FileSystemObject");
        return true;
    }
    catch (e) {
        return false;
    }
}
