// JavaScript Document
/*
Simple AJAX implementation 
Joel Mellin
5/2006
All Rights reserved.
*/
var Active = false; // Is AJAX active or inactive
var DivsToUpdate = new Array(); // Array of document divs to update with new information
var DivToUpdate;
DivToUpdate="";
var myURL;
myURL = '/Flicktracks/';
var MyStatusMessage="";
function DisableStatus(){
window.status=MyStatusMessage;
return true
}
function RequestObject() {
	/*Create the HTTP Request Object Using the window check */
    var RequestObject;
    if (window.XMLHttpRequest) {
        try {
            RequestObject = new XMLHttpRequest();
        } catch(e) {
            RequestObject = false;
        }
    } 
    else if (window.ActiveXObject) {
        try {
            RequestObject = new ActiveXObject("Microsoft.XMLHTTP");
        } catch(e) {
            RequestObject = false;
        }
    } 
    return RequestObject;
}
var RequestHTTP = RequestObject();

function addDivToUpdate(DivID) {
    DivsToUpdate[DivsToUpdate.length] = DivID;
}

// Added method for updating all elements with ids that start with a given string
function updateGroup(prefix, action) { 
    for (var i=0; i<DivsToUpdate.length; i++) { 
        if (DivsToUpdate[i].substr(0, prefix.length) == prefix) {
            updateElement(DivsToUpdate[i], action);
        }
    }
}

function updateElement(ClassID, Session) { 
    if (Active == false) {
        Active = true;
        http.open('get', 'remoteCallPage.php?rnd=' + Math.random()*4 + '&ClassID=' + ClassID + '&Session=' + Session);
        http.onreadystatechange = doUpdate;
        http.send(null);
    }
    else {
        window.setTimeout("updateElement('" + el_id + "', '" + action + "')", 5);
    }
}

