﻿function setfocus(id) {
    document.getElementById(id).focus();
}









function changeFeatured(x) {
    if (x == 'previous') {
        if (document.getElementById('featlink1').className == 'current') x = 5;
        else if (document.getElementById('featlink2').className == 'current') x = 1;
        else if (document.getElementById('featlink3').className == 'current') x = 2;
        else if (document.getElementById('featlink4').className == 'current') x = 3;
        else if (document.getElementById('featlink5').className == 'current') x = 4;
    }
    if (x == 'next') {
        if (document.getElementById('featlink1').className == 'current') x = 2;
        else if (document.getElementById('featlink2').className == 'current') x = 3;
        else if (document.getElementById('featlink3').className == 'current') x = 4;
        else if (document.getElementById('featlink4').className == 'current') x = 5;
        else if (document.getElementById('featlink5').className == 'current') x = 1;
    }    
    if (x!= 'previous' && x!='next'){   
        currentL = 'featlink' + x;
        //nav links IE
        if (navigator.appName == "Microsoft Internet Explorer") {
            document.getElementById('featlink1').setAttribute("className", "");
            document.getElementById('featlink2').setAttribute("className", "");
            document.getElementById('featlink3').setAttribute("className", "");
            document.getElementById('featlink4').setAttribute("className", "");
            document.getElementById('featlink5').setAttribute("className", "");
            document.getElementById(currentL).setAttribute("className", "current");
        }
        else {
            //nav links FF
            document.getElementById('featlink1').setAttribute("class", "");
            document.getElementById('featlink2').setAttribute("class", "");
            document.getElementById('featlink3').setAttribute("class", "");
            document.getElementById('featlink4').setAttribute("class", "");
            document.getElementById('featlink5').setAttribute("class", "");
            document.getElementById(currentL).setAttribute("class", "current");
        }


        //list items
        try { document.getElementById('feat1').style.display = 'none'; } catch (err) { }
        try { document.getElementById('feat2').style.display = 'none'; } catch (err) { }
        try { document.getElementById('feat3').style.display = 'none'; } catch (err) { }
        try { document.getElementById('feat4').style.display = 'none'; } catch (err) { }
        try { document.getElementById('feat5').style.display = 'none'; } catch (err) { }
        try { document.getElementById('feat6').style.display = 'none'; } catch (err) { }
        try { document.getElementById('feat7').style.display = 'none'; } catch (err) { }
        try { document.getElementById('feat8').style.display = 'none'; } catch (err) { }
        try { document.getElementById('feat9').style.display = 'none'; } catch (err) { }
        try { document.getElementById('feat10').style.display = 'none'; } catch (err) { }
        try { document.getElementById('feat11').style.display = 'none'; } catch (err) { }
        try { document.getElementById('feat12').style.display = 'none'; } catch (err) { }
        try { document.getElementById('feat13').style.display = 'none'; } catch (err) { }
        try { document.getElementById('feat14').style.display = 'none'; } catch (err) { }
        try { document.getElementById('feat15').style.display = 'none'; } catch (err) { }

        try { document.getElementById('feat' + x).style.display = 'block'; } catch (err) { }           
        y = 5 + x;

        try { document.getElementById('feat' + y).style.display = 'block'; } catch (err) { }
        z = 10 + x;
        
        try { document.getElementById('feat' + z).style.display = 'block'; } catch (err) { } 
    }   
}


function mudaClasse(id) {

    var obj = document.getElementById(id);

    if (obj.className == 'unidade meia') obj.className = 'unidade';
    else obj.className = 'unidade meia';        

}


// clear default value of input box
// params: (object to test)
function clearDefault(el) { if (el.defaultValue == el.value) el.value = "" }

// restore default value of input box
// params: (object to test)
function restoreDefault(el) { if (el.value == "") el.value = el.defaultValue; }

// toggles visibility of an element based on state
// params: (id of element, true/false state)
function toggleVis(id, state) {

    var obj = document.getElementById(id);

    if (obj) {
        if (!obj.isDisabled) {
            if (obj.style) {
                if (state == true) { obj.style.display = 'block'; } else { obj.style.display = 'none'; }
            } else {
                if (state == true) { obj.display = 'block'; } else { obj.display = 'none'; }
            }
        }
    }
}

// toggles visibility of an element based on state
// params: (id of element, true/false state)
function toggleVis2(id, state) {

    document.getElementById('sm-about-us').style.display = 'none';
    document.getElementById('sm-res-sales').style.display = 'none';
    document.getElementById('sm-res-let').style.display = 'none';
    document.getElementById('sm-comm').style.display = 'none';
    document.getElementById('sm-val').style.display = 'none';
    document.getElementById('sm-prop').style.display = 'none';
    //document.getElementById('sm-cont').style.display = 'none';

    if (state == true) document.getElementById(id).style.display = 'block';

}

