/**
 * cadecharts.js: several utilities for charts creation, etc. for
 *                the CadeMET project, using the YUI library.
 *
 * by Eduardo Hernando Izcara. Copyright 2011 agroGEX.
 */
// ------------------------------------------------------------------------

// Make sure we haven't already been loaded
var CadeCharts;
if (CadeCharts && (typeof CadeCharts != "object" || CadeCharts.NAME))
{
	throw new Error("Namespace 'CadeCharts' already exists");
}

// Create our namespace, and specify some meta-information
CadeCharts = {};
CadeCharts.NAME = "CadeCharts";    // The name of this namespace
CadeCharts.VERSION = 1.0;          // The version of this namespace


// Algunas variables globales del namespace:

CadeCharts.MenuParametros = null;
CadeCharts.graf_div = "";
CadeCharts.seriesDef = [];
CadeCharts.styleDef = {};
CadeCharts.chart = {};

// ------------------------------------------------------------------------

CadeCharts.menu_params = function(menu_div)
{
	onMenuItemClick = function(p_sType, p_aArgs, p_oItem){
		var sText = p_oItem.cfg.getProperty("text");
		switch (p_oItem.value)
		{
		case 1:  // Temperatura
			CadeCharts.chart_temp();
			break;
		case 2:  // Precipitación
			CadeCharts.chart_pp();
			break;
		case 3:  // Humedad Relativa
			CadeCharts.chart_hr();
			break;
		case 4:  // Humedad de las Hojas
			CadeCharts.chart_hf();
			break;
		case 5:  // Humedad del Suelo
			CadeCharts.chart_hs();
			break;
		default:
			break;
		}
		CadeCharts.MenuParametros.set("label", sText);
	};

	var aMenuParams =
			[
				{ text: "Temperatura (ºC)", value: 1, onclick: { fn: onMenuItemClick } },
				{ text: "Precipitación (mm)", value: 2, onclick: { fn: onMenuItemClick } },
				{ text: "Humedad Relativa (%)", value: 3, onclick: { fn: onMenuItemClick } },
				{ text: "Humedad de las Hojas", value: 4, onclick: { fn: onMenuItemClick } },
				{ text: "Humedad del Suelo (cb)", value: 5, onclick: { fn: onMenuItemClick } }
			];

	CadeCharts.MenuParametros = new YAHOO.widget.Button(
											{
												type: "menu",
												label: aMenuParams[0].text,
												menu: aMenuParams,
												container: menu_div
											});
}
// ------------------------------------------------------------------------

CadeCharts.init = function(graf_div)
{
	YAHOO.widget.Chart.SWFURL = "http://yui.yahooapis.com/2.7.0/build/charts/assets/charts.swf";
	//YAHOO.widget.Chart.SWFURL = "http://yui.yahooapis.com/2.8.1/build/charts/assets/charts.swf";
	//YAHOO.widget.Chart.SWFURL = "js/assets/charts.swf";

	CadeCharts.seriesDef =
		[
			{
				displayName: "MADRID DE LAS C.",
				yField: "value_39",
				style: {color: 0x4e9a06}
			},
			{
				displayName: "RUCANDIO",
				yField: "value_40",
				style: {color: 0x8f5902}
			},
			{
				displayName: "BENTRETEA",
				yField: "value_41",
				style: {color: 0x729fcf}
			},
			{ // Ponemos a Salas la primera si sigue "acoplándose" a otras...
				displayName: "SALAS DE BUREBA",
				yField: "value_42",
				style: {color: 0xf57900}
			}
		];

	for (i = 0; i < CadeCharts.seriesDef.length; i++) {
		CadeCharts.seriesDef[i].style.lineSize = 1;
		CadeCharts.seriesDef[i].style.alpha = 0.8;
	}

	CadeCharts.styleDef =
	{
		animationEnabled: true,
		legend:
		{
			display: "top",
			font: {name: "Tahoma", size: 9},
			padding: 0
		},
		xAxis:
		{
			//labelRotation: -90,
			majorTicks: {display: "inline", length: 4, size: 1},
			minorTicks: {display: "none", length: 2, size: 1}
		},
		yAxis:
		{
			zeroGridLine: {size: 1, color: 0xff0000},
			majorTicks: {display: "none"},
			minorTicks: {display: "none"},
			titleRotation: -90
		}
	};

	CadeCharts.graf_div = graf_div;
	CadeCharts.chart_temp();
}
// ------------------------------------------------------------------------

