﻿/**
 * @author JuD
 * @copyright http://www.unic.com
 */

/* ########################## this section needs to be always on top, don't replace ############################# */
// check if console.log is available
if (window['console'] === undefined) window.console = { log: function(){} };
var log = (window.ActiveXObject) ? console.debug : console.log;

// allow jQuery to chain .log
if('jQuery' in window) jQuery.fn.log = function(msg) { console.log("%s: %o", msg, this); return this; };
/* ############################################################################################################### */


// --------------- This Section is for the Flyout Delay
// ----------------------------
var secs;
var $this;
var firstLvl;
var secondLvl;
var timerID = null;
var timerRunning = false;
var delay = 100;

function StopTheClock() {
    if (timerRunning && timerID != null)
        clearTimeout (timerID)
    timerRunning = false;
}

function StartLevel1Timer() {
	if (secs==0) {
        StopTheClock();
        removeLvl1Expanded();
        removeLvl2Expanded();
    } else {
        self.status = secs;
        secs = secs - 100;
        timerRunning = true;
        if (!$(firstLvl).hasClass("over")) {
        	timerID = self.setTimeout("StartLevel1Timer()", delay);
        }
    }
}

function StartLevel2Timer() {
	if (secs==0) {
        StopTheClock();
        removeLvl2Expanded();
        if(!$(firstLvl).hasClass("over")) {
        	removeLvl1Expanded();
        }
    } else {
        self.status = secs;
        secs = secs - 100;
        timerRunning = true;
        timerID = self.setTimeout("StartLevel2Timer()", delay);
    }
}

function removeLvl1Expanded() {
	if($(firstLvl).hasClass("left")) {
		$(firstLvl).removeClass("left");
	}
	if($(firstLvl).hasClass("expanded")) {
		$(firstLvl).removeClass("expanded");
	}
}

function removeLvl2Expanded() {
	if($(secondLvl).hasClass("left")) {
		$(secondLvl).removeClass("left");
	}
	if($(secondLvl).hasClass("expanded")) {
		$(secondLvl).removeClass("expanded");
	}
}

// ------------ End of Flyout delay section ----------------


// set namespace
$(document).ready(function() {
	var BASE = {};

	/**
	 * MODULES ##################################################| private scope
	 */
	(function ($) {
		BASE = {
			init: function() {
				// auto startup
				Cufon.now();
				Cufon.replace('.replace', {
					hover: {
						color: '#DE1906'
					},
					letterSpacing: '0.4px'
				});
				
			}
		};
		BASE.init();

		/**
		 * Autonavigation - shows and hides flyouts
		 */
		// autonav -> grab items and place them outside of the ul!!
		// use special classes for hover state
		$.fn.autonav = function (options) {
			$this = this;
			var options = $.extend({}, options);

			var mainItems = $this.find('li');

//---------- Flyout delay and direction ----------------
			$this.find('li.level1').mouseenter(function() {
				if ($(firstLvl).hasClass("expanded")) {
					$(firstLvl).removeClass("over");
					removeLvl1Expanded();
					removeLvl2Expanded();
				}
				firstLvl = this;
				StopTheClock();
				$(firstLvl).addClass("over");
				if($(this).children('ul').length > 0) {
					$(firstLvl).addClass("expanded");
				
					var nextUl = $(firstLvl).children('ul');
					var pLeft = $(nextUl).offset();
					var v = pLeft.left + $(nextUl).innerWidth();
					if(v > $(window).width()) {
						if(!$(this).hasClass("left")) {
							$(this).addClass("left");
						}
					}
				}
			}).mouseleave(function(){
				$(firstLvl).removeClass("over");
				secs = 300;
				StartLevel1Timer();
			});
			
			$this.find('li.level2').mouseenter(function() {
				if($(secondLvl).hasClass("expanded")) {
					removeLvl2Expanded();
				}
				secondLvl = this;
				StopTheClock();
				if($(this).children('ul').length > 0) {
					$(secondLvl).addClass("expanded");
					var nextUl = $(secondLvl).children('ul');
					var pLeft = $(nextUl).offset();
					var v = pLeft.left + $(nextUl).innerWidth();
					if(v > $(window).width()) {
						if(!$(this).hasClass("left")) {
							$(this).addClass("left");
						}
					}
				}
			}).mouseleave(function() {
				secs = 300;
				StartLevel2Timer();
			});
//----------End of Flyout delay and direction ----------
			
			// keep chaining
			return this;
		};
		$('#nav').autonav();
		

		
	})(jQuery);
	
// end document.ready
});

