/*
*		formsubmitter 1.1
*
*		plugin jquery per l' invio delle form
*
*		file richiesti: 
*		jquery.ui.js
*		effects-core.js
*		jquery.form.js
*		jquery.scrollto.js
*		jquery.js
*
*		michele michele.deangelis@gmail.com
*		daniele argento.bianco@gmail.com
*/



/*funzione da rivedere*/
function showOnClick(element)
{
	if(element == 'frm_dettagli_richiesta')
	{		
		$j('#'+element).slideToggle('slow');
		if($j('#frm_dettagli_preventivo:visible')) $j('#frm_dettagli_preventivo').slideToggle('slow');
		document.forms['wrapper_form'].frm_tipo_richiesta.value = 'richiesta informazioni';

	}
	else
	{

		$j('#'+element).slideToggle('slow');
		if($j('#frm_dettagli_richiesta:visible')) $j('#frm_dettagli_richiesta').slideToggle('slow');
		document.forms['wrapper_form'].frm_tipo_richiesta.value = 'richiesta preventivo';	
	}
}

(function($){ 
    
    
    $.fn.formSubmitter = function(settings){
    settings = jQuery.extend({
			bgerror: '#ffee5b',
			bgvalid: '#ffffff',			
			rescroll: false,
			submitclass: 'submit',
			onsubmitaction: '',
			useajax: true
    },settings);    
    
	var jQueryMatchedObj = $(this);
    function __initialize()
    {          	       
       	$('.' + settings.submitclass, jQueryMatchedObj).bind('click',executeformSubmitter);       
	    return false;
    }

	function HasNoValue(string)
	{
		if(string==null || string == undefined || string == '')
		return true;
		else return false;
	}
	
	function validateFormElement(elem)
	{
		if(HasNoValue(elem.attr('value')) || (elem.attr('value') == elem.attr('originalValue')))
		{
			errorOnFormElement(elem);
			return true;
		}
		else 
		{
			elem.css({'background':settings.bgvalid});
			return false;
		}
	}
	
	function validateHiddenElement(element)
	{
	
		if(validateFormElement(element))
		{
			errorOnFormElement('fieldset_dettagli_richiesta');
			errorOnFormElement('fieldset_dettagli_preventivo');
			return true;
		}	
		else return false;
	}
	
	function validateCheckBoxElement(elem)
	{
		if(HasNoValue(elem.attr('checked')))
		{
			errorOnFormElement(elem.parent());			
			return true;
		}
		else
		{
			elem.parent().css({'background':settings.bgvalid});
			return false;
		}
	}
	
	function validateFormEmail(elem)
	{
		var emailRegexp = RegExp('^[A-Za-z0-9._-]+[@]([A-Za-z0-9-]+[.])+([A-za-z]{2,4})$', 'i');
			
		if (emailRegexp.test(elem.attr('value')))
		{
			elem.css({'background':settings.bgvalid});
			return false;
		}
		else
		{
			errorOnFormElement(elem);
			return true;
		}
	}
	
	function errorOnFormElement(elem)
	{
		elem.css({'position':'relative'});
		elem.css({'background':settings.bgerror});		
		elem.animate({left: '-10'},120).animate({left: '+10'},120).animate({left: '-10'},120).animate({left: '0'},120);		
	}
	
	/* 
	    funzione per la submission delle form con validazione dei campi da template
	    versione 1.0
	*/
	function executeformSubmitter()
	{	    
	    var form = $j(jQueryMatchedObj);
		
	    var form_fields = $j(jQueryMatchedObj).find('.all_fields');		
		
	    var error_found = 0;
		
	    /* inizio validazione */    

		$('input[validatelike="text"]', form_fields).each(function()
		{
			if(validateFormElement($(this))) error_found++;
		});
		
		$('input[validatelike="email"]', form_fields).each(function()
		{
			if(validateFormEmail($(this))) error_found++;
		});
		
		
		$('input[validatelike="checkbox"]', form_fields).each(function()
		{
			if(validateCheckBoxElement($(this))) error_found++;
		});

		
		if ($('input[validatelike="at_least_checkbox"]', form_fields).length>0)
		{			
		   var at_least = false;
			$('input[validatelike="at_least_checkbox"]', form_fields).each(function()
			{		     
			   if(!at_least)
			   {
					if(!validateCheckBoxElement($(this))) at_least = true;
				}
			});
			if (!at_least) error_found++;
		}
		
		$('select[validatelike="select"]', form_fields).each(function()
		{
			if(validateFormElement($(this))) error_found++;
		});    

	    /* fine validazione */
	    
		if(error_found==0)
		{

				//Se non ci sono errori ripulisco il valore dei campi non obbligatori se questo 衵guale all'attributo originalValue
				$('input[type="text"]', form_fields).each(function()
				{
					if (!$(this).attr('validatelike')){
						if ($(this).attr('value')==$(this).attr('originalValue')){
							$(this).attr('value', "");
						}						
					}
				});			
		
                                 if(settings.onsubmitaction != ''){
                                    settings.onsubmitaction();
                                 }
                
				if (settings.useajax)
				{

					//setto parametro antispam
					var d = new Date()
					param = d.getTime();		
					$('input[name="secure"]',form).val(param);
					
					form_fields.slideUp('slow');
					
					if (settings.rescroll) $.scrollTo('#main');
		
					var options = { 
					
						beforeSubmit: function()
						{
							$j(jQueryMatchedObj).find('.form_loading').slideDown('slow');					
						},
						resetForm: true,
						error: function()
						{
							toConsole('Errore di invio');
							return false;
						},
					    success: function() 
					    { 			    			        
							$j(jQueryMatchedObj).find('.form_loading').slideUp('slow');
							$j(jQueryMatchedObj).find('.form_thanks').slideDown('slow');		
							return false; 			        
					        
					    } 
					}; 					 
					$j(jQueryMatchedObj).ajaxForm(options); 
				    $j(jQueryMatchedObj).ajaxSubmit(options); 

				  }
				  else
				  {
				  	$j(jQueryMatchedObj).submit();
				  }	    	

				  
				  
		}
		else $j(jQueryMatchedObj).find('.some_errors').slideDown();
	    
	    return false;
	}
        
    return __initialize();
    
    };
    
})(jQuery);
