// JavaScript Document
// myAjaxValidatedForm.js

function myAjaxValidatedForm(a_selector, a_url, a_callback)
{
	// default data
	this.m_selector = new Object();
	this.m_selector.form_tag = 'form#contact_form';
	this.m_selector.error_list = 'ul.error_list';
	this.m_selector.error_list_element = 'li';
	this.m_selector.submit_button = 'input.submit_button';

	this.m_url = new Object();
	this.m_url.get_json = global_data.url_environment_prefix+'main/contact';
	this.m_url.redirect = global_data.url_environment_prefix+'';
	
	this.m_callback = new Object();


	// replaces default data with passed parameters from constructor
	this.init_data = function () {
		var athis = this;
		jQuery.each(a_selector, function(key, val) {
			athis.m_selector[key] = val;
		});
		
		jQuery.each(a_url, function(key, val) {
			athis.m_url[key] = val;
		});
		
		athis.m_callback.success = athis.default_callback_success;
		if (typeof(a_callback) == 'object')
		{
			jQuery.each(a_callback, function(key, val) {
				athis.m_callback[key] = val;
			})
			//alert('object');
		}
		
		//jQuery.each(this.m_url, function(key, val) {
		//	alert(key+' '+val);
		//});
	}
	
	
	// this is fired after form was validated successfully
	this.default_callback_success = function () {
		var athis = this;
		//alert('ok');
		jQuery("div#contactForm_hiddenModalContent input.button_ok").click(function() {
			location.href = athis.m_url.redirect;
			tb_remove();
		});
			
		tb_show(null,'#TB_inline?height=130&width=300&inlineId=contactForm_hiddenModalContent&modal=true',false);
	}
	
	
	this.init_events = function () {
		var athis = this;
	
		jQuery(document).ready(function () {
	
			jQuery(athis.m_selector.form_tag).submit(function() {
			
				jQuery(athis.m_selector.form_tag+' '+athis.m_selector.error_list).hide();
				jQuery(athis.m_selector.form_tag+' '+athis.m_selector.submit_button).attr("disabled","disabled");
	
			
				jQuery.getJSON(athis.m_url.get_json+"?"+jQuery(athis.m_selector.form_tag).serialize(),
					function(data){
	
						if (data.result=='failed')
						{
							// validation failed
							jQuery(athis.m_selector.form_tag+' '+athis.m_selector.submit_button).attr("disabled","");
							jQuery.each(data.error, function(field_name, error) {
								jQuery(athis.m_selector.form_tag+' '+athis.m_selector.error_list+'_'+field_name+' '+athis.m_selector.error_list_element+':first').html(error);
								jQuery(athis.m_selector.form_tag+' '+athis.m_selector.error_list+'_'+field_name).show();
								//alert(i+' '+val);
							});
						}
						else
						{
							// form validated
							athis.m_callback.success(athis);
						}
	
					}
				);
	
				//debug:
				//jQuery.get(athis.m_url.get_json+"?"+jQuery(athis.m_selector.form_tag).serialize(), function(data){
				//	alert("Data Loaded: " + data);
				//});

				//jQuery("span").text("Not valid!").show().fadeOut(1000);
				return false;
			}); //jQuery("form#contact_form").submit(...
			
			
			
		});
	}//this.init_events = function ()
	
	
	this.init_data();
	//this.m_callback.test(this);
	this.init_events();
}//function myAjaxValidatedForm(...