﻿var dom = YAHOO.util.Dom;

function ValidateUserInput()
{
    var addressDefault = 'Enter Address';
    var cityDefault = 'Enter City & State or Zip';
    var address = dom.get('input-zillow-address');
    var city = dom.get('input-zillow-city-state-zip');

    if (address.value == addressDefault || city.value == cityDefault || (city.value) == '' || trimAll(address.value) == '') {
        address.value = addressDefault;
        city.value = cityDefault;
        dom.setStyle('input-header', 'color', 'red');
        return false;
    }
    else {
        dom.setStyle('input-header', 'color', '');
        return true;
    }
}

function FlipZillow(act) {
    var input = document.getElementById("zillow-input");
    var output = document.getElementById("zillow-output");
    if (act == "input") {
        dom.setStyle(input, 'display', 'block');
        dom.setStyle(output, 'display', 'none');
    }
    else {
        dom.setStyle(input, 'display', 'none');
        dom.setStyle(output, 'display', 'block');
    }
    return false;
}

var ZillowXhr = {
    handleSuccess: function(o) {
        FlipZillow("output");
        var cmd = YAHOO.lang.JSON.parse(o.responseText);
        if (cmd.Estimate != "0") {
            dom.get("zilOutAddress1").innerHTML = cmd.Address.Street1;
            if (dom.get("zilOutAddress2").innerHTML != "") {
                dom.setStyle("zilOutAddress2", "display", "block");
                dom.get("zilOutAddress2").innerHTML = cmd.Address.Street2;
            }
            else dom.setStyle("zilOutAddress2", "display", "none");
            var addrLine = cmd.Address.City + ", " + cmd.Address.State.Name + " " + cmd.Address.PostalCode;
            dom.get("zilOutCityInfo").innerHTML = addrLine;
            dom.get("zilOutEstimate").innerHTML = formatCurrency(cmd.Estimate);

            dom.get("input-zillow-address").value = cmd.Address.Street1;
            dom.get("input-zillow-city-state-zip").value = addrLine;
        }
        else {
            FlipZillow("output");
            dom.get("zilOutAddress1").innerHTML = dom.get("input-zillow-address").value;
            dom.get("zilOutAddress2").innerHTML = "";
            dom.get("zilOutCityInfo").innerHTML = dom.get("input-zillow-city-state-zip").value;
            dom.get("zilOutEstimate").innerHTML = "Not Available";
        }
    },
    handleFailure: function(o) {
        dom.get("zilOutAddress1").innerHTML = dom.get("input-zillow-address").value;
        dom.get("zilOutAddress2").innerHTML = "";
        dom.get("zilOutCityInfo").innerHTML = dom.get("input-zillow-city-state-zip").value;
        dom.get("zilOutEstimate").innerHTML = "Not Available";
    },
    startRequest: function() {
        if (ValidateUserInput()) {
            var cmd = {
                Address: dom.get("input-zillow-address").value,
                CityInfo: dom.get("input-zillow-city-state-zip").value
            };
            var jsonStr = YAHOO.lang.JSON.stringify(cmd);
            YAHOO.util.Connect.asyncRequest('POST', CONST_XHR_PATH + "search.zillow", ZillowAsync, "json=" + jsonStr);
        }
        return false;
    }
};

var ZillowAsync = {
    success: ZillowXhr.handleSuccess,
    failure: ZillowXhr.handleFailure,
    scope: ZillowXhr
};

jQuery(document).ready(function() {
    jQuery('#submit-zillow-go').click(function() {
        ZillowXhr.startRequest()
    });

    jQuery('#zilOutAgain').click(function() {
        FlipZillow('input')
    });

    jQuery('#zillow-form').find("input[type='text']").bind("keypress", function(e) {
        if (13 == e.keyCode)
            ZillowXhr.startRequest();
    });
})

function formatCurrency(num) {
    var numArr = num.toString().split('');
    var outNum = "";
    var len = numArr.length

    for (i = len - 1; i >= 0; i--)
    {
        if ((len - i) % 3 == 1 && i < len - 1)
            outNum = "," + outNum;
        outNum = numArr[i] + outNum;
    }
    return "$" + outNum;
}