/*
 WCI Communities JS
 &copy WCI Communities Inc. 2008-2009
*/

var is_msie = false;
var is_msie6 = false;
var pImages = [];

function newImage(src) {
	if (document.images) {
		var rslt = new Image();
		rslt.src = src;
		pImages[src] = rslt;
	}
}

$.fn.hoverClass = function(c) {
	return this.each(function() {
		$(this).hover( 
			function() { $(this).addClass(c);  },
			function() { $(this).removeClass(c); }
		);
	});
};	  

function change_input_width(obj, howwide) {
	obj.style.width = howwide;
	return true;
}


/*  ------------------------ wci menu javascript ------------------------ */

// dropdown = widget drop downs
// menu = navigation menu 

var menuSpeed = 1; // millisec
var menuCloseSpeed = 1; // millisec
var stickyQSMenu = false;
var stickyCLMenu = false;

var wci_selectItems = ['#timeframe-field', '#country-field'];
var is_content_search = false;
var default_searchtype = 'qd';

// fix for IE6 select item bug
function toggleSelecteItems(show) {
	if (is_msie6) {
		for(var s=0; s < wci_selectItems.length; s++) {
			if (show) {
				$(wci_selectItems[s]).css('visibility', 'visible');
			} else {
				$(wci_selectItems[s]).css('visibility', 'hidden');
			}
		}
	}
}

// fix focus on inputs present
function focusFix() {
	if (typeof(is_contact) != 'undefined') {
		$('#mid-container form input').blur();
	}
	
	if (is_content_search) {
		$('#search-text').blur();	
	}
}

// load community list tab content
function loadComListTab(comList, comTab) {
        commMenuLoaded[comList].loaded = 1;
        toggleWCILoader(true);
        $.getJSON('/ajax/com-list/' + comTab,
			function(data) {
				if (data.count > 0) {
						$(commMenuLoaded[comList].ajax).html(data.html).show();
				}
				commMenuLoaded[comList].loaded = 2;
				toggleWCILoader(false);
			}
        );
}


// community list menu context
var commMenuLoaded = {
	'community-list-tab-all': {
		'loaded' : 2,
		'init' : function() { },
		'content' : '#community-list-all'
	},
	'community-list-tab-golf': {
		'loaded' : 0,
		'ajax' : '#comlist-golf-placeholder',
		'html' : '',
		'init' : function() { 
			loadComListTab('community-list-tab-golf', 'golf');
		},
		'content' : '#community-list-golf'
	},
	'community-list-tab-boating': {
		'loaded' : 0,
                'ajax' : '#comlist-boating-placeholder',
                'html' : '',
		'init' : function() {
			loadComListTab('community-list-tab-boating', 'boating-marina');
		},
		'content' : '#community-list-boating'
	},
	'community-list-tab-activeadult': {
		'loaded' : 0,
                'ajax' : '#comlist-activeadult-placeholder',
                'html' : '',
		'init' : function() { 
			loadComListTab('community-list-tab-activeadult', '55better');
		},
		'content' : '#community-list-activeadult'
	}, 
	'community-list-tab-tower': {
		'loaded' : 0,
                'ajax' : '#comlist-tower-placeholder',
                'html' : '',
		'init' : function() { 
			loadComListTab('community-list-tab-tower', 'tower-condominiums');	
		},
		'content' : '#community-list-tower'
	}
};

var s_region = {
	'list' : '#region-list',
	'active' : '#region-list-active',
	'input' : '#region-input',
	'item' : '#region-id-',
	'current' : ''	
};
var s_hometype = {
	'list' : '#hometype-list',
	'active' : '#hometype-list-active',
	'input' : '#hometype-input',
	'item' : '#hometype-id-',
	'current' : ''	
};
var s_amenity = {
	'list' : '#amen-list',
	'active' : '#amen-list-active', 
	'input' : '#amen-input',
	'item' : '#amen-id-',
	'current' : ''	
};
var s_price = {
	'list' : '#price-list',
	'active' : '#price-list-active',
	'input' : '#price-input',
	'item' : '#price-id-',
	'current' : ''	
};
var s_regiongroup = {
	'list' : s_region.list,		
	'input' : '#regiongroup-input',
	'active' : s_region.active,
	'item' : '#regiongroup-id-',
	'current' : ''	
};
var s_order = {
	'list' : '#order-list',
	'active' : '#order-list-active',
	'input' : '#order-input',
	'item' : '#order-id-',
	'current' : ''	
};
var s_type = {
	'input' : '#searchtype-input',
	'item' : 'type',
	'form' : '#searchtype-form-id'
};

