var HeapOfDateNumbers = new Array(301);
var CheckIntOk = new Array(101);

for (i=1; i<=300; i++)
    HeapOfDateNumbers[i] = "";
for (i=1; i<=100; i++) //начнём с единицы
    CheckIntOk[i] = true;
///////////////////////////////////////////////////////////////////////////////

function preparePostString(form) {
    var resParams = ""
    var count = form.length;

    for (i = 0; i < count; i++) {        
        var paramName = form[i].name;
        var paramValue = form[i].value;

        var paramType = form[i].type;        
        //

        var add = true;

        if (paramName == "") {
            add = false;
        }

        if (paramType == "radio") {
            var paramChecked = form[i].checked;
            
            if (paramChecked == false) {
                add = false;
            }
        }

        if (add == true) {
            resParams = resParams + paramName + "=" + paramValue + "&";
        }
    }

    return resParams;
}
///////////////////////////////////////////////////////////////////////////////

/// получить объект для работы с ajax
function getXmlHttp()
{
    var xmlhttp;

    try 
    {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e) 
    {
        try 
        {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } 
        catch (E) 
        {
            xmlhttp = false;
        }
    }

    if (!xmlhttp && typeof XMLHttpRequest != 'undefined') 
    {
        xmlhttp = new XMLHttpRequest();
    }
    
    return xmlhttp;
}
///////////////////////////////////////////////////////////////////////////////

function getElement(elementName) {
    var element = undefined;
    try {
        element = document.getElementById(elementName)
        return element;
    }
    catch (e) {
        return null;
    }
}

function refreshPart(senderName, reqValue, refreshDivName) {
    try {
        if (reqValue != "") {
            var refreshEl = getElement(refreshDivName);
            if (refreshEl != null)
                refreshEl.innerHTML = reqValue;
        }
        //

        if (senderName != null && senderName != "") {
            var obj = getElement(senderName)

            if (obj != null) {
                obj.style.cursor = "pointer";
                obj.style.cursor = "hand";
            }
        }

        var waitEl = getElement("waitImg");
        if (waitEl != null) {
            waitEl.style.display = "none";
        }    
            
        document.body.style.cursor = "default";
    }
    catch (e) {
        window.alert('refreshPart ' + e);
    }
}
///////////////////////////////////////////////////////////////////////////////

function sendReq(sender, url, callbackFunction, refreshDivName, async) {
    try {
    
        var request = getXmlHttp();
        request.open("POST", url, async);
        request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");

        var params = preparePostString(document.forms[0]);

        var SenderName = "";
        if (sender != null) {
            SenderName = sender.name;
            if (SenderName == "")
                SenderName = sender.id;
        }
        
        request.onreadystatechange = function() {
            if (request.readyState == 4 && request.status == 200) {
                if (request.responseText) {
                    callbackFunction(SenderName, request.responseText, refreshDivName);
                }
            }
        };

        request.send(params);
    }
    catch (e) {
        window.alert('sendReq ' + e);
    }
}

function ShowRefreshState() {

    var waitElement = getElement("waitImg");
    if (waitElement != null) {
        waitElement.style.display = "block";
    }
}
///////////////////////////////////////////////////////////////////////////////

function altClear(sender, bID) {
    try {
        if (bID == undefined) {
            bID = 0;
        }
        ShowRefreshState();

        if (sender != null) {
            sender.style.cursor = "wait";
            //document.body.style.cursor = "wait";
        }

        getElement("id_SearchRegionIsSPO").value = "true";
        getElement('id_0_NextPage').value = 'Clear';
        //
        sendReq(null, 'clearForm.aspx?' + bID + '&partid=searchformup', refreshPart, 'searchformupDiv', true);
        sendReq(null, 'clearForm.aspx?' + bID + '&partid=searchformbottom', refreshPart, 'searchformbottomDiv', true);
        sendReq(sender, 'clearForm.aspx?' + bID + '&partid=results', refreshPart, 'resultsDiv', true);
    }
    catch (e) {
        window.alert('altClear ' + e);
    }
}

