var req;
var customerdata;
var selectedcustomer;
var searchOptionSort = 'achternaam';
var searchOptionSearchFor = 'achternaam';
var searchOptionSearchType = 'contains';
var searchOptionSortType = 'asc';
var searchOptionLimit = 'all';
var searchOptionStateNew = true;
var searchOptionStateActive = true;
var searchOptionStateSuspended = true;
var searchOptionStateInactive = false;

function setSearchOptionSort(field) {
	searchOptionSort = field;
	loadCustomersXML();
	document.getElementById('customersSearch').focus();
}
function setSearchOptionSearchFor(field) {
	searchOptionSearchFor = field;
	document.getElementById('customersSearchHeadingContent').innerHTML = 'Zoeken naar '+field;
	loadCustomersXML();
	document.getElementById('customersSearch').focus();
}
function setSearchOptionSearchType(type) {
	searchOptionSearchType = type;
	loadCustomersXML();
	document.getElementById('customersSearch').focus();
}
function setSearchOptionSortType(type) {
	searchOptionSortType = type;
	loadCustomersXML();
	document.getElementById('customersSearch').focus();
}
function setSearchOptionLimit(limit) {
	searchOptionLimit = limit;
	loadCustomersXML();
	document.getElementById('customersSearch').focus();
}
function toggleStateNew() {
	searchOptionStateNew = searchOptionStateNew ? false : true;
	loadCustomersXML();
	document.getElementById('customersSearch').focus();
}
function toggleStateActive() {
	searchOptionStateActive = searchOptionStateActive ? false : true;
	loadCustomersXML();
	document.getElementById('customersSearch').focus();
}
function toggleStateSuspended() {
	searchOptionStateSuspended = searchOptionStateSuspended ? false : true;
	loadCustomersXML();
	document.getElementById('customersSearch').focus();
}
function toggleStateInactive() {
	searchOptionStateInactive = searchOptionStateInactive ? false : true;
	loadCustomersXML();
	document.getElementById('customersSearch').focus();
}

function loadCustomersXML() {
	clearSearchStatusList();
	showSearchStatus();
	hideStatistics();
	if(typeof(req) == "object") {
		req.onreadystatechange = function () {}; //necessary in FF to disable a new readyState=4
		req.abort();
	}
	req = false;
	var search = document.getElementById("customersSearch").value;
	addSearchStatus("Starting search for: '" + search + "'");
	str = "search="+search;
	str += "&sort=" + searchOptionSort;
	str += "&search_for=" + searchOptionSearchFor;
	str += "&search_type=" + searchOptionSearchType;
	str += "&sorttype=" + searchOptionSortType;
	str += "&limit=" + searchOptionLimit;
	str += "&state_new=" + (searchOptionStateNew ? '1' : '0');
	str += "&state_active=" + (searchOptionStateActive ? '1' : '0');
	str += "&state_suspended=" + (searchOptionStateSuspended ? '1' : '0');
	str += "&state_inactive=" + (searchOptionStateInactive ? '1' : '0');
	
	if(window.XMLHttpRequest) {
		try {
			req = new XMLHttpRequest();
		}
		catch(e) {
			req = false;
		}
	}
	else if(window.ActiveXObject) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e) {
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e) {
				req = false;
			}
		}
	}
	else {
		addSearchStatus("Your browser isn't able to lookup users.");
	}
	
	if(req) {
		req.open("POST", loadCustomersPostLink, true);
		req.onreadystatechange = processXML;
		req.setRequestHeader("Method", "POST "+loadCustomersPostLink+" HTTP/1.1");
		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
		req.setRequestHeader("Content-Length", str.length);
		req.send(str);
	}
}

function processXML() {
	if(req.readyState == 0) {
		// ready state = uninitialised
	}
	else if(req.readyState == 1) {
		// ready state = loading
		addSearchStatus("Connecting to server.");
	}
	else if(req.readyState == 2) {
		// ready state = loaded
		addSearchStatus("Connected to server.");
	}
	else if(req.readyState == 3) {
		// ready state = interactive
		addSearchStatus("Receiving users.");
	}
	else if(req.readyState == 4) {
		// ready state = complete
		if(req.status == 200) {
			if(req.responseText.substring(0,5) == "<\?xml") {
				customerdata = req.responseXML;
				addSearchStatus("Users received.");
				processCustomerData();
			}
			else {
				clearCustomerList();
				setCustomerListMessage("Invalid data received. Probably your session has been expired!");
				addSearchStatus("Invalid data received. Probably your session has been expired!");
			}
		}
	}
}

