/*
 ~ THIS PROGRAM IS CONFIDENTIAL AND PROPRIETARY TO HOME ACCOUNT, INC. AND MAY NOT BE REPRODUCED,
 ~ PUBLISHED OR DISCLOSED TO OTHERS WITHOUT WRITTEN AUTHORIZATION.
 ~
 ~ COPYRIGHT ? 2008, HOME ACCOUNT, INC. THIS WORK IS UNPUBLISHED.

 $Id: scripts.js 650 2009-01-13 20:46:34Z jason $
 */

Array.prototype.contains = function(obj) {
    var i = this.length;
    while (i--) {
        if (this[i] === obj) {
            return true;
        }
    }
    return false;
}

//js for switching content on and off under a specific id
function selectObject(name, elementId) {
    if (!document.getElementById) return;
    var navRoot = document.getElementById(elementId);
    if (navRoot) {
        for (i = 0; i < navRoot.childNodes.length; i++) {
            node = navRoot.childNodes[i];
            if (node.id == name) {
                node.className = "textOn";
                if (elementId == 'rateNav') {
                    node.className = 'selected';
                    textOnOff('rates');
                    textOnOff('indices');
                }
            } else {
                node.className = "textOff";
                if (elementId == 'rateNav') {
                    node.className = '';
                    textOnOff('rates');
                    textOnOff('indices');
                }
            }
        }
    }
}

function myRates(type) {
    var myRates = document.getElementById('myRates');
    myRates.className = type;
    var navRoot = document.getElementById('rateNav');
    if (navRoot) {
        for (var i = 0; i < navRoot.childNodes.length; i++) {
            var node = navRoot.childNodes[i];
            if (node.id == type) {
                node.className = "selected";
            } else {
                node.className = "";
            }
        }
    }
}

// turn items on or off, displayed or not displayed
function textOnOff() {
    for (var i = 0; i < arguments.length; i++) {
        var item = document.getElementById(arguments[i]);
        if (item.className == "textOn") {
            item.className = "textOff";
        } else {
            item.className = "textOn";
        }
    }
}
// turn items on or off, displayed or not displayed
function textOff() {
    for (var i = 0; i < arguments.length; i++) {
        var item = document.getElementById(arguments[i]);
        if (item.className == "textOn") {
            item.className = "textOff";
        }
    }
}
// turn items on or off, displayed or not displayed
function textOn() {
    for (var i = 0; i < arguments.length; i++) {
        var item = document.getElementById(arguments[i]);
        if (item.className == "textOff") {
            item.className = "textOn";
        }
    }
}


function roll(img_name, img_src) {
    document[img_name].src = img_src;
}

//grabs variables from the address bar
function getQueryVariable(variable) {
    var query = window.location.search.substring(1);
    var vars = query.split("&");
    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split("=");
        if (pair[0] == variable) {
            return pair[1];
        }
    }
    return false;
    //alert('Query Variable ' + variable + ' not found');
}

/**
 * Function that gets called from com.homeaccount.web.common.panels.FeedbackPanel
 * in order to change the LI class to "error" for the parent of the input field being validated
 */
function highlightErrors() {

    for (var i = 0; i < highlightErrors.arguments.length; i++) {
        //alert(highlightErrors.arguments[i]);
        var item = document.getElementById(highlightErrors.arguments[i]);
        if (item == null) {
            //alert(highlightErrors.arguments[i]);
            return;
        }


        if (["LI", "TR", "P"].contains(item.nodeName)) {
            item.className = "error";
        } else if ("SELECT" == item.nodeName) {
            item.className = "error";
            var parent = item.parentNode;
            //alert(parent);
            while ((parent != null) && (parent.nodeName != "LI")) {
                parent = parent.parentNode;
            }
            if (parent != null) parent.className = "error";
        } else {
            var parent = item.parentNode;
            //alert(parent);
            while ((parent != null) && (parent.nodeName != "LI")) {
                parent = parent.parentNode;
            }
            if (parent != null) parent.className = "error";
        }
    }

}
function loans(type) {
    if (type == 'purchase') {
        textOff('long');
        textOff('r_value');
        textOff('r_balance');
        textOn('p_value');
        textOn('p_balance');
    } else {
        textOn('long');
        textOn('r_value');
        textOn('r_balance');
        textOff('p_value');
        textOff('p_balance');
    }
}

