﻿
var lastFacetBarState = null;
var currentFacetBarState = null;
var currentTab = null;



//This function is called onload of the facetbar and parses the initial facet context data which can in turn be used to initialize the facetbar.
//On page load the initial facet context will be rendered on the page as a javascript variable (Example. var facetContextJSON) and returned to the facetbar.
function initializeFacetBar() {
    //simply returns the facet context that was rendered to the javascript variable on page load
    return facetContextJSON;
}

function reSubmitLastFacetState() {
    if (!reloadedCurrent)
        updateFacetBarState(lastFacetBarState);

    //reset flag
    reloadedCurrent = false;
}

var reloadedCurrent = false;
function reSubmitCurrentFacetState(reloaded) {
    reloadedCurrent = reloaded;
    updateFacetState(currentFacetBarState);
}
//This function is called by the facetbar anytime a facet change has been invoked by the user. (i.e. Selecting 3 Bedrooms or Selecing a price value from the dropdown)
//The facet bar will need to pass in the JSON data which adheres to the object definition provided above (facetSearchState).  This facet state object is a representation
//of the latest state of the facetbar and will be used to filter the search results and provide back an updated state for all facets.  This updated facet state will be used
//by the facet bar to modify the display of facets that are no longer "active" based on the most current search criteria.
function updateFacetState(facetBarState) {
    var pageState;
    $j("#modalBlockOut2").show(0);
    //check if getPageState function is defined on page
    if (typeof getPageState == 'function') {
        //call to sync page with faceted results
        pageState = getPageState();
    }
    else {
        //throw alert to register getPageState() on container page (comment out for debugging purposes)
        alert("The method getPageState() must be defined on the container page and return a valid facet page state JSON object");

        //Debugging pageState below
        //example of page state information
        //ct = CurrentTab (C, H, Q)
        //pt = PreviousTab (C, H, Q)
        //pn = PageNumber
        //ps = PageSize
        //sb = SortBy    (communityname, price, city)
        //so = SortOrder (asc, desc)
        var pageState = { "ct": "C", "pt": "C", "pn": "1", "ps": "15", "sb": "price", "so": "asc" };
    }

    //short circuit the loading of facetbar and results if compare selections have been made but maintain selections across tabs
    //below lines are commented out to disable wipe off message for selected items to compare
    /*if (typeof Lennar.Compare.hasSelections == 'function')
    if (pageState.ct == currentTab && Lennar.Compare.hasSelections()) {
    Lennar.Compare.openLoseSelectionsModal(reSubmitLastFacetState);
    currentFacetBarState = facetBarState
    return;
    }*/

    //set the current tab variable
    currentTab = pageState.ct;

    //check if facetBarState was provided from the facet bar;  if not we will use the last valid facetBarState
    if (facetBarState == null) {
        facetBarState = lastFacetBarState;

        //resets move in date when a tab change occurs to something other than QMI
        if (pageState.ct == "C" || pageState.ct == "H") {
            facetBarState.mvdt = "No Preference";
        }
    }
    else {
        //log any changes to the facet state to WebTrends
        if (lastFacetBarState != null)
            logToWebtrends(lastFacetBarState, facetBarState);
    }

    //if a Move-In Date has been provided switch the page state tab to "Q"
    if (facetBarState != null && facetBarState.mvdt != undefined && facetBarState.mvdt != "No Preference") {
        pageState.ct = "Q";
    }

    // Force the facets to get constructed from the current tab when changing from QMI
    if (pageState.pt == "Q" && pageState.ct != pageState.pt) {
        pageState.pt = pageState.ct;
    }

    if (facetBarState != null) {
        //build out parameter object 
        var params = new Object;
        params.searchStateJSON = JSON.stringify(facetBarState, Lennar.Global.stringifyHandler);
        params.pageStateJSON = JSON.stringify(pageState, Lennar.Global.stringifyHandler);

        //make call to get updated results passing in the updated facetState and pageState JSON            
        $j.ajax({
            type: "POST",
            data: JSON.stringify(params, Lennar.Global.stringifyHandler),
            url: "/Services/FacetMethods.asmx/GetFacetResults",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: updateFacetState_onSuccess,
            error: updateFacetState_onError
        });
    }
}

