/*
Visitor Service Directory
L&S DC - 7/2007
*/

// "global" variables
var searchform; // main search form
var csadvanced; // advanced search options

var tab_results; // search result tabs
var tab_detail;

var search_city; // search parameters
var search_radius;
var search_keyword;

var search_form; // search form tbody

var search_catgroup;
var search_cat;

var results_container; // results containers
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 CATEGORY_GROUPS = {}; // holds queried category groups

var loadqs = {};
var POPUP_INVOKE = false;

// set "global" variables after page loads
addLoadEvent(function() {
		tab_results = document.getElementById("tab_searchresults"); // find search results tabs
		tab_detail = document.getElementById("tab_searchdetail");
		
		searchform = document.getElementById("vsdsearchform"); // find search parameter fields
		search_city = document.getElementById("sel_city");
		search_radius = document.getElementById("sel_radius");
		search_keyword = document.getElementById("txt_kwd");

		search_form = document.getElementById("search_form");

		search_catgroup = document.getElementById("sel_catgroup");
		search_cat = document.getElementById("sel_cat");
		csadvanced = document.getElementById("csadvanced");
		
		results_container = document.getElementById("resultscontainer"); // find search results display areas
		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 vsd 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 toggleResultDisplay(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);
			// update button options
			if(SELECTED_ITEMS.length) {
				var img_pe = document.createElement("IMG");
					img_pe.setAttribute("src","/_com/vsd/images/bt_printableversion.gif");
					img_pe.style.marginRight = ".5em";
					img_pe.onclick = function() { return openPopupWindow('/_com/vsd/_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/vsd/images/bt_emailbusiness.gif");
				//	img_ee.onclick = function() { return openPopupWindow('/_com/vsd/_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);
			// update button options
			if(SEARCH_QUERIES.length) {
				var img_pr = document.createElement("IMG");
					img_pr.setAttribute("src","/_com/vsd/images/bt_printableresults.gif");
					img_pr.onclick = function() { return openPopupWindow('/_com/vsd/_results.htm'+SEARCH_QUERIES[SEARCH_QUERIES.length-1]+'&detail=1'); };
					img_pr.onmouseover = function() { this.style.cursor = "pointer"; };
				button_container.appendChild(img_pr);
			}
		}
	} else {
		// POPUP WINDOW ACTIVE

		toggleDisplay(search_form,true);

		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 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(/,$/,""); }
	var cats = "";
	if(search_cat.value.length) {
		for(var s=0; s<search_cat.options.length; s++) {
			if(search_cat.options[s].selected == true) {
				cats += search_cat.options[s].value + ",";
			}
		}
	} else {
		for(var c=0; c<searchform.cb_cat.length; c++) {
			if(searchform.cb_cat[c].checked == true) {
				cats += searchform.cb_cat[c].value + ",";
			}
		}
	}
	if(cats.length) { qs += "&cat=" + escape(trim(cats)); }
	//alert(qs);
	return qs;
}

function searchData(_qs) { // search data via ajax call
	var qs = _qs;
	if(typeof _qs != "string") { qs = getSearchQueryString() + "&method=search"; }
	//alert(qs);
	SEARCH_QUERIES.push(qs);
	var ajaxobj = new AjaxObject("get","/_com/vsd/ajax_switch.asp",qs,updateSearchResults);
		ajaxobj.execute();
	return false;
}
function updateSearchResults(xmlHttp) {
	SEARCH_DATA = xmlHttp.responseXML.getElementsByTagName("item");
	//alert(SEARCH_DATA.length);
	toggleResultDisplay("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; }
	//alert(STARTROW + "|" + ENDROW + "|" + SEARCH_DATA.length);
	clearData(results_list); // empty the result set rows
	var itemrow; var c1; var c2; var c3; // 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].getElementsByTagName("bid")[0].firstChild.nodeValue); };
						} else {
							itemrow.onclick = function() {
									//return openPopupWindow('/_com/vsd/_special.htm?id='+SEARCH_DATA[i2].getElementsByTagName("bid")[0].firstChild.nodeValue);
									//alert("expand Detail");
									toggleDisplay("ed__"+SEARCH_DATA[i2].getElementsByTagName("bid")[0].firstChild.nodeValue)
									updateClassName(this,"inlineactive","");
								};
						}
				})(i);
			c1 = document.createElement("td");
				updateClassName(c1,"brown","");
				c1.appendChild(document.createTextNode(SEARCH_DATA[i].getElementsByTagName("name")[0].firstChild.nodeValue));				
			c2 = document.createElement("td");
				updateClassName(c2,"green","");
				c2.appendChild(document.createTextNode(SEARCH_DATA[i].getElementsByTagName("city")[0].firstChild.nodeValue));
			c3 = document.createElement("td");
				//c3.appendChild(document.createTextNode(SEARCH_DATA[i].getElementsByTagName("ph")[0].firstChild.nodeValue));
				c3.innerHTML = SEARCH_DATA[i].getElementsByTagName("ph")[0].firstChild.nodeValue.replace(/;.*$/g,'');
				updateClassName(c3,"datecell","");
			itemrow.appendChild(c1);
			itemrow.appendChild(c2);
			itemrow.appendChild(c3);
			results_list.appendChild(itemrow);
			
			if(POPUP_INVOKE) {
				edrow = document.createElement("tr");
					edrow.setAttribute("id","ed__"+SEARCH_DATA[i].getElementsByTagName("bid")[0].firstChild.nodeValue);
					toggleDisplay(edrow,false);
				edcell = document.createElement("td");
					edcell.setAttribute("colspan",3); edcell.colSpan = 3;
					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",3); pc.colSpan = 3;
			updateClassName(pc,"pages","");
			var pagehtml = "Displaying (<strong>"+STARTROW+" - "+ENDROW+"</strong>) of <strong>"+SEARCH_DATA.length+"</strong> matching businesses.<br /><br /><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",3); pc.colSpan = 3;
		pc.style.padding = "10px";
		pc.innerHTML = '<p><span style="font-weight:bold; color:#bc0736;">No businesses found matching your search criteria.</span></p><p>Try expanding your search criteria or selecting a wider date range.</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/vsd/ajax_switch.asp",qs,updateSearchDetail);
		ajaxobj.execute();
	return false;
}

