﻿/*************************/
/* Auto-Complete Scripts */
/*************************/
var CitiesXhr = {
    oACDS: null,
    oAutoComp: null,
    res: null,
    getCities: function() {
        return CitiesXhr.res.Utility.Cities;
    },
    handleSuccess: function(o) {
        // Instantiate JS Function DataSource
        CitiesXhr.res = YAHOO.lang.JSON.parse(o.responseText);
        // add recent searches
        var recentSearches = YAHOO.util.Cookie.get("RS");
        if (recentSearches) {
            var rs = recentSearches.split('|');
            CitiesXhr.res.Utility.Cities = CitiesXhr.res.Utility.Cities.concat(rs);
        }
        CitiesXhr.buildAutoComplete();
    },
    buildAutoComplete: function() {
        CitiesXhr.oACDS = new YAHOO.widget.DS_JSArray(CitiesXhr.res.Utility.Cities);
        CitiesXhr.oACDS.queryMatchContains = true;
        CitiesXhr.oACDS.queryMatchSubset = true;
        // Instantiate AutoComplete
        CitiesXhr.oAutoComp = new YAHOO.widget.AutoComplete('input-address', 'searchListingQueryContainer', CitiesXhr.oACDS);
        CitiesXhr.oAutoComp.minQueryLength = 1;
        CitiesXhr.oAutoComp.typeAhead = false;
        CitiesXhr.oAutoComp.formatResult = function(aResultItem, sQuery) {
            var sKey = aResultItem[0]; // the entire result key
            var mKey = aResultItem[0].toLowerCase();
            var mQuery = sQuery.toLowerCase();
            var begin = mKey.indexOf(mQuery) + 0;
            var end = mKey.indexOf(mQuery) + mQuery.length;
            var sKeyPre = (begin == 0) ? "" : sKey.substring(0, begin);
            var sKeyQuery = sKey.substring(begin, (end)); // the query itself
            var sKeyPost = sKey.substr(end); // the rest of the result
            var aMarkup = ["<div>",
              sKeyPre,
              "<span style='font-weight:bold'>",
              sKeyQuery,
              "</span>",
              sKeyPost,
              "</div>"];
            return (aMarkup.join(""));
        };
    },
    handleFailure: function(o) {
        //alert("No Xhr Response");
    },
    startRequest: function() {
        YAHOO.util.Connect.asyncRequest('POST', CONST_XHR_PATH + "cities.utility", citiesAsync, "");
    },
    rebuildCities: function(newVal) {
        CitiesXhr.res.Utility.Cities = CitiesXhr.res.Utility.Cities.concat(newVal);
        CitiesXhr.buildAutoComplete();
    }
};
var citiesAsync = {
    success: CitiesXhr.handleSuccess,
    failure: CitiesXhr.handleFailure,
    scope: CitiesXhr
};

function getOnlyZip(v) {
var z = /^(\d{5}$)|^(\d{5}-\d{4}$)/;
var result = z.exec(v);
return result ? result[0] : null;
}

function getZip(v) {
var z = /(\d{5}$)|(\d{5}-\d{4}$)/;
var result = z.exec(v);
return result ? result[0] : null;
}

function checkCommandParameter(id) {
var val = document.getElementById(id).value;
return (val != null && val != "") ? val : null;
}

function checkCommandNumberParameter(id) {
    var val = Number(document.getElementById(id).value.replace(/\D/g, ''));
    return (!isNaN(val) > 0) ? val : 0;
}

function checkListBoxParameter(id) {
    var selectVal = YAHOO.util.Dom.get(id).innerHTML;
    var outval;
    
    switch (selectVal) {
        case "Any":
            outval = 0;
            break;
        case "1+":
            outval = 1;
            break;
        case "2+":
            outval = 2;
            break;
        case "3+":
            outval = 3;
            break;
        case "4+":
            outval = 4;
            break;
        case "5+":
            outval = 5;
            break;
    }
    return outval;
}

