/*
 WCI Community Search JS
 &copy WCI Communities, Inc 2008-2010
*/

/* ------------------- community search js ------------------- */

var search_hash = window.location.hash;
var container = null;
var nextLink = null;
var prevLink = null;
var pageLinksTop = [];
var pageLinksBottom = [];
var pageCache = {
};

var active_page = 1;
var firstLoad = true;
var scroller_heights = {
	full: 0,
	last: 0
};

var s_region_adv = {
	'list' : '#regiongroup-list-adv',
	'active' : '#regiongroup-list-active-adv',
	'input' : '#regiongroup-adv-id-input',
	'item' : '#regiongroup-adv-id-',
	'current' : ''
};
var s_price_adv = {
	'list' : '#price-list-adv',
	'active' : '#price-list-active-adv',
	'input' : '#price-adv-id-input',
	'item' : '#price-adv-id-',
	'current' : ''
};
var s_order_adv = {
	'list' : '#order-list-adv',
	'active' : '#order-list-active-adv', 
	'input' : '#order-adv-id-input',
	'item' : '#order-adv-id-',
	'current' : ''
};

var asActive = null;

var advSearch = [];
advSearch['regiongroup'] = s_region_adv;
advSearch['price'] = s_price_adv;
advSearch['order'] = s_order_adv;

// toggle advamced search dropdown visibility
function toggleAdvDropdown(dd) {
	
	if (dd) {
		var ddId = dd.attr('id');
		var asObj = advSearch[ddId.substring(0,ddId.search(/-/))];
		if (asActive == asObj) {
			$(asObj.list).hide();
			dd.find('a span').css({backgroundPosition: '0 0'});
			dd.children('a').blur();
			asActive = null;
		} else {
			if (asActive) {
				$(asActive.list).hide();
				$(asActive.active).find('a span').css({backgroundPosition: '0 0'});
			}
			dd.find('a span').css({backgroundPosition: '0 -26px'});
			$(asObj.list).show().children('a').focus();
			asActive = asObj;
		}
	} else {
		if (asActive) {
			$(asActive.active).find('a span').css({backgroundPosition: '0 0'});
			$(asActive.list).hide();
			asActive = null;
		}
	}

}

// advanced search dropdown item click
function selectASDropdownItem(_item, asKey, asVal) {
	
	var dditem = _item;
	
	if (typeof(asKey) != 'undefined' && typeof(asVal) != 'undefined' && asVal.length > 0) {
		var searchId = advSearch[asKey].item + asVal;
		dditem = $(searchId).children('a');
	}
	
	if (typeof(dditem) == 'undefined') {
		return;	
	}

	var parentId = dditem.parent('li').attr('id');
	if (typeof(parentId) == 'undefined') {
		// exit on an invalid query param
		return;	
	}
	
	var prefix = parentId.substring(0, parentId.search(/-/));
	var value = parentId.substring(prefix.length + 8);

	$(advSearch[prefix].list + ' li').removeClass('dd-active');
	$(advSearch[prefix].active + ' a span').html(dditem.html()); 	
	$(advSearch[prefix].list + ' .zero-item').parent('li').show();

	// assign the selected value
	advSearch[prefix].current = value;
	
	if (prefix == 'regiongroup') {
		if (typeof(value) != 'undefined' && value.length > 0) {
			$(['#regiongroup-items-id-', value].join('')).show().siblings('.region-group-items').hide();
		} else {
			$('#adv-regiongroup-container-regions .region-group-items').hide();
		}
	}

	if (!dditem.hasClass('zero-item')) {
		dditem.parent('li').addClass('dd-active');
	} else {
		dditem.parent('li').hide();					  
    }
	
	toggleAdvDropdown();
	closeQSearchMenu = false;
}


// reset next/prev
function sr_resetPageNav() {

	var hasMorePages = ((page_count - active_page)!=0);
	var isFirstPage = (active_page == 1);
	
	if (isFirstPage && hasMorePages) {
		nextLink.show();
		prevLink.hide();
		$('#communitysearch-pages-top').removeClass();
		if (is_msie6) {
			$('#communitysearch-pages-top').css('backgroundPosition', '5px 2px');
		}
	} else if (!isFirstPage && hasMorePages) {
		nextLink.show();
		prevLink.show();
		$('#communitysearch-pages-top').addClass('hasprev');
		if (is_msie6) {
			$('#communitysearch-pages-top').css('backgroundPosition', '90px 2px');
		}
	} else if (!isFirstPage && !hasMorePages) { 
		nextLink.hide();
		prevLink.show();
		$('#communitysearch-pages-top').addClass('hasprev');
		if (is_msie6) {
			$('#communitysearch-pages-top').css('backgroundPosition', '90px 2px');
		}
	}

	var nextPage = active_page+1;
	var prevPage = active_page-1;
	if (nextPage > page_count) {
		nextPage = page_count;
	}
	if (prevPage < 1) {
		prevPage = 1;
	}
	
	nextLink.attr('href', ['#page', nextPage].join('')).attr('title', ['Go to Page ', nextPage].join(''));
	prevLink.attr('href', ['#page', prevPage].join('')).attr('title', ['Go to Page ', prevPage].join(''));
}

