var CHG_DATA = {
	version :0,
	datas : []
};
var ALL_DATA = {
	version :0,
	datas : []
};
var CHG_MAX_SIZE = 1000;

function startAwardUpdate(reqTimeout,updateTimeout){
	if (reqTimeout == null)
		reqTimeout = 20000;
	if (updateTimeout == null)
		updateTimeout = 100;

	var version = parseInt($('version').value, 10);
	CHG_DATA.version = version;

	awardReqFn(reqTimeout);
	awardUpdateFn(updateTimeout);
}

function awardUpdateFn(timeout) {
	var timeout2 = timeout;
	if (ALL_DATA.datas.length > 0) {
		if (CHG_DATA.version <= ALL_DATA.version) {
			CHG_DATA.version = ALL_DATA.version;
			CHG_DATA.datas = [];
		}
		var data = ALL_DATA.datas[0];
		var awards = data.awardArr;
		key = data.intTime + '_' + data.lineId;
		for (j = 0; j < awards.length; j++) {
			var awardEl = $('award_' + key + '_' + j);
			if (null != awardEl) {
				awardEl.set('text', awards[j].toFixed(2));
			}
		}
		ALL_DATA.datas.erase(data);
		if (ALL_DATA.datas.length == 0) 
			$('version').value = ALL_DATA.version;
	} else if (CHG_DATA.datas.length > 0) {
		if (CHG_DATA.datas.length >= CHG_MAX_SIZE) {
			CHG_DATA.version = 0;
			CHG_DATA.datas = [];
		} else {
			var versionEl = $('version');
			var curVersion = parseInt(versionEl.value, 10);
			var data = CHG_DATA.datas[0];
			if (curVersion < data.version) {
				var key = data.intTime + '_' + data.lineId;
				var awardEl = $('award_' + key + '_' + data.index);
				if (null != awardEl) {
					awardEl.set('text', data.award.toFixed(2));
				}
				versionEl.value = data.version;
			}
			CHG_DATA.datas.erase(data);
		}
	}else{
		timeout2 = 5000;
	}
	
	window.setTimeout( function() {
		awardUpdateFn(timeout);
	}, timeout2);
}

function awardReqFn(timeout) {
	var fn = function() {
		window.setTimeout( function() {
			awardReqFn(timeout);
		}, timeout);
	};
	var awardRequestLocalUrl = Betzc.base + '/requestRemote.jsp';
	var paramStr = 'noCache=' + new Date().getTime();
	paramStr += '&url=' + window.changeAwardRequestUrl;
	var req = new Request( {
		url :awardRequestLocalUrl,
		method :'get',
		onSuccess : function(responseText) {
			if (responseText != null) {
				responseText = responseText.trim();
				responseText = responseText.replace(/\r\n/g, "");
			}
			if (responseText != null && responseText != '' && isJsonString(responseText)) {
				var chgHash = JSON.decode(responseText);
				var maxVersion = chgHash.maxVersion;
				var minVersion = chgHash.minVersion;
				if (minVersion > CHG_DATA.version || CHG_DATA.version > maxVersion) {// 超出变化范围，请求全局
					var req = new Request( {
						url :awardRequestLocalUrl,
						method :'get',
						onSuccess : function(responseText) {
							if (responseText != null && responseText.trim() != '') {
								responseText = responseText.replace(/\r\n/g, "");
								if (isJsonString(responseText)) {
									var allHash = JSON.decode(responseText);
									ALL_DATA.version = allHash.version;
									ALL_DATA.datas = allHash.allData;
									changeTime();
								}
							}
							fn();
						},
						onFailure : function(instance) {
							fn();
						}
					}).send('url=' + window.AllAwardRequestUrl + '&noCache=' + new Date().getTime());
				} else {// 变化范围之内
					var datas = [];
					for ( var i = 0; i < chgHash.changeData.length; i++) {
						var data = chgHash.changeData[i];
						if (data.version > CHG_DATA.version)
							datas.push(data);
					}
					if (datas.length > 0) {
						var size = datas.length + CHG_DATA.datas.length;
						if(size >= CHG_MAX_SIZE){
							CHG_DATA.version = 0;
							CHG_DATA.datas = [];
						}else{
							CHG_DATA.version = maxVersion;
							CHG_DATA.datas.extend(datas);// 将datas纳入CHG_DATA.datas
							changeTime();
						}
					}
					fn();
				}
			} else {
				fn();
			}
		},
		onFailure : function(instance) {
			fn();
		}
	}).send(paramStr);
}

function changeTime() {
	var changeTimeEl = $('changeTime');
	if (changeTimeEl != null) {
		var d = new Date();
		var month = (d.getMonth() + 1).toString().length == 1 ? '0' + (d.getMonth() + 1) : (d.getMonth() + 1);
		var date = d.getDate().toString().length == 1 ? '0' + d.getDate() : d.getDate();
		var hours = d.getHours().toString().length == 1 ? '0' + d.getHours() : d.getHours();
		var minutes = d.getMinutes().toString().length == 1 ? '0' + d.getMinutes() : d.getMinutes();
		var time = month + '-' + date + ' ' + hours + ':' + minutes;
		$('changeTime').set('text', time);
	}
}