function meOutcomes(type) {
    document.getElementById('govTab').className = '';
    document.getElementById('lenTab').className = '';
    document.getElementById('youTab').className = '';
    document.getElementById(type + 'Tab').className = 'selected';

    document.getElementById('govResults').className = 'textOff';
    if (document.getElementById('lenResults') != null) document.getElementById('lenResults').className = 'textOff';
    document.getElementById('youResults').className = 'textOff';
    document.getElementById(type + 'Results').className = 'textOn';

}

function wopen(url, name, w, h)
{
    // Fudge factors for window decoration space.
    // In my tests these work well on all platforms & browsers.
    w += 32;
    h += 96;
    wleft = (screen.width - w) / 2;
    wtop = (screen.height - h) / 2;
    // IE5 and other old browsers might allow a window that is
    // partially offscreen or wider than the screen. Fix that.
    // (Newer browsers fix this for us, but let's be thorough.)
    if (wleft < 0) {
        w = screen.width;
        wleft = 0;
    }
    if (wtop < 0) {
        h = screen.height;
        wtop = 0;
    }
    var win = window.open(url,
            name,
            'width=' + w + ', height=' + h + ', ' +
            'left=' + wleft + ', top=' + wtop + ', ' +
            'location=no, menubar=no, ' +
            'status=no, toolbar=no, scrollbars=no, resizable=no');
    // Just in case width and height are ignored
    win.resizeTo(w, h);
    // Just in case left and top are ignored
    win.moveTo(wleft, wtop);
    win.focus();
}

function openWindow(url_add) {
    window.open(url_add, 'Mortgage Folio', 'width=650,height=600,menubar=yes,status=yes,location=yes,toolbar=yes,scrollbars=yes,resizable=yes');
}

//Start Currency Formatting
function FormatCurrency(objNum)
{
    var numFirst = objNum.value;
    var num = numFirst.toString().replace(/\$|\,/g, '');


    var ent, dec;
    if (num != '' && num != objNum.oldvalue)
    {
        num = MoneyToNumber(num);
        if (isNaN(num))
        {
            objNum.value = objNum.oldvalue;
        }
        else
        {
            var ev = (navigator.appName.indexOf('Netscape') != -1) ? Event : event;
            if (ev.keyCode == 190 || !isNaN(num.split('.')[1]))
            {
                objNum.value = AddCommas(num.split('.')[0]) + '.' + num.split('.')[1];
            }
            else
            {
                objNum.value = AddCommas(num.split('.')[0]);
            }
            objNum.oldvalue = objNum.value;
        }
    }
}

function MoneyToNumber(num)
{
    return (num.replace(/,/g, ''));

}

function AddCommas(num)
{
    numArr = new String(num).split('').reverse();
    for (i = 3; i < numArr.length; i += 3)
    {
        numArr[i] += ',';
    }
    return numArr.reverse().join('');
}

function NumberToCurrency(val) {
    return '$' + AddCommas(val);
}

// END Currency Formatting

// Start Phone Number Formatting
function ParseUSNumber(PhoneNumber)
{
    var PhoneNumberInitialString = PhoneNumber.value;
    var FmtStr = "";
    var index = 0;
    var LimitCheck;

    LimitCheck = PhoneNumberInitialString.length;
    while (index != LimitCheck)
    {
        if (isNaN(parseInt(PhoneNumberInitialString.charAt(index))))
        {
        }
        else
        {
            FmtStr = FmtStr + PhoneNumberInitialString.charAt(index);
        }
        index = index + 1;
    }
    if (FmtStr.length == 10)
    {
        FmtStr = FmtStr.substring(0, 3) + "-" + FmtStr.substring(3, 6) + "-" + FmtStr.substring(6, 10);
    }
    else
    {
        FmtStr = PhoneNumberInitialString;
        //        alert("United States phone numbers must have exactly ten digits.");
    }
    PhoneNumber.value = FmtStr;
}
// End Phone Number Formatting

// RETURNS URL PARAMETER  - Usage: gup('ParamaterName')

function gup(name)
{
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.href);
    if (results == null)
        return "";
    else
        return results[1];
}

//Get Cookie Values