// execute page change
function sr_changePage(gotoPageNum) {
	
	if (gotoPageNum != active_page || firstLoad) {
		search_hash = ['#page', gotoPageNum].join('');
		toggleAdvLoader(true);			
		$.getJSON(['/ajax/com-search/', search_cids_f, '/', gotoPageNum, '?order=', search_order].join(''),
			pageChangeCallback
		);

	}
}

// page data change callback
function pageChangeCallback(data){

	var gotoPageNum = 1;
	toggleAdvLoader(false);

	if (typeof(data) != 'undefined' && data.count > 0) {

		if (typeof(data.page) != 'undefined') {
			gotoPageNum = data.page
		} 

		pageLinksTop[active_page].removeClass('page-active');
		pageLinksBottom[active_page].removeClass('page-active');

		pageLinksTop[gotoPageNum].addClass('page-active');
		pageLinksBottom[gotoPageNum].addClass('page-active');	
		active_page = gotoPageNum;
		
		sr_resetPageNav();
		
		if (active_page == page_count) {
			container.css('height', scroller_heights.last);
		} else {
			container.css('height', scroller_heights.full);
		}
		
		pageLinksTop[gotoPageNum].focus();

		container.html(data.html);

		if (firstLoad) {
			firstLoad = false;
			container.css('paddingTop', '0px');
			$('#communitysearch-pages-bottom').show();
		} else {
			if (typeof(paging_url) != 'undefined') {
				var searchPageUrl = [paging_url, '/page', data.page].join('');
				wciTrackPageView(searchPageUrl);
			}
		}
		
	}
	
}

// next / prev action
function sr_nextPrevPage(gotoPage) {
	var nextPage = active_page+1;
	var prevPage = active_page-1;
	
	if (gotoPage == 1) {
		// next
		if (nextPage > page_count) {
			sr_changePage(page_count);
		} else {
			sr_changePage(nextPage);
		}
	} else {
		// prev
		if (prevPage < 1) {
			sr_changePage(1);
		} else {
			sr_changePage(prevPage);
		}
	}
}

// show all results
function sr_showAll() {

	toggleAdvLoader(true);

	$.getJSON(['/ajax/com-search/', search_cids_f, '?all=1&order=', search_order].join(''),
		function(data){
			toggleAdvLoader(false);
			if (typeof(data) != 'undefined' && data.count > 0) {
				$('#communitysearch-pages-top, #communitysearch-pages-bottom').hide();
				$('#communitysearch-results').css({
					paddingTop: '5px',
					height: 'auto'
				}).html(data.html);
			}
			
		}
	);
	
	if (!firstLoad) {
		if (typeof(paging_url) != 'undefined') {
			var searchPageUrl = [paging_url, '/all'].join('');
			wciTrackPageView(searchPageUrl);
		}	
	}

}


// 0 = invalid page number
function sr_getPageHash() {
	if (location.hash.length > 0 && location.hash.indexOf('page') != -1) {
		var n = location.hash.substring((location.hash.length-1), location.hash.length);
		if (!isNaN(n)) {
			n = parseInt(n, 10);
			if (n >= 1 && n <= page_count) {
				return n;
			} else {
				return 0;	
			}	
		}
		
	} else {
		return 0;	
	}
}

// initialize the paging
function sr_init() {
	var page_html = '';
	var page_items = []

	var n = sr_getPageHash();
	if (n > 0) { 
		active_page = n;
	}

	// build pages
	for(var p=1; p<=page_count; p++) {
		page_items.push(['<a title="Go to Page ', p, '" href="#page', p, '" class="sr_page sr_page', p, ' ', 
							 ((p==active_page)?' page-active':''), '"><span>', p, '</span></a> '].join(''));
	}
	
	page_html = ['<a href="javascript:void(0)" title="Go to Previous Page" class="sr_prev" onclick="sr_nextPrevPage(-1);"><span>&laquo; Previous</span></a> ',
		' <span class="page-label">Pages:</span> ', page_items.join(' '),
		' &nbsp;<a href="#all" title="Show All Search Results" class="sr_all" onclick="sr_showAll();"><span>Show All</span></a>',
		' <a href="javascript:void(0)" title="Go to Next Page"  class="sr_next" onclick="sr_nextPrevPage(1);"><span>Next &raquo;</span></a>'].join('');

	container = $('#communitysearch-results');

	scroller_heights.full = (height_total-height_gap) + 'px';
	scroller_heights.last = ((page_count_last*height_com) - height_gap) + 'px';

	$('#communitysearch-pages-top, #communitysearch-pages-bottom').append(page_html);

	nextLink = $('#communitysearch-pages-top .sr_next, #communitysearch-pages-bottom .sr_next');
	prevLink = $('#communitysearch-pages-top .sr_prev, #communitysearch-pages-bottom .sr_prev');

	// setup page link actions
	$('#communitysearch-results-wrapper .sr_page').each(
		function (i, e) {
			var index = i+1;
			var pl = $(e);
			var pnum = (index > page_count?(index-page_count):index);

			pl.click(
				function() {
					sr_changePage(pnum);				
				}
			).hoverClass('page-hover');
			
			if (index > page_count) {
				pageLinksBottom[pnum] = pl;
			} else {
				pageLinksTop[pnum] = pl;
			}
		}
	);
}