CadeCharts.chart_temp = function()
{
	for (i = 0; i < CadeCharts.seriesDef.length; i++) {
		CadeCharts.seriesDef[i].style.size = 4;
	}

	var ejeX = new YAHOO.widget.TimeAxis();
	ejeX.labelFunction = function(value/*, major*/)
	{
		return YAHOO.util.Date.format(new Date(value), {format:"%e-%b %H:%M"}, "es_ES").toString();
	}
	// Valores posibles son: year, month, day, hours, minutes, seconds, milliseconds
	//ejeX.majorTimeUnit = "day";
	//ejeX.majorUnit = 1;
	ejeX.majorTimeUnit = "hours";
	ejeX.majorUnit = 8;

	var ejeY = new YAHOO.widget.NumericAxis();
	//ejeY.title = "Temperatura (ºC)";
	//ejeY.alwaysShowZero = false;
	ejeY.labelFunction = function(value)
	{
		return YAHOO.util.Number.format( value,
				{
					//thousandsSeparator: ",",
					//decimalPlaces: 2,
					//prefix: "$",
					suffix: "ºC"
				});
	}

	var tipfunc = function(item, index, series)
	{
		var str = series.displayName;
		str += "\n" + ejeX.labelFunction(item.fechahora);
		str += "\nTemperatura: " + item[series.yField].toFixed(1) + "ºC";
		return str;
	}

	CadeCharts.render_chart('temperatura', ejeX, ejeY, tipfunc, 'line');
}
// ------------------------------------------------------------------------

CadeCharts.chart_pp = function()
{
	for (i = 0; i < CadeCharts.seriesDef.length; i++) {
		CadeCharts.seriesDef[i].style.size = 12;
	}

	var ejeX = new YAHOO.widget.CategoryAxis();
	ejeX.labelFunction = function(value)
	{
		return YAHOO.util.Date.format(new Date(value), {format:"%e %B"}, "es_ES").toString();
	}

	var ejeY = new YAHOO.widget.NumericAxis();
	ejeY.minimum = 0;
	//ejeY.majorUnit = 0.4;
	//ejeY.roundMajorUnit = true;
	ejeY.labelFunction = function(value)
	{
		return YAHOO.util.Number.format(value, {suffix: " mm"});
	}

	var tipfunc = function(item, index, series)
	{
		var str = series.displayName;
		str += "\n" + ejeX.labelFunction(item.fechahora);
		str += "\nPrecipitación: " + item[series.yField].toFixed(1) + " mm";
		return str;
	}

	CadeCharts.render_chart('precipitacion', ejeX, ejeY, tipfunc, 'column');
}
// ------------------------------------------------------------------------

CadeCharts.chart_hr = function()
{
	for (i = 0; i < CadeCharts.seriesDef.length; i++) {
		CadeCharts.seriesDef[i].style.size = 4;
	}

	var ejeX = new YAHOO.widget.TimeAxis();
	ejeX.labelFunction = function(value)
	{
		return YAHOO.util.Date.format(new Date(value), {format:"%e-%b %H:%M"}, "es_ES").toString();
	}
	ejeX.majorTimeUnit = "hours";
	ejeX.majorUnit = 8;

	var ejeY = new YAHOO.widget.NumericAxis();
	//ejeY.alwaysShowZero = false;
	ejeY.minimum = 0;
	ejeY.maximum = 100;
	ejeY.labelFunction = function(value)
	{
		return YAHOO.util.Number.format(value, {suffix: "%"});
	}

	var tipfunc = function(item, index, series)
	{
		var str = series.displayName;
		str += "\n" + ejeX.labelFunction(item.fechahora);
		str += "\nHumedad Relativa: " + item[series.yField].toFixed(1) + "%";
		return str;
	}

	CadeCharts.render_chart('humedadrelativa', ejeX, ejeY, tipfunc, 'line');
}
// ------------------------------------------------------------------------

