//myAjaxEngine
MyAjaxEngine = Class.create({

   Version: '1.0',

   initialize: function() {
      this.ajaxElements = new Array();
      this.ajaxObjects  = new Array();
      this.requestURLS  = new Array();
      this.options = {};
   },

   registerAjaxElement: function( anId, anElement ) {
      if ( !anElement )
         anElement = $(anId);
      this.ajaxElements[anId] = anElement;
   },

   registerAjaxObject: function( anId, anObject ) {
      this.ajaxObjects[anId] = anObject;
   },

   registerRequest: function (requestLogicalName, requestURL) {
      this.requestURLS[requestLogicalName] = requestURL;
   },

   sendRequest: function(requestName) {
      var options = {};
      var requestURL = this.requestURLS[requestName];
      if ( requestURL == null )
         return;

      // Allow for backwards Compatibility
      if ( arguments.length >= 1 )
        if (typeof arguments[1] == 'string') {
          options.parameters = this._createQueryString(arguments, 1);
        } else {
          options.parameters = arguments[1];
        }
      new Ajax.Request(requestURL, this._requestOptions(options));
   },

//private sunt aici 
   _requestOptions: function(options) {
      var requestHeaders = ['X-Maus-Version', this.Version ];
      var sendMethod = 'post';

      (!options) ? options = {} : '';

      if (!options._MyOptionsProcessed){
      // Check and keep any user onComplete functions
        if (options.onComplete)
             options.onMyComplete = options.onComplete;
        // Fix onComplete
        if (options.overrideOnComplete)
          options.onComplete = options.overrideOnComplete;
        else
          options.onComplete = this._onRequestComplete.bind(this);
        options._MyOptionsProcessed = true;
      }

     // Set the default options and extend with any user options
     this.options = {
                     requestHeaders: requestHeaders,
                     parameters:     options.parameters,
                     method:         sendMethod,
                     onComplete:     options.onComplete
                    };
     // Set any user options:
     Object.extend(this.options, options);
     return this.options;
   },

   _createQueryString: function( theArgs, offset ) {
      var queryString = {} ;
      for ( var i = offset ; i < theArgs.length ; i++ ) {  
          var anArg = theArgs[i];
          
          if ( anArg.name != undefined && anArg.value != undefined ) {
            eval("queryString." + anArg.name +  "='" + escape(anArg.value) + "'");
          } else {
             var ePos = anArg.indexOf('=');
             var argName  = anArg.substring( 0, ePos );
             var argValue = anArg.substring( ePos + 1 );
             eval("queryString." + argName +  "='" + escape(argValue) + "'");
          }
      }
      return queryString;
   },

   _onRequestComplete : function(request) {
      if(!request){
          return;
      }
      // User can set an onFailure option - which will be called by prototype
      if (request.status != 200)
        return;

      var response = request.responseXML.getElementsByTagName("ajax-response");
      if (response == null || response.length != 1)
         return;

      this._processAjaxResponse(response[0].childNodes);
      // Check if user has set a onComplete function
      var onMyComplete = this.options.onMyComplete;
      if (onMyComplete != null)
          onMyComplete();
   },

   _processAjaxResponse: function( xmlResponseElements ) {
      for ( var i = 0 ; i < xmlResponseElements.length ; i++ ) {
         var responseElement = xmlResponseElements[i];

         // only process nodes of type element.....
         if ( responseElement.nodeType != 1 ) {
            continue;
            
         }
         var responseType = responseElement.getAttribute("type");
         var responseId   = responseElement.getAttribute("id");

         if ( responseType == "object" )
            this._processAjaxObjectUpdate( this.ajaxObjects[ responseId ], responseElement );
         else if ( responseType == "element" )
            this._processAjaxElementUpdate( this.ajaxElements[ responseId ], responseElement );
         else
            alert('unrecognized AjaxResponse type : ' + responseType );
      }
   },

   _processAjaxElementUpdate: function( ajaxElement, responseElement ) {
      ajaxElement.innerHTML = this._getContentAsString(responseElement);
   },
   
   _getContentAsString: function( parentNode, isEncoded) {
        if (isEncoded) return this._getEncodedContent(parentNode);
        if (typeof parentNode.xml != 'undefined') return this._getContentAsStringIE(parentNode);
        return this._getContentAsStringMozilla(parentNode);    
   },

_getEncodedContent: function(parentNode) {                      
  if (parentNode.innerHTML) return parentNode.innerHTML;
  switch (parentNode.childNodes.length) {
    case 0:  return "";
    case 1:  return parentNode.firstChild.nodeValue;
    default: return parentNode.childNodes[1].nodeValue;
  }
},

_getContentAsStringIE: function(parentNode) {
  var contentStr = "";
  for ( var i = 0 ; i < parentNode.childNodes.length ; i++ ) {
     var n = parentNode.childNodes[i];
     contentStr += (n.nodeType == 4) ? n.nodeValue : n.xml;
  }
  return contentStr;
},

_getContentAsStringMozilla: function(parentNode) {
   var xmlSerializer = new XMLSerializer();
   var contentStr = "";
   for ( var i = 0 ; i < parentNode.childNodes.length ; i++ ) {
        var n = parentNode.childNodes[i];
        if (n.nodeType == 4) { // CDATA node
            contentStr += n.nodeValue;
        }
        else {
          contentStr += xmlSerializer.serializeToString(n);
      }
   }
   return contentStr;
}

});

