///////////////////////////////////////////////////////////////////////
// Globals
///////////////////////////////////////////////////////////////////////
var isIE = false; // global flag
var req; // global request and XML document objects

// Filters globals
var types = new Array();
var node;
var industries = new Array();
var sizes = new Array();
var filters = new Array(128);
var filters_cnt = new Array(128);
for (var i = 0; i < 128; i++) {
	filters[i] = new Array();
	filters_cnt[i] = new Array();
}
var filter_t = new Array();
var filter_a = new Array();
var filter_i = new Array();
var filter_z = new Array();
var filtersParsed = false;

// Disable rules
var disable_r = new Array();

// Sorting globals
var sort = 'name';
var sort_d = 'ASC';

// Paging globals
var pageResultsPerPage = 20;
var pageCurrentPage    = 1;
var pageTotalEntries   = 0;
var pageTotalPages     = 1;

// Meta
var filterListRecordType = null;

// Images globals
var iconPath = "fileadmin/site/images/filter/";
var iconExt = ".gif";

// Language
var languages = new Array();


///////////////////////////////////////////////////////////////////////
// Functions
///////////////////////////////////////////////////////////////////////
// Generic Functions
//
function hasClass(ele,cls) {
	return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}

function addClass(ele,cls) {
	if (!this.hasClass(ele,cls)) ele.className += " "+cls;
}

function removeClass(ele,cls) {
	if (hasClass(ele,cls)) {
		var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
		ele.className=ele.className.replace(reg,' ');
	}
}

function indexInArray(arr, val) {
	for (var x = 0; x < arr.length; x++) {
		if (arr[x] == val) return x;
	}
	return -1;
}

function printFirstUppercase(val) {
	return val.substr(0, 1).toUpperCase() + val.substr(1);
}

// Specific Functions
//
function processReqChange() {
	if (req.readyState == 4) { // Only if req shows "loaded"
		if (req.status == 200) { // Only if "OK"
			processXMLResults(false);
		} else {
			alert("There was a problem retrieving the XML data:\n" + req.statusText);
		}
	}
}

function parseXML(url) {
	if (window.XMLHttpRequest) { // Branch for native XMLHttpRequest object
		req = new XMLHttpRequest();
		req.onreadystatechange = processReqChange;
		req.open("GET", url, true);
		req.send(null);
	} else if (window.ActiveXObject) { // Branch for IE/Windows ActiveX version
		isIE = true;
		req = new ActiveXObject("Microsoft.XMLHTTP");
		if (req) {
			req.onreadystatechange = processReqChange;
			req.open("GET", url, true);
			req.send();
		}
	}
}



function processFilter(arr_num, val) {
	if (indexInArray(filters[arr_num], val) == -1) {
		filters[arr_num][filters[arr_num].length] = val;
		filters_cnt[arr_num][filters_cnt[arr_num].length] = 1;
	} else {
		filters_cnt[arr_num][indexInArray(filters[arr_num], val)]++;
	}
}

function processFilterInput(arr_num, val) {
	var preferences = req.responseXML.getElementsByTagName("preferences");
	if (preferences.length) {
		// input filters
		var filterInput = preferences[0].getElementsByTagName("filterInput")[0];
		if (filterInput) {
			var filt_inputs = filterInput.getElementsByTagName("filter");
			for (var i = 0; i < filt_inputs.length; i++) {
				if (filt_inputs[i].attributes.getNamedItem("type").nodeValue == val) {
					filter_i[arr_num-1] = filt_inputs[i].childNodes[0].nodeValue;
					if (filt_inputs[i].childNodes[0].nodeValue == "multi-select") {
						if (filt_inputs[i].attributes.getNamedItem("size").nodeValue) {
							filter_z[arr_num-1] = filt_inputs[i].attributes.getNamedItem("size").nodeValue;
						} else {
							filter_z[arr_num-1] = 5;
						}
					}
					return true;
				}
			}
		}
		filter_i[arr_num-1] = "checkbox"; // default
		return true;
	}
	return false;
}

