/**
 * @author Moretti Paolo & Talon Andrea
 */

var jq = jQuery.noConflict();

if (jq.browser.safari && navigator.platform != "Win32")
	document.write('<style type="text/css">@import url("css/safari-fix.css");</style>');

var Edi = {
	
	menuDelayTime: 100,
	resetMenu: function() 
	{
		jq('#menuPrimoLiv ul:first a').removeClass("hover");
	},
	
	showHelp: function(id)
	{
	//~ jq(id).toggle();
	},
	setTooltipSkin: function()
	{
		jq('.tooltip-opener').removeAttr("href");
		if (jq('.tooltip-opener').size() > 0)
			jq('.tooltip-opener').each(function() {
				jq(this).removeAttr("href").unbind("click").bind("click", function() {
					if (jq(this).attr("rel")) {
						var tt = jq('#' + jq(this).attr("rel"));
						jq(tt).css({
							position: "absolute",
							top: (jq(this).offset().top - 125),
							left: (jq(this).offset().left - jq(tt).width() - 30),
							visibility: "visible",
							zIndex: 99999
						});
						jq("body").append(jq(tt));
						
						jq(tt).toggle();
					}
					else 
						alert("Funzionalita' non attiva");
				});
			})	
	},
	
	setSkin: function() 
	{
		/*
		 * SELECT
		 */
		
		/* Calendars */
		jq(".calendar-input").each(function() {
			jq(this).datepicker({
				dateFormat: 'dd/mm/yy'
			});
		})
		
		/* Print button */
		jq('.print-button').each(function() {
			jq(this).unbind("click").bind("click", function() { window.print(); });
		});
		
		/* Datagrid dimension */
		if (jq('.data-grid-rows').height() > 260) 
			jq('.data-grid-rows').height(260)
			
		/* Help tooltip 
		jq('.widget-help').removeAttr("href");
		if (jq('.widget-help').size() > 0)
			jq('.widget-help').unbind("click").bind("click", function() {
				jq('#helpDescription').toggle();
			})
		*/
		this.setTooltipSkin();
		jq('.tooltip-opener').removeAttr("href");
		if (jq('.tooltip-opener').size() > 0)
			jq('.tooltip-opener').each(function() {
				jq(this).removeAttr("href").unbind("click").bind("click", function() {
					if (jq(this).attr("rel")) {
						var tt = jq('#' + jq(this).attr("rel"));
						jq(tt).css({
							position: "absolute",
							top: (jq(this).offset().top - 125),
							left: (jq(this).offset().left - jq(tt).width() - 30),
							visibility: "visible",
							zIndex: 99999
						});
						jq("body").append(jq(tt));
						
						jq(tt).toggle();
					}
					else 
						alert("Funzionalità non attiva")
				});
			})
		
		jq(".data-grid-row").hover(
			function() {
				jq(this).addClass("hover");
			},
			function() {
				jq(this).removeClass("hover");
			}
		);
		
		
	  
		/* Main menu settings */
		jq('#menuPrimoLiv ul:first a').each(function(j, item) {
			jq(item).parent().hover(
				function() {	// Mouseover
					Edi.resetMenu();
					Edi.menuItemHover = jq(item);
					jq(item).addClass("hover");
					jq('#menuSub p').remove();
					jq('#menuSub').append(jq(item).parent().find('span.description').html()).attr("close", "false").show();
					jq('#menuSubArrow').css("left", (jq(item).parent().position().left + (jq(item).parent().width() / 2) - jq('#menuSubArrow').width() / 2))
				},
				function() {	// Mouseout
					jq('#menuSub').attr("close", "true");
					setTimeout(function() {
						if (jq('#menuSub').attr("close") == "true") {
							Edi.resetMenu();
							jq('#menuSub').hide();
						}
					}, Edi.menuDelayTime);
				}
			);
		});
		jq('#menuSub').hover(
			function() {
				Edi.menuItemHover.addClass("hover");
				jq(this).attr("close", "false")
			},
			function() {
				jq('#menuSub').attr("close", "true");
				setTimeout(function() {
					if (jq('#menuSub').attr("close") == "true") {
						jq('#menuSub').hide();
						Edi.resetMenu();
					}
				}, Edi.menuDelayTime);
			}
		);
		
	  
		/* DIV select like */
		jq('.div-select').each(function() {
			jq(this).unbind("click").bind("click", function() {
				jq(this).css("overflow", (jq(this).css("overflow") == "visible" ? "hidden" : "visible"));
			});
			if (jq(this).hasClass("absolute-right")) {
				jq(this).parent().css("position", "relative");
				jq(this).css({
					position: 'absolute',
					top: '-4px',
					right: '10px'
				});
			}
		});
		
		/* EMERGENZA GAS */
		jq('.skin-select').linkselect();
		/*
		jq.ajax({
			url: 'js/dati_min.xml', 
			success: function(data) {
				$(data);
			}
		});
		*/
		
		
		jq('#sel_regione_list span').each(function() {
			jq(this).unbind("click").bind("click", function() {
				/* Reset */
				jq('#sel_provincia').linkselect("replaceOptions", [{value: '-', text: ' Caricamento... '}]);
				jq('#sel_citta').linkselect("replaceOptions", [{value: '-', text: ' - seleziona la citt&agrave; - '}]);
				var reg = jq(this).parent().attr('rel');
				
				jq.ajax({
					url: 'xml/'+reg+'.xml',
					dataType: "text/xml", //(jq.browser.msie) ? "text" : "xml",
					error: function(XMLHttpRequest, textStatus, errorThrown) {
						alert(XMLHttpRequest)
						alert(textStatus)
						alert(errorThrown)
					},
					success: function(data) {
						var xml;
						var added_prov = new Array();
						var options = [ {value: 0, text: " - Seleziona provincia - "} ];
						if (typeof data == "string" && jq.browser.msie) {
							xml = new ActiveXObject("Microsoft.XMLDOM");
							xml.async = false;
							xml.loadXML(data);
						} else {
							xml = data;
						}
						jq(xml).find("Row").each(function(j) {
							var prov_key = jq(this).find("Cell:eq(1) Data:first").text();
							if (jq.inArray(prov_key, added_prov) == -1) {
								added_prov.push(prov_key);
								options.push({ value: prov_key, text: prov_key });
							}
						});
						jq('#sel_provincia').linkselect("replaceOptions", options);
						jq('#sel_provincia_list span').each(function() {
							
							jq(this).unbind("click").bind("click", function() {
								jq('#sel_citta').linkselect("replaceOptions", [{value: '-', text: ' Caricamento... '}]);
								var prov = jq(this).parent().attr('rel');
								
								var com = new Array({ value: "-", text: " - Seleziona il comune - " });
								var added_com = new Array();
								jq(xml).find("Row").find("Cell:eq(1) Data").each(function() {
									if (jq(this).text() == prov) {
										var com_key = jq(this).parents("Row").find("Cell:eq(2) Data:first").text();
										if (jq.inArray(com_key, added_com) == -1) {
											added_prov.push(com_key);
											com.push({
												value: com_key,
												text: com_key
											});
										}
									}
								});
								jq('#sel_citta').linkselect("replaceOptions", com);
								
								jq('#sel_citta_list span').unbind("click").bind("click", function() {
									var soc = '';
									var ser = jq(this).text();
									jq(xml).find("Row").find("Cell:eq(2) Data").each(function() {
										if (jq(this).text() == ser) {
											var rr = jq(this).parents("Row");
											jq().each(function(){
												soc += '<label class="green"><strong>RISULTATI</strong></label><p>' + rr.find("Cell:eq(3) Data:first").text() + '<br />Tel: <strong class="green">' + rr.find("Cell:eq(4) Data:first").text() + '</strong></p><br />';
											})
										}
									})
									jq('#gas_search_result').empty().html(soc);
								});
								
							});
						});
					},
					complete: function(data) {
						//
					}
				});
				
			});
		});
	}
	
}

