/**
 * Serializer
 */
function serialize(form) {
    var parts = [];
    for(var i=0; i<form.elements.length; i++)
        if (form.elements[i].name && !form.elements[i].disabled)
            parts.push(form.elements[i].name+'='+encodeURIComponent(form.elements[i].value));
    
    return parts.join('&');
}

/**
 * Ajax functionality
 */
var xmlHttp = ajaxInit();

function ajaxInit() {
    var xmlHttp;
    
    if (window.ActiveXObject) {
        try {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {
            xmlHttp = false;
        }
    } else {
        try {
            xmlHttp = new XMLHttpRequest();
        } catch (e) {
            xmlHttp = false;
        }
    }
    
    if (!xmlHttp)
        alert("Ошибка создания объекта XMLHttpRequest.");
    else
        return xmlHttp;
}

function ajaxRequest(url, handler) {
    if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0) {
        xmlHttp.open("GET", url, true);
        xmlHttp.onreadystatechange = handler;
        xmlHttp.send(null);
    } else {
        setTimeout('ajaxRequest', 1000);
    }
}

function updateFieldsResponse() {
    if (xmlHttp.readyState == 4) {
        if (xmlHttp.status == 200) {
            eval(xmlHttp.responseText);
        } else {
            alert('При обращении к серверу возникли проблемы: ' + xmlHttp.statusText);
        }
    }
}

function updateFields(pif) {
    document.getElementById('submit').disabled = true;
    ajaxRequest('/includes/calculator/update_fields.php?id='+pif.value, updateFieldsResponse);
}

function submitCalculator(form) {
    ajaxRequest('/includes/calculator/calculator.php?'+serialize(form), updateResultsResponse);
    return false;
}

function updateResultsResponse() {
    if (xmlHttp.readyState == 4) {
        if (xmlHttp.status == 200) {
            document.getElementById('calc-results').innerHTML = xmlHttp.responseText;
        } else {
            alert('При обращении к серверу возникли проблемы: ' + xmlHttp.statusText);
        }
    }
}

/**
 * Other functions
 */
function setDate(fieldName, day, month, year) {
    var form = document.getElementById('calculator');
    
    form[fieldName+'[year]'].value  = year;
    form[fieldName+'[month]'].value = month;
    form[fieldName+'[day]'].value   = day;
}
 
function checkMinDate(fieldName, day, month, year) {
    var form = document.getElementById('calculator');
    
    var currentYear  = form[fieldName+'[year]'].value;
    var currentMonth = form[fieldName+'[month]'].value;
    var currentDay   = form[fieldName+'[day]'].value;
    
    if (currentYear<year || currentMonth<month || currentDay<day)
        setDate(fieldName, day, month, year);
}

function checkMaxDate(fieldName, day, month, year) {
    var form = document.getElementById('calculator');
    
    var currentYear  = form[fieldName+'[year]'].value;
    var currentMonth = form[fieldName+'[month]'].value;
    var currentDay   = form[fieldName+'[day]'].value;
    
    if (currentYear>year || currentMonth>month || currentDay>day) {
        setDate(fieldName, day, month, year);
    }
}

function checkMinPrice(price) {
    if (document.getElementById('minimum').value < price)
        document.getElementById('minimum').value = price;
}