function parseFilterList() {
	var clients = req.responseXML.getElementsByTagName("client");

	for (var i = 0; i < clients.length; i++) {
		var name_node = clients[i].getElementsByTagName("clientName")[0]; // Client Name
		processFilter(0, name_node.childNodes[0].nodeValue); // Add this to the filters

		var filt_node = clients[i].getElementsByTagName("filters")[0];    // Filters
		var clfilters = filt_node.getElementsByTagName("filter"); // Filters
		for (var j = 0; j < clfilters.length; j++) {
			var type_val = printFirstUppercase(clfilters[j].attributes.getNamedItem("type").nodeValue);
			var filter_c = indexInArray(filter_t, type_val);
			if (filter_c == -1) {
				filter_t[filter_t.length] = type_val;
				disable_r[disable_r.length] = new Array(); // new array for disable rules of this type
				filter_c = filter_t.length;
				processFilterInput(filter_c, clfilters[j].attributes.getNamedItem("type").nodeValue);
			} else {
				filter_c++;
			}
			processFilter(filter_c, clfilters[j].childNodes[0].nodeValue); // Add this to the filters
		}
	}

	// Create disable rules
	for (var i = 0; i < filter_t.length; i++) {
		for (var j = 0; j < filters[i+1].length; j++) {
			disable_r[i][j] = new Array();
			for (var k = 0; k < clients.length; k++) {
				var filt_node = clients[k].getElementsByTagName("filters")[0];    // Filters
				var clfilters = filt_node.getElementsByTagName("filter"); // Filters
				for (var l = 0; l < clfilters.length; l++) {
					// skip the same type
					if (i == l) {
						continue;
					} else {
						if (clfilters[i]) {
							if (clfilters[i].childNodes[0].nodeValue == filters[i+1][j]) {
								if (!indexInDisableRules(disable_r[i][j], new Array(printFirstUppercase(clfilters[l].attributes.getNamedItem("type").nodeValue), clfilters[l].childNodes[0].nodeValue))) {
									disable_r[i][j][disable_r[i][j].length] = new Array(printFirstUppercase(clfilters[l].attributes.getNamedItem("type").nodeValue), clfilters[l].childNodes[0].nodeValue);
								}
							}
						}
					}
				}
			}
		}
	}
	// Sort filters
	for (var i = 0; i < filters.length; i++) {
		var counts = [];
		for (var ii = 0; ii < filters[i].length; ii++) {
			counts[filters[i][ii]] = filters_cnt[i][ii];
		}
		filters[i].sort(function(a,b){
			if (a.toLowerCase() > b.toLowerCase()) return 1;
			if (b.toLowerCase() > a.toLowerCase()) return -1;
		});
		for (var ii = 0; ii < filters[i].length; ii++) {
			filters_cnt[i][ii] = counts[filters[i][ii]];
		}
	}
}

function indexInDisableRules(arr, arr_c) {
	for (var i = 0; i < arr.length; i++) {
		if (arr[i][0] == arr_c[0] && arr[i][1] == arr_c[1]) {
			return true;
		}
	}
	return false;
}

function resetInputs() {
	// Reset checkboxes
	for (var i = 0; i < filters.length; i++) {
		for (var j = 0; j < filters[i].length; j++) {
			var ele = document.getElementById('filter' + printFirstUppercase(filters[i][j]));
			if (ele) ele.checked = false;
		}
	}
}

