/**
*

*containerId - container for the table
*indexTableId - id of the table
*
*Sample usage :
*        var urlStringRegional  = "http://www.msci.com/webapp/indexperf/charts?indices=110,C,30|2320,C,36|25483,C,36|25553,C,36|73510,R,41|73543,R,41|73562,R,41|73578,R,41|83,C,30|96980,C,75|96981,C,75&priceLevel=40&currency=15&frequency=D&scope=R&format=XML&baseValue=false&site=gimi";
*        ajaxIndexTable('indexTableContainer','indexTable').show(urlStringRegional);
*/

function ajaxIndexTable(containerId,indexTableId){

		getData  =  function(xml){

			//alert('Rendering to: ' + containerId);

			var index = $('index',xml);
			var result=[];
			index.each(function(i) {
				var valueArray = $(this).find('value');
				var indexName = $(this).attr("id");
				//var splits = indexName.split(",");
				//indexName = splits[0];
				
				var lastValue = parseFloat(valueArray.last().text().replace(",",""));
				var oneBeforeLastValue = parseFloat(valueArray.slice(-2,-1).text().replace(",",""));
				
				var dateArray = $(this).find('date');
				var lastDate = dateArray.last().text().split("/");

				var month = lastDate[0];
				var day = lastDate[1];
				var year = lastDate[2];
				lastDate = formatDateShort(day, month);
				
				var sortNumber = indexMapping[indexName].sortNumber;
				var newIndexName = indexMapping[indexName].indexName;
				var url = indexMapping[indexName].getUrlForDate(formatDateLong(day, month, year));
				
				//show web service name if there is no mapping for this indexName
				newIndexName = newIndexName?newIndexName:indexName;
				
				//var change = ((1 - lastValue/oneBeforeLastValue)*100).toFixed(2);
				var change = ((lastValue/oneBeforeLastValue - 1)*100).toFixed(2);
				result.push( [sortNumber,	[newIndexName , url ], lastValue, change, lastDate] );
			});
			return 	result;
		}
		 
		renderData  = function(data){

			$('[id=' + containerId +']').html( '<table id="' + indexTableId + '"></table>' );
			$('[id=' + indexTableId +']').dataTable( {
				"aaData": data,
				"aaSorting": [[ 0, "asc" ]],
				"aoColumns": [
				
				 {  "sTitle": "Sorting Number" ,
				 	  "bVisible":    false,
						"fnRender": function(obj) {
							var sReturn = obj.aData[ obj.iDataColumn ];
							return sReturn;
						}

					},
					{ "sTitle": "MSCI Index" ,
						"fnRender": function(obj) {
							var sReturn = obj.aData[ obj.iDataColumn ];
							var indexName = sReturn[0];
							var url = sReturn[1];

							var link = "<a href='" + url + "'>" + indexName + "</a>";
							
							return link;
						}

					},
					{ "sTitle": "Level" ,
						"fnRender": function(obj) {
							var sReturn = obj.aData[ obj.iDataColumn ];
						
							return sReturn;
						}

					},
					{ "sTitle": "Daily Perf" ,
						"fnRender": function(obj) {
							var sReturn = obj.aData[ obj.iDataColumn ];
							if ( sReturn > 0 ) {
								sReturn = "<span class='dailyPref up'>" + sReturn + "%</span>";
							}else{
								sReturn = "<span class='dailyPref down'>" + sReturn + "%</span>";
							}
							

							return sReturn;
						}
					},
					{   "sTitle": "As of" ,
						  "fnRender": function(obj) {
							var sReturn = obj.aData[ obj.iDataColumn ];
						
							return sReturn;
						}
					}	
				],
				"bPaginate": false,
				"bInfo": false,
				"bFilter": false,
				"bSort": true
			} );
		} 
	
		/*sourceUrl in the following style
		 * http://www.msci.com/webapp/indexperf/charts?indices=73578,C,41|73510,C,41|73562,C,41&priceLevel=0&currency=15&frequency=D&scope=R&format=XML&baseValue=false&site=gimi
		 * */
		show  = function(sourceUrl){
			
			//var finalUrl = appendStartAndEndDate(sourceUrl);
			var finalUrl = sourceUrl;

			//$.get(finalUrl , {} , function(xml){
			//	renderData(getData(xml)); 
			//});

			// make the calls synchronously, else they all collide with each other
			jQuery.ajax({
				url: finalUrl,
				success: function(data){
					renderData(getData(data));
				},
				async: false
			});

		}
		
		return this;
}

