// lre_hval.js
//
function createAjaxRequest(){
    try {
        request = new XMLHttpRequest();
    } catch(tryMS) {
        try {
            request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(otherMS) {
            try {
                request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch(failed) {
                request = null;
            }
        }
    }
    return request;
}

function formatCurrency(num){
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num)) num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num * 100 + 0.50000000001);
    num = Math.floor(num / 100).toString();
    for(var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++){
        num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3));
    }
    return (((sign) ? '' : '-') + '$' + num);
}

function getGMTTime(){
    var tmpDate = new Date();
    var tmpYear = tmpDate.getUTCFullYear().toString();
    var tmpMon  = tmpDate.getUTCMonth() + 1;
    var tmpDay  = tmpDate.getUTCDate();
    var tmpHour = tmpDate.getUTCHours();
    var tmpMin  = tmpDate.getUTCMinutes();
    var tmpSec  = tmpDate.getUTCSeconds();

    tmpMon  = (tmpMon < 10 ? "0" + tmpMon : tmpMon).toString();
    tmpDay  = (tmpDay < 10 ? "0" + tmpDay : tmpDay).toString();
    tmpHour = (tmpHour < 10 ? "0" + tmpHour : tmpHour).toString();
    tmpMin  = (tmpMin < 10 ? "0" + tmpMin : tmpMin).toString();
    tmpSec  = (tmpSec < 10 ? "0" + tmpSec : tmpSec).toString();

    var tmpGMTTime = tmpYear + tmpMon + tmpDay + tmpHour + tmpMin + tmpSec;
    return tmpGMTTime;
}

function oHvalAddr(){
    this.street = "";
    this.city   = "";
    this.state  = "";
    this.zip    = "";
    this.lat    = 0;
    this.lng    = 0;
}
var oAddr = new oHvalAddr();

function doHval(thisForm){
    // get address from form
    var thisAddr = thisForm.addr.value;
    // get geocoded data
    var geocoder = new google.maps.ClientGeocoder();
    geocoder.setBaseCountryCode("us");
    oLocationData = geocoder.getLocations(stripSpecialChars(thisAddr), geocodeLookup);
}

function geocodeLookup(objAddress){
    if(objAddress.Status.code == G_GEO_SUCCESS){
        var oPlacemarks     = filterPlacemarks(objAddress.Placemark);
        var bAddressesFound = (oPlacemarks.length == 1);

        if(bAddressesFound){
            var oPlacemark   = oPlacemarks[0];
            var oAddressData = new Object();
            oAddressData     = getLocalityData(oPlacemark);
            oAddr.street     = oAddressData.street;
            oAddr.city       = oAddressData.city;
            oAddr.state      = oAddressData.state;
            oAddr.zip        = oAddressData.zip;
            oAddr.lat        = oAddressData.lat;
            oAddr.lng        = oAddressData.lng;
            getHval();
        } else {
            var html = "<span style=\"color:#990000; font-weight:bold;\">Address not found.</span>";
            document.getElementById("valuation").innerHTML = html;
        }
    } else {
        var html = "<span style=\"color:#990000; font-weight:bold;\">Address not found.</span>";
        document.getElementById("valuation").innerHTML = html;
    }
}

function getHval(){
    request = createAjaxRequest();

    if(request != null){
        var tmpTimeStamp = getGMTTime();
        var tmpKey = tmpTimeStamp + "|" + makeMD5Hash(tmpTimeStamp + ":hghval1");
        var hval_url = "/hval?pid=6&key=" + tmpKey + "&addr=" + escape(oAddr.street) + "&city=" + escape(oAddr.city) + "&state=" + oAddr.state;

        request.open("GET", hval_url, true);
        request.onreadystatechange = displayHval;
        request.send(null);
    }
}

function displayHval(){
    if(request.readyState == 4){
        if(request.status == 200){
            var xmlData = request.responseXML;
            if(xmlData.getElementsByTagName("error").length <= 0){
                var minValue  = xmlData.getElementsByTagName("valuation")[0].getAttribute("low-value");
                var maxValue  = xmlData.getElementsByTagName("valuation")[0].getAttribute("hi-value");
                var hvalPrice = formatCurrency((parseInt(minValue) + parseInt(maxValue)) / 2);
                var cmaUrl    = "/hpx03/get_cma?fresh_search=1&streetaddress=" + escape(oAddr.street) + "&city=" + escape(oAddr.city) + "&state=" + oAddr.state + "&zip=" + oAddr.zip + "&ht=local_real_estate";
                var html      = "<i><b><span style=\"color:#DA421E; font-size:16px;\">Quick Estimate:</span> <a href=\"/homevalues?addr=" + escape(oAddr.street + ", " + oAddr.city + ", " + oAddr.state + " " + oAddr.zip) + "\" class=\"hval_value\">" + hvalPrice + "</a></b></i><br /><a href=\"" + cmaUrl + "\" style=\"font-size:11px; line-height:25px;\">Request Complete Home Value Estimate</a>";
                document.getElementById("valuation").innerHTML = html;
            } else {
                var html = "<span style=\"color:#990000; font-weight:bold;\">Address not found.</span>";
                document.getElementById("valuation").innerHTML = html;
            }
        }
    }
}