function processXMLResults(filter_flag, reset_flag) {

	filter_a = new Array();

	// Parse preferences
	parsePreferences();
	
	// Parse language
	parseLanguage();

	// Parse meta information
	parseMeta();

	if (filtersParsed) {
		if (reset_flag) {
			document.getElementById('filterCaseSelect').selectedIndex = 0;
		}

		if (document.getElementById('filterCaseSelect').value != '') {
			resetInputs();
		}
	}

	if (filter_flag) {
		for (var i = 0; i < filter_t.length; i++) {
			filter_a[i] = new Array();
			var cnt = 0;
			
			if (filter_i[i] == "checkbox") {				// checkbox
				for (var j = 0; j < filters[i+1].length; j++) {
					var cbox = document.getElementsByName('filter' + printFirstUppercase(filter_t[i]));
					if (cbox[j].checked) {
						filter_a[i][cnt] = filters[i+1][j];
						cnt++;
					}
				}
			} else if (filter_i[i] == "single-select") {	// single select
				var sbox = document.getElementById('filter' + filter_t[i]);
				if (sbox.selectedIndex != 0) {
					filter_a[i][cnt] = filters[i+1][sbox.selectedIndex-1];
					cnt++;
				}
			} else if (filter_i[i] == "multi-select") {		// multiple select
				var sbox = document.getElementById('filter' + filter_t[i]);
				if (sbox.selectedIndex != -1) {
					for (var j = 0; j < sbox.options.length; j++) {
						if (sbox.options[j].selected &&
							sbox.options[j].value != -1) {
							filter_a[i][cnt] = filters[i+1][sbox.options[j].value];
							cnt++;
						}
					}
				}
			}
		}
	} else {
		resetInputs();
	}

	pageCurrentPage = 1;

	if (!filtersParsed) {
		parseFilterList();
		filtersParsed = true;
		parseDisableRules(filter_flag);
		getClientList(filter_flag);
		toggleOptions();
		updateQuery();
		return
	}

	parseDisableRules(filter_flag);
	setTimeout('updateQuery()', 250); // For some reason, the reset button fails if we do this too fast

	getClientList(filter_flag);
}

function parsePreferences() {
	var preferences = req.responseXML.getElementsByTagName("preferences");
	if (preferences.length) {
		var prefResultsPerPage = preferences[0].getElementsByTagName("resultsPerPage")[0];
		if (prefResultsPerPage) {
			pageResultsPerPage = prefResultsPerPage.childNodes[0].nodeValue;
		}
	}
}

function parseMeta() {
	var meta = req.responseXML.getElementsByTagName("meta");
	if(meta.length) {
		var prefFilterListRecordType = meta[0].getElementsByTagName('filterListRecordType')[0];
		filterListRecordType = prefFilterListRecordType.childNodes[0].nodeValue;
	}
}

function parseLanguage() {
	var language = req.responseXML.getElementsByTagName("language");
	if (language.length) {
		var x = 0;
		for (var i = 0; i < language[0].childNodes.length; i++) {
			if (language[0].childNodes[i].nodeType == 1) {
				languages[x] = new Array(language[0].childNodes[i].nodeName, language[0].childNodes[i].childNodes[0].nodeValue);
				x++;
			}
		}
	}
}

function getLanguage(lookup) {
	for (var i = 0; i < languages.length; i++) {
		if (languages[i][0] == lookup) {
			return languages[i][1];
		}
	}
	return -1;
}

function getFilterType(val) {
	for (var i = 0; i < filter_t.length; i++) {
		if (filter_t[i] == val) {
			return i;
		}
	}
	return -1;
}

function getFilterIndex(type, val) {
	for (var i = 0; i < filters[type+1].length; i++) {
		if (filters[type+1][i] == val) {
			return i;
		}
	}
	return -1;
}

function parseDisableRules(filter_flag) {
	if (filter_flag) {
		for (var i = 0; i < filter_t.length; i++) {
			var ele = document.getElementsByName('filter' + printFirstUppercase(filter_t[i]));
			for (var j = 0; j < filters[i+1].length; j++) {
				if (ele[j]) ele[j].disabled = false;
				removeClass(document.getElementById('span' + printFirstUppercase(filters[i+1][j].replace(' ', '_'))), 'filterDisabled');
			}
		}

		for (var i = 0; i < filter_t.length; i++) {
			var f_cbox = document.getElementsByName('filter' + printFirstUppercase(filter_t[i]));
				
			for (var j = 0; j < filters[i+1].length; j++) {
				if (f_cbox[j]) {
					if (f_cbox[j].checked) {
						for (var k = 0; k < filter_t.length; k++) {
							for (var l = 0; l < filters[k+1].length; l++) {
								if (i == k && j == l) {
									continue;
								}
								// disabled to produce AND search
								/*
								if (!indexInDisableRules(disable_r[i][j], new Array(filter_t[k], filters[k+1][l]))) {
									var d_cbox = document.getElementsByName('filter' + printFirstUppercase(filter_t[k]));
									d_cbox[l].disabled = true;
									d_cbox[l].checked = false;
									addClass(document.getElementById('span' + printFirstUppercase(filters[k+1][l].replace(' ', '_'))), 'filterDisabled');
								}
								*/
							}
						}
					}
				}
			}
		}
	}
}