function resetState() {

    var facetBarState = facetContextJSON.params;

    updateFacetState(facetBarState);
}
function updateFacetState_onError(e) {
    $j("#modalBlockOut2").hide(0);
}
function updateFacetState_onSuccess(e) {
    var facetBarState = JSON.parse(e.d).fsr;
    var facetResults = JSON.parse(e.d).fr;
    var facetPageState = JSON.parse(e.d).fps;
    var mapResults = JSON.parse(e.d).fmr;

    //store last facetbar state; this is used when switching tabs to maintain the facetbar state
    lastFacetBarState = facetBarState;

    _pageStateValues[1] = facetPageState.ct;

    updateFacetBarState(facetBarState);

    syncPageResults(facetResults, mapResults, facetPageState);
}

function updateFacetState_onFailed(e) {

    alert('Something went wrong.  Here is the response text: ' + e.responseText);
}

function syncPageResults(facetResults, mapResults, facetPageState) {
    //check if syncResults function is defined on page
    if (typeof syncResults == 'function') {
        //call to sync page with faceted results
        syncResults(facetResults, mapResults, facetPageState);
    }
    else {
        //throw alert to register syncResults() on container page (comment out for debugging purposes)
        alert("The method syncResults() must be defined on the container page.");
    }
}

function updateFacetBarState(facetBarState) {

    updateSearchParams(facetBarState);


}



//handles webtrends tagging by checking if any of the facet states have changed
function logToWebtrends(prevFacetState, currFacetState) {

    if (prevFacetState.mvdt != currFacetState.mvdt) {
        dcsMultiTrack('WT.z_navtype', 'Selection', 'WT.z_navigation', 'FacetMoveInDate')
    }

    if (facetChanged(prevFacetState.loc, currFacetState.loc)) {
        dcsMultiTrack('WT.z_navtype', 'Selection', 'WT.z_navigation', 'FacetLocation')
    }

    if (facetChanged(prevFacetState.sch, currFacetState.sch)) {
        dcsMultiTrack('WT.z_navtype', 'Selection', 'WT.z_navigation', 'FacetSchool')
    }

    if (facetChanged(prevFacetState.mnpr, currFacetState.mnpr)) {
        dcsMultiTrack('WT.z_navtype', 'Selection', 'WT.z_navigation', 'FacetPrice')
    }

    if (facetChanged(prevFacetState.mxpr, currFacetState.mxpr)) {
        dcsMultiTrack('WT.z_navtype', 'Selection', 'WT.z_navigation', 'FacetPrice')
    }

    if (facetChanged(prevFacetState.mnsf, currFacetState.mnsf)) {
        dcsMultiTrack('WT.z_navtype', 'Selection', 'WT.z_navigation', 'FacetSqFt')
    }

    if (facetChanged(prevFacetState.mxsf, currFacetState.mxsf)) {
        dcsMultiTrack('WT.z_navtype', 'Selection', 'WT.z_navigation', 'FacetSqFt')
    }

    if (facetChanged(prevFacetState.bed, currFacetState.bed)) {
        dcsMultiTrack('WT.z_navtype', 'Selection', 'WT.z_navigation', 'FacetBed')
    }

    if (facetChanged(prevFacetState.bat, currFacetState.bat)) {
        dcsMultiTrack('WT.z_navtype', 'Selection', 'WT.z_navigation', 'FacetBath')
    }

    if (facetChanged(prevFacetState.str, currFacetState.str)) {
        dcsMultiTrack('WT.z_navtype', 'Selection', 'WT.z_navigation', 'FacetStory')
    }

    if (facetChanged(prevFacetState.gar, currFacetState.gar)) {
        dcsMultiTrack('WT.z_navtype', 'Selection', 'WT.z_navigation', 'FacetGarage')
    }

    if (facetChanged(prevFacetState.amen, currFacetState.amen)) {
        dcsMultiTrack('WT.z_navtype', 'Selection', 'WT.z_navigation', 'FacetAmenity')
    }

    if (facetChanged(prevFacetState.type, currFacetState.type)) {
        dcsMultiTrack('WT.z_navtype', 'Selection', 'WT.z_navigation', 'FacetType')
    }
}

