/**
 * for Graceful Degration
 * need prototype.js lightbox.js
 */
Ajax.Responders.register({
	onCreate: function(request) { 
		showLoading(request.options);
		if (!request.options['notimeout']) {
			request['timeoutId'] = window.setTimeout( function() {
				if (callInProgress(request.transport)) {
					request.transport.abort(); 
					fireFailureEvent(request);
					if (window.opera)
						hideLoading(request.options);
				} else {
					if (request.transport.status == 0 /*for gecko*/|| request.transport.status > 12000 /* for ie when network down*/) {
						fireFailureEvent(request);
					}
				}
			}, request.options['timeout'] || 30000); 
		}
	}, 
	onComplete: function(request, transport, json) {
		try {
			var status = transport.status; /* gecko will throw exception when timeout */
			if (status > 12000 /* for ie when network down*/ || (status == 0 && window.opera) /* for opera 9 */) {
				fireFailureEvent(request);
				window.clearTimeout(request['timeoutId']); 
			} 
			if (status >= 400 && status != 12029) {
				inlinePopupError("系统故障, 请稍候再试!");
			} else if (json == 0 && status != 200) {
				inlinePopupError(transport.responseText);
			}			
		} catch (e) {
			fireFailureEvent(request);
			window.clearTimeout(request['timeoutId']);
		} finally {
			hideLoading(request.options);
		}
	},
	onException: function(request, ex) {
		if (window.console) /* firebug */
			console.error(ex);
	}
});


function callInProgress(xmlhttp) {
  switch (xmlhttp.readyState) {
    case 1: case 2: case 3:
      return true;
    // Case 4 and 0
    default:
      return false;
    }
}

function fireFailureEvent(request) { 
	if (request.options['onFailure']) { 
		request.options['onFailure'](request.transport, request.json); 
	} else {
		inlinePopupError("连接超时或网络故障，请检查您的网络状况!");
	}
}

function showLoading(options) {
	if (options['loadingContainer']) {
		var c = $(options['loadingContainer']);
		var loading = document.createElement('div');
		loading.className = (options['loadingClass'])? options['loadingClass'] : 'icer-loading';
		if (options['loadingMessage'])
			loading.innerHTML = options['loadingMessage'];
		Position.clone(c, loading);
		//for aync
		loading.style.height = '';
		Element.hide(c);
		c.parentNode.insertBefore(loading, c);
	}
}

function hideLoading(options) {
	if (options['loadingContainer']) {
		var c = $(options['loadingContainer']);
		if (!$(c)) return;
		Element.remove(c.previousSibling);
		Element.show(c);
		if (!Element.getStyle(c, 'display'))
			c.style.display = 'block';
	}
}

function inlinePopupError(errorMsg, options) {
	//alert(errorMsg);
	InlinePopup.popupDialog(errorMsg, {
		width:350,
		closeImg:'<img title="关闭" src="../images/vote_del_3.gif" />',
		popupClass:'s-tabcolor', 
		okButtonClass:'s-button',
		okButton: '确定',
		type: 'error'
	});
}

function setFormAction(form, action) {
	var f = $(form);
	f.setAttribute('defaultAction', f.action);
	f.action = action;
}

function resetFormAction(form) {
	var f = $(form);
	f.action = f.getAttribute('defaultAction');
}