// toggles visibility of an element based on state AND change classes of elements
// params: (id of target, id of button, true/false state)
function toggleVis3(target, btn) {

    var obj = document.getElementById(target);
    var blink = document.getElementById(btn);

    try {document.getElementById("gal_photos").style.display = 'none'; document.getElementById("gal_p").setAttribute("class", ""); } catch (err) { }
    try {document.getElementById("gal_video").style.display = 'none'; document.getElementById("gal_v").setAttribute("class", ""); } catch (err) { }
    try {document.getElementById("gal_floorplan").style.display = 'none'; document.getElementById("gal_f").setAttribute("class", ""); } catch (err) { }
    
    try {document.getElementById("gal_photos").style.display = 'none'; document.getElementById("gal_p").setAttribute("className", ""); } catch (err) { }
    try {document.getElementById("gal_video").style.display = 'none'; document.getElementById("gal_v").setAttribute("className", ""); } catch (err) { }
    try {document.getElementById("gal_floorplan").style.display = 'none'; document.getElementById("gal_f").setAttribute("className", ""); } catch (err) { }

    try {obj.style.display = 'block'; } catch (err) { }
    try {blink.setAttribute("class", "current"); } catch (err) { }
    try { blink.setAttribute("className", "current"); } catch (err) { }

}

// toggles visibility of an element hidding the others
// params: (market)
function toggleVis4(market) {

    document.getElementById('dvSales').style.display = 'none';
    document.getElementById('dvLettings').style.display = 'none';
    document.getElementById('dvCommercial').style.display = 'none';
    document.getElementById("lnkSales").setAttribute("className", "sales-off");
    document.getElementById("lnkLets").setAttribute("className", "lettings-off");
    document.getElementById("lnkComm").setAttribute("className", "commercial-off");
    document.getElementById("lnkSales").setAttribute("class", "sales-off");
    document.getElementById("lnkLets").setAttribute("class", "lettings-off");
    document.getElementById("lnkComm").setAttribute("class", "commercial-off");
    document.getElementById('ftSales').style.display = 'none';
    document.getElementById('ftLettings').style.display = 'none';
    document.getElementById('ftCommercial').style.display = 'none';
    

    if (market == "sales") {
        document.getElementById("dvSales").style.display = 'block';
        document.getElementById("lnkSales").setAttribute("className", "sales-on");
        document.getElementById("lnkSales").setAttribute("class", "sales-on");
        document.getElementById('ftSales').style.display = 'block';
    }
    else if (market == "lettings") {
        document.getElementById("dvLettings").style.display = 'block';
        document.getElementById("lnkLets").setAttribute("className", "lettings-on");
        document.getElementById("lnkLets").setAttribute("class", "lettings-on");
        document.getElementById('ftLettings').style.display = 'block';
    }
    else {
        document.getElementById("dvCommercial").style.display = 'block';
        document.getElementById("lnkComm").setAttribute("className", "commercial-on");
        document.getElementById("lnkComm").setAttribute("class", "commercial-on");
        document.getElementById('ftCommercial').style.display = 'block';
    }

}

// sets the value of a specified field (if it exists)
// params: (id of element, value)
function setFieldVal(id, val) {

    var obj = document.getElementById(id);

    if (obj) { if (!obj.isDisabled) { obj.value = val; } }
}

// adds values from input and sends to output
// params: (id of elements involved, output element)
function addFieldVals(id1, id2, id3, output) {

    var obj1 = document.getElementById(id1);
    var obj2 = document.getElementById(id2);
    var obj3 = document.getElementById(id3);
    var total = 0;

    if (obj1) { if (!obj1.isDisabled) { total += parseInt(obj1.value); } }
    if (obj2) { if (!obj2.isDisabled) { total += parseInt(obj2.value); } }
    if (obj3) { if (!obj3.isDisabled) { total += parseInt(obj3.value); } }

    setFieldVal(output, total);
}

// takes values from input, multiplies them by respective values and sends to output
// params: (id of elements involved, mulitplier values, output element)
function addFieldVals_multi(id1, id2, id3, multi1, multi2, multi3, output) {

    var obj1 = document.getElementById(id1);
    var obj2 = document.getElementById(id2);
    var obj3 = document.getElementById(id3);
    var total = 0;

    if (obj1) { if (!obj1.isDisabled) { total += parseInt(obj1.value) * multi1; } }
    if (obj2) { if (!obj2.isDisabled) { total += parseInt(obj2.value) * multi2; } }
    if (obj3) { if (!obj3.isDisabled) { total += parseInt(obj3.value) * multi3; } }

    setFieldVal(output, total);
}