function facetChanged(prevFacetState, currFacetState) {
    if (prevFacetState == null || currFacetState == null) return false;
    if (prevFacetState.length != currFacetState.length) return false;
    for (var i = 0; i < currFacetState.length; i++) {
        if (prevFacetState[i] != currFacetState[i]) return true;
    }
    return false;
}

function setFacetHeight(newHeight) {
    $j("#SearchFacet").height(newHeight + 5);
    return false;
}

function UpdateAfterRatingsLogin() {
    Lennar.Global.syncUI();
    resetState();
}

function UpdateAfterFavoriteLogin() {
    Lennar.Global.syncUI();
    resetItemsAfterFavorite();
    resetState();
}






//testing seed data remove for server integration
var facetContext = initializeFacetBar();
var facetlabels = facetContext.context;
var facetState = facetContext.params;
var SELECTED = 1, UNSELECTED = 0, UNAVAILABLE = 2, AUTOSELECTED = 3;

//When Document loaded run
var sendToServer = function(thisFacetState) {

    updateFacetState(thisFacetState);
};

function updateSearchParams(facetState) {
    //process Drop Downs
    for (var key in facetState) {

        switch (key) {
            case "mvdt":
                $j("#txtMoveInDate").val(facetState[key]);
                break;
            case "mnpr":
            case "loc":
            case "sch":
            case "mnsf":
            case "mxpr":
            case "mxsf":
                var facetOption = facetState[key];
                var indexUnSelec = -1;
                for (var foi = (facetOption.length - 1); foi >= 0; foi--) {

                    switch (facetOption[foi]) {
                        case UNAVAILABLE:
                            $j('#' + key + '_' + foi).removeClass("selected").addClass("unavailable");

                            //$j("#" + key + "_" + foi).hide();
                            break;
                        case UNSELECTED:
                            $j('#' + key + '_' + foi).removeClass("unavailable").removeClass("selected");
                            //$j("#" + key + "_" + foi).hide();
                            if (indexUnSelec != -2)
                                    indexUnSelec = foi;
                            break;
                        case SELECTED:
                        case AUTOSELECTED:
                            $j('#' + key + '_' + foi).removeClass("unavailable").addClass("selected");
                            //$j("#" + key + "_" + foi).show();
                            indexUnSelec = -2;

                            $j('#lit_' + key + '_selected').html($j('#' + key + '_' + foi + '>a').text());

                            break;
                    }
                }
                if (indexUnSelec != -2) {
                    $j('#' + key + '_' + indexUnSelec).removeClass("unavailable").addClass("selected");
                    //$j("#" + key + "_" + indexUnSelec).show();                        

                    $j('#lit_' + key + '_selected').html($j('#' + key + '_' + indexUnSelec + '>a').text());

                }
                break;
            default:
                var facetOption = facetState[key];
                for (var foi = (facetOption.length - 1); foi >= 0; foi--) {
                    switch (facetOption[foi]) {
                        case UNAVAILABLE:
                            $j('#' + key + '_' + foi).removeClass("selected").addClass("unavailable");
                            if (key == "amen" || key == "type") {
                                $j('#span_' + key + '_' + foi).removeClass("selected").addClass("unavailable");
                            }
                            break;
                        case UNSELECTED:
                            $j('#' + key + '_' + foi).removeClass("unavailable").removeClass("selected");
                            if (key == "amen" || key == "type") {
                                $j('#span_' + key + '_' + foi).removeClass("unavailable").removeClass("selected");
                            }
                            break;
                        case SELECTED:
                            $j('#' + key + '_' + foi).removeClass("unavailable").addClass("selected");
                            if (key == "amen" || key == "type") {
                                $j('#span_' + key + '_' + foi).removeClass("unavailable").addClass("selected");
                            }
                            //$j('#lit_' + key + '_selected').val($j('#' + key + '_' + foi).children()[0].innerHTML);
                            if (foi != 0)
                                break;
                    }
                }
                break;
        }

    }
}