function syncFormToCommand(cmd) {
    cmd.Query = checkCommandParameter('input-address');
    cmd.MinPrice = checkCommandNumberParameter('input-price-from');
    cmd.MaxPrice = checkCommandNumberParameter('input-price-to');
    cmd.MinBedrooms = checkListBoxParameter('input-button-beds-button');
    cmd.MinBathrooms = checkListBoxParameter('input-button-baths-button');
    cmd.SingleFamily = cmd.MultiFamily = cmd.Townhouse = cmd.Condo = cmd.Coop = cmd.Farm = cmd.Land = false;
    switch (YAHOO.util.Dom.get('input-button-property-type-button').innerHTML) {
        case 'Single-Family':
            cmd.SingleFamily = true;
            break;
        case 'Multi-Family':
            cmd.MultiFamily = true;
            break;
        case 'TownHouse':
            cmd.Townhouse = true;
            break;
        case 'Condo':
            cmd.Condo = true;
            break;
        case 'Co-op':
            cmd.Coop = true;
            break;
        case 'Farm':
            cmd.Farm = true;
            break;
        case 'Land':
            cmd.Land = true;
            break;
    }
    return cmd;
}

function syncFormToNewCommand() {
var cmd = {};
return syncFormToCommand(cmd);
}

function validateSearchListingQuery(frm) {
    var v = YAHOO.util.Dom.get('input-address').value;
    if (v == defaultSearchText) {
        return false;
    } 
    else {
        IdxXhr.startRequest(SearchMlsXhr.startRequest, null);
        return false;
    }
}

function validateSearchListingQueryCallback() {
    var frm = document.getElementById('searchListingForm');
    var searchStr = makeSearchString(false);
    currentSearchString = searchStr;
    frm.action = CONST_BASE_PATH + "Views/Listings/Default.aspx#s=" + (searchStr !== null ? searchStr : "");
    frm.submit();
}

function addNumSearchParam(id) {
    var val = Number(document.getElementById(id).value.replace(/\D/g, ''));
    return !isNaN(val) && val != 0;
}

function addlistParam(id) {
    var val = YAHOO.util.Dom.get(id).innerHTML;
    return val != "Any";
}

function makeSearchString(fromResults) {
    var searchStr = "search-main=" + checkCommandParameter('input-address');
    if (addNumSearchParam('input-price-from')) {
        searchStr += (searchStr !== "" ? "|" : "") + (('search-min-price') + '=' + (checkCommandNumberParameter('input-price-from')));
    }
    if (addNumSearchParam('input-price-to')) {
        searchStr += (searchStr !== "" ? "|" : "") + (('search-max-price') + '=' + (checkCommandNumberParameter('input-price-to')));
    }
    if (addlistParam('input-button-beds-button')) {
        searchStr += (searchStr !== "" ? "|" : "") + (('bed-count') + '=' + (checkListBoxParameter('input-button-beds-button')));
    }
    if (addlistParam('input-button-baths-button')) {
        searchStr += (searchStr !== "" ? "|" : "") + (('bath-count') + '=' + (checkListBoxParameter('input-button-baths-button')));
    }
    switch (YAHOO.util.Dom.get('input-button-property-type-button').innerHTML) {
        case 'Single-Family':
            searchStr += "|type-single=1";
            break;
        case 'Multi-Family':
            searchStr += "|type-multi=1";
            break;
        case 'TownHouse':
            searchStr += "|type-townhouse=1";
            break;
        case 'Condo':
            searchStr += "|type-condo=1";
            break;
        case 'Co-op':
            searchStr += "|type-coop=1";
            break;
        case 'Farm':
            searchStr += "|type-farm=1";
            break;
        case 'Land':
            searchStr += "|type-land=1";
            break;
    }
    return searchStr;
}

function clearSearchForm() {
    var frmEls = document.getElementById('searchListingForm').elements;
    for (i = 0; i < frmEls.length; i++) {
        frmEls[i].value = "";
    }
}

/****************************/
/* Search Scripts   */
/****************************/
        