function keyDownOnControl(event, sender, id) {
    if (event.keyCode == 13) {
        altSendForm(null, id);
        event.cancelBubble = true;
        return false;
    }    
}
///////////////////////////////////////////////////////////////////////////////

function altSendForm(sender, bID) {
    try {    
        if (bID == undefined) {
            bID = 0;
        }

        ShowRefreshState();
        
        if (sender != null) {
            sender.style.cursor = "wait";
        }
        
        getElement("id_SearchRegionIsSPO").value = "false";
        getElement('id_0_NextPage').value = "";
        //
        sendReq(sender, 'clearForm.aspx?' + bID + '&partid=results', refreshPart, "resultsDiv", true);
    }
    catch (e) {
        window.alert('altSendForm ' + e);
    }
}
///////////////////////////////////////////////////////////////////////////////

function altSendForm2(sender, par, bID) {

    if (bID == undefined) {
        bID = 0;
    }
    
    ShowRefreshState();
    
    if (sender != null) {
        sender.style.cursor = "wait";
    }
    //    
    getElement('id_0_NextPage').value = par;
    sendReq(sender, 'clearForm.aspx?' + bID + '&partid=results', refreshPart, "resultsDiv", true);
}
///////////////////////////////////////////////////////////////////////////////

window.document.onkeydown = function(e)
{   
    evt = e || window.event; 
    var pressedkey = evt.which || evt.keyCode; 

    if (pressedkey==13)
    {
        CheckAndSendForm("");
        return false;
    }
}
///////////////////////////////////////////////////////////////////////////////

function ClearTitle(par) {
    try {
        if (document.getElementById(par).value == "дд.мм.гггг") {
            document.getElementById(par).style.color = "#000000";
            document.getElementById(par).value = "";
        }
    }
    catch (e) {
        window.alert('ClearTitle ' + e);
    }
}
///////////////////////////////////////////////////////////////////////////////

function FillTitle(par) {
    try {
        if (document.getElementById(par).value == "" || document.getElementById(par).value == "дд.мм.гггг") {
            document.getElementById(par).style.color = "#AAAAAA";
            document.getElementById(par).value = "дд.мм.гггг";
            /*document.getElementById(par).style.fontWeight = "normal";*/

            RemoveNumberFromHeap(par);
        }
    }
    catch (e) {
        window.alert('FillTitle ' + e);
    }
}
///////////////////////////////////////////////////////////////////////////////

function CheckDate(par) {
    try {                
        tmpStr = document.getElementById(par).value;
        tmpDate = new Date(tmpStr.substr(6, 4), tmpStr.substr(3, 2) - 1, tmpStr.substr(0, 2));

        if (tmpDate.getDate() == tmpStr.substr(0, 2) && tmpDate.getMonth() == tmpStr.substr(3, 2) - 1 && tmpDate.getFullYear() == tmpStr.substr(6, 4) && tmpDate.getFullYear() > 1752) {
            document.getElementById(par).style.color = "#000000";
            RemoveNumberFromHeap(par);
        }
        else {
            document.getElementById(par).style.color = "#DD0000";
            AddNumberToHeap(par);
        }
    }
    catch (e) {
        window.alert(e);
    }
}
///////////////////////////////////////////////////////////////////////////////

function CheckInt(par1, par2)
{
    // Нумерация сквозная. par2 это общий номер реквизита в проекте.
    var a, b, c;
    a = document.f.item("1_" + par1 + "_1").value;
    b = document.f.item("1_" + par1 + "_2").value;
    c = document.f.item("1_" + par1 + "_3").value;
    
    if (   ((a > -1 && a < 2147483648) || a == ""  ) && ((b > -1 && b < 2147483648) || b == ""  ) && ((c > -1 && c < 2147483648) || c == ""  )   )
    {
        CheckIntOk[par2] = true;
    }
    else
    {
        CheckIntOk[par2] = false;
    }
}
///////////////////////////////////////////////////////////////////////////////