//Define Methods we will need later

// 1 ------------------------------------
var checkClick = function(baseId) {
    var jsonKey = baseId.substring(0, baseId.lastIndexOf('_'));
    var jsonIndex = baseId.substring(baseId.lastIndexOf('_') + 1, baseId.length);
    toggleItem(jsonKey, jsonIndex);
};
var makeCheckClickCallback = function(baseId) {
    var encapsulatedFunction = function(event) {
        if ($j('#' + baseId).hasClass("unavailable")) {
            event.stopImmediatePropagation();
            return false;
        }
        checkClick(baseId);
    };
    return encapsulatedFunction;
};

// 2 ------------------------------------
var makeDDLCallBack = function(itemToShow) {
    var encapsulatedFunction = function() {
        $j(".onTop").hide();
        $j("#modalBlockOut").show(0);

        $j(itemToShow).addClass("onTop");
        $j(itemToShow).show();
        var divId = itemToShow.toString().substring(1, itemToShow.toString().length);
        if (navigator.userAgent.indexOf("MSIE 7.0") == -1) {
            fleXenv.fleXcrollMain(divId);
        }
        $j(itemToShow).find("li").unbind("click");
        $j(itemToShow).find("li:not(.unavailable)").bind("click", function(event) {
            $j("#modalBlockOut").hide(0);
            $j(".onTop").removeClass("onTop");
            $j(itemToShow).hide();
            var jsonKey = this.id.substring(0, this.id.indexOf('_'));
            var jsonIndex = this.id.substring(this.id.lastIndexOf('_') + 1, this.id.length);
            $j("#" + this.id).addClass("selected");
            toggleExclusive(jsonKey, jsonIndex);
            $j(itemToShow + '_selected').val($j('#' + this.id).children()[0].innerHTML);

        });
    };
    return encapsulatedFunction;
};

// 3 ----------------------------------
var toggleItem = function(item, index, shouldSendToServer) {
    if (facetState[item][index] != UNAVAILABLE) {
        if (facetState[item][index] == SELECTED) {
            facetState[item][index] = UNSELECTED;
            $j("#" + item + "_" + index).removeClass("selected");
        } else {

            //Set the class for the selected item
            $j("#" + item + "_" + index).addClass("selected");
            facetState[item][index] = SELECTED;
            ClearButtons[item]();

        }
        //prevent sending to server for clear all calls
        if ((shouldSendToServer === undefined) || (shouldSendToServer == true)) {
            sendToServer(facetState);
        }
    }
};
var toggleExclusive = function(item, index, shouldSendToServer) {
    var facetOption = facetState[item];
    if (facetOption != undefined) {
        if (facetState[item][index] != UNAVAILABLE) {
            var myList = facetState[item];
            ClearButtons[item]();
            var leni = myList.length;
            for (var i = 0; i < leni; i++) {
                if (index == i)
                    myList[i] = SELECTED;
                else
                    myList[i] = UNSELECTED;
            }
            if (index > -1) {
                facetState[item][index] = SELECTED;
            }
            //prevent sending to server for clear all calls
            if ((shouldSendToServer === undefined) || (shouldSendToServer == true)) {
                sendToServer(facetState);
            }
        }
    }
};
//----------------------------------