var SearchMlsXhr = {
    callback: null,
    handleSuccess: function(o) {
        var cmd = YAHOO.lang.JSON.parse(o.responseText);
        if (cmd.Results != null && cmd.Results.length > 0) {
            window.location = CONST_BASE_PATH + 'Views/Listings/Detail.aspx?listingId=' + cmd.Results[0].ListingId;
        } 
        else {
            // call the given handler
            SearchMlsXhr.callback();
        }
    },
    handleFailure: function(o) {
        return SearchMlsXhr.callback();
    },
    startRequest: function() {
        SearchMlsXhr.callback = validateSearchListingQueryCallback;
        var v = document.getElementById("input-address").value;
        var zip = getOnlyZip(v);
        if (zip != null) {
            // we have a zip, just go search
            SearchMlsXhr.callback();
        } else {
            // we do not have a zip, so try the mls first
            var cmd = {
                MlsId: v
            };
            var jsonStr = YAHOO.lang.JSON.stringify(cmd);
            YAHOO.util.Connect.asyncRequest('POST', CONST_XHR_PATH + "search.mls", searchMlsAsync, "mls_json=" + jsonStr);
        }
        return;
    }
};

var searchMlsAsync = {
    success: SearchMlsXhr.handleSuccess,
    failure: SearchMlsXhr.handleFailure,
    scope: SearchMlsXhr
};

YAHOO.util.Event.onContentReady("idxMessage", function() {
    YAHOO.com.bhg.idxMessage = new YAHOO.widget.Panel("idxMessage", { zIndex: 202, width: "400px", close: false, modal: true, fixedcenter: true, constraintoviewport: true });
    YAHOO.com.bhg.idxMessage.render();
    YAHOO.com.bhg.idxMessage.hide();
    YAHOO.util.Dom.setStyle(['idxMessage'], 'display', 'block');
}, this);

var IdxXhr = {
    search: null,
    url: null,
    callback: null,
    redirectIdx: function() {
        pageTracker._trackPageview('search_redirect.html');
        showGoogleAdwords();
        window.location = IdxXhr.url;
    },
    handleSuccess: function(o) {
        var listings = YAHOO.lang.JSON.parse(o.responseText);
        if (listings.IdxUrl != null) {
            YAHOO.util.Dom.removeClass(['search-listings-btn'], 'btn-search-loading');
            YAHOO.util.Dom.addClass(['search-listings-btn'], 'btn-search');
            if (IdxXhr.search !== null) {
                document.getElementById('input-address').value = IdxXhr.search.cookiePlace;
            }
            IdxXhr.url = listings.IdxUrl;
            YAHOO.util.Dom.get("conv-frame").src = "/Views/Listings/Tracking.htm";

            IdxXhr.redirectIdx();
        } else {
            // call the given handler
            IdxXhr.callback();
        }
    },
    handleFailure: function(o) {
        // if we had a failure, just call the callback.
        IdxXhr.callback();
    },
    startRequest: function(cb, s) {
        var clazz = document.getElementById('search-listings-btn').className;
        if (clazz.indexOf('btn-search-loading') === -1) {
            YAHOO.util.Dom.addClass(['search-listings-btn'], 'btn-search-loading');
            YAHOO.util.Dom.removeClass(['search-listings-btn'], 'btn-search');
            IdxXhr.search = s;
            IdxXhr.callback = cb;
            // serialize the search values
            var v = document.getElementById("input-address").value;
            var zip = getZip(v);
            var cmd = syncFormToNewCommand();
            if (zip !== null) {
                cmd.Zipcode = zip;
                var jsonStr = YAHOO.lang.JSON.stringify(cmd);
                YAHOO.util.Connect.asyncRequest('POST', CONST_XHR_PATH + "search.idx", idxAsync, "idx_json=" + jsonStr);
                return;
            } else {
                var address = processAddressInput(v);
                if (address !== null) {
                    // take the address and call the idx handler
                    cmd.Zipcode = address.postalCode;
                    cmd.City = address.city;
                    cmd.State = address.state;
                    cmd.Address = address.street;
                    var jsonStr = YAHOO.lang.JSON.stringify(cmd);
                    YAHOO.util.Connect.asyncRequest('POST', CONST_XHR_PATH + "search.idx", idxAsync, "idx_json=" + jsonStr);
                    return;
                }
            }
            // could not determine an address, call the given handler
            IdxXhr.callback();
            return;
        }
    }
};
var idxAsync = {
    success: IdxXhr.handleSuccess,
    failure: IdxXhr.handleFailure,
    scope: IdxXhr
};