function CheckAndSendForm(par)
{
    document.getElementById("id_SearchRegionIsSPO").value = "false";
    document.getElementById('id_0_NextPage').value = par;

    var a = true;
    for (i=1; i<=100; i++) //начнём с единицы
        if (CheckIntOk[i] == false)
            a = false;
    
    var b = true;
    for (i=1; i<=300; i++)
        if (HeapOfDateNumbers[i] != "")
            b = false;
            
    if (!b)
    {
        alert("Ошибка при вводе даты");    
        return false;    
    }
    else if (!a)
    {
        alert("Ошибка при вводе целого числа");
        return false;        
    }
    else
    {
        document.f.submit();
        return true;
    }
}

///////////////////////////////////////////////////////////////////////////////

function SendForm(par)
{
    //if (par == 'Clear')
        //document.getElementById("id_SearchRegionIsSPO").value = "true";

    document.getElementById('id_0_NextPage').value = par;
    document.f.submit();
}
///////////////////////////////////////////////////////////////////////////////

function SwitchCalendarToSingle(par, path)
{
    if (path == null)
        path = './';
        
    document.getElementById(par + "_1id").checked = true;

    document.getElementById(par + '_1').style.color = "#AAAAAA";
    document.getElementById(par + '_2').style.color = "#AAAAAA";

    document.getElementById(par + '_c0').src = path + "calendar.gif";

    document.getElementById(par + '_c1').src = path + "calendar_disable.gif";
    document.getElementById(par + '_c2').src = path + "calendar_disable.gif";

    document.getElementById(par + '_1').value = "дд.мм.гггг";
    document.getElementById(par + '_2').value = "дд.мм.гггг";

    CheckDate(par + '_0');
    FillTitle(par + '_0');
}
///////////////////////////////////////////////////////////////////////////////

function SwitchCalendarToMultiply(par, path)
{
    if (path == null)
        path = './';
    
    document.getElementById(par + "_2id").checked = true;
    document.getElementById(par + '_0').style.color = "#AAAAAA";

    document.getElementById(par + '_c0').src = path + "calendar_disable.gif";

    document.getElementById(par + '_c1').src = path + "calendar.gif";
    document.getElementById(par + '_c2').src = path + "calendar.gif";

    document.getElementById(par + '_0').value = "дд.мм.гггг";    

    CheckDate(par + '_1');
    CheckDate(par + '_2');

    FillTitle(par + '_1');
    FillTitle(par + '_2');
}
///////////////////////////////////////////////////////////////////////////////

function AddNumberToHeap(par) {
    var tmpBool = false;
    
    for (i=1; i<=300; i++)
        if (HeapOfDateNumbers[i] == par)
            tmpBool = true;
            
    if (!tmpBool) // нет номера в куче
        for (i=1; i<=300; i++)
            if (HeapOfDateNumbers[i] == "")
                {
                HeapOfDateNumbers[i] = par;
                break;
                }
}
///////////////////////////////////////////////////////////////////////////////

function RemoveNumberFromHeap(par)
{
    for(i=1; i<300; i++)
        if (HeapOfDateNumbers[i] == par)
            {
            HeapOfDateNumbers[i] = "";
            break;
            }
}
///////////////////////////////////////////////////////////////////////////////









//////////////////////////////////////////////////////////////////////////////
///Calendar functions
//////////////////////////////////////////////////////////////////////////////
function IsDateValid(par)
{
    tmpStr = document.getElementById(par).value;    
    tmpDate = new Date(tmpStr.substr(6, 4), tmpStr.substr(3, 2) - 1, tmpStr.substr(0, 2));

    if ( tmpDate.getDate() == tmpStr.substr(0, 2) && tmpDate.getMonth() == tmpStr.substr(3, 2) - 1 && tmpDate.getFullYear() == tmpStr.substr(6, 4) && tmpDate.getFullYear() > 1752)
    {
        return true;
    }
    else
    {
       return false;
    }
}

