
function serverCallback( action, tab, param ){
	if(action == "load"){
		appManager.getTabByName(tab).html = param.content;
		if(param.values){
			appManager.getTabByName(tab).values = param.values;
			appManager.getTabByName(tab).needsDBParse = true;
		}else{
			appManager.getTabByName(tab).values = getFormValues(tab);
		}
		_setTabContent(tab);
	}else if(action == "delete"){
		init();
		setTimeout("showMessage('DELETED', 'Your application has been removed from the system.');", 200 );
	}else if(action == "remind"){
		init();
		setTimeout("showMessage('EMAIL REMINDER', '" + param.content + "');", 200 );
	}else if(action == "save"){
		appManager.getTabByName(tab).saved = true;
		appManager.getTabByName(tab).dirty = false;
		appManager.getTabByName(tab).values = getFormValues(tab);
		
		if(param){
			_showTab(param);
		}else{
			var SSID = appManager.SESSION_ID;
			init();
			setTimeout("showMessage('SAVED', 'Your application has been saved for later. <br/>To resume it, you will need to enter your personal code. <br/>Please keep this in a safe place. <br/><br/>Personal code: <strong>" + SSID + "</strong>');", 200 );
		}		
	}else{
		showMessage("ERROR", "unknown action");
	}
}

function serverLoad(tab){
	writeLog( "serverLoad('" + tab + "')");
	_ajaxGetRequest( "execute.aspx?action=load&page=" + tab + "&id=" + appManager.SESSION_ID , "serverCallback( 'load', '" + tab + "', responseObject );" );
}

function serverDelete(){
	_ajaxGetRequest( "execute.aspx?action=delete&id=" + appManager.SESSION_ID , "writeLog( 'serverDelete: ' + responseObject.message );serverCallback( 'delete', null, null );" );
}

function serverRemind(email){
	_ajaxGetRequest( "execute.aspx?action=remind&email=" + email , "writeLog( 'serverRemind: ' + responseObject.message );serverCallback( 'remind', null, responseObject );" );
}

function serverSave(navto){
	var tab = appManager.getCurrentTabName();
	var logMsg = "serverSave( " + tab + ( (navto) ? (", " + navto) : "" ) + " )";
	
	writeLog( logMsg );
	var sIDParam = (appManager.SESSION_ID) ? ( "&id=" + appManager.SESSION_ID ) : "";
	var postData = "action=save&page=" + tab + sIDParam + "&" + getFormValuesString(tab);
		
	//showMessage( "DEBUG", postData );
	
	var funcSnip = "";
	funcSnip    += "if(!appManager.SESSION_ID && responseObject.guid){";
	funcSnip    += "  appManager.SESSION_ID=responseObject.guid;";
	funcSnip    += "};";
	if(navto)
		funcSnip += "serverCallback( 'save', '" + tab + "', '" + navto + "');";
	else
		funcSnip += "serverCallback( 'save', '" + tab + "');";

	_ajaxPostRequest( "execute.aspx", postData, funcSnip );
}

function saveWork(navto){
	var errorMessage = appManager.getCurrentTab().validate();
	if( errorMessage == null ){
		if(navto)
			serverSave(navto);
		else
			serverSave();
	}else{
		showMessage( "ERROR", errorMessage );
	}
}

function deleteWork(){
	writeLog( "serverDelete()");
	serverDelete();
}


function clickTab( what ){
	if( document.getElementById('nav_' + what).className != "inactiveTab" )
		return;
	_showTab(what);
}

function clickButton(elem, what){
	if(elem.className != "buttonImage" )
		return;
	
	if(what == "delete"){
		var buttons = "<img src=\"img/cancel.gif\" class=\"buttonImage\" border=\"0\" alt=\"Cancel\" onclick=\"hideMessage()\" />";
		buttons += "&nbsp;<img src=\"img/yes.gif\" class=\"buttonImage\" border=\"0\" alt=\"Yes\" onclick=\"hideMessage();deleteWork();\" />";
		showMessage("DELETE", "Delete your entire application from the system?", buttons);
	}else if(what == "start"){
		appManager.SESSION_ID = "";
		_showTab( appManager.getTabName(1) );
	}else if(what == "resume"){
		var mySSID = document.getElementById('ssid');
		if( mySSID && mySSID.value ){
			appManager.SESSION_ID = mySSID.value.toUpperCase();
			_showTab( appManager.getTabName(1) );
		}else{
			showMessage("CODE REQUIRED", "To resume an applicaiton, you must enter your personal code.");
		}
		
	}else if(what == "remind"){
		var myEmail = document.getElementById('email');
		if( myEmail && myEmail.value ){
			serverRemind(myEmail.value);
		}else{
			showMessage("EMAIL REQUIRED", "Please enter your email address.");
		}
		
	}else if(what == "save"){
		saveWork();
	}else if(what == "next"){
		if( !appManager.getCurrentTab().saved || appManager.getCurrentTab().dirty )
			saveWork(appManager.getTabName(appManager.CURRENT_TAB+1));
		else
			_showTab(appManager.getTabName(appManager.CURRENT_TAB+1));
	}else if(what == "previous"){
		_showTab(appManager.getTabName(appManager.CURRENT_TAB-1));
	}
	return false;
}

