﻿var oCalendar, oCalendarMonth, oCalendarYear, oCalendarDays;
var aMonthLen = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var nMonth, nYear, dateStart;
var oDateInput;
var nNextLineNumber, pHighlightedElement, bResults;


function InitializeCalendar()
{
    oCalendar = GetElement("Calendar");
    oCalendarMonth = GetElement("CalendarMonth");
    oCalendarYear = GetElement("CalendarYear");
    oCalendarDays = GetElement("CalendarDays");
}


function OnSubmit()
{
    ServerErrorMessage.style.display = "none";
    ClientErrorMessage01.style.display = "none";
    ClientErrorMessage02.style.display = "none";

    switch (CheckForm())
    {
        case "OK":
            break;
            
        case "01":
            ClientErrorMessage01.style.display = "";
            calcform.scrollIntoView(true);
            return false;
            
        case "02":
            ClientErrorMessage02.style.display = "";
            calcform.scrollIntoView(true);
            return false;
            
        default:
            return false;
    }
    
    {
        var oPage = GetElement("InputPage");
        oPage.style.display = "none";
        oPage = GetElement("WaitPage");
        oPage.style.display = "block";
    }
   
    var i, nNextLine = 0, oRows = FormTable.rows;
    for (i = 1; i < oRows.length; i++)
    {
        nActualLine = oRows(i).id.substr(3);
        var oDateInput = GetElement("date" + nActualLine);
        if (oDateInput == null)
            return false;
        var oValueInput = GetElement("value" + nActualLine);
        if (oValueInput == null)
            return false;
        if ((oDateInput.value == "") && (oValueInput.value == ""))
        {
            FormTable.deleteRow(oRows(i).rowIndex);
            i--;
            continue;
        }

        var oInput, oInputHidden;
        oInput = GetElement("date" + nActualLine);
        oInputHidden = GetElement("datehidden" + nActualLine);
        if ((oInput == null) || (oInputHidden == null))
            return false;
        oInput.name = "date" + nNextLine;
        oInputHidden.name = "datehidden" + nNextLine;
        oInputHidden.value = FormatDate(oInput.value);
        oInput.value = "";

        oInput = GetElement("value" + nActualLine);
        oInputHidden = GetElement("valuehidden" + nActualLine);
        if ((oInput == null) || (oInputHidden == null))
            return false;
        oInput.name = "value" + nNextLine;
        oInputHidden.name = "valuehidden" + nNextLine;
        oInputHidden.value = FormatCurrency(oInput.value);
        oInput.value = "";

        nNextLine++;
    }
    
    return true;
}


function CheckForm()
{
    if (pHighlightedElement != null)
    {
        HighlightOff(pHighlightedElement);
        pHighlightedElement = null;
    }

    var i, nActualLine, bErrorInLine, bFormIsEmpty = true, bReturnValue = true, oRows = FormTable.rows;
    for (i = 1; i < oRows.length; i++)
    {
        nActualLine = oRows(i).id.substr(3);
        var oDateInput = GetElement("date" + nActualLine);
        var oValueInput = GetElement("value" + nActualLine);

        SetError(nActualLine, true, false);
        SetError(nActualLine, false, false);

        if ((oDateInput.value == "") && (oValueInput.value == ""))
            continue;

        bErrorInLine = false;

        if ((oDateInput.value != "") && (!CheckDate(oDateInput.value)))
        {
            bErrorInLine = true;
            if (bReturnValue)
                oDateInput.focus();
            bReturnValue = false;
            SetError(nActualLine, true, true);
        }

        if ((oValueInput.value != "") && (!CheckCurrency(oValueInput.value)))
        {
            bErrorInLine = true;
            if (bReturnValue)
                oValueInput.focus();
            bReturnValue = false;
            SetError(nActualLine, false, true);
        }

        if (!bErrorInLine && (oDateInput.value == ""))
        {
            if (bReturnValue)
                oDateInput.focus();
            bReturnValue = false;
            SetError(nActualLine, true, true);
        }

        if (!bErrorInLine && (oValueInput.value == ""))
        {
            if (bReturnValue)
                oValueInput.focus();
            bReturnValue = false;
            SetError(nActualLine, false, true);
        }

        bFormIsEmpty = false;
    }

    if (bFormIsEmpty)
        return "02";
    if (!bReturnValue)
        return "01";
    return "OK";
}


