﻿/**
 * Responsible for validating and submitting
 * all html forms on landing pages.
 */
LPCForm = function () {
	//FormHandler Object
	var Form = function(pre_fxn, post_fxn, error_fxn, request_url, translation) {
		this.pre_fxn		= pre_fxn;
		this.post_fxn		= post_fxn;
		this.error_fxn		= error_fxn;
		this.request_url 	= request_url;		
		this.translation    = translation;
		
		this.request_result	= '';
		
		this.elements = new Array();
		
		this.addElement = addElement;
		
		this.process 		= process;
		this.validate 		= validate;
		this.sendRequest 	= sendRequest;
		this.requestSuccess	= requestSuccess;
		this.requestFailure	= requestFailure;
		this.getFormData	= getFormData;
	};
	
	var process = function () {
		
		if (!this.validate()) {
			return false;
		}
		
		if (this.pre_fxn.call() == false) { 
			return false;
		}
		
		data = this.sendRequest();
		
		
	};
	
	var requestSuccess = function (data) {
		//ref = this;
		alert(this.url);
		//this.post_fxn.call(data);
	}; 
	
	var requestFailure = function(requestObj, status) {
		this.error_fxn.call(requestObj);
	};
	
	var getFormData = function() {
		var formDataObj = new Object();
			formDataObj.instance_id = instance_id;
		for (var i=0; i<this.elements.length; i++) {
			var id   = this.elements[i].id;
			var name = $("#"+id).attr("name");
			//var name = this.elements[i].name;
			if (this.elements[i].type == 'checkbox') {
				formDataObj[name] = $("#"+id).is(':checked');
			} else {
				formDataObj[name] = $("#"+id).val();
			}
		}

		return formDataObj;
	}
	
	var sendRequest = function() {
		var ref = this;
		data = this.getFormData();
		$.ajax({
			type:"POST", 
			url:this.request_url,
			data:data,
			success: this.post_fxn,
			error: this.error_fxn});
	};
	
	var validate = function () {
		form_elements = this.elements;
		v = new Validation(this.translation);
		for (var i=0; i < form_elements.length; i++) {
			e = form_elements[i];
			v.registerElement(e.id, e.display, e.type, e.min_length, e.max_length);
		}
		if (v.validate()) {
			return true;
		} else {
			var message = '';
			var errors = v.getErrors();
			for (var i=0; i < errors.length; i++) {
				message = message+errors[i]+"\n";	
			}
			alert(message);
			v.clearErrors();
			return false;
		}
	};
	
	var addElement = function (name, id, type, required, min_length, max_length) {
		this.elements.push(new FormElement(name, id, type, required, min_length, max_length));
	};	
	
	//FormElement Object
	var FormElement = function(name, id, type, required, min_length, max_length) {
		this.display    = name;
		this.id			= id;
		this.type		= type;
		this.required 	= required;
		this.min_length	= min_length;
		this.max_length	= max_length;
	};
	
	return {
		Form: Form
	};
}();