/*
Visitor Service Directory
L&S DC - 7/2007
*/

// "global" variables
var searchform; // main search form
var csadvanced; // advanced search options

var tab_search;  // search/result tabs
var tab_results;
var tab_detail;

var search_city; // search parameters
var search_radius;
var search_keyword;

var infocontainer; // information container
var search_form; // search form tbody
var results_header; // search result tbodies
var results_list;
var results_detail;

var button_container; // holds buttons for options

var SELECTED_ITEMS = []; // array to hold items that have been viewed
var SEARCH_QUERIES = []; // array to hold search url strings
var SEARCH_DATA = []; // array to hold items returned by ajax query
var STARTROW = 1; // holds results paging start row
var ENDROW = 1; // holds resutls paging end row

var loadqs = {};
var POPUP_INVOKE = false;

// set "global" variables after page loads
addLoadEvent(function() {
		tab_search = document.getElementById("tab_searchform"); // find search/results tabs
		tab_results = document.getElementById("tab_searchresults");
		tab_detail = document.getElementById("tab_searchdetail");
		
		searchform = document.getElementById("campingsearchform"); // find search parameter fields
		search_city = document.getElementById("sel_city");
		search_radius = document.getElementById("sel_radius");
		search_keyword = document.getElementById("txt_kwd");
		
		infocontainer = document.getElementById("resultstable"); // find search results display areas
		search_form = document.getElementById("search_form");
		results_header = document.getElementById("results_header");
		results_list = document.getElementById("results_list");
		results_detail = document.getElementById("results_detail");
		
		button_container = document.getElementById("actionbuttons");
		
		if(location.search.length) {
			loadqs = parseURLVarString();
			if(typeof loadqs["id"] != "undefined") {
				//alert("load camping detail");
				getDetail(loadqs["id"]);
			//} else if(typeof loadqs["subcategory"] != "undefined") {
				//alert("run default search");
			//	searchData(location.search+"&method=search");
			} else if(typeof loadqs["method"] == "undefined") {
				//alert("run default search");
				searchData(location.search+"&method=search");
			}
		}
	});

function toggleInformationDisplay(opt) { // control search result tabs and display
	clearData(button_container);
	if(!POPUP_INVOKE) {
		if(opt == "detail") {
			tab_detail.src = tab_detail.src.replace(/_off\.gif/,"_on.gif");
			tab_results.src = tab_results.src.replace(/_on\.gif/,"_off.gif");
			toggleDisplay(search_form,false);
			toggleDisplay(results_header,false);
			toggleDisplay(results_list,false);
			toggleDisplay(results_detail,true);
			infocontainer.style.borderColor = "#bc0736";
			// update button options
			if(SELECTED_ITEMS.length) {
				var img_pe = document.createElement("IMG");
					img_pe.setAttribute("src","/_com/camping/images/bt_printableversion.gif");
					img_pe.style.marginRight = ".5em";
					img_pe.onclick = function() { return openPopupWindow('/_com/camping/_detail.htm?id='+SELECTED_ITEMS[SELECTED_ITEMS.length-1]+'&method=detail'); };
					img_pe.onmouseover = function() { this.style.cursor = "pointer"; };
				button_container.appendChild(img_pe);
				//var img_ee = document.createElement("IMG");
				//	img_ee.setAttribute("src","/_com/camping/images/bt_emailbusiness.gif");
				//	img_ee.onclick = function() { return openPopupWindow('/_com/camping/_email.htm?id='+SELECTED_ITEMS[SELECTED_ITEMS.length-1]+'&method=email'); };
				//	img_ee.onmouseover = function() { this.style.cursor = "pointer"; };
				//button_container.appendChild(img_ee);
			}
		} else if(opt == "results") {
			tab_detail.src = tab_detail.src.replace(/_on\.gif/,"_off.gif");
			tab_results.src = tab_results.src.replace(/_off\.gif/,"_on.gif");
			toggleDisplay(search_form,false);
			toggleDisplay(results_header,true);
			toggleDisplay(results_list,true);
			toggleDisplay(results_detail,false);
			infocontainer.style.borderColor = "#bc0736";
			// update button options
			if(SEARCH_QUERIES.length) {
				var img_pr = document.createElement("IMG");
					img_pr.setAttribute("src","/_com/camping/images/bt_printableresults.gif");
					img_pr.onclick = function() { return openPopupWindow('/_com/camping/_results.htm'+SEARCH_QUERIES[SEARCH_QUERIES.length-1]+'&detail=1'); };
					img_pr.onmouseover = function() { this.style.cursor = "pointer"; };
				button_container.appendChild(img_pr);
			}
		} else if(opt == "search") {
			tab_detail.src = tab_detail.src.replace(/_on\.gif/,"_off.gif");
			tab_results.src = tab_results.src.replace(/_on\.gif/,"_off.gif");
			toggleDisplay(search_form,true);
			toggleDisplay(results_header,false);
			toggleDisplay(results_list,false);
			toggleDisplay(results_detail,false);
			infocontainer.style.borderColor = "#003e65";
		}
	} else {
		// POPUP WINDOW ACTIVE
		toggleDisplay(results_header,true);
		toggleDisplay(results_list,true);
		toggleDisplay(results_detail,true);
	}
}

