// Copyright 2010 Pochiro Consulting Inc. All rights reserved.
// john@pochiro.com
// 
//
if (document.images) // check to see if you have images ...
{
// Preload original Images

var blank             = new Image();  // blank image to erase overlay
blank.src             = "blank.gif";

var generator_on      = new Image();  // show AC power with trasnfer switch on
generator_on.src      = "generator_on.gif";

var shore_on          = new Image();  // show AC power 
shore_on.src          = "shore_on.gif";

var generator_off      = new Image();  // transfer switch in off position no AC
generator_off.src     = "generator_off.gif";

var battery_coil_on_p = new Image();  // disconnect active on
battery_coil_on_p.src = "battery_coil_on_p.gif";

var battery_coil_on_n = new Image();  // disconnect active off 
battery_coil_on_n.src = "battery_coil_on_n.gif";

var battery_on        = new Image();  // disconnect in on state
battery_on.src        = "battery_on.gif";

var battery_off       = new Image();  // disconnect in off state
battery_off.src       = "battery_off.gif";

var engine_on         = new Image();
engine_on.src         = "engine_on.gif";

var battery_disc      = new Image();
battery_disc.src      = "battery_disc.gif";

var battery_charge    = new Image();
battery_charge.src    = "battery_charge.gif";
 
var switch_charge     = new Image();
switch_charge.src     = "switch_charge.gif";

var switch_disc       = new Image();
switch_disc.src       = "switch_disc.gif";

var v12_volt_on       = new Image();
v12_volt_on.src       = "12_volt_on.gif";

var gen_start         = new Image();
gen_start.src         = "gen_start.gif";

var overload          = new Image();
overload.src          = "overload.gif";

var inverter_on       = new Image();
inverter_on.src       = "inverter_on.gif";

var battery_voltage   = new Image();
battery_voltage.src   = "battery_voltage.gif";

var isolator          = new Image();
isolator.src          = "isolator.gif";

var separator         = new Image();
separator.src         = "separator.gif";

var engine_on_iso     = new Image();
engine_on_iso.src     = "engine_on_isolator.gif";

var sep_on		      = new Image();
sep_on.src            = "sep_on.gif";

var conv_bypas        = new Image();
conv_bypas.src        = "blank.gif";

var conv_bypas_on    = new Image();
conv_bypas_on.src        = "conv_bypas_on.gif";

var conv_bypas_off    = new Image();
conv_bypas_off.src        = "conv_bypas_off.gif";


} // end check for images ..
var flag = true;
var iso_type = "SEP";
var sep_active = false;
var charge_bypass = false; 
var starter_on = false;
var bat_voltage = 0.0;
var alt_voltage = 0.0;
var veh_voltage = 0.0;
var conv_voltage = 0.0;
var test_on = false; 
var coil_status = false;
var over_heat = ""; // overhead message

var state = new Array();
state["generator"] = false; // everything idle at program start
state["battery"]   = false;
state["shore"]     = false;
state["engine"]    = false;
state["inverter"]  = false;
state["battery_coach"] = true;

var t;
var w; 
var coil_status = false;

//function timeMsg2()
//{
// var w=setTimeout("killMsg()",3000);
//}


function Overheat()
{
  over_heat = 'Overheated Coil!<br><span class="c_note">Holding down the button<br>can damage the disconnect.</span>';
  
  document.getElementById('coil').style.display="inline";
  
  document.getElementById('coil').innerHTML = over_heat;   
  setTimeout("kill_msg()",3000);
}

function kill_msg()
{
  if (coil_status)
     setTimeout("kill_msg()",3000);
  else
  { 
     over_heat = "";
     document.getElementById('coil').style.display="none";
     document.getElementById('coil').innerHTML = over_heat;
  }    
}

//function killMsg()
//}
//  over_heat = "";
//  document.getElementById('coil').innerHTML = over_heat;   
//}


function init()
{

       veh_select();
       bat_cond();       // read bat condition drop down
       do_it();          // perform state transition 
       
       if (document.myform.inverter[0].checked == true && conv_voltage >= 12 && !state["shore"] && !state["generator"])
          state["inverter"] = true;
       else
          state["inverter"] = false;   
       
       display_img();    // display images based on current state
       display_text();   // display text messages 
}

