
  var dynamicHint =
  {
    hWnd: null,
    strHintId: null,

    init: function( )
    {
      var oDataSource = new YAHOO.widget.DS_XHR( '/hint.php', ['results', 'plain'] );
        oDataSource.responseType = YAHOO.widget.DS_XHR.TYPE_JSON;
        oDataSource.scriptQueryParam = 'query';
        oDataSource.maxCacheEntries = 256;
        oDataSource.connTimeout = 3000;
        
        
        
      var aForms = document.getElementsByTagName( 'form' );
      
      for ( var i = 0; i < aForms.length; i++ )
      {
        var oForm = aForms[i];

        if ( /\bsearch\b/.test(oForm.className) )
        {
          YAHOO.util.Event.addListener( oForm, 'submit', dynamicHint.submit, oForm );
          
          var oFromElement = oForm.elements['from'];
          if ( oFromElement && oFromElement.value == '' )
          {
            oFromElement.style.color = 'gray';
            oFromElement.value = 'da ovunque';
            oFromElement.bTainted = true;
            
            YAHOO.util.Event.addListener( oFromElement, 'click', dynamicHint.clean, oFromElement );
            YAHOO.util.Event.addListener( oFromElement, 'focus', dynamicHint.clean, oFromElement );
          }
          
          
          var oToElement = oForm.elements['to'];
          if ( oToElement && oToElement.value == '' )
          {
            oToElement.style.color = 'gray';
            oToElement.value = 'a ovunque';
            oToElement.bTainted = true;
            
            YAHOO.util.Event.addListener( oToElement, 'click', dynamicHint.clean, oToElement );
            YAHOO.util.Event.addListener( oToElement, 'focus', dynamicHint.clean, oToElement );
          }
        }
      }
      


      var aElements = document.getElementsByTagName( 'input' );
      
      for ( var i = 0; i < aElements.length; i++ )
      {
        var oElement = aElements[i];

        if ( oElement.type.toLowerCase() == 'text' && /\bhint\b/.test(oElement.className) )
        {
          var oAutoComplete = new YAHOO.widget.AutoComplete( oElement.id, oElement.id + '_hint', oDataSource );
            oAutoComplete.minQueryLength = 2;
            oAutoComplete.queryDelay = 0.25;
            oAutoComplete.allowBrowserAutocomplete = false;
            oAutoComplete.animVert = true;
            oAutoComplete.animSpeed = 0.1;
            oAutoComplete.useShadow = true;
            oAutoComplete.forceSelection = false;
            oAutoComplete.maxResultsDisplayed = 25;
            oAutoComplete.typeAhead = false;


          oAutoComplete.formatResult = function( oResultItem, sQuery )
          {
            return oResultItem[1].html;
          };

          YAHOO.util.Event.addListener( oElement.id + '_popup', 'click', dynamicHint.popup, oElement.id );
        }
      }
    },


    popup: function( e, strHintId )
    {
      YAHOO.util.Event.preventDefault( e );

      dynamicHint.hWnd = window.open( '/airports.php', 'HintPopup', 'width=990,height=600,scrollbars=yes,resizable=no' );
      dynamicHint.strHintId = strHintId;

      if ( dynamicHint.hWnd )
        dynamicHint.hWnd.focus && dynamicHint.hWnd.focus();

      else
        alert( 'Un popup blocker ha impedito l\'apertura della finestra di selezione aeroporti.' );
    },


    callback: function( strQuery )
    {
      var hElement = document.getElementById( dynamicHint.strHintId );

      if ( hElement )
      {
        hElement.value = strQuery;
        hElement.bTainted = false;

        if ( dynamicHint.hWnd && !dynamicHint.hWnd.closed )
          dynamicHint.hWnd.close( );
      }
    },
    
    
    submit: function( e, oForm )
    {
      var oFromElement = oForm.elements['from'];
      var oToElement = oForm.elements['to'];
      
      if ( oFromElement && oToElement )
      {
        YAHOO.util.Event.preventDefault( e );
        
        if ( oFromElement.bTainted )
        {
          oFromElement.bTainted = false;
          oFromElement.value = '';
        }
        
        if ( oToElement.bTainted )
        {
          oToElement.bTainted = false;
          oToElement.value = '';
        }
        
        
        var strFromUri = dynamicHint.getSearchableString( oFromElement.value );
        var strToUri = dynamicHint.getSearchableString( oToElement.value );
         
        if ( strFromUri == '' && strToUri == '' )
          alert( 'Si prega di inserire un luogo di partenza e/o di arrivo.' );

        else
          location.href = 'http://voli-lowcost.zingarate.com/voli' + (strFromUri != '' ? '/da/' + strFromUri : '') + (strToUri != '' ? '/a/' + strToUri : '');
      }
    },
    
    clean: function( e, oElement )
    {
      YAHOO.util.Event.addListener( oElement, 'click', dynamicHint.clean, oElement );
      YAHOO.util.Event.addListener( oElement, 'focus', dynamicHint.clean, oElement );
      
      if ( oElement.bTainted )
      {
        oElement.bTainted = false;
        oElement.value = '';
        oElement.style.color = 'black';
      } 
    },
    
    getSearchableString: function( strString )
    {
      strString = strString.replace( /[ÀÁÂÃÄÅÆàáâãäåæ]/ig, 'a' );
      strString = strString.replace( /[ÈÉÊËèéêë]/ig, 'e' );
      strString = strString.replace( /[ÌÍÎÏìíîï]/ig, 'i' );
      strString = strString.replace( /[ÒÓÔÕÖØòóôõöø]/ig, 'o' );
      strString = strString.replace( /[ÙÚÛÜùúûü]/ig, 'u' );
      strString = strString.replace( /[Ññ]/ig, 'n' );
      strString = strString.replace( /[Ðð]/ig, 'd' );
      strString = strString.replace( /[ÇçŒœ]/ig, 'c' );
      strString = strString.replace( /[ÝýŸÿ]/ig, 'y' );
      strString = strString.replace( /[Šš]/ig, 's' );
      strString = strString.replace( /[Žž]/ig, 'z' );
      strString = strString.replace( /[Þþ]/ig, 't' );
      strString = strString.replace( /[ß]/ig, 's' );
  
      strString = strString.replace( /[^a-zA-Z0-9_'\s-]/ig, '-' );
      strString = strString.replace( /[_]+/ig, '_' );
      strString = strString.replace( /[']+/ig, '\'' );
      strString = strString.replace( /[\s-]+/ig, '-' );
  
      strString = strString.toLowerCase();
      strString = strString.replace( /^[\s+]|[\s+]$/g, '' );
  
      return strString != '' && strString != '-' ? strString : '';
    }
  };


  YAHOO.util.Event.onDOMReady( dynamicHint.init );
