﻿/*
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.7.0
*/
(function() {
	var lang = YAHOO.lang, util = YAHOO.util, Ev = util.Event; util.DataSourceBase = function(oLiveData, oConfigs) { if (oLiveData === null || oLiveData === undefined) { return; } this.liveData = oLiveData; this._oQueue = { interval: null, conn: null, requests: [] }; this.responseSchema = {}; if (oConfigs && (oConfigs.constructor == Object)) { for (var sConfig in oConfigs) { if (sConfig) { this[sConfig] = oConfigs[sConfig]; } } } var maxCacheEntries = this.maxCacheEntries; if (!lang.isNumber(maxCacheEntries) || (maxCacheEntries < 0)) { maxCacheEntries = 0; } this._aIntervals = []; this.createEvent("cacheRequestEvent"); this.createEvent("cacheResponseEvent"); this.createEvent("requestEvent"); this.createEvent("responseEvent"); this.createEvent("responseParseEvent"); this.createEvent("responseCacheEvent"); this.createEvent("dataErrorEvent"); this.createEvent("cacheFlushEvent"); var DS = util.DataSourceBase; this._sName = "DataSource instance" + DS._nIndex; DS._nIndex++; }; var DS = util.DataSourceBase; lang.augmentObject(DS, { TYPE_UNKNOWN: -1, TYPE_JSARRAY: 0, TYPE_JSFUNCTION: 1, TYPE_XHR: 2, TYPE_JSON: 3, TYPE_XML: 4, TYPE_TEXT: 5, TYPE_HTMLTABLE: 6, TYPE_SCRIPTNODE: 7, TYPE_LOCAL: 8, ERROR_DATAINVALID: "Invalid data", ERROR_DATANULL: "Null data", _nIndex: 0, _nTransactionId: 0, issueCallback: function(callback, params, error, scope) { if (lang.isFunction(callback)) { callback.apply(scope, params); } else { if (lang.isObject(callback)) { scope = callback.scope || scope || window; var callbackFunc = callback.success; if (error) { callbackFunc = callback.failure; } if (callbackFunc) { callbackFunc.apply(scope, params.concat([callback.argument])); } } } }, parseString: function(oData) { if (!lang.isValue(oData)) { return null; } var string = oData + ""; if (lang.isString(string)) { return string; } else { return null; } }, parseNumber: function(oData) { if (!lang.isValue(oData) || (oData === "")) { return null; } var number = oData * 1; if (lang.isNumber(number)) { return number; } else { return null; } }, convertNumber: function(oData) { return DS.parseNumber(oData); }, parseDate: function(oData) { var date = null; if (!(oData instanceof Date)) { date = new Date(oData); } else { return oData; } if (date instanceof Date) { return date; } else { return null; } }, convertDate: function(oData) { return DS.parseDate(oData); } }); DS.Parser = { string: DS.parseString, number: DS.parseNumber, date: DS.parseDate }; DS.prototype = { _sName: null, _aCache: null, _oQueue: null, _aIntervals: null, maxCacheEntries: 0, liveData: null, dataType: DS.TYPE_UNKNOWN, responseType: DS.TYPE_UNKNOWN, responseSchema: null, toString: function() { return this._sName; }, getCachedResponse: function(oRequest, oCallback, oCaller) { var aCache = this._aCache; if (this.maxCacheEntries > 0) { if (!aCache) { this._aCache = []; } else { var nCacheLength = aCache.length; if (nCacheLength > 0) { var oResponse = null; this.fireEvent("cacheRequestEvent", { request: oRequest, callback: oCallback, caller: oCaller }); for (var i = nCacheLength - 1; i >= 0; i--) { var oCacheElem = aCache[i]; if (this.isCacheHit(oRequest, oCacheElem.request)) { oResponse = oCacheElem.response; this.fireEvent("cacheResponseEvent", { request: oRequest, response: oResponse, callback: oCallback, caller: oCaller }); if (i < nCacheLength - 1) { aCache.splice(i, 1); this.addToCache(oRequest, oResponse); } oResponse.cached = true; break; } } return oResponse; } } } else { if (aCache) { this._aCache = null; } } return null; }, isCacheHit: function(oRequest, oCachedRequest) { return (oRequest === oCachedRequest); }, addToCache: function(oRequest, oResponse) { var aCache = this._aCache; if (!aCache) { return; } while (aCache.length >= this.maxCacheEntries) { aCache.shift(); } var oCacheElem = { request: oRequest, response: oResponse }; aCache[aCache.length] = oCacheElem; this.fireEvent("responseCacheEvent", { request: oRequest, response: oResponse }); }, flushCache: function() { if (this._aCache) { this._aCache = []; this.fireEvent("cacheFlushEvent"); } }, setInterval: function(nMsec, oRequest, oCallback, oCaller) { if (lang.isNumber(nMsec) && (nMsec >= 0)) { var oSelf = this; var nId = setInterval(function() { oSelf.makeConnection(oRequest, oCallback, oCaller); }, nMsec); this._aIntervals.push(nId); return nId; } else { } }, clearInterval: function(nId) { var tracker = this._aIntervals || []; for (var i = tracker.length - 1; i > -1; i--) { if (tracker[i] === nId) { tracker.splice(i, 1); clearInterval(nId); } } }, clearAllIntervals: function() { var tracker = this._aIntervals || []; for (var i = tracker.length - 1; i > -1; i--) { clearInterval(tracker[i]); } tracker = []; }, sendRequest: function(oRequest, oCallback, oCaller) { var oCachedResponse = this.getCachedResponse(oRequest, oCallback, oCaller); if (oCachedResponse) { DS.issueCallback(oCallback, [oRequest, oCachedResponse], false, oCaller); return null; } return this.makeConnection(oRequest, oCallback, oCaller); }, makeConnection: function(oRequest, oCallback, oCaller) { var tId = DS._nTransactionId++; this.fireEvent("requestEvent", { tId: tId, request: oRequest, callback: oCallback, caller: oCaller }); var oRawResponse = this.liveData; this.handleResponse(oRequest, oRawResponse, oCallback, oCaller, tId); return tId; }, handleResponse: function(oRequest, oRawResponse, oCallback, oCaller, tId) {
		this.fireEvent("responseEvent", { tId: tId, request: oRequest, response: oRawResponse, callback: oCallback, caller: oCaller }); var xhr = (this.dataType == DS.TYPE_XHR) ? true : false; var oParsedResponse = null; var oFullResponse = oRawResponse; if (this.responseType === DS.TYPE_UNKNOWN) { var ctype = (oRawResponse && oRawResponse.getResponseHeader) ? oRawResponse.getResponseHeader["Content-Type"] : null; if (ctype) { if (ctype.indexOf("text/xml") > -1) { this.responseType = DS.TYPE_XML; } else { if (ctype.indexOf("application/json") > -1) { this.responseType = DS.TYPE_JSON; } else { if (ctype.indexOf("text/plain") > -1) { this.responseType = DS.TYPE_TEXT; } } } } else { if (YAHOO.lang.isArray(oRawResponse)) { this.responseType = DS.TYPE_JSARRAY; } else { if (oRawResponse && oRawResponse.nodeType && oRawResponse.nodeType == 9) { this.responseType = DS.TYPE_XML; } else { if (oRawResponse && oRawResponse.nodeName && (oRawResponse.nodeName.toLowerCase() == "table")) { this.responseType = DS.TYPE_HTMLTABLE; } else { if (YAHOO.lang.isObject(oRawResponse)) { this.responseType = DS.TYPE_JSON; } else { if (YAHOO.lang.isString(oRawResponse)) { this.responseType = DS.TYPE_TEXT; } } } } } } } switch (this.responseType) {
			case DS.TYPE_JSARRAY: if (xhr && oRawResponse && oRawResponse.responseText) { oFullResponse = oRawResponse.responseText; } try {
					if (lang.isString(oFullResponse)) {
						var parseArgs = [oFullResponse].concat(this.parseJSONArgs);
						if (lang.JSON) { oFullResponse = lang.JSON.parse.apply(lang.JSON, parseArgs); } else { if (window.JSON && JSON.parse) { oFullResponse = JSON.parse.apply(JSON, parseArgs); } else { if (oFullResponse.parseJSON) { oFullResponse = oFullResponse.parseJSON.apply(oFullResponse, parseArgs.slice(1)); } else { while (oFullResponse.length > 0 && (oFullResponse.charAt(0) != "{") && (oFullResponse.charAt(0) != "[")) { oFullResponse = oFullResponse.substring(1, oFullResponse.length); } if (oFullResponse.length > 0) { var arrayEnd = Math.max(oFullResponse.lastIndexOf("]"), oFullResponse.lastIndexOf("}")); oFullResponse = oFullResponse.substring(0, arrayEnd + 1); oFullResponse = eval("(" + oFullResponse + ")"); } } } } 
					} 
				} catch (e1) { } oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback); oParsedResponse = this.parseArrayData(oRequest, oFullResponse); break; case DS.TYPE_JSON: if (xhr && oRawResponse && oRawResponse.responseText) { oFullResponse = oRawResponse.responseText; } try { if (lang.isString(oFullResponse)) { var parseArgs = [oFullResponse].concat(this.parseJSONArgs); if (lang.JSON) { oFullResponse = lang.JSON.parse.apply(lang.JSON, parseArgs); } else { if (window.JSON && JSON.parse) { oFullResponse = JSON.parse.apply(JSON, parseArgs); } else { if (oFullResponse.parseJSON) { oFullResponse = oFullResponse.parseJSON.apply(oFullResponse, parseArgs.slice(1)); } else { while (oFullResponse.length > 0 && (oFullResponse.charAt(0) != "{") && (oFullResponse.charAt(0) != "[")) { oFullResponse = oFullResponse.substring(1, oFullResponse.length); } if (oFullResponse.length > 0) { var objEnd = Math.max(oFullResponse.lastIndexOf("]"), oFullResponse.lastIndexOf("}")); oFullResponse = oFullResponse.substring(0, objEnd + 1); oFullResponse = eval("(" + oFullResponse + ")"); } } } } } } catch (e) { } oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback); oParsedResponse = this.parseJSONData(oRequest, oFullResponse); break; case DS.TYPE_HTMLTABLE: if (xhr && oRawResponse.responseText) { var el = document.createElement("div"); el.innerHTML = oRawResponse.responseText; oFullResponse = el.getElementsByTagName("table")[0]; } oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback); oParsedResponse = this.parseHTMLTableData(oRequest, oFullResponse); break; case DS.TYPE_XML: if (xhr && oRawResponse.responseXML) { oFullResponse = oRawResponse.responseXML; } oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback); oParsedResponse = this.parseXMLData(oRequest, oFullResponse); break; case DS.TYPE_TEXT: if (xhr && lang.isString(oRawResponse.responseText)) { oFullResponse = oRawResponse.responseText; } oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback); oParsedResponse = this.parseTextData(oRequest, oFullResponse); break; default: oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback); oParsedResponse = this.parseData(oRequest, oFullResponse); break;
		} oParsedResponse = oParsedResponse || {}; if (!oParsedResponse.results) { oParsedResponse.results = []; } if (!oParsedResponse.meta) { oParsedResponse.meta = {}; } if (oParsedResponse && !oParsedResponse.error) { oParsedResponse = this.doBeforeCallback(oRequest, oFullResponse, oParsedResponse, oCallback); this.fireEvent("responseParseEvent", { request: oRequest, response: oParsedResponse, callback: oCallback, caller: oCaller }); this.addToCache(oRequest, oParsedResponse); } else { oParsedResponse.error = true; this.fireEvent("dataErrorEvent", { request: oRequest, response: oRawResponse, callback: oCallback, caller: oCaller, message: DS.ERROR_DATANULL }); } oParsedResponse.tId = tId; DS.issueCallback(oCallback, [oRequest, oParsedResponse], oParsedResponse.error, oCaller);
	}, doBeforeParseData: function(oRequest, oFullResponse, oCallback) { return oFullResponse; }, doBeforeCallback: function(oRequest, oFullResponse, oParsedResponse, oCallback) { return oParsedResponse; }, parseData: function(oRequest, oFullResponse) { if (lang.isValue(oFullResponse)) { var oParsedResponse = { results: oFullResponse, meta: {} }; return oParsedResponse; } return null; }, parseArrayData: function(oRequest, oFullResponse) { if (lang.isArray(oFullResponse)) { var results = [], i, j, rec, field, data; if (lang.isArray(this.responseSchema.fields)) { var fields = this.responseSchema.fields; for (i = fields.length - 1; i >= 0; --i) { if (typeof fields[i] !== "object") { fields[i] = { key: fields[i] }; } } var parsers = {}, p; for (i = fields.length - 1; i >= 0; --i) { p = (typeof fields[i].parser === "function" ? fields[i].parser : DS.Parser[fields[i].parser + ""]) || fields[i].converter; if (p) { parsers[fields[i].key] = p; } } var arrType = lang.isArray(oFullResponse[0]); for (i = oFullResponse.length - 1; i > -1; i--) { var oResult = {}; rec = oFullResponse[i]; if (typeof rec === "object") { for (j = fields.length - 1; j > -1; j--) { field = fields[j]; data = arrType ? rec[j] : rec[field.key]; if (parsers[field.key]) { data = parsers[field.key].call(this, data); } if (data === undefined) { data = null; } oResult[field.key] = data; } } else { if (lang.isString(rec)) { for (j = fields.length - 1; j > -1; j--) { field = fields[j]; data = rec; if (parsers[field.key]) { data = parsers[field.key].call(this, data); } if (data === undefined) { data = null; } oResult[field.key] = data; } } } results[i] = oResult; } } else { results = oFullResponse; } var oParsedResponse = { results: results }; return oParsedResponse; } return null; }, parseTextData: function(oRequest, oFullResponse) {
		if (lang.isString(oFullResponse)) {
			if (lang.isString(this.responseSchema.recordDelim) && lang.isString(this.responseSchema.fieldDelim)) {
				var oParsedResponse = { results: [] }; var recDelim = this.responseSchema.recordDelim; var fieldDelim = this.responseSchema.fieldDelim; if (oFullResponse.length > 0) {
					var newLength = oFullResponse.length - recDelim.length; if (oFullResponse.substr(newLength) == recDelim) { oFullResponse = oFullResponse.substr(0, newLength); } if (oFullResponse.length > 0) {
						var recordsarray = oFullResponse.split(recDelim); for (var i = 0, len = recordsarray.length, recIdx = 0; i < len; ++i) {
							var bError = false, sRecord = recordsarray[i]; if (lang.isString(sRecord) && (sRecord.length > 0)) {
								var fielddataarray = recordsarray[i].split(fieldDelim); var oResult = {}; if (lang.isArray(this.responseSchema.fields)) {
									var fields = this.responseSchema.fields; for (var j = fields.length - 1; j > -1; j--) {
										try {
											var data = fielddataarray[j]; if (lang.isString(data)) {
												if (data.charAt(0) == '"') { data = data.substr(1); } if (data.charAt(data.length - 1) == '"') { data = data.substr(0, data.length - 1); } var field = fields[j];
												var key = (lang.isValue(field.key)) ? field.key : field; if (!field.parser && field.converter) { field.parser = field.converter; } var parser = (typeof field.parser === "function") ? field.parser : DS.Parser[field.parser + ""]; if (parser) { data = parser.call(this, data); } if (data === undefined) { data = null; } oResult[key] = data;
											} else { bError = true; } 
										} catch (e) { bError = true; } 
									} 
								} else { oResult = fielddataarray; } if (!bError) { oParsedResponse.results[recIdx++] = oResult; } 
							} 
						} 
					} 
				} return oParsedResponse;
			} 
		} return null;
	}, parseXMLResult: function(result) { var oResult = {}, schema = this.responseSchema; try { for (var m = schema.fields.length - 1; m >= 0; m--) { var field = schema.fields[m]; var key = (lang.isValue(field.key)) ? field.key : field; var data = null; var xmlAttr = result.attributes.getNamedItem(key); if (xmlAttr) { data = xmlAttr.value; } else { var xmlNode = result.getElementsByTagName(key); if (xmlNode && xmlNode.item(0)) { var item = xmlNode.item(0); data = (item) ? ((item.text) ? item.text : (item.textContent) ? item.textContent : null) : null; if (!data) { var datapieces = []; for (var j = 0, len = item.childNodes.length; j < len; j++) { if (item.childNodes[j].nodeValue) { datapieces[datapieces.length] = item.childNodes[j].nodeValue; } } if (datapieces.length > 0) { data = datapieces.join(""); } } } } if (data === null) { data = ""; } if (!field.parser && field.converter) { field.parser = field.converter; } var parser = (typeof field.parser === "function") ? field.parser : DS.Parser[field.parser + ""]; if (parser) { data = parser.call(this, data); } if (data === undefined) { data = null; } oResult[key] = data; } } catch (e) { } return oResult; }, parseXMLData: function(oRequest, oFullResponse) { var bError = false, schema = this.responseSchema, oParsedResponse = { meta: {} }, xmlList = null, metaNode = schema.metaNode, metaLocators = schema.metaFields || {}, i, k, loc, v; try { xmlList = (schema.resultNode) ? oFullResponse.getElementsByTagName(schema.resultNode) : null; metaNode = metaNode ? oFullResponse.getElementsByTagName(metaNode)[0] : oFullResponse; if (metaNode) { for (k in metaLocators) { if (lang.hasOwnProperty(metaLocators, k)) { loc = metaLocators[k]; v = metaNode.getElementsByTagName(loc)[0]; if (v) { v = v.firstChild.nodeValue; } else { v = metaNode.attributes.getNamedItem(loc); if (v) { v = v.value; } } if (lang.isValue(v)) { oParsedResponse.meta[k] = v; } } } } } catch (e) { } if (!xmlList || !lang.isArray(schema.fields)) { bError = true; } else { oParsedResponse.results = []; for (i = xmlList.length - 1; i >= 0; --i) { var oResult = this.parseXMLResult(xmlList.item(i)); oParsedResponse.results[i] = oResult; } } if (bError) { oParsedResponse.error = true; } else { } return oParsedResponse; }, parseJSONData: function(oRequest, oFullResponse) { var oParsedResponse = { results: [], meta: {} }; if (lang.isObject(oFullResponse) && this.responseSchema.resultsList) { var schema = this.responseSchema, fields = schema.fields, resultsList = oFullResponse, results = [], metaFields = schema.metaFields || {}, fieldParsers = [], fieldPaths = [], simpleFields = [], bError = false, i, len, j, v, key, parser, path; var buildPath = function(needle) { var path = null, keys = [], i = 0; if (needle) { needle = needle.replace(/\[(['"])(.*?)\1\]/g, function(x, $1, $2) { keys[i] = $2; return ".@" + (i++); }).replace(/\[(\d+)\]/g, function(x, $1) { keys[i] = parseInt($1, 10) | 0; return ".@" + (i++); }).replace(/^\./, ""); if (!/[^\w\.\$@]/.test(needle)) { path = needle.split("."); for (i = path.length - 1; i >= 0; --i) { if (path[i].charAt(0) === "@") { path[i] = keys[parseInt(path[i].substr(1), 10)]; } } } else { } } return path; }; var walkPath = function(path, origin) { var v = origin, i = 0, len = path.length; for (; i < len && v; ++i) { v = v[path[i]]; } return v; }; path = buildPath(schema.resultsList); if (path) { resultsList = walkPath(path, oFullResponse); if (resultsList === undefined) { bError = true; } } else { bError = true; } if (!resultsList) { resultsList = []; } if (!lang.isArray(resultsList)) { resultsList = [resultsList]; } if (!bError) { if (schema.fields) { var field; for (i = 0, len = fields.length; i < len; i++) { field = fields[i]; key = field.key || field; parser = ((typeof field.parser === "function") ? field.parser : DS.Parser[field.parser + ""]) || field.converter; path = buildPath(key); if (parser) { fieldParsers[fieldParsers.length] = { key: key, parser: parser }; } if (path) { if (path.length > 1) { fieldPaths[fieldPaths.length] = { key: key, path: path }; } else { simpleFields[simpleFields.length] = { key: key, path: path[0] }; } } else { } } for (i = resultsList.length - 1; i >= 0; --i) { var r = resultsList[i], rec = {}; if (r) { for (j = simpleFields.length - 1; j >= 0; --j) { rec[simpleFields[j].key] = (r[simpleFields[j].path] !== undefined) ? r[simpleFields[j].path] : r[j]; } for (j = fieldPaths.length - 1; j >= 0; --j) { rec[fieldPaths[j].key] = walkPath(fieldPaths[j].path, r); } for (j = fieldParsers.length - 1; j >= 0; --j) { var p = fieldParsers[j].key; rec[p] = fieldParsers[j].parser(rec[p]); if (rec[p] === undefined) { rec[p] = null; } } } results[i] = rec; } } else { results = resultsList; } for (key in metaFields) { if (lang.hasOwnProperty(metaFields, key)) { path = buildPath(metaFields[key]); if (path) { v = walkPath(path, oFullResponse); oParsedResponse.meta[key] = v; } } } } else { oParsedResponse.error = true; } oParsedResponse.results = results; } else { oParsedResponse.error = true; } return oParsedResponse; }, parseHTMLTableData: function(oRequest, oFullResponse) { var bError = false; var elTable = oFullResponse; var fields = this.responseSchema.fields; var oParsedResponse = { results: [] }; if (lang.isArray(fields)) { for (var i = 0; i < elTable.tBodies.length; i++) { var elTbody = elTable.tBodies[i]; for (var j = elTbody.rows.length - 1; j > -1; j--) { var elRow = elTbody.rows[j]; var oResult = {}; for (var k = fields.length - 1; k > -1; k--) { var field = fields[k]; var key = (lang.isValue(field.key)) ? field.key : field; var data = elRow.cells[k].innerHTML; if (!field.parser && field.converter) { field.parser = field.converter; } var parser = (typeof field.parser === "function") ? field.parser : DS.Parser[field.parser + ""]; if (parser) { data = parser.call(this, data); } if (data === undefined) { data = null; } oResult[key] = data; } oParsedResponse.results[j] = oResult; } } } else { bError = true; } if (bError) { oParsedResponse.error = true; } else { } return oParsedResponse; } 
	}; lang.augmentProto(DS, util.EventProvider); util.LocalDataSource = function(oLiveData, oConfigs) {
		this.dataType = DS.TYPE_LOCAL; if (oLiveData) {
			if (YAHOO.lang.isArray(oLiveData)) { this.responseType = DS.TYPE_JSARRAY; } else {
				if (oLiveData.nodeType && oLiveData.nodeType == 9) { this.responseType = DS.TYPE_XML; } else {
					if (oLiveData.nodeName && (oLiveData.nodeName.toLowerCase() == "table")) {
						this.responseType = DS.TYPE_HTMLTABLE;
						oLiveData = oLiveData.cloneNode(true);
					} else { if (YAHOO.lang.isString(oLiveData)) { this.responseType = DS.TYPE_TEXT; } else { if (YAHOO.lang.isObject(oLiveData)) { this.responseType = DS.TYPE_JSON; } } } 
				} 
			} 
		} else { oLiveData = []; this.responseType = DS.TYPE_JSARRAY; } util.LocalDataSource.superclass.constructor.call(this, oLiveData, oConfigs);
	}; lang.extend(util.LocalDataSource, DS); lang.augmentObject(util.LocalDataSource, DS); util.FunctionDataSource = function(oLiveData, oConfigs) { this.dataType = DS.TYPE_JSFUNCTION; oLiveData = oLiveData || function() { }; util.FunctionDataSource.superclass.constructor.call(this, oLiveData, oConfigs); }; lang.extend(util.FunctionDataSource, DS, { scope: null, makeConnection: function(oRequest, oCallback, oCaller) { var tId = DS._nTransactionId++; this.fireEvent("requestEvent", { tId: tId, request: oRequest, callback: oCallback, caller: oCaller }); var oRawResponse = (this.scope) ? this.liveData.call(this.scope, oRequest, this) : this.liveData(oRequest); if (this.responseType === DS.TYPE_UNKNOWN) { if (YAHOO.lang.isArray(oRawResponse)) { this.responseType = DS.TYPE_JSARRAY; } else { if (oRawResponse && oRawResponse.nodeType && oRawResponse.nodeType == 9) { this.responseType = DS.TYPE_XML; } else { if (oRawResponse && oRawResponse.nodeName && (oRawResponse.nodeName.toLowerCase() == "table")) { this.responseType = DS.TYPE_HTMLTABLE; } else { if (YAHOO.lang.isObject(oRawResponse)) { this.responseType = DS.TYPE_JSON; } else { if (YAHOO.lang.isString(oRawResponse)) { this.responseType = DS.TYPE_TEXT; } } } } } } this.handleResponse(oRequest, oRawResponse, oCallback, oCaller, tId); return tId; } }); lang.augmentObject(util.FunctionDataSource, DS); util.ScriptNodeDataSource = function(oLiveData, oConfigs) { this.dataType = DS.TYPE_SCRIPTNODE; oLiveData = oLiveData || ""; util.ScriptNodeDataSource.superclass.constructor.call(this, oLiveData, oConfigs); }; lang.extend(util.ScriptNodeDataSource, DS, { getUtility: util.Get, asyncMode: "allowAll", scriptCallbackParam: "callback", generateRequestCallback: function(id) { return "&" + this.scriptCallbackParam + "=YAHOO.util.ScriptNodeDataSource.callbacks[" + id + "]"; }, doBeforeGetScriptNode: function(sUri) { return sUri; }, makeConnection: function(oRequest, oCallback, oCaller) { var tId = DS._nTransactionId++; this.fireEvent("requestEvent", { tId: tId, request: oRequest, callback: oCallback, caller: oCaller }); if (util.ScriptNodeDataSource._nPending === 0) { util.ScriptNodeDataSource.callbacks = []; util.ScriptNodeDataSource._nId = 0; } var id = util.ScriptNodeDataSource._nId; util.ScriptNodeDataSource._nId++; var oSelf = this; util.ScriptNodeDataSource.callbacks[id] = function(oRawResponse) { if ((oSelf.asyncMode !== "ignoreStaleResponses") || (id === util.ScriptNodeDataSource.callbacks.length - 1)) { if (oSelf.responseType === DS.TYPE_UNKNOWN) { if (YAHOO.lang.isArray(oRawResponse)) { oSelf.responseType = DS.TYPE_JSARRAY; } else { if (oRawResponse.nodeType && oRawResponse.nodeType == 9) { oSelf.responseType = DS.TYPE_XML; } else { if (oRawResponse.nodeName && (oRawResponse.nodeName.toLowerCase() == "table")) { oSelf.responseType = DS.TYPE_HTMLTABLE; } else { if (YAHOO.lang.isObject(oRawResponse)) { oSelf.responseType = DS.TYPE_JSON; } else { if (YAHOO.lang.isString(oRawResponse)) { oSelf.responseType = DS.TYPE_TEXT; } } } } } } oSelf.handleResponse(oRequest, oRawResponse, oCallback, oCaller, tId); } else { } delete util.ScriptNodeDataSource.callbacks[id]; }; util.ScriptNodeDataSource._nPending++; var sUri = this.liveData + oRequest + this.generateRequestCallback(id); sUri = this.doBeforeGetScriptNode(sUri); this.getUtility.script(sUri, { autopurge: true, onsuccess: util.ScriptNodeDataSource._bumpPendingDown, onfail: util.ScriptNodeDataSource._bumpPendingDown }); return tId; } }); lang.augmentObject(util.ScriptNodeDataSource, DS); lang.augmentObject(util.ScriptNodeDataSource, { _nId: 0, _nPending: 0, callbacks: [] }); util.XHRDataSource = function(oLiveData, oConfigs) { this.dataType = DS.TYPE_XHR; this.connMgr = this.connMgr || util.Connect; oLiveData = oLiveData || ""; util.XHRDataSource.superclass.constructor.call(this, oLiveData, oConfigs); }; lang.extend(util.XHRDataSource, DS, { connMgr: null, connXhrMode: "allowAll", connMethodPost: false, connTimeout: 0, makeConnection: function(oRequest, oCallback, oCaller) {
		var oRawResponse = null; var tId = DS._nTransactionId++; this.fireEvent("requestEvent", { tId: tId, request: oRequest, callback: oCallback, caller: oCaller }); var oSelf = this; var oConnMgr = this.connMgr; var oQueue = this._oQueue; var _xhrSuccess = function(oResponse) { if (oResponse && (this.connXhrMode == "ignoreStaleResponses") && (oResponse.tId != oQueue.conn.tId)) { return null; } else { if (!oResponse) { this.fireEvent("dataErrorEvent", { request: oRequest, callback: oCallback, caller: oCaller, message: DS.ERROR_DATANULL }); DS.issueCallback(oCallback, [oRequest, { error: true}], true, oCaller); return null; } else { if (this.responseType === DS.TYPE_UNKNOWN) { var ctype = (oResponse.getResponseHeader) ? oResponse.getResponseHeader["Content-Type"] : null; if (ctype) { if (ctype.indexOf("text/xml") > -1) { this.responseType = DS.TYPE_XML; } else { if (ctype.indexOf("application/json") > -1) { this.responseType = DS.TYPE_JSON; } else { if (ctype.indexOf("text/plain") > -1) { this.responseType = DS.TYPE_TEXT; } } } } } this.handleResponse(oRequest, oResponse, oCallback, oCaller, tId); } } }; var _xhrFailure = function(oResponse) { this.fireEvent("dataErrorEvent", { request: oRequest, callback: oCallback, caller: oCaller, message: DS.ERROR_DATAINVALID }); if (lang.isString(this.liveData) && lang.isString(oRequest) && (this.liveData.lastIndexOf("?") !== this.liveData.length - 1) && (oRequest.indexOf("?") !== 0)) { } oResponse = oResponse || {}; oResponse.error = true; DS.issueCallback(oCallback, [oRequest, oResponse], true, oCaller); return null; }; var _xhrCallback = { success: _xhrSuccess, failure: _xhrFailure, scope: this }; if (lang.isNumber(this.connTimeout)) { _xhrCallback.timeout = this.connTimeout; } if (this.connXhrMode == "cancelStaleRequests") { if (oQueue.conn) { if (oConnMgr.abort) { oConnMgr.abort(oQueue.conn); oQueue.conn = null; } else { } } } if (oConnMgr && oConnMgr.asyncRequest) {
			var sLiveData = this.liveData; var isPost = this.connMethodPost; var sMethod = (isPost) ? "POST" : "GET"; var sUri = (isPost || !lang.isValue(oRequest)) ? sLiveData : sLiveData + oRequest; var sRequest = (isPost) ? oRequest : null; if (this.connXhrMode != "queueRequests") { oQueue.conn = oConnMgr.asyncRequest(sMethod, sUri, _xhrCallback, sRequest); } else {
				if (oQueue.conn) {
					var allRequests = oQueue.requests;
					allRequests.push({ request: oRequest, callback: _xhrCallback }); if (!oQueue.interval) { oQueue.interval = setInterval(function() { if (oConnMgr.isCallInProgress(oQueue.conn)) { return; } else { if (allRequests.length > 0) { sUri = (isPost || !lang.isValue(allRequests[0].request)) ? sLiveData : sLiveData + allRequests[0].request; sRequest = (isPost) ? allRequests[0].request : null; oQueue.conn = oConnMgr.asyncRequest(sMethod, sUri, allRequests[0].callback, sRequest); allRequests.shift(); } else { clearInterval(oQueue.interval); oQueue.interval = null; } } }, 50); } 
				} else { oQueue.conn = oConnMgr.asyncRequest(sMethod, sUri, _xhrCallback, sRequest); } 
			} 
		} else { DS.issueCallback(oCallback, [oRequest, { error: true}], true, oCaller); } return tId;
	} 
	}); lang.augmentObject(util.XHRDataSource, DS); util.DataSource = function(oLiveData, oConfigs) { oConfigs = oConfigs || {}; var dataType = oConfigs.dataType; if (dataType) { if (dataType == DS.TYPE_LOCAL) { lang.augmentObject(util.DataSource, util.LocalDataSource); return new util.LocalDataSource(oLiveData, oConfigs); } else { if (dataType == DS.TYPE_XHR) { lang.augmentObject(util.DataSource, util.XHRDataSource); return new util.XHRDataSource(oLiveData, oConfigs); } else { if (dataType == DS.TYPE_SCRIPTNODE) { lang.augmentObject(util.DataSource, util.ScriptNodeDataSource); return new util.ScriptNodeDataSource(oLiveData, oConfigs); } else { if (dataType == DS.TYPE_JSFUNCTION) { lang.augmentObject(util.DataSource, util.FunctionDataSource); return new util.FunctionDataSource(oLiveData, oConfigs); } } } } } if (YAHOO.lang.isString(oLiveData)) { lang.augmentObject(util.DataSource, util.XHRDataSource); return new util.XHRDataSource(oLiveData, oConfigs); } else { if (YAHOO.lang.isFunction(oLiveData)) { lang.augmentObject(util.DataSource, util.FunctionDataSource); return new util.FunctionDataSource(oLiveData, oConfigs); } else { lang.augmentObject(util.DataSource, util.LocalDataSource); return new util.LocalDataSource(oLiveData, oConfigs); } } }; lang.augmentObject(util.DataSource, DS);
})(); YAHOO.util.Number = { format: function(C, G) { var B = YAHOO.lang; if (!B.isValue(C) || (C === "")) { return ""; } G = G || {}; if (!B.isNumber(C)) { C *= 1; } if (B.isNumber(C)) { var E = (C < 0); var K = C + ""; var H = (G.decimalSeparator) ? G.decimalSeparator : "."; var I; if (B.isNumber(G.decimalPlaces)) { var J = G.decimalPlaces; var D = Math.pow(10, J); K = Math.round(C * D) / D + ""; I = K.lastIndexOf("."); if (J > 0) { if (I < 0) { K += H; I = K.length - 1; } else { if (H !== ".") { K = K.replace(".", H); } } while ((K.length - 1 - I) < J) { K += "0"; } } } if (G.thousandsSeparator) { var M = G.thousandsSeparator; I = K.lastIndexOf(H); I = (I > -1) ? I : K.length; var L = K.substring(I); var A = -1; for (var F = I; F > 0; F--) { A++; if ((A % 3 === 0) && (F !== I) && (!E || (F > 1))) { L = M + L; } L = K.charAt(F - 1) + L; } K = L; } K = (G.prefix) ? G.prefix + K : K; K = (G.suffix) ? K + G.suffix : K; return K; } else { return C; } } }; (function() {
	var A = function(C, E, D) { if (typeof D === "undefined") { D = 10; } for (; parseInt(C, 10) < D && D > 1; D /= 10) { C = E.toString() + C; } return C.toString(); }; var B = { formats: { a: function(D, C) { return C.a[D.getDay()]; }, A: function(D, C) { return C.A[D.getDay()]; }, b: function(D, C) { return C.b[D.getMonth()]; }, B: function(D, C) { return C.B[D.getMonth()]; }, C: function(C) { return A(parseInt(C.getFullYear() / 100, 10), 0); }, d: ["getDate", "0"], e: ["getDate", " "], g: function(C) { return A(parseInt(B.formats.G(C) % 100, 10), 0); }, G: function(E) { var F = E.getFullYear(); var D = parseInt(B.formats.V(E), 10); var C = parseInt(B.formats.W(E), 10); if (C > D) { F++; } else { if (C === 0 && D >= 52) { F--; } } return F; }, H: ["getHours", "0"], I: function(D) { var C = D.getHours() % 12; return A(C === 0 ? 12 : C, 0); }, j: function(G) { var F = new Date("" + G.getFullYear() + "/1/1 GMT"); var D = new Date("" + G.getFullYear() + "/" + (G.getMonth() + 1) + "/" + G.getDate() + " GMT"); var C = D - F; var E = parseInt(C / 60000 / 60 / 24, 10) + 1; return A(E, 0, 100); }, k: ["getHours", " "], l: function(D) { var C = D.getHours() % 12; return A(C === 0 ? 12 : C, " "); }, m: function(C) { return A(C.getMonth() + 1, 0); }, M: ["getMinutes", "0"], p: function(D, C) { return C.p[D.getHours() >= 12 ? 1 : 0]; }, P: function(D, C) { return C.P[D.getHours() >= 12 ? 1 : 0]; }, s: function(D, C) { return parseInt(D.getTime() / 1000, 10); }, S: ["getSeconds", "0"], u: function(C) { var D = C.getDay(); return D === 0 ? 7 : D; }, U: function(F) { var C = parseInt(B.formats.j(F), 10); var E = 6 - F.getDay(); var D = parseInt((C + E) / 7, 10); return A(D, 0); }, V: function(F) { var E = parseInt(B.formats.W(F), 10); var C = (new Date("" + F.getFullYear() + "/1/1")).getDay(); var D = E + (C > 4 || C <= 1 ? 0 : 1); if (D === 53 && (new Date("" + F.getFullYear() + "/12/31")).getDay() < 4) { D = 1; } else { if (D === 0) { D = B.formats.V(new Date("" + (F.getFullYear() - 1) + "/12/31")); } } return A(D, 0); }, w: "getDay", W: function(F) { var C = parseInt(B.formats.j(F), 10); var E = 7 - B.formats.u(F); var D = parseInt((C + E) / 7, 10); return A(D, 0, 10); }, y: function(C) { return A(C.getFullYear() % 100, 0); }, Y: "getFullYear", z: function(E) { var D = E.getTimezoneOffset(); var C = A(parseInt(Math.abs(D / 60), 10), 0); var F = A(Math.abs(D % 60), 0); return (D > 0 ? "-" : "+") + C + F; }, Z: function(C) { var D = C.toString().replace(/^.*:\d\d( GMT[+-]\d+)? \(?([A-Za-z ]+)\)?\d*$/, "$2").replace(/[a-z ]/g, ""); if (D.length > 4) { D = B.formats.z(C); } return D; }, "%": function(C) { return "%"; } }, aggregates: { c: "locale", D: "%m/%d/%y", F: "%Y-%m-%d", h: "%b", n: "\n", r: "locale", R: "%H:%M", t: "\t", T: "%H:%M:%S", x: "locale", X: "locale" }, format: function(G, F, D) { F = F || {}; if (!(G instanceof Date)) { return YAHOO.lang.isValue(G) ? G : ""; } var H = F.format || "%m/%d/%Y"; if (H === "YYYY/MM/DD") { H = "%Y/%m/%d"; } else { if (H === "DD/MM/YYYY") { H = "%d/%m/%Y"; } else { if (H === "MM/DD/YYYY") { H = "%m/%d/%Y"; } } } D = D || "en"; if (!(D in YAHOO.util.DateLocale)) { if (D.replace(/-[a-zA-Z]+$/, "") in YAHOO.util.DateLocale) { D = D.replace(/-[a-zA-Z]+$/, ""); } else { D = "en"; } } var J = YAHOO.util.DateLocale[D]; var C = function(L, K) { var M = B.aggregates[K]; return (M === "locale" ? J[K] : M); }; var E = function(L, K) { var M = B.formats[K]; if (typeof M === "string") { return G[M](); } else { if (typeof M === "function") { return M.call(G, G, J); } else { if (typeof M === "object" && typeof M[0] === "string") { return A(G[M[0]](), M[1]); } else { return K; } } } }; while (H.match(/%[cDFhnrRtTxX]/)) { H = H.replace(/%([cDFhnrRtTxX])/g, C); } var I = H.replace(/%([aAbBCdegGHIjklmMpPsSuUVwWyYzZ%])/g, E); C = E = undefined; return I; } }; YAHOO.namespace("YAHOO.util"); YAHOO.util.Date = B; YAHOO.util.DateLocale = { a: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], A: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], b: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], B: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], c: "%a %d %b %Y %T %Z", p: ["AM", "PM"], P: ["am", "pm"], r: "%I:%M:%S %p", x: "%d/%m/%y", X: "%T" };
	YAHOO.util.DateLocale["en"] = YAHOO.lang.merge(YAHOO.util.DateLocale, {}); YAHOO.util.DateLocale["en-US"] = YAHOO.lang.merge(YAHOO.util.DateLocale["en"], { c: "%a %d %b %Y %I:%M:%S %p %Z", x: "%m/%d/%Y", X: "%I:%M:%S %p" }); YAHOO.util.DateLocale["en-GB"] = YAHOO.lang.merge(YAHOO.util.DateLocale["en"], { r: "%l:%M:%S %P %Z" }); YAHOO.util.DateLocale["en-AU"] = YAHOO.lang.merge(YAHOO.util.DateLocale["en"]);
})(); YAHOO.register("datasource", YAHOO.util.DataSource, { version: "2.7.0", build: "1799" });