// new namespace for main BT RapidStats javascript functions
YAHOO.namespace('rapidstats');
// Namespace 1, btexchanges
YAHOO.rapidstats.main = {

	Dom: YAHOO.util.Dom,
	YE: YAHOO.util.Event,
	$: YAHOO.util.Dom.get,
	Cookie: YAHOO.util.Cookie,

	init: function(){
		// look for select boxes with "onChange" class and add the change event to it

		// look for helptip images and set the appropriate text
		var helpImgs = btRs.Dom.getElementsByClassName('helpTip', 'img');
		var tipsOverlay = new YAHOO.widget.Tooltip("helpTipOverlay", {
			context:helpImgs,
			showdelay: 0,
			autodismissdelay: 30000,
			xyoffset: [25, 25],
			effect:{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.50},
			preventoverlap: true
		});
	},
	fireEvent: function (obj,evt){
		var fireOnThis = obj;
		if( document.createEvent ) {
			var evObj = document.createEvent('MouseEvents');
			evObj.initEvent( evt, true, false );
			fireOnThis.dispatchEvent(evObj);
		} else if( document.createEventObject ) {
			fireOnThis.fireEvent('on'+evt);
		}
	}
}
btRs = YAHOO.rapidstats.main;
btRs.YE.onDOMReady(btRs.init);

