 // AJAX
 jQuery.extend(
 {
  /**
   * @see  将json字符串转换为对象
   * @param   json字符串
   * @return 返回object,array,string等对象
   */
  evalJSON : function (strJson)
  {
    return eval( "(" + strJson + ")");
  }
 });
 jQuery.extend(
 {
  /**
   * @see  将javascript数据类型转换为json字符串
   * @param 待转换对象,支持object,array,string,function,number,boolean,regexp
   * @return 返回json字符串
   */
  toJSON : function (object)
  {
   if (object == null) return null;
   var type = typeof object;
   if ('object' == type)
   {
    if (Array == object.constructor)
     type = 'array';
    else if (RegExp == object.constructor)
     type = 'regexp';
    else
     type = 'object';
   }
      switch(type)
   {
    case 'undefined':
    case 'unknown':
        return;
        break;
    case 'function':
       case 'boolean':
    case 'regexp':
        return object.toString();
         break;
    case 'number':
         return isFinite(object) ? object.toString() : 'null';
         break;
    case 'string':
        return '"' + object.replace(/(\\|\")/g,"\\$1").replace(/\n|\r|\t/g,
       function(){  
                 var a = arguments[0];                   
        return  (a == '\n') ? '\\n':  
                       (a == '\r') ? '\\r':  
                       (a == '\t') ? '\\t': "" 
             }) + '"';
     break;
    case 'object':
     if (object === null) return 'null';
        var results = [];
        for (var property in object) {
          var value = jQuery.toJSON(object[property]);
          if (value !== undefined)
            results.push(jQuery.toJSON(property) + ':' + value);
        }
        return '{' + results.join(',') + '}';
     break;
    case 'array':
     var results = [];
     for(var i = 0; i < object.length; i++)
     {
      	   var value = jQuery.toJSON(object[i]);
           if (value !== undefined) results.push(value);
     }
        return '[' + results.join(',') + ']';
     break;
      }
  }
 });
Object.Extend = function(sub,parent)
{
    sub.prototype = new parent;        
}
function AjaxRequest(){};
AjaxRequest.prototype.invoke=function(method, data, callback) 
{
        if (this.initialize != null) 
		{
			this.initialize();
		}
        var async = (callback != null);         
        var json = $.toJSON(data);        
        var sendData = "method="+method+"&param="+json;
        $.ajax({
            type: "POST",
            url: this.url,
            data: sendData,
            success:  function(re)
			{
                if (callback != null)
				{
					callback(eval("("+re + ");"));
				}
            }
        });
        json = null;
        data = null;
        delete json;
        delete data;
        if(!async) 
		{
            return eval("("+ajaxReq.transport.responseText + ");");
        }
        return true;    
    }