var quickSearchForm = {
	'id' : '#quicksearch-form',
	'name' : 'quicksearch'
};

var quickSearch = [];
quickSearch['region'] = s_region;
quickSearch['hometype'] = s_hometype;
quickSearch['amen'] = s_amenity;
quickSearch['price'] = s_price;
quickSearch['regiongroup'] = s_regiongroup;
if (typeof(is_newhomes) != 'undefined' && is_newhomes) {
	quickSearch['order'] = s_order;
}


// active quick search dropdown
qsActive = null;

// execute search
function doQuickSearch() {

	toggleWCILoader(true);
	
	// apply active form values
	for (fi in quickSearch) { 		
		$(quickSearch[fi].input).attr('value', quickSearch[fi].current);
	}

	// assign selected search type
	if (typeof(multi_search) != 'undefined' && multi_search) {
		$(s_type.input).attr('value', searchTypeVal()); 
	}
	
	document.forms[quickSearchForm.name].submit();
}


// lookup searchtype value
function searchTypeVal() {
	var selected_type = $(s_type.form + ' input[name="' + s_type.item + '"]:checked').val();
	return (typeof(selected_type)!='undefined'?selected_type:default_searchtype);
}

// track async pageview
function wciTrackPageView(uri, qstr) {
	// goog
	if (typeof(pageTracker) != 'undefined') {
		pageTracker._trackPageview(uri + (typeof(qstr)!='undefined'&&qstr.length>0?'?'+qstr:''));
	}
	
	// webtrends
	if (typeof(dcsMultiTrack) != 'undefined') {
		dcsMultiTrack('DCS.dcssip',wci_domain,'DCS.dcsuri',uri,'DCS.dcsqry',(typeof(qstr)!='undefined'&&qstr.length>0?qstr:''))
	}
}

// toggle selected dropdown visibility
function toggleDropdown(dd) {
	
	if (dd) {
		var ddId = dd.attr('id');
		var qsObj = quickSearch[ddId.substring(0,ddId.search(/-/))];

		if (qsActive == qsObj) {
			$(qsObj.list).hide();
			dd.find('a span').css({backgroundPosition: '0 0'});
			dd.children('a').blur();
			qsActive = null;

		} else {
			if (qsActive) {
				$(qsActive.list).hide();
				$(qsActive.active).find('a span').css({backgroundPosition: '0 0'});
			}
			dd.find('a span').css({backgroundPosition: '0 -26px'});
			$(qsObj.list).show().children('a').focus();
			qsActive = qsObj;
		}
		stickyQSMenu = true;
	} else {

		if (qsActive) {
			$(qsActive.list).hide();
			$(qsActive.active).find('a span').css({backgroundPosition: '0 0'});

			qsActive = null;
		}
		
	}

}

// quick search dropdown item click
function selectDropdownItem(_item, qsKey, qsVal) {
	
	var item = _item;
	
	if (typeof(qsKey) != 'undefined' && typeof(qsVal) != 'undefined' && qsVal.length > 0) {
		var searchId = quickSearch[qsKey].item + qsVal;
		item = $(searchId).children('a');
	}
	
	if (typeof(item) == 'undefined') {
		return;	
	}

	var parentId = item.parent('li').attr('id');
	if (typeof(parentId) == 'undefined') {
		return;	
	}
	
	var prefix = parentId.substring(0, parentId.search(/-/));
	var value = parentId.substring(prefix.length + 4);

	$(quickSearch[prefix].list + ' li, ' + quickSearch[prefix].list + ' a').removeClass('dd-active');
	var html_val = item.html();
	if (html_val.length > 14 && prefix != 'order') {
		html_val = html_val.substring(0,14) + '...';	
	} else if (html_val.length > 14 && prefix == 'order') {
		html_val = html_val.substring(0,18) + '...';	
	}
	
	$(quickSearch[prefix].active + ' a span').html(html_val);
	$(quickSearch[prefix].list + ' .zero-item').parent('li').show();

	// assign the selected value
	quickSearch[prefix].current = value;

	switch(prefix) {
		
		case 'regiongroup':
			item.addClass('dd-active');
			s_region.current = '';
			break;
		case 'region':
			s_regiongroup.current = '';
		case 'amen':
		case 'price':
		case 'order':
		case 'hometype':
			if (!item.hasClass('zero-item')) {
				item.parent('li').addClass('dd-active');
			}
			break;
		default:
			break;
	}

	if (item.hasClass('zero-item')) {
		item.parent('li').hide();					  
    }
	
	toggleDropdown();
	stickyQSMenu = true;
}

