function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

var NowtvDataSource = {
	serviceAPI : 'ServicesAPI',
	version : '1.00',
	requestURL : '/nowtv-api/',
	subContextMapping : {
		'getWhatsNews' : 'nowtv-web-content',
		'getInteractiveServices' : 'nowtv-web-content',
		'getInteractivePromo' : 'nowtv-web-content',
		'getVideoExpressHighlights' : 'nowtv-web-content',
		'getMarketingPromo' : 'nowtv-web-content',
		'getMarketingPromoVideo' : 'nowtv-web-content',
		'getNowHKHighlights' : 'nowtv-web-content',
		'getNowSportHighlights' : 'nowtv-web-content',
		'getPageByTextId' : 'nowtv-web-content',
		'getProgramHighlights' : 'nowtv-web-content',
		'getSubscriptionPromo' : 'nowtv-web-content',
		'getSubscriptionPrice' : 'nowtv-web-content',
		'getSupportDevices' : 'nowtv-web-content',
		'getSupportQuestionCategories' : 'nowtv-web-content',
		'getSupportQuestionsByDeviceId' : 'nowtv-web-content',
		'getTopSupportQuestions' : 'nowtv-web-content',
		'getUserManualByDeviceId' : 'nowtv-web-content',
		'getUserManualPDF' : 'nowtv-web-content',
		'getTopAdv' : 'nowtv-web-content',
		'getAdv' : 'nowtv-web-content',
		'getHDAdv' : 'nowtv-web-content',
		
		'getAllChannels' : 'now-channel',
		'getChannelByChannelNo' : 'now-channel',
		'getChannelByGenreId' : 'now-channel',
		'getChannelByGenreTextId' : 'now-channel',
		'getGenres' : 'now-channel',
		'getHDChannels' : 'now-channel',
		'getProgramByChannelNo' : 'now-channel',
		'getProgramHighlightsByGenreId' : 'now-channel',
		'getProgramHighlightsByGenreTextId' : 'now-channel',
		'getProgramHighlightsByGenreTextId2' : 'now-channel',
		
		'getNowSelectById' : 'now-select',
		'getNowSelectByTextId' : 'now-select',
		'getNowSelectLandingHighlights' : 'now-select'
	},
	cacheData : {},
	
	getRequestParameter : function(name){
		name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
		var regexS = "[\\?&]"+name+"=([^&#]*)";
		var regex = new RegExp( regexS );
		var results = regex.exec( window.location.href );
		if( results == null )
			return "";
		else
			return results[1];
	},
	
	requestData : function(cmd, callback, parameter){
		if (1 == 0){
			// Original text file data
			var url = this.buildRequestURL(cmd, callback, parameter, this.version);
			$.getJSON(url, this.handleReturnData(callback, cmd));
			return;
		}
		else{
			var url = this.requestURL;
			if (parameter == null){
				parameter = {'languageCode' : 'zh', 'output' : 'json'};
			}
			parameter['languageCode'] = pageInfo.lang;
			parameter['output'] = 'json';
			parameter['nowtvapi_v'] = this.version;
			
			var makeRequest = true;
			
			if (readCookie('__DATE__') == null || readCookie('__DATE__') == ''){
				try{
					if (NowtvDataSource.cacheData[cmd] != null && NowtvDataSource.cacheData[cmd] != ""){
						data = NowtvDataSource.cacheData[cmd];
						if (data.data.status.error == 0 || data.data.status.error == '0'){
							makeRequest = false;
							this.handleReturnData(callback, cmd)(data);
						}
					}
				}catch(e){}
			}
			
			if (makeRequest){
				//alert("Cache not found: " + cmd);
				$.getJSON(url + this.subContextMapping[cmd] + '/' + cmd, parameter, this.handleReturnData(callback, cmd));
			}
			else{
				//alert("Cache found: " + cmd);
			}
		}
	},
	
	handleReturnData: function(callback, cmd){
		return function(returnData){
			try{			
				callback(returnData.data);
			}catch(e){};
		}
	},
	
	buildRequestURL : function(cmd, callback, parameter, version){
		var parameterURL = "";
		if (parameter != null){
			for (var key in parameter) {
				// Build the parameter
				//alert("key:"+key+":"+parameter[key]);
				parameterURL += "_" + parameter[key];
			}
		}
		// Return the request URL
		//alert(parameterURL);
		return "/cmd/" + cmd + parameterURL + ".txt";
	},
	
	putCacheData : function(cmd, data){
		if (data != null){
			NowtvDataSource.cacheData[cmd] = data;
		} 
	}
};