var months = new Array("Jan", "Feb", "Mar", 
		"Apr", "May", "Jun", "Jul", "Aug", "Sep", 
		"Oct", "Nov", "Dec");

function formatDate(date){
	var day = date.getDate();
	var month = date.getMonth();
	var year = date.getFullYear();
	
	return day + " " + months[month] + ", " + year;
}

function formatDateShort(day, month){

	if (month.substring(0,1) == "0") month = month.substring(1);
	
	return months[month-1] + ", " + day;
}

function formatDateLong(day, month, year){
	return formatDateShort(day, month) + ", " + year;
}

function	appendStartAndEndDate(sourceUrl) {
			
			var date = new Date();
			
			var todayString = formatDate(date);
			//console.log(todayString);
			date.setDate(date.getDate()- 5);
			
			var fiveDaysBefore = formatDate(date);
			//console.log(fiveDaysBefore);
			
			return sourceUrl + "&startDate=" + fiveDaysBefore + "&endDate=" + todayString;
			
}




function mappingObject(sortNumber , indexName , url) {
	 		this.sortNumber = sortNumber;
	 		this.indexName = indexName;
	 		this.url = url;
	 		
	 		this.getUrlForDate  = function (date){
				 	return url.replace('<As_Of_Date>' , date );
	 		}
}

var regionalUrlString  =  '/products/indices/performance.html?chart=regional&priceLevel=40&scope=R&style=C&asOf=<As_Of_Date>&currency=15';
var ewRegionalUrlString  =  '/products/indices/performance.html?chart=regional&priceLevel=40&scope=R&style=W&asOf=<As_Of_Date>&currency=15';
var countryUrlString  = '/products/indices/performance.html?chart=country&priceLevel=40&scope=C&style=C&asOf=<As_Of_Date>&currency=15';
var indexMapping = {
	 'ACWI,R,41'  :  new mappingObject(1, 'ACWI IMI' , regionalUrlString + '&size=41&indexId=73562'),
	 'ACWI,C,36'  :  new mappingObject(2, 'ACWI' , regionalUrlString + '&size=36&indexId=2591'),
	 'WORLD,C,36' :  new mappingObject(3, 'World', regionalUrlString + '&size=36&indexId=106'),
	 'EAFE,C,36' : new mappingObject(4, 'EAFE' , regionalUrlString + '&size=36&indexId=108'),
	 'KOKUSAI INDEX (WORLD ex JP),C,36' : new mappingObject(5, 'Kokusai' , regionalUrlString + '&size=36&indexId=1157'),
	 'EUROPE,C,36' : new mappingObject(6, 'Europe', regionalUrlString + '&size=36&indexId=110'),
	 'AC ASIA ex JAPAN,C,36' : new mappingObject(7, 'AC Asia ex Japan' ,  regionalUrlString + '&size=36&indexId=2320'),
	 'EM (EMERGING MARKETS),C,36' : new mappingObject(8, 'Emerging Markets' , regionalUrlString + '&size=36&indexId=13'),
	 'EM (EMERGING MARKETS),R,41' : new mappingObject(9, 'Emerging Markets IMI' , regionalUrlString + '&size=41&indexId=73578'),
	 'EUROPE,R,39' : new mappingObject(10, 'Europe Small Cap', regionalUrlString + '&size=39&indexId=3338'),
	 'NORTH AMERICA,R,39' : new mappingObject(11, 'North America Small Cap', regionalUrlString + '&size=39&indexId=3336'),
	 'EM (EMERGING MARKETS),R,39' : new mappingObject(12, 'Emerging Markets Small Cap' , regionalUrlString + '&size=39&indexId=64419'),
	 'AC ASIA ex JAPAN,R,39' : new mappingObject(13, 'AC Asia ex Japan Small Cap' ,  regionalUrlString + '&size=39&indexId=64394'),
	 'JAPAN ALL CAP,C,75' : new mappingObject(14, 'Japan All Cap' ,  countryUrlString + '&size=75&indexId=96965'),
	 'USA ALL CAP,C,75' : new mappingObject(15, 'USA All Cap' , countryUrlString + '&size=75&indexId=96981' ),
	 'UNITED KINGDOM ALL CAP,C,75' : new mappingObject(16 , 'UK All Cap' , countryUrlString + '&size=75&indexId=96980'),
	 'ACWI,R,36'  :  new mappingObject(17, 'ACWI Equal Weighted' , ewRegionalUrlString + '&size=36&indexId=90289'),
	 'ACWI MINIMUM VOLATILITY (USD),R,36'  :  new mappingObject(18, 'ACWI Min Vol' , regionalUrlString + '&size=36&indexId=95717')
}