// init quicksearch dropdown 
function initQuickSearchDropdowns() {
		   
	// dropdown item click 
	$('#quicksearch-form-values .ddi').click(function(e) {
		selectDropdownItem($(this));
		e.stopPropagation();
	});
	
	// dropdown click toggle
	$('#quicksearch-form-values .dropdown-active').click(function(e) {
		toggleDropdown($(this));
		e.stopPropagation();
	});

	$('#quicksearch-form-values .dropdown li ul li').hoverClass('dd-hover');
	$('#quicksearch-form-values .region-group > a').hoverClass('dd-hover');
	$('#hometype-list li, #amen-list li, #price-list li, #order-list li').hoverClass('dd-hover');

	$('#corp_intro_flash, #corp_header_flash, object, embed').click(function() {
		toggleDropdown();
		if (typeof(toggleAdvDropdown) != 'undefined') {
			toggleAdvDropdown();
		}
	}).focus( function(e) {
		toggleDropdown();
		if (typeof(toggleAdvDropdown) != 'undefined') {
			toggleAdvDropdown();
		}
	});
	
	$('#quicksearch-form-values span').hoverClass('qs-item-hover');

	$('#quicksearch-button').click(
		function() { 
			doQuickSearch(); 
			return false;
		}
	).attr({href:'#', onclick:'return false'});

	// kill the dropdown menu when click'ed off elsewhere
	$('body').intercept('click',{
		'*':function(e){
			toggleDropdown();
			if (typeof(toggleAdvDropdown) != 'undefined') {
				toggleAdvDropdown();
			}
		}
	});

	if (no_menus == false && is_com_search == false ) {
		// load previous form values if present
		for (fi in quickSearch) { 		
			var formVal = $(quickSearch[fi].input).attr('value');
	
			if (typeof(formVal) != 'undefined' && formVal.length > 0) {
				selectDropdownItem(null, fi, formVal);
			}
		}
		
		// assign selected search type
		if (typeof(multi_search) != 'undefined' && multi_search) {
			$(s_type.input).attr('value', searchTypeVal());  
			$('#qs-searchtype label').hoverClass('qstype-hover');
			$('#qs-searchtype input').click(function() {
				stickyQSMenu = true;	
			});
		}
	
	}

	if (!jQuery.support.opacity && !is_msie) {
		$('#homepage-search-opacity').fadeTo(1, 0.2);
	}
}

// load community menu content
function initCommunities(m, id) {
	if (commMenuLoaded[id].loaded == 0) {
		commMenuLoaded[id].init();
		var comTab = '/ajax/community-list/menu/' + id;
		wciTrackPageView(comTab);
	}
	return commMenuLoaded[id].content;	
}

// menu queues
var queueFah = {
	// 'name' : 'Find a Home',
	'showSetup' : false,
	'hideSetup' : false,
	'menuVisible' : false,
	'timer' : null,
	'show' : function() { },
	'hide' : function() { },
	'menuObj' : null
};
var queueVc = {
	// 'name' : 'Visit Communities List',
	'showSetup' : false,
	'hideSetup' : false,
	'menuVisible' : false,
	'timer' : null,
	'show' : function() { },
	'hide' : function() { },
	'menuObj' : null
};
var queueOffers = {
	// 'name' : 'Current Offers',
	'showSetup' : false,
	'hideSetup' : false,
	'menuVisible' : false,
	'timer' : null,
	'show' : function() { },
	'hide' : function() { },
	'menuObj' : null
};
var queueBlog = {
	// 'name' : 'Blog',
	'showSetup' : false,
	'hideSetup' : false,
	'menuVisible' : false,
	'timer' : null,
	'show' : function() { },
	'hide' : function() { },
	'menuObj' : null
};