function resetSearch() { // reset the search parameters
	searchform.reset();
}

function getSearchQueryString() { // get search query_string
	var dd = new Date();
	var qs = "?timestamp="+dd.getTime();
	if(search_city.value.length && !isNaN(search_city.value)) {
		qs += "&city=" + escape(search_city.value);
		if(search_radius.value.length && !isNaN(search_radius.value)) { qs += "&radius=" + escape(search_radius.value); }
	}
	if(search_keyword.value.length) { qs += "&kwd=" + escape(trim(search_keyword.value)); }
	var amenityval = "";
		for(var a=0; a<searchform.amenity.length; a++) {
			if(searchform.amenity[a].checked) {
				amenityval += searchform.amenity[a].value + ",";
			}
		}
		if(amenityval.length > 0) { qs += "&amenity=" + amenityval.replace(/,$/,""); }
	var typeval = "";
		for(var t=0; t<searchform.type.length; t++) {
			if(searchform.type[t].checked) {
				typeval += searchform.type[t].value + ",";
			}
		}
		if(typeval.length > 0) { qs += "&type=" + typeval.replace(/,$/,""); }
	var miscval = "";
		for(var m=0; m<searchform.misc.length; m++) {
			if(searchform.misc[m].checked) {
				miscval += searchform.misc[m].value + ",";
			}
		}
		if(miscval.length > 0) { qs += "&misc=" + miscval.replace(/,$/,""); }
	//alert(qs);
	return qs;
}