jq(document).ready(function() {
	
	
		/* IE6 png fix */
		if (jq.browser.msie && jq.browser.version < 7) {
			jq('img').each(function(j, i){
				if (jq(this).attr('src').indexOf('.png') > -1) {
					DD_belatedPNG.fixPng(i);
				}
			});
			DD_belatedPNG.fix('.png-bkg');
		}
		
	  
	
	Edi.setSkin();
		
});
  
function parseXml(xml)
{
	if (jQuery.browser.msie)
	{
		var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.loadXML(xml);
		xml = xmlDoc;
	}
	return xml;
}


function client_remove(el)
{
  ref = jq(el).parent().children('label').text();
  labels = jq('.ws-list ul li');
  labels.each(function(i,val){
    if(jq(labels[i]).children('label').text() == ref) jq(labels[i]).children('input').attr('checked',false);
  });
  jq(el).parent().remove();
  checkout();
  return false;
}


jq(document).ready(function() {
	  
  /* HELP form */
  jq('.form-help').hide();
  jq('.form-help.alarm').show();
  jq('.btn_help').unbind("click").bind("click", function(){
    jq(this).parent().next().toggle();
  });
	
  
  /* DIALOG */
  jq('.form-btn').unbind("click").bind("click", function(){
    jq('#dialog').dialog({
        resizable: true,
        modal: true,
        width: 500,
        height: 350,
        overlay: { backgroundColor: "#fff", opacity: 0.5 }
        //~ buttons: { "Close": function() { $(this).dialog("close"); } },
        //~ close: function(ev, ui) { $(this).remove();}
    });
  });
  jq('#close_dialog').unbind("click").bind("click", function(){
    jq('#dialog').dialog('close');
  });
  
  
  /* WIDGET SHARE */
  jq('.ws-list ul li input[type=checkbox]').click(function(){
    if(jq(this).is(':checked')){
    	checkin();
      jq('.ws-selected ul').append('<li><a rel="'+jq(this).parent().children("label").text()+'" href="#" title="Cancel" onclick="client_remove(this); return false;"><img src="/i/btn_cancel.gif" alt="Cancel" /></a> <label>'+ jq(this).parent().children('label').text() +'</label></li>');
    }else {
    	checkout();
      jq('.ws-selected ul li a[rel='+jq(this).parent().children('label').text()+']').parent().remove();
    }
  }).next('label').hover(
    function(){jq(this).css({'cursor':'pointer','color':'#093'})},
    function(){jq(this).css({'cursor':'default','color':'#888'})}
  );
  
  
  /* SLIDER */
  //~ jq('.slider').slider({
    //~ range: 'min',
    //~ min: 0,
    //~ max: 100,
    //~ value: 60,
    //~ animate: true,
    //~ orientation: 'vertical',
    //~ change: function(e, ui){
      //~ var maxScroll = jq('.slided').attr('scrollHeight') - jq('.slided').width();
      //~ jq('.slided').animate({scrollBottom: ui.value * (maxScroll / 100) }, 1000);
    //~ },
    //~ slide: function(e, ui){
      //~ var maxScroll = jq('.slided').attr('scrollHeight') - jq('.slided').width();
      //~ jq('.slided').attr({scrollBottom: ui.value * (maxScroll / 100) });
    //~ }
  //~ });

  
});

