var panel = new Array();
//panel[0] = new Panel(0,'search_types');
panel[0] = new Panel(0,'filter');
panel[1] = new Panel(1,'results_panel');
panel[2] = new Panel(2,'pagination');
panel[3] = new Panel(3,'detail');
panel[4] = new Panel(4,'register');
panel[5] = new Panel(5,'browser');

var step = new Array();
step[0] = 'step1';
step[1] = 'step2';

//Set a firstload var to skip the first getpanel request hitting google:
var firstLoad = true;

function getUniqueToken(url) {
	var dt = new Date();
	var dtString = ''+dt.getFullYear()+dt.getMonth()+dt.getDate()+dt.getHours()+dt.getMinutes()+dt.getMilliseconds();
	//check for cookie - if disabled then append request.nocookies
	dataUrl = url + '&dtm='+dtString;
	return dataUrl;
}

function hidePanels () {
	var i = 0;
	for (i=0;i<panel.length;i++) {
		var targetPanel = document.getElementById(panel[i].panel_name);
		if (targetPanel) {
			targetPanel.className = "popHide";
		}
	}
}

function stepHighlight (stepID) {
	var targetStep;
	var targetStepID;
	
	// reset all steps to not selected
	for (i=0;i<step.length;i++){
		targetStep = document.getElementById(step[i]);
		if (targetStep) {
			targetStep.className = '';
		}
	}
	
	//select the current step
	targetStep = document.getElementById(stepID);
	if (targetStep) {
		targetStep.className = targetStep.className + ' here';
	}

	// clear the onclick events for the anchors
	var targetStepAnchor = document.getElementById('step1A');
	if (targetStepAnchor) {
		targetStepAnchor.onclick = function() {return false;};
	}
	targetStepAnchor = document.getElementById('step2A');
	if (targetStepAnchor) {
		targetStepAnchor.onclick = function() {return false;};
	}
	
	// get the currently selected cause if there is one
	hidCauseObj = document.getElementById('causeID');
	var cause_ID = "";
	if (hidCauseObj) {
		 cause_ID = hidCauseObj.value;
	}
	
	switch(stepID){
		case "step1": {
			if (cause_ID != "") {
				targetStepAnchor = document.getElementById('step2A');
				if (targetStepAnchor) {
					targetStepAnchor.onclick = function() {return getRegisterPanel(4,cause_ID)};
				}
			}
			break;
		}
		case "step2": {
			if (cause_ID != "") {
				targetStepAnchor = document.getElementById('step1A');
				if (targetStepAnchor) {
					targetStepAnchor.onclick = function() {return showBrowser()};
				}
			}
			else {
				targetStepAnchor = document.getElementById('step1A');
				if (targetStepAnchor) {
					targetStepAnchor.onclick = function() {return resetSearchResults()};
				}
				
			}
			break;
		}
		default: {
			break;
		}
}
}

/* Panel object to control which panels get refreshed */
function Panel(pid,p_name) {
	this.panel_name = p_name;
	this.getPanel = function (targetNumber,StateID,CauseTypeID,RecentCategoryID,Keyword,PageNumber) {
		var targetPanelId = panel[targetNumber].panel_name;
		var targetPanel = document.getElementById(targetPanelId);
		
		var paginationPanelId = panel[targetNumber+1].panel_name;
		var paginationPanel = document.getElementById(paginationPanelId);
		
		if (targetPanel) {
			targetPanel.className = "popShow";
			targetPanel.innerHTML = '<div id="load">Loading...<br /><img src="dir_images/spinner.gif"></div>';
		}
		
		//Call the ajax function
		var url = 'dsp_panel.cfm?panel_number='+(targetNumber+1)+'&sid='+StateID+'&ctid='+CauseTypeID+'&rcid='+RecentCategoryID+'&kw='+Keyword+'&pn='+PageNumber;
		url = getUniqueToken(url);
		
		var params = ''; 
		handleSuccess = function(request,e) {
			targetPanel.innerHTML = request.responseText;
			
			//Pagination Div
			if (paginationPanel) {
				paginationPanel.className = "popShow";
			}
			url = 'dsp_panel.cfm?panel_number=3&sid='+StateID+'&ctid='+CauseTypeID+'&rcid='+RecentCategoryID+'&kw='+Keyword+'&pn='+PageNumber;
			url = getUniqueToken(url);
			
			var params = ''; 
			var ajax2 = new Ajax.Updater ( paginationPanelId, url, {method: 'get', parameters: params, onSuccess: handlePaginationSuccess, onFailure: reportError,  evalScripts:true} );
		}

		handlePaginationSuccess = function(request,e) {
			paginationPanel.innerHTML = request.responseText;
		}
		_uacct = mainacct;
		if (firstLoad == false) {
			pageTracker._trackPageview('/dsp_panel/panel_number/'+(targetNumber+1)+'/CauseType/'+lookupCauseTypeId(CauseTypeID)+'/Keyword/'+Keyword+'/StateID/'+lookupState(StateID)+'/PageNumber/'+PageNumber);
			pageTracker._trackPageview('/search_device/'+(CauseTypeID!=0?'c':'')+(StateID!=0?'s':'')+(Keyword.length>0?'k':''));
		} else {
			firstLoad = false;
		}
		var ajax = new Ajax.Updater ( targetPanelId, url, {method: 'get', parameters: params, onSuccess: handleSuccess, onFailure: reportError,  evalScripts:true} );
		return false;	
	}
}
function urlSafe(strIn) {
	var myRegex = new RegExp("[^a-zA-Z0-9]","g");
	return strIn.replace(myRegex, "_");
}
function lookupState(id) {
	var stateName = document.getElementById('cboState').options[id].innerHTML;
	return urlSafe(stateName);
}
function lookupCauseTypeId(id) {
	var causeTypeName = document.getElementById('cboType').options[id].innerHTML;
	return urlSafe(causeTypeName);
}
function showBrowser() {
	var targetPanelId;
	var targetPanel;
	
	// set the active step button
	stepHighlight('step1');
	
	// hide all panels
	for (var i=0;i<panel.length;i++) {
		targetPanelId = panel[i].panel_name;
		targetPanel = document.getElementById(targetPanelId);
		
		if (targetPanel) {
			targetPanel.className = "popHide";
			if (i==0 || i==1 || i==2 || i==5) {
				targetPanel.className = "clearfix popShow";
				if (i==0) {
					targetPanel.className = "clearfix filter";
				}					
			}
			else if (i!=4) {
				targetPanel.innerHTML = '';
			}
		}
	}
	
	return false;	
}