function SetFocus(nRow, bDate)
{
    ResetFocus();
    HideCalendar();
    var oBox = GetElement((bDate ? "datebox" : "valuebox") + nRow);
    HighlightOn(oBox);
    pHighlightedElement = oBox;
}


function ResetFocus()
{
    HideCalendar();
    if (pHighlightedElement == null)
        return;
    HighlightOff(pHighlightedElement);
    pHighlightedElement = null;
}


function SetError(nRow, bDate, bError)
{
    var oBox = GetElement((bDate ? "datebox" : "valuebox") + nRow);
    if (oBox == null)
        return;
    if (bError)
        oBox.style.background = "#FFC0C0";
    else
        oBox.style.background = "";
}


function HighlightOn(pElement)
{
    pElement.style.background = "#000000";
}


function HighlightOff(pElement)
{
    pElement.style.background = "";
}


function AddRow()
{
    var oRow = FormTable.insertRow();
    oRow.id = "row" + nNextLineNumber;

    var oCell;
    oCell = oRow.insertCell();
    oCell.className = "headerdel";
    oCell.innerHTML = "<a href='#' onmouseover='SetStatus(\"\"); return true;' onmouseout='SetStatus(\"\"); return true;' onclick='DeleteRow(" + nNextLineNumber + "); return false;' onmouseup='SetStatus(\"\"); return true;'><img alt='Smazat řádek' src='Images/del.gif' width='16' height='16' /></a>"

    oCell = oRow.insertCell();
    oCell.className = "data";
    oCell.style.borderRight = "none";
    oCell.id = "datebox" + nNextLineNumber;
    oCell.innerHTML = "<input class='date' name='date" + nNextLineNumber + "' onfocus='SetFocus(" + nNextLineNumber + ", true);' onblur='ResetFocus();' /><input type='hidden' name='datehidden" + nNextLineNumber + "' />";

    oCell = oRow.insertCell();
    oCell.className = "data";
    oCell.innerHTML = "<img class='calendar' src='Images/Kalendar.png' width='19' height='15' onclick='SetFocus(" + nNextLineNumber + ", true); ShowCalendar(\"date" + nNextLineNumber + "\"); window.event.cancelBubble = true;' alt='Otevřít kalendář' />";

    oCell = oRow.insertCell();
    oCell.className = "data";
    oCell.id = "valuebox" + nNextLineNumber;
    oCell.innerHTML = "<input class='value' name='value" + nNextLineNumber + "' onfocus='SetFocus(" + nNextLineNumber + ", false);' onblur='ResetFocus();' /><input type='hidden' name='valuehidden" + nNextLineNumber + "' />";

    nNextLineNumber++;
}


function DeleteRow(nRow)
{
    if (FormTable.rows.length <= 2)
        return;
    var oRow = GetElement("row" + nRow);
    if (oRow == null)
        return;
    FormTable.deleteRow(oRow.rowIndex);
}


function CheckDate(strInput)
{
    if (strInput.search(/^[1-9][0-9]?\.[1-9][0-9]?\.[1-9][0-9]{3}$/) == -1)
        return false;
    var aSplit = strInput.split(".");
    var dateInput = new Date(aSplit[2], aSplit[1] - 1, aSplit[0]);
    if (isNaN(dateInput))
        return false;
    if ((dateInput.getDate() != aSplit[0]) || (dateInput.getMonth() != aSplit[1] - 1) || (dateInput.getFullYear() != aSplit[2]))
        return false;
    return true;
}


function FormatDate(strInput)
{
    var aSplit = strInput.split(".");
    return aSplit[2] + "/" + aSplit[1] + "/" + aSplit[0];
}


function CheckCurrency(strInput)
{
    if (strInput.search(/^-?[0-9]+((,|\.)[0-9]+)?$/) == -1)
        return false;
    var dblInput = new Number(strInput.replace(/,/g, "."));
    if (isNaN(dblInput))
        return false;
    return true;
}


function FormatCurrency(strInput)
{
    return strInput.replace(/\./g, ",");
}