function hideElement(idElement) {
	document.getElementById(idElement).style.visibility= "hidden";
}

jq(document).ready(function() {
	try {
		if (reg_check_elements == null || reg_check_elements === undefined ) return;
	} catch (err) {
	    return;
		// reg_check_elements non esiste oppure c'e' stato un errore durante l'esecuzione delle 
		// righe all interno del try. In caso di errore non faccio niente.
	}		
		var iC = 0;
		var alertRequiredField	= 'Il campo richiesto &egrave; obbligatorio.';
		var alertMsgLengthPref	= 'Il campo deve contenere almeno ';
		var alertMsgLengthSuff	= ' caratteri.';
		var alertMsgFixLengthPref = 'Il campo deve contenere ';
		var alertMsgFixLengthMiddle = ' oppure ';
		var alertMessageLength	= 'Lunghezza del campo non corretta.';
		var alertMessageFormat	= 'Formato campo errato';
		var alertMessageDifferent = 'Il campo di conferma differisce dal precedente';
		var checkRegEvento = "blur";
		
		/*
		 * Rimuovo il bind dai pusanti help. 
		 * Qui lo aggiungero man mano che creo i campi.
		 */

		while (iC < reg_check_elements.length) {
			elem_curr = reg_check_elements[iC];
		
			var elem_id   = "#" + elem_curr['id'];	
			var $mioElem = jq(elem_id);	
			var elemDivContainer = $mioElem.parent();
			var elemImg = $mioElem.siblings('img:first');
			var elemDivErrorContainer = elemDivContainer.next('div');

            // creo una copia del messaggio informativo, se serve, e lo posiziono prima del messaggio di help.
			var errorMessage = null;
			var appendErrorMessageObj = false;
			if(elemDivErrorContainer != null 
				&& elemDivErrorContainer !== undefined 
				&& elemDivErrorContainer.hasClass("alarm")) {
					errorMessage = elemDivErrorContainer;
			} else {
				errorMessage = elemDivErrorContainer.clone();
				appendErrorMessageObj = true;
			}
			
			if(appendErrorMessageObj) {
				errorMessage.find('div.form-help-int:first').html("errore generico");
				errorMessage.addClass("hide");
				elemDivErrorContainer.before(errorMessage);
			}
			var helpMessageFirst = elemDivContainer.next("div:first").next("div:first");
//			console.log("setto il check per : " + elem_id);
			// 
			/**
			 * Rifaccio il bind sull'immagine di help se esiste per non impattare 
			 * altre possibili funzionalita' non legate ai check di registrazione.
			 */
			
			if(elemImg != null 
				&& elemImg !== undefined 
				&& elemImg.length > 0 
				&& !elemImg.hasClass("btn_alarm")) {
				jq(elemImg).unbind("click").bind("click", function() {
				    jq(this).parent().next().next().toggle();
				});
			}
			
            // per ogni elemento definisco le operazioni da effettuare al blur (checkRegEvento)
			jq(elem_id).bind(checkRegEvento, function(e){

                
				var $mioElem = jq(e.target); // elemento da cui si parte (inputbox)
				// prelevo i controlli da effettuare sul contenuto del campo.
				var elem_curr = getJSONObject(reg_check_elements, $mioElem.attr('id'));
				var elem_isRequired  = elem_curr['required']=='y';
				var elem_validation_rules = elem_curr['validation'];

				var testo = $mioElem.attr('value');
                testo = (testo == null || testo === undefined) ? '' : testo;

// codice di esempio da prendere come riferimento
/*          <div class="form-voice">Codice di accesso</div>
              <div class="form-input">
   --->        <input type="text" class="form-input-text-big" id="CheckUserCode_datiUtente_codiceAccesso" value="" size="40" name="datiUtente.codiceAccesso">
	        	&nbsp;<img class="btn_help" src="/i/btn_help.gif" alt="btn_help">
              </div>
            
           <div class="form-help" style="display: none;"><div class="form-help-int">
                    Il Codice di Accesso coincide con il POD per i contratti di Energia Elettrica e con il PDR per i contratti gas.<br>
                    Puoi trovarlo sulla tua bolletta di energia, sul contratto e nel messaggio di accettazione del contratto che ti è stato inviato da Edison Energia.
                </div></div><div class="form-help hide" style="display: none;"><div class="form-help-int">errore generico</div></div>
            <div class="cl"></div>

*/
				var elemDivContainer = $mioElem.parent();	//div.form-input	
				var elemImg = $mioElem.siblings(':first');  //img.btn_help
				
				var elemDivErrorContainerJs = elemDivContainer.next('div.form-help:first');  // elemento con l'errore
				var helpMessage = elemDivErrorContainerJs.next('div.form-help:first'); // div con il messaggio informativo
				var elemDivErrorMessage = elemDivErrorContainerJs.find('div.form-help-int:first');

                // Check della validitÂˆ degli elementi
				var isErrorField = false;
                var errorMsg = "";
                
                var validObj = {isErrorField:false, errorMsg:""};
                
				if (elem_isRequired && testo.length == 0) {
                        validObj['isErrorField'] = true;
						validObj['errorMsg'] = alertRequiredField;
				}
				
				if (!validObj['isErrorField']){

                    for (var i=0;i<elem_validation_rules.length; i++){
                        var validationObject = elem_validation_rules[i];
                        validObj = checkErrorField(testo, validationObject);
                

                        if (validObj['isErrorField']){
                            break;
    		            }
   		                
        	        }// for

                }
                elemDivErrorMessage.html(validObj['errorMsg']);
                updateCheckField(validObj['isErrorField'], elemDivContainer, elemImg, helpMessage, elemDivErrorMessage);
			});
			

			//checkLengthForElement(elem_id,elem_len);
			iC++;
		}

});