function inverter_switch()
{
       
	   document.getElementById('warning').innerHTML = "";
	   if (document.myform.inverter[0].checked == true && conv_voltage >= 12 && !state["shore"] && !state["generator"])
          state["inverter"] = true;
       else 
          {
          state["inverter"] = false; 
          if (document.myform.inverter[0].checked == true) // switch true but voltage too low ...
             {
               document.getElementById('warning').innerHTML = "Inverter won't operate, low DC voltage or external AC."
             }
          else
             document.getElementById('warning').innerHTML = ""   
          } 
             
       do_it();
       display_img();    // display images based on current state
       display_text();   // display text messages 
     
}


function note()
{

	if (flag)
	{
	  alert("There are 4 basic configurations\nThe Model Year Selector is approximate, so you need be sure you have the right one for your vehicle. You can have a battery isolator or a battery separator.  You may have a direct connection to the battery from the converter/charger or a connection via the battery disconnect switch.  See the notes, for more information.");
        flag = false;
	}  
}

function veh_select()
{
       
	   options();   // determine mode 
	   
	   var message = ''; // clear out message ...
       if (iso_type == 'ISO')
          message = "Isolator, vehicle battery only charges when engine is running.<br>";
       else
          message = "Separator, vehicle battery will charge with shore power or generator.<br>";
             
       if (charge_bypass)
           message += "Battery switch must be on for 12 volt accessories. Inverter not switched.";
       else
           message += "12 volt accessories operate when connected to AC power even with battery switch off.";        
       
       bat_cond();       // read bat condition drop down
       do_it();          // perform state transition 
       
       if (document.myform.inverter[0].checked == true && conv_voltage >= 12 && !state["shore"] && !state["generator"])
          state["inverter"] = true;
       else
          state["inverter"] = false;   
                 
       document.getElementById('message').innerHTML = message;    
       display_img();    // display images based on current state
       display_text();   // display text messages 
	        
}




function options()
{
	if (  document.myform.code.value.substr(0,1) == 'S')
         iso_type = 'SEP'; 
    else 
         iso_type = 'ISO'; 
                            
   if (  document.myform.code.value.substr(1,1) == 'C')
         charge_bypass = true; 
    else 
         charge_bypass = false; 
}	

function bat_cond()
{
  document.getElementById('warning').innerHTML = "";
  if (document.myform.bat_state.value == "DEAD")
     state["battery_coach"] = false;
  else
     state["battery_coach"] = true; 
}

function display_img() // display proper graphics based on the current state...
{

	
	if (charge_bypass)
	{
	  if (bat_voltage < 5)
	     document.images["conv_bypas"].src = conv_bypas_off.src;
	  else
	     document.images["conv_bypas"].src = conv_bypas_on.src;   
    }         
	else
        document.images["conv_bypas"].src = blank.src;    
	
// ISOLATOR / SEPARATOR Display
	if (iso_type == "ISO")
	{
	   document.images["iso_part"].src = isolator.src;
       document.images["sep_on"].src = blank.src; 
    }
	else
    {
	   document.images["iso_part"].src = separator.src; 

    if (bat_voltage > 13.2 || veh_voltage > 13.2)
	   document.images["sep_on"].src = sep_on.src;
    else
       document.images["sep_on"].src = blank.src;   
    }   
// 12 volt power presnet Display

  if (!charge_bypass)
  {
  //if (state["shore"] || state["generator"] || 
  //       ( state["battery"] && (state["battery_coach"]  
  //             || state["engine"])             )
  //    ) //
    if (conv_voltage > 5)   
      document.images["v12_volt"].src= v12_volt_on.src; 
  else
    document.images["v12_volt"].src= blank.src; 
     
  }  // Bypass version ...
  else
    if (state["battery"] &&  bat_voltage > 5)    
       document.images["v12_volt"].src= v12_volt_on.src; 
    else
       document.images["v12_volt"].src= blank.src;    
   

// if engine is running display graphic showing engine is running 
   if (state["engine"])   // engine running 
       { document.images["engine"].src= engine_on.src;
       		if (iso_type == 'ISO')
       		{
       		 document.images["engine_on_iso"].src= engine_on_iso.src;
       		} 
       		else
       		{      
       		  document.images["engine_on_iso"].src= blank.src;
       		}
       } 
    else
       { 
	   document.images["engine"].src= blank.src; 
       if (iso_type == 'ISO')
          document.images["engine_on_iso"].src= blank.src;
       }  

// if shore power is connected show graphic with plug connected.
   if (state["shore"])    // shore power connected
      { document.images["shore"].src= shore_on.src; } 
   else
       { document.images["shore"].src= blank.src; }  
   
   if  (state["generator"])
       { document.images["generator"].src= generator_on.src; }
   else
       { document.images["generator"].src= generator_off.src; } 
// remove warning ...
   if ( !state["battery"] || (!state["generator"] && !state["shore"]) )
      { document.images["overload"].src= blank.src;}

  if ( state["inverter"]) 
                                                        
       { document.images["inverter"].src= inverter_on.src; }
  else      
       { document.images["inverter"].src= blank.src; }


  if (bat_voltage > 5.0)  // show presence of voltage ...
      { document.images["battery_voltage"].src= battery_voltage.src;  
    
      }      
  else
       { document.images["battery_voltage"].src= blank.src;  
         
       }
          
     if (starter_on && bat_voltage > 9)
          document.images["gen_start"].src= gen_start.src;
     else
          document.images["gen_start"].src= blank.src;
          
               
}	

