var $j = jQuery.noConflict();
var listingStatus = null;

$j(document).ready(function() {

	/********************************************/
	/* Stuff for results page only				*/
	/********************************************/
	
	if ($j("body").attr("id") == "results") {
		showSubHeader();
		prepareResultsLinks();
		prepareSubHeaderLinks();
		shortenNavHeading();
		//addSponsorBorders();
		toggleAddress(getUrlParamVal(location.search, "viewMode"));

		// Add hover color to sponsored listing business names
		$j("div.sponsor").hover( function() {
			$j(this).children(".vcard").children("h3").children("a").css("color","#c14513");
			$j(this).css("cursor","pointer");
		},
		function() {
			$j(this).children(".vcard").children("h3").children("a").css("color","#6ba321");
			$j(this).css("cursor","auto");
		});
		
		// Add hover color to non-sponsored listing business names
		$j("div.listing").hover( function() {
			$j(this).children(".vcard").children("h3").children("a").css("color","#c14513");
			$j(this).css("cursor","pointer");
		},
		function() {
			$j(this).children(".vcard").children("h3").children("a").css("color","#6ba321");
		});		
		
		// Handle clicks on listings
		$j("div.listing").click( function() {
			location.href = $j(this).children(".vcard").children("h3").children("a").attr("href");
		});	
		
		// Handle clicks on sponsors		
		$j("div.sponsor").click( function() {
			location.href = $j(this).children(".vcard").children("h3").children("a").attr("href");
		});		
		
	}
	
	/********************************************/
	/* Stuff for print view page only			*/
	/********************************************/
	
	if ($j("body").attr("id") == "print_view") {
		prepareResultsLinks();
		setupPrintButton();
	}
	
	/********************************************/
	/* Stuff for print detail page only			*/
	/********************************************/
	
	if ($j("body").attr("id") == "print_detail") {
		setupPrintButton();
	}	
	
	/********************************************/
	/* Stuff for index page only				*/
	/********************************************/

	if ($j("body").attr("id") == "index") {	
		prepareAnouncementMenus();
		
		// hide the charity section by default to collapse left column a bit
		$j("#charity").next(".l_column_announce_container").hide();
		$j("#charity").css("background-image","url(images/l-column-arrow-closed.gif)");		
		
		$j("#search_what").focus();
	}
	
	/********************************************/
	/* Stuff for advertise page only				*/
	/********************************************/

	if ($j("body").attr("id") == "advertise") {	
		prepareAnouncementMenus();
	}	
	
	/********************************************/
	/* Stuff for CD page only	      			*/
	/********************************************/
	
	if ($j("body").attr("id") == "cd-online") {
		$j("a.book_cover_thumb").each(function() {
			$j(this).attr("target", "_blank");
		});
	}	
	
	/********************************************/
	/* Stuff for Listing Detail page only		*/
	/********************************************/
	
	if ($j("body").attr("id") == "listing_detail") {
		if ($j(".printborder h3").length) {
			$j(".printborder h3").css("display", "block");			
		}
		
		if ($j(".detail_inset").length) {
			$j(".detail_inset").css("display", "block");
		}
		setupPrintButton();
	}
	
	/********************************************/
	/* Stuff for Advertise page only		*/
	/********************************************/
	
	if ($j("body").attr("id") == "advertise") {
		
		$j("#pacificwest span").hover(
			function() {
				$j("#map").css("background-position","0 0");
				$j(this).css("background-position","0px -20px");
			},
			function() {
				$j("#map").css("background-position","-440px -700px");
				$j(this).css("background-position","0px 0px");
			}
		);

		$j("#southwest span").hover(
			function() {
				$j("#map").css("background-position","-440px -230px");
				$j(this).css("background-position","-77px -20px");
				$j("#pacificwest span").css("background-position","0 0px");			
			},
			function() {
				$j("#map").css("background-position","-440px -700px");
				$j(this).css("background-position","-77px 0px");
			}
		);

		$j("#midwest span").hover(
			function() {
				$j("#map").css("background-position","-440px 0px");
				$j(this).css("background-position","-142px -20px");
				$j("#pacificwest span").css("background-position","0 0px");
			},
			function() {
				$j("#map").css("background-position","-440px -700px");
				$j(this).css("background-position","-142px 0");
			}
		);

		$j("#southeast span").hover(
			function() {
				$j("#map").css("background-position","0px -470px");
				$j(this).css("background-position","-197px -20px");
				$j("#pacificwest span").css("background-position","0 0px");
			},
			function() {
				$j("#map").css("background-position","-440px -700px");
				$j(this).css("background-position","-197px 0px");
			}
		);

		$j("#northeast span").hover(
			function() {
				$j("#map").css("background-position","0px -230px");
				$j(this).css("background-position","-261px -20px");
				$j("#pacificwest span").css("background-position","0 0px");
			},
			function() {
				$j("#map").css("background-position","-440px -700px");
				$j(this).css("background-position","-261px 0px");
			}
		);
		
		$j("#national span").hover(
			function() {
				$j("#map").css("background-position","-440px -470px");
				$j(this).css("background-position","-328px -20px");
				$j("#pacificwest span").css("background-position","0 0px");
			},
			function() {
				$j("#map").css("background-position","-440px -700px");
				$j(this).css("background-position","-328px 0px");
			}
		);		

	};	

	/********************************************/
	/* Stuff for all pages						*/
	/********************************************/
	
	var cookie = readCookie("usypStyle");
	var title = cookie ? cookie : getPreferredStyleSheet();
	setActiveStyleSheet(title);
	
	prepareTextResizeLinks();
	
	$j("#search").submit(function() { 
		if (searchValidation()) {
			return true;
		}
		else {
			return false;
		}
	});
	
	$j("a.ext").each(function() {
		$j(this).attr("target", "_blank");
	});
	
	showTextResize();
	

}); //end document.ready

