/**
* Analysing the Satellite's status.
*
* Met-8+9
* Green :  received >= expected - 2
* Red : received == 0 in the last 4 repeat cycles
* Yellow otherwise
*
* Met-7 and Met-5
* Green :  received >= expected - 1
* Red : received == 0 in the last 2 repeat cycles
* Yellow otherwise
*
* Met-6 (RSS)
* Green :  received == expected
* Red : received == 0 in the last 6 repeat cycles
* Yellow otherwise
*
*@param met Number of the satellite
*@return Status, either variables DEFINED_LEVEL_GOOD, DEFINED_LEVEL_PROBLEMS, DEFINED_LEVEL_FAIL, DEFINED_LEVEL_NA (default)
*/
function getIndicator(met)
{
  var finalStatus = DEFINED_LEVEL_NA;
  var cyclesCheck = metCycles[met];
  cyclesCheck = indicatorMETA[met]['metcycles'];
  var cycleEntriesOrFileExists = currentMETStatus["met"+met]
  														&& currentMETStatus["met"+met][1]
  														&& (currentMETStatus["met"+met].length-1) >= cyclesCheck;

  var dataLength = cycleEntriesOrFileExists ? currentMETStatus["met"+met].length:0;
  debug = "";

  debug += "\nMet: "+met;
  debug += "\ncycleEntriesOrFileExists: "+cycleEntriesOrFileExists;
  debug += "\nlength: "+((currentMETStatus["met"+met].length-1)+" == "+cyclesCheck);

 //fix for MetOpA indicator
  
 
  

  if(cycleEntriesOrFileExists)
  {
    var currentStateGreen = false;
    var currentStateRed   = true;
    var currentStateYellow= true;
    var expected   = currentMETStatus["met"+met][1] ? currentMETStatus["met"+met][1]['debit'].trim():"0";
    var received_1 = currentMETStatus["met"+met][1] ? currentMETStatus["met"+met][1]['is'].trim():"0";
    var received_2 = currentMETStatus["met"+met][2] ? currentMETStatus["met"+met][2]['is'].trim():"0";
    var received_3 = currentMETStatus["met"+met][3] ? currentMETStatus["met"+met][3]['is'].trim():"0";
    var received_4 = currentMETStatus["met"+met][4] ? currentMETStatus["met"+met][4]['is'].trim():"0";
    var received_5 = currentMETStatus["met"+met][5] ? currentMETStatus["met"+met][5]['is'].trim():"0";
    var received_6 = currentMETStatus["met"+met][6] ? currentMETStatus["met"+met][6]['is'].trim():"0";
    var received_7 = currentMETStatus["met"+met][7] ? currentMETStatus["met"+met][7]['is'].trim():"0";
    var received_8 = currentMETStatus["met"+met][8] ? currentMETStatus["met"+met][8]['is'].trim():"0";
    var received_9 = currentMETStatus["met"+met][9] ? currentMETStatus["met"+met][9]['is'].trim():"0";
    var received_10 = currentMETStatus["met"+met][10] ? currentMETStatus["met"+met][10]['is'].trim():"0";
    var received_11 = currentMETStatus["met"+met][11] ? currentMETStatus["met"+met][11]['is'].trim():"0";
    var received_12 = currentMETStatus["met"+met][12] ? currentMETStatus["met"+met][12]['is'].trim():"0";
    var received_13 = currentMETStatus["met"+met][13] ? currentMETStatus["met"+met][13]['is'].trim():"0";
    var received_14 = currentMETStatus["met"+met][14] ? currentMETStatus["met"+met][14]['is'].trim():"0";
    var received_15 = currentMETStatus["met"+met][15] ? currentMETStatus["met"+met][15]['is'].trim():"0";
    var received_16 = currentMETStatus["met"+met][16] ? currentMETStatus["met"+met][16]['is'].trim():"0";
    var received_17 = currentMETStatus["met"+met][17] ? currentMETStatus["met"+met][17]['is'].trim():"0";
    var received_18 = currentMETStatus["met"+met][18] ? currentMETStatus["met"+met][18]['is'].trim():"0";
    var received_19 = currentMETStatus["met"+met][19] ? currentMETStatus["met"+met][19]['is'].trim():"0";
    var received_20 = currentMETStatus["met"+met][20] ? currentMETStatus["met"+met][20]['is'].trim():"0";
 
	var isExpectedOK = !isNaN(expected);

    if(met==8 || met==9)
    {
      var is1OK = received_1.length!=0 && !isNaN(received_1);
      var is2OK = received_2.length!=0 && !isNaN(received_2);
      var is3OK = received_3.length!=0 && !isNaN(received_3);
      var is4OK = received_4.length!=0 && !isNaN(received_4);
      if(!isExpectedOK || !is1OK || !is2OK || !is3OK || !is4OK)
      	finalStatus = DEFINED_LEVEL_NA;
      else if(received_1 >= expected - 2)
      	finalStatus = DEFINED_LEVEL_GOOD;
      else if(received_1==0 && received_2==0 && received_3==0 && received_4==0)
      	finalStatus = DEFINED_LEVEL_FAIL;
      else
      	finalStatus = DEFINED_LEVEL_PROBLEMS;
    }
    
	if(met=="A")
    {
      var is1OK = received_1.length!=0 && !isNaN(received_1);
      var is2OK = received_2.length!=0 && !isNaN(received_2);
      var is3OK = received_3.length!=0 && !isNaN(received_3);
      var is4OK = received_4.length!=0 && !isNaN(received_4);
      var is5OK = received_5.length!=0 && !isNaN(received_5);
      var is6OK = received_6.length!=0 && !isNaN(received_6);
      var is7OK = received_7.length!=0 && !isNaN(received_7);
      var is8OK = received_8.length!=0 && !isNaN(received_8);
      var is9OK = received_9.length!=0 && !isNaN(received_9);
      var is10OK = received_10.length!=0 && !isNaN(received_10);
      var is11OK = received_11.length!=0 && !isNaN(received_11);
      var is12OK = received_12.length!=0 && !isNaN(received_12);
      var is13OK = received_13.length!=0 && !isNaN(received_13);
      var is14OK = received_14.length!=0 && !isNaN(received_14);
      var is15OK = received_15.length!=0 && !isNaN(received_15);
      var is16OK = received_16.length!=0 && !isNaN(received_16);
      var is17OK = received_17.length!=0 && !isNaN(received_17);
      var is18OK = received_18.length!=0 && !isNaN(received_18);
      var is19OK = received_19.length!=0 && !isNaN(received_19);
      var is20OK = received_20.length!=0 && !isNaN(received_20);
            
      if(!isExpectedOK || 
		 !is1OK || !is2OK || !is3OK || !is4OK || !is5OK || 
		 !is6OK || !is7OK || !is8OK || !is9OK || !is10OK || 
		 !is11OK || !is12OK || !is13OK || !is14OK || !is15OK || 
		 !is16OK || !is17OK || !is18OK || !is19OK || !is20OK) 
		 
		 finalStatus = DEFINED_LEVEL_NA;
      
	  else if(received_1 == expected) 
	  //else if(received_1 >= expected - 2) 
		finalStatus = DEFINED_LEVEL_GOOD;
      else if(received_1==0 && 
			  received_2==0 && 
			  received_3==0 && 
			  received_4==0 && 
			  received_5==0 && 
			  received_6==0 && 
			  received_7==0 && 
			  received_8==0 && 
			  received_9==0 && 
			  received_10==0 && 
			  received_11==0 && 
			  received_12==0 && 
			  received_13==0 && 
			  received_14==0 && 
			  received_15==0 && 
			  received_16==0 && 
			  received_17==0 && 
			  received_18==0 && 
			  received_19==0 && 
			  received_20==0) 
		finalStatus = DEFINED_LEVEL_FAIL;
      
	  else 
		finalStatus = DEFINED_LEVEL_PROBLEMS;
    }
    if(met=="rss")
    {
      var is1OK = received_1.length!=0 && !isNaN(received_1);
      var is2OK = received_2.length!=0 && !isNaN(received_2);
      var is3OK = received_3.length!=0 && !isNaN(received_3);
      var is4OK = received_4.length!=0 && !isNaN(received_4);
      var is5OK = received_5.length!=0 && !isNaN(received_5);
      var is6OK = received_6.length!=0 && !isNaN(received_6);
      var is7OK = received_7.length!=0 && !isNaN(received_7);
      var is8OK = received_8.length!=0 && !isNaN(received_8);
      var is9OK = received_9.length!=0 && !isNaN(received_9);
      var is10OK = received_10.length!=0 && !isNaN(received_10);
      var is11OK = received_11.length!=0 && !isNaN(received_11);
      var is12OK = received_12.length!=0 && !isNaN(received_12);
            
      if(!isExpectedOK || !is1OK || !is2OK || !is3OK || !is4OK ||
	     !is5OK || !is6OK || !is7OK || !is8OK || !is9OK || !is10OK || 
		 !is11OK || !is12OK) 
		 
		 finalStatus = DEFINED_LEVEL_NA;
		 
      else if(received_1 == expected) 
		finalStatus = DEFINED_LEVEL_GOOD;
		
      else if(received_1==0 && received_2==0 && received_3==0 && 
			  received_4==0 && received_5==0 && received_6==0 && 
			  received_7==0 && received_8==0 && received_9==0 && 
			  received_10==0 && received_11==0 && received_12==0)
			  
		finalStatus = DEFINED_LEVEL_FAIL;
      else finalStatus = DEFINED_LEVEL_PROBLEMS;
    }
    if(met==7 || met==5)
    {
      var is1OK = received_1.length!=0 && !isNaN(received_1);
      var is2OK = received_2.length!=0 && !isNaN(received_2);
      if(!isExpectedOK || !is1OK || !is2OK) finalStatus = DEFINED_LEVEL_NA;
      else if(received_1 >= expected - 1) finalStatus = DEFINED_LEVEL_GOOD;
      else if(received_1==0 && received_2==0) finalStatus = DEFINED_LEVEL_FAIL;
      else finalStatus = DEFINED_LEVEL_PROBLEMS;
    }
    if(met==6)
    {
      var is1OK = received_1.length!=0 && !isNaN(received_1);
      var is2OK = received_2.length!=0 && !isNaN(received_2);
      var is3OK = received_3.length!=0 && !isNaN(received_3);
      var is4OK = received_4.length!=0 && !isNaN(received_4);
      var is5OK = received_5.length!=0 && !isNaN(received_5);
      var is6OK = received_6.length!=0 && !isNaN(received_6);

      if(!isExpectedOK || !is1OK || !is2OK || !is3OK || !is4OK || !is5OK || !is6OK)
      	finalStatus = DEFINED_LEVEL_NA;
      else if(received_1 == expected) finalStatus = DEFINED_LEVEL_GOOD;
      else if(received_1==0 && received_2==0 && received_3==0 && received_4==0 && received_5==0 && received_6==0)
      				finalStatus = DEFINED_LEVEL_FAIL;
      else finalStatus = DEFINED_LEVEL_PROBLEMS;
    }
  }
  return finalStatus;
}