function processCustomerData() {
	var container = document.getElementById("customersContent");
	customers = customerdata.getElementsByTagName("user");
	clearCustomerList();
	
	if(customers.length > 0) {
		//Eerst de tabel vullen met de gegevens van de xml
			table = document.createElement("table");
			thead = document.createElement("thead");
			
			currentrow = document.createElement("tr");
			cell = document.createElement("td");
			contentt = document.createTextNode('User');
			cell.appendChild(contentt);
			currentrow.appendChild(cell);
			
			cell = document.createElement("td");
			contentt = document.createTextNode('Certificate dir');
			cell.appendChild(contentt);
			currentrow.appendChild(cell);
			
			cell = document.createElement("td");
			contentt = document.createTextNode('State');
			cell.appendChild(contentt);
			currentrow.appendChild(cell);
			
			cell = document.createElement("td");
			contentt = document.createTextNode('Tools');
			cell.appendChild(contentt);
			currentrow.appendChild(cell);
			
			thead.appendChild(currentrow);
			table.appendChild(thead);
			
			tbody = document.createElement("tbody");
			
			for(i=0; i<customers.length; i++) {			
				currentrow = document.createElement("tr");
				
				cell = document.createElement("td");
				cell.verticalAlign = "top";
				linkcontent = document.createTextNode(customers[i].getElementsByTagName("name")[0].firstChild.data);
				cell.appendChild(linkcontent);
				currentrow.appendChild(cell);
				
				cell = document.createElement("td");
				cell.verticalAlign = "top";
				cell.paddingLeft = "5px";
				contentt = document.createTextNode(customers[i].getElementsByTagName("file_dir")[0].firstChild.data);
				cell.appendChild(contentt);
				currentrow.appendChild(cell);
				
				cell = document.createElement("td");
				cell.verticalAlign = "top";
				cell.paddingLeft = "5px";
				contentt = document.createTextNode(customers[i].getElementsByTagName("state")[0].firstChild.data);
				cell.appendChild(contentt);
				currentrow.appendChild(cell);
				
				cell = document.createElement("td");
				viewlink = document.createElement("a");
				viewlink.setAttribute("href", customers[i].getElementsByTagName("viewlink")[0].firstChild.data);
				viewimage = document.createElement('img');
				viewimage.setAttribute("src", '/images/icons/view.gif');
				viewlink.appendChild(viewimage);
				cell.appendChild(viewlink);
				currentrow.appendChild(cell);
				
				tbody.appendChild(currentrow);
			}
			table.appendChild(tbody);
			container.appendChild(table);
			
		//Dan de opmaak fixen voor het geheel
			table = document.getElementById("customersContent").getElementsByTagName('TABLE').item(0);
			table.cellPadding = 0;
			table.cellSpacing = 0;
			
			headingrow = document.getElementById("customersContent").getElementsByTagName('THEAD').item(0);
			headingrow.className = 'tableRow tableRowHeader';
			headingcells = headingrow.getElementsByTagName('TD');
			for(var i = 0; i < headingcells.length; i++) {
				headingcells.item(i).className = 'tableDataHeader';
				if(i > 0) {
					headingcells.item(i).style.paddingLeft = '5px';
				}
			}
			
			contentrows = document.getElementById("customersContent").getElementsByTagName('TBODY').item(0).getElementsByTagName('TR');
			for(var i = 0; i < contentrows.length; i++) {
				contentrows.item(i).className = 'tableRow';
				contentcells = contentrows.item(i).getElementsByTagName('TD');
				for(var j = 0; j < contentcells.length; j++) {
					contentcells.item(j).className = 'tableDataContent';
					if(j > 0) {
						contentcells.item(j).style.paddingLeft = '5px';
					}
					
					if(i%2 == 1) {
						contentcells.item(j).className += ' tableDataContentOdd';
					}
					else {
						contentcells.item(j).className += ' tableDataContentEven';
					}
				}
			}
			
		//En dan de keycodes initialiseren.
			selectCustomer(0);
	}
	else {
		contentt = document.createTextNode("No users match your search criterium.");
		container.appendChild(contentt );
	}
	
	//Dan de statistieken weergeven en de zoekstatus uitzetten.
		clearStatisticList();
		statistics = customerdata.getElementsByTagName("statistic");
		if(statistics.length > 0) {
			for(var i = 0; i < statistics.length; i++) {
				addStatistic(statistics[i].firstChild.data);
			}
		}
	
	hideSearchStatus();
	showStatistics();
}

