﻿var validatePrepareControl; //fn()
var validate; //fn()
var parseValidateElement; //fn()
var SetSelezioneAutomaticaCheckBox; //fn()
var validatePrepareMultiControl;//fn()
var ParentIsDisplayNone; //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){
		$.each(multiControlValidate,function(i,v){
			var bReturn = false;
			$.each(multiControlValidate[v],function(ii,vv){
				if($('#'+vv).attr('checked')||($('#'+vv).parents('fieldset:eq(0)').css('display')=='none'))bReturn = true;
			});
			if(!bReturn){
				if(multiControlValidate[v][0]){
					inlineMsg(multiControlValidate[v][0],'E\' necessario selezionare almeno un valore.',2);
					return false;
				};
			};
		});
		for(var x=0;x<oForm.length;x++){
			var oChild = oForm[x];
			if($(oChild).is(':visible')){
				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.'+(($(oChild).parents('li').find('.descrizionecampo span').text()>'')?' <span style="color:#F00">'+$(oChild).parents('li').find('.descrizionecampo span').text()+'</span>':''),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;  
	};
	ParentIsDisplayNone = function(obj){
		var bReturn = false;
		//if(obj.parent())bReturn=ParentIsDisplayNone(obj.parent());
		return (bReturn||(obj.css('display')=='none'))
	}
	GetControlValue = function(oControl){
		var sReturn = '';
		if(oControl.type=='file') sReturn = oControl.value;
		if((oControl.type=='text')||(oControl.type=='password')||(oControl.type=='textarea')) sReturn = $.trim(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'; 
	}
	//Fix CodLingua
	if(typeof codLingua == 'undefined')codLingua='en';
})(jQuery);