function checkErrorField(objValue, validationObject) {
    var validationReturn = {isErrorField:false, errorMsg:""};
    var elem_action = validationObject['action'];
    
				if( elem_action !== undefined ) {
					switch(elem_action) {
						case 'equalto':
            				var elem_equalto  = validationObject['equalto'];
            				
				            // il valore del campo deve essere uguale a quello presente in equalto
                			if (objValue != jq('#'+elem_equalto).val()){
                                validationReturn['isErrorField'] = true;
				            }
                            
		    				break;
						case 'interval':
            			    var elem_minlen = validationObject['minlen'];
			            	var elem_maxlen = validationObject['maxlen'];
							// se il testo è minore della lunghezza stabilita
							if (objValue.length < elem_minlen || objValue.length > elem_maxlen){
                                validationReturn['isErrorField'] = true;
                            }
	    					break;
						
						case 'fixedlength':
            			    var elem_minlen = validationObject['minlen'];
			            	var elem_maxlen = validationObject['maxlen'];
							// se il testo e' diverso dalle lunghezze stabilite
							if (objValue.length != elem_minlen && objValue.length != elem_maxlen) {
                                validationReturn['isErrorField'] = true;
							}
    						break;
						case 'fixedlengthmn':
            			    var elem_minlen = validationObject['minlen'];
			            	var elem_maxlen = validationObject['maxlen'];
							// se il testo e' diverso dalle lunghezze stabilite
							if (objValue.length != elem_minlen) {
                                validationReturn['isErrorField'] = true;
							}
						    break;
						case 'regex':
            				var elem_regex  = new RegExp(validationObject['regex']);
        				    if (!elem_regex.test(objValue)) {
                                validationReturn['isErrorField'] = true;
	    	        		}
		    				break;
					}
				}
    
        
    if (validationReturn['isErrorField']) validationReturn['errorMsg'] = validationObject['errorMsg'];

    return validationReturn;
}