// adds values from input and sends to output (MONEY-FORMAT VERSION)
// params: (id of elements involved, output element)
function addMoneyVals(id1, id2, id3, output) {

    var obj1 = document.getElementById(id1);
    var obj2 = document.getElementById(id2);
    var obj3 = document.getElementById(id3);
    var total = 0;

    if (obj1) { if (!obj1.isDisabled) { total += parseFloat(obj1.value.replace(/,/, '')); } }
    if (obj2) { if (!obj2.isDisabled) { total += parseFloat(obj2.value.replace(/,/, '')); } }
    if (obj3) { if (!obj3.isDisabled) { total += parseFloat(obj3.value.replace(/,/, '')); } }

    setFieldVal(output, formatMoney(total, 2, '.', ','));
}

formatMoney = function(n, c, d, t) {
    var c = isNaN(c = Math.abs(c)) ? 2 : c, d = d == undefined ? "," : d, t = t == undefined ? "." : t, s = n < 0 ? "-" : "", i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
    return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
};

// converts sq. feet to sq. metres and vice versa (also hectares to acres)
// params: (value, type of conversion, output)
function convertSize(val, type, output) {

    var input = val.value.replace(/,/, '');
    var total = 0;

    if (type == 'tosqfeet') { if (isValidNumber(input)) { total = Math.round(input * 10.76); } }
    if (type == 'tosqmetre') { if (isValidNumber(input)) { total = Math.round(input * 0.0929); } }
    if (type == 'tohectares') { if (isValidNumber(input)) { total = Math.round(input * 0.4047); } }
    if (type == 'toacres') { if (isValidNumber(input)) { total = Math.round(input * 2.471); } }

    setFieldVal(output, formatMoney(total, 2, '.', ',').slice(0, -3)); //output value with "thousands" separator
}

function isValidNumber(inpString) {
    return /^[-+]?\d+(\.\d+)?$/.test(inpString);
}

// disables the output control if the primary element's value is 0. Used by BER input.
// params: (id of elements involved, output element)
function checkBER(id, output) {

    var obj = document.getElementById(id);
    var objoutput = document.getElementById(output);

    if (obj && objoutput) {
        if (!obj.isDisabled && !objoutput.isDisabled) {
            if (obj.value == '0') { objoutput.disabled = true; objoutput.style.background = '#cccccc'; }
            else { objoutput.disabled = false; objoutput.style.background = '#ffffff'; }
        }
    }
}

// select (or deselect) all checkboxes based on status of a parent checkbox
// params: (input checkbox)
function checkAll(chk) {

    for (var i = 0; i < document.forms[0].elements.length; i++) {
        if (document.forms[0].elements[i].type == 'checkbox') {

            if (chk.checked == true) { document.forms[0].elements[i].checked = true; }
            else { document.forms[0].elements[i].checked = false; }
        }
    }
}

//////////////////////////////////////////////////////////////////////////////////////

// Global validation variable
var validationErrorArray = null;

// Create an error array
function createErrorArray() {
    return new Array();
}

// Add an error
function addError(errorMsg, item, errorArray, skip) {
    if (skip)
        return false;

    if (errorArray == null) {
        if (validationErrorArray == null)
            validationErrorArray = createErrorArray();

        errorArray = validationErrorArray;
    }

    var i = errorArray.length;
    errorArray.length += 2;
    errorArray[i] = errorMsg;
    errorArray[i + 1] = item;

    return false;
}

// Check and display error if any
function checkError(errorArray) {
    if (errorArray == null)
        errorArray = validationErrorArray;

    if (errorArray != null && errorArray.length > 0) {
        var i, focus,
		msg = "Some fields were not entered correctly:\n\n";

        // Add each error to output
        for (i = 0; i < errorArray.length; i += 2) {
            msg += errorArray[i] + "\n";

            if (focus == null && errorArray[i + 1] != null)
                focus = errorArray[i + 1];
        }

        clearErrors(errorArray);

        alert(msg);
        //if(focus != null)
        //focus.focus();
        return false;
    }
    return true;
}

// Clear any errors
function clearErrors(errorArray) {
    if (errorArray == null)
        validationErrorArray = null;
    else {
        if (validationErrorArray == errorArray)
            validationErrorArray = null;
        errorArray = null;
    }
}

// Check if item is valid
function checkItem(item, field) {
    if (item == null) {
        addError("Script error: " + field + " item is invalid", null);
        return false;
    }
    return true;
}

