// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

function onlyDigit(e) {
    if(window.event) // IE
    {
        keynum = e.keyCode;
    }
    else if(e.which) // Netscape/Firefox/Opera
    {
        keynum = e.which;
    }

    if(((keynum < 48) || (keynum > 57)) && (keynum != 8 ))
        return false;
    else
        return true;
} 
/*
 * This currently requires prototypejs but could be easily modified to not depend on it.
 * To enable it on some element do something like this:
 *   checkbox.setGreyable();
 *
 * To check if it is greyed or not:
 * if (checkbox.greyed) {
 *   alert("This checkbox is greyed");
 * }
 *
 * You can also change the state of the checkbox when it is greyed.
 * To set this use the following:
 *   checkbox.setGreyState(true);
 */
Element.addMethods("INPUT", (function()  {
    var changeHandler = function(e) {
        //        if (this.greyed || this.checked) {
        //            this.setGreyed(!this.greyed);
        //            if (!this.greyed) {
        //                this.checked = true;
        //            }
        //        }
        if (this.greyed) {
            this.setGreyed(false);
            this.checked = false;
        } else if (!this.checked) {
            this.setGreyed(true);
        }
        try {
            this.changeCallback()
        } catch(err){};
    };
    /*
 * To use it you'll first have to create a Date object and then invoke the method.
 * The usage mirrors the setTime method provided by the standard JavaScript Date object.
 *
 *  var date = new Date();
 *  date.setISO8601("2005-03-26T19:51:34Z");
 */
    Date.prototype.setISO8601 = function (string) {
        var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
        "(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
        "(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
        var d = string.match(new RegExp(regexp));

        var offset = 0;
        var date = new Date(d[1], 0, 1);

        if (d[3]) {
            date.setMonth(d[3] - 1);
        }
        if (d[5]) {
            date.setDate(d[5]);
        }
        if (d[7]) {
            date.setHours(d[7]);
        }
        if (d[8]) {
            date.setMinutes(d[8]);
        }
        if (d[10]) {
            date.setSeconds(d[10]);
        }
        if (d[12]) {
            date.setMilliseconds(Number("0." + d[12]) * 1000);
        }
        if (d[14]) {
            offset = (Number(d[16]) * 60) + Number(d[17]);
            offset *= ((d[15] == '-') ? 1 : -1);
        }

        offset -= date.getTimezoneOffset();
        time = (Number(date) + (offset * 60 * 1000));
        this.setTime(Number(time));
    }
    
    function setGreyed(checkbox, greyed) {
        checkbox.greyed = typeof greyed == "undefined" ? true : !!greyed;
        if (checkbox.greyed) {
            checkbox.checked = checkbox.greyedState;
            checkbox.setOpacity(0.33);
        } else {
            checkbox.setOpacity(1);
        }
        try {
            checkbox.changeCallback()
        } catch(err){};
    }

    function setGreyable(element, enable, changeCallback) {
        if (!(element = $(element))) return(element);
       
        if (!(/checkbox|radiobutton/i.test(element.type))) {
            return(element);
        }

        if (typeof element.greyedState == "undefined" || enable) {
            element.observe("click", changeHandler);
            element.setGreyState(false);
            element.setGreyed(false);
            element.changeCallback = changeCallback;
        } else {
            element.stopObserving("change", changeHandler);
            element.setGreyed(false);
            element.checked = element.greyedState;
            element.greyedState = undefined;
            element.greyed = undefined;
        }
        
        return(element);
    }

    function setGreyState(element, greyedState) {
        if (!(element = $(element))) return;
       
        if (!(/checkbox|radiobutton/i.test(element.type))) {
            return;
        }

        element.greyedState = typeof greyedState == "undefined" ? true :
        !!greyedState;
    }

    return {
        setGreyed: setGreyed,
        setGreyable: setGreyable,
        setGreyState: setGreyState
    }
})());

//---------------------
// The function insertAtCursor is modified version of code from
// PHPMyAdmin.  PHPMyAdmin is GPLed, so copyright for this is fine.
//
// (IE and Mozilla code both modified to leave cursor position correct after
//  insert.)
//
function insertAtCursor(myField, myValue)
{
    //IE support
    if (document.selection)
    {
        myField.focus();
        sel = document.selection.createRange();
        sel.text = myValue;
        sel.select();
    }
    //MOZILLA/NETSCAPE support
    else if (myField.selectionStart || myField.selectionStart == '0')
    {
        var startPos = myField.selectionStart;
        var endPos = myField.selectionEnd;
        var newEndPos = startPos + myValue.length;
        myField.value = myField.value.substring(0, startPos)
        + myValue
        + myField.value.substring(endPos, myField.value.length);
        myField.setSelectionRange(newEndPos, newEndPos);
    }
    else
    {
        var newEndPos = myField.value.length + myValue.length;
        myField.value += myValue;
        myField.setSelectionRange(newEndPos, newEndPos);
    }
}