function sortColumn(val, dir) {
	removeClass(document.getElementById('resultsHead' + printFirstUppercase(sort)), 'resultsSortHead' + sort_d);

	if (sort != val) {
		sort = val;
		if (!dir) {
			dir = 'ASC';
		}
	}

	if (dir) {
		sort_d = dir;
	} else {
		if (sort_d == 'ASC') {
			sort_d = 'DESC';
		} else {
			sort_d = 'ASC';
		}
	}

	processXMLResults(true, false);
}

function getClientList(filter_flag) {
	var expClientList = '';

	// Get customer list
	var clients = req.responseXML.getElementsByTagName("client");

	var result_array = new Array();

	// Loop customers
	for (var i = 0; i < clients.length; i++) {
		var name_node = clients[i].getElementsByTagName("clientName")[0]; // Client Name
		var logo_node = clients[i].getElementsByTagName("clientLogo")[0]; // Client Logo
		var url_node  = clients[i].getElementsByTagName("clientURL")[0];  // Client URL
		var desc_node = clients[i].getElementsByTagName("clientDesc")[0]; // Client Description

		var filt_node = clients[i].getElementsByTagName("filters")[0];    // Filters
		var clfilters = filt_node.getElementsByTagName("filter"); // Filters

		if (filter_flag) {
			// Check client filters
			if (document.getElementById('filterCaseSelect').value != "" && 
				document.getElementById('filterCaseSelect').value != name_node.childNodes[0].nodeValue) {
				continue;
			}

			var cont = true;
			for (var j = 0; j < filter_t.length; j++) {
				if (filter_a[j] && filter_a[j].length) {
					cont = false;
					if (clfilters[j]) {
						if (indexInArray(filter_a[j], clfilters[j].childNodes[0].nodeValue) > -1) {
							cont = true;
						} else {
							break;
						}
					}
				}
			}
			if (!cont) {
				continue;
			}
		}

		result_array[result_array.length] = i;
	}

	// Sorting
	for (var i = 0; i < result_array.length; i++) {
		for (var j = 0; j < result_array.length; j++) {
			var node_j_val;
			if (sort == "name") {
				// name search
				var node_i_val = clients[result_array[i]].getElementsByTagName("clientName")[0].childNodes[0].nodeValue;
				var node_j_val = clients[result_array[j]].getElementsByTagName("clientName")[0].childNodes[0].nodeValue;
			} else {
				// filter search
				// filter search
				var f_node = clients[result_array[i]].getElementsByTagName("filters")[0];
				var f_filters = f_node.getElementsByTagName("filter");
				for (var k = 0; k < f_filters.length; k++) {
					if (f_filters[k].attributes.getNamedItem("type").nodeValue == sort) {
						node_i_val = f_filters[k].childNodes[0].nodeValue;
					}
				}
				f_node = clients[result_array[j]].getElementsByTagName("filters")[0];
				f_filters = f_node.getElementsByTagName("filter");
				for (var k = 0; k < f_filters.length; k++) {
					if (f_filters[k].attributes.getNamedItem("type").nodeValue == sort) {
						node_j_val = f_filters[k].childNodes[0].nodeValue;
					}
				}
			}

			if (sort_d == "ASC" && (node_i_val < node_j_val)) {
				var temp = result_array[i];
				result_array[i] = result_array[j];
				result_array[j] = temp;
			} else if (sort_d == "DESC" && (node_i_val > node_j_val)) {
				var temp = result_array[i];
				result_array[i] = result_array[j];
				result_array[j] = temp;
			}
		}
	}

	// Paging
	pageTotalEntries = result_array.length;
	pageTotalPages = Math.ceil(pageTotalEntries / pageResultsPerPage);
	if (!pageTotalPages) pageTotalPages = 1;

	getPageResults();

	expClientList += '										<table class="resultsTableHead" id="filterListRecordType_' + filterListRecordType + '">\n';

	for (var i = ((pageCurrentPage-1) * pageResultsPerPage); i < pageTotalEntries; i++) {
		var name_node = clients[result_array[i]].getElementsByTagName("clientName")[0]; // Client Name
		var logo_node = clients[result_array[i]].getElementsByTagName("clientLogo")[0]; // Client Logo
		var url_node  = clients[result_array[i]].getElementsByTagName("clientURL")[0];  // Client URL
		var desc_node = clients[result_array[i]].getElementsByTagName("clientDesc")[0]; // Client Description

		// Check paging
		if ((i < ((pageCurrentPage-1) * pageResultsPerPage)) || (i >= (pageCurrentPage * pageResultsPerPage))) {
			continue;
		}

		var filt_node = clients[result_array[i]].getElementsByTagName("filters")[0];    // Filters
		var clfilters = filt_node.getElementsByTagName("filter"); // Filters
		var type_val = new Array();
		var href_val = new Array();
		for (var j = 0; j < clfilters.length; j++) {
			if (clfilters[j].attributes.getNamedItem("href")) {
				href_val[j] = clfilters[j].attributes.getNamedItem("href").nodeValue;
			}
			type_val[j] = printFirstUppercase(clfilters[j].childNodes[0].nodeValue);
		}
		
		expClientList += '										<tr>\n';
		expClientList += '											<td class="resultsName">\n';
		expClientList += '												<table cellpadding="0" cellspacing="0"><tr><td valign="top"><a href="'+url_node.childNodes[0].nodeValue+'"><img class="resultsLogo" src="'+logo_node.childNodes[0].nodeValue+'" alt="'+name_node.childNodes[0].nodeValue+'" /></a></td>';
		expClientList += '												<td valign="top" style="width:100%" class="resultsTitle"><a href="'+url_node.childNodes[0].nodeValue+'">'+name_node.childNodes[0].nodeValue+'</a><br /></td></tr></table>';
		expClientList += '												<span>'+desc_node.childNodes[0].nodeValue+'</span>\n';
		expClientList += '											&nbsp;</td>\n';

		for (var j = 0; j < filter_t.length; j++) {
			if (j == 3) {
				// don't print more than 3 cells
				break;
			}
			expClientList += '											<td class="resultsFilter"><span>\n';
			if (type_val[j]) {
				if (typeof href_val[j] !== 'undefined') {
					expClientList += '<a href="' + href_val[j] + '">' + type_val[j] + '</a>\n';
				} else {
					expClientList += type_val[j];
				}
			} else {
				expClientList += '&nbsp;\n';
			}
			expClientList += '</span></td>\n';
		}
		expClientList += '										</tr>\n';
	}

	if (!result_array.length) {
		expClientList += '<div class="expNoResults">' + getLanguage("noResults") + '</div>';
	}

	expClientList += '										</table>\n';

	document.getElementById("resultsTableBody").innerHTML = expClientList;


	// Process table headers
	var expFilterHead = '';

	expFilterHead += '									<table class="resultsTableBody">\n';
	expFilterHead += '									<tr>\n';
	expFilterHead += '										<td class="resultsNameHead" id="resultsHeadName" onClick="sortColumn(\'name\');" onMouseOver="this.style.cursor=\'pointer\';">\n';
	expFilterHead += '											<span class="filterName">' + getLanguage("nameColumn") + '</span>\n';
	expFilterHead += '										</td>\n';
	for (var i = 0; i < filter_t.length; i++) {
		if (i == 3) {
			// don't print more than 3 headers
			break;
		}
		expFilterHead += '										<td class="resultsFilterHead" id="resultsHead' + printFirstUppercase(filter_t[i].replace(' ', '_')) + '" onClick="sortColumn(\'' + filter_t[i].toLowerCase() + '\');" onMouseOver="this.style.cursor=\'pointer\';">\n';
		if(printFirstUppercase(filter_t[i]) == "Area")
		{
		expFilterHead += '											<span class="filterName">Automation Area</span>\n';
		}
		else
		{
		expFilterHead += '											<span class="filterName">' + printFirstUppercase(filter_t[i]) + '</span>\n';
		}
		expFilterHead += '										</td>\n';
	}
	expFilterHead += '									</tr>\n';
	expFilterHead += '									</table>\n';

	document.getElementById("resultsTableHead").innerHTML = expFilterHead;

	addClass(document.getElementById('resultsHead' + printFirstUppercase(sort)), 'resultsSortHead' + sort_d);

	if (!filter_flag) {
		// Process filters
		var expFilterClient = '';
		expFilterClient += '	<select class="filterCaseSelect" id="filterCaseSelect" onchange="processXMLResults(true, false);">\n';
		expFilterClient += '	<option value=""></option>\n<option value="">' + getLanguage("showAll") + '</option>\n';
		for (var i = 0; i < filters[0].length; i++) {
			expFilterClient += '	<option value="' + filters[0][i] + '">' + filters[0][i] + '</option>\n';
		}
		expFilterClient += '	</select>\n';
		document.getElementById("filterSelect").innerHTML = expFilterClient;
		document.getElementById("filterName").innerHTML = getLanguage("nameColumn") + ':';

		var expFilter = '';
		for (var i = 0; i < filter_t.length; i++) {
			expFilter += '								<div class="filterCase">\n';
			if (printFirstUppercase(filter_t[i]) == "Area")
			{
			expFilter += '									<span class="filterName">Automation Area:</span>\n';
			}
			else
			{
			expFilter += '									<span class="filterName">' + printFirstUppercase(filter_t[i]) + ':</span>\n';
			}
			expFilter += '									<br />\n';
			expFilter += '									<div class="filterCell">\n';
			
			//alert(filter_t[i] + ' --> ' + filter_i[i]);
			
			if (filter_i[i] == "checkbox") {				// checkbox
				for (var j = 0; j < filters[i+1].length; j++) {
					var ele = document.getElementById('filter' + printFirstUppercase(filter_t[i]));
	
					expFilter += '										<div class="filterCheck">\n';
					expFilter += '											<input type="checkbox" name="filter' + printFirstUppercase(filter_t[i]) + '" onClick="processXMLResults(true, true);" />\n';
					expFilter += '										</div>\n';
					expFilter += '										<div class="filterCheckTitle">\n';
					expFilter += '											<span id="span' + printFirstUppercase(filters[i+1][j].replace(' ', '_')) + '">' + printFirstUppercase(filters[i+1][j]) + ' (' + filters_cnt[i+1][j] + ')</span>\n';
					expFilter += '										</div>\n';
				}
			} else if (filter_i[i] == "single-select") {	// single select
				expFilter += '											<select id="filter' + filter_t[i] + '" name="filter' + filter_t[i] + '" onChange="processXMLResults(true, true);">\n';
				expFilter += '											<option name="filter' + filter_t[i] + '" value="-1"></option>\n';
				for (var j = 0; j < filters[i+1].length; j++) {
					expFilter += '										<option id="span' + printFirstUppercase(filters[i+1][j].replace(' ', '_')) + '" name="filter' + filter_t[i] + '" value="' + j + '">' + printFirstUppercase(filters[i+1][j]) + '</option>\n';
				}
				expFilter += '											</select>';
			} else if (filter_i[i] == "multi-select") {		// multiple select
				expFilter += '											<select id="filter' + filter_t[i] + '" name="filter' + filter_t[i] + '" multiple="multiple" size="' + filter_z[i] + '" onChange="processXMLResults(true, true);">\n';
				expFilter += '											<option name="filter' + filter_t[i] + '" value="-1"></option>\n';
				for (var j = 0; j < filters[i+1].length; j++) {
					expFilter += '										<option id="span' + printFirstUppercase(filters[i+1][j].replace(' ', '_')) + '" name="filter' + filter_t[i] + '" value="' + j + '">' + printFirstUppercase(filters[i+1][j]) + '</option>\n';
				}
				expFilter += '											</select>';
			}

			expFilter += '									</div>\n';
			expFilter += '								</div>\n';
		}

		document.getElementById("filterCaseList").innerHTML = expFilter;
	}
	
	document.getElementById("filterResetT").innerHTML = getLanguage("resetText");
	document.getElementById("filterResetB").innerHTML = getLanguage("resetText");
	

}

