/**
 *
 * Basic javascript functions.
 *
 */
 
var keep_open; // Variable to prevent table entry to close.
var keep_closed; // Variable to prevent table entry to open.
var popup;		 // Globale variable for popup window

function on_page_load(page) {
	switch (page) {
		case 'admin': on_load_admin(); break;
		case 'shops': on_load_admin(); break;
		case 'login': on_load_login(); break;
		default: 
			// Focus on search field
			document.qs_frm.qsearch.focus();
	}	
}

/**
 *
 * Function to create an XmlHttp object to send ansynchronous requests.
 *
 */
function create_xml_http(requesthandler,params) {
	// Instantiate xmlhttp object
	var xmlhttp = false;
		
	/*@cc_on @*/
	
	/*@if (@_jscript_version >= 5)
	
	// JScript gives us Conditional compilation, we can cope with old IE versions.
	// and security blocked creation of the objects.
	
	try {
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
	  try {
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	  } catch (E) {
		xmlhttp = false;
	  }
	}
	
	/*@end @*/

	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
		xmlhttp = new XMLHttpRequest();
	}
	
	xmlhttp.open("GET","request.php?requesthandler="+requesthandler+"&"+params,true);
	
	return xmlhttp;			
}

/**
 *
 * Expands or collapses all table rows to show hidden details of records.
 *
 */
function expand(ex) {
	var trs = document.getElementsByTagName("tr");
	var elem;
	for (i=0;i<trs.length;i++) {
		var id = trs[i].getAttributeNode("id").nodeValue;
		if (id.match(/^row/)) {
			id = id.substr(3);
			elem = document.getElementById("details_artist_"+id);
			elem.className = (ex?"":"hidden");
			elem = document.getElementById("details_label_"+id);
			elem.className = (ex?"":"hidden");
			elem = document.getElementById("details_title_"+id);
			elem.className = (ex?"":"hidden");
			elem = document.getElementById("details_rating_"+id);
			elem.className = (ex?"":"hidden");
		}
	}
}

/**
 *
 * Jumps to a certain offset in the list view by submitting a form again.
 *
 */
function jump(offset,frm) {
	// Set offset
	document.getElementById("offset").value = offset;
	
	// Submit form (call page again)
	frm.submit();
}

/**
 *
 * Keeps a table row open or closed. When clicking on it.
 *
 */
function keep_status() {
	keep_open = true;
	keep_closed = true;
}

/**
 * 
 * Decodes an email adress.
 *
 */
function mailto(email) {
	var ret = "";
	for (var i=email.length-1;i>=0;i--)
		ret += String.fromCharCode(email.charCodeAt(i)-5);
	location.href = "mailto:"+ret;
}

/**
 * 
 * Shows or hides a group of elements
 *
 */
function set_visible(elements,visible) {
	var class_name;
	if (visible)
		class_name = "";
	else
		class_name = "hidden";
		
	var element_arr = elements.split(',');
	
	for (var i=0;i<element_arr.length;i++) {
		var elem = document.getElementById(element_arr[i]);
		if (elem)
			elem.className = class_name;
	}
}

/**
 *
 * Marks (highlites) an element.
 *
 */
function mark(elementname) {
	var element = document.getElementById(elementname);
	if (element && (element.className == "open" || element.className == "marked_open"))
		element.className = "marked_open";	
	else if (element)
		element.className = "mark";	
}

/**
 *
 * Opens a row in a table.
 *
 */
function open_row(rowID,edit) {
	var row = document.getElementById("row"+rowID);
	if (row) {
		if (!keep_closed && row.className.search(/open/) == -1) {
			// Mark row and show details for entry
			row.className = "marked_open";
			
			set_visible("details_artist_"+rowID+",details_title_"+rowID+",details_label_"+rowID+",details_rating_"+rowID,true);
		
			// Get hidden ID field
			var ID = document.getElementById("ID");
			if (ID) {			
				// Set new ID
				ID.value = rowID;	
			}			
		}
		else if (!keep_open) {
			// Unmark row and hide details
			if (row.className == "marked_open")
				row.className = "mark";
			else
				row.className = "";
				
			set_visible("details_artist_"+rowID+",details_title_"+rowID+",details_label_"+rowID+",details_rating_"+rowID,false);
			
			var ID = document.getElementById("ID");			
			if (ID)
				ID.value = "";				
		}
	}
	keep_open = false;
	keep_closed = false;
	return false;
}

/**
 *
 * Performs a quicksearch.
 *
 */
function qsearch() {
	if (qsearch_submit())
		document.qs_frm.submit();
	else
		document.qs_frm.qsearch.focus();
}

/**
 *
 * Returns true if quick search is executable.
 *
 */
function qsearch_submit() {
	document.qs_frm.qsearch.value = trim(document.qs_frm.qsearch.value);
	return (document.qs_frm.qsearch.value != "" && document.qs_frm.qsearch.value.length > 2)
}

/** 
 *
 * Rates a record.
 *
 */
function rate(ID) {
	keep_open = true;
	if (ID != 0) {
		var ID_elem = document.getElementById("ID");
		if (ID_elem)
			ID_elem.value = ID;
		var operation = document.getElementById("operation");
		if (operation.value == "details")
			operation.value = "rate_details";
		else
			operation.value = "rate";
		document.record_form.submit();
	}
	return false;
}

/**
 * 
 * Removes a data set on the page.
 *
 */
function remove_element(name) {
	var elem = document.getElementById(name);
	elem.parentNode.removeChild(elem);
}

/**
 *
 * Resizes the current window.
 *
 */
function resize(x,y) {
	if (!navigator.userAgent.match(/MSIE/))
		window.resizeTo(x,y+52);
	else
		window.resizeTo(x,y+32);
}

/**
 *
 * Opens a popup for a picture.
 *
 */
function show(pic,title) {
	keep_open = true;
	if (popup)
		popup.close();
	popup = window.open("show.php?pic="+pic+"&title="+title,"picture","width=30,height=30,left=100,top=200");	
}

/**
 *
 * Trims a string.
 *
 */
function trim(s) {
	var r = s.replace(/^\s*(.+)$/,"$1");
	r = r.replace(/(\S+)\s*$/,"$1");
	r = r.replace(/(\S)\s+(\S)/g,"$1 $2");
	return r;
}

/**
 *
 * Unmarks an element.
 *
 */
function unmark(elementname) {
	var element = document.getElementById(elementname);
	if (element.className == "marked_open")
		element.className = "open";
	else
		element.className = "";	
}

/**
 *
 * Handles collection and wantlist of user.
 *
 */
function user_record(action,ID) {
	keep_open = true;
	
	var xmlhttp = create_xml_http("recordhandler","operation="+action+"&ID="+ID);	
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4) {
			var response = xmlhttp.responseText.split(";");
			var type = response[0].split("_");
			var elem1 = document.getElementById(type[1]+"_add_"+response[1]);
			var elem2 = document.getElementById(type[1]+"_remove_"+response[1]);
			var elem3 = document.getElementById(type[1]+"_img_"+response[1]);
			if (type[0] == "add") {
				elem1.className = "hidden";
				elem2.className = "";
				if (elem3)
					elem3.className = "";
			}
			else {
				elem1.className = "";
				elem2.className = "hidden";
				if (elem3)
					elem3.className = "hidden";
			}
		}
	}
	xmlhttp.send("");
}