function handleAJAX(DivID,Action,QueryString,args){
	//DivToUpdate = DivID;
	 if (Active == false) {
		 DivToUpdate = DivID;
		//Dump args into their own variables
		var postString;
		postString = "";
		//alert(args.length);
		if (args){
		for (var i=0; i<args.length; i=i+2) { 
			//var args[i++] = args[i++]; 
			if (i==0){
				postString = postString + args[i] + "=" + args[i+1];
			} else {
				postString = postString + "&" + args[i] + "=" + args[i+1];
			}
//			alert(i);
		}
		}
		//alert (postString);
		//Deteremine what to do by action - then apply to div.
		//alert(Action);
		switch (Action){
			//Trackulator
			case "Update Session Variable":							
				RequestHTTP.open('post', myURL+'SetSessionVar.php');		    	  
    	    	RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.send(postString);
				RequestHTTP.onreadystatechange	= updateDiv;	
				 Active = true;
				break;			
			case "Update Soundtrack Calculator":								
				RequestHTTP.open('post', myURL+'GetSoundtrackCalculatorArray.php');		    	  
    	    	RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.send(postString);
				RequestHTTP.onreadystatechange	= updateDiv;	
				HideDiv('AjaxDiv');		
				PopDiv('AjaxLoadingDiv');		
				 Active = true;
				//RequestHTTP.send(null);
				break;
			// Flick Wiki
			case "Modify FlickWiki":
				//alert('GetHowHeard.php?rnd=' + Math.random()*4 + '&' +QueryString);
	    	    RequestHTTP.open('get',myURL+'GetFlickWiki.php?rnd=' + Math.random()*4 + '&' +QueryString);
    	  	  	RequestHTTP.onreadystatechange = updateDiv;
        		RequestHTTP.send(null);
				 Active = true;
			break;
			case "Update FlickWiki":				
				RequestHTTP.open('post', myURL+'GetFlickWiki.php');		    	  
    	    	RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.send(postString);
				RequestHTTP.onreadystatechange	= updateDiv;
        	RequestHTTP.send(null);
			 Active = true;
			break;
			case "Login User":
				//alert(postString);
	    	   RequestHTTP.open('post', myURL + 'GetAccount.php');		
				RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.send(postString);
				RequestHTTP.onreadystatechange	= updateDiv;
				 Active = true;
			break;												
			case "Get How Heard":
				//alert('GetHowHeard.php?rnd=' + Math.random()*4 + '&' +QueryString);
	    	    RequestHTTP.open('get',myURL+'GetHowHeard.php?rnd=' + Math.random()*4 + '&' +QueryString);
    	    	RequestHTTP.onreadystatechange = updateDiv;
        	RequestHTTP.send(null);
			 Active = true;
			break;
			case "Get Matching Tracks":
				//alert('got here');
				RequestHTTP.open('post', myURL+'GetMatching.php');		
				RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.send(postString);
				RequestHTTP.onreadystatechange	= updateDiv;
				 Active = true;
				break;
			//Updating functions
			case "Add Track":
				//alert(QueryString);
	    	    RequestHTTP.open('get',myURL+'AddToCart.php?rnd=' + Math.random()*4 + '&' +QueryString,true);
    	    	RequestHTTP.onreadystatechange = UpdateCartWrapper;
        		RequestHTTP.send(null);
		//		updateCostCalculator();
		 Active = true;
			break;
			case "Save Pick List":
				//alert('GetHowHeard.php?rnd=' + Math.random()*4 + '&' +QueryString);
	    	    RequestHTTP.open('get',myURL+'GetSavePickList.php?rnd=' + Math.random()*4 + '&' +QueryString);
    	  	  	RequestHTTP.onreadystatechange = updateDiv;
        		RequestHTTP.send(null);
				 Active = true;
			break;
			case "Update Cart":
			//	alert('Got To Update Cart');
			//RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.open('get', myURL+'GetCart.php?rnd=' + Math.random()*4 + '&' +QueryString);		
				
				RequestHTTP.onreadystatechange = UpdateLicenseTypesWrapper;
        		RequestHTTP.send(null);				
				 Active = true;
			break;
			case "Update License Types":
			//	alert('Got To Update Licenses');
				RequestHTTP.open('get', myURL+'GetCostCalculator.php?rnd=' + Math.random()*4 + '&' +QueryString);		
				//RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.onreadystatechange = UpdateLicenseTypeOptionsWrapper;
        		RequestHTTP.send(null);				
				 Active = true;
			break;
			case "Update License Type Options":
				//alert('Got To Update License Types');
				RequestHTTP.open('get', myURL+'GetCostCalculatorLicense.php?rnd=' + Math.random()*4 + '&' +QueryString);		
				//RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.onreadystatechange = RefreshCartWrapper;
        		RequestHTTP.send(null);				
				 Active = true;
			break;
			
			case "Refresh Cart":
				//alert('got here');
				RequestHTTP.open('post', myURL+'GetCart.php');		
				RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.send(postString);
				RequestHTTP.onreadystatechange	= updateDiv;
				 Active = true;
			break;
			case "Refresh License Type":
				//alert('got here');
				RequestHTTP.open('post', myURL+'GetCostCalculator.php');		
				RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.send(postString);
				RequestHTTP.onreadystatechange	= updateCostCalcDiv;
				 Active = true;
			break;
			case "Get License Type":
				//alert(QueryString);
				RequestHTTP.open('get', myURL+'GetCostCalculator.php?rnd=' + Math.random()*4 + '&' +QueryString);		
				//RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.onreadystatechange = updateCostCalcDiv;
        		RequestHTTP.send(null);
				 Active = true;
				break;
			case "Get License Type Options":
				//alert('got here');
				//alert(QueryString);
				RequestHTTP.open('get', myURL+'GetCostCalculatorLicense.php?rnd=' + Math.random()*4 + '&' +QueryString);		
				//RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.onreadystatechange = updateLicenseTypeDiv;
        		RequestHTTP.send(null);
				 Active = true;
				break;
			case "Play Track":
	    	    RequestHTTP.open('get', myURL+'GetTrackPlayer.php?rnd=' + Math.random()*4 + '&' +QueryString);
    	    	RequestHTTP.onreadystatechange = updateDiv;
        		RequestHTTP.send(null);
				 Active = true;
			break;
			
			// Artist backend Options
			case "Add To Roster":
	    	    RequestHTTP.open('post', 'GetOwnerDiv.php');		
				RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.send(postString);
				RequestHTTP.onreadystatechange	= updateDiv;
			break;
			case "Delete From Roster":
	    	    RequestHTTP.open('post', 'GetOwnerDiv.php');		
				RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.send(QueryString);
				RequestHTTP.onreadystatechange	= updateDiv;
			break;
			case "Track Add To Roster":
	    	    RequestHTTP.open('post', 'AddToRoster.php');		
				RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.send(postString);
				RequestHTTP.onreadystatechange	= updateTrackOwnerDivs;
			break;
			case "Manage Track Owners":
	    	    RequestHTTP.open('post', 'GetTrackDivOwner.php');		
				RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.send(postString);
				RequestHTTP.onreadystatechange	= updateDiv;
			break;
			case "Manage Additional Track Owners":
	    	    RequestHTTP.open('post', 'GetTrackDivAdditionalOwner.php');		
				RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.send(postString);
				RequestHTTP.onreadystatechange	= updateDiv;
			break;
			case "Manage Track Writers":
	    	    RequestHTTP.open('post', 'GetTrackDivWriter.php');		
				RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.send(postString);
				RequestHTTP.onreadystatechange	= updateDiv;
			break;
			case "Manage Track Publishers":
	    	    RequestHTTP.open('post', 'GetTrackDivPublisher.php');		
				RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.send(postString);
				RequestHTTP.onreadystatechange	= updateDiv;
			break;
			case "Manage Option Keywords":
	    	    RequestHTTP.open('post', 'GetOptionKeywordDiv.php');		
				RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.send(postString);
				RequestHTTP.onreadystatechange	= updateDiv;
			break;
			case "Manage Track Keywords":
	    	    RequestHTTP.open('post', 'GetTrackKeywordDiv.php');		
				RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.send(postString);
				RequestHTTP.onreadystatechange	= updateDiv;
			break;
			case "Manage Track Keywords Defaults":
	    	    RequestHTTP.open('post', 'GetTrackKeywordDivDefaults.php');		
				RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.send(postString);
				RequestHTTP.onreadystatechange	= updateDiv;
			break;
			case "Manage Track Exclusions":
	    	    RequestHTTP.open('post', 'GetTrackDivExclusions.php');		
				RequestHTTP.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
				RequestHTTP.send(postString);
				RequestHTTP.onreadystatechange	= updateDiv;
			break;
			default :
			alert("Invalid Request");
		}
		
	//document.getElementById(DivToUpdate).innerHTML = "...loading<br>";//+document.getElementById(DivToUpdate).innerHTML;
		
	 } else {
		// alert(DivID);
		 window.setTimeout("handleAJAX('" + DivID + "', '" + Action + "','"+ QueryString +"'," + args + " )", 1);
	 }
}
// ----
// Cursor Functions
// ----
// Changes the cursor to an hourglass
function cursor_wait() {
document.body.style.cursor = 'wait';
}