// Add Clear Selections links
var ClearTypes = function(callSendToServer) {
    var typeid = "type";
    var len = facetState[typeid].length;
    for (var j = 0; j < len; j++) {
        facetState[typeid][j] = UNSELECTED;
        $j("#" + typeid + "_" + j).attr('checked', false);
    }

    $j('#btnClearTypes').hide(250);

    if (callSendToServer) {
        sendToServer(facetState);
    }
};
var ClearAmen = function(callSendToServer) {
    var amenId = "amen";
    var len = facetState[amenId].length;
    for (var j = 0; j < len; j++) {
        facetState[amenId][j] = UNSELECTED;
        $j("#" + amenId + "_" + j).attr('checked', false);
    }

    $j('#btnClearAmen').hide(250);
    if (callSendToServer) {
        sendToServer(facetState);
    }
};

var ClearPrimarySelectors = function(callSendToServer) {
    for (var key in facetState) {
        switch (key) {
            case "bed":
            case "bat":
            case "str":
            case "gar":
                var facetOption = facetState[key];
                var leni = facetOption.length;
                for (var i = 0; i < leni; i++) {
                    if (facetOption[i] != UNSELECTED)
                        toggleItem(key, i, false);
                }
                break;
            case "mnpr":
            case "mnsf":

                ClearDDLTypes(key);
                $j("#" + key + "_0").addClass("selected");
                $j("#" + key + "_0").show();
                toggleExclusive(key, -1, false);

                break;
            case "mxpr":
            case "mxsf":

                var facetOption = facetState[key];
                var leni = facetOption.length;
                ClearDDLTypes(key);
                $j("#" + key + "_" + (leni - 1)).addClass("selected");
                $j("#" + key + "_" + (leni - 1)).show();
                toggleExclusive(key, -1, false);


                break;
            case "mvdt":
                //var len = CalenderControls.length;
                //for (var j = 0; j < len; j++) {
                  //  $j("#" + CalenderControls[j]).val('No Preference');
                //}
                $j("#txtMoveInDate").val('No Preference');
                facetState[key] = 'No Preference';
            default:
                //do nothing
                break;
        }
    }

    $j('#txtMoveInDate').val("No Preference");

    $j('#btnClearPrimarySection').hide(250);

    if (callSendToServer) {
        sendToServer(facetState);
    }
};
//Clear the selected class
var ClearKeySelector = function(keyToClean) {
    var facetOption = facetState[keyToClean];
    var leni = facetOption.length;
    for (var i = 0; i < leni; i++) {
        if (facetOption[i] != UNSELECTED) {
            toggleItem(keyToClean, i, false);
            break;
        }
    }
};
//Removes the selected class of the key send
var ClearDDLTypes = function(key) {
    var facetOption = facetState[key];
    if (facetOption != undefined) {
        var leni = facetOption.length;
        for (var i = 0; i < leni; i++) {
            if (facetOption[i] != UNSELECTED) {
                $j("#" + key + "_" + i).removeClass("selected");
                //$j("#" + key + "_" + i).hide();
                break;
            }
        }
    }
};


var ClearAll = function() {

//Get DDL Location and school district back to initial state
    
    ClearDDLTypes("loc");
    ClearDDLTypes("sch");

    toggleExclusive("loc", 0, false);
    toggleExclusive("sch", 0, false);


    ClearTypes(false);
    ClearAmen(false);
    if ($j('#btnClearPrimarySection').is(':visible'))
        ClearPrimarySelectors(false);

    $j('#btnClearAll').hide(250);
    sendToServer(facetState);

    $j('#sfTitle').text('Default Selections');
};

var showClearTopButton = function() {
    showClearAllButton();
};
var showClearPrimaryButton = function() {
    $j('#btnClearPrimarySection').show(250);
    showClearAllButton();
};
var showClearAmenButton = function() {
    $j('#btnClearAmen').show(250);
    showClearAllButton();
};
var showClearTypeButton = function() {
    $j('#btnClearTypes').show(250);
    showClearAllButton();
};
var showClearAllButton = function() {
$j('#btnClearAll').show(250);
$j('#sfTitle').text('My Selections');

};
var ClearButtons = {
    "loc": showClearTopButton,
    "sch": showClearTopButton,
    "mnpr": showClearPrimaryButton,
    "mxpr": showClearPrimaryButton,
    "mnsf": showClearPrimaryButton,
    "mxsf": showClearPrimaryButton,
    "bed": showClearPrimaryButton,
    "str": showClearPrimaryButton,
    "bat": showClearPrimaryButton,
    "gar": showClearPrimaryButton,
    "mvin": showClearPrimaryButton,
    "type": showClearTypeButton,
    "amen": showClearAmenButton,
    "mvdt": showClearPrimaryButton

};