// new namespace for statistics
YAHOO.namespace('statistics');
// Namespace 3, ratings
YAHOO.statistics.main = {
	genNo: 0,

	init: function(){
		// Get the chart swf file
		//YAHOO.widget.Chart.SWFURL = "http://yui.yahooapis.com/2.7.0/build/charts/assets/charts.swf";
		YAHOO.widget.Chart.SWFURL = "/resources/images/yui-assets/charts.swf";

		// add the style class to the body
		btRs.Dom.addClass(document.body, 'yui-skin-sam');

		var pieGraphs = btRs.Dom.getElementsByClassName('graph-pie', 'table');
		if (pieGraphs.length > 0) {
			for (var j=0; j < pieGraphs.length; j++){
				var table_tds = pieGraphs[j].getElementsByTagName('td');
				if (table_tds.length > 1) {
					stats.replace_table_graph(pieGraphs[j], 'pie');
				}
			}
		}

		var columnGraphs = btRs.Dom.getElementsByClassName('graph-column', 'table');
		if (columnGraphs.length > 0) {
			for (var j=0; j < columnGraphs.length; j++){
				var table_tds = columnGraphs[j].getElementsByTagName('td');
				if (table_tds.length > 1) {
					stats.replace_table_graph(columnGraphs[j], 'column');
				}
			}
		}

		var barGraphs = btRs.Dom.getElementsByClassName('graph-bar', 'table');
		if (barGraphs.length > 0) {
			for (var j=0; j < barGraphs.length; j++){
				var table_tds = barGraphs[j].getElementsByTagName('td');
				if (table_tds.length > 1) {
					stats.replace_table_graph(barGraphs[j], 'bar');
				}
			}
		}

		var lineGraphs = btRs.Dom.getElementsByClassName('graph-line', 'table');
		if (lineGraphs.length > 0) {
			for (var j=0; j < lineGraphs.length; j++){
				var table_tds = lineGraphs[j].getElementsByTagName('td');
				if (table_tds.length > 1) {
					stats.replace_table_graph(lineGraphs[j], 'line');
				}
			}
		}
	},

	replace_table_graph: function(elRef, type){
		// setup xtitle, ytitle etc
		var theaders = elRef.getElementsByTagName('th');
		tfields = [];
		for (var t=0;t<theaders.length;t++){
			tfields[t] = theaders[t].innerHTML.toLowerCase();
		}
		var xTitle = tfields[0];
		var yTitle = tfields[1];
		var xKey = xTitle.replace(/ /gi,'');
		var yKey = yTitle.replace(/ /gi,'');

		var tableTr = elRef.getElementsByTagName('tr');
		var maxValue = 100;
		var minValue = 0;
		for (var r=0;r<tableTr.length;r++) {
			rowTds = tableTr[r].getElementsByTagName('td');
			for (var d=0;d<rowTds.length;d++) {
				tdVal = parseFloat(rowTds[d].innerHTML);
				if (stats.is_numeric(rowTds[d].innerHTML) && !isNaN(tdVal)) {
					var tdValUp = Math.ceil(tdVal*1.1);
					if(tdValUp%5>0){
						tdValUp = 5+tdValUp-(tdValUp%5);
					}
					if (tdValUp > maxValue) {
						maxValue = tdValUp;
					}else if(maxValue == 100) {
						maxValue = tdValUp;
					}
					if (tdVal < minValue) {
						minValue = tdVal;
					}
				}
			}
		}

		// Get the data from the page
		myDataSource = new YAHOO.util.DataSource(elRef);
		myDataSource.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE;
		myDataSource.responseSchema = {fields:[xKey,yKey]};

		var styleDef = {
			border: {color: 0xafafaf, size: 1},
			font: {name: "Arial", size: 10, color: 0x586b71},
			dataTip: {
				border: {color: 0x2e434d, size: 2},
				font: {name: "Arial", size: 12, color: 0x586b71}
			},
			yAxis: {
				titleDistance: 10,
				color: 0x2e434d,
				majorTicks: {color: 0x2e434d, length: 4},
				minorTicks: {color: 0x2e434d, length: 2},
				majorGridLines: {size: 1},
				titleRotation:-90
			},
			xAxis: {
				color: 0x2e434d,
				majorTicks: {color: 0x2e434d, length: 4},
				minorTicks: {color: 0x2e434d, length: 2}
			}
		};

		var is_rotated = false;
		if(btRs.Dom.hasClass(elRef,'rot-90')){
			styleDef['xAxis']['labelRotation'] = -90;
			styleDef['xAxis']['hideOverlappingLabels'] = false;
			is_rotated = 150;
		}else if(btRs.Dom.hasClass(elRef,'rot-60')){
			styleDef['xAxis']['labelRotation'] = -60;
			styleDef['xAxis']['hideOverlappingLabels'] = false;
			is_rotated = 125;
		}else if(btRs.Dom.hasClass(elRef,'rot-45')){
			styleDef['xAxis']['labelRotation'] = -45;
			styleDef['xAxis']['hideOverlappingLabels'] = false;
			is_rotated = 100;
		}

		var yTitleCapitalised = stats.ucwords(yTitle);
		var xTitleCapitalised = stats.ucwords(xTitle);
		var seriesDef =	[{
			yField: yKey,
			displayName: yTitleCapitalised,
			style: {
				image: "/resources/images/yui-assets/tube.png",
				mode: "no-repeat",
				//color: 0x69379B,
				color: 0x005293,
				size: 40
			}
		}];
		var numericAxis = new YAHOO.widget.NumericAxis();
		/*numericAxis.labelFunction = function (value) {
			return YAHOO.util.Number.format(value, {
				prefix: "",
				thousandsSeparator: ",",
				decimalPlaces: 0
			});
		};*/
		numericAxis.title = yTitleCapitalised;
		numericAxis.minimum = minValue;
		numericAxis.maximum = maxValue;

		var categoryAxis = new YAHOO.widget.CategoryAxis();
		categoryAxis.title = xTitleCapitalised;


		//A class of callback on td's uses the inner A tag of the td to create a link on click of the chart item


		var elRefClone = elRef.cloneNode(true);

		var callbackData = YAHOO.util.Dom.getElementsByClassName('callback', 'td', elRefClone);

		//A class of t-tip-kv on td's and th of a column appends the Header and value on that column to the tooltip for each chart item
		var toolTipKeyValueHeader= YAHOO.util.Dom.getElementsByClassName('t-tip-kv', 'th', elRefClone);
		var toolTipKeyValue= YAHOO.util.Dom.getElementsByClassName('t-tip-kv', 'td', elRefClone);

		//A class of t-tip-v on td's of a column appends the value on that column to the tooltip for each chart item
		var toolTipValue= YAHOO.util.Dom.getElementsByClassName('t-tip-v', 'td', elRefClone);

		//A class of t-tip on td's of a column replaces the tooltip for that chart item with the value on that column
		var toolTip = YAHOO.util.Dom.getElementsByClassName('t-tip', 'td', elRefClone);

		var chartHeight = 200;

		switch(type){
			case 'column':
				var mychart = new YAHOO.widget.ColumnChart(elRef.parentNode, myDataSource,	{
					xField: xKey,
					series: seriesDef,
					yAxis: numericAxis,
					xAxis: categoryAxis,
					wmode: "transparent",
					style: styleDef,
					animationEnabled: false
				});
				/*alert('finish this onclick stuff');*/
				break;
			case 'pie':
				styleDef ['legend'] = {
					display: "right",
					padding: 10,
					spacing: 5,
					font:{
						family: "Arial",
						size: 13
					}
				}
				/*seriesDef['style'] = {[
					colors:[0x64379B,0x69BE28,0xFFA02F,0x005293,0xD71F85,0xAFAFAF,0x000066]
				]};*/
				var mychart = new YAHOO.widget.PieChart(elRef.parentNode, myDataSource, {
					dataField: yKey,
					categoryField: xKey,
					style: styleDef,
					wmode: "transparent",
					animationEnabled: false,
					series: [{style:{colors:[0xFFA02F,0x69BE28,0xD71F85,0x64379B,0x005293,0xAFAFAF,0x000066]}}]
				});
				break;
			case 'bar':
				delete seriesDef[0]['style']['image'];
				delete seriesDef[0]['style']['mode'];
				seriesDef[0]['yField']=xKey;

				var mychart = new YAHOO.widget.BarChart(elRef.parentNode, myDataSource, {
					xField: yKey,
					series: seriesDef,
					yAxis: categoryAxis,
					xAxis: numericAxis,
					wmode: "transparent",
					style: styleDef,
					animationEnabled: false
				});
				chartHeight = 400;
				break;
			case 'line':
				styleDef ['legend'] = {
						display: "right",
						padding: 10,
						spacing: 5,
						font:{
							family: "Arial",
							size: 13
						}
					};
				chartHeight = 300;
				delete seriesDef[0]['style']['image'];
				delete seriesDef[0]['style']['mode'];
				seriesDef[0]['style']['size'] = 10;

				var mychart = new YAHOO.widget.LineChart(elRef.parentNode, myDataSource,	{
					xField: xKey,
					series: seriesDef,
					yAxis: numericAxis,
					xAxis: categoryAxis,
					wmode: "transparent",
					style: styleDef,
					animationEnabled: false
				});
			default:
				break;
		} // switch
		if(mychart !== undefined){
			var callbackToolTip = "";
			/*alert(callbackData);
			for (var test=0;test<callbackData.length;test++) {
				alert(callbackData[test].innerHTML);
			}*/
			if(callbackData.length>0){
				callbackToolTip = "\n\nClick to View Breakdown";
				document.createElement('p');

				//Display any callback captions
				var captions = YAHOO.util.Dom.getElementsByClassName('callback-caption');
				for(var i=0;i<captions.length;i++){
					YAHOO.util.Dom.setStyle(captions[i],'display','block');
				}

				var callback = function(e){

					if(callbackData.length>e.index){

						var callbackLink = callbackData[e.index].getElementsByTagName('a');

						if(callbackLink.length>0){
							YAHOO.util.Event.on(callbackLink,'click',function(e){
								if(e.target != undefined){
									window.location = e.target;
								}else if(e.srcElement != undefined){ //IE
									var loc = e.srcElement.href;
									loc = loc.replace('about:blank',''); //IE6
									loc = loc.replace('about:','');		 //IE7
									window.location = loc;
								}
							});

							var href = callbackLink[0].getAttribute('href');
							btRs.fireEvent(callbackLink[0],'click');
						}
					}
				};
				//YAHOO.util.Event.on(mychart,'itemClickEvent',callback);
				mychart.subscribe('itemClickEvent',callback);
			}
			if(toolTip.length>0){
				var dataTipFunc = function(item,index,series){
					var str = " ";
					if(toolTip.length>index){
						str=toolTip[index].innerHTML;
					}
					return str+callbackToolTip;
				}
				mychart.set('dataTipFunction', dataTipFunc, true);
			}else if(toolTipKeyValueHeader.length>0 && toolTipKeyValue.length>0){
				var dataTipFunc = function(item,index,series){
					var i =0;
					var str = series.displayName;
					for(var j in item){
						str+="\n"+item[j];
					}
					if(toolTipKeyValueHeader.length>0 && toolTipKeyValue.length>index){
						str+="\n"+toolTipKeyValueHeader[0].innerHTML+": "+toolTipKeyValue[index].innerHTML;
					}
					return str+callbackToolTip;
				}
				mychart.set('dataTipFunction', dataTipFunc, true);
			}else if(toolTipValue.length>0){
				var dataTipFunc = function(item,index,series){
					var i =0;
					var str = series.displayName;
					for(var j in item){
						str+="\n"+item[j];
					}
					if(toolTipValue.length>index){
						str+="\n"+toolTipValue[index].innerHTML;
					}
					return str+callbackToolTip;
				}
				mychart.set('dataTipFunction', dataTipFunc, true);
			}else if(callbackToolTip.length>0){
				var dataTipFunc = function(item,index,series){
					var i=0;
					var str = series.displayName;
					for(var j in item){
						str+="\n"+item[j];
					}
					/*alert(callbackData.length);
					alert(index);*/
					if(callbackData.length>index){
						var callbackLink = callbackData[index].getElementsByTagName('a');
						//alert(callbackData[index].innerHTML);
						if(callbackLink.length>0){
							str+=callbackToolTip;
						}
					}
					return str;
				}
				mychart.set('dataTipFunction', dataTipFunc, true);
			}
		}
		btRs.Dom.addClass(elRef,'js-tbl');
		if (is_rotated !== false) {
			chartHeight = chartHeight + is_rotated;
			btRs.$('yuigen'+stats.genNo).style.height = chartHeight + 'px';
		} else {
			btRs.$('yuigen'+stats.genNo).style.height = chartHeight + 'px';
		}
		stats.genNo++;
	},

	ucwords: function(str) {
	    return (str + '').replace(/^(.)|\s(.)/g, function ($1) {
	        return $1.toUpperCase();
	    });
	},

	is_numeric: function (mixed_var) {
		return (typeof(mixed_var) === 'number' || typeof(mixed_var) === 'string') && mixed_var !== '' && !isNaN(mixed_var);
	}
}

stats = YAHOO.statistics.main;
btRs.YE.onDOMReady(stats.init);
