/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.8.0r4
 */
YAHOO.util.Connect = {
	_msxml_progid : [ "Microsoft.XMLHTTP", "MSXML2.XMLHTTP.3.0",
			"MSXML2.XMLHTTP" ],
	_http_headers : {},
	_has_http_headers : false,
	_use_default_post_header : true,
	_default_post_header : "application/x-www-form-urlencoded; charset=UTF-8",
	_default_form_header : "application/x-www-form-urlencoded",
	_use_default_xhr_header : true,
	_default_xhr_header : "XMLHttpRequest",
	_has_default_headers : true,
	_default_headers : {},
	_poll : {},
	_timeOut : {},
	_polling_interval : 50,
	_transaction_id : 0,
	startEvent : new YAHOO.util.CustomEvent("start"),
	completeEvent : new YAHOO.util.CustomEvent("complete"),
	successEvent : new YAHOO.util.CustomEvent("success"),
	failureEvent : new YAHOO.util.CustomEvent("failure"),
	abortEvent : new YAHOO.util.CustomEvent("abort"),
	_customEvents : {
		onStart : [ "startEvent", "start" ],
		onComplete : [ "completeEvent", "complete" ],
		onSuccess : [ "successEvent", "success" ],
		onFailure : [ "failureEvent", "failure" ],
		onUpload : [ "uploadEvent", "upload" ],
		onAbort : [ "abortEvent", "abort" ]
	},
	setProgId : function(A) {
		this._msxml_progid.unshift(A);
	},
	setDefaultPostHeader : function(A) {
		if (typeof A == "string") {
			this._default_post_header = A;
		} else {
			if (typeof A == "boolean") {
				this._use_default_post_header = A;
			}
		}
	},
	setDefaultXhrHeader : function(A) {
		if (typeof A == "string") {
			this._default_xhr_header = A;
		} else {
			this._use_default_xhr_header = A;
		}
	},
	setPollingInterval : function(A) {
		if (typeof A == "number" && isFinite(A)) {
			this._polling_interval = A;
		}
	},
	createXhrObject : function(F) {
		var D, A, B;
		try {
			A = new XMLHttpRequest();
			D = {
				conn : A,
				tId : F,
				xhr : true
			};
		} catch (C) {
			for (B = 0; B < this._msxml_progid.length; ++B) {
				try {
					A = new ActiveXObject(this._msxml_progid[B]);
					D = {
						conn : A,
						tId : F,
						xhr : true
					};
					break;
				} catch (E) {
				}
			}
		} finally {
			return D;
		}
	},
	getConnectionObject : function(A) {
		var C, D = this._transaction_id;
		try {
			if (!A) {
				C = this.createXhrObject(D);
			} else {
				C = {
					tId : D
				};
				if (A === "xdr") {
					C.conn = this._transport;
					C.xdr = true;
				} else {
					if (A === "upload") {
						C.upload = true;
					}
				}
			}
			if (C) {
				this._transaction_id++;
			}
		} catch (B) {
		}
		return C;
	},
	asyncRequest : function(G, D, F, A) {
		var E, C, B = (F && F.argument) ? F.argument : null;
		if (this._isFileUpload) {
			C = "upload";
		} else {
			if (F.xdr) {
				C = "xdr";
			}
		}
		E = this.getConnectionObject(C);
		if (!E) {
			return null;
		} else {
			if (F && F.customevents) {
				this.initCustomEvents(E, F);
			}
			if (this._isFormSubmit) {
				if (this._isFileUpload) {
					this.uploadFile(E, F, D, A);
					return E;
				}
				if (G.toUpperCase() == "GET") {
					if (this._sFormData.length !== 0) {
						D += ((D.indexOf("?") == -1) ? "?" : "&")
								+ this._sFormData;
					}
				} else {
					if (G.toUpperCase() == "POST") {
						A = A ? this._sFormData + "&" + A : this._sFormData;
					}
				}
			}
			if (G.toUpperCase() == "GET" && (F && F.cache === false)) {
				D += ((D.indexOf("?") == -1) ? "?" : "&") + "rnd="
						+ new Date().valueOf().toString();
			}
			if (this._use_default_xhr_header) {
				if (!this._default_headers["X-Requested-With"]) {
					this.initHeader("X-Requested-With",
							this._default_xhr_header, true);
				}
			}
			if ((G.toUpperCase() === "POST" && this._use_default_post_header)
					&& this._isFormSubmit === false) {
				this.initHeader("Content-Type", this._default_post_header);
			}
			if (E.xdr) {
				this.xdr(E, G, D, F, A);
				return E;
			}
			E.conn.open(G, D, true);
			if (this._has_default_headers || this._has_http_headers) {
				this.setHeader(E);
			}
			this.handleReadyState(E, F);
			E.conn.send(A || "");
			if (this._isFormSubmit === true) {
				this.resetFormState();
			}
			this.startEvent.fire(E, B);
			if (E.startEvent) {
				E.startEvent.fire(E, B);
			}
			return E;
		}
	},
	initCustomEvents : function(A, C) {
		var B;
		for (B in C.customevents) {
			if (this._customEvents[B][0]) {
				A[this._customEvents[B][0]] = new YAHOO.util.CustomEvent(
						this._customEvents[B][1], (C.scope) ? C.scope : null);
				A[this._customEvents[B][0]].subscribe(C.customevents[B]);
			}
		}
	},
	handleReadyState : function(C, D) {
		var B = this, A = (D && D.argument) ? D.argument : null;
		if (D && D.timeout) {
			this._timeOut[C.tId] = window.setTimeout( function() {
				B.abort(C, D, true);
			}, D.timeout);
		}
		this._poll[C.tId] = window.setInterval( function() {
			if (C.conn && C.conn.readyState === 4) {
				window.clearInterval(B._poll[C.tId]);
				delete B._poll[C.tId];
				if (D && D.timeout) {
					window.clearTimeout(B._timeOut[C.tId]);
					delete B._timeOut[C.tId];
				}
				B.completeEvent.fire(C, A);
				if (C.completeEvent) {
					C.completeEvent.fire(C, A);
				}
				B.handleTransactionResponse(C, D);
			}
		}, this._polling_interval);
	},
	handleTransactionResponse : function(B, I, D) {
		var E, A, G = (I && I.argument) ? I.argument : null, C = (B.r && B.r.statusText === "xdr:success") ? true
				: false, H = (B.r && B.r.statusText === "xdr:failure") ? true
				: false, J = D;
		try {
			if ((B.conn.status !== undefined && B.conn.status !== 0) || C) {
				E = B.conn.status;
			} else {
				if (H && !J) {
					E = 0;
				} else {
					E = 13030;
				}
			}
		} catch (F) {
			E = 13030;
		}
		if ((E >= 200 && E < 300) || E === 1223 || C) {
			A = B.xdr ? B.r : this.createResponseObject(B, G);
			if (I && I.success) {
				if (!I.scope) {
					I.success(A);
				} else {
					I.success.apply(I.scope, [ A ]);
				}
			}
			this.successEvent.fire(A);
			if (B.successEvent) {
				B.successEvent.fire(A);
			}
		} else {
			switch (E) {
			case 12002:
			case 12029:
			case 12030:
			case 12031:
			case 12152:
			case 13030:
				A = this.createExceptionObject(B.tId, G, (D ? D : false));
				if (I && I.failure) {
					if (!I.scope) {
						I.failure(A);
					} else {
						I.failure.apply(I.scope, [ A ]);
					}
				}
				break;
			default:
				A = (B.xdr) ? B.response : this.createResponseObject(B, G);
				if (I && I.failure) {
					if (!I.scope) {
						I.failure(A);
					} else {
						I.failure.apply(I.scope, [ A ]);
					}
				}
			}
			this.failureEvent.fire(A);
			if (B.failureEvent) {
				B.failureEvent.fire(A);
			}
		}
		this.releaseObject(B);
		A = null;
	},
	createResponseObject : function(A, G) {
		var D = {}, I = {}, E, C, F, B;
		try {
			C = A.conn.getAllResponseHeaders();
			F = C.split("\n");
			for (E = 0; E < F.length; E++) {
				B = F[E].indexOf(":");
				if (B != -1) {
					I[F[E].substring(0, B)] = YAHOO.lang.trim(F[E]
							.substring(B + 2));
				}
			}
		} catch (H) {
		}
		D.tId = A.tId;
		D.status = (A.conn.status == 1223) ? 204 : A.conn.status;
		D.statusText = (A.conn.status == 1223) ? "No Content"
				: A.conn.statusText;
		D.getResponseHeader = I;
		D.getAllResponseHeaders = C;
		D.responseText = A.conn.responseText;
		D.responseXML = A.conn.responseXML;
		if (G) {
			D.argument = G;
		}
		return D;
	},
	createExceptionObject : function(H, D, A) {
		var F = 0, G = "communication failure", C = -1, B = "transaction aborted", E = {};
		E.tId = H;
		if (A) {
			E.status = C;
			E.statusText = B;
		} else {
			E.status = F;
			E.statusText = G;
		}
		if (D) {
			E.argument = D;
		}
		return E;
	},
	initHeader : function(A, D, C) {
		var B = (C) ? this._default_headers : this._http_headers;
		B[A] = D;
		if (C) {
			this._has_default_headers = true;
		} else {
			this._has_http_headers = true;
		}
	},
	setHeader : function(A) {
		var B;
		if (this._has_default_headers) {
			for (B in this._default_headers) {
				if (YAHOO.lang.hasOwnProperty(this._default_headers, B)) {
					A.conn.setRequestHeader(B, this._default_headers[B]);
				}
			}
		}
		if (this._has_http_headers) {
			for (B in this._http_headers) {
				if (YAHOO.lang.hasOwnProperty(this._http_headers, B)) {
					A.conn.setRequestHeader(B, this._http_headers[B]);
				}
			}
			this._http_headers = {};
			this._has_http_headers = false;
		}
	},
	resetDefaultHeaders : function() {
		this._default_headers = {};
		this._has_default_headers = false;
	},
	abort : function(E, G, A) {
		var D, B = (G && G.argument) ? G.argument : null;
		E = E || {};
		if (E.conn) {
			if (E.xhr) {
				if (this.isCallInProgress(E)) {
					E.conn.abort();
					window.clearInterval(this._poll[E.tId]);
					delete this._poll[E.tId];
					if (A) {
						window.clearTimeout(this._timeOut[E.tId]);
						delete this._timeOut[E.tId];
					}
					D = true;
				}
			} else {
				if (E.xdr) {
					E.conn.abort(E.tId);
					D = true;
				}
			}
		} else {
			if (E.upload) {
				var C = "yuiIO" + E.tId;
				var F = document.getElementById(C);
				if (F) {
					YAHOO.util.Event.removeListener(F, "load");
					document.body.removeChild(F);
					if (A) {
						window.clearTimeout(this._timeOut[E.tId]);
						delete this._timeOut[E.tId];
					}
					D = true;
				}
			} else {
				D = false;
			}
		}
		if (D === true) {
			this.abortEvent.fire(E, B);
			if (E.abortEvent) {
				E.abortEvent.fire(E, B);
			}
			this.handleTransactionResponse(E, G, true);
		}
		return D;
	},
	isCallInProgress : function(A) {
		A = A || {};
		if (A.xhr && A.conn) {
			return A.conn.readyState !== 4 && A.conn.readyState !== 0;
		} else {
			if (A.xdr && A.conn) {
				return A.conn.isCallInProgress(A.tId);
			} else {
				if (A.upload === true) {
					return document.getElementById("yuiIO" + A.tId) ? true
							: false;
				} else {
					return false;
				}
			}
		}
	},
	releaseObject : function(A) {
		if (A && A.conn) {
			A.conn = null;
			A = null;
		}
	}
};
( function() {
	var G = YAHOO.util.Connect, H = {};
	function D(I) {
		var J = '<object id="YUIConnectionSwf" type="application/x-shockwave-flash" data="'
				+ I
				+ '" width="0" height="0">'
				+ '<param name="movie" value="'
				+ I
				+ '">'
				+ '<param name="allowScriptAccess" value="always">'
				+ "</object>", K = document.createElement("div");
		document.body.appendChild(K);
		K.innerHTML = J;
	}
	function B(L, I, J, M, K) {
		H[parseInt(L.tId)] = {
			"o" : L,
			"c" : M
		};
		if (K) {
			M.method = I;
			M.data = K;
		}
		L.conn.send(J, M, L.tId);
	}
	function E(I) {
		D(I);
		G._transport = document.getElementById("YUIConnectionSwf");
	}
	function C() {
		G.xdrReadyEvent.fire();
	}
	function A(J, I) {
		if (J) {
			G.startEvent.fire(J, I.argument);
			if (J.startEvent) {
				J.startEvent.fire(J, I.argument);
			}
		}
	}
	function F(J) {
		var K = H[J.tId].o, I = H[J.tId].c;
		if (J.statusText === "xdr:start") {
			A(K, I);
			return;
		}
		J.responseText = decodeURI(J.responseText);
		K.r = J;
		if (I.argument) {
			K.r.argument = I.argument;
		}
		this.handleTransactionResponse(K, I,
				J.statusText === "xdr:abort" ? true : false);
		delete H[J.tId];
	}
	G.xdr = B;
	G.swf = D;
	G.transport = E;
	G.xdrReadyEvent = new YAHOO.util.CustomEvent("xdrReady");
	G.xdrReady = C;
	G.handleXdrResponse = F;
})();
( function() {
	var D = YAHOO.util.Connect, F = YAHOO.util.Event;
	D._isFormSubmit = false;
	D._isFileUpload = false;
	D._formNode = null;
	D._sFormData = null;
	D._submitElementValue = null;
			D.uploadEvent = new YAHOO.util.CustomEvent("upload"),
			D._hasSubmitListener = function() {
				if (F) {
					F
							.addListener(
									document,
									"click",
									function(J) {
										var I = F.getTarget(J), H = I.nodeName
												.toLowerCase();
										if ((H === "input" || H === "button")
												&& (I.type && I.type
														.toLowerCase() == "submit")) {
											D._submitElementValue = encodeURIComponent(I.name)
													+ "="
													+ encodeURIComponent(I.value);
										}
									});
					return true;
				}
				return false;
			}();
	function G(T, O, J) {
		var S, I, R, P, W, Q = false, M = [], V = 0, L, N, K, U, H;
		this.resetFormState();
		if (typeof T == "string") {
			S = (document.getElementById(T) || document.forms[T]);
		} else {
			if (typeof T == "object") {
				S = T;
			} else {
				return;
			}
		}
		if (O) {
			this.createFrame(J ? J : null);
			this._isFormSubmit = true;
			this._isFileUpload = true;
			this._formNode = S;
			return;
		}
		for (L = 0, N = S.elements.length; L < N; ++L) {
			I = S.elements[L];
			W = I.disabled;
			R = I.name;
			if (!W && R) {
				R = encodeURIComponent(R) + "=";
				P = encodeURIComponent(I.value);
				switch (I.type) {
				case "select-one":
					if (I.selectedIndex > -1) {
						H = I.options[I.selectedIndex];
						M[V++] = R
								+ encodeURIComponent((H.attributes.value && H.attributes.value.specified) ? H.value
										: H.text);
					}
					break;
				case "select-multiple":
					if (I.selectedIndex > -1) {
						for (K = I.selectedIndex, U = I.options.length; K < U; ++K) {
							H = I.options[K];
							if (H.selected) {
								M[V++] = R
										+ encodeURIComponent((H.attributes.value && H.attributes.value.specified) ? H.value
												: H.text);
							}
						}
					}
					break;
				case "radio":
				case "checkbox":
					if (I.checked) {
						M[V++] = R + P;
					}
					break;
				case "file":
				case undefined:
				case "reset":
				case "button":
					break;
				case "submit":
					if (Q === false) {
						if (this._hasSubmitListener && this._submitElementValue) {
							M[V++] = this._submitElementValue;
						}
						Q = true;
					}
					break;
				default:
					M[V++] = R + P;
				}
			}
		}
		this._isFormSubmit = true;
		this._sFormData = M.join("&");
		this.initHeader("Content-Type", this._default_form_header);
		return this._sFormData;
	}
	function C() {
		this._isFormSubmit = false;
		this._isFileUpload = false;
		this._formNode = null;
		this._sFormData = "";
	}
	function B(H) {
		var I = "yuiIO" + this._transaction_id, J;
		if (YAHOO.env.ua.ie) {
			J = document.createElement('<iframe id="' + I + '" name="' + I
					+ '" />');
			if (typeof H == "boolean") {
				J.src = "javascript:false";
			}
		} else {
			J = document.createElement("iframe");
			J.id = I;
			J.name = I;
		}
		J.style.position = "absolute";
		J.style.top = "-1000px";
		J.style.left = "-1000px";
		document.body.appendChild(J);
	}
	function E(H) {
		var K = [], I = H.split("&"), J, L;
		for (J = 0; J < I.length; J++) {
			L = I[J].indexOf("=");
			if (L != -1) {
				K[J] = document.createElement("input");
				K[J].type = "hidden";
				K[J].name = decodeURIComponent(I[J].substring(0, L));
				K[J].value = decodeURIComponent(I[J].substring(L + 1));
				this._formNode.appendChild(K[J]);
			}
		}
		return K;
	}
	function A(K, V, L, J) {
		var Q = "yuiIO" + K.tId, R = "multipart/form-data", T = document
				.getElementById(Q), M = (document.documentMode && document.documentMode === 8) ? true
				: false, W = this, S = (V && V.argument) ? V.argument : null, U, P, I, O, H, N;
		H = {
			action : this._formNode.getAttribute("action"),
			method : this._formNode.getAttribute("method"),
			target : this._formNode.getAttribute("target")
		};
		this._formNode.setAttribute("action", L);
		this._formNode.setAttribute("method", "POST");
		this._formNode.setAttribute("target", Q);
		if (YAHOO.env.ua.ie && !M) {
			this._formNode.setAttribute("encoding", R);
		} else {
			this._formNode.setAttribute("enctype", R);
		}
		if (J) {
			U = this.appendPostData(J);
		}
		this._formNode.submit();
		this.startEvent.fire(K, S);
		if (K.startEvent) {
			K.startEvent.fire(K, S);
		}
		if (V && V.timeout) {
			this._timeOut[K.tId] = window.setTimeout( function() {
				W.abort(K, V, true);
			}, V.timeout);
		}
		if (U && U.length > 0) {
			for (P = 0; P < U.length; P++) {
				this._formNode.removeChild(U[P]);
			}
		}
		for (I in H) {
			if (YAHOO.lang.hasOwnProperty(H, I)) {
				if (H[I]) {
					this._formNode.setAttribute(I, H[I]);
				} else {
					this._formNode.removeAttribute(I);
				}
			}
		}
		this.resetFormState();
		N = function() {
			if (V && V.timeout) {
				window.clearTimeout(W._timeOut[K.tId]);
				delete W._timeOut[K.tId];
			}
			W.completeEvent.fire(K, S);
			if (K.completeEvent) {
				K.completeEvent.fire(K, S);
			}
			O = {
				tId : K.tId,
				argument : V.argument
			};
			try {
				O.responseText = T.contentWindow.document.body ? T.contentWindow.document.body.innerHTML
						: T.contentWindow.document.documentElement.textContent;
				O.responseXML = T.contentWindow.document.XMLDocument ? T.contentWindow.document.XMLDocument
						: T.contentWindow.document;
			} catch (X) {
			}
			if (V && V.upload) {
				if (!V.scope) {
					V.upload(O);
				} else {
					V.upload.apply(V.scope, [ O ]);
				}
			}
			W.uploadEvent.fire(O);
			if (K.uploadEvent) {
				K.uploadEvent.fire(O);
			}
			F.removeListener(T, "load", N);
			setTimeout( function() {
				document.body.removeChild(T);
				W.releaseObject(K);
			}, 100);
		};
		F.addListener(T, "load", N);
	}
	D.setForm = G;
	D.resetFormState = C;
	D.createFrame = B;
	D.appendPostData = E;
	D.uploadFile = A;
})();
YAHOO.register("connection", YAHOO.util.Connect, {
	version : "2.8.0r4",
	build : "2446"
});