// ----------------------------- Widget functions
// -------------------------------------------------------

var tinyFontSize = 9.5;
var fontSize = 11.5;
var midFontSize = 16;
var bigFontSize = 24;

function updateWidgets(url,imgpath) {           
 	// Read all relevant values from json data object into local variables
	if (url != "") {
	   	var frequency = 0;
	   	var chde = 0;
	   	var chfr = 0;
	   	var chat = 0;
	   	var chit = 0; 
	   	var last = 0;           
	   	var total_import = 0;
		var total_export = 0;	
	   	$.getJSON(url, function(data) {
	   	    data = data.data;
	
	   		for(var i in data) {
	       		if(data[i]) {
	                if(data[i].objpbn == "LFBP_JA_MF_P") {
	                	frequency = data[i]._pbnValues[0].value1;
	                }                            
	                if(data[i].objpbn == "SMRW346_MP_S") {
	                	chde = data[i]._pbnValues[0].value1;
	                }
	                if(data[i].objpbn == "SMRW344_MP_S") {
	                  	chfr = data[i]._pbnValues[0].value1;
	                }
	                if(data[i].objpbn == "SMRW348_MP_S") {
	                  	chat = data[i]._pbnValues[0].value1;
	                }
	                if(data[i].objpbn == "SMRW350_MP_S") {
	                  	chit = data[i]._pbnValues[0].value1;
	                }   
	                if(data[i].objpbn == "NSRQ001_MPLO") {
	                  	last = data[i]._pbnValues[0].value1;
	                }                       
	            } 
	   		}
	   		if (chde > 0) {
				total_export = total_export + chde;
			} else {
				total_import = total_import - chde;
			} 
			if (chfr > 0) {
				total_export = total_export + chfr;
			} else {
				total_import = total_import - chfr;
			}
			if (chat > 0) {
				total_export = total_export + chat;
			} else {
				total_import = total_import - chat;
			}
			if (chit > 0) {
				total_export = total_export + chit;
			} else {
				total_import = total_import - chit;
			}
			total_import = Math.round(total_import);
			total_export = Math.round(total_export);
			
			updateImportExport(total_export, total_import);		 
			updateElectricityLoadFlow(total_export, total_import);
			if($('#stromlastfluss_schweiz').length != 0) updateStromlastfluss(chde, chfr, chat, chit, frequency, imgpath, total_import, total_export);
			if($('#import_export').length != 0) updateImportExportCountries(chde, chfr, chat, chit);
			if($('#stromlastfluss_daten_schweiz').length != 0) updateStromlastflussDaten(total_import, total_export);
	   		   	
	   	}); // end getJson
	}
	
	replaceFont();	
}

function replaceFont() {
	// Surround specific tags with Cufon tags. The first parameter is usual CSS
	// search syntax.
	Cufon.replace('h2.widget', { fontFamily: 'SignaNormal-Book', fontSize: fontSize.toString()});	
	Cufon.replace('p.widget', { fontFamily: 'SignaNormal-Book', fontSize: fontSize.toString()});
	Cufon.replace('p.widgetbig', { fontFamily: 'SignaNormal-Bold', fontSize: bigFontSize.toString()});
	Cufon.replace('h2.swissix', { fontFamily: 'SignaNormal-Bold', fontSize: bigFontSize.toString()});
	Cufon.replace('.swissix p', { fontFamily: 'SignaNormal-Book', fontSize: fontSize.toString()});
	Cufon.replace('.swissix table td', { fontFamily: 'SignaNormal-Book', fontSize: fontSize.toString()});
	Cufon.replace('.swissix sup', { fontFamily: 'SignaNormal-Book', fontSize: tinyFontSize.toString()});
	Cufon.replace('.swissix a', { fontFamily: 'SignaNormal-Bold', fontSize: midFontSize.toString()});
}