// Returns the cursor to the default pointer
function cursor_clear() {
document.body.style.cursor = 'default';
}

function updateDiv(){

	//Loading = 1; Loaded =4

	var tempArray = new Array();
	
	   if (RequestHTTP.readyState == 4) {
		   
	   		var response = RequestHTTP.responseText;
			document.getElementById(DivToUpdate).innerHTML = response;
			tempArray = ajaxQueue.shift();
			Active = false;
			// cursor_clear();
			HideDiv('AjaxLoadingDiv');
			PopDiv('AjaxDiv');			
			handleAjaxQueue();
	   } else {
	   
	  // if (RequestHTTP.readyState == 1) {
  		//document.getElementById(DivToUpdate).innerHTML = '...loading...';
		//cursor_wait();
		HideDiv('AjaxDiv');		
		PopDiv('AjaxLoadingDiv');		
	  // } else {
 	   //document.getElementById(DivToUpdate).innerHTML = '';;
	   }
	   
}
function updateDivDoFunction(myFunction){
	//alert('got yo function');
	var tempArray = new Array();
	
	   if (RequestHTTP.readyState == 4) {
		   
	   		var response = RequestHTTP.responseText;
			
			document.getElementById(DivToUpdate).innerHTML = response;
			tempArray = ajaxQueue.shift();
			
			Active = false;
			HideDiv('AjaxLoadingDiv');
			PopDiv('AjaxDiv');
			//cursor_clear();
			handleAjaxQueue();
			
			myFunction();
			
	   }
	   if (RequestHTTP.readyState == 1) {  		
		//cursor_wait();
		HideDiv('AjaxDiv');
		PopDiv('AjaxLoadingDiv');
		
	   }
	   
}

