/**
 * ajax提交到后台并返回信息的统一处理脚本
 * 
 * 
 * @author 姜松
 * @version 1.00 $2010-07-06$
 * 
 * 版权所有(C) 沈阳展望网络系统工程有限公司
 * Copyright(C) ShenYang Forecast co.,Ltd.
 * 
 * history
 * 
 */
var AjaxSend = new _AjaxSend();
function _AjaxSend() {
	
	/**
	 * ajax调用,做了防止并发多次调用同一请求的处理
	 * @param
	 * 		ajax：请求地址或form对象不能为空
	 * 		options：调用选项
	 * 		options.on404:处理404错误的函数句柄(可以不处理,有默认处理）
	 * 		options.onFailure:处理404以外错误的函数句柄(可以不处理,有默认处理）
	 * 		options.onSuccess:成功回调函数句柄
	 * 		options.parameters：请求的参数
	 * 		如果需要prototype调用Ajax.Request的其他功能,在options按其要求配置即可,本方法未做任何屏蔽
	 */
	this.isSubmit = false; //是否正在提交,正在提交true,防止多次提交 
	this.ajaxRequest = function(ajax, options) {
		if(!ajax) {
			alert("请求地址或form对象不能为空!");
			return;
		}
		
		var url = ajax;
		if(typeof ajax == "object") {
			if(ajax.tagName.toLowerCase() == "form") {
				if(this.isSubmit) {
					return; //防止重复提交
				}
				this.isSubmit = true;
			} else {
				alert("传入的不是form对象");
			}
		}
		
		var _this = this;
		if(options != undefined) {
			var onSuccessCallBack = (options.onSuccess != null && typeof(options.onSuccess) == "function") ? options.onSuccess : null;
			var on404CallBack = (options.on404 != null && typeof(options.on404) == "function") ? options.on404 : null;
			var onFailureCallBack = (options.onFailure != null && typeof(options.onFailure) == "function") ? options.onFailure : null;
		} else {
			options = {};
		}
		
		Object.extend(options, { //ajax提交开始
			on404: function() {
				alert("无法连接服务器!"); //处理404事件
				if(on404CallBack != null) {
					on404CallBack();
				}
			},
			onFailure: function() {
				alert("服务器出现异常!");	//处理除404外错误
				if(onFailureCallBack != null) {
					onFailureCallBack();
				}
			},
			onSuccess: function(transport) { //成功回调
				try {
					_this.isSubmit = false;
					if(!_this.processAjaxError(transport)) { //错误处理
						return;	
					}
					var json = transport.responseText.evalJSON(); //转换json对象
					if(onSuccessCallBack != null) {
						onSuccessCallBack(json);
					}
				} catch(e) {
    	 			alert(e.message);
				}
			}
		});
		
		if(typeof ajax == "object") {
			ajax.request(options);
		} else {
			new Ajax.Request(url, options);
		}
	};
	
	/**
	 * 处理prototype的ajax请求返回的错误
	 * 
	 * @param transport ajax返回相应对象,prototype相关的对象
	 */
	this.processAjaxError = function(transport) {		 
		try {
			if(!transport.responseText) {
				return false;
			}
			var json = transport.responseText.evalJSON();									 
			if(json.warn) {								 
				alert(json.warn);						 
				return false;
			}
			return true;
		} catch(e) {}
	};
	
}