function updateImportExport(total_export, total_import) {
	var sum = total_import + total_export;
	var export_px = Math.round(121 * total_export / sum);
	var import_px = Math.round(121 * total_import / sum);
	
	var export_widgets = $('.box-widget .graphic .white_left');
	export_widgets.html('<p class="widget">' + total_export + '</p>');
	export_widgets.css('height', export_px + 'px');
	export_widgets.css('margin-top', (121-export_px) + 'px');
	
	var import_widgets = $('.box-widget .graphic .white_right');
	import_widgets.html('<p class="widget">' + total_import + '</p>');
	import_widgets.css('height', import_px + 'px');
	import_widgets.css('margin-top', (121-import_px) + 'px');
}


function updateImportExportCountries(d,f,a,i) {	
	$('#import_export').empty();
	var paper = Raphael("import_export", 190, 210);	
	
	var line = paper.rect(12, 160, 167, 2);
	line.attr("fill", "#fff");
	line.attr("stroke", "#fff");	
	
	// Legende
	var oText = new ExportImportCountriesText();
	var sImport = oText.sImport;
	var sExport = oText.sExport;
	
	var rimport = paper.rect(22, 188, 16, 10);
	rimport.attr("fill", "#fff");
	rimport.attr("stroke", "#fff");
	var timport = paper.print(45, 195, sImport, paper.getFont("SignaNormalBook"),fontSize);
	timport.attr("fill", "#fff");

	var rexport = paper.rect(110, 188, 16, 10);
	rexport.attr("fill", "#a0a0a0");
	rexport.attr("stroke", "#fff");
	rexport.attr("stroke-width", "2px");

	var texport = paper.print(132, 195, sExport, paper.getFont("SignaNormalBook"),fontSize);
	texport.attr("fill", "#fff");

	// Deutschland
	var dValues = getValues(d);
	var d = paper.rect(22, dValues.top, 28, dValues.height); 
	d.attr("fill", dValues.fill);
	d.attr("stroke", "#fff");
	d.attr("stroke-width", "2px");

	var td = paper.print(30, 172, "D", paper.getFont("SignaNormalBook"),fontSize);
	td.attr("fill", "#fff");

	var tad = paper.print(21, dValues.legendTop,  dValues.amount, paper.getFont("SignaNormalBook"),fontSize);
	tad.attr("fill", "#fff");

	// Frankreich
	var fValues = getValues(f);
	var f = paper.rect(60, fValues.top, 28, fValues.height);
	f.attr("fill", fValues.fill);
	f.attr("stroke", "#fff");
	f.attr("stroke-width", "2px");

	var tf = paper.print(71, 172, "F", paper.getFont("SignaNormalBook"),fontSize);
	tf.attr("fill", "#fff");

	var taf = paper.print(61, fValues.legendTop, fValues.amount, paper.getFont("SignaNormalBook"),fontSize);
	taf.attr("fill", "#fff");

	// Oesterreich
	var aValues = getValues(a);
	var a = paper.rect(98, aValues.top, 28, aValues.height);
	a.attr("fill", aValues.fill);
	a.attr("stroke", "#fff");
	a.attr("stroke-width", "2px");

	var ta = paper.print(108, 172, "A", paper.getFont("SignaNormalBook"),fontSize);
	ta.attr("fill", "#fff");

	var taa = paper.print(98, aValues.legendTop, aValues.amount, paper.getFont("SignaNormalBook"),fontSize);
	taa.attr("fill", "#fff");

	// Italien
	var iValues = getValues(i);
	var i = paper.rect(136, iValues.top, 28, iValues.height);
	i.attr("fill", iValues.fill);
	i.attr("stroke", "#fff");
	i.attr("stroke-width", "2px");

	var ti = paper.print(147, 172, "I", paper.getFont("SignaNormalBook"),fontSize);
	ti.attr("fill", "#fff");

	var tai = paper.print(135, iValues.legendTop, iValues.amount, paper.getFont("SignaNormalBook"),fontSize);
	tai.attr("fill", "#fff");

}

function Values() {
  this.height = 0;
  this.top = 0;
  this.legendTop = 0;
  this.fill = "#fff";
  this.amount = 0;
}

function getValues(amount) {
	var oValues = new Values();	
	oValues.height = parseInt(0.05 * Math.abs(amount));
	oValues.top = 160 - oValues.height;
	oValues.legendTop = oValues.top - 10;
	oValues.amount = Math.round(Math.abs(amount));
	if (oValues.amount == Math.round(amount)) oValues.fill = "#a0a0a0";	
	return oValues;
}