CadeCharts.chart_hf = function()
{
	for (i = 0; i < CadeCharts.seriesDef.length; i++) {
		CadeCharts.seriesDef[i].style.size = 4;
	}

	var ejeX = new YAHOO.widget.TimeAxis();
	ejeX.labelFunction = function(value)
	{
		return YAHOO.util.Date.format(new Date(value), {format:"%e-%b %H:%M"}, "es_ES").toString();
	}
	ejeX.majorTimeUnit = "hours";
	ejeX.majorUnit = 8;

	var ejeY = new YAHOO.widget.NumericAxis();
	//ejeY.alwaysShowZero = false;
	ejeY.minimum = 0;
	ejeY.maximum = 255;
	ejeY.reverse = true;
	ejeY.labelFunction = function(value)
	{
		var estado = '';
		if (value >= 0 && value <= 65) {
			//estado = "Mojado (" + value + ")";
			estado = YAHOO.util.Number.format(value, {suffix: " moj."});
		}
		else if (value > 65 && value <= 150) {
			//estado = "Húmedo (" + value + ")";
			estado = YAHOO.util.Number.format(value, {suffix: " húm."});
		}
		else if (value > 150 && value <= 255) {
			//estado = "Seco (" + value + ")";
			estado = YAHOO.util.Number.format(value, {suffix: " sec."});
		}

		//return YAHOO.util.Number.format(value, {suffix: " HF"});
		return estado;
	}

	var tipfunc = function(item, index, series)
	{
		var str = series.displayName;
		str += "\n" + ejeX.labelFunction(item.fechahora);
		str += "\nHumedad Foliar: " + item[series.yField].toFixed(1) + " HF";
		return str;
	}

	CadeCharts.render_chart('humedadhojas', ejeX, ejeY, tipfunc, 'line');
}
// ------------------------------------------------------------------------

CadeCharts.chart_hs = function()
{
	for (i = 0; i < CadeCharts.seriesDef.length; i++) {
		CadeCharts.seriesDef[i].style.size = 12;
	}

	var ejeX = new YAHOO.widget.CategoryAxis();
	ejeX.labelFunction = function(value)
	{
		return YAHOO.util.Date.format(new Date(value), {format:"%e %B"}, "es_ES").toString();
	}

	var ejeY = new YAHOO.widget.NumericAxis();
	ejeY.minimum = 0;
	ejeY.maximum = 200;
	ejeY.reverse = true;
	ejeY.labelFunction = function(value)
	{
		return YAHOO.util.Number.format(value, {suffix: " cb"});
	}

	var tipfunc = function(item, index, series)
	{
		var str = series.displayName;
		str += "\n" + ejeX.labelFunction(item.fechahora);
		str += "\nHumedad Suelo: " + item[series.yField].toFixed(1) + " cb";
		return str;
	}

	CadeCharts.render_chart('humedadsuelo', ejeX, ejeY, tipfunc, 'line');
}
// ------------------------------------------------------------------------

CadeCharts.render_chart = function(parametro, ejeX, ejeY, tipfunc, tipo_graph)
{
	// Con este 'random' evitamos el 'caching' HTTP en la consulta Ajax que vamos a realizar:
	var url = Rutinas.baseUrl() + "/charts/getlastdata/parametro/" + parametro + "/id/" + Math.random(1);
	//var url = Rutinas.baseUrl() + "/charts/getlastdata/parametro/" + parametro;
	//var url = "scripts/cadecharts.php?parametro=temperatura&id=" + Math.random(1);

	//var jsonData = new YAHOO.util.XHRDataSource(url);
	var jsonData = new YAHOO.util.DataSource(url);
	jsonData.responseType = YAHOO.util.DataSource.TYPE_JSON;
	//jsonData.connXhrMode = "queueRequests";
	//jsonData.connXhrMode = "ignoreStaleResponses";
	jsonData.responseSchema =
	{ 
		resultsList: "ResultSet.Result",
		fields: [ "fechahora",
			//{key: "fechahora", parser: "date"},
			{key: "value_39", parser: "number"},
			{key: "value_40", parser: "number"},
			{key: "value_41", parser: "number"},
			{key: "value_42", parser: "number"} ]
	};

	//delete CadeCharts.chart;
	var att_char =
		{
			style: CadeCharts.styleDef,
			xField: "fechahora",
			xAxis: ejeX,
			yAxis: ejeY,
			series: CadeCharts.seriesDef,
			dataTipFunction: tipfunc,
			//polling: 10*60*1000,	//cada 10 minutos busca datos nuevos
			wmode: "transparent"
		}

	if (tipo_graph == 'line')
		CadeCharts.chart = new YAHOO.widget.LineChart(CadeCharts.graf_div, jsonData, att_char);
	else if (tipo_graph == 'column')
		CadeCharts.chart = new YAHOO.widget.ColumnChart(CadeCharts.graf_div, jsonData, att_char);

	// .................................
	// JUEGUECITOS CON EVENTOS...
	//
	//var onf1 = function(e) { alert("AQUISTÁAAA EL CAMBIO DE POLLING"); }
	//CadeCharts.chart.addListener('pollingChange',onf1);
	//CadeCharts.chart.setAttributes({polling: 10*60*1000}, false);
	//
	//var onf2 = function() { alert("temperatura AQUISTÁAAA"); }
	//CadeCharts.chart.addListener('contentReady',onf2);
	// .................................
}
// ------------------------------------------------------------------------