function GetDate(par)
{
    tmpStr = document.getElementById(par).value;
    return new Date(tmpStr.substr(6, 4), tmpStr.substr(3, 2)-1, tmpStr.substr(0, 2));
}

function getFormatDate(date)
{
    return makeTwoDigitString ( date.getDate())+"."+makeTwoDigitString ((date.getMonth()+1))+"."+date.getFullYear();
}


function openPopUpCalendar(url, date) {
    try {
        var dateField = date;
        if (!IsDateValid(date))
            date = 0;
        else
            date = getFormatDate(GetDate(date));

        url = url + '?date=' + date + "&field=" + dateField + "&nocache=" + Math.random();

        var w = undefined;
        w = window.showModalDialog(url, "calendar", "dialogWidth: 270px; dialogHeight: 246px; status=no;");
        
        if (w != undefined) {            
            document.getElementById(dateField).value = w;
            CheckDate(dateField);
        }
    }
    catch (e) {
    }
};

function makeTwoDigitString(number)
{
    number=number+'';
    if(number.length==2)
        return number;
    return '0'+number;
}


///


///////////////////////////// Masked Input ////////////////////////////

var strUserAgent = navigator.userAgent.toLowerCase(); 
var isIE = strUserAgent.indexOf("msie") > -1; 
var isNS6 = strUserAgent.indexOf("netscape6") > -1; 
var isNS4 = !isIE && !isNS6 && parseFloat(navigator.appVersion) < 5; 

var rePointChar = /\x2E/;
var reValidChars = /\d/;
var reA = /\d\d/;
var reB = /\d\d\x2E\d\d/;
var reC = /\d\d\x2E\d\d\x2E\d\d\d\d/;
var reKeyboardChars = /[\x00\x03\x08\x0D\x16\x18\x1A]/;
var reBackspaceChar = /\x08/;
var reClipboardChars = /[cvxz]/i;


function maskKeyPress(objEvent) {
	var iKeyCode, strKey, objInput;
	
	if (isIE) {
	    iKeyCode = objEvent.keyCode;
		objInput = objEvent.srcElement;
	} else {
	    iKeyCode = objEvent.which;
		objInput = objEvent.target;
	}
	
	strKey = String.fromCharCode(iKeyCode);

	objInput.validValue = objInput.value;
	if (!rePointChar.test(strKey) && !reValidChars.test(strKey) && !reKeyboardChars.test(strKey) && !checkClipboardCode(objEvent, strKey)) {
		return false;
	}
}

function maskAddPoint(objEvent) {
    var iKeyCode, strKey, objInput;

    if (isIE) {
        iKeyCode = objEvent.keyCode;
        objInput = objEvent.srcElement;
    } else {
        iKeyCode = objEvent.which;
        objInput = objEvent.target;
    }
	
	strKey = String.fromCharCode(iKeyCode);

	if (reA.test(objInput.value) && objInput.value.length == 2 && strKey!="." && !reBackspaceChar.test(strKey))
	    objInput.value = objInput.value + ".";
	    
	if (reB.test(objInput.value) && objInput.value.length == 5 && strKey!="." && !reBackspaceChar.test(strKey))
	    objInput.value = objInput.value + ".";
}

function checkClipboardCode(objEvent, strKey) {
  	if (isNS6)
    	return objEvent.ctrlKey && reClipboardChars.test(strKey);
  	else
    	return false;
}

function maskPaste(objEvent) {
    var strPasteData = window.clipboardData.getData("Text");
    var objInput = objEvent.srcElement;

    if (reA.test(strPasteData) || reB.test(strPasteData) || reC.test(strPasteData))
    { }
    else
        return false;

}