function remove_fields(link) {
    $(link).previous("input[type=hidden]").value = "1";
    $(link).up(".fields").hide();
}

function add_fields(link, association, content) {
    var new_id = new Date().getTime();
    var regexp = new RegExp("new_" + association, "g");
    $(link).up().insert({
        before: content.replace(regexp, new_id)
    });
}

function maiuscoloPlus(evt) {
    var keynum=8;
    var strNew='';
    var element;
    if(window.event) // IE
    {
        keynum = window.event.keyCode;
        element = window.event.srcElement;
    }
    else if(evt.which) // Netscape/Firefox/Opera
    {
        keynum = evt.which;
        element = evt.element();
    }

    if(keynum>32) { // solo per caratteri non speciali
        //disabilita il carattere originariamente premuto
        if(window.event) // IE
            Event.stop(window.event);
        else // Netscape/Firefox/Opera
            evt.stop();
        if (keynum >= 65 && keynum<=90) // A-Z
            strNew=String.fromCharCode(keynum);
        else if (keynum >= 97 && keynum<=122) //a-z
            strNew=String.fromCharCode(keynum-32);
        else if (keynum >= 48 && keynum<=57) //0-9
            strNew=String.fromCharCode(keynum);
        else if ('-.&\''.include(String.fromCharCode(keynum))) //caratteri ammessi
            strNew=String.fromCharCode(keynum);
        else // caratteri da sostituire
            switch(keynum) {
                //	case 39: // ' -> `
                //		 strNew="`";
                //  	 break;
                case 232: // Ã¨
                case 233: // Ã©
                    strNew="E'";
                    break;
                case 224: // Ã 
                    strNew="A'";
                    break;
                case 236: // Ã¬
                    strNew="I'";
                    break;
                case 242: // Ã²
                    strNew="O'";
                    break;
                case 249: // Ã¹
                    strNew="U'";
                    break;
            }
        // immette il/i carattere/i modificato/i
        if (strNew!='') insertAtCursor(element, strNew);
        return false; //disabilita il carattere originariamente premuto
    } else
        return true; //lascia passare il carattere originariamente premuto (per il CANC, BACKSPACE, INVIO ecc)
}

function maiuscoloSenzaAccenti(evt) {
    var keynum=8;
    var strNew='';
    var element;
    if(window.event) // IE
    {
        keynum = window.event.keyCode;
        element = window.event.srcElement;
    }
    else if(evt.which) // Netscape/Firefox/Opera
    {
        keynum = evt.which;
        element = evt.element();
    }

    if(keynum>32) { // solo per caratteri non speciali
        //disabilita il carattere originariamente premuto
        if(window.event) // IE
            Event.stop(window.event);
        else // Netscape/Firefox/Opera
            evt.stop();
        if (keynum >= 65 && keynum<=90) // A-Z
            strNew=String.fromCharCode(keynum);
        else if (keynum >= 97 && keynum<=122) //a-z
            strNew=String.fromCharCode(keynum-32);
        else if (keynum >= 48 && keynum<=57) //0-9
            //strNew=String.fromCharCode(keynum);
            return false;
        //        else if ('-.&\''.include(String.fromCharCode(keynum))) //caratteri ammessi
        //            strNew=String.fromCharCode(keynum);
        else // caratteri da sostituire
            switch(keynum) {
                //	case 39: // ' -> `
                //		 strNew="`";
                //  	 break;
                case 232: // Ã¨
                case 233: // Ã©
                    strNew="E";
                    break;
                case 224: // Ã 
                    strNew="A";
                    break;
                case 236: // Ã¬
                    strNew="I";
                    break;
                case 242: // Ã²
                    strNew="O";
                    break;
                case 249: // Ã¹
                    strNew="U";
                    break;
            }
        // immette il/i carattere/i modificato/i
        if (strNew!='') insertAtCursor(element, strNew);
        return false; //disabilita il carattere originariamente premuto
    } else
        return true; //lascia passare il carattere originariamente premuto (per il CANC, BACKSPACE, INVIO ecc)
}

function civico(evt) {
    var keynum=8;
    var strNew='';
    var element;
    if(window.event) // IE
    {
        keynum = window.event.keyCode;
        element = window.event.srcElement;
    }
    else if(evt.which) // Netscape/Firefox/Opera
    {
        keynum = evt.which;
        element = evt.element();
    }

    if(keynum>32) { // solo per caratteri non speciali
        //disabilita il carattere originariamente premuto
        if(window.event) // IE
            Event.stop(window.event);
        else // Netscape/Firefox/Opera
            evt.stop();
        if (keynum >= 65 && keynum<=90) // A-Z
            strNew=String.fromCharCode(keynum);
        else if (keynum >= 97 && keynum<=122) //a-z
            strNew=String.fromCharCode(keynum-32);
        else if (keynum >= 48 && keynum<=57) //0-9
            strNew=String.fromCharCode(keynum);
        else if ('/'.include(String.fromCharCode(keynum))) //caratteri ammessi
            strNew=String.fromCharCode(keynum);
        else // caratteri da sostituire
            switch(keynum) {
                //	case 39: // ' -> `
                //		 strNew="`";
                //  	 break;
                case 232: // Ã¨
                case 233: // Ã©
                    strNew="E";
                    break;
                case 224: // Ã 
                    strNew="A";
                    break;
                case 236: // Ã¬
                    strNew="I";
                    break;
                case 242: // Ã²
                    strNew="O";
                    break;
                case 249: // Ã¹
                    strNew="U";
                    break;
            }
        // immette il/i carattere/i modificato/i
        if (strNew!='') insertAtCursor(element, strNew);
        return false; //disabilita il carattere originariamente premuto
    } else
        return true; //lascia passare il carattere originariamente premuto (per il CANC, BACKSPACE, INVIO ecc)
}