function updateStromlastfluss(d, f, a, i, frequenz, imgpath, total_import, total_export) {	
	$('#stromlastfluss_schweiz').empty();
	var paper = Raphael("stromlastfluss_schweiz", 190, 210);
	var bg = paper.image(imgpath + "/map.jpg", 0, 0, 190, 218);	
	var bExport = total_export > total_import;
	var iBilanz = Math.abs(parseInt(total_import) - parseInt(total_export));
	var iTotal = parseInt(Math.abs(total_import)) + parseInt(Math.abs(total_export));
	
	// Legende
	var oText = new StromlastflussSchweizText();
	var sBilanzImport = oText.sBilanzImport;
	var sBilanzExport = oText.sBilanzExport;
	var sLast = oText.sLast;
	var sFrequenz = oText.sFrequenz;

	var text = paper.print(10, 179, sLast + ": " + iTotal + " MW", paper.getFont("SignaNormalBook"),fontSize);
	text.attr("fill", "#fff");
	text.attr("text-anchor", "start");
	
	if (bExport) {
		var text = paper.print(10, 191, sBilanzExport +": " + iBilanz + " MW", paper.getFont("SignaNormalBook"),fontSize);
	}
	else {
		var text = paper.print(10, 191, sBilanzImport +": " + iBilanz + " MW", paper.getFont("SignaNormalBook"),fontSize);
	}
	text.attr("fill", "#fff");
	text.attr("text-anchor", "start");
	
	var text = paper.print(10, 203, sFrequenz + ": " + frequenz + " HZ", paper.getFont("SignaNormalBook"),fontSize);
	text.attr("fill", "#fff");
	text.attr("text-anchor", "start");	

	// Deutschland
	var dValues = getValuesStromlastfluss(d);
	var dRotate = 270;
	if(dValues.reverse) dRotate += 180;
	
	var arrow_d = paper.image(imgpath + "/arrow-" + dValues.size + ".png", 60, 42, 49, 29);
	arrow_d.rotate(dRotate, true); 
	var text_d = paper.print(70, 25, dValues.amount, paper.getFont("SignaNormalBook"),fontSize);
	text_d.attr("fill", "#fff");

	// Frankreich
	var fValues = getValuesStromlastfluss(f);
	var fRotate = 225;
	if(fValues.reverse) fRotate += 180;
	
	var arrow_f = paper.image(imgpath + "/arrow-" + fValues.size + ".png", 15, 65, 49, 29);
	arrow_f.rotate(fRotate, true); 
	var text_f = paper.print(15, 60, fValues.amount, paper.getFont("SignaNormalBook"),fontSize);
	text_f.attr("fill", "#fff");
	
	// Oesterreich
	var aValues = getValuesStromlastfluss(a);
	var aRotate = 0;
	if(aValues.reverse) aRotate += 180;	
	
	var arrow_a = paper.image(imgpath + "/arrow-" + aValues.size + ".png", 120, 50, 49, 29);
	arrow_a.rotate(aRotate, true);
	var text_a = paper.print(160, 65, aValues.amount, paper.getFont("SignaNormalBook"),fontSize);
	text_a.attr("fill", "#fff");
	
	// Italien
	var iValues = getValuesStromlastfluss(i);
	var iRotate = 90;
	if(iValues.reverse) iRotate += 180;
	
	var arrow_i = paper.image(imgpath + "/arrow-" + iValues.size + ".png", 75, 120, 49, 29);
	arrow_i.rotate(iRotate, true); 
	var text_i = paper.print(87, 100, iValues.amount,paper.getFont("SignaNormalBook"),fontSize);
	text_i.attr("fill", "#fff");
}

function ValuesStromlastfluss() {
  this.size = "small";
  this.reverse = 0;
  this.amount = 0;
}

function getValuesStromlastfluss(amount) {
	var oValues = new ValuesStromlastfluss();	
	oValues.amount = Math.round(Math.abs(amount));
	if (oValues.amount == Math.round(amount)) oValues.reverse = 1;	
	if (oValues.amount >= 1000) oValues.size = "medium";
	if (oValues.amount >= 2000) oValues.size = "large";
	return oValues;
}