function getCookie(c_name)
{
    if (document.cookie.length > 0)
    {
        c_start = document.cookie.indexOf(c_name + "=");
        if (c_start != -1)
        {
            c_start = c_start + c_name.length + 1;
            c_end = document.cookie.indexOf(";", c_start);
            if (c_end == -1) c_end = document.cookie.length;
            return unescape(document.cookie.substring(c_start, c_end));
        }
    }
    return "";
}

function refiLinkShareAffiliate() {
    var linkShareId = $('#linkShareId').text();
    if (isNaN(linkShareId))
        return;
    var imgTag = '<img src="https://track.linksynergy.com/ep?mid=36006&skulist=order&qlist=1&amtlist=0&cur=USD&namelist=Order&ord=' + linkShareId + '" border="0" width="1" height="1" alt=""/>';
    //        alert(imgTag);
    $("#container").append(imgTag);
}

function linkShareAffiliate() {
    var linkShareId = $('#linkShareId').text();
    if (isNaN(linkShareId))
        return;
    var imgTag = '<img src="https://track.linksynergy.com/ep?mid=35882&skulist=order&qlist=1&amtlist=0&cur=USD&namelist=Order&ord=' + linkShareId + '" border="0" width="1" height="1" alt=""/>';
    //    alert(imgTag);
    $("#container").append(imgTag);
}

function autoFillRangeDropDown(relatedVariableName, dropDownName) {
    var ai = $('#' + relatedVariableName).val();
    if (ai != null && ai != '') {
        var annualIncome = parseInt(ai);
        var selectedValue = null;
        $('#' + dropDownName + ' > option').each(function() {
            var optionTxt = $(this).text().replace(/\$|\,|-/g, '').replace(/\ \ /g, ' ');
            var parts = optionTxt.split(' ');
            var lowerLimit = parts[0];
            var higherLimit = parts[1];
            if (selectedValue == null) {
                if (!isNaN(higherLimit) && (annualIncome <= parseInt(higherLimit))) {
                    selectedValue = $(this).val();
                }
                //                            alert(relatedVariableName + " = " + ai + ", ll = " + lowerLimit + ", selectedValue = " + selectedValue);
            }
        });
        if (selectedValue != null)
            $('#' + dropDownName).val(selectedValue);
    }

}

function dropDownChanged(dropDownName, relatedVariableName) {
    var v = $('#' + dropDownName + ' option:selected').val();
    if (relatedVariableName == null)
        relatedVariableName = dropDownName.replace(/DropDown/g, '');
    $('#' + relatedVariableName).val(v);
    //                alert(relatedVariableName + " set to " + $('#' + relatedVariableName).val() + ", " + v);
}

function parseCurrency(str) {
    var tmp = str;
    var _x = str.indexOf("$");
    if (_x == -1) _x = str.indexOf(",");
    if (_x != -1) {
        var _p1 = str.substr(0, _x);
        var _p2 = str.substr(_x + 1, str.length);
        tmp = parseCurrency(_p1 + _p2);
    }
    return (tmp);
}

function toNumber(str) {
    return parseFloat(str.replace(/\$|\,|-|\ |%/g, ''));
}


// START Browser/Version/OS Detection
// How to query:
// Browser name: BrowserDetect.browser
// Browser version: BrowserDetect.version
// OS name: BrowserDetect.OS

