
function makeRequest(url) {
    var http_request = false;

    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }

    if (!http_request) {
        alert('Giving up :( Cannot create an XMLHTTP instance');
        return false;
    }
    http_request.onreadystatechange = function() {
        updateFormRequest(http_request);
    };
    http_request.open('GET', url, true);
    http_request.send(null);
}

function updateFormRequest(http_request) {
    if (http_request.readyState == 4) {
        if (http_request.status == 200) {
            var num = http_request.responseText;
            setFormData("LumpSum", commafy(Math.round(num)));
            setFormData("RemainingFunds", commafy(Math.round((getFormData("Balance") * 1) - num)));
        } else {
            alert('There was a problem with the request.');
        }
    }
}

function log(what) {
    if(window.console) {
        console.log(what);
    }
}

var numb = '0123456789.';
var lwr = 'abcdefghijklmnopqrstuvwxyz';
var upr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

function isValid(parm,val) {
    if (parm == "") return true;
    for (i=0; i<parm.length; i++) {
        if (val.indexOf(parm.charAt(i),0) == -1) return false;
    }
    return true;
}

function isNum(parm) {return isValid(parm,numb);}
function isLower(parm) {return isValid(parm,lwr);}
function isUpper(parm) {return isValid(parm,upr);}
function isAlpha(parm) {return isValid(parm,lwr+upr);}
function isAlphanum(parm) {return isValid(parm,lwr+upr+numb);}

/****************************************************************/


var data = new Object;


function getFormData(id) {
    if(document.getElementById(id)) {
        return document.getElementById(id).value;
    }
    else {
        return false;
    }
}

function setFormData(id, value) {
    if(document.getElementById(id)) {
        return document.getElementById(id).value = value;
    }
    else {
        return false;
    }
}

function updateData() {

    data = {
        pricipal: getFormData("pricipal"),
        interest: getFormData("interest"),
        years: getFormData("years")
    };
}

function performError(id) {
    el = document.getElementById(id);
    el.style.borderColor = "red";
    el.style.borderStyle = "solid";
}

function removeError(id) {
    el = document.getElementById(id);
    el.style.borderColor = "#dedede";
    el.style.borderStyle = "solid";
}

function checkData() {

    var ok = true;

    var numArray = Array (
        "pricipal",
        "interest",
        "years"
    );

    for(var i = 0; i < numArray.length; i++) {
        if(isNum(data[numArray[i]]) && data[numArray[i]].length > 0) {
            removeError(numArray[i]);
        }
        else {
            performError(numArray[i]);
            ok = false;
        }
    }

    if(ok) {
        document.getElementById('mortgageError').style.visibility = "hidden";
        document.getElementById('mortgageResult').style.visibility = "visible";
    }
    else {
        document.getElementById('mortgageError').style.visibility = "visible";
        document.getElementById('mortgageResult').style.visibility = "hidden";
    }

    return ok;
}


function updateForm() {
    today = new Date();

    var principal = getFormData("pricipal") * -1;
    var rate = getFormData("interest");
    var period = getFormData("years");


    var term = 52;
    var r = rate / 100 / term;
    var weekly = -(principal*r)/(1-(1/Math.pow(1+r,(period * term))));

    var term = 26;
    var r = rate / 100 / term;
    var fortnightly = -(principal*r)/(1-(1/Math.pow(1+r,(period * term))));

    var term = 12;
    var r = rate / 100 / term;
    var monthly = -(principal*r)/(1-(1/Math.pow(1+r,(period * term))));


    setFormData("monthly", '£'+Math.round(monthly * 100) / 100);
    setFormData("fortnightly", '£'+Math.round(fortnightly * 100) / 100);
    setFormData("weekly", '£'+Math.round(weekly * 100) / 100);

    if(document.getElementById('copyright')) {
        document.getElementById('copyright').style.display = "none";
    }
    document.getElementById('calculator').style.backgroundImage = "url(images/calculator2.gif)";
    document.getElementById('calculator').style.height = "250px";

    //request = 'calc.php';
    //makeRequest(request);
}

function changeForm() {

    updateData();

    if(checkData()) {
        updateForm();
    }
}

function changeElement() {
    this.focus();
    this.select();
}

function allowEdit() {
    fields = document.getElementsByTagName('textarea');
    for (i = 0; i < fields.length; i++) {
        if (fields[i].className.indexOf('change') != -1) {
            fields[i].onClick = changeElement;
            fields[i].onchange = changeForm;
        }
    }

    fields = document.getElementsByTagName('input');
    for (i = 0; i < fields.length; i++) {
        if (fields[i].className.indexOf('change') != -1) {
            fields[i].onclick = changeElement;
            fields[i].onchange = changeForm;
        }
    }

    fields = document.getElementsByTagName('select');
    for (i = 0; i < fields.length; i++) {
        if (fields[i].className.indexOf('change') != -1) {
            //fields[i].onclick = changeElement;
            fields[i].onchange = changeForm;
        }
    }
}

function preventEdit() {
    fields = document.getElementsByTagName('textarea');
    for (i = 0; i < fields.length; i++) {
        if (fields[i].className.indexOf('readonly') != -1) {
            fields[i].readOnly = true;
            fields[i].tabIndex = -1;
        }
    }

    fields = document.getElementsByTagName('input');
    for (i = 0; i < fields.length; i++) {
        if (fields[i].className.indexOf('readonly') != -1) {
            fields[i].readOnly = true;
            fields[i].tabIndex = -1;
        }
    }
}

function init() {
    allowEdit();
    preventEdit();
    //changeForm();
}

window.onload = init;