// Add non-flickering hoverBehaviors
var hoverInFunc = function(sender) {
    var encapsulatedEvent = function() {
        var myid = sender.target.id; // ? event.id : event.srcElement.id;
        $j(".hover").removeClass("hover");
        $j("#" + myid).addClass("hover");
    };
    return encapsulatedEvent(sender);
}
var hoverOutFunc = function(sender) {
    var encapsulatedEvent = function() {
        var myid = sender.target.id; // ? event.id : event.srcElement.id;
        $j("#" + myid).removeClass("hover");
    };
    return encapsulatedEvent(sender);
}



//===========================================================================
// Code to Stylize Drop Down Lists Start
//vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
function processSingleSelect(singleSelectLists) {
    var singleSelectList = [];
    var chkBoxList = [];
    var toJoinString = [];
    for (var ssi = (singleSelectLists.length - 1); ssi >= 0; ssi--) {
        var styleGroupLen = singleSelectLists[ssi].length;
        for (var ssStyleGroupi = 0; ssStyleGroupi < styleGroupLen; ssStyleGroupi++) {
            singleSelectList = singleSelectLists[ssi][ssStyleGroupi];
            var toJoinDDL = [];
            var objectName = singleSelectList["label"];
            var objectlabels = singleSelectList["val"];
            if (objectlabels != undefined) {
                var TypeClass;
                var selectedIndex1, selectedIndex2;
                if (ssi == 0) {
                    TypeClass = "styledDDLwide";
                    selectedIndex1 = 0;
                    selectedIndex2 = -1;
                }
                else if (ssi == 1) {
                    TypeClass = "styledDDL";
                    selectedIndex1 = 0;
                    selectedIndex2 = objectlabels.length - 1;
                }
                for (var ci = 0; ci <= ssi; ci++) {
                    var jsonKey;
                    switch (objectName) {
                        case "price":
                            jsonKey = (ci == 0) ? "mnpr" : "mxpr";
                            break;
                        case "sqft":
                            jsonKey = (ci == 0) ? "mnsf" : "mxsf";
                            break;
                        default:
                            jsonKey = objectName;
                            break;
                    }

                    var lblLen = objectlabels.length;
                    for (var i = 0; i < lblLen; i++) {
                        var itemName, itemId;
                        var jsonIndex = i;

                        if (ci == 0) {
                            if (selectedIndex1 == jsonIndex) {
                                selected = " selected";
                            } else {
                                selected = "";
                            }
                        } else if (ci == 1) {
                            if (selectedIndex2 == jsonIndex) {
                                selected = " selected";
                            } else {
                                selected = "";
                            }
                        }

                        if (facetState[jsonKey] == null) {
                            facetState[jsonKey] = [];
                        }
                        if (selected == " selected") {
                            facetState[jsonKey][jsonIndex] = UNSELECTED;
                        } else {
                            facetState[jsonKey][jsonIndex] = UNSELECTED;
                        }

                        toJoinDDL.push('<li id="' + jsonKey + '_' + i + '"> <a >' + objectlabels[i] + '</a></li>');
                    }

                    $j("#lit_" + jsonKey).append("<ul>" + toJoinDDL.join("") + "</ul>");
                    toJoinDDL = [];
                    var DDLCallBack = makeDDLCallBack('#lit_' + jsonKey);
                    $j('#lit_' + jsonKey + "_selected").live('click', DDLCallBack);                    
                }
            }
            else {
                if (objectName == "loc") {
                    //apply "disabled" style to label
                    //$j("#lblLocation").addClass("unavailable");
                    $j("#lit_loc_selected").addClass("unavailable");
                }
                else if (objectName == "sch") {
                    //apply "disabled" style to label
                    //$j("#lblSchools").addClass("unavailable");
                    $j("#lit_sch_selected").addClass("unavailable");
                }
            }
        }
    }
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// Code to Stylize Drop Down Lists End
//===========================================================================

//===========================================================================
// Code to Stylize multi-Selects
//vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
function processMultiSelect(multiSelectLists) {
    var multiSelectList = [];
    var chkBoxList = [];
    var toJoinString = [];
    for (var msi = (multiSelectLists.length - 1); msi >= 0; msi--) {
        multiSelectList = multiSelectLists[msi];
        var tlen = multiSelectList.length;

        for (var ti = 0; ti < tlen; ti++) {
            var objectName = multiSelectList[ti]["label"];
            var objectlabels = multiSelectList[ti]["val"];
            //build Stylized Content
            var lblLen = objectlabels.length;
            if (lblLen != 0) {
                for (var i = 0; i < lblLen; i++) {
                    //build our JSON object for data transfer
                    //prepop it with our current values and do likewise selected status
                    var itemName, itemId;
                    var jsonKey = objectName;
                    var jsonIndex = i;
                    if (facetState[objectName] == null)
                        facetState[objectName] = [];

                    facetState[objectName][jsonIndex] = UNSELECTED;

                    //build Stylised items
                    if (msi == 0) {
                        if (objectlabels[i] == "3.5+") {
                            toJoinString.push('<div class="ft-ty"><label style="font-size:8px;"' + ' id="' + jsonKey + '_' + jsonIndex + '" > ' + objectlabels[i] + ' </label> </div>');
                        }
                        else
                            toJoinString.push('<div class="ft-ty"><label ' + ' id="' + jsonKey + '_' + jsonIndex + '" > ' + objectlabels[i] + ' </label> </div>');
                    }

                    else if (msi == 1) {
                        var trimedLabel = $j.trim(objectlabels[i][0]);
                        trimedLabel = trimedLabel.replace(' ', '');
                        trimedLabel = trimedLabel.toLowerCase();

                        toJoinString.push('<div><input type="checkbox"' + ' id="' + jsonKey + '_' + jsonIndex + '" /><span id="span_' + jsonKey + '_' + jsonIndex + '" class="' + jsonKey + '-' + trimedLabel + '"> ' + objectlabels[i][0] + ' </span></div>');


                        //var optionalIcon = "";
                        //if (objectlabels[i][1] != "") {
                        //optionalIcon = '<img src="' + objectlabels[i][1] + '" />';
                        //}
                        //toJoinString.push('<div class="chkBoxS' + msi + '" id="' + jsonKey + '_' + jsonIndex + '">' + optionalIcon + objectlabels[i][0] + '</div>');
                    }

                    chkBoxList.push(this.id);
                }
            }
            else {
                if (objectName == "amen" || objectName == "type")
                    $j("#div_" + objectName).hide();
            }
            if (msi == 1) {
                //append Stylised content to page
                $j("#lit_" + objectName).append("<div class=\"fcktop\"></div><div class= \"fckmid\">" + toJoinString.join("") + "</div><div class=\"fckbtm\"></div>");
            }
            else {

                $j("#lit_" + objectName).append("" + toJoinString.join(""));
            }
            toJoinString = [];

            //add click event to stylised content
            var rlen = chkBoxList.length;
            for (var ri = 0; ri < rlen; ri++) {
                var item = jsonKey + '_' + ri;
                var returnFunc = makeCheckClickCallback(item);
                $j('#' + item).click(returnFunc);
            }
            chkBoxList = [];
        }
    }
}
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//Code to Stylize multi-Selects End
//===========================================================================

function setFocus(controlName) {
    $j('#' + controlName).focus();
}

function CloseModal() {
    $j("#modalBlockOut").hide(0);
    $j(".onTop").hide();
}

$j(document).ready(function() {
    Lennar.Global.callBack_OnSavePreferences = resetState;
});