// queue mechanism for menu system
function doQueue(mq, showMenu, sticky, customShowQueueSpeed) {

	// existing timer?
	if (typeof(mq.timer) != 'undefined') {
		if (showMenu) {
			if (mq.menuVisible) {				
				clearTimeout(mq.timer);
			} else {
				clearTimeout(mq.timer);
				mq.timer = setTimeout(function() {
						mq.show();
						focusFix();
						mq.timer = null;
					 }, 
					 (typeof(customShowQueueSpeed)!='undefined'?customShowQueueSpeed:100)
				);
			}
		} else {
			if (mq.menuVisible) {
				clearTimeout(mq.timer);
				mq.timer = setTimeout(function() {
						mq.hide();
						mq.timer = null;
					 }, 
					 (sticky?3000:750)
				);
			} else {
				clearTimeout(mq.timer);
			}
		}
	} else {
		if (showMenu) {
			if (mq.menuVisible) {
				// do nothing
			} else {
				mq.timer = setTimeout(function() {
						mq.show();
						focusFix();
						mq.timer = null;
					 }, 
					 (typeof(customShowQueueSpeed)!='undefined'?customShowQueueSpeed:100)
				);
			}
		} else {
			if (mq.menuVisible) {
				mq.timer = setTimeout(function() {
						mq.hide();
						mq.timer = null;
					 }, 
					 (sticky?3000:750)
				);
			
			} else {
				// do nothing
			}
		}
	}
}