function display_battery(voltage)
{

	var led_c = "&#9675;";
	var led_g = "&#9675;";
	var led_f = "&#9675;";
	var led_l = "&#9675;";

	if (voltage >= 12.75)
	    led_c = "&#9679;";
	if (voltage >= 12.0)
        led_g = "&#9679;";
	if (voltage >= 11.3)              
	    led_f = "&#9679;";
	if (voltage >= 4.1)    
	    led_l = "&#9679;"; 
	 
  	document.getElementById('led_c').innerHTML = led_c;
	document.getElementById('led_g').innerHTML = led_g;
	document.getElementById('led_f').innerHTML = led_f;
	document.getElementById('led_l').innerHTML = led_l;    
   
}

function display_text()
{
	document.getElementById('bat_voltage').innerHTML = bat_voltage.toPrecision(4);
	document.getElementById('alt_voltage').innerHTML = alt_voltage.toPrecision(4);
	document.getElementById('veh_voltage').innerHTML = veh_voltage.toPrecision(4);
	document.getElementById('conv_voltage').innerHTML = conv_voltage.toPrecision(4);

	// RV battry charging or discharging ..
	if (iso_type == "ISO") 
	{
	   if (charge_bypass) // charges even if switch is off
	   {     // charges when engine running or plugged in with switch on or off.
	   		if (state["engine"] || state["generator"] || state["shore"] )
	   		    rv_bat_text = "Charging"
	   		else if (document.myform.inverter[0].checked || state["battery"])
	   		        rv_bat_text = "Discharging"
	   		     else 
	   		        rv_bat_text = "Very Slow Discharge"
       		
       		if (bat_voltage < 9.0)
	   		    rv_bat_text = "DEAD";
       		
       		if (state['engine'])  // engine running ...
	   		    veh_bat_text = "Charging";
	   		else
	   		    veh_bat_text = "Slow Discharge";    
       } 
       else // not charge bypass, charge only with switch is on 
       {  
	   		if (state["engine"] || ( state["battery"] && (state["generator"] || state["shore"]) )  )
	   		    rv_bat_text = "Charging"
	   		else if (state["battery"])
	   		        rv_bat_text = "Discharging"
	   		     else 
	   		        rv_bat_text = "Very Slow Discharge"
       		
       		if (bat_voltage < 9.0)
	   		    rv_bat_text = "DEAD";
       		
       		if (state['engine'])  // engine running ...
	   		    veh_bat_text = "Charging";
	   		else
	   		    veh_bat_text = "Slow Discharge";    
       }
    
    }    
    else  // iso type = SEP 
    {   	    
	    if (charge_bypass) // bypass mode ..
	    {
	        if (state["engine"] || state["shore"] || state["generator"])
	        {
	             veh_bat_text = "Charging";
	             rv_bat_text = "Charging"
            }
            else // must be discharging or slow discharge ...
            {
                 veh_bat_text = "Slow Discharge";
                 if (document.myform.inverter[0].checked || state["battery"]) 
                 {
                       rv_bat_text = "Discharging"
                       if (document.myform.inverter[0].checked) 
                         if(bat_voltage < 12) 
                           document.getElementById('warning').innerHTML = "Inverter switch is ON, but low voltage."
                         else  
                           document.getElementById('warning').innerHTML = "Inverter ON!"  
                 }      
                 else
                       rv_bat_text = "Very slow discharge"      
            }     
	    }
	    else // no charge bypass 
	    {
	        if (state["engine"] || (state["battery"] && ( state["shore"] || state["generator"]) ) )
		    {  
	           veh_bat_text = "Charging";
		       rv_bat_text = "Charging"
		    }       
		    else  // must be discharging or slow discharge  
		    {
		       rv_bat_text = "Discharge" 
		       veh_bat_text = "Slow discharge"
		         if (state["battery"]) 
                       rv_bat_text = "Discharge"
                 else if (document.myform.bat_state.value == "DEAD")
                          rv_bat_text = "DEAD"
                      else
                          rv_bat_text = "Very slow discharge"       
            }
			
			
			
			
		    
	    } // no charge bypass       
    } // isotype 
	         
	document.getElementById('rv_bat').innerHTML  =  rv_bat_text; 
	document.getElementById('veh_bat').innerHTML = veh_bat_text; 
	document.getElementById('coil').innerHTML = over_heat; 
	
}

