/**
 * Ajax object
 *
 * @author      Mangutov Zakir <zakir.mangutov@gmail.com>
 * @copyright   eos-uptrade (c) 2008
 * @package     Fernunivergleiche
 * @version     2008-08-14 23:48:44
 *
 */
 
var oAJAX = new oAjaxRequest();
 
 function oAjaxRequest() {
   this.url = ''; /* yep, only index.php */
   this.statusDOM = 'dStatus';
   /** 
    * NOTE! creating functions in other objects 
    * make sure that there is no functions(executed in ajax success section) with reserved names 
    */
   this.callbackNone = 'none'; /* batch request */
   this.callbackHtml = 'html'; /* simple html replace */
   this.callbackDOMReplace = 'oReplace'; /* replace DOM object */
   this.callbackDOMAfter = 'oAfter'; /* insert after DOM object */
   this.callbackDOMAppend = 'oAppend'; /* appent to DOM object */
   
    /** 
     * randString
     *
     * used in ajax request to prevent browser's cache
     *
     */
    this.randString = function() {
      return 'rand='+Math.random();
    }

    /** 
     * showStatus
     *
     * show loading... div
     *
     * @param       string 
     *
     */
    this.showStatus = function(str) {
      if(str == null) str = "Loading...";
      $('#' + this.statusDOM).css('left',parseInt($(window).width()/2)-50);
      $('#' + this.statusDOM).css('top',parseInt($(window).height()/2)-35);
      $('#' + this.statusDOM + ' p').html(str);
      $('#' + this.statusDOM).show();
    }

    /** 
     * rGet
     *
     * jQuery AJAX get request
     *
     * @param       string data query string
     * @param       string callback function name
     * @param       array args pass to callback
     *
     */
     this.rGet = function(data, callback, args) {
       var statusDOM = this.statusDOM;
       var cbReplace = this.callbackDOMReplace;
       var cbAfter = this.callbackDOMAfter;
       var cbHtml = this.callbackHtml;
       var cbAppend = this.callbackDOMAppend;
       var cbNone = this.callbackNone;
       var rnd = this.randString();
       this.showStatus();
       $.ajax({
         type: "GET",
         url: this.url + data,
         data: rnd,
         success: function(content) {
            $('#' + statusDOM).hide();
            switch(callback) {
                case cbNone:
                  break;
                case cbHtml: 
                  $(args.objDOM).html(content);
                  break;
                case cbReplace:
                  $(args.objDOM).after(content);
                  $(args.objDOM).remove();
                  break;
                case cbAfter:
                  $(args.objDOM).after(content);
                  break;
                case cbAppend:
                  $(args.objDOM).append(content);
                  break;
                default:
                  eval(callback+'(content,args)');
              }
          }
        });
     }
     
    /** 
     * rPost
     *
     * makes ajax post request
     *
     * @param       string url 
     * @param       object obj form 
     * @param       string callback function name
     * @param       array args pass to callback
     *
     */
    this.rPost = function(url, obj, callback, args) {
      if(url == null) return false;

      var statusDOM = this.statusDOM;
      var cbReplace = this.callbackDOMReplace;
      var cbAfter = this.callbackDOMAfter;
      var cbHtml = this.callbackHtml;
      var cbAppend = this.callbackDOMAppend;
      var cbNone = this.callbackNone;
      var reqUrl = url + '?' + this.randString();

      this.showStatus();

      queryString = $(obj).formSerialize(); /* jQuery form */
      $.ajax({
         type: "POST",
         url: reqUrl,
         data: queryString,
         success: function(content) {
            $('#' + statusDOM).hide();
            switch(callback) {
                case cbNone:
                  break;
                case cbHtml: 
                  $(args.objDOM).html(content);
                  break;
                case cbReplace:
                  $(args.objDOM).after(content);
                  $(args.objDOM).remove();
                  break;
                case cbAfter:
                  $(args.objDOM).after(content);
                  break;
                case cbAppend:
                  $(args.objDOM).append(content);
                  break;
                default:
                  eval(callback+'(content,args)');
              }
          }
      });
    }

 }

