// JavaScript Document
window.onload = function(){
	try{
		//###set onchange event for per_page_select SELECT
		document.getElementById('per_page_select').onchange = function(){
			
			//##append per page count and reload the page
			query_string += "&perpage="+this.value;
			window.location = this_page+'?'+query_string;
			
		}
	}catch(e){}
}


//###other initialization stuff
//###removing the 'perpage' key and value from the query string
var perpage = 0;
var this_page = "";
var query_string = getFormattedQueryString( document.location.href );
//setPerPageSelected( perpage );


function getFormattedQueryString( loc ){

	this_page = ( loc.indexOf( '?' ) != -1 )? loc.substring( 0, loc.indexOf( '?' ) ) : loc ;
	loc = ( loc.indexOf( '?' ) != -1 )? loc.substring( loc.indexOf( '?' )+1 ) : "" ;
	
	if( loc != ""  ){
	
		//##extract the keys and values from the query string and put the into arrays
		var key_list = ""
		var query_array = new Array();
			query_array = queryStringToArray( loc, 'array_num', 'overwrite', false );
			key_list = queryStringToArray( loc, 'key_list', 'overwrite', false );
		var key_array = key_list.split( ',' );
		
		//##filter out 'perpage' value and reconstruct query string
		loc = "";
		for( i = 0; i < key_array.length; i++ ){
			
			if( key_array[i] != 'perpage' ){
				
				loc += ( query_string != "" )? "&": "" ;
				loc += key_array[i]+"="+query_array[i];
				
			}else{
				perpage = query_array[i];
			}
			
		}
		
	}
	
	return loc;
}

//###setting per_page_select to show selected the current perpage value
function setPerPageSelected( per_page ){
	try{
		
		//##set oSelect
		var oSelect = document.getElementById( 'per_page_select' );
		
		//##first check if oSelect is set to 'all'
		if( per_page == 'all' ){
			
			oSelect[3].selected = true;
			return;
			
		}else{ //##if not, parse per_page and use that as the condition
		
			per_page = parseInt( per_page );
			for( i = 0; i < oSelect.length; i++ ){

				if( oSelect[i].value == per_page ){
					oSelect[i].selected = true;
					return;
				}
				
			}
			
		}
	}catch(e){ alert( e.message ); }
}

function queryStringToArray( sQueryString, returnType, onMatch, debug ){
	
	try{
		if(debug){
			var debug_msg = "queryStringToArray( sQueryString = "+sQueryString+", returnType = "+returnType+", onMatch = "+onMatch+" )\n\n";
		}
		
		sQueryString = ( sQueryString.indexOf('?') > -1 )? sQueryString.substring( sQueryString.indexOf('?')+1, sQueryString.length ) : sQueryString ;
		
		var querySplit = sQueryString.split('&');
		var keyArray = new Array();
		var assocArray = new Array();
		var numArray = new Array();
		var key = "key";
		var value = "value";
		var assoc_string = "";
		var num_string = "";
			var test_string = "";
			var key_list = "";
			var key_string = "";
		var returnQuery = "";
		var a = 0;
		var key_match = false;
		
		for( i = 0; i < querySplit.length; i++ ){
			
			key = querySplit[i].substring( 0, querySplit[i].indexOf('=') );
			
			if( querySplit[i].indexOf('=') == querySplit[i].length ){
				value = "";
			}else{
				value = querySplit[i].substring( querySplit[i].indexOf('=')+1, querySplit[i].length );
			}
			
			if(keyArray.length == 0){ //automatically assign the firstkey value to the list
				
				assocArray[key] = value;
				numArray[a] = value;
				keyArray[a] = key;
				
				key_string += key+"\n";
				
				key_list += key+",";
				a++;
				
			}else{
				
				for( j = 0; j < keyArray.length; j++ ){ //test if the current key exists in the array
	
					if( key == keyArray[j] ){
						key_match = true;
						if( onMatch == "replace" ){ // if onMatch is set to replace like keys, overwrite array item value
							assocArray[key] = value;
							numArray[j] = value;
						}
						continue;	
					}
			
				}
				
				if( !key_match ){ // if key is new, add to everything
	
					assocArray[key] = value;
					numArray[a] = value;
					keyArray[a] = key;
				
					key_string += key+"\n";
					
					key_list += key+",";
					a++;
	
				}
				
				key_match = false;
			}
			
		}
		
		for( i = 0; i < keyArray.length; i++ ){ // build accurate item checklists and returnQuery
			assoc_string += "assocArray["+keyArray[i]+"] = " +assocArray[keyArray[i]]+ "\n";
			num_string += "numArray["+i+"] = " +numArray[i]+ "\n";
			returnQuery += "&"+keyArray[i]+"="+assocArray[keyArray[i]];
		}
		
		key_list = key_list.substring( 0, key_list.length-1 );
		key_string = key_string.substring( 0, key_string.length-1 );
		returnQuery = returnQuery.substring( 1, returnQuery.length );
		test_string = ( returnType == "array_assoc" )? assoc_string : num_string ;
		var length = a;
		
		switch( returnType.toLowerCase() ){
			case "array_assoc": return_value = assocArray;
				break;
			case "array_num": return_value = numArray;
				break;
			case "array_key": return_value = keyArray;
				break;
			case "key_list" : return_value = key_list;
				break;
			case "query": return_value = returnQuery;
				break;
			default: var default_type = "\narray_num\narray_assoc\nkey_list\nquery\n"
				alert( "queryStringToArray( sQueryString, returnType, debug ) only takes the following returnType values,\n"+default_type  );
		}
		
		if(debug){
			debug_msg += "Return Type: "+returnType+"\n\n";
			debug_msg += "Array Length: "+length+"\n\n";
			debug_msg += "Array Values:\n"+test_string+"\n\n";
			debug_msg += "Key List: "+key_list+"\n\n";
			debug_msg += "Key Array Values:\n"+key_string+"\n\n";
			debug_msg += "Return Query: "+returnQuery+"\n\n";
			alert(debug_msg);
		}
	
		return return_value;
		
	}catch(e){ alert( e.message ); }
	
}


/*== arrayCombine( keyArray, valueArray, debug ) ====================================================================
==	takes two arrays and makes an associative array using keyArray as KEYS and  valueArray as VALUES
==	
==	
*/
function arrayCombine( keyArray, valueArray, doPadding ){

	var returnArray = new Array();

	if(doPadding){
		if( valueArray.length > keyArray.length ){
			var diff = valueArray.length - keyArray.length;
			for( i = 0; i < diff; i++ ){
				keyArray[i] = "";
			}
			
		}
	}
	
	for( i = 0; i < keyArray.length; i++ ){
		returnArray[keyArray[i]] = valueArray[i];
	}
	
	return returnArray;
	
}