function _showTab(what){
	writeLog( "_showTab('" + what + "')");
	
	var newTabIndex = appManager.getTabIndex(what);
	if( 
		(newTabIndex > 0 && newTabIndex == appManager.CURRENT_TAB) ||
		( (newTabIndex > appManager.TABS.length - 1) || newTabIndex < 0 )
	){
		showMessage("ERROR", "Can't view that tab: " + what);
		return;
	}
	
	if( appManager.CURRENT_TAB > 0 && appManager.getCurrentTab().dirty ){
		var buttons = "<img src=\"img/cancel.gif\" class=\"buttonImage\" border=\"0\" alt=\"Cancel\" onclick=\"hideMessage()\" />";
		buttons += "&nbsp;<img src=\"img/no.gif\" class=\"buttonImage\" border=\"0\" alt=\"No\" onclick=\"hideMessage();appManager.getCurrentTab().dirty = false;_showTab('" + what + "');\" />";
		buttons += "&nbsp;<img src=\"img/yes.gif\" class=\"buttonImage\" border=\"0\" alt=\"Yes\" onclick=\"hideMessage();saveWork('" + what + "');\" />";
		showMessage("Save Changes?", "Save changes to this page?", buttons);
	}else{
		if( appManager.getTabByName(what).html ){
			_setTabContent(what);
		}else{
			serverLoad(what);
		}
	}
}

function _setTabContent(tName){
	appManager.CURRENT_TAB = appManager.getTabIndex(tName);
	document.getElementById("activeTab").innerHTML = appManager.getCurrentTab().html;
	setTimeout( "prepareFormFields('" + tName + "')", 100 );
}

function updateNavigation(){
	writeLog( "updateNavigation(): " + appManager.getCurrentTabName() + ": " + ((appManager.getCurrentTab().saved) ? "" : "not ") + "saved" + ( (appManager.getCurrentTab().dirty) ? " (modified)" : "" ));
	if(appManager.CURRENT_TAB == 0 || appManager.CURRENT_TAB == appManager.TABS.length-1){
		disableNavigation();
	}else{
		updateButtons();
		updateBreadcrumbs();
	}
}

function formFieldChanged(){
	var error = null;
	if(this.validate)
		error = this.validate();
	if(error){
		this.className = "validationError";
	}else{
		this.className = "";
	}
	appManager.getCurrentTab().dirty = true;
	updateNavigation();
}

function disableNavigation(){
	document.getElementById("nextButton").className = "disabledButton";
	document.getElementById("prevButton").className = "disabledButton";
	document.getElementById("deleteButton").className = "disabledButton";
	document.getElementById("saveButton").className = "disabledButton";
		
	for(var i=0;i<appManager.TABS.length;i++){
		var theLink = document.getElementById('nav_' + appManager.getTabName(i));
		if( i != appManager.CURRENT_TAB ) {
			theLink.className = "disabledTab";
		}else{
			theLink.className = "activeTab";
		}
	}
}

function updateButtons(){
 	if(appManager.CURRENT_TAB > appManager.TABS.length - 3)
		document.getElementById("nextButton").className = "disabledButton";
	else
		document.getElementById("nextButton").className = "buttonImage";

 	if(appManager.CURRENT_TAB < 2 )
		document.getElementById("prevButton").className = "disabledButton";
	else
		document.getElementById("prevButton").className = "buttonImage";
	
	if( appManager.SESSION_ID == "" )
		document.getElementById("deleteButton").className = "disabledButton";
	else
		document.getElementById("deleteButton").className = "buttonImage";

	document.getElementById("saveButton").className = "buttonImage";
}

function updateBreadcrumbs(){
	for(var i=0;i<appManager.TABS.length;i++){
		var theLink = document.getElementById('nav_' + appManager.getTabName(i));
		if( i != appManager.CURRENT_TAB ) {
			if( i == 0 || i == appManager.TABS.length - 1 || i > appManager.highestCompletedTab() + 1 ){
				theLink.className = "disabledTab";
			}else{
				theLink.className = "inactiveTab";
			}
		}else{
			theLink.className = "activeTab";
		}
	}
}

function writeLog( msg){
	var logObj = document.getElementById("logDiv");
	logObj.innerHTML = logObj.innerHTML + "<br/>\n" + msg;
	logObj.scrollTop = logObj.scrollHeight;
}

function toggleLog( elem ){
	if( elem.innerHTML == "show debug log"){
		elem.innerHTML = "hide debug log";
		document.getElementById('logDiv').style.display='';
	}else{
		elem.innerHTML = "show debug log";
		document.getElementById('logDiv').style.display='none';
	}
	
}

function formSubmit(){
	var fFunc =  appManager.getCurrentTab().submitter;
	if( typeof(fFunc) == 'function' )
		return fFunc();
	
	return false;
}