function updateSearchDetail(xmlHttp) { // show detail and paging
	var items = xmlHttp.responseXML.getElementsByTagName("item");
	for(var c=0; c<items[0].childNodes.length; c++) { if(!items[0].childNodes[c].hasChildNodes()) { items[0].childNodes[c].appendChild(document.createTextNode("")); } }
	clearData(results_detail);
	toggleResultDisplay("detail");
	var datarow = document.createElement("tr");
	var datacell = document.createElement("td");
	datarow.appendChild(datacell);
	results_detail.appendChild(datarow);
	if(items.length < 1) {
		datacell.innerHTML = "Sorry, no data could be found for this business.<br />Please ensure that you've previously selected a business from the \"Result List\".";
		return;
	}
	// get and write Detail HTML
	datacell.innerHTML = createDetailHTML(items[0]);
	
	//show paging element
	var itemid = items[0].getElementsByTagName("bid")[0].firstChild.nodeValue;
	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].getElementsByTagName("bid")[0].firstChild.nodeValue) {
				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> businesses for the current results page.<br /><br />";
					if(currentrow > STARTROW) { pagehtml += '&nbsp; &lt;&lt; <a href="#first" onclick="javascript: getDetail('+SEARCH_DATA[STARTROW-1].getElementsByTagName("bid")[0].firstChild.nodeValue+');">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].getElementsByTagName("bid")[0].firstChild.nodeValue+');">Previous</a> &nbsp;'; } else { pagehtml += '&nbsp; &lt; Previous &nbsp;'; }
					if(currentrow < (ENDROW-1)) { pagehtml += '&nbsp; <a href="#next" onclick="javascript: getDetail('+SEARCH_DATA[currentrow].getElementsByTagName("bid")[0].firstChild.nodeValue+');">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].getElementsByTagName("bid")[0].firstChild.nodeValue+');">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.getElementsByTagName("bid")[0].firstChild.nodeValue;
	var detailhtml = "";
	
	detailhtml += '<table class="detailheading" cellpadding="0" cellspacing="0" border="0" width="100%"><tbody><tr>';
	detailhtml += '<td>' + items.getElementsByTagName("name")[0].firstChild.nodeValue + '</td>';
	detailhtml += '</tr></tbody></table>';
	
	detailhtml += '<div class="detail">';
	if(items.getElementsByTagName("book")[0].firstChild.nodeValue.length > 0) {
		detailhtml += '<a href="' + items.getElementsByTagName("book")[0].firstChild.nodeValue + '" target="_blank"><img class="rightinfo" src="/_com/vsd/images/bt_bookonline.gif" height="27" width="119" border="0" alt="Book Online" /></a>';
	}
	if(items.getElementsByTagName("gs")[0].firstChild.nodeValue == "1") {
		detailhtml += '<img class="rightinfo" src="/_com/vsd/images/gr_greatservice.gif" height="50" width="100" border="0" alt="Great Service" /></a>';
	}
	var tmp_grp = items.getElementsByTagName("grp")[0].firstChild.nodeValue; 
		if(tmp_grp == "1") { detailhtml += '<div class="rightinfo">Group Friendly</div>'; }
	var tmp_hdcp = items.getElementsByTagName("hdcp")[0].firstChild.nodeValue; 
		if(tmp_hdcp == "True") { detailhtml += '<div class="rightinfo">Accessible</div>'; }
	var tmp_pet = items.getElementsByTagName("pet")[0].firstChild.nodeValue;
		if(tmp_pet == "True") { detailhtml += '<div class="rightinfo">Pet Friendly</div>'; }
	
	//http://www.mapquest.com/maps/map.adp?address=700%20W%20Sioux%20Avenue&city=Pierre&state=SD&zipcode=57501&CID=lfmapwid
	
	detailhtml += '<dl>';

	var tmp_add = items.getElementsByTagName("add")[0].firstChild.nodeValue.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.getElementsByTagName("ph")[0].firstChild.nodeValue;
		if(tmp_phone.length > 0) { detailhtml += '<dd>' + tmp_phone + "</dd>"; }
	var tmp_phone2 = items.getElementsByTagName("phtf")[0].firstChild.nodeValue;
		if(tmp_phone2.length > 0) { detailhtml += '<dd>' + tmp_phone2 + " (toll-free)</dd>"; }
	var tmp_phone3 = items.getElementsByTagName("fax")[0].firstChild.nodeValue;
		if(tmp_phone3.length > 0) { detailhtml += '<dd>' + tmp_phone3 + " (fax)</dd>"; }
	var tmp_phone4 = items.getElementsByTagName("res")[0].firstChild.nodeValue;
		if(tmp_phone4.length > 0) { detailhtml += '<dd>' + tmp_phone4 + " (reservations)</dd>"; }
	var tmp_phone5 = items.getElementsByTagName("cell")[0].firstChild.nodeValue;
		if(tmp_phone5.length > 0) { detailhtml += '<dd>' + tmp_phone5 + " (cell phone)</dd>"; }
		
	var tmp_website = items.getElementsByTagName("web")[0].firstChild.nodeValue;
		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.getElementsByTagName("email")[0].firstChild.nodeValue;
	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.getElementsByTagName("desc")[0].firstChild.nodeValue;
		if(tmp_desc.length > 0) {
			detailhtml += "<br /><strong>Description:</strong><br />" + tmp_desc + "<br />";
		}
	
	var tmp_cat = items.getElementsByTagName("cat")[0].firstChild.nodeValue;
	if(tmp_cat.length > 0) {
		detailhtml += '<br /><table cellpadding="0" cellspacing="0" border="0"><tbody><tr><td><strong>Categories: &nbsp;</strong></td><td>' + tmp_cat.replace(/;/g,"<br />") + '</td></tr></tbody></table><br />';
	}
	
	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+$/,""); }