function searchData(_qs) { // search data via ajax call
	var qs = _qs;
	if(typeof _qs != "string") { qs = getSearchQueryString() + "&method=search"; }
	SEARCH_QUERIES.push(qs);
	var ajaxobj = new AjaxObject("get","/_com/camping/ajax_switch.asp",qs,updateSearchResults);
		ajaxobj.execute();
	return false;
}
function updateSearchResults(xmlHttp) {
	SEARCH_DATA = eval('(' + xmlHttp.responseText + ')'); // create json object
	//alert(SEARCH_DATA.length);
	toggleInformationDisplay("results");
	displaySearchResults();
}
function displaySearchResults(start) {
	var maxperpage = 15; // records per page
	if(POPUP_INVOKE) { maxperpage = SEARCH_DATA.length; }
	STARTROW = start; // record to display first
		if(typeof start == "undefined") { STARTROW = 1;}
	ENDROW = STARTROW+maxperpage-1; // last record to display
		if(ENDROW > (SEARCH_DATA.length)) { ENDROW = SEARCH_DATA.length; }
	clearData(results_list); // empty the result set rows
	var itemrow; var c1; var c2; var c3; var c4; var c5; // dom objects to be created
	var edrow; var edcell; // more dom objects for item detail
	var pr; var pc; // paging row and cell
	if(SEARCH_DATA.length > 0) {
		for(var i=STARTROW-1; i<ENDROW; i++) {
			itemrow = document.createElement("tr");
			(function(i) { // closure to properly scope the iterator (i) variable for onclick method
					var i2 = i;
						itemrow.onmouseover = function() { updateClassName(this,"hover",""); this.style.cursor = "pointer"; };
						itemrow.onmouseout = function() { updateClassName(this,"","hover"); };
						if(!POPUP_INVOKE) {
							itemrow.onclick = function() { getDetail(SEARCH_DATA[i2].bid); };
						} else {
							itemrow.onclick = function() {
									toggleDisplay("ed__"+SEARCH_DATA[i2].bid);
									updateClassName(this,"inlineactive","");
								};
						}
				})(i);
			c1 = document.createElement("td");
			c2 = document.createElement("td");
				if(SEARCH_DATA[i].mem == 1) {
					var c1_img = document.createElement("IMG");
						c1_img.setAttribute("src","/_com/camping/images/icon_coa.gif");
					c1.appendChild(c1_img);
					updateClassName(c2,"red","");
				} else {
					c1.innerHTML = "&nbsp;";
					updateClassName(c2,"brown","");
				}
				c2.appendChild(document.createTextNode(SEARCH_DATA[i].name));
				
			c3 = document.createElement("td");
				updateClassName(c3,"green","");
				c3.appendChild(document.createTextNode(SEARCH_DATA[i].city));
			c4 = document.createElement("td");
				//c4.innerHTML = SEARCH_DATA[i].ph.replace(/;/g,'<br />');
				c4.innerHTML = SEARCH_DATA[i].ph.replace(/;.*$/g,'');
			//c5 = document.createElement("td");
			//	c5.appendChild(document.createTextNode(SEARCH_DATA[i].reg));
			itemrow.appendChild(c1);
			itemrow.appendChild(c2);
			itemrow.appendChild(c3);
			itemrow.appendChild(c4);
			//itemrow.appendChild(c5);
			results_list.appendChild(itemrow);
			
			if(POPUP_INVOKE) {
				edrow = document.createElement("tr");
					edrow.setAttribute("id","ed__"+SEARCH_DATA[i].bid);
					toggleDisplay(edrow,false);
				edcell = document.createElement("td");
					edcell.setAttribute("colspan",5); edcell.colSpan = 5;
					updateClassName(edcell,"inlinedetail","");
				edcell.innerHTML = createDetailHTML(SEARCH_DATA[i]);
				edrow.appendChild(edcell);
				results_list.appendChild(edrow);
			}
		}
		pr = document.createElement("tr");
		pc = document.createElement("td");
			pc.setAttribute("colspan",5); pc.colSpan = 5;
			updateClassName(pc,"pages","");
			var pagehtml = "Displaying (<strong>"+STARTROW+" - "+ENDROW+"</strong>) of <strong>"+SEARCH_DATA.length+"</strong> matching campgrounds.<hr /><span>";
				if(!POPUP_INVOKE) {
					if(STARTROW > 1) { pagehtml += '&nbsp; &lt;&lt; <a href="#first" onclick="javascript: displaySearchResults(1);">First Page</a> &nbsp;'; } else { pagehtml += '&nbsp; &lt;&lt; First Page &nbsp;'; }
					if(STARTROW > maxperpage+1) { pagehtml += '&nbsp; &lt; <a href="#prev" onclick="javascript: displaySearchResults('+(STARTROW-maxperpage)+');">Previous Page</a> &nbsp;'; } else { pagehtml += '&nbsp; &lt; Previous Page &nbsp;'; }
					if(STARTROW < SEARCH_DATA.length-(maxperpage-1)) { pagehtml += '&nbsp; <a href="#next" onclick="javascript: displaySearchResults('+(STARTROW+maxperpage)+');">Next Page</a> &gt; &nbsp; '; } else { pagehtml += '&nbsp; Next Page &gt; &nbsp; '; }
					if(ENDROW < SEARCH_DATA.length) { pagehtml += '&nbsp; <a href="#last" onclick="javascript: displaySearchResults('+(SEARCH_DATA.length-(maxperpage-1))+');">Last Page</a> &gt;&gt; &nbsp;'; } else { pagehtml += '&nbsp; Last Page &gt;&gt; &nbsp;'; }
				}
			pc.innerHTML = "</span>" + pagehtml;
		pr.appendChild(pc);
		results_list.appendChild(pr);
	} else {
		// show empty result set
		pr = document.createElement("tr");
		pc = document.createElement("td");
		pc.setAttribute("colspan",5); pc.colSpan = 5;
		pc.style.padding = "10px";
		pc.innerHTML = '<p><span style="font-weight:bold; color:#bc0736;">No campgrounds found matching your search.</span></p><p>Try expanding your <a href="#search" onclick="javascript: toggleInformationDisplay(\'search\');">search criteria</a>.</p>';
		pr.appendChild(pc);
		results_list.appendChild(pr);
	}
	location.hash = "results";
}

