/*****************************************************************************/
/*  Applicativo RGSPTF-FO                                                    */
/*  libreria funzioni javascript                                             */
/*****************************************************************************/

/*******************************************/
/** IMPLEMENTAZIONE DELLE LIBRERIE JQUERY **/
/** logica di comportamento/business      **/
/*******************************************/


;(function($){

$(document).ready(function(){

    /************************** password strength ****************************/
    if ($('#password') != null) {
        $('#password').pstrength();
    }
    
    /************************** username checker ****************************/
    var typeWatchOptions = {
        callback:function(){ checkUsernameAvailability(); },
        wait:750
    };
    
    if ($("#username") != null) {    
        $("#username").typeWatch(typeWatchOptions); // Watch for when typing is finished in the username field.
    }
    
    //does the AJAX username lookup
    function checkUsernameAvailability() {
        
        var objRegExp=/^[\w\.\-_]+$/i; // i soli caratteri consentiti
        var minL = 4;
        var maxL = 19;
        //alert(objRegExp.test($('#username').val()));
        if ( 
                $('#username').val().length > minL  && 
                $('#username').val().length < maxL && 
                objRegExp.test($('#username').val())
            ) {
        
            $('#usernameAvailability').removeClass().addClass('messagebox').text('verifica disponibilita\'...').fadeIn("slow");
            //Do an AJAX request to see if the username is available.
    
            $.get("/registrazione/pages/usernameChecker.jsp",{username: $('#username').val() } ,function(data) {
                // alert("Data Loaded: " + data);
                if(data == 1) {
                    //start fading the messagebox
                    $('#usernameAvailability').fadeTo(200,0.1,function()  {
                        // add message and change the class of the box and start fading
                        $(this).html('username non disponibile').addClass('messageboxerror').fadeTo(900,1);
                    });
                } else if (data == 0){
                    //start fading the messagebox
                    $('#usernameAvailability').fadeTo(200,0.1,function()  {
                        // add message and change the class of the box and start fading
                        $(this).html('username disponibile').addClass('messageboxok').fadeTo(900,1);
                    });
                } else {
                        // reset fields
                        $('#usernameAvailability').removeClass().text('');
                }
            });  // END get 
        
        } else {
            $('#usernameAvailability').removeClass().addClass('messagebox').text('username non valido').fadeIn("slow");
            
        } // END if controlli formali
    } // END checkUsernameAvailability()
}); // END document.ready

})(jQuery); // END closure




/*****************************************************************************/
/*  caricamento lista comuni                                                 */
/*****************************************************************************/

var url_base = 'pages/getElencoComuni.jsp'; 
var req;
var old_value_combobox  = "";       
var old_name_combobox   = "";       
var is_onclick_combobox = false;    
var switchOptionsComune = '';

// funzione che viene chiamata quando la select riceve il focus
function inFocus(oggetto) {
	old_value_combobox  =   oggetto.value;
	old_name_combobox   =   oggetto.name;
}

function lostFocus(oggetto, submitName, submitValue, nameOptionsComune) {
    
	if ( old_value_combobox!=oggetto.value && old_name_combobox==oggetto.name ) {
		var supportoObjXml = checkObjXml(); // verifico il supporto dell'oggetto XMLHttpRequest
		if (supportoObjXml != 'false') {	
			popolaSelectComuni(oggetto.value, nameOptionsComune);	// AJAX
		} else {
			ricaricaPagina();
		}
	}
}

function onCBClick(oggetto, submitName, submitValue, nameOptionsComune) {

	var form = document.forms[0];
	var url = form.action;

	if( is_onclick_combobox === true ) {
		is_onclick_combobox = false;
		lostFocus(oggetto, submitName, submitValue, nameOptionsComune);
		old_value_combobox = oggetto.value;
		old_name_combobox = oggetto.name;
	} else {
		is_onclick_combobox = true;
	}
}
 
/*  gestione oggetto XMLHttpRequest */ 

// controllo che sia supportato l'oggetto XMLHttpRequest
function checkObjXml() {
    var xmlhttp; 
    /*@cc_on @if (@_jscript_version >= 5) 
    try { 
        xmlhttp = true;
    }
    catch (e) { 
        try { 
            xmlhttp = true;
        } catch (E) { 
            xmlhttp = false; 
        } 
    } @else xmlhttp = false; @end @*/
    
    if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
        try { 
            xmlhttp = true;
        } 
        catch (e) { 
            xmlhttp = false; }
        }
        return xmlhttp; 
}

// istanza oggetto XMLHttpRequest (IExplorer, Gecko)
function loadXMLDoc(url) {
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChange;
        req.open("GET", url, true);
        req.send(null);
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");

        if (req) {
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send();
        }
    } 
}

// chiamata HTTP lato server
function popolaSelectComuni(input, nameOptionsComune) {
    var url  = url_base + '?idProvincia=' + input;
    switchOptionsComune = nameOptionsComune;
    loadXMLDoc(url);
}


// gestione stato di ritorno chiamata HTTP
function processReqChange() {
    switch(req.readyState) {
        
        case 1:
            onLoading();
            break;
        case 2:
            onLoaded();
            break;
        case 3:
            onLoaded();
            break;
        case 4:
            // only if "OK"
            if (req.status == 200) {
                // ...processing statements go here...
                response  = req.responseXML.documentElement;
                //alert(response);
                loadComuni(response);
            } else {
                //alert("Errore lettura elenco comuni. Disabilitare il javascript nelle impostazioni del browser.")
				//popolaSelectComuni(oggetto.value, nameOptionsComune);
            }
            break;
    }
}

function onLoaded(){
    //document.getElementById("loading").style.display = "none";
}
function onLoading(){
    //document.getElementById("loading").style.display = "block";
}


// parsing XML + valorizzazione select comuni
function loadComuni (response) {

    var comuni  = response.getElementsByTagName('comune');
    var numcomuni = (comuni.length);
    var id;
    var descrizione;
    var form = document.forms[0];
    var objOptions;
    
    if (switchOptionsComune == 'idComune'){
    	objOptions = form.idComune;
    } else if (switchOptionsComune == 'idComuneDomicilio'){
    	objOptions = form.idComuneDomicilio;
    } else if (switchOptionsComune == 'idComuneResidenza'){
    	objOptions = form.idComuneResidenza;
   	} else {
   		objOptions = form.idComune;
   	}
    
    // reset options
    while (objOptions.options.length > 0) {
        objOptions.options[0] = null;
    }

    for (var a = 0; a < numcomuni; a++) {
        id = comuni.item(a).getAttribute('id');
        descrizione = comuni.item(a).getAttribute('descrizione');
        var newOption = new Option(descrizione, id);
        objOptions.options[a] = newOption;
    }
    
}




