/*
* NSDisplay goes jQuery, showing data from Boltek Stormtracker together with Nexstorm & NSLog softwares.
* v. 1.1
* Created by Henkka, nordicweather.net, Feb 2010
*/

$(function () {

	// DON'T TOUCH!!!
   var data = ''; 
	 var alreadyFetched = {};
   var ns = '';
   var iteration = 0;
   var nextmin = 0;
   update();
  $("#continuespan").html(txtPaus);
  $("#continuespan").hide();
  
   
   function update() {
   
          //Reset data
          alreadyFetched = {};
            
       function onDataReceived(series) {
          iteration++;
                
          // split NSRealtime
          var ns = series.split(',');
          
          // clock
          if(date == 1) {
          var cu = ns[2]+'.'+ns[1]+'.'+ns[0]+' '+ns[3]+':'+ns[4]+':'+ns[5];
          } else if (date == 2) {
          var cu = ns[1]+'/'+ns[2]+'/'+ns[0]+' '+ns[3]+':'+ns[4]+':'+ns[5];
          } else {
          var cu = ns[2]+'/'+ns[1]+'/'+ns[0]+' '+ns[3]+':'+ns[4]+':'+ns[5];
          }
          $("#clock").html(cu);
          
          // Rates
          var rate = ns[24];
          var clrate = ns[26];
          if(rate < 30) {
          $("#RATE").html(rate);
          } else {
          $("#RATE").html("<font color=\"#EE2C2C\">" + rate + "</font>");
          }
          if(clrate < 30) {
          $("#CLOSERATE").html(clrate);
          } else {
          $("#CLOSERATE").html("<font color=\"#EE2C2C\">" + clrate + "</font>");
          }
          
          //Since midnight
          $("#MIDNIGHT").html(ns[15]);

          //Total since X minute
          $("#LMINTOTAL").html(ns[32]);

          //Peakrate
          $("#PEAKRATE").html("" + ns[22] + "/min");

          //Peaktime
          $("#PEAKTIME").html(ns[23]);
 
          //Last striketime
          $("#LASTSTRTIME").html(ns[41]); 

          //Last striketype
          $("#LASTSTRTYPE").html(ns[10]); 

          //Last strikedist
          $("#LASTSTRDIS").html(ns[7]+' '+kmhmph); 

          //Last strikedirec
          bear = (ns[6]*100/100).toFixed(0) +"°";
          $("#LASTSTRDIREC").html(bear);	

          midnight = ns[15];
          cgptod = ns[18];
       if(cgptod == 0) { cgptof = "0%"; } else { cgptof = "" + ((cgptod/midnight)*100).toFixed(0) + "%"; }
          $("#CGPTODPREC").html(cgptof);

          cgmtod = ns[19];
			if(cgmtod == 0) { cgmtof = "0%"; } else { cgmtof = "" + ((cgmtod/midnight)*100).toFixed(0) + "%"; }
          $("#CG-TODPREC").html(cgmtof);

          ccptod = ns[20];
			if(ccptod == 0) { ccptof = "0%"; } else { ccptof = "" + ((ccptod/midnight)*100).toFixed(0) + "%"; }
          $("#CCPTODPREC").html(ccptof);

          ccmtod = ns[21];
			if(ccmtod == 0) { ccmtof = "0%"; } else { ccmtof = "" + ((ccmtod/midnight)*100).toFixed(0) + "%"; }
          $("#CC-TODPREC").html(ccmtof);

          //Uptime
          len = ns[40].length;
          $("#UPTIME").html(ns[40].substr(0,len-3));

        // Update the map, trac and graph each minute
        thismin = ns[4];		
        if (thismin*1 >= nextmin*1) {
        $("#NEXMAP").attr('src', path_to_map+'?' + new Date().getTime());
        
        $.getJSON(path_to_nsjson, function (data) {
        
        $.plot($("#GRAPH"),
        [{data:data[0].a1, lines: { show: true, fill: false, lineWidth: 2 }, points:
        { show: false },legend: {show: false}, color: "#00FF00"}],
       // {yaxis: { min: 0, minTickSize:1,tickDecimals:0 }, xaxis: { mode: "time",timeformat: "%H:%M",  tickSize: [20, "minute"] },
       {yaxis: { min: 0, minTickSize:1,tickDecimals:0 }, 
        xaxis: {mode: "time",timeformat: "%H:%M",  tickSize: [30, "minute"] },
        grid: {tickColor: "#424242", color:"#CCCCCC",  borderWidth: 1, borderColor: "#424242",      backgroundColor: { colors: ["#000", "#424242"] }}
        });
        
        $.plot($("#TOTCHART"),
        [{data:data[1].a2, lines: { show: true, fill: false, lineWidth: 2 }, points:
        { show: false },legend: {show: false}, color: "#00FF00"}],
        {yaxis: { min: 0, minTickSize:1,tickDecimals:0, autoscaleMargin: 1 }, xaxis: { mode: "time",timeformat: "%H:%M",  tickSize: [1, "hour"] },
        grid: {tickColor: "#424242", color:"#CCCCCC",  borderWidth: 1, borderColor: "#424242",      backgroundColor: { colors: ["#000", "#424242"] },hoverable: true, autoHighlight: true}
        });

        $.plot("#TYPCHART",
        [{data:data[2].b1, label: "+CG", lines: { show: true, fill: false, lineWidth: 2 }, points:
        { show: false },legend: {show: false}, color: "#EE3B3B"},
        {data:data[3].b2, label: "-CG", lines: { show: true, fill: false, lineWidth: 2 }, points:
        { show: false },legend: {show: false}, color: "#FF7F24"},
        {data:data[4].b3, label: "+IC", lines: { show: true, fill: false, lineWidth: 2 }, points:
        { show: false },legend: {show: false}, color: "#8DEEEE"},
        {data:data[5].b4, label: "-IC", lines: { show: true, fill: false, lineWidth: 2 }, points:
        { show: false },legend: {show: false}, color: "#FFFF00"}],
        {yaxis: { min: 0, minTickSize:1,tickDecimals:0, autoscaleMargin: 1 }, xaxis: { mode: "time",timeformat: "%H:%M",  tickSize: [1, "hour"] },
        grid: {tickColor: "#424242", color:"#CCCCCC",  borderWidth: 1, borderColor: "#424242",      backgroundColor: { colors: ["#000", "#424242"] },hoverable: true, autoHighlight: true},
        legend: {backgroundOpacity: 0.5,position: "nw"}
        });
        
        });
        
        $.get(path_to_trac, function (trac) {
        check = trac.split(' ')[2] + trac.split(' ')[3];
        check = check.replace(/^\s*|\s*$/g,'');
        check = check.replace('\n','');
        check = check.replace('thunderstorms','');
        check = check.replace('AM','');
        check = check.replace('PM','');
        //alert(check);
        if(check == 'No') {
        $("#STORMS").html("<font color=\"#00FF00\">" + txtNost + "</font>");
        $("#NEARBY").html("<font color=\"#00FF00\">" + txtInac + "</font>");
        $("#STORM").html("");
        } else {
        storms = trac.split('\n')[2];
        value = storms.split(' ')[1]*1;
        $("#STORMS").html("<font color=\"#EE2C2C\">" + txtTrac + " " + value + " " + txtStor + "</font>");
        tracreport(trac);
        } 
        });
        
        nextmin = thismin;
        }
        
        if (iteration == updates) {
        $("#continuespan").show();
        return;
        }
          
        ns = '';
        ns = false;
                  
        } // EOF onDataReceived

        $.ajax({
            url: dataurl,
            method: 'GET',
            dataType: 'text/plain',
            cache: false,
            error: function(msg){
            alert(errormsg);
            },
            success: onDataReceived
        });
          
            
        if (iteration < updates) {
        setTimeout(update, timeout*1000);
        }
        
           
      }; // EOF update
      
      function showTooltip(x, y, contents) {
        $('<div id="tooltip">' + contents + '</div>').css( {
            position: 'absolute',
            display: 'none',
            top: y - 35,
            left: x + 5,
            border: '1px solid #eee',
            padding: '2px',
            'background-color': '#fff',
            opacity: 0.80
        }).appendTo("body").fadeIn(200);
     }
       
     var previousPoint = null;
     $("#TOTCHART").bind("plothover", function (event, pos, item) {
        $("#x").text(pos.x.toFixed(2));
        $("#y").text(pos.y.toFixed(2));

            if (item) {
                if (previousPoint != item.datapoint) {
                    previousPoint = item.datapoint;
                    
                    $("#tooltip").remove();
                    var x = item.datapoint[0].toFixed(3),
                        y = item.datapoint[1].toFixed(0);
                    var hy = new Date(x*1);
                    var hour = hy.getHours();
                    var minu = hy.getMinutes();
                    if(minu < 10) var minu = '0'+minu;
                    //var os = new Date.getMonth(x);
                    //showTooltip(item.pageX, item.pageY, hour + ":"+minu+": " + y);
                    showTooltip(item.pageX, item.pageY, y);
                }
            }
            else {
                $("#tooltip").remove();
                previousPoint = null;            
            }
     });
     
    function windDir ($winddir){$windlabel = new Array("N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW");  
    return $windlabel[Math.floor(((parseInt($winddir) + 11) / 22.5) % 16 )];
    }  
    bgcolor = new Array("#61C770", "#CED156", "#D2A055", "#C45539");
     
    function tracreport(trac) {
    // Reading the storms
		var stormlist=new Array();
		var p = 1;
		for (var i = 1; i <= value; i++) {
		stormlist[i-1] = trac.split('-------------------------------------------------------')[p];
		p++;
		p++;
		}

		// Process the each storm
		var o = 0;
		var se = '';
		var table=new Array();
		var nearby = 'off';

		var trends = new Array("No", "Weakening", "Intensifying", "Undetermined");
		var intensitys = Array("Weak", "Moderate", "Strong", "Severe");

		table+= se + '<div style="color:#3299CC; font-size: 12px;padding-top:6px;text-align: center;"><b>'+txtStorms+'</b></div><br/><table width="99%" border= "0" cellspacing="0" cellpadding="0" style="padding-bottom:0px; border: 1px solid #424242; background: #000;"><tr style="background-color:#424242; height: 18px; color:#3299CC; font-size:11px;"><td width="63"><div align="center" class="nexstyle11">ID</div></td><td width="63"><div align="center" class="nexstyle11">' + txtLast + '</div></td><td width="63"><div align="center" class="nexstyle11">' + txtBear + '</div></td><td width="63"><div align="right" class="nexstyle11"style="padding-right:5px;">' + txtDist + '</div></td><td width="92"><div align="center"class="nexstyle11">' + txtInte + '</div></td><td width="93"><div align="center" class="nexstyle11">' + txtTren+ '</div></td><td width="63"><div align="right" class="nexstyle11" style="padding-right:5px;">' + txtRate + '</div></td><td width="66"><div align="right" class="nexstyle11" style="padding-right:5px;">' + txtPeak + '</div></td><td width="66"><div align="right" class="nexstyle11" style="padding-right:5px;">CG</div></td><td width="66"><div align="right" class="nexstyle11" style="padding-right:5px;">CC</div></td><td width="60"><div align="right" class="nexstyle11" style="padding-right:5px;">' + txtTota + '</div></td><td width="60"><div align="center" class="nexstyle11">' + txtDete + '</div></td></tr>';

		for (var i = 0; i <= stormlist.length-1; i++) {
		part = '';
		part= stormlist[o];
		o++;

		//parts = part.split('\n')[13];

		ids = part.split('\n')[1];
		id = ids.split(' ')[2];
		detec = ids.split(' ')[4];

		locs = part.split('\n')[3];
		bear = windDir(locs.split(' ')[3]);
		dist = locs.split(' ')[6];

		lac = part.split('\n')[5];
		lastact = lac.split(' ')[8];

		clad = part.split('\n')[6];
		clae = clad.split(' ')[14];

		tre = part.split('\n')[7];
		trend = tre.split(' ')[14];

		cur = part.split('\n')[9];
		curate = cur.split(' ')[11];
		curate = curate.replace(/ute/,'');

		peak = part.split('\n')[10];
		prate = peak.split(' ')[14];
		prate = prate.replace(/ute/,'');

		tot = part.split('\n')[12];
		totst = tot.split(' ')[8];

		cgs = part.split('\n')[13];
		cg = cgs.split(' ')[11];
		cg = cg.replace(/%/gm,'');
		cg = (cg*100/100).toFixed(0);

		ccs = part.split('\n')[14];
		cc = ccs.split(' ')[13];
		cc = cc.replace(/%/gm,'');
		cc = (cc*100/100).toFixed(0);

		for (var u=0; u < trends.length; u++) {
		if (trends[u] == trend) {
		v = u;
		}
		}

		tt = trendtxt[v];

		for (var k=0; k < intensitys.length; k++) {
		if (intensitys[k] == clae) {
		b = k;
		}
		}

		jj = intensitytxt[b];
		tcolor = bgcolor[b];

		if(dist < 50) {
		nearby = 'on';
		}

		if(o%2 != 1) { var tblbg = "#2B2B2B"; } else { var tblbg = "#000" }

		table+= se + '<tr style="font-size:11px;color:#fff;line-height: 20px;background-color:'+tblbg+';"><td width="63"><div align="left" style="padding-left:7px;">' + id + '</span></td><td width="63"><div align="center">' + lastact + '</div></td><td width="63"><div align="center">' + bear + '</div></td><td width="63"><div align="right" style="padding-right:5px;">' + dist + ' '+ kmhmph +'</div></td><td width="92"><div align="center"><font color="' + tcolor + '">' + jj + '</font></div></td><td width="93" class="tracreport"><div align="center">' + tt + '</div></td><td width="63"><div align="right" style="padding-right:5px;">' + curate + '</div></td><td width="66"><div align="right" style="padding-right:5px;">' + prate + '</div></td><td width="66"><div align="right">' + cg + '%</div></td><td width="66"><div align="right">' + cc + '%</div></td><td width="60"><div align="right" style="padding-right:10px;">' + totst + '</div></td><td width="60"><div align="center">' + detec + '</div></td></tr>';
		} // EOF each

		table+= se + "</table><br/>";
		$("#STORM").html(table);

		if(nearby == "on") {
		$("#NEARBY").html("<font color=\"#EE2C2C\">" + txtActi + "</font>");
		} else {
		$("#NEARBY").html("<font color=\"#00FF00\">" + txtInac + "</font>");
		}
  }  // EOF function

});