function onSearchKeyDown(ev) {
	var keycode;
	if(window.event) {
		keycode = window.event.keyCode;
	}
	else if(ev) {
		keycode = ev.which;
	}
	else {
		return true;
	}
	
	if(keycode == 13) { //de enter toets
		customers = customerdata.getElementsByTagName("user");
		if(customers.length > 0 && selectedcustomer != null) {
			var container = document.getElementById("customersContent");
			for(i=0; i < container.childNodes.length; i++) {
				container.removeChild(container.childNodes[i]);
			}
			cellcontent = document.createTextNode("You are being redirected to the detailed page of " + customers[selectedcustomer].getElementsByTagName("name")[0].firstChild.data + ". One moment please.");
			container.appendChild(cellcontent);
			window.location.href = customers[selectedcustomer].getElementsByTagName("viewlink")[0].firstChild.data;
		}
		else {
			return true;
		}
	}
	else if(keycode == 46) { //de delete toets
		customers = customerdata.getElementsByTagName("user");
		if(customers.length > 0 && selectedcustomer != null && customers[selectedcustomer].getElementsByTagName("deletelink")[0].firstChild != null) {
			if(confirm('Are you sure you want to delete ' + customers[selectedcustomer].getElementsByTagName("name")[0].firstChild.data + '?')) {
				var container = document.getElementById("customersContent");
				for(i=0; i < container.childNodes.length; i++) {
					container.removeChild(container.childNodes[i]);
				}
				cellcontent = document.createTextNode(customers[selectedcustomer].getElementsByTagName("name")[0].firstChild.data + " is being removed. One moment please.");
				container.appendChild(cellcontent);
				window.location.href = customers[selectedcustomer].getElementsByTagName("deletelink")[0].firstChild.data;
			}
			else {
				return true;
			}
		}
		else {
			return true;
		}
	}
	else if(keycode == 38) { //arrow up
		selectCustomer(selectedcustomer-1);
	}
	else if(keycode == 40) { //arrow down
		selectCustomer(selectedcustomer+1);
	}
	else {
		loadCustomersXML();
	}
}

function selectCustomer(newitem) {
	customers = customerdata.getElementsByTagName("user");
	
	if(customers.length <= 0) {
		return false;
	}
	
	if(newitem < 0) {
		newitem = 0;
	}
	if(newitem >= customers.length - 1) {
		newitem = customers.length - 1;
	}
	
	old_item = selectedcustomer;
	contentrows = document.getElementById("customersContent").getElementsByTagName('TBODY').item(0).getElementsByTagName('TR');
	
	if(contentrows.item(old_item)) {
		old_cells = contentrows.item(old_item).getElementsByTagName('TD');
		for(var i = 0; i < old_cells.length; i++) {
			removeClassName(old_cells.item(i), 'tableDataContentSelected');
		}
	}
	
	selectedcustomer = newitem;
	new_cells = contentrows.item(newitem).getElementsByTagName('TD');
	for(var i = 0; i < new_cells.length; i++) {
		addClassName(new_cells.item(i), 'tableDataContentSelected');
	}
	
}

function clearCustomerList() {
	document.getElementById("customersContent").innerHTML = "";
}

function setCustomerListMessage(message) {
	document.getElementById("customersContent").innerHTML = message;
}



function showSearchStatus() {
	document.getElementById("customersSearchStatus").style.display = "";
}

function hideSearchStatus() {
	document.getElementById("customersSearchStatus").style.display = "none";
}

function clearSearchStatusList() {
	document.getElementById("customersSearchStatusList").innerHTML = "";
}

function addSearchStatus(status) {	
	listitem = document.createElement("li");
	status = document.createTextNode(status);
	listitem.appendChild(status);
	document.getElementById("customersSearchStatusList").appendChild(listitem);
}

function showStatistics() {
	document.getElementById("customersStatistics").style.display = "";
}

function hideStatistics() {
	document.getElementById("customersStatistics").style.display = "none";
}

function clearStatisticList() {
	document.getElementById("customersStatisticsList").innerHTML = "";
}

function addStatistic(status) {	
	listitem = document.createElement("li");
	status = document.createTextNode(status);
	listitem.appendChild(status);
	document.getElementById("customersStatisticsList").appendChild(listitem);
}