function getPageResults() {
	var pageList = "";
	if (pageTotalPages <= 10) {
		for (var i = 1; i <= pageTotalPages; i++) {
			if (i == pageCurrentPage) pageList += '<span id="pagerLink_' + i + '" class="pagerCurrent">' + i + '</span>';
			else 					  pageList += '<span id="pagerLink_' + i + '"><a href="javascript:void(0);" onClick="pageJump(' + i + ');" class="pagerLink">' + i + '</a></span>';
			if (i < pageTotalPages) pageList += '&nbsp;';
		}
	} else if (pageTotalPages > 10) {
		var pageMin = '';
		var pageMax = (pageTotalPages > 3) ? 3 : pageTotalPages;

		for (var i = 1; i <= pageMax; i++) {
			if (i == pageCurrentPage) pageList += '<span id="pagerLink_' + i + '" class="pagerCurrent">' + i + '</span>';
			else 					  pageList += '<span id="pagerLink_' + i + '"><a href="javascript:void(0);" onClick="pageJump(' + i + ');" class="pagerLink">' + i + '</a></span>';
			if (i < pageMax) pageList += '&nbsp;';
		}

		if (pageTotalPages > 3) {
			if (pageCurrentPage > 1 && pageCurrentPage < pageTotalPages) {
				if (pageCurrentPage > 5) pageList += " ... ";
				else					 pageList += "&nbsp;";
				pageMin = (pageCurrentPage > 4) ? pageCurrentPage : 5;
				pageMax = (pageCurrentPage < (pageTotalPages - 4)) ? pageCurrentPage : (pageTotalPages - 4);

				for (var i = (pageMin - 1); i <= (pageMax + 1); i++) {
					if (i == pageCurrentPage) pageList += '<span id="pagerLink_' + i + '" class="pagerCurrent">' + i + '</span>';
					else 					  pageList += '<span id="pagerLink_' + i + '"><a href="javascript:void(0);" onClick="pageJump(' + i + ');" class="pagerLink">' + i + '</a></span>';
					if (i <= pageMax) pageList += '&nbsp;';
				}

				if (pageCurrentPage < (pageTotalPages - 4)) pageList += " ... ";
				else										pageList += "&nbsp;";
			} else {
				pageList += " ... ";
			}

			for (var i = (pageTotalPages - 2); i <= pageTotalPages; i++) {
				if (i == pageCurrentPage) pageList += '<span id="pagerLink_' + i + '" class="pagerCurrent">' + i + '</span>';
				else 					  pageList += '<span id="pagerLink_' + i + '"><a href="javascript:void(0);" onClick="pageJump(' + i + ');" class="pagerLink">' + i + '</a></span>';
				if (i < pageTotalPages) pageList += '&nbsp;';
			}
		}
	}
	document.getElementById('filterPageList').innerHTML = pageList;
	document.getElementById('filterPageList2').innerHTML = pageList;

	if (pageCurrentPage < pageTotalPages) {
		document.getElementById('filterPageNext').innerHTML = '<a class="orangeLink" href="javascript:void(0);" onClick="pageNext();">&gt;</a>';
		document.getElementById('filterPageNext2').innerHTML = '<a class="orangeLink" href="javascript:void(0);" onClick="pageNext();">&gt;</a>';
	} else {
		document.getElementById('filterPageNext').innerHTML = '&gt;';
		document.getElementById('filterPageNext2').innerHTML = '&gt;';
	}

	if (pageCurrentPage > 1) {
		document.getElementById('filterPagePrev').innerHTML = '<a class="orangeLink" href="javascript:void(0);" onClick="pagePrev();">&lt;</a>';
		document.getElementById('filterPagePrev2').innerHTML = '<a class="orangeLink" href="javascript:void(0);" onClick="pagePrev();">&lt;</a>';
	} else {
		document.getElementById('filterPagePrev').innerHTML = '&lt;';
		document.getElementById('filterPagePrev2').innerHTML = '&lt;';
	}

}