function soloNumeri(evt) {
    var keynum=8;
    var strNew='';
    var element;
    if(window.event) // IE
    {
        keynum = window.event.keyCode;
        element = window.event.srcElement;
    }
    else if(evt.which) // Netscape/Firefox/Opera
    {
        keynum = evt.which;
        element = evt.element();
    }

    if(keynum>=32) { // solo per caratteri non speciali, spazio escluso
        if (keynum >= 48 && keynum<=57) //0-9
            strNew=String.fromCharCode(keynum);
        else if ('.'.include(String.fromCharCode(keynum))) //caratteri ammessi
            strNew=String.fromCharCode(keynum);
        else // caratteri da sostituire
            switch(keynum) {
                case 44: // ,
                    strNew=".";
                    break;
            }
        // immette il/i carattere/i modificato/i
        if (strNew!='') insertAtCursor(element, strNew);

        //disabilita il carattere originariamente premuto
        if(window.event) // IE
            Event.stop(window.event);
        else // Netscape/Firefox/Opera
            evt.stop();
        return false; //disabilita il carattere originariamente premuto
    } else
        return true; //lascia passare il carattere originariamente premuto
}

var OggettiConComportamentiSpeciali = new Array;
function rielaboraComportamentiSpeciali() {
    OggettiConComportamentiSpeciali['MaiuscoloPlus'] = OggettiConComportamentiSpeciali['MaiuscoloPlus'] || [];
    OggettiConComportamentiSpeciali['MaiuscoloSenzaAccenti'] = OggettiConComportamentiSpeciali['MaiuscoloSenzaAccenti'] || [];
    OggettiConComportamentiSpeciali['SoloNumeri'] = OggettiConComportamentiSpeciali['SoloNumeri'] || [];
    OggettiConComportamentiSpeciali['DataPopUp'] = OggettiConComportamentiSpeciali['DataPopUp'] || [];
    OggettiConComportamentiSpeciali['Civico'] = OggettiConComportamentiSpeciali['Civico'] || [];

    $$('.MaiuscoloPlus').each(function(oggetto){
        if(!OggettiConComportamentiSpeciali['MaiuscoloPlus'].include(oggetto)) {
            OggettiConComportamentiSpeciali['MaiuscoloPlus'].push(oggetto);
            oggetto.observe('keypress', maiuscoloPlus);
        }
    });

    $$('.Civico').each(function(oggetto){
        if(!OggettiConComportamentiSpeciali['Civico'].include(oggetto)) {
            OggettiConComportamentiSpeciali['Civico'].push(oggetto);
            oggetto.observe('keypress', civico);
        }
    });

    $$('.MaiuscoloSenzaAccenti').each(function(oggetto){
        if(!OggettiConComportamentiSpeciali['MaiuscoloSenzaAccenti'].include(oggetto)) {
            OggettiConComportamentiSpeciali['MaiuscoloSenzaAccenti'].push(oggetto);
            oggetto.observe('keypress', maiuscoloSenzaAccenti);
        }
    });
    $$('.SoloNumeri').each(function(oggetto){
        if(!OggettiConComportamentiSpeciali['SoloNumeri'].include(oggetto)) {
            OggettiConComportamentiSpeciali['SoloNumeri'].push(oggetto);
            oggetto.observe('keypress', soloNumeri);
        }
    });

    $$('.DataPopUp').each(function(oggetto){
        if(!OggettiConComportamentiSpeciali['DataPopUp'].include(oggetto)) {
            OggettiConComportamentiSpeciali['DataPopUp'].push(oggetto);

            oggetto.observe('focus', function(e){
                obj=e.element();
                obj.select();
                calendar_open(obj, {
                    format:'%d/%m/%Y'
                });
            });
            oggetto.observe('click', function(e){
                cancellaEvento(e);
                obj=e.element();
                obj.select();
                calendar_open(obj, {
                    format:'%d/%m/%Y'
                });
            });
            oggetto.observe('blur', function(e){
                obj=e.element();
                VerifData(obj, true);
            });
        }
    });
}

if (typeof(window['Prototype']) != 'undefined') {
    document.observe('dom:loaded', rielaboraComportamentiSpeciali);
}