// JavaScript Document
dropped = 0;
function init () { //Runs On Body.OnLoad
	
	document.getElementById(document.form.where.value).style.backgroundColor="#FFF";
	getLastDate(); // Gets Last Update Time from mysql database, only needs to be run once
	//getSqlStats();
	sendData(); // Get initial data records
	
	//if initialization is complete and page is not a refresh, set new initial orderby condition
	if(document.form.orderby1.value=="init") {document.form.orderby1.value = "artist.name";}
	
   // Assigning Functions to events
   	//Gets data on the fly
	$('CD').onkeyup = function () { sendData();	}
	//Gets top 20 list
	$('tptn').onclick = function () { getTopTen(); }
	//Get Database Stats
	//$('getAjaxStats').onclick = function(){ 
			//Effect.Combo('statbox', {duration: .8, scaleContent: false, queue: 'end'});
		//	getSqlStats();
		//	}
	//hover events for Criteria buttons
	$('0').onmouseover = function(){ omo(0); }
	$('0').onmouseout = function(){ omout(0); }	
	$('1').onmouseover = function(){ omo(1); }
	$('1').onmouseout = function(){ omout(1); }
	$('2').onmouseover = function(){ omo(2); }
	$('2').onmouseout = function(){ omout(2); }

	
}

function omo($x){ // Sets background of element to white
	document.getElementById($x).style.backgroundColor="#FFF";
	}

function omout($x){ //Removes white background from element if not currently selected
	if (document.form.where.value != $x ){
		document.getElementById($x).style.backgroundColor="transparent";
		}
 	}
	
function sendData () { //sends database query to php script, returns result to function ShowResponse
	document.form.tracker.value++; //give query index to maintain return order
	var url = 'includes/process.php';
	var pars = Form.serialize('form');
	var myAjax = new Ajax.Request( url, {method: 'get', parameters: pars, onLoading: showLoad, onComplete: showResponse} );
	}
	
function getLastDate () { //Ajax connection for ShowDateResponse
	var url = 'includes/date.php';
	var myAjax = new Ajax.Request( url, {method: 'get', onComplete: showDateResponse} );
	}

function getTopTen () {//Ajax connection for howTopTenResponse
	var url = 'includes/top20.php';
	var myAjax = new Ajax.Request( url, {method: 'get', onLoading: showLoad, onComplete: showTopTwentyResponse} );
}

function getSqlStats(){
	var url = 'includes/stats.php';
	var myAjax = new Ajax.Request( url, {method: 'get', onLoading: showLoad, onComplete: showStatsResponse} );
	}

function showLoad () { //Unhides Loading image while operation is processing
	$('load').style.display = 'block';
}

function showTopTwentyResponse (originalRequest){ //Parses top20 result into table and displays
	var newData = originalRequest.responseText;
	var Request = ++document.form.tracker.value;
	var tdclass = 0;
	var $output = '<table cellspacing="0"><tr><th id="thRank">Rank</th><th>Artist</th><th>Albums</th></tr>';
	$('stats').innerHTML = "<span>Showing Top 20 Artists</span>";
	var $record=newData.split("|");
	for (i=1; i < ($record.length - 1); i++) {
			var elment = $record[i].split(':');
			if(tdclass==0){ $output += "<tr><td>"+i+'</td><td><a href="javascript:;" onclick="SetSearch(\''+elment[0]+'\');" />'+elment[0]+"</a></td><td>"+elment[1]+"</td></tr>"; tdclass=1;} else {$output += "<tr><td class='alt'>"+i+'</td><td class="alt"><a href="javascript:;" onclick="SetSearch(\''+elment[0]+'\');" />'+elment[0]+"</a></td><td class='alt'>"+elment[1]+"</td></tr>"; tdclass=0;}
			}
		$output += "</table>";
	$('response').innerHTML = $output;
	$('stats2').innerHTML = 'Queries: '+ Request+', Dropped Packets: '+dropped;
	$('stats3').innerHTML = "";
	$('load').style.display = "none";
	}

function showStatsResponse (originalRequest){
	$('debug').innerHTML=originalRequest.responseText;
	$('load').style.display = "none";
	}

function SetSearch($n){ //Used by top 20 to view artist albums
	document.form.CD.value = stripslashes($n);
	SetWhere(1,1);
}
	
function showDateResponse (originalRequest) { //puts date in #lastdate div
	var newData = originalRequest.responseText;
	$('lastdate').innerHTML = newData;
	}