function getJSONObject(elements, idSelected){
	var returnObj = null;
	var elem;
	for (var ctl in elements){
		elem = elements[ctl];
		if (elem['id'] == idSelected){ returnObj = elem;break;}
	}
	return returnObj;
}

/**
				elemDivContainer	//div.form-input	
				elemImg             // img.btn_help
				helpMessage         div.form-help:1
				errorMessage        div.form-help:2


*/
function updateCheckField(isErrorField, elemDivContainer, elemImg, helpMessage, errorMessage){
	
	if (isErrorField){
        // aggiungo la classe alarm alla inputbox
    	if (!elemDivContainer.hasClass('alarm'))
	           elemDivContainer.addClass('alarm');

        // se non esiste l'immagine l'aggiungo con classe btn_alarm e  src= btn_alarm.gif
        // e l'accodo alla inputbox
    	if (elemImg == null || elemImg === undefined || elemImg.length == 0) {
	    	elemImg = jq('<img/>');

		    elemImg.attr({alt:"nohelp"});
		    
		
	    	jq(elemDivContainer).append(elemImg);
	    }
	    
	    elemImg.unbind('click');
	    // setto src e class nel caso esista e sia btn_help
        elemImg.attr({ 'class' :"btn_alarm", src:"/i/btn_alarm.gif", style:'cursor:default;'});
	    
	    // evidenzio il contenitore dell'errore
	    var elemDivErrorContainer = errorMessage.parent();
    	if (!elemDivErrorContainer.hasClass('alarm')) elemDivErrorContainer.addClass('alarm');
    	elemDivErrorContainer.attr({style: 'display:block;'});
    	if (errorMessage.hasClass("hide")) errorMessage.removeClass("hide");				


	} else {
	
        // aggiungo la classe alarm alla inputbox
    	if (elemDivContainer.hasClass('alarm'))
	           elemDivContainer.removeClass('alarm');

        // se esiste l'immagine l'aggiungo con classe btn_alarm e  src= btn_alarm.gif
        // e l'accodo alla inputbox
    	if (elemImg != null && elemImg !== undefined && elemImg.length > 0){
    	    if (elemImg.attr("alt") == "nohelp") {
			    jq(elemImg).remove();
			    elemImg=null;
			} else {
        		elemImg.attr({alt:"", "class":"btn_help",src:"/i/btn_help.gif", style:''});
                jq(elemImg).unbind("click").bind("click", function(){
                    helpMessage.toggle();
                });
	        		
			}
		}
			
	    // evidenzio il contenitore dell'errore
	    var elemDivErrorContainer = errorMessage.parent();
	    
    	if (elemDivErrorContainer.hasClass('alarm')) elemDivErrorContainer.removeClass('alarm');
    	elemDivErrorContainer.attr({style: 'display:none;'});
    	if (!errorMessage.hasClass("hide")) errorMessage.addClass("hide");				
 
	
		
    }
	    	
}