/**
* Pre-fill data cotnainers for satellites.
*
*@param metSatIdOrder	Satellites list and order -array
*@param currentMETStatus data-container later filled by the external data
*@param metCycles default fill, later overridden by sustomer eum_ossi_definitions_override.js
*/
function prepareArrays(metSatIdOrder, currentMETStatus, metCycles)
{
	for(var i=0; i< metSatIdOrder.length; i++){
		var sat = metSatIdOrder[i];
		currentMETStatus["met"+sat] = new Array();
		//at least some defaults
		metCycles[sat] = 2;
	}
}

/**
* Get sat-specific meta-entry (eum_ossi_definitions_override.js).
*
*@param satMETA meta-object of one satellite
*@param key array-key
*@return the value of the array-entry, if none found, returns [undef.]
*/
function getMeta(satMETA, key)
{
	return satMETA[key] ? satMETA[key]:"[undef.]";
}

/**
* LOADING EXTERNAL DATA.
*/
function loadExternalData()
{
	for(var i=0; i< metSatIdOrder.length; i++)
	{
			var sat = metSatIdOrder[i];
	    var url = indicatorMETA[sat]['dataURL'];
	    dhtmlLoadScript(url, sat, i);
	}
}

/**
* Replaces javascript source-include.
*
* Overwrites the innerHTML of script-tags inside a unique DIV-tag.
*/
function dhtmlLoadScript(url, sat, i)
{
   var e = document.createElement("script");
   e.src = url;
   e.type="text/javascript";
   var targetElt = document.getElementById("scriptmet"+sat);
   if(targetElt){
	   var sourceElt = document.getElementById("scriptmet"+sat);
	   sourceElt.replaceChild(e, targetElt.firstChild);
	 }
}

/**
* Write new status to exisiting Indicators.
*
* Iterates thru defined satellites and replaces the IMG-tag (ID "met"+sat-no.) with new one.
* Afterwards updates the time-tag.
*
*/
function updateStatus(txt){
	for(var i=0; i< metSatIdOrder.length; i++)
	{
		var sat = metSatIdOrder[i];
		statusIMG["met"+sat] = levelColorsIMG[getIndicator(sat)];

		/*Set colors!*/
		document.getElementById("met"+sat).innerHTML = statusIMG["met"+sat];
	}
	updateTime(txt);
}

/**
* Updates the time-tag ("ossiUpdateTime").
*/
function updateTime(txt){
	var text = "Valid for:&nbsp;";
	document.getElementById("ossiUpdateTime").innerHTML = text+getTimeString()+(txt ? txt:"");
}

/**
* Cozuld actually reload (?) a script url or change it.
*/
function reloadScriptURL(id , url)
{
	var elt = document.getElementById(id);
	elt.src = url;
}

/**
* Calls to reload external Javascript data by OISWWW, then calls to update the indicators.
*/
function updateIndicators()
{
	loadExternalData();
	manualOverrides();
	updateStatus();
}

