(function($) {	
	function buildParams($form){
		$('input[type=text], input[type=radio]:checked, input[type=hidden], input[type=checkbox]:checked, select', $form).each(function(i){
			var string = $(this).attr('name')+'='+encodeURIComponent($(this).val());
			(i==0) ? params = '?'+string : params += '&'+string;													 
		});	
		return params;
	}
	
	function checkTheSame($obj, w){
		/*
		var usertype = $('input[name=usertype]:checked','.jwattivare').val();
		console.log(usertype);
		$('input[name=usertype][value='+usertype+']', w).attr('checked', 'checked');
		*/
	}
	
	function formatPhone(obj){
		var phone_value = $(obj).val();
		phone_value = phone_value.replace('/', '').replace('.', '').replace(' ', '').replace('(', '').replace(')', '');
		return phone_value;	
	}
	
	function checkPhone(obj){
		var error = '';
		var phone_value = formatPhone($('input[name=phone]', obj));
		var operator_value = $('select[name=altro_previous_isp]', obj).val();
		var phone_reg = /^0[0-9]{5,11}$/;
		if(phone_value == '' || phone_value == 'Telefono fisso' || phone_value == 'Inserisci il numero di telefono fisso') { 
			alert('Inserisci il numero di telefono fisso.');
			return false;
		}
		if(!phone_reg.test(phone_value)) error += 'Numero non valido.\n';
		if(operator_value == 'Scegli') error += 'Seleziona il tuo attuale operatore';
		if(error){ alert(error);return false; } 
		return true;
	}
				
	$.fn.attivare = function(settings) {
		var prevContent;
		var bLoading = false;
		
		//Extend
		$.extend(this, {
			init: function(){	
				$(o.eContentSwitch).not(o.eMainBox).css({'visibility': 'visible', 'display': 'none'}); //ie bug
				
				this.each(function(){													 
					var wrapper = this;
					
					//form olo2olo
					$('.formAttivare', this).submit(function(e){
						if(!checkPhone(this)) return false;
						main.loading(true, this);
						main.checkOlo2olo(wrapper);
						return false;																	
					});
					
					//form fields (via, indirizzo, nciv,..)
					$('.jformfields', this).submit(function(){
						main.checkform(this);
						return false;
					});	

					//bind switch links
					$(o.eLinkSwitch).live("click", function(){																		
						var href='.'+$(this).attr('href').split('#')[1];
						main.switchContent(href, $(this).parents('.jInitAttivare'));
						return false;
					});
					
					$('input[name=usertype]', this).change(function(){
						var usertype = $(this).filter(':checked').val();
						var container = $(this).data('container');
						$('input[name=usertype][value='+usertype+']', container).attr('checked', 'checked');
					}).data('container', this);
				});
			},
			
			checkform: function(ele){
				var indirizzo = $('input[name=ind]', ele).val();
				var nciv = $('input[name=nciv]', ele).val();
				var cap = $('input[name=cap]', ele).val();
				var comune = $('input[name=citta]', ele).val();
				var prov = $('select[name=prov]', ele).val();
				var altro_previous_isp = $('select[name=altro_previous_isp]', ele);
		
				var error = "";
				if(indirizzo == "Indirizzo") error += "Inserisci l'indirizzo \n";
				if(nciv == "N° Civ") error += "Inserisci il N° Civ \n";
				if(cap == "Cap") error += "Inserisci il CAP \n";
				if(comune == "Comune") error += "Inserisci il comune \n";
				if(prov == "Prov") error += "Seleziona la provincia \n";
				if(altro_previous_isp.is(':visible') && altro_previous_isp.val() == "Scegli") error += "Seleziona il tuo operatore";
		
				if(error != ""){
					alert(error);
					return false;
				} else {
					main.loading(true, ele);			
					main.displayResults(ele); 
				}
			},
			
			checkOlo2olo: function(w){
				var phone_value = formatPhone($('input[name=phone]', w));
				var usertype_value = $(o.eMainBox, w).find('input[name=usertype]:checked').val() || $(o.eMainBox, w).find('input[name=usertype][type=hidden]').val();
				var offerta_value = $(o.eMainBox, w).find('input[name=offerta][type=hidden]').val();
				var page_value = $(o.eMainBox, w).find('input[name=page][type=hidden]').val();
				var altro_previous_isp_value = $(o.eMainBox, w).find('select[name=altro_previous_isp]').val();
				jQuery.get( 
					o.ajaxCheckCov,
					{phone: phone_value, usertype: usertype_value, offerta: offerta_value, page: page_value, altro_previous_isp: altro_previous_isp_value},
					function(data){
						if (data == 'olo2olo' || data == 'olo2olo_native') {
							checkTheSame( $('input[name=usertype]', o.eOlo2olo), w );
							main.switchContent(o.eOlo2olo, w);
							$('input[name=phone_olo2olo]').val(phone_value);
							$('input[name=process_type]').attr('value', data);
						} else { //new line
							document.location.href=data;
						}
					}
				);
			},
			
			displayResults: function(form){
				var wrapper = $(form).parents(o.eContentSwitch);
				var params = buildParams(form);
				var extendedParams = '&usertype='+$('input[name=usertype]:checked', form).val();
				var mainwrapper = $(form).parents(main.selector);
				$(o.eResults, mainwrapper).find(o.eContent).load(o.ajaxResultsCov+params+extendedParams, function(){ main.switchContent(o.eResults, mainwrapper);main.buildTplResults(mainwrapper); });
			},
			
			buildTplResults: function(wrapper){
				$closeLink = $('<a class="'+o.eLinkSwitch.split('.')[1]+' close" href="#'+o.eMainBox.split('.')[1]+'">Chiudi</a>');
				$backLink = $('<a class="'+o.eLinkSwitch.split('.')[1]+' bottom cred" href="#'+prevContent.split('.')[1]+'"><strong>&laquo; Indietro</strong></a>');
				if(!$('#jquery-lightbox').length) $(o.eResults, wrapper).find(o.eContent).prepend($closeLink);
				$(o.eResults, wrapper).find(o.eContent).append($backLink);
			},
			
			loading: function(action, form){
				bLoading = action;
				if(action){
					var wrapper = $(form).parents(o.eContent);
					var loadingHeight = $(wrapper).height();
					$(wrapper).children().hide();
					$(wrapper).append('<div style="height:'+loadingHeight+'px;" class="'+o.eLoading.split('.')[1]+'"></div>');
				} else {
					$(o.eLoading, form).remove();
				}
			},
			
			restoreAfterLoading: function(wrapper){
				$(o.eContent, wrapper).children().show();
				main.loading(false, wrapper);
			},
			
			switchContent: function(ele, wrapper){
				
				var h;
				$(o.eContentSwitch, wrapper).fadeOut();
				$(ele, wrapper).fadeIn('normal', function(){ main.restoreAfterLoading(wrapper);  })
				main.restoreProcessType(ele);
				(ele == o.eMainBox) ? h = 'auto' : h = o.eBoxHeight;
					$(o.eMainBox, wrapper).css('height', h);
			},
			
			restoreProcessType: function(ele){
				if(ele == o.eMainBox){
					$('input[name=process_type]').attr('value', 'nuova-linea'); //re set the value (after olo2olo native)
					document.getElementById('altro_previous_isp').style.display='';
				}
				if(ele == o.eOlo2olo || ele == o.eNewLine) {
					prevContent = ele;
					document.getElementById('altro_previous_isp').style.display='none';
				}
			}
		});
		
		var main = this;
		
		//Initialize
		var o = $.extend({}, $.fn.attivare.defaults, settings);
		this.init();
	}
	
	$.fn.attivare.defaults = {
		eMainBox: '.jwattivare',
		eOlo2olo: '.jwolo2olo',
		eNewLine: '.jwnewline',
		eResults: '.jwresults',
		eLoading: '.loading',
		eContentSwitch: '.jbox', //boxes générales (cachées de base)
		eLinkSwitch: '.jswitch', //lien permettant de afficher la box choisie (danns l'href)
		eContent: '.jcontent', //wrapper du contenu des boxes
		eBoxHeight: '245px',
		ajaxResultsCov: '/coverage_address_do.php',
		ajaxCheckCov: '/coverage_ajax_do.php'
	}
})(jQuery);

$(document).ready(function(){
	$('.jInitAttivare').attivare();			
});