// JavaScript Document

//run formsInit function after content loads
//
window.addEvent(window, 'load', formsInit);

//setup our default form valiation function
//can be overridden for specific invalid form handling functions.
formValidate = genericValidateForm;

function formsInit(e,thisSelection)
{
	//alert('forms init');
	if(thisSelection==null || thisSelection==undefined) thisSelection = document;
	
	//classes to attach the form behavior on page load
	var formClasses = new Array('home_snapp_button_ok','home_snapp_button_remove','home_snapp_button_xl','home_snapp_button_edit');
	
	//var formElements;
	for(var loop=0;loop<formClasses.length;loop++)
	{
		//get our form elements
		var formButtonElements = thisSelection.getElementsByClassName(formClasses[loop]);
		
		//add our form behavior to our elements
		for(var innerLoop=0;innerLoop<formButtonElements.length;innerLoop++)
		{
			var formItemEl = formButtonElements[innerLoop].getAttribute('formAction');
			if(formItemEl!=null)
			{
				addEvent(formButtonElements[innerLoop], 'click', formActions);
			}
		}
	}
		
		
		
	//form input tags to attach onfocus actions to
	var formInputTags = new Array('input','textarea','select');
	
	//var formInputs;
	for(var loop=0;loop<formInputTags.length;loop++)
	{
		//get our form elements
		var formInputElements = thisSelection.getElementsByTagName(formInputTags[loop]);
		
		//add our form behavior to our elements
		for(var innerLoop=0;innerLoop<formInputElements.length;innerLoop++)
		{	
			//formInputElements[innerLoop].initVal = formInputElements[innerLoop].value;
			var formItemEl = formInputElements[innerLoop].getAttribute('focusClear');
			if(formItemEl!=null)
				addEvent(formInputElements[innerLoop], 'focus', inputActions);
		}
	}

}

//handle input field actions
function inputActions()
{
	//alert('test input actions');
	var inputAction;
	var formItemEl;
	//clear the input field when focused
	//  && (formItemEl = this.getAttribute('focusClearDefault'))!=null
	//alert(this.getAttribute('focusDefault'))
	if((inputAction = this.getAttribute('focusClear'))==1 && (this.getAttribute('focusDefault')==this.value || this.getAttribute('default')==this.value))
	{
		//if(this.value==formItemEl) 
		this.value="";
		this.setAttribute('focusClear',0);
	}
}

//get the current elements parent form
function getElementForm(currElement)
{
	//get enclosing form
	var parentElements=getParent(currElement,'form');
	var formEl = parentElements[0];
	return formEl;
}

//serialize the current form for ajax submission
function formSerialize(currElement)
{
	var formEl = getElementForm(currElement);
	return Form.serialize(formEl,true);
}

//for debugging
function formObjVars(formObj)
{
	var objKeys = Object.keys(formObj);

	for(var loop=0;loop<objKeys.length;loop++)
	{
		var objKey = objKeys[loop];

		alert(objKey+': '+formObj[objKey]);
	}
}

//save form using ajax
function formSave(currElement, callBackHandlers)
{

	if($(currElement).nodeName != 'FORM')
		var formId = getElementForm(currElement);
	else
		var formId = currElement;

	//check all of our values to see if we can submit
	//returns object 
	//{validateStatus:validated,badField:invalidFields}
	var validateResult = formValidate(formId);

	//return if not valid form
	if(validateResult.validateStatus!=1) return 0;

	var formScript = $(formId).getAttribute('action')

	var formSerialized = Form.serialize(formId);

	new Ajax.Request(formScript, {
  	method: 'get',
	parameters: formSerialized,
	onSuccess: 
		function(t){
					buttonTrigger(currElement);
					//alert(t.responseText);
					if(callBackHandlers!=null)
						eval(callBackHandlers);
				}
  	});	
	
	//alert(validateResult.validateStatus);
	return validateResult.validateStatus;
}