// init top nav menu
function initMenuSystem() {

	if (is_homepage == false && is_com_search == false && no_menus == false) {
		queueFah.menuObj = $('#menu-findahome');
		queueFah.menuObj.hover(
		   function() {
				
				if (!queueFah.showSetup) {
					queueFah.show = function () {
						if (queueVc.menuVisible) { queueVc.hide(); }
						if (queueBlog.menuVisible) { queueBlog.hide(); }
						if (queueOffers.menuVisible) { queueOffers.hide(); }
						
						queueFah.menuObj.children('.menu-link').addClass('hover-menu');
						queueFah.menuObj.children('#community-quicksearch').fadeIn(menuSpeed,
							function() { 
								queueFah.menuVisible = true;
							}
						);
						
					};				
					queueFah.showSetup = true;
				}				
				doQueue(queueFah, true, false);
		   },
		   function() { 

				if (!queueFah.hideSetup) {
					queueFah.hide = function () {
						toggleDropdown();						
						queueFah.menuObj.children('#community-quicksearch').fadeOut(menuCloseSpeed,
							function() {
								queueFah.menuObj.children('.menu-link').removeClass('hover-menu');
								queueFah.menuVisible = false;
								stickyQSMenu = false;
							}
						);
						
					};
					queueFah.hideSetup = true;
				}
				
				doQueue(queueFah, false, stickyQSMenu);
				
		   }
		);
	} else {
		$('#menu-findahome .menu-link').hoverClass('hover-menu');
	}
	
	if (is_static_tabs == false && no_menus == false) {
		
		queueVc.menuObj = $('#menu-viewcommunities');
		queueVc.menuObj.hover(
		   function() {
			   
			   if (!queueVc.showSetup) {
					queueVc.show = function() {
						if (queueFah.menuVisible) { queueFah.hide(); }
						if (queueOffers.menuVisible) { queueOffers.hide(); }
						if (queueBlog.menuVisible) { queueBlog.hide(); }
						toggleSelecteItems(false);
						queueVc.menuObj.children('.menu-link').addClass('hover-menu');
						queueVc.menuObj.children('#community-list').fadeIn(menuSpeed,
							function() { 
								toggleHomepageFlash(false);
								queueVc.menuVisible = true;
							}
						);
					};
					queueVc.showSetup = true;
			    }
				doQueue(queueVc, true, false);	
		   },
		   function() { 
				if (!queueVc.hideSetup) {
					queueVc.hide = function() {
						
						queueVc.menuObj.children('#community-list').fadeOut(menuCloseSpeed,
							function() {
								queueVc.menuObj.children('.menu-link').removeClass('hover-menu');	
								queueVc.menuVisible = false;
								stickyCLMenu = false;
								toggleHomepageFlash(true);
								toggleSelecteItems(true);
							}
						);


					};
					queueVc.hideSetup = true;
				}
				doQueue(queueVc, false, stickyCLMenu);
		   }
		);
	} else {
		$('#menu-viewcommunities .menu-link').hoverClass('hover-menu');
	}
	
	
	if (is_offers == false && no_menus == false) {
		queueOffers.menuObj = $('#menu-offers');
		queueOffers.menuObj.hover(
		   function() {
	
				if (!queueOffers.showSetup) {
					
					queueOffers.show = function() {
						if (queueVc.menuVisible) { queueVc.hide(); }
						if (queueFah.menuVisible) { queueFah.hide(); }
						if (queueBlog.menuVisible) { queueBlog.hide(); }
						toggleSelecteItems(false);
						queueOffers.menuObj.children('.menu-link').addClass('hover-menu');
						queueOffers.menuObj.children('#offers-menu-wrapper').fadeIn(menuSpeed,
							function() {
								toggleDropdown();
								
								if (typeof(toggleAdvDropdown) != 'undefined') {
									toggleAdvDropdown();	
								}
							}
						);
	
						queueOffers.menuVisible = true;
					};			
					queueOffers.showSetup = true;
				}
				
				doQueue(queueOffers, true, false);
		   },
		   function() { 
				
				if (!queueOffers.hideSetup) {
					queueOffers.hide = function() {
						
						queueOffers.menuObj.children('#offers-menu-wrapper').fadeOut(menuCloseSpeed,
							function() {
								queueOffers.menuObj.children('.menu-link').removeClass('hover-menu');	
								queueOffers.menuVisible = false;
								toggleSelecteItems(true);
							}
						);
						
					};
					queueOffers.hideSetup = true;
				}
				doQueue(queueOffers, false, false);
		   }
		);
	} else {
		$('#menu-offers .menu-link').hoverClass('hover-menu');
	}
	
	if (no_menus == false) {
		queueBlog.menuObj = $('#menu-blog');
		queueBlog.menuObj.hover(
		   function() {
	
				if (!queueBlog.showSetup) {
					
					queueBlog.show = function() {
						if (queueVc.menuVisible) { queueVc.hide(); }
						if (queueFah.menuVisible) { queueFah.hide(); }
						if (queueOffers.menuVisible) { queueOffers.hide(); }
						toggleSelecteItems(false);
						queueBlog.menuObj.children('.menu-link').addClass('hover-menu');
						queueBlog.menuObj.children('#blog-content').fadeIn(menuSpeed,
							function() {
								toggleDropdown();
								
								if (typeof(toggleAdvDropdown) != 'undefined') {
									toggleAdvDropdown();	
								}
							}
						);
	
						queueBlog.menuVisible = true;
					};			
					queueBlog.showSetup = true;
				}
				
				doQueue(queueBlog, true, false);
		   },
		   function() { 
				
				if (!queueBlog.hideSetup) {
					queueBlog.hide = function() {
						
						queueBlog.menuObj.children('#blog-content').fadeOut(menuCloseSpeed,
							function() {
								queueBlog.menuObj.children('.menu-link').removeClass('hover-menu');	
								queueBlog.menuVisible = false;
								toggleSelecteItems(true);
							}
						);
						
					};
					queueBlog.hideSetup = true;
				}
				doQueue(queueBlog, false, false);
		   }
		);
	} else {
		$('#menu-blog .menu-link').hoverClass('hover-menu');
	}
	
	$('#menu-contact .menu-link').hoverClass('hover-menu');
	$('#menu-about .menu-link').hoverClass('hover-menu');
	
	if (!is_static_tabs) {
		// init community list tab actions
		$('#community-list-tabs .comlist-tab').click(
			function() {
				var t = $(this);
				var p = t.parent();
				stickyCLMenu = true;
				if (commMenuLoaded[p.attr('id')].loaded == 1) {
					// still loading
					return false;
				}
				if (!t.hasClass('tab-active')) {
				
					var c = initCommunities(p, p.attr('id'));
					p.siblings('div').children('a').removeClass('tab-active');
					
					for (tc in commMenuLoaded) { 		
						$(commMenuLoaded[tc].content).hide();
					}
					
					t.addClass('tab-active');
					$(c).show();
				}
				return false;
			}
		); // end tab actions
	}
	$('#community-list-tabs .comlist-tab').hoverClass('tab-hover');
	
}

