﻿//***********************************************************************************************************
//*																											*
//*										Library of Form Related Functions      								*
//*										Developed by Brevetoxin												*
//*												 4/30/2008													*
//*																											*
//***********************************************************************************************************
var formPath = "http://www.newstudentdriver.com/admin/";
var formCreator = formPath+"formCreator.php";
var formReceiver = formPath+"formReceiver.php";


//*********************************************************************************************************************
//*generateForm - Creates a form based on the form's name and an optional id with which to fill the values  		  *
//*********************************************************************************************************************
function generateForm(formDiv,name,id)
{
	var url=formCreator;
	var params="name"+"="+name+"&id="+id;
 	var req = new Ajax.Request(url, {
		method: 'post',
		parameters: params,
		onSuccess: function(response){
//			alert(response.responseText);
			document.getElementById(formDiv).innerHTML = response.responseText;
			formHooks(name);
			},
		onFailure: function(){alert("Something went wrong.  Please try again later.")}
	});
}

//*********************************************************************************************************************
//*generatePopForm - Creates a pop-up form based on the form's name and an optional id with which to fill the values  *
//*********************************************************************************************************************
function generatePopForm(formDiv,name,id)
{
//	var url="http://www.briandarrow.com/runbuddy/admin/formCreator.php";
	var url=formCreator;
	var params="name"+"="+name+"&id="+id;
 	var req = new Ajax.Request(url, {
		method: 'post',
		parameters: params,
		onSuccess: function(response){
			document.getElementById(formDiv).innerHTML = response.responseText;
			document.getElementById(formDiv).style.display="none";
			Effect.Combo(formDiv);
			formHooks(name);
			},
		onFailure: function(){alert("Something went wrong.  Please try again later.")}
	});
}
			
//***********************************************************************************************************
//*handleFormSuccess - Performs specified set of instructions to the form and it's surrounding doc			*
//***********************************************************************************************************
function handleFormSuccess(form,instruct)
{
	parPos = instruct.search(/\(/);

	if (parPos >= 0)
	{
		instructParam = instruct.substring(parPos+1,instruct.length-1);
		instruct = instruct.substring(0,parPos);
	}
	formDiv = form.parentNode;
	form.reset();
	switch(instruct){
		case "closeAndUpdateField":
			seriesDiv = document.getElementById(instructParam);
			var url = actionReceiver;
			params = 'action=updateField&field='+instructParam;
			var req = new Ajax.Request(url, {
			method: 'post',
			parameters: params,
			onSuccess: function(response){
				var json = response.responseText.evalJSON();
				if (json.code == 1)
				{
					document.getElementById(instructParam).innerHTML = json.fieldContents;
				    var evt = document.createEvent("MouseEvents");
					evt.initMouseEvent("click", true, true, window,0, 0, 0, 0, 0, false, false, false, false, 0, null);
					document.getElementById("popFormNav").dispatchEvent(evt);
					for(i=0;i<document.forms.length;i++)
					{
						for(j=0;j<document.forms[i].elements.length;j++)
						{
							if (document.forms[i].elements[j].name == instructParam)
							{
								document.forms[i].elements[j].onchange();
							}
						}
					} 
					return true;
				}
				else
				{
					return false;
				}
			},
			onFailure: function(){alert("it didn't work!")}
			});
			break;
			
		case "goodbye+refresh":
			Effect.Combo(form.parentNode);
			refreshList(listObj);
			break;
			
		case "leaveMessage":
			message = document.getElementById(form.name+"_errorMessage").cloneNode(true);
//			alert (message.innerHTML);
			myParent = form.parentNode;
			myParent.innerHTML = "";
			myParent.appendChild(message);
			break;

		case "redirect":
			window.location=instructParam;
			break;
	}
}

//***********************************************************************************************************
//*sendForm - sends the form asyncronously to a file and retrieves feedback via JSON.  REQUIRES Prototype   *
//***********************************************************************************************************
function sendForm(form,instruct){
    var params = "";
	var fieldCell = Object;
//    var url="http://www.briandarrow.com/runbuddy/admin/formReceiver.php";
	var url=formReceiver;
	for(i=0;i<form.elements.length;i++){
		if(form.elements[i].type != "checkbox" || (form.elements[i].type=="checkbox" && form.elements[i].checked==true))
        	params+=form.elements[i].name+"="+encodeURIComponent(form.elements[i].value);
        if(i<form.elements.length-1)
        	params+="&";
	}
	var req = new Ajax.Request(url, {
		method: 'post',
		parameters: params,
		onSuccess: function(response){  			
//				alert(response.responseText);
				var json = response.responseText.evalJSON();
//				alert(json.message);
				errorDiv = document.getElementById(form.name+"_errorMessage");
//                errorDiv = form.previousSibling; //this well need to change if form generator is changed

				if (json.code == 1) //If it's successful, code=1
				{
					if(errorDiv)
                    	errorDiv.innerHTML = json.message;
                    for (i=0;i<json.fields.length;i++)
                    {
						fieldCell = document.getElementById(json.fields[i].name);
						var currentdiv = document.getElementById(json.fields[i].name+"_errorMessage");  
						if(fieldCell)
							fieldCell.style.color="black";
						if(currentdiv)
							currentdiv.innerHTML = ""; 
					}                 	
					result = handleFormSuccess(form,instruct);
					return false;
				}
				else
				{
					if(errorDiv)
                    	errorDiv.innerHTML = json.message;
					for(i=0;i<json.fields.length;i++)
					{
						var currentdiv = document.getElementById(json.fields[i].name+"_errorMessage");
						if(currentdiv)
						{
							fieldCell = document.getElementById(json.fields[i].name);

							if(json.fields[i].success == "false")
							{
								if(fieldCell)
									fieldCell.style.color="red";
								currentdiv.innerHTML=json.fields[i].errorMessage;
							}
							else
							{
								fieldCell.style.color="black";
								currentdiv.innerHTML = "";
							}
						}
					}
				}
//     			for(i=0;i<json.fields.length;i++)
//     			{
//     				alert(json.fields[i].success+": "+json.fields[i].errorMessage);
//     			}
     			//alert(json ? Object.inspect(json) : "no JSON object");
     	},
		onFailure: function(response){alert(response.responseText)}		
		});
		
    
	return false;
}


//*************************************************************************************************************************
//*												Form Hooks																  *
//*	A function for providing certain actions on form generation based on the name of the form							  *
//*************************************************************************************************************************
function formHooks(formName)
{
	switch(formName)
	{
		case "planDay":
		break;

		case "planSeries":
			alert('got here');
			containerObj = document.getElementById('seriesIntervalContainer');
			tables = containerObj.getElementsByTagName("table");
			alert(tables[1].id);
			tableDnD.init(tables[1]);
		break;

	}
}	