/**************************************************************************/
/*	Home Page and Advertise Page
***************************************************************************/

	function prepareAnouncementMenus() {
		$j("#l_column h2").click(function() {
			var display = $j(this).next(".l_column_announce_container").css("display");
			
			if (display == "block") {
				$j(this).next(".l_column_announce_container").slideUp(300);
				$j(this).css("background-image","url(images/l-column-arrow-closed.gif)");
			}
			else {
				$j(this).next(".l_column_announce_container").slideDown(300);
				$j(this).css("background-image","url(images/l-column-arrow-open.gif)");
			}
		});
	}

/**************************************************************************/
/*	Results Page
***************************************************************************/

	function prepareTextResizeLinks() {
		$j("#change_text_small").click(function() {setActiveStyleSheet("small"); return false;});
		$j("#change_text_medium").click(function() {setActiveStyleSheet("standard"); return false;});
		$j("#change_text_large").click(function() {setActiveStyleSheet("large"); return false;});
	}
	
	function prepareSubHeaderLinks() {
		//Show or hide the addresses for each listing when the link is clicked
		$j("#r_column_sub_header_minimize").click(function() {
			if (listingStatus == "min") {
				toggleAddress("max");
				return false;
			}
			else {
				toggleAddress("min");
				return false;
			}
		}); //end toggle
	}

	// This function handles the links in the left (gray) column
	function prepareResultsLinks() {
		// Hide the extra results here because we always want to show them for users without JS
		$j(".l_column_results_more").css("display","none");
	
		//Handle the clicks on the headings for each set of returns in the left column
		$j("#l_column_results_module h2").click(function() {
														  
			var resultsState = $j(this).next(".l_column_results_container").css("display");
														 
			if (resultsState == "block") {
				$j(this).next(".l_column_results_container").slideUp(300);
				$j(this).css("background-image","url(images/l-column-arrow-closed.gif)");
			}
			else {
				$j(this).next(".l_column_results_container").slideDown(300);
				$j(this).css("background-image","url(images/l-column-arrow-open.gif)");
			}
			
			return false;
									  
		}); //end click	
		
		
		//Handle clicks on the more links for each set of returns in the left column
		$j("p.more a").click(function() {
	
			var resultsState = $j(this).parent().prev(".l_column_results_more").css("display");
				
			if (resultsState == "block") {
				$j(this).text("More >>");
				$j(this).parent().prev(".l_column_results_more").slideUp(300);
			}
			else {
				$j(this).text("Less >>");
				$j(this).parent().prev(".l_column_results_more").slideDown(300);
			}
	
			return false;		
										  
		}); //end click	
	} // end prepareResultsLinks	


	function toggleAddress(viewMode) {
		
		// if viewMode is not set, do nothing
		if(viewMode == null) {
			return false;
		}
			
		var nextUrl = $j(".r_column_heading_nav_next a").attr("href");
		var prevUrl = $j(".r_column_heading_nav_prev a").attr("href");
				
		if (viewMode == "min") {//set to minimum mode
			if ($j("#l_column_img_top").length) {
				$j("#wrap").css("background-image", "none");
			}
			
			$j("#r_column_sub_header_minimize").children("a").text("Maximize Listings");
			$j(".listings_column").children(".listing").children(".vcard").children(".adr").hide();
			listingStatus = "min";
			
			var url = $j(".r_column_heading_nav_next a").attr("href");
			
			$j(".r_column_heading_nav_next a").attr("href", setUrlParamVal(nextUrl, "viewMode", "min"));
			$j(".r_column_heading_nav_prev a").attr("href", setUrlParamVal(prevUrl, "viewMode", "min"));
		}
		else if (viewMode == "max") {//set to maximum mode
			if ($j("#l_column_img_top").length) {
				$j("#wrap").css("background-image", "url(images/l-column-lady-on-phone.jpg)");
			}
			
			$j("#r_column_sub_header_minimize").children("a").text("Minimize Listings");
			$j(".listings_column").children(".listing").children(".vcard").children(".adr").show();
			listingStatus = "max";	
			
			$j(".r_column_heading_nav_next a").attr("href", setUrlParamVal(nextUrl, "viewMode", "max"));
			$j(".r_column_heading_nav_prev a").attr("href", setUrlParamVal(prevUrl, "viewMode", "max"));
		}
	} // end toggleAddress

	
	function shortenNavHeading() {
		var navHeading = $j(".nav_first_heading_desc:first").text();
		var shortNavHeading = "";
		if (navHeading.length > 35) {
			shortNavHeading = navHeading.substring(0,30) + "...";
			$j(".nav_first_heading_desc").text(shortNavHeading);
		}
	}
	/*
	function addSponsorBorders() {
		$j(".sponsor").each(function() {
			if ($j(this).prev("div").attr("class") != "sponsor") {
				$j(this).css("border-top", "1px solid #ccc");
			}
			
			if ($j(this).next("div").attr("class") != "sponsor") {
				$j(this).css("border-bottom", "1px solid #ccc");
			}

		});
	}
	*/
	function showSubHeader() {
		$j("#r_column_sub_header_minimize").css("visibility", "visible");
		//$j("#results #r_column_sub_header").show();
	}