function toggleHomepageFlash(show) {
	if (is_homepage) {
		if (show) {
			$('#corp_intro_flash').fadeTo(1, 1);
			$('#corp_map_flash').fadeTo(1, 1);
			
		} else {
			$('#corp_intro_flash').fadeTo(1, 0);
			$('#corp_map_flash').fadeTo(1, 0);
		}
	}
}


// expose the quick delivery feature
function wciQdFeature() {

	toggleWCILoader(true);
	$('#qd-feature-link').fadeTo(1, 0);
	
	if (typeof(search_cids_f) != 'undefined') {
		wciQdFeatureScroll(0, false);
	} else {
		$.get('/ajax/quick-delivery-features', 
			function(data){
				$('#block-block-33 .block-content').html(data);
			}
		);
		wciTrackPageView('/ajax/quick-delivery-features');
	}
	toggleWCILoader(false);
	return false;
}

// do quick delivery set lookup
function wciQdFeatureScroll(start, doFade, notrack) {
	
	var _divId = {
		data:'#block-block-33 .block-content',
		homes:'#block-block-33 .feature-qd-home'
	};

	if (is_com_search) {
		_divId.data = '#featured-qdh-search';
		_divId.homes = '#featured-qdh-search .feature-qd-home';
	}

	if (typeof(fire_qd_block) != 'undefined') {
		if (fire_qd_block.data) { _divId.data = fire_qd_block.data; }
		if (fire_qd_block.homes) { _divId.homes = fire_qd_block.homes; }
	}	

	if (doFade) {
		$(_divId.homes).hide();
		$('#qdh-feat-loader').show();
	}

	$.get('/ajax/search-quick-delivery?coms='  + search_cids_f + '&start=' + start,
		function(data){
			$(_divId.data).html(data).show();
		}
	);
	if (typeof(notrack) == 'undefined') {
		wciTrackPageView('/ajax/search-quick-delivery', 'coms='  + search_cids_f + '&start=' + start);	
	}
	return false;
}


// loader togger
function toggleWCILoader(show) {
	if (show) {
		$('#corp-loader').show();
	} else {
		$('#corp-loader').fadeOut('slow');	
	}
}

// jquery hinting function
jQuery.fn.hint = function() {
	return this.each(function(){
		var t = $(this); 
		var title = t.attr('title'); 
		
		if (title) { 

			t.focus(function(){
				if (t.val() == title) {
				  t.val('');
				  t.removeClass('blur');
				}
			});

			t.blur(function(){
				if (t.val() == '') {
				  t.val(title);
				  t.addClass('blur');
				}
			});
			
			t.parents('form:first').submit(function(){
				if (t.val() == title) {
					t.val('');
					t.removeClass('blur');
				}
			});
			t.blur();
		}
	});		
};

// init document js
$(document).ready(function() {

	is_msie = (!jQuery.support.opacity);
	is_msie6 = (is_msie && navigator.appVersion.indexOf("6.0") != -1);

	//	setup upper menu system
	initMenuSystem();	

	//	setup quicksearch dropdowns
	if (no_menus == false) {
		initQuickSearchDropdowns();
	}

	if (!jQuery.support.opacity) {
		// IE png fix
		$('.img_png').pngFix();
	}

	$('#header-search').hint().focus(function() {
			$(this).addClass('search-focus');
		}).blur(function() {
			$(this).removeClass('search-focus');
	});

	if (typeof(is_contact) != 'undefined') {
		$('#visitdate-field, #referral-form-content input').hint();
	}
	
	if ($('#search-text').length>0) {
		is_content_search = true;
	}
	
	if (typeof(fire_qd_block) != 'undefined') {
		if (fire_qd_block.autoLoad) {
			wciQdFeatureScroll(fire_qd_block.start, fire_qd_block.doFade);
		}
	}

	// done
	toggleWCILoader(false);

});