function getDetailPanel(targetNumber,CauseID) {
	var targetPanelId = panel[targetNumber].panel_name;
	var targetPanel = document.getElementById(targetPanelId);
	_uacct = mainacct;
	pageTracker._trackPageview('/dsp_panel/panel_number/getCauseDetail/CauseID/'+cause_ID);
	
	hidePanels();
	if (targetPanel) {
		targetPanel.className = "popShow";
		targetPanel.innerHTML = '<div id="load">Loading...<br /><img src="dir_images/spinner.gif"></div>';
	}
	
	// get the stored cause id
	var cause_ID = CauseID;
	if (cause_ID == -1) {
		var hidCauseObj = document.getElementById('causeID');
		if (hidCauseObj) {
			cause_ID = hidCauseObj.value;
		}
	}
	//Call the ajax function
	var url = 'dsp_panel.cfm?panel_number='+(targetNumber+1)+'&cid='+cause_ID;

	url = getUniqueToken(url);

	var params = ''; 
	handleSuccess = function(request,e) {
		targetPanel.innerHTML = request.responseText;
	}
	var ajax = new Ajax.Updater ( targetPanelId, 
		url, {method: 'get', parameters: params, onSuccess: handleSuccess, onFailure: reportError, evalScripts:true} );
	return false;	
}
function lookupCauseId(id) {
	var causeName = document.getElementById('cause'+id).innerHTML;
	return urlSafe(causeName);
}
function getRegisterPanel(targetNumber,CauseID) {
	var targetPanelId = panel[targetNumber].panel_name;
	var targetPanel = document.getElementById(targetPanelId);
	
	// persist the selected cause id
	var causeID = document.getElementById('causeID');
	if (causeID) {
		causeID.value = CauseID;
	}
	
	hidePanels();

	var targetControl = document.getElementById("regTitle");
	var params = ''; 
	handleSuccess = function(request,e) {
		targetControl.innerHTML = request.responseText;
	}
	if (targetControl) {
		//Call the ajax function
		var url = 'dsp_panel.cfm?panel_number=5&cid='+CauseID;
		_uacct = mainacct;
		pageTracker._trackPageview('/dsp_panel/panel_number/register/CauseID/'+CauseID);
		var ajax = new Ajax.Updater ( "regTitle", 
			url, {method: 'get', parameters: params, onSuccess: handleSuccess, onFailure: reportError, evalScripts:true} );
	}
	
	if (targetPanel) {
		targetPanel.className = "popShow";
		stepHighlight('step2');
	}
	
	return false;	
}

function resetSearchResults() {
	var targetPanelId;
	var targetPanel;
	
	//reset the hidden cause id
	var hidCauseObj = document.getElementById('causeID');
	if (hidCauseObj) {
		hidCauseObj.value = "";
	}

	//set the active step button
	stepHighlight('step1');
	
	for (var i=0;i<panel.length;i++) {
		targetPanelId = panel[i].panel_name;
		targetPanel = document.getElementById(targetPanelId);
		
		if (targetPanel) {
			targetPanel.className = "popHide";
			if (i==0 || i==1 || i==2 || i==5) {
				targetPanel.className = "clearfix popShow";
				if (i==0) {
					targetPanel.className = "clearfix filter";
				}					
				if (i==1 || 1==2) {
					targetPanel.innerHTML = '';
				}

			}
			else if (i!=4) {
				targetPanel.innerHTML = '';
			}
		}
	}

	//Reset the search panel
	filterPanelId = panel[0].panel_name;
	filterPanel = document.getElementById(filterPanelId);
	
	resultsPanelId = panel[1].panel_name;
	resultsPanel = document.getElementById(resultsPanelId);

	var url = 'dsp_panel.cfm?panel_number=1';

	url = getUniqueToken(url);

	var params = ''; 
	handleSuccess = function(request,e) {
		filterPanel.innerHTML = request.responseText;
		panel[0].getPanel(1,0,0,0,'',1)
	}
	_uacct = mainacct;
	pageTracker._trackPageview('/dsp_panel/panel_number/1/resetSearchResults');
	var ajax = new Ajax.Updater ( filterPanelId, 
		url, {method: 'get', parameters: params, onSuccess: handleSuccess, onFailure: reportError, evalScripts:true} );
	return false;	
}

/* Message to report if there is an error with the AJAX request */
function reportError(request) {
	alert("Error");
}	
function regBeforeSelect() {
	var msg="Please tell us where to send the donations first!";
	msg = msg + "\n\nYou will need to complete step 1 (Find and select your cause) before proceeding. ";
	msg = msg + "You can choose from thousands of organizations on our list, or you can add a new cause to iGive.com. ";
	msg = msg + "\n\nLarge or small, your favorite cause is welcome here!  And remember, you are free to change your cause at any time in the future.";
	alert(msg);
	_uacct = mainacct;
	pageTracker._trackPageview('/errors/step 2 clicked');
	return false;
}