﻿// <reference path="jquery-vsdoc.js" />

//dialog_manager.js
//creato da GA il 20/01/2010
//elenco di funzioni per la creazione, modifica e amministrazione di finestre modali  

function existDialog(_id) {
    _id = _id.replace('#', '');
    
    // Non esiste ancora il div
    if (!jQuery('#' + _id)[0]) {
        return false;
    }

    // Il div è una dialog?
    if (!jQuery('#' + _id).is(':data(dialog)')) {
        return false;
    }
    else {
        return true;
    }
    
//    if (typeof (jQuery('#' + _id).dialog('isOpen')) == "undefined") {
//        return false;
//    }
//    else {
//        return true;
//    }
    
}

// Visualizzo o Creo la dialog
function openDialog(_id, options, _IsIFrame, _html) {
///	<summary>
///	    Funzione JavaScript per la creazione/visualizzazione di dialog jQuery.
///	</summary>
///	<param name="_id" type="String">
///		id del div da trasformare in dialog; se non esiste viene creato
///	</param>
///	<param name="options" type="String()">
///		elenco di opzioni da applicare alla dialog
///	</param>
///	<param name="_IsIFrame" type="Boolean">
///		flag che indica se la dialog contiene o meno un Iframe
///	</param>
///	<param name="_html" type="String">
///		corpo in html della dialog o link di un Iframe (in base al valore del parametro _IsIFrame)
///	</param>


if (!existDialog(_id)) {
        // La dialog non esiste, la creo
        makeDialog(_id, options, _IsIFrame, _html);
        jQuery('#' + _id).dialog('open');
    } else {
        // La dialog esiste, la visualizzo semplicemente
        jQuery('#' + _id).dialog('open');
    }

    //Su IE 7 effettuo uno scroll per riportarmi sulla dialog
    if (jQuery.browser.msie && parseInt(jQuery.browser.version, 10) == 7) {
        window.scrollTo(jQuery('#' + _id).closest('.ui-dialog').offset().left , jQuery('#' + _id).closest('.ui-dialog').offset().top);
    }
    
}

// Creo la dialog da zero settando opzioni e contenuto
function makeDialog(_id, options, _IsIFrame, _html) {
    _id = _id.replace('#', '');
    
    if (!options) {
        options();
    }
    
    if (!options.autoOpen) {
        options.autoOpen = false;
    }
    if (!options.buttons) {
        options.buttons = "";
    }    
    if (!options.bgiframe) {
        options.bgiframe = true;
    }
    if (!options.modal) {
        options.modal = true;
    }
    if (!options.width) {
        options.width = "300";
    } 
    if (!options.height) {
        options.height = "300";
    }
    if (!options.title) {
        options.title = "";
    }
    if (!options.resizable) {
        options.resizable = false;
    }
    if (!options.draggable) {
        options.draggable = false;
    }
    if (!options.position) {
        options.position = ['center', 'center'];
    }
    if (!options.eventOpen) {
        options.eventOpen = function() { };
    }
    if (!options.eventClose) {
        options.eventClose = function() { };
    }
    if (!options.autoResize) {
        options.autoResize = false;
    }

    if (options.closeButton == undefined) {
        options.closeButton = true;
    }
	
	if (options.closeOnEscape == undefined) {
        options.closeOnEscape = false;
    }
    
    //Creo div contenitore
    if (!jQuery('#' + _id)[0]) {
        divString = "<div id='" + _id + "'></div>";
        $('body').append(divString);
    }

    if(_html){  
      if(_IsIFrame){  
        //Creo e inietto l'iframe
        iFrameString = "<iframe src ='" + _html + "' width='100%' height='99%' frameborder='0' allowTransparency='true'></iframe>";
        jQuery('#' + _id).html(iFrameString);
      }else{
        //Inietto direttamente l'html
        jQuery('#' + _id).html(_html);
 	  }  
    }

    //Imposto le opzioni alla dialog
    jQuery('#' + _id).dialog({
        autoOpen: options.autoOpen,
        bgiframe: options.bgiframe,
        modal: options.modal,
        height: options.height,
        width: options.width,
        title: options.title,
        resizable: options.resizable,
        draggable: options.draggable,
        position: options.position,
        open: function() {
            options.eventOpen();
            //Evita che il focus esca dalla finestra modale
            jQuery('#' + _id).bind('keypress.ui-dialog', function(event) {
                if (event.keyCode !== $.ui.keyCode.TAB) {
                    return;
                }
                var tabbables = $(':tabbable', this),
                    first = tabbables.filter(':first'),
                    last = tabbables.filter(':last');

                if (event.target === last[0] && !event.shiftKey) {
                    first.focus(1);
                    event.target.blur();
                    return false;
                } else if (event.target === first[0] && event.shiftKey) {
                    last.focus(1);
                    event.target.blur();
                    return false;
                }
            });
        },
        close: options.eventClose,
        buttons: options.buttons,
        autoResize: options.autoResize,
        closeOnEscape: options.closeOnEscape
    });

    if (options.closeButton == false) {
        jQuery(jQuery(jQuery("#" + _id).prev([0])).find('a')).remove();
    }

    // Se la funzione esiste e ho campi data nella modale li posiziono in maniera assoluta
    if (window.MovePositionAbsolute) {
	    MovePositionAbsolute();
	}
    
      if (options.autoOpen) {
          //Su IE 7 effettuo uno scroll per riportarmi sulla dialog
         if (jQuery.browser.msie && parseInt(jQuery.browser.version, 10) == 7) {
              window.scrollTo(jQuery('#' + _id).closest('.ui-dialog').offset().left, jQuery('#' + _id).closest('.ui-dialog').offset().top);
          }
	}  
}