function updateCostCalcDiv(){
	var tempArray = new Array();
	   if (RequestHTTP.readyState == 4) {
		   
	   		var response = RequestHTTP.responseText;
			document.getElementById(DivToUpdate).innerHTML = response;
			tempArray = ajaxQueue.shift();
			
			Active = false;
			//cursor_clear();
			HideDiv('AjaxLoadingDiv');
			PopDiv('AjaxDiv');
			handleAjaxQueue();
			updateCostCalculatorLicense();
			
	   }
	     if (RequestHTTP.readyState == 1) {  		
		//cursor_wait();
		HideDiv('AjaxDiv');
		PopDiv('AjaxLoadingDiv');
	   }
}

function updateCartDiv(){
	var tempArray = new Array();
	   if (RequestHTTP.readyState == 4) {
		   
	   		var response = RequestHTTP.responseText;
			document.getElementById(DivToUpdate).innerHTML = response;
			tempArray = ajaxQueue.shift();
			
			Active = false;
//			cursor_clear();
			PopDiv('AjaxDiv');
			HideDiv('AjaxLoadingDiv');
			handleAjaxQueue();
			RefreshCostCalc();
			
	   }
	     if (RequestHTTP.readyState == 1) {  		
  		 HideDiv('AjaxDiv');
		 PopDiv('AjaxLoadingDiv');
//		cursor_wait();
	   }
}
function updateLicenseTypeDiv(){
	var tempArray = new Array();
	   if (RequestHTTP.readyState == 4) {
		   
	   		var response = RequestHTTP.responseText;
			document.getElementById(DivToUpdate).innerHTML = response;
			tempArray = ajaxQueue.shift();
			
			Active = false;
			//cursor_clear();
			HideDiv('AjaxLoadingDiv');
			PopDiv('AjaxDiv');
			handleAjaxQueue();
			RefreshCart();
			
	   }
	     if (RequestHTTP.readyState == 1) {  		
   		 HideDiv('AjaxDiv');		
		 PopDiv('AjaxLoadingDiv');
//		cursor_wait();
	   }
}

function RefreshCart(){	
 	// alert('Refreshing Cart');
	 addToAJAXQueue('TracksToLicense','Refresh Cart','');
	 handleAjaxQueue();
}
function RefreshCartWrapper(){
	 updateDivDoFunction(RefreshCart);
}
function RefreshCostCalc(){	
  	//alert('refreshing Calc');
	 addToAJAXQueue('CostCalculator','Refresh License Type','');
 	 handleAjaxQueue();
}
function UpdateCart(){
	 //alert('Calling Update Cart');
	 addToAJAXQueue('TracksToLicense','Update Cart','');
 	 handleAjaxQueue();	
}
function UpdateCartWrapper(){
	 updateDivDoFunction(UpdateCart);
}
function UpdateLicenseTypes(){
	 //alert('Calling Update License Types');
	 if (document.getElementById('CurrentOrderDetailID').value > 0) {
	 addToAJAXQueue('CostCalculator','Update License Types','OrderDetailsID='+document.getElementById('CurrentOrderDetailID').value);
	 } else {
	 addToAJAXQueue('CostCalculator','Update License Types','');		 
	 }
	 
 	 handleAjaxQueue();	
}
function UpdateLicenseTypesWrapper(){
	 updateDivDoFunction(UpdateLicenseTypes);
}
function UpdateLicenseTypeOptions(){
	// alert('Calling Update Licens Type Options');
	 if (document.forms['LicenseTypeSelectForm']) {
	 addToAJAXQueue('CostCalculatorLicense','Update License Type Options','OrderID='+document.forms['LicenseTypeSelectForm'].OrderID.value+'&OrderDetailsID='+document.forms['LicenseTypeSelectForm'].OrderDetailsID.value+'&LicenseTypeID='+document.forms['LicenseTypeSelectForm'].LicenseTypeSelect.value);
	 } else {
		 addToAJAXQueue('CostCalculatorLicense','Update License Type Options','');
	 }
 	 handleAjaxQueue();	
}
function UpdateLicenseTypeOptionsWrapper(){
	 updateDivDoFunction(UpdateLicenseTypeOptions);
}
function updateTrackOwnerDivs(){
	var tempArray = new Array();
	   if (RequestHTTP.readyState == 4) {
	   		var error = RequestHTTP.responseText;
			tempArray = ajaxQueue.shift();
			
			if (error == ""){
				document.getElementById('FirstName').value='';
				document.getElementById('LastName').value='';
				document.getElementById('OrgName').value='';
				document.getElementById('RightsOrg').selectedIndex=0;
				postForm('ManageTrackOwnersForm','TrackOwnersDiv','Manage Track Owners');
				postForm('ManageTrackAdditionalOwnersForm','TrackAddOwnersDiv','Manage Additional Track Owners');
				postForm('ManageTrackPublisherForm','TrackPublisherDiv','Manage Track Publishers');
				postForm('ManageTrackWriterForm','TrackWriterDiv','Manage Track Writers');
							
			handleAjaxQueue();
			}
			Active = false;
			
	   }
}
function postForm(myForm,myDiv,myAction){
	if (Active==false){
		DivToUpdate = myDiv;
		var myArgs = new Array(); 
		var myTempArray = new Array();
		var j = 0;
		var k = 0;
		var TempActionArray = new Array();
		for(i=0; i<document.forms[myForm].elements.length; i++){
			
			myArgs[j++] = document.forms[myForm].elements[i].name;
			if (document.forms[myForm].elements[i].options){
				myTempArray= new Array();
				 for (var k = 0; k < document.forms[myForm].elements[i].options.length; k++)
					if (document.forms[myForm].elements[i].options[k].selected){
						myTempArray[myTempArray.length] = document.forms[myForm].elements[i].options[k].value;
					}
				myArgs[j++]=myTempArray;
			} else {
			myArgs[j++] = document.forms[myForm].elements[i].value;
			}
			//alert("The field name is: " + myArgs[j-2] + " and it’s value is: " + myArgs[j-1]);
		}
	//	handleAJAX(myDiv,myAction,'',myArgs);
		addToAJAXQueue(myDiv,myAction,'',myArgs);
		handleAjaxQueue();
	}
}