function updateStromlastflussDaten(i,e) {	
	$('#stromlastfluss_daten_schweiz').empty();
	var paper = Raphael("stromlastfluss_daten_schweiz", 190, 210);
	
	var stRects = paper.set();
	var stNums = paper.set();
	var aNums = new Array(i,e,parseInt(i) - parseInt(e), parseInt(Math.abs(i)) + parseInt(Math.abs(e)));
	var bExport = e > i;
	
	for (var i = 0; i < 4; i++) {
		for (var j = 0; j < 4; j++) {
			stRects.push(paper.rect(i*27+10, j*40+20, 24, 37).attr("fill", "#fff").attr("stroke-width", 0));
		}
	}	
	
	for (var i = 0; i < aNums.length; i++) {	
		var iAmount = Math.round(Math.abs(aNums[i]));
		var sAmount = iAmount.toString();
		var skipFirst = 0;
		if (iAmount < 1000) skipFirst= 1;
		
		for (var j = 0; j < sAmount.length; j++) {
			var k = j + skipFirst;
			stNums.push(paper.print(k*27+9, i*40+37, sAmount[j], paper.getFont("SignaNormalBold"), bigFontSize)).attr({fill: "#a0a0a0"});
		}
	}
	
	var oText = new StromlastflussText();	
	
	paper.print(118, 33 , oText.importTotal.split(" ")[0], paper.getFont("SignaNormalBook"),fontSize).attr({fill: "#ffffff"});
	paper.print(118, 45 , oText.importTotal.split(" ")[1], paper.getFont("SignaNormalBook"),fontSize).attr({fill: "#ffffff"});
	
	paper.print(118, 72 , oText.exportTotal.split(" ")[0], paper.getFont("SignaNormalBook"),fontSize).attr({fill: "#ffffff"});
	paper.print(118, 84 , oText.exportTotal.split(" ")[1], paper.getFont("SignaNormalBook"),fontSize).attr({fill: "#ffffff"});
		
	if
	(bExport) {
		paper.print(118, 112 , oText.bilanzExport.split(" ")[0], paper.getFont("SignaNormalBook"),fontSize).attr({fill: "#ffffff"});
		paper.print(118, 124 , oText.bilanzExport.split(" ")[1], paper.getFont("SignaNormalBook"),fontSize).attr({fill: "#ffffff"});
	}
	else {
		paper.print(118, 112 , oText.bilanzImport.split(" ")[0], paper.getFont("SignaNormalBook"),fontSize).attr({fill: "#ffffff"});
		paper.print(118, 124 , oText.bilanzImport.split(" ")[1], paper.getFont("SignaNormalBook"),fontSize).attr({fill: "#ffffff"});
	}
	
	paper.print(118, 146 , oText.stromlast.split('/')[0], paper.getFont("SignaNormalBook"),fontSize).attr({fill: "#ffffff"});
	paper.print(118, 158 , oText.stromlast.split('/')[1], paper.getFont("SignaNormalBook"),fontSize).attr({fill: "#ffffff"});
	paper.print(118, 170 , oText.stromlast.split('/')[2], paper.getFont("SignaNormalBook"),fontSize).attr({fill: "#ffffff"});
}


function updateElectricityLoadFlow(total_export, total_import) {
	var sum = total_import + total_export;
	var balance_sheet = total_export - total_import;

	var totalimport = $('.box-widget .stromlastfluss1 .total_import .value .widgetbig');
	totalimport.text(total_import);
	
	var totalexport = $('.box-widget .stromlastfluss1 .total_export .value .widgetbig');
	totalexport.html(total_export);

	var balance;
	var balanceHiddenDiv;
	var balanceNotHiddenDiv;
	if (balance_sheet < 0) {
		// import balance
		balance = $('.box-widget .stromlastfluss1 .balanceImport .value .widgetbig');
		balanceNotHiddenDiv = $('.box-widget .stromlastfluss1 .balanceImport');
		balanceHiddenDiv = $('.box-widget .stromlastfluss1 .balanceExport');
		balance_sheet = balance_sheet * (-1);
	} else {
		// export balance
		balance = $('.box-widget .stromlastfluss1 .balanceExport .value .widgetbig');
		balanceNotHiddenDiv = $('.box-widget .stromlastfluss1 .balanceExport');
		balanceHiddenDiv = $('.box-widget .stromlastfluss1 .balanceImport');
	}
	balance.html(balance_sheet);
	balanceNotHiddenDiv.removeClass('hidden').addClass('nothidden');
	balanceHiddenDiv.removeClass('nothidden').addClass('hidden');

	var total = $('.box-widget .stromlastfluss1 .sum .value .widgetbig');
	total.html(sum);
}						