function find_voltage()
{
    
    if (!charge_bypass)
	{
    	
    	if (state["engine"])
        { 
               if (iso_type == "ISO")
                    bat_voltage = 14.4;
               else
                    bat_voltage = 14.2;
        }   
        else if (state["battery"] && (state["generator"] || state["shore"]))
            bat_voltage = 13.3; 
        else if (document.myform.bat_state.value == "FULL" && !state["battery"])
            bat_voltage = 12.7;
        else if (document.myform.bat_state.value == "FULL" && state["battery"])
            bat_voltage = 12.0;    
              
        else if (document.myform.bat_state.value == "POOR" && !state["battery"])
            bat_voltage = 10.5;
            
        else if (document.myform.bat_state.value == "POOR" && state["battery"])
            bat_voltage = 10.0;    
                
        else if (document.myform.bat_state.value == "DEAD")
            bat_voltage = 0.0;
        else
            bat_voltage = 0.0;  
    
            
       // find alt and veh battery voltage      
         if  (state["engine"])
             {  
             if (iso_type == "ISO")
    	         alt_voltage = 15.4;
    	     else
    	         alt_voltage = 14.2; 
             veh_voltage = 14.2;
             
             }
         else  // engine not running 
             { 
            	if (iso_type == "ISO")
            	{         
    	    	    alt_voltage = 0.0;
            	    veh_voltage = 12.7;
            	}
            	else
            	{         
    	    	    if (sep_active)
    	    	    {
    	        	  	alt_voltage = bat_voltage;
            	        veh_voltage = bat_voltage;
        	        }
        	        else
        	        {
    	        	  	alt_voltage = 12.7;
            	        veh_voltage = 12.7;
        	        }    
    	         }  
	           }  // engine not running  	    
      } 
      else // charge bypass mode ...
      {
      
      if (state["engine"])
             if (iso_type == "ISO")
                    bat_voltage = 14.4;
               else
                    bat_voltage = 14.2;
                        
        else if ( state["generator"] || state["shore"])
            bat_voltage = 13.3; 
        else if (document.myform.bat_state.value == "FULL" && !state["battery"] && !state["inverter"] ) 
            bat_voltage = 12.70;
        else if (document.myform.bat_state.value == "FULL" && (state["battery"] || state["inverter"]) )
            bat_voltage = 12.0;    
              
        else if (document.myform.bat_state.value == "POOR" && !state["battery"] && !document.myform.inverter[0].checked ) 
            bat_voltage = 10.5;
            
        else if (document.myform.bat_state.value == "POOR" && (state["battery"] || document.myform.inverter[0].checked) )
            bat_voltage = 10.0;    
                
        else if (document.myform.bat_state.value == "DEAD")
            bat_voltage = 0.0;
        else
            bat_voltage = 0.0;  
    
            
       // find alt and veh battery voltage      
         if  (state["engine"])
         {    
             if(iso_type == "SEP")
	         {
	              veh_voltage = 14.2;
                  alt_voltage = veh_voltage;
             }
             else
             {    
                 veh_voltage = 14.2;
                 alt_voltage = 15.2;
             }
         }    
         else // engine not running 
             { 
            	if (iso_type == "SEP")
            	{       
    	    	    if (sep_active)
    	    	    {
    	        	  	alt_voltage = bat_voltage;
            	        veh_voltage = bat_voltage;
        	        }
        	        else
        	        {
    	        	  	alt_voltage = 12.7;
            	        veh_voltage = 12.7;
        	        }
    	         }
    	         else // isotype = iso
    	         { 
	    	           alt_voltage = 0;  
	    	           veh_voltage = 12.7; 
    	         }          
        	 }  // engine not running ...
      
       }  // charge bypass mode 
         
  // find converter voltage      
   
    if (!charge_bypass)
    {
    
     if (state["battery"])
          conv_voltage = bat_voltage;
     else if (state["shore"] || state["generator"])
         conv_voltage = 13.3;   
         
     else conv_voltage = 0;

     }  
     else // charge bypass mode
     {
          conv_voltage = bat_voltage;
     }  
   
     if (bat_voltage > 5 && document.myform.bat_state.value == "DEAD")
     { 
     document.myform.bat_state.value = "POOR";
     }

     if (test_on) // test button is pushed!
     {
       if (!charge_bypass)  // normal 
             display_battery(conv_voltage);
        
       else 
          if (state['battery']) 
	          display_battery(conv_voltage);
	  }    
      else
        display_battery(0.0);
     
     
     
}  // find voltage function


