/*
 * Javascript file for /Common/Controls/Caps/SwitchableCapsRatingHistoryChart.ascx
 * Requires Protoype.  We assume 1.5.0_rc0 for newsletters compatability, so some stuff is not great.
 * Values for IDcAdvancedChart.urls.capsOn/capsOff are populated from the code behind
 * in the control.
 */

var Caps = window.Caps || {};
Caps.IdcAdvancedChart = function(userOptions){
    var options = {
	chart: "",
	enableCapsSwitching: true,
	showCapsRating: true,
	timeSpan: "OneYear",
	enableDateSwitching:true,
	chartKeys: {
	    Intraday: "1 Day",
	    OneMonth: "1 Month",
	    ThreeMonths: "3 Months",
	    SixMonths: "6 Months",
	    OneYear: "1 Year",
	    TwoYears: "2 Years"
	},
	controlsClass: "switchControls"
    };
    
    // Apply userOptions to local Options object
    if (userOptions) {
	Object.extend(options, userOptions);
    }
    return {
	options:options,
	createLinkedList: function(obj, active, callback){
	    var self = this;
	    var list = document.createElement('UL');
	    $H(obj).each(function(e){
		var li = document.createElement('LI');
		li.className = e.key;
		var link = self.createLink(e, callback);
		if (e.key == active) {
		    link.removeAttribute('href');
		    $(link).addClassName('disabled');
		}
		li.appendChild(link);
		list.appendChild(li);
	    });
	    return list;
	},
	createLink: function(keyValue, callback){
	    var self = this;
	    var anchor = document.createElement('a');
	    anchor.href = '#' + keyValue.key;
	    anchor.rel = keyValue.key;
	    anchor.onclick = function(){
		callback(anchor);
		return false;
	    };
	    anchor.appendChild(document.createTextNode(keyValue.value));
	    return anchor;
	},
	getChart: function(link){
	    var self = this;
	    if (!!link.href) {
		self.timeSpan = link.rel;
		self.getChartByTimeSpan();
	    }
	},
	getChartByTimeSpan: function(){
	    var self = this;
	    var urls = (!!self.capsRatingOn) ? self.options.urlsOn : self.options.urlsOff;
	    self.chartContainer.update();
	    var newChart = new Image();
	    var src = urls[self.timeSpan];
	    if (Prototype.Browser.IE) { // onload does not fire for cached images in IE so make them new
		var dateVar = new Date().format('yyyy-mm-dd-ss');
		src += "&amp;" + dateVar;
	    }
	    newChart.src = src;
	    newChart.onload = function() {
		self.chartContainer.update(newChart);
	    };
	    //self.chart.src = urls[self.timeSpan];
	},
	disableLink: function(link){
	    var self = this;
	    var parent = $(link).up("ul");
	    $A(parent.childNodes).each(function(e){
		if (e.firstChild.nodeName.toLowerCase() == "a") {
		    var a = e.firstChild;
		    if (!a.href) {
			a.href = '#' + a.rel;
			$(a).removeClassName('disabled');
		    }
		}
	    });
	    link.removeAttribute('href');
	    $(link).addClassName('disabled');
	},
	goPreload: function() {
	    var self = this;
	    
	    if (self.options.urlsOn) {
		$H(self.options.urlsOn).each(function(e){
		    var img = new Image();
		    img.src = e.value;
		});
	    }
	    
	    if (self.options.urlsOff) {
		$H(self.options.urlsOff).each(function(e){
		    var img = new Image();
		    img.src = e.value;
		});
	    }
	},
	prepare: function() {
	    var self = this;
	    
	    if (!!Prototype) { 
		var chart = $(self.options.chart);
		if (chart) {
		    self.chart = chart;
		    self.capsRatingOn = self.options.showCapsRating;
		    self.timeSpan =self.options.timeSpan;
		    
		    if (self.options.enableDateSwitching || self.options.enableCapsSwitching) {
			var holdingDiv = chart.up("div.idcAdvancedChart");
			self.chartContainer = $(chart.parentNode);
			self.chartContainer.setStyle({"height": $(chart).getHeight() + "px"});
			//self.goPreload();
			
			//create controls UL
			var chartControls = document.createElement('UL');
			chartControls.className = "idcChartControls";
			
			// Offer CapsSwitching?
			if(self.options.enableCapsSwitching) {
			    var capsRatingLi = document.createElement('LI');
			    capsRatingLi.className = "capsRating";
			    capsRatingLi.appendChild(document.createTextNode("CAPS Rating: "));
			    
			    var capsOnOff = (self.capsRatingOn) ? "on" : "off";
			    var capsRatingSubList = self.createLinkedList({on: "On", off: "Off"},capsOnOff, function(anchor) {
				self.capsRatingOn = (anchor.rel == 'on') ? true : false;
				self.disableLink(anchor);
				self.getChartByTimeSpan(self.timeSpan);
			    });
			    capsRatingSubList.className = self.options.controlsClass;
			    capsRatingLi.appendChild(capsRatingSubList);
			    chartControls.appendChild(capsRatingLi);
			}
			
			//Offer Date Switching?
			if(self.options.enableDateSwitching) {
			    var chartsLi = document.createElement('LI');
			    chartsLi.className = "charts";
			    chartsLi.appendChild(document.createTextNode("Chart: "));
			    
			    var chartsSubList = self.createLinkedList(self.options.chartKeys, self.options.timeSpan, function(link){
				self.getChart(link);
				self.disableLink(link);
			    });
			    chartsSubList.className = self.options.controlsClass;
			    chartsLi.appendChild(chartsSubList);
			    chartControls.appendChild(chartsLi);
			}
			holdingDiv.appendChild(chartControls);
		    }
		}
	    }
	}
    };
};

