var Home = {
    pagination: Object, 	//Json Object 	  - Used to hold the page details from the Json object
    details: Object, 	//Json Object 	  - Used to hold the lot details from the Json object
    tRecords: 0, 		//Integer 		  - This the total records for the lot requests
    offset: 0, 		//Integer   	  - Query Offset, required for the pagination to occur
    getFirst: false, 	//Boolean 		  - Used so we know if the first search query has occured. May need to be reset if the user completes another search.
    mapFX: null, 	//Mootools Object - This is used to control the animation states of the Map Holder.
    type: 'browse', //String 		  - This is stored in a cookie "uLotSearchType" so we know what view type the user was using on their last view.
    myDetail: null,
    moveSteps: 1, 			//Integer		  - Used in the div slider in the Details page.
    pageTotal: 0, 		//Integer		  - 
    onPage: 1, 		//Integer		  - 
    currentItem: 0, 		//Integer		  -
    homeIDs: -1, 		//Integer		  - Using this to pass ids around for searching.;
    startStep: 0,
	pageFirstTime: false, //Boolean		- This is being used to know if it is the absolute first time the a search has been run.

    initialize: function() {
        Site.setType('Home');

		Site.browseType = Home.type = 'browse';

        var mode = unescape(utils.getQuery('mode'));

        if (mode != '') {
            Site.setBrowse(mode);
            Home.type = mode;
            Cookie.set('uHomeSearchType', mode, { duration: 14, path: '/' });
        }
		
		var homeID = unescape(utils.getQuery('HomeIds'));
		Home.returnLink = $$('.newSearchButton')[0];
		
        if (Cookie.get('uHomeSearchType', { path: '/' }) && homeID == '') {
            Home.type = Cookie.get('uHomeSearchType', { path: '/' });
            Site.browseType = Home.type;
			$$('#' + Home.type + 'Search a').addClass('selected');
        } 

		if(homeID != '') {
			if (Cookie.get('lastViewedLot', { path: '/' })) {
				var lastViewedLot = Cookie.get('lastViewedLot', { path: '/' });
				Home.returnLink.addClass('returnToLot');
				Home.returnLink.href = '../land/search.aspx?lotIds=' + lastViewedLot;
				
				Site.browseType = Home.type = (homeID.split(',').length > 1) ? 'browse':'detail';
				
				//console.log(homeID.split(',').length);
				
				
				
			} 
		}
		
		$$(['list_holder', 'infoListing']).addClass(Home.type);

        Home.homeDetail = new homeDetail('infoListing', {
            className: 'homeDetails', id: 'detailHolder', mode: Home.type, width: 686, height: 483,
            fixed: true, fixTop: 121, fixLeft: -10
        });

		if(Site.sUser) {
			Site.sUser.callback = Home.updateState;
		}

		Home.reset();

        if (homeID != '') {
            Home.homeIds = homeID;
			Home.type = 'detail';
            Site.browseType = Home.type;
			$$('#' + Home.type + 'Search a').addClass('selected');
			
			Home.getList('HomeIds');
			
			return;
        }
        var iBrowseSel = false;  //new
        var price = unescape(utils.getQuery('price'));

        if (price != '') {
            Search.setMin(utils.stripChar('|', price, 0));
            Search.setMax(utils.stripChar('|', price, 1));
            iBrowseSel = true;
            //Home.reset();
            //Home.getList();
            //return;
        }

        var style = unescape(utils.getQuery('style'));
        if (style != '') {
            Search.setStyle(style);
            iBrowseSel = true;
        }

        var level = unescape(utils.getQuery('level'));
        if (level != '') {
            Search.setLevel(level);
            iBrowseSel = true;
        }

        var bed = unescape(utils.getQuery('bed'));
        if (bed != '') {
            Search.setBed(bed);
            iBrowseSel = true;
        }

        var bath = unescape(utils.getQuery('bath'));
        if (bath != '') {
            Search.setBath(bath);
            iBrowseSel = true;
        }

        if (iBrowseSel == true) {
            Home.reset();
            Home.getList();
            return;
        }


        Search.setMin(0);
        Search.setMax(1000000);

        Home.getList();

    },
    setDetails: function(l) {
        Home.details = l;
        return true;
    },
    reset: function() {
        Home.currentItem = 0;
        // Home.offset = 0;
        Home.getFirst = false;
        $('prevItemLink').addClass('none');
    },
    listURI: function(type) {
        var URI = config['baseURI'] + config['HomeReturn'];
        var string = '';
        switch (type) {
            case 'newPage':
                nextlastID = config['pageSize'] * (Home.onPage - 1);
                string = URI + '?pageSize=' + config['pageSize'] + '&Offset=' + Home.offset + '&RecordCount=' + Home.tRecords + '&lastId=' + nextlastID + '&MinPrice=' + Search.minPrice + '&MaxPrice=' + Search.maxPrice;
                break;
            case 'showAll':
                string = URI + '?ShowInActive=true';
                break;
            case 'HomeIds':
                string = URI + '?homeIds=' + Home.homeIds + '&pageSize=' + config['pageSize'];
                break;
            case 'quick':
                string = URI + '?mode=' + 1 + '&pageSize=' + config['pageSize'] + '&Offset=' + Home.offset + '&MinPrice=' + Search.minPrice + '&MaxPrice=' + Search.maxPrice;
                break;
            default:
                string = URI + '?mode=' + 1 + '&pageSize=' + config['pageSize'] + '&Offset=' + Home.offset + '&MinPrice=' + Search.minPrice + '&MaxPrice=' + Search.maxPrice + '&homeStyle=' + Search.style + '&NumLevels=' + Search.level + '&numberOfBedrooms=' + Search.bed + '&numberOfBathrooms=' + Search.bath;
                //string = URI + '?mode='+ 1 + '&pageSize=' + config['pageSize'];	
                break;
        }
        string += '&e=' + new Date().getTime();
        if (Site.sUser.uId() != -1) string = string + '&UserId=' + Site.sUser.uId();

        return string;
    },
    getList: function(list) {
        // Land.getFirst = false;		
        URI = Home.listURI(list);

        var request = new Json.Remote(URI, {
            method: 'get',
            onComplete: function(jsonObj) {
                if (jsonObj.root.NewDataSet) {
                    Home.setDetails(jsonObj.root.NewDataSet.tblHomes);
                    Home.pageNav(jsonObj.root.NewDataSet.HomesNav);
                    Home.buildList();
                } else {
					$('homeSearch').removeClass('loading');
					if (!$('errormsg')) {
					    var errormsg = new Element('div', { 'id': 'errormsg' }).injectTop('homeSearch');

					    new Element('h3').setHTML('Sorry No results for your search').injectInside($('errormsg'));
					}

					//Hide the holders so that the screen does not look broken.
					$$('#list_holder', '#infoListing', '#pageNav_top', '#itemNav').addClass('none');

                }
            }
        }).send();
		

		
	},
    buildList: function() {
        if ($('homeSearch').hasClass('loading')) $('homeSearch').removeClass('loading');

        var list_detail = $('list_detail').empty();

		if ($('errormsg')) $('errormsg').remove();
		$$('#list_holder', '#infoListing', '#pageNav_top').removeClass('none');

        $('itemNav').addClass('none');

        if (Home.details.length) {
            Home.details.each(function(homeCall, i) {
                switch (Home.homeDetail.options.mode) {
                    case 'browse':
                        try { Home.browseListItem(homeCall, i).injectInside(list_detail); }
                        catch (err) { }
                        break;
                    case 'detail':
                        try { Home.detailListItem(homeCall, i).injectInside(list_detail); }
                        catch (err) { }
                        break;
                }

                if (i == Home.currentItem && Site.sUser) {
                    Site.sUser.showAgent(7);
                    if (Site.sUser.regProcess != 2) {
                        if (homeCall.iRegistered.toInt() != 1) Site.sUser.updateRegister(2, homeCall.HOM_nId, homeCall.HOM_strName, { facID: homeCall.HomeDefaultFacadeId.toInt(), assetID: homeCall.HomeDefaultColorId.toInt(), estateName: EstateName });
                        else Site.sUser.updateRegister(7, iEstate, EstateName);
                    }
                }

                if (i == Home.startStep && Home.homeDetail.options.mode == 'detail') {
					Home.homeDetail.updateDetail(Home.details[Home.currentItem], Home.currentItem);
					//setting a cookie for the last viewed.
					Cookie.set('lastViewedHome', Home.details[Home.currentItem].HOM_nId.toInt(), { duration: 0, path: '/' });
				}
                if (Home.homeDetail.options.mode != 'browse') $('itemNav').removeClass('none');
            });
            //Set new tooltips
            if (Home.homeDetail.options.mode == 'detail') {
                var Tips1 = new Tips($$('ul#list_detail li.holder'), {
                    offsets: { 'x': -37, 'y': -65 },
                    fixed: true,
                    className: 'detailLabel'
                });
            }
        } else {
            switch (Home.homeDetail.options.mode) {
                case 'browse': Home.browseListItem(Home.details, 0).injectInside(list_detail); break;
                case 'detail': 
					Home.detailListItem(Home.details, 0).injectInside(list_detail); 
					Home.homeDetail.updateDetail(Home.details, 0); 
					//setting a cookie for the last viewed.
					Cookie.set('lastViewedHome', Home.details.HOM_nId.toInt(), { duration: 0, path: '/' });
					break;
            }
            if (Site.sUser) {
                Site.sUser.showAgent(7);
                if (Site.sUser.regProcess != 2) {
                    Site.sUser.updateRegister(2, Home.details.HOM_nId.toInt(), Home.details.HOM_strName, { facID: Home.details.HomeDefaultFacadeId.toInt(), assetID: Home.details.HomeDefaultColorId.toInt(), estateName: EstateName });
                };
            }
        }
		if(Home.returnLink.hasClass('returnToLot') && !Search.returntolast){
			Home.returnLink.removeClass('returnToLot');
			Home.returnLink.href = 'default.aspx';
			Cookie.remove('lastViewedLot', { path: '/' });
		}
        Home.getFirst = Home.pageFirstTime = true;
    },
    browseListItem: function(obj, i) {

        holder = new Element('li', { 'id': 'item_' + obj.HOM_nId }).addClass('holder');

        if (obj.iViewed == "1") { holder.addClass('viewed'); }
        if (obj.iSaved == "1") { holder.addClass('saved'); }
        if (obj.iRegistered == "1") { holder.addClass('registered'); }

        if (i == Home.currentItem) holder.addClass('current');

        container = new Element('ul').injectInside(holder);
        lne1 = new Element('li', { 'id': 'lot_' + obj.HOM_nId }).addClass('details').injectInside(container);
        lne1a = new Element('ul').injectInside(lne1);

        lne1b = new Element('li').addClass('name').setHTML(obj.HOM_strName).injectInside(lne1a);
        lne1c = new Element('li').addClass('price').setHTML('$' + utils.commaFormat(obj.TotalPrice)).injectInside(lne1a);

        lne2 = new Element('li').addClass('image').injectAfter(lne1);
        lne2a = new Element('img').injectInside(lne2);
        lne2a.setProperty('src', config['baseURI'] + 'Utilities/GenerateImage.aspx?path=../' + obj.strHomeImage + '&w=180&h=180&mode=resizefit');
        lne2.addEvents({
            'click': function() {
                Home.openDetails(obj, i);
            },
            mouseenter: function() { $$('item_' + obj.HOM_nId + ' li.image').addClass('hover'); },
            mouseleave: function() { $$('item_' + obj.HOM_nId + ' li.image').removeClass('hover'); }
        });
        lne3 = new Element('li').addClass('controls').injectAfter(lne2);
        lne3a = new Element('ul').injectInside(lne3);
        lne3b = new Element('li').addClass('add').injectInside(lne3a);

        //var query = ['"' + obj.HOM_strName + '"', obj.HOM_nId, obj.HomeDefaultFacadeId, obj.HomeDefaultAssetId];
        var query = ['"' + obj.HOM_strName + '"', obj.HOM_nId, obj.HomeDefaultFacadeId, obj.HomeDefaultAssetMapId];
        if (obj.iRegistered == "1") {
            lne3b_1 = new Element('a').setHTML('Registered').injectInside(lne3b);
        } else {
            lne3b_1 = new Element('a', { 'href': 'javascript:void(0)', 'id': 'control_' + obj.HOM_nId }).setHTML('Save').injectInside(lne3b);

            if (myList.list != null && myList.list.HomeIds.contains(obj.HOM_nId.toInt()) == true) {
                lne3b_1.setHTML('Saved').onclick = function() {
                    //mySelection.deleteHome(obj.HOM_strName, obj.HOM_nId, obj.HomeDefaultFacadeId, obj.HomeDefaultAssetId);
                    mySelection.deleteHome(obj.HOM_strName, obj.HOM_nId, obj.HomeDefaultFacadeId, obj.HomeDefaultAssetMapId);
                } .bind(obj);
            } else {
                lne3b_1.onclick = function() {
                    //mySelection.saveHome(obj.HOM_strName, obj.HOM_nId, obj.HomeDefaultFacadeId, obj.HomeDefaultAssetId);
                    mySelection.saveHome(obj.HOM_strName, obj.HOM_nId, obj.HomeDefaultFacadeId, obj.HomeDefaultAssetMapId);
                } .bind(obj);
            }
        }

        lne3c = new Element('li').addClass('stage').injectAfter(lne3b);

        lne3d = new Element('li').addClass('more').injectInside(lne3a);
        lne3d_1 = new Element('a', { 'id': 'detail_' + obj.HOM_nId }).setHTML('Detail').injectInside(lne3d);

        lne3d_1.addEvents({
            'click': function() {
                Home.openDetails(obj, i);
            },
            mouseenter: function() { $$('#item_' + obj.HOM_nId + ' li.image').addClass('hover'); },
            mouseleave: function() { $$('#item_' + obj.HOM_nId + ' li.image').removeClass('hover'); }
        });

        return holder;

    },
    openDetails: function(obj, i) {
        $$('li.holder').removeClass('current');
        Home.homeDetail.updateDetail(obj, i);
        $('item_' + obj.HOM_nId).addClass('current');

        if (Site.browseType != 'browse') {
            $$(['itemNav', 'prevItemLink', 'nextItemLink']).removeClass('none');
            if (Home.onPage == 1 && Home.currentItem == 0) { $('prevItemLink').addClass('none'); }
            else if (Home.onPage == Home.paging.numPages() && Home.currentItem == (Home.details.length - 1)) { $('nextItemLink').addClass('none'); }
        };
		
		if(Home.returnLink.hasClass('returnToLot') && !Search.returntolast){
			Home.returnLink.removeClass('returnToLot');
			Cookie.remove('lastViewedLot', { path: '/' });
		}
		
		//setting a cookie for the last viewed.
		Cookie.set('lastViewedHome', obj.HOM_nId.toInt(), { duration: 0, path: '/' });
		
		
    },
    detailListItem: function(obj, i) {
        holder = new Element('li', { 'id': 'item_' + obj.HOM_nId, 'title': obj.HOM_strName + '::' + '$' + utils.commaFormat(obj.TotalPrice) }).addClass('holder');

        if (i == Home.currentItem) holder.addClass('current');

        if (obj.iSaved == "1") { holder.addClass('saved'); }
        if (obj.iRegistered == "1") { holder.addClass('registered'); }

        var homeName = obj.HOM_strName || '';
        if (homeName.length > 6) {
            homeName = homeName.slice(0, 6) + '&hellip;';
        }

        container = new Element('ul').injectInside(holder);
        lne1 = new Element('li', { 'id': 'lot_' + obj.HOM_nId }).addClass('name').setHTML(homeName).injectInside(container);
        container.addEvent('click', function() {
            Home.openDetails(obj, i);
        });
        lne2 = new Element('li').addClass('price').setHTML('$' + utils.commaFormat(obj.TotalPrice)).injectInside(container);

        var gap = 0;
        var wid = 71;
        var leftPos = (wid * i) + (gap * i);

        holder.setStyle('left', leftPos);

        return holder;
    },
    setType: function(t, single) {

        $$('#' + Home.type + 'Search a').removeClass('selected');
        $$('#' + t + 'Search a').addClass('selected');

        $$(['list_holder', 'infoListing']).removeClass(Home.type).addClass(t);

        Home.type = t;
        Site.browseType = t;

        Cookie.set('uHomeSearchType', Home.type, { duration: 14, path: '/' });

        Home.homeDetail.changeMode(t);

        Home.buildList();
    },
    pageNav: function(tObject) {
        Home.tRecords = tObject.Total.toInt();
        config['pageSize'] = tObject.PageSize.toInt();
        Home.LastId = tObject.LastId.toInt();

        //Working out the number of pages.
        if (Home.getFirst != true) {
            $$('.pageLinks').empty();
            Home.pageTotal = Math.ceil(Home.tRecords / config['pageSize']);

            Home.paging = new pagination('pageNav_top', tObject.Total.toInt(), {
                num_edge_entries: 2,
                num_display_entries: 4,
                bottom_nav_holder: 'pageNav_bottom',
                bottom_nav: true,
                onChange: Home.changePage.bind()
            });

            if (Home.pageTotal > 1) {
                Home.getFirst = true;
            } else {
                $$('.pageLinks').empty();
                Home.paging.maxentries = 1;
            }
        }
        utils.activateToolTip('.toolTip');
    },
    changePage: function(offset, page, pPage) {
        Home.onPage = page;
        Home.offset = offset;

        if (!pPage) {
            //Starts from position 0 when the new list loads
            Home.startStep = Home.currentItem = 0;
        } else {
            $('prevItemLink').removeClass('none');
        }

        Home.getList('newPage');
        if (Home.paging) {
            Home.paging.drawLinks();
        }
    },
    prevPage: function() {
        Home.paging.current_page = Home.paging.current_page - 1;

        Home.startStep = Home.currentItem = config['pageSize'] - 1;

        Home.changePage(
			(Home.onPage - 2) * config['pageSize'],
			Home.onPage - 1,
			true
		);
    },
    nextPage: function() {
        Home.paging.current_page = Home.paging.current_page + 1;

        Home.changePage(
			Home.onPage * config['pageSize'],
			Home.onPage + 1
		);
    },
    prevItem: function() {
        if (Home.currentItem > 0) {
            Home.currentItem = Home.currentItem - 1;
            Home.openDetails(Home.details[Home.currentItem], Home.currentItem);
        } else if (Home.onPage > 1) {
            Home.currentItem = config['pageSize'] - 1;
            Home.prevPage();
        }
        if (Home.currentItem >= 0) { $('nextItemLink').removeClass('none'); }
        if (Home.onPage == 1 && Home.currentItem == 0) { $('prevItemLink').addClass('none'); }

    },
    nextItem: function() {
        if (Home.currentItem + 1 < Home.details.length) {
            Home.currentItem = Home.currentItem + 1;
            Home.openDetails(Home.details[Home.currentItem], Home.currentItem);
        } else if (Home.onPage != Home.paging.numPages()) {
            Home.currentItem = 0;
            Home.nextPage();
        }
        if (Home.currentItem + 1 == Home.details.length) {
            if (Home.onPage != Home.paging.numPages()) $('nextItemLink').setHTML('Next');
            else $('nextItemLink').addClass('none');
        } else {
            $('nextItemLink').setHTML('Next');
            if ($('prevItemLink').hasClass('none')) $('prevItemLink').removeClass('none');
            $('prevItemLink').setHTML('Prev');
        }
    },
    updateState: function(action, obj) {
        switch (action) {
            case 'saveregistered':
                myList.addToList(obj['primKey'], obj['itemName'], { facID: obj['facID'], aFacId: obj['assetID'] });
            case 'registered':
                Home.details[Home.currentItem]['iRegistered'] = 1;
                $('item_' + obj['primKey']).addClass('registered');
                if (Home.type == 'detail') {
                    $('regInterest').addClass('registered');
                }
                break;
        }
    }
};