function ShowCalendar(strDate)
{
    oDateInput = GetElement(strDate);
    if (oDateInput == null)
        return;
    
    if (CheckDate(oDateInput.value))
    {
        var aSplit = oDateInput.value.split(".");
        dateStart = new Date(aSplit[2], aSplit[1] - 1, 1);
    }
    else
    {
        dateStart = new Date();
        dateStart = new Date(dateStart.getFullYear(), dateStart.getMonth(), 1);
    }

    DrawCalendar();

    oCalendar.style.left = window.event.clientX + document.body.scrollLeft;
    oCalendar.style.top = window.event.clientY + document.body.scrollTop;
    oCalendar.style.display = "";
}


function HideCalendar()
{
    if (oCalendar != null)
        oCalendar.style.display = "none";
}


function DrawCalendar()
{
    var nDayOfWeek, nMonthLen;
    nYear = dateStart.getFullYear();
    nMonth = dateStart.getMonth();
    nDayOfWeek = dateStart.getDay();
    if ((nDayOfWeek == 0) && (strFirstDayOfWeek == "monday"))
        nDayOfWeek = 7;
    nMonthLen = aMonthLen[nMonth];
    if ((nMonth == 1) && (nYear % 4 == 0) && !(nYear % 100 == 0))
        nMonthLen++;

    oCalendarMonth.innerHTML = aCalendarMonths[nMonth];
    oCalendarYear.innerHTML = nYear;

    var i, j, oDay, k = -nDayOfWeek + (strFirstDayOfWeek == "monday" ? 1 : 0);
    for (j = 0; j < 6; j++)
    {
        for (i = 0; i < 7; i++)
        {
            k++;
            if ((k < 1) || (k > nMonthLen))
            {
                oDay = oCalendarDays.children(j).children(i);
                oDay.innerHTML = "&nbsp;";
                oDay.onmouseover = null;
                oDay.onmouseout = null;
                oDay.onclick = null;
            }
            else
            {
                oDay = oCalendarDays.children(j).children(i);
                oDay.innerHTML = k;
                oDay.onmouseover = CalendarMouseOver;
                oDay.onmouseout = CalendarMouseOut;
                oDay.onclick = CalendarClick;
            }
        }
    }
}


function CalendarMouseOver()
{
    this.className = "active";
}


function CalendarMouseOut()
{
    this.className = "";
}


function CalendarClick()
{
    if (oDateInput != null)
    {
        oDateInput.value = this.innerText + "." + (nMonth + 1) + "." + nYear;
        oDateInput.focus();
    }
    HideCalendar();
}


function CalendarPrevMonth()
{
    nMonth--;
    if (nMonth < 0)
    {
        nMonth = 11;
        if (nYear > 1901)
            nYear--;
    }
    dateStart = new Date(nYear, nMonth, 1);
    DrawCalendar();
}


function CalendarNextMonth()
{
    nMonth++;
    if (nMonth > 11)
    {
        nMonth = 0;
        if (nYear < 2100)
            nYear++;
    }
    dateStart = new Date(nYear, nMonth, 1);
    DrawCalendar();
}


function CalendarPrevYear()
{
    if (nYear > 1901)
        nYear--;
    dateStart = new Date(nYear, nMonth, 1);
    DrawCalendar();
}


function CalendarNextYear()
{
    if (nYear < 2100)
        nYear++;
    dateStart = new Date(nYear, nMonth, 1);
    DrawCalendar();
}

function ChangeCurrency()
{
    var oAmountCurrency = GetElement("amount_currency");
    var oSelectedFund = GetElement("FundChoice");
    if ((oAmountCurrency != null) && (oSelectedFund != null))
    {
        var oRegExp = new RegExp("\\(([a-z]+)\\)$", "ig"), strClass = "", aMatches;
        var oChildren = oSelectedFund.childNodes, i;
        for (i = 0; i < oChildren.length; i++)
        {
            if ((oChildren.item(i).tagName == "OPTION") && (oChildren.item(i).selected))
            {
                aMatches = oRegExp.exec(oChildren.item(i).innerText);
                if (aMatches != null)
                {
                    strClass = aMatches[1];
                    break;
                }
            }                        
        }
        var strCurrency = "";
        switch (strClass)
        {
        case "EUR":
            strCurrency = String.fromCharCode(0x20AC);
            break;
        case "USD":
            strCurrency = "$";
            break;
        case "CZK":
            strCurrency = "Kč";
            break;
        }
        oAmountCurrency.innerHTML = strAmountCurrency.replace("REPLACE_CURRENCY", strCurrency);
    }
    else
    {
        alert("Not found");
    }
}