function getDetail(_id,_qs) { // get data detail via ajax call
	var qs;
	SELECTED_ITEMS.push(_id);
	if(typeof _qs == "string") {
		qs = _qs;
	} else {
		qs = "?id="+_id+"&method=detail";
	}
	var ajaxobj = new AjaxObject("get","/_com/camping/ajax_switch.asp",qs,updateSearchDetail);
		ajaxobj.execute();
	return false;
}

function updateSearchDetail(xmlHttp) { // show detail and paging
	var items = eval('(' + xmlHttp.responseText + ')'); // create json object
	clearData(results_detail);
	toggleInformationDisplay("detail");
	var datarow = document.createElement("tr");
	var datacell = document.createElement("td");
	datarow.appendChild(datacell);
	results_detail.appendChild(datarow);
	if(items.length < 1) {
		datacell.innerHTML = '<div class="detail">Sorry, no data could be found for this campground.<br />Please ensure that you\'ve previously selected a campground from the "Result List".</div>';
		return;
	}
	// get and write Detail HTML
	datacell.innerHTML = createDetailHTML(items[0]);
	
	//show paging element
	var itemid = items[0].bid;
	if(!POPUP_INVOKE && SEARCH_DATA.length > 0) {
		var currentrow = -1;
		//alert(STARTROW + "|" + ENDROW + "|" + SEARCH_DATA.length);
		for(var d=(STARTROW-1); d<ENDROW; d++) {
			if(itemid == SEARCH_DATA[d].bid) {
				currentrow = d+1;
			}
		}
		//alert("currentrow: "+currentrow);
		if(currentrow > -1) {
			navrow = document.createElement("tr");
			navcell = document.createElement("td");
				updateClassName(navcell,"pages","");
				var pagehtml = "Displaying <strong>#"+(currentrow-STARTROW+1)+"</strong> of <strong>"+(ENDROW-STARTROW+1)+"</strong> campgrounds for the current results page.<hr />";
					if(currentrow > STARTROW) { pagehtml += '&nbsp; &lt;&lt; <a href="#first" onclick="javascript: getDetail('+SEARCH_DATA[STARTROW-1].bid+');">First</a> &nbsp;'; } else { pagehtml += '&nbsp; &lt;&lt; First &nbsp;'; }
					if(currentrow > STARTROW+1) { pagehtml += '&nbsp; &lt; <a href="#prev" onclick="javascript: getDetail('+SEARCH_DATA[currentrow-2].bid+');">Previous</a> &nbsp;'; } else { pagehtml += '&nbsp; &lt; Previous &nbsp;'; }
					if(currentrow < (ENDROW-1)) { pagehtml += '&nbsp; <a href="#next" onclick="javascript: getDetail('+SEARCH_DATA[currentrow].bid+');">Next</a> &gt; &nbsp;'; } else { pagehtml += '&nbsp; Next &gt; &nbsp;'; }
					if(currentrow < (ENDROW)) { pagehtml += '&nbsp; <a href="#last" onclick="javascript: getDetail('+SEARCH_DATA[ENDROW-1].bid+');">Last</a> &gt;&gt; &nbsp;'; } else { pagehtml += '&nbsp; Last &gt;&gt; &nbsp;'; }
				navcell.innerHTML = pagehtml;
			navrow.appendChild(navcell);
			results_detail.appendChild(navrow);
		}
	}
	if(SEARCH_DATA.length == 0) { location.hash = "results"; }
}

