/*
 *	Spry-related functions 
 *	for thepatientchannel.com
 *	Created: 2006.10.09 aas
 *	Updated:
 *
 * 		GE Healthcare
 * 		Learning Solutions
 * 		gehealthcare.com
 * 
 *	cory.hanson AT ge.com
 *	sudhaman.srinivasan AT ge.com
 *	andrew.seidl AT ge.com
 *
 */

// Get value of 'disease' url parameter
// If null, see if the current folder matches
// Otherwise, default to heart_disease
// Warning: cannot handle subfolders
var disease = getParam("disease");
var folder = window.location.href.replace(base_url, "", "i").split("/");
if (disease == "") {
	for (i in folder) {
		if (!folder[i].match(".html") && folder[i] != "") {
			disease = folder[i];
		}
	}
	if (disease == "") disease = "heart_disease";
}

// Spry defines anything that's undefined as the string 'undefined'
// Am not doing a 'this == undefined' because the string must
// be defined in order to execute the function
String.prototype.isset = function() {
	if (this == 'undefined') return false;
	return true;
}

// Used to build left navigation menu
leftnav = new Spry.Data.XMLDataSet(base_url + "data/disease_states.xml", "/disease_states/disease[@hide != 'true']");
leftnav.loadData();

// sponsoredPrograms is used in the sponsored by section
// the separate dataset prevents search from removing programs from this section
sponsors = new Spry.Data.XMLDataSet("../data/" + disease + ".xml", "/disease/programs/program[@hide != 'true'][@sponsoredby != 'GEHC']/@sponsoredby", { distinctOnLoad: true });
sponsoredPrograms = new Spry.Data.XMLDataSet("../data/" + disease + ".xml", "/disease/programs/program[@hide != 'true']", {sortOnLoad: ['publishdate','@title'], sortOrderOnLoad: "descending"});
sponsors.loadData();
sponsoredPrograms.loadData();

var searching = false;
subcats	 = new Spry.Data.XMLDataSet("../data/" + disease + ".xml", "/disease/subdiseases/subdisease[@hide != 'true']");
programs = new Spry.Data.XMLDataSet("../data/" + disease + ".xml", "/disease/programs/program[@hide != 'true']");
programs.loadData();
subcats.loadData();

interstitials = new Spry.Data.XMLDataSet("../data/" + disease + ".xml", "/interstitial/program[@hide != 'true']", {sortOnLoad: "@title"});
interstitials.loadData();

banner_ad = new Spry.Data.XMLDataSet("../data/" + disease + "_ads.xml", "/banners/banner[@hide != 'true'][@subdisease = '{subcats::@id}']");
banner_ad.loadData();

inter_ad = new Spry.Data.XMLDataSet("../data/" + disease + "_ads.xml", "/banners/banner[@hide != 'true']");
inter_ad.loadData();

pulse_points = new Spry.Data.XMLDataSet("../data/pulse_points.xml", "/interstitial/program[@hide != 'true'][contains(concat(', ', ./disease, ', '), ', " + disease + ", ')]", {sortOnLoad: "@title"});
pulse_points.loadData();

whats_cooking = new Spry.Data.XMLDataSet("../data/whats_cooking.xml", "/interstitial/program[@hide != 'true'][contains(concat(', ', ./disease, ', '), ', " + disease + ", ')]", {sortOnLoad: "@title"});
whats_cooking.loadData();


function getBase () {
	return base_url;
}

// Get value of given URL parameter
function getParam(paramName) {
	var regExpSearch = new RegExp("[?&]" + paramName + "=([^&#]*)");
	var paramValue = regExpSearch.exec(window.location.href);
	if (paramValue == null) {
		return "";
	}
	return paramValue[1];
}


function doSearch(showResults) {
	searching = true;
	var searchRows = new Array("@title", "keywords", "description", "summary");
	var query = document.getElementById("searchInputCell").value;
	if (query == null || query == "" || !showResults) {
		searching = false;
		programs.filter(null);
		return;
	}
	var regExpSplit = new RegExp(" +", "gi");
	var regExpReplace = new RegExp("(^ +|^\"+ *| +$| *\"+$)", "gi");
	var queries = query.split(regExpSplit);

	function performSearch(needles, haystack) {
		var len = queries.length;
		for (i = 0; i < len; i++) {
			if (haystack.search(new RegExp(needles[i].replace(regExpReplace, ""), "gi")) == -1) 
				return false;
		}
		return true;
	}

	function filterFunc (ds, row, rowNumber) {
		var rowsLen = searchRows.length;
		for (var i = 0; i < rowsLen; i++) {
			var str = row[searchRows[i]];
			if (str && performSearch(queries, str)) {
				return row;
			}
		}
		return null;
	}
	programs.filter(filterFunc);
}