function pageNext() {
	pageCurrentPage++;
	getClientList(true);
}

function pagePrev() {
	pageCurrentPage--;
	getClientList(true);
}

function pageJump(page) {
	pageCurrentPage = page;
	getClientList(true);
}

function parseQuery() {
	var query = window.location.search.substring(1);
	var vars = query.split("&");
	var data = [];
	data[0] = [];
	data[1] = [];
	for (i = 0; i < vars.length; i++) {
		var iable = vars[i].split("=");
		data[0][i] = iable[0];
		data[1][i] = iable[1];
	}
	return data;
}

function toggleOptions() {
	options = parseQuery();
	if (options[1][0]) {
		for (i = 0; i < options[0].length; i++) {
			var ele = '';
			name = unescape(options[0][i]).split("[");
			filter_name = 'filter' + name
			value = unescape(options[1][i]);
			if (name == 'CaseSelect') {
				for(ii = 0; ii < document.getElementById(filter_name).length; ii++) {
					if(document.getElementById(filter_name)[ii].value == value) {
						document.getElementById(filter_name).selectedIndex = ii;
					}
				}
			} else {
				ele = document.getElementById(filter_name);
				if (ele !== '') {
					ele = document.getElementsByName(filter_name);
				}
				if (typeof(ele) !== "undefined") {
					var filter_number = 0;
					for(ii = 0; ii < filter_t.length; ii++) {
						if (filter_t[ii] == name) {
							filter_number = ii + 1;
						}
					}
					if (filter_number > 0) {
						if (ele[0].type === 'checkbox') {
							for(ii = 0; ii < filters[filter_number].length; ii++) {
								if(filters[filter_number][ii] == value) {
									ele[ii].checked = true;
								}
							}
						} else if (ele[0].type === 'select-one') {
							for(ii = 0; ii < filters[filter_number].length; ii++) {
								if(filters[filter_number][ii] === value) {
									for(iii = 0; iii < ele[0].length; iii++) {
										if(ele[0][iii].value == ii) {
											ele[0].selectedIndex = iii;
										}
									}
								}
							}
						} else if (ele[0].type === 'select-multiple') {
							for(ii = 0; ii < filters[filter_number].length; ii++) {
								if(filters[filter_number][ii] == value) {
									for(iii = 0; iii < ele[0].length; iii++) {
										if(ele[0][iii].value == ii) {
											ele[0][iii].selected = true;
										}
									}
								}
							}
						}
					}
				}
			}
		}
		processXMLResults(true, false);
	}
}