function createDetailHTML(items) { // create data detail html
	var itemid = items.bid;
	var detailhtml = "";
	
	detailhtml += '<table class="detailheading" cellpadding="0" cellspacing="0" border="0" width="100%"><tbody><tr>';
	detailhtml += '<td>';
		if(items.mem == 1) { detailhtml += '<img src="/_com/camping/images/icon_coa.gif" alt="" width="19" height="18" border="0" style="float:right;"/>'; }
		detailhtml +=  items.name + '</td>';
	detailhtml += '</tr></tbody></table>';
	
	detailhtml += '<div class="detail">';
	
	//detailhtml += '<h1>' + items.name + '</h1>';
	//detailhtml += '<span class="red">' + items.cities + '</span>';
	//detailhtml += '<hr />';
	
	if(items.book.length > 0) {
		detailhtml += '<a href="' + items.book + '" target="_blank"><img class="rightinfo" src="/_com/vsd/images/bt_bookonline.gif" height="27" width="119" border="0" alt="Book Online" /></a>';
	}
	if(items.gs == "1") {
		detailhtml += '<img class="rightinfo" src="/_com/vsd/images/gr_greatservice.gif" height="50" width="100" border="0" alt="Great Service" /></a>';
	}
	if(items.grp == "1") {
		detailhtml += '<div class="rightinfo">Group Friendly</div>';
	}
	if(items.hdcp == "True") {
		detailhtml += '<div class="rightinfo">Accessible</div>';
	}
	if(items.pet == "True") {
		detailhtml += '<div class="rightinfo">Pet Friendly</div>';
	}
	
	detailhtml += '<dl>';

	var tmp_add = items.add.split(";");
		if(tmp_add.length > 0) {
			for(var a=0; a<tmp_add.length; a++) {
				detailhtml += '<dt>Address' + (a>0 ? a+1 : "") + ':</dt>';
				detailhtml += '<dd>' + tmp_add[a];
				mapinfo =  tmp_add[a].split("<br>");
				if(mapinfo.length > 1) {
					detailhtml += ' &nbsp; <span style="white-space:nowrap;">( <a href="http://maps.yahoo.com/maps_result?addr=' + mapinfo[0] + '&csz=' + mapinfo[mapinfo.length-1] + '&country=us" target="_blank">Get Map</a> )</span>';
				}
				detailhtml += '</dd>';
			}
		}
	
	detailhtml += '<dt style="margin-top: .75em;">Phone Numbers:</dt>';
	var tmp_phone = items.ph;
		if(tmp_phone.length > 0) { detailhtml += '<dd>' + tmp_phone + "</dd>"; }
	var tmp_phone2 = items.phtf;
		if(tmp_phone2.length > 0) { detailhtml += '<dd>' + tmp_phone2 + " (toll-free)</dd>"; }
	var tmp_phone3 = items.fax;
		if(tmp_phone3.length > 0) { detailhtml += '<dd>' + tmp_phone3 + " (fax)</dd>"; }
	var tmp_phone4 = items.res;
		if(tmp_phone4.length > 0) { detailhtml += '<dd>' + tmp_phone4 + " (reservations)</dd>"; }
	var tmp_phone5 = items.cell;
		if(tmp_phone5.length > 0) { detailhtml += '<dd>' + tmp_phone5 + " (cell phone)</dd>"; }
		
	var tmp_website = items.web;
		if(tmp_website.length > 0) {
			detailhtml += '<dt>Website: </dt>';
			detailhtml += '<dd><a href="';
				if(tmp_website.slice(0,4) != "http") { detailhtml += "http://"; }
				detailhtml += tmp_website + '" target="_blank">' + tmp_website + "</a></dd>";
		}
	var tmp_email = items.email;
	if(tmp_email.length > 0) {
		detailhtml += '<dt>Email: </dt>';
		detailhtml += '<dd><a href="mailto:' + tmp_email + '">' + tmp_email + "</a></dd>";
	}
	detailhtml += "</dl>";
	
	var tmp_desc = items.desc;
	if(tmp_desc.length > 0) {
		detailhtml += "<br /><strong>Description:</strong><br />" + tmp_desc + "<br />";
	}
		
	var tmp_nums = items.num.split(",");
	if(tmp_nums.length == 2 && items.num.indexOf("-1") == -1) {
		if(tmp_nums[0] > 0 || tmp_nums[1] > 0) {
			detailhtml += "<br /><dl><dt>Camping Sites:</dt><dd>" + tmp_nums[0] + ' electrical<br />' + tmp_nums[1] + " non-electric</dd></dl>";
		}
	}
	
	var tmp_cat = items.cat;
	if(tmp_cat.length > 0) {
		detailhtml += '<br /><table cellpadding="0" cellspacing="0" border="0"><tbody><tr><td><strong>Categories:</strong></td><td>' + tmp_cat.replace(/;/g,"<br />") + '</td></tr></tbody></table><br />';
	}
		
	var tmp_am = items.am.split(";");
		if(items.am.length > 0) {
			detailhtml += '<div class="brown">Amenities:</div>';
			detailhtml += '<table class="amenities" cellpadding="0" cellspacing="1" border="0"><tbody><tr>';
			for(var a=0; a<tmp_am.length; a++) {
				if(a > 1 && a%4 == 0) { detailhtml += "</tr><tr>"; }
				detailhtml += "<td>" + tmp_am[a].replace(/[0-9]{1,4},/, ""); + "</td>";
			}
			detailhtml += '</tr></tbody></table>';
		}
	detailhtml += '</div>';
	return detailhtml;
}

function showResultDetails(_status) {
	var rows = results_list.getElementsByTagName("tr");
	var imgtop = document.getElementById("sdtop");
	var imgbot = document.getElementById("sdbot");
	for(var i=0; i<rows.length; i++) {
		if(rows[i].id.length) {
			if(_status == false) {
				toggleDisplay(rows[i],true);
				updateClassName(rows[i-1],"inlineactive","");
				imgtop.src = imgtop.src.replace("show","hide");
				imgbot.src = imgtop.src.replace("show","hide");
			} else {
				toggleDisplay(rows[i],false);
				updateClassName(rows[i-1],"","inlineactive");
				imgtop.src = imgtop.src.replace("hide","show");
				imgbot.src = imgtop.src.replace("hide","show");
			}
		}
	}
}

// popup widow function for buttons/links
function openPopupWindow(src) {
	var pwndw = window.open(src, "pwndw", "location=no,menubar=no,resizable=yes,scrollbars=yes,status=no,toolbar=no,width=565,height=450",true);
		pwndw.focus();
	return true;
}

// trim function for strings
function trim(str) { return str.replace(/^\s+/,"").replace(/\s+$/,""); }