function toggleAdvLoader(showLoader) {
	if (showLoader) {
		$('#communitysearch-pages-top').addClass('loading');
	} else {
		$('#communitysearch-pages-top').removeClass();
	}
}


// execute advanced search 
function doAdvSearch() {

	$('#com-advsearch-exec').addClass('exec-search');
	toggleWCILoader(true);

	// apply active form values
	for (fi in advSearch) { 		
		$(advSearch[fi].input).attr('value', advSearch[fi].current);
	}
		
	document.forms['communitysearch-advform-form'].submit();
}


// setup advanced search form 
function sr_adv_init() {

	$('#search-button-adv').click(
		function() { 
			doAdvSearch(); 
			return false;
		}
	).attr({href:'#', onclick:'return false'});
	
	// dropdown item click 
	$('#communitysearch-advform .ddi').click(function(e) {
		selectASDropdownItem($(this));
		e.stopPropagation();
	});
	
	// dropdown click toggle
	$('#communitysearch-advform .dropdown-active').click(function(e) {
		toggleAdvDropdown($(this));
		e.stopPropagation();
	});	
	
	$('#communitysearch-advform .dropdown li').hover(
		function() {
			$(this).addClass('dd-hover');
		},
		function() {
			$(this).removeClass('dd-hover');
		}
	);
	
	// load previous form values if present
	for (fi in advSearch) { 		
		var formObj = $(advSearch[fi].input);
		if (formObj.attr('type') == 'hidden') {
			var formVal = formObj.attr('value');
			if (formVal.length>0) {
				selectASDropdownItem(null, fi, formVal);
			}
		}
	}

	$('#communitysearch-advform .adv-section input').click(function() {
		var t = $(this);
		if (t.attr('checked')) {
			t.siblings('label').addClass('search-checked');
		} else {
			t.siblings('label').removeClass('search-checked');
		}
	}).each(function(i,e) {
		var t = $(e);
		if (t.attr('checked')) {
			t.siblings('label').addClass('search-checked');
		} else {
			t.siblings('label').removeClass('search-checked');
		}
	});

	search_hash = window.location.hash;
	search_hash_interval = setInterval("search_check_hash()", 150);

}


// hash monitor
function search_check_hash() {
	if (window.location.hash != search_hash) {
		
		// change page
		search_hash = window.location.hash;

		if (search_hash) {
			var search_hash_pg = sr_getPageHash();
			if (search_hash_pg) {
				sr_changePage(search_hash_pg);
				$('#communitysearch-pages-top, #communitysearch-pages-bottom').show();
				$('#communitysearch-results').css('paddingTop', 0);
			} else if (search_hash == '#all') {
				sr_showAll();
			}
			
		} else {

			sr_changePage(1);
			$('#communitysearch-pages-top, #communitysearch-pages-bottom').show();
			$('#communitysearch-results').css('paddingTop', 0);
		}
	
	}
}

var jqmDialogLoaded = false;

// load the modal flash search 
function wci_load_map_search() {

	if (!jqmDialogLoaded) {
		$('#jqm .hideDialog').click(function() {
				$('#jqm').jqmHide()							 
		});
		$('#jqm').jqm({model:true});
		
		var mapf = new SWFObject("/content/1000/flash/wci_map/wci_map.swf", "corp_map_flash", "390", "379", 8);
		mapf.addParam("wmode", "transparent");
		mapf.addParam("menu", "false");
		mapf.addParam("salign", "tl");
		mapf.addVariable("d", wci_domain);
		mapf.write("mapsearch-flash");

		jqmDialogLoaded = true;
		wciTrackPageView('/community-search/show-map');
	}
	
	$('#jqm').jqmShow();
}

function expandMap() {} 
function collapseMap() {}


// init the qd home search
function wci_load_qd_search() {
	if (typeof(search_cids) != 'undefined') {
		if (search_cids.length > 0) {
			wciQdFeatureScroll(0, false, true);
		}
	}
}

// init document js
$(document).ready(function() {
	
	// setup adv search form
	sr_adv_init();

	if (location.hash == '#all' || location.hash == 'all') {
		// skip load if show all is selected
		sr_showAll();
	} else if (do_paging) {
		// setup paging
		sr_init();
		// load first page
		sr_changePage(active_page);
	}

	$('#communitysearch-advform span').hoverClass('qs-item-hover');
	
	// check for flash 8
	if (deconcept.SWFObjectUtil.getPlayerVersion().major >= 8) {
		$('#loadmap-exec a').click(
			function() {
				wci_load_map_search();
				return false;
			}
		);
		$('#loadmap-exec').addClass('flashmap').show();
	}
	
	// load qds
	wci_load_qd_search();
});