var ajaxEngine = new MyAjaxEngine();

MyFormTesting = Class.create({ // MyTestForm
    Version: '1.0',
    
    initialize: function() {
        this.Grupuri = new Array();
        this.Stare = new Array();
        this.Fields = new Array();
    },
    
    addGroup: function(arr) {
        this.Grupuri[this.Grupuri.length] = arr;
        this.Stare[this.Stare.length] = false;
    },
    
    testField: function(field) {
        var length = this.Grupuri.length;
        var i = 0;
        var stare = false;
        if (((field.type == "text") || (field.type == "textarea")) && (trim(field.value) != "")) {
            stare = true;
        } else if ((field.type == "checkbox") && (field.checked == true)) {
            stare = true;
        } else if ((field.type == "select-one") && (field.options[field.selectedIndex].value != "")) {
            stare = true;
        }
        for (i = 0; i < length; i++) {
            if ((this.Stare[i] == false) && isValueInArray(this.Grupuri[i], field.name)) {
                this.Stare[i] = stare;
                if ((stare == false) && (field.type != "checkbox")) {
                    this.Fields[this.Fields.length] = field;
                }
            }
        }
    },

    hasIncorectFields: function() {
        var raspuns = false;
        var length = this.Stare.length;
        var i = 0;
        for (i = 0; i < length; i++) {
            if (this.Stare[i] == false) {
                raspuns = true;
            }
        }
        return raspuns;
    },
    
    displayError: function() {
        var length = this.Fields.length;
        var i = 0;
        for (i = 0; i < length; i++) {
            $(this.Fields[i]).addClassName('inputError');
            $(this.Fields[i]).observe('change', this.validateOnChange.bind(this));
        }
    },
    
    validateOnChange: function(event) {
        var element = event.element();
        element.removeClassName('inputError');
    }

});

function trim(stringToTrim) {
    return stringToTrim.replace(/^\s+|\s+$/g,"");
}

function isValueInArray(arr, val) {
    var inArray = false;
    var i = 0;
    for (i = 0; i < arr.length; i++) {
        if (val == arr[i]) {
            inArray = true;
        }
    }
    return inArray;
}

var _startWorking = false;

function _showForm () {
    $('my_col_form').setStyle({
        width: 0,
        display: 'block'
    });
    $('my_col_form').morph('width:650px;');
    _startWorking = false;
}

function showMyForm() {
    if ((_startWorking == false) && ($('my_col_form').style.display != "block")) {
        _startWorking = true;
        new Effect.Parallel([
            new Effect.Shrink('my_col_2', { sync: true }),
            new Effect.Shrink('my_col_3', { sync: true })
        ], {
            duration: 1.5
        });
    
        setTimeout(_showForm, 1500);
    }
    return false;
}

function hideMyForm() {
    if ((_startWorking == false) && ($('my_col_form').style.display != "none")) {
        $('my_col_form').setStyle({
            width: 0,
            display: 'none'
        });
        new Effect.Grow('my_col_2'); 
        new Effect.Grow('my_col_3');
        submitForm(1);
    }
    return false;
}

function _showPresentation () {
    $('my_col_presentation').setStyle({
        width: 0,
        display: 'block'
    });
    $('my_col_presentation').morph('width:650px;');
    _startWorking = false;
}

function showMyPresentation() {
    if ((_startWorking == false) && ($('my_col_presentation').style.display != "block")) {
        _startWorking = true;
        new Effect.Parallel([
            new Effect.Shrink('my_col_1', { sync: true }),
            new Effect.Shrink('my_col_2', { sync: true })
        ], {
            duration: 1.5
        });
    
        setTimeout(_showPresentation, 1500);
    }
    return false;
}

