﻿var validatePrepareControl; //fn()
var validate; //fn()
var parseValidateElement; //fn()
var SetSelezioneAutomaticaCheckBox; //fn()
var validatePrepareMultiControl;//fn()

(function($){
	var MSGTIMER = 40;
	var MSGSPEED = 5;
	var MSGOFFSET = 3;
	var MSGHIDE = 3;
	var multiControlValidate = new Array();
	
	validatePrepareMultiControl = function(sArrayID,sControlID){ 
		if(!multiControlValidate[sArrayID])multiControlValidate[sArrayID] = new Array();
		multiControlValidate[sArrayID].push(sControlID);
	}
	validatePrepareControl = function(sControlID,bIsRequired,sCompareTo,sRegExpression){
		var oControl = document.getElementById(sControlID);
		if(oControl){
			if(bIsRequired)oControl.setAttribute('IsRequired','1');
			if(sCompareTo>'')oControl.setAttribute('CompareTo',sCompareTo);
			if(sRegExpression>'')oControl.setAttribute('RegExpression',sRegExpression);
		}
	};
	validate = function(oForm){
		for(key in multiControlValidate){
			var bReturn = false;
			for(var x=0;x<multiControlValidate[key].length;x++){
				var oControl = document.getElementById(multiControlValidate[key][x]);
				if(oControl.checked||(jQuery('#'+oControl.id).parents('fieldset:eq(0)').css('display')=='none')){
					bReturn = true;
					break;
				}
			};
			if(!(bReturn)){
				if(multiControlValidate[key][0]){
					inlineMsg(multiControlValidate[key][0],'E\' necessario selezionare almeno un valore.',2);
					return false;
				};
			};
		};
		for(var x=0;x<oForm.length;x++){
			var oChild = oForm[x];
			if(oChild.attributes['IsRequired']&&(oChild.attributes['IsRequired'].value='1')){
				if (GetControlValue(oChild)==''){
					inlineMsg(oChild.id,'Campo richiesto.',2);
					return false;
				}
			}
			if(oChild.attributes['RegExpression']&&(oChild.attributes['RegExpression'].value>'')){
				var re = new RegExp(oChild.attributes['RegExpression'].value);
				bReturn = GetControlValue(oChild).match(re);       
				if(!bReturn){
					inlineMsg(oChild.id,'Campo non valido.',2);
					return false
				}
			}
			if((oChild.attributes['CompareTo'])&&(oChild.attributes['CompareTo'].value>''))  {
				var oCompareObject = document.getElementById(oChild.attributes['CompareTo'].value);
				if((oCompareObject)&&(!(GetControlValue(oCompareObject)==GetControlValue(oChild)))){
					inlineMsg(oChild.id,'I campi non coincidono.',2);	
					return false;
				}
			}
		}
		return true;  
	};
	GetControlValue = function(oControl){
		var sReturn = '';
		if((oControl.type=='text')||(oControl.type=='password')||(oControl.type=='textarea')) sReturn = oControl.value;
		if((oControl.type=='radio')&&(oControl.checked)) sReturn = oControl.value;
		return sReturn;
	};
	parseValidateElement = function(oForm,tagName){
		var bReturn = true;
		var oChilds = oForm.getElementsByTagName(tagName);
		for(var x=0;x<oChilds.length;x++){
			var oChild = oChilds[x];
			if(oChild.className>'')bReturn = checkValidateElement(oChild);
			if(!bReturn)break;
		}
		return bReturn;
	};
	checkValidateElement = function(oElement){
		var bReturn = true;
		if((oElement.type == 'text')||(oElement.type == 'password')||(oElement.type == 'textarea')){
			if(oElement.className.indexOf('IsRequired')!=-1){
				bReturn = (oElement.value!='');
				if(!bReturn)inlineMsg(oElement.id,'Campo richiesto.',2);
			}
		}
		return bReturn;
	};
	SetSelezioneAutomaticaCheckBox = function(sId,sIdCheck,sIdVisible,sValue,sValueVisible){
		var oControl = document.getElementById(sIdCheck);
		var oSource = document.getElementById(sId);
		var oVisible = document.getElementById(sIdVisible);
		sValue += ',';
		sValueVisible += ',';
		if(oControl)oControl.onchange = function(){
			var bForzaCheck = false;
			var bVisible = false;
			if((oControl.type == 'text')||(oControl.type == 'password')||(oControl.type == 'textarea')){
				bForzaCheck = ((sValue.indexOf(oControl.value + ',') >= 0)&&(oControl.value>''));
				bVisible = ((sValueVisible.indexOf(oControl.value + ',') >= 0)&&(oControl.value>''));
			}
			else if(oControl.type == 'select-one'){
				bForzaCheck = ((sValue.indexOf(oControl[oControl.selectedIndex].value + ',') >= 0)&&(oControl.value>''));
				bVisible = ((sValueVisible.indexOf(oControl[oControl.selectedIndex].value + ',') >= 0)&&(oControl.value>''));
			}
			else if((oControl.type=='checkbox')||(oControl.type=='radio')){
				bForzaCheck = (oControl.checked);
				bVisible = (oControl.checked);
			}
			if(oVisible){
				if(bVisible)oVisible.style.display='';
				else oVisible.style.display='none';
			}
			if(oSource){
				oSource.disabled=bForzaCheck;
				//if (bForzaCheck)
				oSource.checked=bForzaCheck;
			}
		}	
		oControl.onchange();	
	};
	/* FUNZIONI ESTERNE E DI COMPLEMENTO A QUELLE INTERNE */
	// build out the divs, set attributes and call the fade function //
	inlineMsg = function(target,string,autohide){
		var msg;
		var msgcontent;
		if(!document.getElementById('msg')){
			msg = document.createElement('div');
			msg.id = 'msg';
			msgcontent = document.createElement('div');
			msgcontent.id = 'msgcontent';
			document.body.appendChild(msg);
			msg.appendChild(msgcontent);
			msg.style.filter = 'alpha(opacity=0)';
			msg.style.opacity = 0;
			msg.alpha = 0;
		}else{
			msg = document.getElementById('msg');
			msgcontent = document.getElementById('msgcontent');
		}
		msgcontent.innerHTML = string;
		msg.style.display = 'block';
		var msgheight = msg.offsetHeight;
		var targetdiv = document.getElementById(target);
		targetdiv.focus();
		var targetheight = targetdiv.offsetHeight;
		var targetwidth = targetdiv.offsetWidth;
		var topposition = topPosition(targetdiv)-((msgheight - targetheight)/2);
		var leftposition = leftPosition(targetdiv)+targetwidth+MSGOFFSET;
		msg.style.top = topposition+'px';
		msg.style.left = leftposition+'px';
		clearInterval(msg.timer);
		msg.timer = setInterval("fadeMsg(1)", MSGTIMER);
		if(!autohide)autohide = MSGHIDE;
		window.setTimeout("hideMsg()",(autohide*1000));
	};
	// hide the form alert //
	hideMsg = function(msg) {
		var msg = document.getElementById('msg');
		if(!msg.timer)msg.timer = setInterval("fadeMsg(0)", MSGTIMER);
	};
	// face the message box //
	fadeMsg = function(flag){
		if(flag == null)flag = 1;
		var msg = document.getElementById('msg');
		var val;
		if(flag == 1)val = msg.alpha + MSGSPEED;
		else val = msg.alpha - MSGSPEED;
		msg.alpha = val;
		msg.style.opacity = (val / 100);
		msg.style.filter = 'alpha(opacity=' + val + ')';
		if(val >= 99) {
			clearInterval(msg.timer);
			msg.timer = null;
		}else if(val <= 1){
			msg.style.display = "none";
			clearInterval(msg.timer);
		}
	};
	// calculate the position of the element in relation to the left of the browser //
	leftPosition = function(target){
		var left = 0;
		if(target.offsetParent){
			while(1){
				left += target.offsetLeft;
				if(!target.offsetParent)break;
				target = target.offsetParent;
			}
		}else if(target.x)left += target.x;
		return left;
	};
	// calculate the position of the element in relation to the top of the browser window //
	topPosition = function(target){
		var top = 0;
		if(target.offsetParent){
			while(1){
				top += target.offsetTop;
				if(!target.offsetParent)break;
				target = target.offsetParent;
			}
		}else if(target.y)top += target.y;
		return top;
	};
	// preload the arrow //
	if(document.images){
		arrow = new Image(7,80);
		arrow.src = defaultPath+'img/msg_arrow.gif'; 
	}
})(jQuery);
// Validazione real-time
jQuery(function($){
	var toValidate;
	setOk = function(o){
		if(o.attr('compareto')&&!($('#'+o.attr('compareto')).val()==o.val())){
			setError(o);
			return;
		}
		if(o.is('select'))o.css('background-color','#DFFBE1');
		else o.css('background-image','url('+defaultPath+'img/registrazione/input-skin-ok.png)');
		o.closest('li').find('em').css('background-image','url('+defaultPath+'img/registrazione/ok.gif)').qtip('disable');
		if(o.hasClass('val-init')||o.hasClass('val-error')){
			o.removeClass('val-init val-error').addClass('val-ok');
			toValidate--;
		}
	};
	setError = function(o){
		if(o.is('select'))o.css('background-color','#FDDDDD');
		else o.css('background-image','url('+defaultPath+'img/registrazione/input-skin-error.png)');
		o.closest('li').find('em').css('background-image','url('+defaultPath+'img/registrazione/error.gif)').qtip({content:o.closest('li').find('.descrizionecampo span').text()});
		if(o.hasClass('val-init')||o.hasClass('val-ok')){
			o.removeClass('val-init val-ok').addClass('val-error');
			toValidate++;
		}
	};
	setOption = function(o){
		if(o.val()>0){
			o.closest('ul').find('em').css('background-image','url('+defaultPath+'img/registrazione/ok.gif)').qtip('disable');
			toValidate--;
		}else{
			o.closest('ul').find('em').css('background-image','url('+defaultPath+'img/registrazione/error.gif)').qtip({content:'Devi accettare l\'informativa.'});
			toValidate++;
		}
	}
	isValid = function(o){
		if(o.attr('regexpression')&&o.attr('regexpression').length){
			if(o.val().match(o.attr('regexpression')))setOk(o)
			else setError(o);
		}else if(o.is('input[type=radio]')&&(o.val()>''))setOption(o);
		else{
			if(o.val()>'')setOk(o)
			else setError(o);
		}
	};
	if($('#specialeregistrazioneutente').find('.cmxform form').length){
		toValidate = $('.cmxform form').find('input[isrequired=1],select').length;
		$('.cmxform form').find('input[type=radio],input[isrequired=1],select').each(function(i,v){
			$(v).addClass('val-init').blur(function(){isValid($(this))}).keyup(function(){isValid($(this))});
			if($(v).is('input[type=radio]'))$(v).click(function(){isValid($(this))}).addClass('val-init');
		});
		if($('#btnLogin').length){
			window.onload = function(){
				for(var i=100;i<=500;i+=200)setTimeout(function(){$('.cmxform form').find('input[isrequired=1],select').each(function(i,v){if($(v).val()>'')isValid($(v))})},i);
			};
		}else{
			$('.cmxform form').find('input[isrequired=1],select').each(function(i,v){if($(v).val()>'')isValid($(v))});
			$('.cmxform').find('form').removeAttr('onsubmit').find('input:submit').click(function(){
				if(toValidate!=0){
					alert(toValidate+' Compila correttamente tutti i campi prima di continuare');
					return false;
				}
			});
		}
	}
});