/**************************************************************************/
/*	All Pages
***************************************************************************/

	function showTextResize() {
		$j("#text_size").css("visibility", "visible");		
	}

	function setupPrintButton(){
		$j(".printpreview a").css("visibility", "visible");
		
		$j(".printpreview a").click(function(){
			window.print();
			return false;
		});
	}
	 
	function getUrlParamsArray(url) {
	
		var address;
		var params;
		var anchor;
		var paramsArray = Array();
	
		function UrlParams(key, value) {
			this.key = key;
			this.value = value;
		}
		
		if (url.indexOf("?") != -1) {
			url = url.split("?")[1];
		}
		
		params = url.split("#")[0].split("&");
		
		for (i=0; i<params.length; i++) {
			paramsArray[i] = new UrlParams(params[i].split("=")[0], params[i].split("=")[1]);
		}
	
		return paramsArray;
			
	}
	
	function getUrlParamVal(url, paramName) {
		var paramsArray = getUrlParamsArray(url);
		
		for (i=0; i<paramsArray.length; i++) {
			if (paramsArray[i].key == paramName) {
				return paramsArray[i].value;
			}
		}
		
		return false;
	}
	
	function setUrlParamVal(url, paramName, paramVal) {
		var address;
		var params;
		var fullAddress;
		var paramsArray;
		var paramExists = false;
		var queryString = "?";
	
		if (typeof(url) != "undefined" && url != "" ) {
			if (url.indexOf("?") != -1) {
				address = url.split("?")[0];
				params = url.split("?")[1];
			}
	
			paramsArray = getUrlParamsArray(params);
			
			// set specified value
			for (i=0; i<paramsArray.length; i++) {
				if (paramsArray[i].key == paramName) {
					paramExists = true;
					paramsArray[i].value = paramVal;
				}		
			}
			
			// reassemble query string
			for (i=0; i<paramsArray.length; i++) {
				if (i != 0) {
					queryString += "&";
				}
		
				queryString += paramsArray[i].key + "=" + paramsArray[i].value;
			}
			
			if (!paramExists) {
				queryString += "&" + paramName + "=" + paramVal;
			}
			
			fullAddress = address + queryString;
		
		}
		
		return fullAddress;	
		
	}
	
	function searchValidation() {
		var searchForm = $j("#search");
		var what = $j("#search_what").val() != "";
		var where = $j("#search_where").val() != "";
		
		$j("#what_error").css("visibility", "hidden");
		$j("#where_error").css("visibility", "hidden");
		
		if (!what) {
			$j("#what_error").css("visibility", "visible");
		}
		
		if(!where) {
			$j("#where_error").css("visibility", "visible");
		}
		
		if (where && what) {
			return true;
		}
		else {
			return false;
		}

	}
	
	function setActiveStyleSheet(title) {
		var linkRel, linkTitle;
		
		$j("link").each(function() {

			linkRel = $j(this).attr("rel");
			linkTitle = $j(this).attr("title");

			if ( linkRel.indexOf("style") != -1 && linkTitle) {
				$j(this).attr("disabled", true);
				if (linkTitle == title) {
					$j(this).attr("disabled", false);
				}			
			}
		});
	}
	

	function getActiveStyleSheet() {
		var i, a;
		for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
	    	if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) {
	    		return a.getAttribute("title");
	    	}
	  	}

		return null;
	}

	function getPreferredStyleSheet() {
		var i, a;
		for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
			if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("rel").indexOf("alt") == -1 && a.getAttribute("title")) {
				return a.getAttribute("title");
			}
		}
	
		return null;
	
	}

	function createCookie(name,value,days) {
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
  		else {
  			expires = "";
		}
  
  		document.cookie = name+"="+value+expires+"; path=/";
	}

	function readCookie(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') {
				c = c.substring(1,c.length);
			}
			if (c.indexOf(nameEQ) == 0) { 
				return c.substring(nameEQ.length,c.length);
			}
		}
		return null;
	}

	window.onunload = function(e) {
		var title = getActiveStyleSheet();
		createCookie("usypStyle", title, 365);
	}

	
	function addLoadEvent(func) {
		var oldOnLoad = window.onload;
		if (typeof window.onload != 'function') {
			window.onload = func;
		} else {
			window.onload = function() {
				oldOnLoad();
				func();
			}
		}
	}