function hideMyPresentation() {
    if ((_startWorking == false) && ($('my_col_presentation').style.display != "none")) {
        $('my_col_presentation').setStyle({
            width: 0,
            display: 'none'
        });
        new Effect.Grow('my_col_1'); 
        new Effect.Grow('my_col_2');
        submitPresentation(0);
    }
    return false;
}

function start_indicator(care){
    var s1 = document.getElementById(care);
    if((s1) && (s1.tagName == 'IMG')){
        s1.src = './templates/images/indicator.gif';
    }
}

function stop_indicator(care){
    var s1 = document.getElementById(care);
    if((s1) && (s1.tagName == 'IMG')){
        s1.src = './templates/images/spacer.gif';
    }    
}

function valid_numeric(camp,evt)
{
    var variab = evt.keyCode ? evt.keyCode :
                evt.charCode ? evt.charCode :
        evt.which ? evt.which : void 0;

    if ((variab != 9) && (variab != 8)) {
        if((variab==46 && (camp.value.indexOf(".")==-1))||(variab>=48 && variab<=57 )){
            evt.returnValue = variab ;
            return true;
        }else{
            evt.returnValue = false ;
            return false;
        }
    }
    return true;
}

var FormProcessStatus = false;
ajaxEngine.registerRequest('getForm', 'aj_form.php');

function submitForm(care) {
    if (FormProcessStatus != true) {
        FormProcessStatus = true;
        switch(care) {
            case 1:
                ajaxEngine.sendRequest('getForm',"care=1");
                break;
            case 2:
                var myTest = new MyFormTesting();
                myTest.addGroup(new Array('tip1', 'tip2', 'tip3', 'tip4'));
                myTest.addGroup(new Array('cati1', 'cati2', 'cati3', 'cati4', 'cati5'));
                myTest.addGroup(new Array('destinatie'));
                myTest.addGroup(new Array('buget'));
                myTest.addGroup(new Array('dataplecare'));
                myTest.addGroup(new Array('locplecare'));
                myTest.addGroup(new Array('tiptransport'));
                myTest.addGroup(new Array('nrnopti'));
                var params = { };
                var formaElements = document.formular.elements;
                var i = 0;
                params.care = 2;

                for (i=0; i < formaElements.length; i++)
                {
                    myTest.testField(formaElements[i]);
                    if (formaElements[i].type == "text" || formaElements[i].type == "textarea") { // || formaElements[i].type == "button"
                        eval("params." + formaElements[i].name + "= formaElements[i].value");

                    } else if (formaElements[i].type == 'checkbox') {
                        if (formaElements[i].checked == true) {
                            eval("params." + formaElements[i].name + "= formaElements[i].value");
                        }

                    } else if(formaElements[i].type == "select-one") {
                        eval("params." + formaElements[i].name + "= formaElements[i].options[formaElements[i].selectedIndex].value");

                    }
                }
                if (myTest.hasIncorectFields() == false) {
                    ajaxEngine.sendRequest('getForm', params);
                } else {
                    document.getElementById('eroare').style.visibility = 'visible';
                    myTest.displayError('inputError');
                }
                break;
            case 3:
                var myTest = new MyFormTesting();
                myTest.addGroup(new Array('nume'));
                myTest.addGroup(new Array('prenume'));
                myTest.addGroup(new Array('email'));
                myTest.addGroup(new Array('telefon'));
                var params = { };
                var formaElements = document.formular.elements;
                var i = 0;
                params.care = 3;

                for (i=0; i < formaElements.length; i++)
                {
                    myTest.testField(formaElements[i]);
                    if (formaElements[i].type == "text" || formaElements[i].type == "textarea") { // || formaElements[i].type == "button"
                        eval("params." + formaElements[i].name + "= formaElements[i].value");

                    } else if (formaElements[i].type == 'checkbox') {
                        if (formaElements[i].checked == true) {
                            eval("params." + formaElements[i].name + "= formaElements[i].value");
                        }

                    } else if(formaElements[i].type == "select-one") {
                        eval("params." + formaElements[i].name + "= formaElements[i].options[formaElements[i].selectedIndex].value");

                    }
                }
                if (myTest.hasIncorectFields() == false) {
                    ajaxEngine.sendRequest('getForm', params);
                } else {
                    document.getElementById('eroare').style.visibility = 'visible';
                    myTest.displayError('inputError');
                }
                break;
        }
        FormProcessStatus = false;
    }
    return false;
}

ajaxEngine.registerRequest('getPresentation', 'aj_prezentare.php');
function submitPresentation(care) {
    if (FormProcessStatus != true) {
        FormProcessStatus = true;
        ajaxEngine.sendRequest('getPresentation',"care=" + care);
        FormProcessStatus = false;
    }
    return false;
}