// update Sub-Category List Box
function getSubCategories(sel) {
	var cg = sel.options[sel.selectedIndex].value;
	if(typeof CATEGORY_GROUPS[cg] == "undefined") {
		var qs = "?method=categories&cg="+cg
		var ajaxobj = new AjaxObject("get","/_com/vsd/ajax_switch.asp",qs,updateSubCategories);
			ajaxobj.setHandlerParam(cg);
			ajaxobj.execute();
	} else {
		addSubCategories(CATEGORY_GROUPS[cg],cg.length);
	}
}

function updateSubCategories(xmlHttp,cg) {
	//alert(xmlHttp.responseText);
	var data = eval('(' + xmlHttp.responseText + ')'); // create json object
	CATEGORY_GROUPS[cg] = data;
	addSubCategories(data,cg.length);
}
function addSubCategories(c,cg) {
	search_cat.options.length = 0;
	for(var i=0; i<c.length; i++) {
		if(cg > 0) { search_cat.options[i] = new Option(c[i]["name"],c[i]["id"],false,true); }
		else { search_cat.options[i] = new Option(c[i]["name"],c[i]["id"],false,false); }
	}
}

function toggleAdvancedSearch() {
	selectNone(search_cat);
	toggleDisplay(csadvanced);
}

function selectAll(sel) {
	var obj = sel;
	if(typeof sel == typeof "string") { obj = document.getElementById(sel); }
	for(var i=0; i<obj.options.length; i++) { obj.options[i].selected = true; }
}
function selectNone(sel) {
	var obj = sel;
	if(typeof sel == typeof "string") { obj = document.getElementById(sel); }
	for(var i=0; i<obj.options.length; i++) { obj.options[i].selected = false; }
}
function selectAll2(_obj) {
	var tmpobj = _obj;
	if(typeof _obj == "string") { tmpobj = document.getElementById(_obj); }
	var obj = tmpobj.getElementsByTagName("input");
	for(var i=0; i<obj.length; i++) { obj[i].checked = true; }
}
function selectNone2(_obj) {
	var tmpobj = _obj;
	if(typeof _obj == typeof "string") { tmpobj = document.getElementById(_obj); }
	var obj = tmpobj.getElementsByTagName("input");
	for(var i=0; i<obj.length; i++) { obj[i].checked = false; }
}

