// JavaScript Document
Event.addEvent(window,"load",prepareAjax);

function prepareAjax(){
	var ajaxSubmits = Document.getElementsByClassMatch("JS:AjaxSubmit");
	ajaxSubmits.each(AjaxSubmit);
}

function AjaxSubmit(element){
	var tag = element.tagName.toLowerCase();
	if(tag != "form"){
		alert("AjaxSubmit is only suited to the form tag");	
	}
	else{
		Event.addEvent(element,"submit",AjaxSubmit.sendFormData);
	}
	if(element.className.indexOf("JS:Validation") > -1){
		SetValidation(element);
		element.hasValidation = true;
	}
}
AjaxSubmit.sendFormData = function(evt){
	var element = Event.getTarget(evt);
	Event.preventDefault(evt);
	var hasValidation = (typeof Validation.applyValidation == "function" && element.hasValidation == true) ? true : false;
	var numErrors = 0;
	if(hasValidation == true){
		Validation.applyValidation(element, true);
		numErrors = Validation.getErrors(element);
		if(element.className.indexOf("interactive") > -1){
			Validation.showAllInteractivity(element);
		}
	}
	if(numErrors < 1){
		var formElements = AjaxSubmit.getFormValues(element);
		var queryString = "";
		for(var i = 0; i < formElements.length; i ++){
			var operator = (i == 0) ? "&" : "&";
			queryString += String(operator + formElements[i]);
		}
		var filePath = element.action;
		var sendData = new Ajax(filePath, "POST", false, 
			function displayResponse(HTML){
				element.parentNode.innerHTML = HTML;
			}
		, queryString);
	}
	else{
		var displayNumErrors = (numErrors == 1) ? numErrors +" error" : numErrors +" errors";
		if(Browser.getBrowser() == "internet explorer" && Browser.getVersion() == 6){
			alert("You have "+ displayNumErrors +", please review all fields and try again");		
		}
		else{
			Standard.alert("You have "+ displayNumErrors +", please review all fields and try again");		
		}
	}
}
AjaxSubmit.getFormValues = function(form){
	var elements = Document.getElementsByTagNames("input,select,textarea",form);
	var queries = new Array();
	for(var i = 0; i < elements.length; i ++){
		if(elements[i].tagName.toLowerCase() == "input"){
			if(elements[i].type == "radio"){
				if(elements[i].checked == true){
					queries.push(elements[i].name + "=" + escape(elements[i].value));
				}
			}
			else if(elements[i].type == "checkbox"){
				if(elements[i].checked == true){
					queries.push(elements[i].name + "=true");
				}
			}
			else if(elements[i].type == "text"){
				queries.push(elements[i].name + "=" + escape(elements[i].value));
			}
		}
		else if(elements[i].tagName.toLowerCase() == "select"){
			if(elements[i].multiple == true){
				var optionElements = elements[i].getElementsByTagName("option");
				var selectedCount = 0;
				var removeArray = "";
				for(var j = 0; j < optionElements.length; j ++){
					if(optionElements[j].selected == true){
						removeArray = elements[i].name.replace("[]", "");
						queries.push(removeArray +"[" + selectedCount + "]=" + escape(optionElements[j].value));
						selectedCount ++;	
					}
					else{
						removeArray = elements[i].name.replace("[]", "");
						queries.push(removeArray +"[" + selectedCount + "]=");
						selectedCount ++;	
					}
				}
			}
			else{
				var optionElements = elements[i].getElementsByTagName("option");
				for(var j = 0; j < optionElements.length; j ++){
					if(optionElements[j].selected == true){
						queries.push(elements[i].name + "=" + escape(optionElements[j].value));
						break;
					}
				}
			}
		}
		else if(elements[i].tagName.toLowerCase() == "textarea"){
			queries.push(elements[i].name + "=" + escape(elements[i].value));
		}
	}
	return queries;
}
AjaxSubmit.getValidationErrors = function(element){
	
}