function showResponse (originalRequest) { // Parses Return string from process.php and places them in their appropriate positions

	var newData = originalRequest.responseText;
	$record=newData.split("|");
	var found = $record[0];
	var Request = $record[1];
	var LookingFor = $record [2];
	var tdclass = 0;
	if (Request >= document.form.tracker.value){
	var newerData = '<table cellspacing="0"><tr><th onclick="SetOrder(\'album.id\');" id="thID" ><span id=\"ID\"></span>ID</th><th onclick="SetOrder(\'artist.name\');" id="thArtist"><span id=\"artist.name\"></span>Artist</th><th onclick="SetOrder(\'album.name\');" id="thAlbum"><span id=\"CDalbum\"></span>Album</th><th onclick="SetOrder(\'album.cd\');" id="thBackup" ><span id=\"CDbackup\"></span>Backup</th></tr>';
	
	for (i=3; i < ($record.length - 1); i++) {
			var elment = $record[i].split(';');
			
			var artist = elment[0];
			var album = elment[1];
			album = album.replace(/(\[.*\])/g,"");
			var album2 = album.replace(/(\(.*\))|(\")|(\')|(\&)/g,"");
			var artist2 = artist.replace(/(\(.*\))|(\[.*\])|(\")|(\')|(\&)/g,"");
			var id = elment[2];
			var backup = elment[3];
			if (tdclass == 0){
			newerData += '<tr><td class="tdID">' + id + '</td><td><a href="javascript:;" onclick="SetSearch(\''+addslashes(artist)+'\');" />' + artist + '</a></td><td>' + album + '</td><td>' + backup + '</td></tr>'+"\n";
			tdclass = 1;
			//<a href="javascript:;" onClick="PopAlbum(\''+encodeURI(artist2)+'\',\''+encodeURI(album2)+'\');" >
			}
			else {
			
			newerData += '<tr><td class="alt tdID">' + id + '</td><td class="alt"><a href="javascript:;" onclick="SetSearch(\''+addslashes(artist)+'\');" />' + artist + '</a></td><td class="alt">' + album + '</td><td class="alt">' + backup + '</td></tr>'+"\n";
			tdclass = 0;
			}
			}
		newerData += "</table>";
		$('stats').innerHTML = GetMsg(found, LookingFor);
		$('stats2').innerHTML = 'Queries: '+ Request+', Dropped Packets: '+dropped;
		$('stats3').innerHTML = getHardLink();
		;
	$('response').innerHTML = newerData;
	SetTitles();
	SetOrderHeaders();
	}
	else { dropped++; }
	$('load').style.display = "none";
}

function GetMsg(found, LookingFor){ //Customizes Status text based on number of results found
	LookingFor = stripslashes(LookingFor);
	if (found==0){ return "<span>No</span> records found for ["+ LookingFor +"]"; }
	else if (found==1){ return "<span>One</span> record found for ["+ LookingFor +"]";}
	else if (LookingFor == "") { return "<span>"+addCommas(found)+"</span> records in the database"; }
	else { return "<span>"+addCommas(found)+"</span> records found for ["+ LookingFor +"]"; }
	}

function SetWhere($x,$t){ // Sets Where condition if different from current and updates Search criteria buttons
	if (document.form.where.value != $x || $t == 1){
		document.form.where.value=$x;
		document.getElementById('0').style.backgroundColor="transparent";
		document.getElementById('1').style.backgroundColor="transparent";
		document.getElementById('2').style.backgroundColor="transparent";
		document.getElementById($x).style.backgroundColor="#FFF";
		sendData();
		}
	}

function getHardLink(){
	if ( $F('CD') ){
	var $href = '?CD='+encodeURI($F('CD'))+'\&where='+ document.form.where.value;
	var $link = ', <a href="'+$href+'">Link to this page</a>'
	return $link;}
	else { return  ""; }
	}
	
function SetTitles(){ // Adds hover text to all links in results
	var rspns  = document.getElementById('response');
	var $as = rspns.getElementsByTagName('a');
	for ($i=0; $i < $as.length ;$i++){
		$as[$i].title = "Search For Artwork";
		}
	}

function SetOrder($field){ // Sets Orderby value unless argument is same as current then toggles
	if ( document.form.orderby1.value == $field ){ ToggleOrder(); }
	else { 
		document.form.orderby1.value = $field;
		document.form.orderby2.value = "ASC"; 
		}
	sendData();
	}

function ToggleOrder(){ // Toggles the order
	if (document.form.orderby2.value == "ASC"){ document.form.orderby2.value = "DESC"; }
	else { document.form.orderby2.value = "ASC" }
	}

function SetOrderHeaders(){ //Sets Order Image depending on form values
	document.getElementById(document.form.orderby1.value).innerHTML = '<img src="images/'+document.form.orderby2.value+'3.gif" align="absmiddle"/>';
	}

function resetform(){ // Clears input and sends blank request if input not already blank
	if(document.form.CD.value != "") { document.form.CD.value = ""; sendData();}
	}

function PopAlbum(artist,album){ //Preforms album art search in PopUp window
			unescape(album);
			//Album art search carried out remotely due to lack of PHP5 support
			var add1 = "http://ithinkdancan.host.sk/itunes/itunes-search.php?artist="+escape(artist)+"&album="+escape(album)
			window.open(add1,'one','width=620,height=610,scrollbars=yes,resizable=yes');
	}

function addCommas(nStr){ //taken from http://www.mredkj.com/javascript/nfbasic.html -> adds commas to large digits
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
		}
	return x1 + x2;
	}

function addslashes(str) {
str=str.replace(/\'/g,'\\\'');

return str;
}

function stripslashes(str) {
str=str.replace(/\\'/g,'\'');
return str;
}
	
	
Effect.OpenUp = function(element) { //Slides Element down -> Scriptacuous effect
     element = $(element);
     new Effect.SlideDown(element, arguments[1] || {});
 }

 Effect.CloseDown = function(element) { //Slides Element Up and hides -> Scriptacuous effect
     element = $(element);
     new Effect.SlideUp(element, arguments[1] || {});
 }

 Effect.Combo = function(element) { //Closes other hidden div before opening new div OR closes div if already open
	 if( element == "helpbox" && $('aboutbox').style.display != 'none' ){ new Effect.SlideUp('aboutbox',{duration: .6, scaleContent: false, queue: 'front'}); }
	 if( element == "aboutbox" && $('helpbox').style.display != 'none' ){ new Effect.SlideUp('helpbox',{duration: .6, scaleContent: false, queue: 'front'}); }
     element = $(element);
     if(element.style.display == 'none') {
          new Effect.OpenUp(element, arguments[1] || {}); 
     }else {
		 
          new Effect.CloseDown(element, arguments[1] || {}); 
     }
 }