//save form using ajax
//no button triggers
function formSaveSimple(currElement, callBackHandlers)
{

	if($(currElement).nodeName != 'FORM')
		var formId = getElementForm(currElement);
	else
		var formId = currElement;

	//check all of our values to see if we can submit
	//returns object 
	//{validateStatus:validated,badField:invalidFields}
	var validateResult = formValidate(formId);

	//return if not valid form
	if(validateResult.validateStatus!=1) return 0;

	var formScript = $(formId).getAttribute('action')

	var formSerialized = Form.serialize(formId);

	new Ajax.Request(formScript, {
  	method: 'get',
	parameters: formSerialized,
	onSuccess: 
		function(t){
					//buttonTrigger(currElement);
				}
  	});	
	
	//alert(validateResult.validateStatus);
	return validateResult.validateStatus;
}

//check all required form fields are filled out
//take action if not valid
//highlights and returns invalid fields for further action
function genericValidateForm(currElement)
{
	if($(currElement).nodeName != 'FORM')
		var formId = getElementForm(currElement);
	else
		var formId = currElement;

	var formElements;
	var validated =1;
	var validation = new Array();
	var invalidFields = new Array();
	
	if(formElements = Form.getElements(formId))
	{
		for(var loop=0;loop<formElements.length;loop++)
		{
			var thisField = formElements[loop];
			//remove previously updated class
			thisField.removeClassName('home_snapp_text_field_B');
			
			if(Field.present(thisField)==false && thisField.getAttribute('required')==1)
			{
				invalidFields.push(thisField);
				validated = 0;
			}
		}
	}
	
	validation = {validateStatus:validated,badField:invalidFields};
	return validation;
}

function extendedValidateForm(currElement)
{
	if($(currElement).nodeName != 'FORM')
		var formId = getElementForm(currElement);
	else
		var formId = currElement;

	var formElements;
	var validated =1;
	var validation = new Array();
	var invalidFields = new Array();
	
	if(formElements = Form.getElements(formId))
	{
		for(var loop=0;loop<formElements.length;loop++)
		{
			var thisField = formElements[loop];
			if((Field.present(thisField)==false && thisField.getAttribute('required')==1) || thisField.getAttribute('default')==thisField.value)
			{
				invalidFields.push(thisField);
				
				//get the required/strong tag and scroll to
				var pos = Element.cumulativeOffset(thisField)
				window.scrollTo(0,pos[1]-100);
				var reqTextEl = $(thisField).previous().down('strong');
				reqTextEl.style.filter="Alpha(opacity=100);-moz-opacity:100;opacity:100;";
				reqTextEl.style.height=reqTextEl.getHeight();
				
				
				//fade in/out required text field
				fadeInOut(reqTextEl,5);
				validated = 0;
				break;
			}
		}
	}
	
	validation = {validateStatus:validated,badField:invalidFields};
	return validation;
}

//highlight the bad form element
function fieldStatus(formStatus)
{
	if(!formStatus.validateStatus)
	{
		formStatus.badField[0].addClassName('home_snapp_text_field_B');
		formStatus.badField[0].focus();
		return 0;
	}
	return 1;
}

//do something after form submit
function formResult(jsonResult, currElement)
{
	var resultObj = eval('(' + jsonResult + ')');
	
	//strips any slashes from message, ie. with apostrophe...
	if(typeof resultObj == 'object')
		resultObj['statusMsg'] = stripslashes(resultObj['statusMsg']);
		
	var statusCode = resultObj['statusCode'];
	var statusMsg = resultObj['statusMsg'];
	
	if(statusCode!=null && statusMsg!=null)
	{

	}

	return resultObj;
}

//reset form
function formReset(currElement)
{
	doToggle = 1;
	var parentElements=getParent(currElement,'form');

	var formId = parentElements[0].id;

	var formElements = Form.getElements(formId);
	//remove error class from fields
	for(var loop=0;loop<formElements.length;loop++)
	{
		var thisField = formElements[loop];
		thisField.removeClassName('home_snapp_text_field_B');
	}

	Form.reset(formId);	
}

