/*==========================================================
  MAIN JS FILE
  For  global functions, etc.
==========================================================*/

function rotator( var_name ){
  // private
  var quote;
  
  function init(){
    quote = $( 'testimonial' );
    setInterval( var_name+'.change()', 30000 );
  }
  init();
  
  function change(){
    new Effect.Fade( quote,
                     { afterFinish: function(){
                         new Ajax.Updater( quote, '/scripts/randomQuote.php',
                                           { method: 'get',
                                             onSuccess: function(){
                                               new Effect.Appear( quote );  
                                             } } );
                       }
                     } );
  }
  this.change = change;
}
var quoteRotator;
Event.observe( window, 'load', function(){ quoteRotator = new rotator( 'quoteRotator' ); } );

var FormHandler = {
  form:     false,
  required: false,
  errors:   new Array(),
  elements: {
    div:    document.createElement( 'div' ),
    strong: document.createElement( 'strong' ),
    p:      document.createElement( 'p' )
  },
  init:     function( form, required ){
    this.form     = $( form );
    this.required = required;
    this.form.onsubmit = function(){ return FormHandler.validate(); };
  },
  validate: function(){
    // cleanup
    this.errors.length = 0;
    Form.getElements( this.form ).each( function( el ){
      this.clearError( el );
    }.bind( this ) );
    // validation
    $A(this.required).each( function( field ){
      id = 'form-'+field;
      if( $(id).value == '' ){
        this.addError( id, 'required' );
      }else{
        if( field == 'email' ){
          var req = new Ajax.Request( '/scripts/validateEmail.php',
                                      { method: 'get',
                                        parameters: 'email=' + $(id).value,
                                        onSuccess: function(){
                                          var id = 'form-email';
                                          if( req.responseText == 'no' ){
                                            this.addError( id, 'std_error' );
                                          }
                                        }
                                      } );
        } // if email
      } // if empty
    }.bind( this ) ); // each
    // return
    if( this.errors.length > 0 ){
      var container = this.form.up( '#contact' );
      if( container.down( '#errors' ) == undefined ){
        msg = 'We encountered some errors while trying to submit your form';
        var p = this.elements.p.cloneNode( true );
            p.appendChild( document.createTextNode( msg ) );
        var div = this.elements.div.cloneNode( true );
            div.setAttribute( 'id', 'errors' );
            div.appendChild( p );
        container.down( 'p' ).replace( div );
      }
      return false;
    }else{
      return true;
    }
  },
  addError: function( id, error ){
    this.errors.push( id );
    var msg;
    switch( error ){
      case 'required':
        msg = 'this field is required';
        break;
      default:
        msg = 'this field had an error';
        break;
    }
    var el = this.elements.strong.cloneNode( true );
        el.className = 'e';
        el.appendChild( document.createTextNode( msg ) );
    var parent = $( id ).up( 'li' );
        parent.addClassName( 'error' );
    var label = parent.down( 'label' );
        label.appendChild( el );
    Event.observe( $( id ), 'blur',
      function( e ){
        var el = Event.element( e );
        if( el.value !== '' ){
          FormHandler.clearError( el );
        }
      } );
  },
  clearError: function( el ){
    el = $( el );
    var parent = $( el ).up( 'li' );
    if( parent.hasClassName( 'error' ) ){
      parent.removeClassName( 'error' );
      parent.down( 'strong.e' ).remove();
    }
  }
};
Event.observe( window, 'load', function(){ FormHandler.init( 'contact-form', 
                                             [ 'name', 'company', 'email',
                                               'type', 'timeframe', 'description' ] ); } );