function buildQuery(query, name, val) {
	if (name !== '' && val !== '') {
		if (query === '') {
			query = query + '?';
		} else {
			query = query + '&';
		}
		query = query + escape(name) + '=' + escape(val);
	}
	return query;
}

function parseOptions() {
	query = '';
	if (document.getElementById('filterCaseSelect').value.length) {
		query = buildQuery(query, 'CaseSelect', document.getElementById('filterCaseSelect').value);
	}
	for (i = 0; i < filter_t.length; i++) {
		ele = document.getElementById('filter' + filter_t[i]);
		if (ele !== '') {
			ele = document.getElementsByName('filter' + filter_t[i]);
		}
		if (typeof(ele) !== "undefined") {
			if (ele[0].type == 'checkbox') {
				for(ii = 0; ii < filters[i + 1].length; ii++) {
					if(ele[ii].checked == true) {
						query = buildQuery(query, filter_t[i], filters[i + 1][ii]);
					}
				}
			} else if (ele[0].type == 'select-one') {
				if(ele[0].selectedIndex > 0) {
					query = buildQuery(query, filter_t[i], filters[i + 1][ele[0].selectedIndex - 1]);
				}
			} else if (ele[0].type == 'select-multiple') {
				for(ii = 0; ii < filters[i + 1].length; ii++) {
					if(ele[0][ii + 1].selected == true) {
						query = buildQuery(query, filter_t[i], filters[i + 1][ii]);
					}
				}
			}
		}
	}
	return query;
}

function updateQuery() {
	query = parseOptions();
	new_url = window.location.href;
	new_url = new_url.split("?")[0] + query;
	document.getElementById('url').value = new_url;
}