function do_it()  // look at the current state and determine new states
{
	
find_voltage();  // get current voltages 
   
// determine if battery is idle, charging or discharging

 
  if (iso_type == "ISO")
	{
	   	sep_active = false; 
	}
	else 
	if (bat_voltage > 13.2)
	      sep_active = true;
    else
          sep_active = false; 
  
  find_voltage();
  
  if (document.myform.inverter[0].checked == true && conv_voltage >= 12 && !state["shore"] && !state["generator"])
          state["inverter"] = true;
       else
          state["inverter"] = false;  
  
       
  if (!charge_bypass && state["shore"] && !state["battery"] )  
        document.getElementById('warning').innerHTML = "Possible converter instablity.";
   
  display_img();    // display images based on current state
  display_text();   // display text messages 
  
}  // function do_it

function button_out(action)   // react to change in buttons 
{
	switch(action)
	{ 
	 case "b_on_out_d"   :   if (bat_voltage > 9) 
                          {
                           if (document.images["battery"].src == battery_coil_on_p.src)
	                            {
                                document.images["battery"].src = battery_on.src; 
	                            state["battery"] = true; // 12 volts off
                                }
                          }
                          break; 
	
	 case "b_off_out_u"  :   if (bat_voltage > 9) 
                          {
                            if (document.images["battery"].src == battery_coil_on_n.src)
	                            {
                                document.images["battery"].src = battery_off.src; 
	                            state["battery"] = false; // 12 volts off
                                }
                          }
                          break;  
     }                     
       do_it();                      
}	