function addToAJAXQueue(div,action,query,args){
	var ta = new Array();
	ta['div'] = div;
	ta['action'] = action;
	ta['query'] = query;
	ta['args'] = args;
	numQueued = ajaxQueue.push(ta);
	//checkQueue();
}
function handleAjaxQueue(){
	
	if (ajaxQueue.length>0){		
		var myArray = new Array();
		myArray = ajaxQueue[0];
		handleAJAX(myArray['div'],myArray['action'],myArray['query'],myArray['args']);		
	}
}
function checkQueue(){	
	for (var i=0;i<numQueued;i++){
		
		alert(ajaxQueue[i]['div'] + " | " + ajaxQueue[i]['action'] + " | " + ajaxQueue[i]['query'] + " | " + ajaxQueue[i]['args']);
		
	}
		   
}
var ajaxQueue = new Array();
var numQueued;
function updateCostCalculatorLicense(){
//alert('Updating License Options from Ajax');	
//alert(document.forms['LicenseTypeSelectForm'].LicenseTypeSelect.selectedIndex + ":" + document.forms['LicenseTypeSelectForm'].OrderID.value + " :" + document.forms['LicenseTypeSelectForm'].OrderDetailsID.value );
if(document.forms['LicenseTypeSelectForm'].LicenseTypeSelect.selectedIndex>-1) { addToAJAXQueue('CostCalculatorLicense','Get License Type Options','OrderID='+document.forms['LicenseTypeSelectForm'].OrderID.value+'&OrderDetailsID='+document.forms['LicenseTypeSelectForm'].OrderDetailsID.value+'&LicenseTypeID='+document.forms['LicenseTypeSelectForm'].LicenseTypeSelect.value);handleAjaxQueue();}

}

function updateCostCalculator(){
 //alert('Updating Cost Calcultor from Ajax');	
 addToAJAXQueue('CostCalculator','Get License Type','OrderDetailsID='+getRadioValue(document.getElementsByName('SelectedPick')));
 handleAjaxQueue();
}
function getRadioValue(which){
var j;
j=which.length;
if (which.length>1){
	for (i=0; i<j; i++){
		if(which[i].checked){ 
		var number = which[i].value;
		}
	}
} else{
var number = which.value;
}
alert(number);
	return number;
}
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