/**
 * Se l'elemento con id passato in input esiste 
 * lo rende invisibile.
 */
function chiudi(/**String*/objId) {
	var obj2hide = document.getElementById(objId);
	if(obj2hide != null && obj2hide !== undefined) {
		obj2hide.style.display= "none";
	}
}

//------------- Validazione campi Delega ------------------------------------------------------------>
jq(document).ready(function() {
	try {
	
		if (deleghe_check_elements == null || deleghe_check_elements === undefined ) return;
	} catch (err) {
	    return;	
	}	
	
	var alertRequiredField	= 'Il campo richiesto &egrave; obbligatorio.';
	var alertMsgLengthPref	= 'Il campo deve contenere almeno ';
	var alertMsgLengthSuff	= ' caratteri.';
	var alertMsgFixLengthPref = 'Il campo deve contenere ';
	var alertMsgFixLengthMiddle = ' oppure ';
	var alertMessageLength	= 'Lunghezza del campo non corretta.';
	var alertMessageFormat	= 'Formato campo errato';
	var alertMessageDifferent = 'Il campo di conferma differisce dal precedente';
	
	var iC=0;
	while(iC < deleghe_check_elements.length){
		elem_curr = deleghe_check_elements[iC];		
		var elem_id   = "#" + elem_curr['id'];
		
		var elem = jq(elem_id);
		
		//elem.parent().siblings().html();
		
		elem.bind("blur",function(e){
						var $mioElem = jq(e.target); // elemento da cui si parte (inputbox)
						// prelevo i controlli da effettuare sul contenuto del campo.
						var elem_curr = getJSONObject(deleghe_check_elements, $mioElem.attr('id'));
						var elem_isRequired  = elem_curr['required']=='y';
						var elem_validation_rules = elem_curr['validation'];
			
						var testo = $mioElem.attr('value');
			            testo = (testo == null || testo === undefined) ? '' : testo;
			
			//codice di esempio da prendere come riferimento
			/*
			          <img width="20" src="/i/ico_alert_small.gif" alt="Alert">
			   	      <span class="riep-alert red">Il campo richiesto è obbligatorio.</span>
			
			*/
					
			           
						var isErrorField = false;
            var errorMsg = "";            
            var validObj = {isErrorField:false, errorMsg:""};
			            
						if (elem_isRequired && testo.length == 0) {
			      	validObj['isErrorField'] = true;
							validObj['errorMsg'] = alertRequiredField;
						}
						
						if (!validObj['isErrorField']){
										
										if(elem_validation_rules !== undefined)
			                for (var i=0;i<elem_validation_rules.length; i++){
			                    var validationObject = elem_validation_rules[i];
			                    validObj = checkErrorField(testo, validationObject);
			            
			
			                    if (validObj['isErrorField']){			                    	
			                        break;
					                }
					                
			    	          }// for
			
			      }
			      
			     
							setDelegheErrorMessage(validObj['isErrorField'],$mioElem,	validObj['errorMsg']);				      	
			     
			          
					});//--------------------------------->
					
			
					
					iC++;
		}
			
						
				
	
	
});

function setDelegheErrorMessage(error,elem,errorMessage){
	if(error)
		elem.parent().parent().next().children(':last').html(' <img width="20" src="/i/ico_alert_small.gif" alt="Alert"><span class="riep-alert red">'+errorMessage+'</span>');
	else
		elem.parent().parent().next().children(':last').html('');
	
}

//------------- End Validazione campi Delega ------------------------------------------------------------>