function showGoogleAdwords() {
    var googleImage = new Image(1, 1);
    googleImage.src = "http://www.googleadservices.com/pagead/conversion/1036314621/?label=c9CNCOmdigEQ_c-T7gM&amp;script=0";
    var googleImage = new Image(1, 1);
    googleImage.src = "http://www.googleadservices.com/pagead/conversion/1036623118/?label=n0UXCKzqfRCOuqbuAw&amp;script=0";
    var googleImage = new Image(1, 1);
    googleImage.src = "http://www.googleadservices.com/pagead/conversion/1050073483/?label=52BZCNeNbRCLs9v0Aw&amp;script=0";
    var googleImage = new Image(1, 1);
    googleImage.src = "http://www.googleadservices.com/pagead/conversion/1033998639/?label=Qr02CK-7dhCvoobtAw&amp;script=0";
    var googleImage = new Image(1, 1);
    googleImage.src = "http://www.googleadservices.com/pagead/conversion/1036963444/?label=8hOnCMyOfxD0nLvuAw&amp;script=0";
    var googleImage = new Image(1, 1);
    googleImage.src = "http://www.googleadservices.com/pagead/conversion/1035735903/?label=fGyWCIfOgQEQ36bw7QM&amp;script=0";
    var googleImage = new Image(1, 1);
    googleImage.src = "http://www.googleadservices.com/pagead/conversion/1037263978/?label=8zjLCKqoggEQ6sjN7gM&amp;script=0";
    var googleImage = new Image(1, 1);
    googleImage.src = "http://www.googleadservices.com/pagead/conversion/1038151687/?label=YCOmCJXaexCH4IPvAw&amp;script=0";
    var googleImage = new Image(1, 1);
    googleImage.src = "http://www.googleadservices.com/pagead/conversion/1049147956/?label=WQIwCPLmfhC09KL0Aw&amp;script=0";
    var googleImage = new Image(1, 1);
    googleImage.src = "http://www.googleadservices.com/pagead/conversion/1036354921/?label=KQewCMWXdxDpipbuAw&amp;script=0";
    var googleImage = new Image(1, 1);
    googleImage.src = "http://www.googleadservices.com/pagead/conversion/1036314261/?label=ra3fCI-digEQlc2T7gM&amp;script=0";
    var googleImage = new Image(1, 1);
    googleImage.src = "http://www.googleadservices.com/pagead/conversion/1051541295/?label=WAZgCMuMeRCv_rT1Aw&amp;script=0";
    var googleImage = new Image(1, 1);
    googleImage.src = "http://www.googleadservices.com/pagead/conversion/1037246464/?label=H31dCND5axCAwMzuAw&amp;script=0";
    var googleImage = new Image(1, 1);
    googleImage.src = "http://www.googleadservices.com/pagead/conversion/1036627730/?label=GuMRCM7QhQEQkt6m7gM&amp;script=0";
    var googleImage = new Image(1, 1);
    googleImage.src = "http://www.googleadservices.com/pagead/conversion/1051541205/?label=XbN1CKWNeRDV_bT1Aw&amp;script=0";
    var googleImage = new Image(1, 1);
    googleImage.src = "http://www.googleadservices.com/pagead/conversion/1035746237/?label=jER1CLHvfBC99_DtAw&amp;script=0";
    var googleImage = new Image(1, 1);
    googleImage.src = "http://www.googleadservices.com/pagead/conversion/1052679278/?label=6hLgCPzLcBDuuPr1Aw&amp;script=0";
    var googleImage = new Image(1, 1);
    googleImage.src = "http://www.googleadservices.com/pagead/conversion/1039544930/?label=1eyXCKagdxDi5NjvAw&amp;script=0";
}
