// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

//---------------------
// 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 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);
}