
var jsforms = jsforms  || {};

jsforms.callback = '';

var debug = true;

/*
 * Prepare form submit action
 */
$(document).ready(function() {
	$("form").submit(
		function(event) {

			//this.disabled = true;
			if(typeof(this.handle_response_function) != 'undefined'){
				// Set custom callback
				jsforms.callback = this.handle_response_function.value;
			}
			//alert(jsforms.callback);
			
			jsforms.post_form(event.currentTarget);
			return false;
		}
	);
});

/*
 * Post form data
 * @param formElements
 */
jsforms.post_form = function(formElements) {
	$.post($(formElements).attr("action"), $(formElements).serialize(),
		function(response) {
			jsforms.handle_response(response);
			return false;
		}
	);
}


/*
 * Handle form response
 * @param response
 */
jsforms.handle_response = function(response){
	
	try{
		if(jsforms.callback && response){
			eval(jsforms.callback + "('" + response + "')");
		} else {
			this.generic_response(response);
		}

		return true;
	} catch(e){
		if(debug){
			alert('jsforms.handle_response ' + e + ' - ' + e.description);
		}
	}
}


jsforms.generic_response = function(response){

	var json = $.parseJSON(response);

	try{
		if(typeof(json) != 'undefined'){
			try{
				// Show errors (if any)
				jsforms.show_error(json);
				
				if(json.response == 1){				
					$('.default_content').hide();
					$('.success_content').show();
				}
			} catch(e){
				if(debug){
					alert('jsforms.generic_response : ' + e);
				}
			}
		}
		
	} catch(e){
		if(debug){
			alert('jsforms.generic_response : ' + e);
		}
	}

}

jsforms.hide_dialogue = function(){
	
}

jsforms.show_error = function(data){
	try{
		
		if(typeof(data) == 'object'){
			var json = data;	
		} else {
			var json = $.parseJSON(data);
		}
		
		//alert(JSON.stringify(json));
		
		if(typeof(json.form_id) != 'undefined' && json.form_id != null && typeof(json.errors) != 'undefined' && json.errors != null){
			
			var form_id = document[json.form_id];
			
			if(json.errors.length > 0){

				$("#"+form_id.id+" .errors").html('<strong class="strong">Error:<br /></strong>');
				$("#"+form_id.id+" .errors").append('<ul>\n');
				for(x=0; x < json.errors.length; x++){
					$("#"+form_id.id+" .errors").append(json.errors[x] + '\n');
				}
				$("#"+form_id.id+" .errors").append('</ul>\n');
				$("#"+form_id.id+" .errors").show();
			} else {
				$("#"+form_id.id+" .errors").hide();
			}

		}

	} catch(e){
		if(debug){
			alert('jsforms.show_error: ' + e);
		}
	}
}