function button(action)   // react to change in buttons or switches
{
     document.getElementById('warning').innerHTML = "";
	 switch(action)
     { case "g_on_d"  :   if (bat_voltage > 9)  // Start onMounseDown
                                 starter_on = true; 
                          else
                             document.getElementById('warning').innerHTML = "Battery too low to start generator.";      
                          break;
                        
                     
    case "g_on_out_u"  : // Start onMouseOut 
    
     case "g_on_u"  :    // Start onMouseUp
    
                         if (starter_on)              // Start onMouseOut
                         {  
                             starter_on = false;
                             if (bat_voltage >= 12) 
                                  state["generator"] = true;
                             else
                             {
	                             state["generator"] = false;
	                             document.getElementById('warning').innerHTML = "Battery too low to start generator.";
	                         }         
                         }  
                            
                         break;                 
     
       case "g_off_d" :   state["generator"] = false; // generator is off
                          break;
                             

       case "e_on_d"  :   break;          // engine running
                          
       
       case "e_on_u"  :   state["engine"] = true;
                                             
                          if (document.myform.bat_state.value != "FULL") 
                             document.getElementById('warning').innerHTML = 'Caution, high current demand !';
                       
                          break;
 
       case "e_off_d"  :  state["engine"] = false;     // engine running
                          break;

       case "s_on_d"   :  state["shore"] = true;
             
                          break;

       case "s_off_d"  :  state["shore"] = false;
                          break;
                               
       case "b_on_d"   :  if (bat_voltage > 9) 
                          {
                          // if ( (document.myform.bat_state.value != "FULL") && 
                          if ( !state["battery"] && (state["shore"] || state["generator"]) )
                          { 
                            if (!charge_bypass) 
                                 document.getElementById('warning').innerHTML = "Possible converter instablity.";
                            // document.images["overload"].src= overload.src;
                          }
                          state["battery"] = true;  // 12 volts on ...
                      
                          document.images["battery"].src= battery_coil_on_p.src;
                          }
                          else
                             document.getElementById('warning').innerHTML = "The battery is dead so the disconnect can't operate.";
                          
                          break;

      case "b_on_out_d"   :   if (bat_voltage > 9) 
                          {
                           if (document.images["battery"].src == battery_coil_on_p.src)
	                            {
                                document.images["battery"].src = battery_on.src; 
	                            state["battery"] = true; // 12 volts off
                                }
                          }
                          break; 
                                            
                          
       case "b_on_u"   :   if (bat_voltage > 9) 
                          {
                          state["battery"] = true;  // 12 volts on ...
                          // playSound("down"); 
                          document.images["battery"].src= battery_on.src;
                          }
                          break;
                                

       case "b_off_d"  :   if (bat_voltage > 9) 
                          { 
                          if ( (document.myform.bat_state.value != "FULL") && 
                          !state["battery"] && (state["shore"] || state["generator"]))
                          { 
	                          if (!charge_bypass) 
                                 document.getElementById('warning').innerHTML = "Possible converter instablity.";
	                                       
	                          // document.images["overload"].src= overload.src;
	                      }
                          state["battery"] = true;  // 12 volts on 
                          // playSound("down");
                          document.images["battery"].src = battery_coil_on_n.src;
                          }
                          else
                            document.getElementById('warning').innerHTML = "The battery is dead so the disconnect can't operate.";
                          break;
                    
       case "b_off_u"  :   if (bat_voltage > 9) 
                          {
                          state["battery"] = false; // 12 volts off
                          // playSound("down");
                          document.images["battery"].src = battery_off.src; 
                          if (!charge_bypass) 
                                 document.getElementById('warning').innerHTML = "";
                          
                          
                          }
                          break;
                          
      case "b_off_out_u"  :   if (bat_voltage > 9) 
                          {
                            if (document.images["battery"].src == battery_coil_on_n.src)
	                            {
                                document.images["battery"].src = battery_off.src; 
	                            state["battery"] = false; // 12 volts off
                                }
                          }
                          break;      
                          
       case "test_on"    :   test_on = true;
                             
                             break; 
       
       case "test_off"   :   test_on = false;
                             
                             break;  
                      
                          
       default :          break;
     }  // case statement
       
       if ((document.images["battery"].src == battery_coil_on_n.src) ||
             (document.images["battery"].src == battery_coil_on_p.src) )
            {
             coil_status = true;
	         t = setTimeout("Overheat()",500);   
	                     
            } 
       else
            {
	           clearTimeout(t);
	           coil_status = false;
            }
	              
       do_it();
}