// Check if item contains only valid characters
function checkCharSet(string, charSet) {
    var i = 0;
    while (i < string.length && charSet.indexOf(string.charAt(i)) >= 0)
        i++;

    return (i == string.length);
}

// Check for a valid number from character set
function checkNumberCharSet(item, field, required, charSet) {
    if (!checkItem(item, field))
        return false;

    var number = item.value;
    field = field.replace(":", "");
    field = field.replace("?", "");

    if (required && number == "")
        return addError(field + " is required.", item);
    else {
        if (!checkCharSet(number, charSet) || isNaN(number))
            return addError(field + " may only contain valid numbers.", item, null, field == null);
        return true;
    }
}

// Check for a valid number
function checkNumber(item, field, required) {

    field = field.replace(":", "");
    field = field.replace("?", "");
    field = trim(field);

    if (item.value.indexOf(" ") != -1) {
        return addError(field + " cannot contain spaces.", item, null, field == null);
    }

    if (item.value.indexOf(",") != -1) {
        return addError(field + " cannot contain commas.", item, null, field == null);
    }

    return checkNumberCharSet(item, field, required, "0123456789.,");
}

function formatNumber(num, dec, thou, pnt, n1) {
    var x = Math.round(num * Math.pow(10, dec));
    if (x >= 0) n1 = '';
    var y = ('' + Math.abs(x)).split('');
    var z = y.length - dec;
    if (z < 0) z--;
    for (var i = z; i < 0; i++)
        y.unshift('0');
    y.splice(z, 0, pnt);
    if (y[0] == pnt)
        y.unshift('0');
    while (z > 3) {
        z -= 3;
        y.splice(z, 0, thou);
    }
    var r = n1 + y.join('');
    return r;
}

// Trim a string
function trim(str) {
    var i = 0, j = str.length - 1;
    while (i < j && str.charAt(i) == ' ')
        i++;
    while (j > i && str.charAt(j) == ' ')
        j--;

    return str.substring(i, j + 1);
}

// Check if the first item is selected
function checkDropdown(item, field) {
    if (!checkItem(item, field))
        return false;
    field = field.replace(":", "");
    field = field.replace("?", "");
    if (item.selectedIndex == 0)
        return addError(field + " must be selected.", item, null, field == null);
    return true;
}

// Repayments calculator
// params: (id_totalrepay,id_repayamt,id_repayrt,id_repayyrs)
function calculateRepayments(id_totalrepay,id_repayamt,id_repayrt,id_repayyrs) {
    document.getElementById(id_totalrepay).value = '';
    var amount = document.getElementById(id_repayamt);
    var interest = document.getElementById(id_repayrt);
    var time = document.getElementById(id_repayyrs);

    checkNumber(amount, "Borrow Amount", true);
    checkNumber(interest, "Interest Rate", true);
    checkNumber(time, "Time", true);

    if (amount.value == 0 || interest.value == 0 || time.value == 0)
        addError("Please enter non-zero values.");

    if (checkError()) {
        var total = (amount.value * (interest.value / 1200)) / (1 - (Math.pow((1 + (interest.value / 1200)), -(time.value * 12))));
        document.getElementById(id_totalrepay).value = formatNumber(total, 2, ',', '.', '-');
    }
}

// Repayments calculator
// params: (id_totalrepay,id_stampbuyer,id_stampval,id_stamptotal)
function calculateStampDuty(id_totalrepay,id_stampbuyer,id_stampval,id_stamptotal) {
    document.getElementById(id_totalrepay).value = '';
    var buyerType = document.getElementById(id_stampbuyer);
    var propertyValue = document.getElementById(id_stampval);

    checkDropdown(buyerType, "Buyer type", true);
    checkNumber(propertyValue, "Property value", true);

    if (checkError()) {
        if (buyerType.selectedIndex == 1) {
            document.getElementById(id_stamptotal).value = 0;
        } else {
            if (propertyValue.value <= 125000) {
                document.getElementById(id_stamptotal).value = 0;
            }
            else {
                if (propertyValue.value <= 1000000) {
                    stampDuty = (propertyValue.value - 125000) * 0.07;
                }
                else {
                    pc7 = (875000) * 0.07;
                    pc9 = (propertyValue.value - 1000000) * 0.09;
                    stampDuty = pc7 + pc9;
                }

                document.getElementById(id_stamptotal).value = parseInt(stampDuty); //formatNumber(stampDuty,2,',','.','-'); 
            }
        }
    }
}

// opens popup window
// params: (url to open, width of window, height of window)
function openWin(url, w, h) {
    window.open(url, 'gwwin', 'width=' + w + ',height=' + h + ',toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,copyhistory=no,resizable=yes');
}