// Chiudi e distruggi la dialog
function closeDialog(_id) {
    _id = _id.replace('#', '');
    if (existDialog(_id)) {
        jQuery('#' + _id).dialog('destroy');
        jQuery('#' + _id).remove();
    }
}

// Nascondi la dialog
function hideDialog(_id) {
    _id = _id.replace('#', '');
    if (existDialog(_id)) {
        // La dialog esiste, la nascondo
        jQuery('#' + _id).dialog('close');
    }
}

// Cambia il frame della dialog
function changeDialogFrame(_id, _urlIframe) {
    _id = _id.replace('#', '');
    if (existDialog(_id) && _urlIframe) {
        //Creo e inietto l'iframe
        iFrameString = "<iframe src ='" + _urlIframe + "' width='100%' height='99%' frameborder='0' allowTransparency='true'></iframe>";
        jQuery('#' + _id).html(iFrameString);
    }
}

// Cambia il contenuto della dialog
function changeDialogContent(_id, _html) {
    _id = _id.replace('#', '');
    if (existDialog(_id) && _html) {
        //Inietto il nuovo contenuto
        jQuery('#' + _id).html(_html);
    }
}

// Modifica un'opzione
function optionDialog(_id, _option, _html) {
    _id = _id.replace('#', '');
    if (existDialog(_id) && _option && _html) {
        $('#' + _id).dialog('option', _option, _html);
    }
}

// Svuota e resetta i controlli nel contenitore passato a parametro
function clearDialogControls(_id) {
    _id = _id.replace('#', '');
    if (jQuery('#' + _id)[0]) {
        jQuery(':input', jQuery('#' + _id)).each(function() {
            switch(this.type) {
	            case 'password':
	            case 'select-multiple':
	            case 'select-one':
	            case 'text':
	            case 'textarea':
	                $(this).val('');
	                break;
	            case 'checkbox':
	            case 'radio':
	                this.checked = false;
	        }
        });

        //GA - 29/08/2011
        //La gestione della classe errore e' stata spostata per poterne permettere un controllo
		//piu' completo
		jQuery('.errore', jQuery('#' + _id)).each(function() {
		  jQuery(this).removeClass('errore');
		});
    }
}

// crea una modale con dentro un'iframe
function makeFrameDialog(idDivModal, iframe, url, options) {
    jQuery('#' + idDivModal).find('iframe[id=' + jQuery(iframe).attr('id') + ']').remove();
    jQuery(iframe).appendTo(jQuery('#' + idDivModal));
    jQuery('#' + idDivModal).appendTo(document.body);
    makeDialog(idDivModal, options);
    jQuery(iframe).attr('src', url);
}