var BrowserDetect = {
    init: function () {
        this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
        this.version = this.searchVersion(navigator.userAgent)
                || this.searchVersion(navigator.appVersion)
                || "an unknown version";
        this.OS = this.searchString(this.dataOS) || "an unknown OS";
    },
    searchString: function (data) {
        for (var i = 0; i < data.length; i++) {
            var dataString = data[i].string;
            var dataProp = data[i].prop;
            this.versionSearchString = data[i].versionSearch || data[i].identity;
            if (dataString) {
                if (dataString.indexOf(data[i].subString) != -1)
                    return data[i].identity;
            }
            else if (dataProp)
                return data[i].identity;
        }
    },
    searchVersion: function (dataString) {
        var index = dataString.indexOf(this.versionSearchString);
        if (index == -1) return;
        return parseFloat(dataString.substring(index + this.versionSearchString.length + 1));
    },
    dataBrowser: [
        {
            string: navigator.userAgent,
            subString: "Chrome",
            identity: "Chrome"
        },
        {
            string: navigator.userAgent,
            subString: "OmniWeb",
            versionSearch: "OmniWeb/",
            identity: "OmniWeb"
        },
        {
            string: navigator.vendor,
            subString: "Apple",
            identity: "Safari",
            versionSearch: "Version"
        },
        {
            prop: window.opera,
            identity: "Opera"
        },
        {
            string: navigator.vendor,
            subString: "iCab",
            identity: "iCab"
        },
        {
            string: navigator.vendor,
            subString: "KDE",
            identity: "Konqueror"
        },
        {
            string: navigator.userAgent,
            subString: "Firefox",
            identity: "Firefox"
        },
        {
            string: navigator.vendor,
            subString: "Camino",
            identity: "Camino"
        },
        {
            // for newer Netscapes (6+)
            string: navigator.userAgent,
            subString: "Netscape",
            identity: "Netscape"
        },
        {
            string: navigator.userAgent,
            subString: "MSIE",
            identity: "Explorer",
            versionSearch: "MSIE"
        },
        {
            string: navigator.userAgent,
            subString: "Gecko",
            identity: "Mozilla",
            versionSearch: "rv"
        },
        {
            // for older Netscapes (4-)
            string: navigator.userAgent,
            subString: "Mozilla",
            identity: "Netscape",
            versionSearch: "Mozilla"
        }
    ],
    dataOS : [
        {
            string: navigator.platform,
            subString: "Win",
            identity: "Windows"
        },
        {
            string: navigator.platform,
            subString: "Mac",
            identity: "Mac"
        },
        {
            string: navigator.userAgent,
            subString: "iPhone",
            identity: "iPhone/iPod"
        },
        {
            string: navigator.platform,
            subString: "Linux",
            identity: "Linux"
        }
    ]

};
BrowserDetect.init();
// END Browser/Version/OS Detection
function getScroll() {
    if (document.all) {
        // We are in IE
        return top.document.documentElement.scrollTop ? top.document.documentElement.scrollTop : top.document.body.scrollTop;
    } else if (BrowserDetect.browser == 'Safari') {
        // In other browsers
        return top.pageYOffset;
    } else {
        return top.pageYOffset;
    }
}

function fixWindowVertical() {
    var myWindow = Wicket.Window.get();
    if (myWindow) {
        var top = getScroll() + 50;
        myWindow.window.style.top = top + "px";
    }
    return false;
}

function setAttribute() {
    var myWindow = Wicket.Window.get().window;
    // this is just for ie8 js fix
    myWindow.removeAttribute("class");
    myWindow.setAttribute("class", "wicket-modalCompare");
    myWindow.removeAttribute("className");
    myWindow.setAttribute("className", "wicket-modalCompare");
}

function setAttributeSignup() {
    var myWindow = Wicket.Window.get().window;
    // this is just for ie8 js fix
    myWindow.removeAttribute("class");
    myWindow.setAttribute("class", "wicket-modalSave");
    myWindow.removeAttribute("className");
    myWindow.setAttribute("className", "wicket-modalSave");
}

function highlightFormErrorsFromScripts() {
    var fields = '';
    var formId = '';

    if (highlightFormErrorsFromScripts.arguments.length > 0) {
        formId = highlightFormErrorsFromScripts.arguments[0].split("__")[0];
        //                            alert("formId = " + formId);
    }
    for (var i = 0; highlightFormErrorsFromScripts.arguments.length > i; i++) {
        var fieldId = highlightFormErrorsFromScripts.arguments[i].split("__")[1];
        if (fieldId.indexOf(".") >= 0) {
            fieldId = fieldId.replace(/\./g, "\\.").replace(/\[/g, "\\[").replace(/\]/g, "\\]");
            //                        alert("fieldId = " + fieldId + ", id = " + $('#' + formId).find('#' + fieldId).attr("id"));
        }
        $('#' + formId).find('#' + fieldId).attr("class", "error");
        $('#' + formId).find('#' + fieldId).attr("className", "error");
        var parent = $('#' + formId).find('#' + fieldId).parent();
        var parentType = parent.attr("tagName").toLowerCase();
        if (parentType != 'td') {
            $('#' + formId).find('#' + fieldId).parent().attr("class", "error");
            $('#' + formId).find('#' + fieldId).parent().attr("className", "error");
        } else {
            //                        alert("uncle = " + parent.siblings().attr("class"));
            $('#' + formId).find('#' + fieldId).parent().siblings().addClass("error");
        }
    }

}