var CarbonCalculator;
function checkIfType(typeToCheckFor,valueToCheck)
{
  if(valueToCheck.length>typeToCheckFor.length)
  {
    if(valueToCheck.substring(0,typeToCheckFor.length)==typeToCheckFor)
    {
      var valueID=valueToCheck.substring(typeToCheckFor.length,valueToCheck.length);
      if(valueID=="")
      {
        return "";
      }
      else
      {
        return valueID;
      }
    }
    else
    {
      return "";
    }
    
    
  }
  else
  {
    return ""; 
  }
}
function CarbonCalculator()
{
  this.FlowType="";/*Flow Type 0 Not Logged In , 1 Logged in May Change this to something more Meaningful Later.*/
  this.ProfileType="";
  this.init=function(CalcState)
  {
    /*
    CarbonCalculator Flow On Initialisation
    Setup EVENTS according to Page Items
    */
    this.setUpEvents(CalcState);
    this.setUpDisplay(CalcState);
  } 
  this.setUpEvents=function(CalcState)
  {
    //Events That are Common
    if(CalcState=='profile_select' || CalcState=='profile_categories')
    {
      $(".carbon_calc_category_wrap").children("div").mouseover(function()
      {
        if($(this).hasClass("carbon_action_button"))
        {
          $(this).addClass("carbon_action_button_hover");
          $(this).removeClass("carbon_action_button");
        }
      });
      $(".carbon_calc_category_wrap").children("div").mouseout(function()
      {
        if($(this).hasClass("carbon_action_button_hover"))
        {
          $(this).addClass("carbon_action_button");
          $(this).removeClass("carbon_action_button_hover");
        }
      });
    }
    //Custom State Events
    if(CalcState=='profile_select')
    {
      $("#profile_select").children("div").mouseover(function()
      {
        if($(this).hasClass("profile_button"))
        {
          $(this).addClass("profile_button_hover");
          $(this).removeClass("profile_button");
        }
      });
      $("#profile_select").children("div").mouseout(function()
      {
        if($(this).hasClass("profile_button_hover"))
        {
          $(this).addClass("profile_button");
          $(this).removeClass("profile_button_hover");
        }
      });
    }
    else if(CalcState=='profile_categories')
    {
      $(".profile_item_holder").children("div").mouseover(function()
      {
        if($(this).hasClass("profile_button"))
        {
          $(this).addClass("profile_button_hover");
          $(this).removeClass("profile_button");
        }
        else if($(this).hasClass("profile_button_selected"))
        {
          $(this).addClass("profile_button_selected_hover");
          $(this).removeClass("profile_button_selected");
        }
      });
      $(".profile_item_holder").children("div").mouseout(function()
      {
        if($(this).hasClass("profile_button_hover"))
        {
          $(this).addClass("profile_button");
          $(this).removeClass("profile_button_hover");
        }
        else if($(this).hasClass("profile_button_selected_hover"))
        {
          $(this).addClass("profile_button_selected");
          $(this).removeClass("profile_button_selected_hover");
        }
      });
      $(".carbon_action_button").unbind('click');
      $(".carbon_action_button").bind('click',CarbonCalculator.performAction);
      $("#abatement_options").unbind('click');
      $("#abatement_options").bind('click',CarbonCalculator.loadAbatementWindow);
    }
    else if(CalcState=='options_display')
    {
      $(".options_top_section").children("p").mouseover(function()
      {
        if($(this).hasClass("option_group_button"))
        {
          $(this).addClass("option_group_button_hover");
          $(this).removeClass("option_group_button");
        }
        else if($(this).hasClass("option_group_button_selected"))
        {
          $(this).addClass("option_group_button_selected_hover");
          $(this).removeClass("option_group_button_selected");
        }
      });
      $(".options_top_section").children("p").mouseout(function()
      {
        if($(this).hasClass("option_group_button_hover"))
        {
          $(this).addClass("option_group_button");
          $(this).removeClass("option_group_button_hover");
        }
        else if($(this).hasClass("option_group_button_selected_hover"))
        {
          $(this).addClass("option_group_button_selected");
          $(this).removeClass("option_group_button_selected_hover");
        }
      });
      $(".options_top_section").children("p").click(CarbonCalculator.performAction);
      $(".carbon_calc_nav_button").children("p").click(CarbonCalculator.doNavigationCommand);
      $(".carbon_cal_option_value_field").keyup(CarbonCalculator.validateInput);
	  $(".carbon_cal_option_value_field").focus(CarbonCalculator.fieldfocusfunctions);
	  $(".carbon_cal_option_value_field").blur(CarbonCalculator.fieldblurfunction);
      
    }
    else if(CalcState=='abatement_display')
    {
      $("#abatement_select").unbind("change");
      $("#abatement_select").bind("change",CarbonCalculator.loadCategoryItems);
    }
    
  }
  this.loadCategoryItems=function(event)
  {
    var selectedValue=$("#abatement_select").attr("value");
    $.get(globalPagePath+"index.php?section=calculator&AJAXaction=get_AbatementOptions&CategorySelected="+selectedValue,
    function(data) 
    {
      if(data!="")
      {
        $("#abatement_window").html(data);
        if($("#content_holder").length!=0 && $("#content_swap_footer").length!=0 && $("#content_blocks").length!=0)
       	{
       		acontentSwaper=new contentSwaper();
       		acontentSwaper.init();
       	}
      }
    });
    
  }
  this.loadAbatementWindow=function()
  {
    $.get(globalPagePath+"index.php?section=calculator&AJAXaction=CarbonAbatementOptions",
    function(data)
    {
      if(data!="")
      {
        show_modal_page(data,500,700);
        CarbonCalculator.hide_all_field_error();
        CarbonCalculator.setUpEvents("abatement_display");
        CarbonCalculator.setUpDisplay("abatement_display");
      }
      else
      {
        show_modal_page("<P>Page not found, Please contact your Support Administrator</P>",344,425);
      }
    });
  }
  this.show_field_error=function(fieldID,ErrorText)
  {
    var OptionID=fieldID.substr(7,fieldID.length);
    $("#field_error_"+OptionID).html(ErrorText);
  }
  this.hide_field_error=function(fieldID)
  {
    var OptionID=fieldID.substr(7,fieldID.length);
    $("#field_error_"+OptionID).html("");
  }
  this.hide_all_field_error=function(fieldID)
  {
    $(".carbon_cal_value_error_display").html("");
  }
  this.validateInput=function(event)
  {
    var Elemid=event.target.id;
    var ItemValue=$("#"+Elemid).attr("value");
	if(ItemValue.substr(0,1)==0||ItemValue.substr(0,1)=="-")
	{
		if(ItemValue.length>1)
		{
			var newvalue=ItemValue.substr(1,ItemValue.length);
			if(newvalue.substr(0,1)==0||newvalue.substr(0,1)=="-")
			{
				$("#"+Elemid).attr("value",'');
				 CarbonCalculator.show_field_error(Elemid,"That is incorrect.");
			}
			else
			{
			$("#"+Elemid).attr("value",newvalue);
			}
		}
		else
		{
		$("#"+Elemid).attr("value",'');
		}
	}
	else
	{
		if(ItemValue!=0)
		{
			if(IsNumeric(ItemValue))
			{
				if(parseFloat(ItemValue)>=0)
				{
					CarbonCalculator.hide_field_error(Elemid);
				}
				else
				{
				  CarbonCalculator.show_field_error(Elemid,"Please enter a Positive Value.");
					$("#"+Elemid).attr("value",'');
				}
				
			}
			else
			{
				var testVal=ItemValue;
				if(testVal.length==1)
				{
					if(testVal.substring(0,1)==".")
					{
						$("#"+Elemid).attr("value","0"+testVal);
						CarbonCalculator.hide_field_error(Elemid);
					}
					else
					{
					  CarbonCalculator.show_field_error(Elemid,"Please enter a Number.");
  					$("#"+Elemid).attr("value",'');
					}
				}
				else
				{
					CarbonCalculator.show_field_error(Elemid,"Please enter a Number.");
					$("#"+Elemid).attr("value",'');
				}
				
			}
		}
		else
		{
			CarbonCalculator.hide_field_error(Elemid);
		}
	}
  }
  this.fieldfocusfunctions=function(event)
  {
	 var Elemid=event.target.id;
		if($("#"+Elemid).attr("value")==0)
		{
			$("#"+Elemid).attr("value","");
		}
  }
  this.fieldblurfunction=function(event)
  {
	 var Elemid=event.target.id;
	 if($("#"+Elemid).attr("value")=='')
		{
			$("#"+Elemid).attr("value",0);
			$(".carbon_cal_value_error_display").html("");
		}
  }
  this.doNavigationCommand=function(event)
  {
    var ItemID="";
    if(event.target.id!="")
    {
      ItemID=event.target.id;
    }
    else
    {
      //Clicked on the P tag
      ItemID=$(event.target).parent().attr("id");
    }
    if(ItemID=="carbon_cal_nav_back")
    {
      var idtoChangeTo=CarbonCalculator.getPrevPage();
      if(idtoChangeTo!=undefined)
      {
        var PageID=idtoChangeTo.substr(20,idtoChangeTo.length);
        CarbonCalculator.changeGroupPage(PageID);
      }
    }
    else if(ItemID=="carbon_cal_nav_next")
    {
      var idtoChangeTo=CarbonCalculator.getNextPage();
      if(idtoChangeTo!=undefined)
      {
        var PageID=idtoChangeTo.substr(20,idtoChangeTo.length);
        CarbonCalculator.changeGroupPage(PageID);
      }
      
    }
    else if(ItemID=="carbon_cal_nav_save")
    {
        CarbonCalculator.saveAndSendCategory();
    }
  }
  this.saveAndSendCategory=function()
  {
    var allOptionsVals=$(".carbon_cal_option_value_field");
    var JSONEncodedString="";
    var ItemsString="";
    for(i=0;i<allOptionsVals.length;i++)
    {
      ItemID=$(allOptionsVals[i]).attr("id");
      ItemID=ItemID.substr(7,ItemID.length);
      ItemsString+='{"optionId":'+ItemID+',"optionValue":'+$(allOptionsVals[i]).attr("value")+'},';
    }
    ItemsString=ItemsString.substring(0,ItemsString.length-1);
    JSONEncodedString="["+ItemsString+"]";
    $.getJSON(globalPagePath+"index.php?section=calculator&AJAXaction=save_carbon_options&options="+JSONEncodedString,
    function(data) 
    {
      if(data.status==true)
      {
        $("#carbon_calc_val_"+data.content.Category).html(data.content.co2text);
        CarbonCalculator.setupAbatementArea(data.content.totalco2Text);
        $("#total_val").html(data.content.totalco2Text);
        $("#carbon_cal_is_calculated_"+data.content.Category).removeClass("carbon_cal_status_indicate_not_ok");
        $("#carbon_cal_is_calculated_"+data.content.Category).addClass("carbon_cal_status_indicate_ok");
        $.modal.close();
      }
    });

    
  }
  this.setupAbatementArea=function(totalText)
  {
    var ItemSplit=totalText.split(" ");
    if(parseFloat(ItemSplit[0])>0)
    {
      $(".calculator_info_space_left").find("div").show("fast");
    }
    else
    {
      $(".calculator_info_space_left").find("div").hide("fast");
    }
  }
  this.isModalOpen=function()
  {
    if($("#modal_window").html()=="")
    {
      return false;
    }
    return true;
  }
  this.validatePage=function()
  {
    if(CarbonCalculator.isModalOpen()==false)
    {
      return true;
    }
    
    var currentPageIndex=CarbonCalculator.getCurrentPageDisplayIndex();
    var currentPageID=$(".options_bottom_section").children("div:eq("+currentPageIndex+")").attr("id");
    var allManditoryItems=$("#"+currentPageID).find(".carbon_cal_option_value").children(":hidden");
    var allInputItems=$("#"+currentPageID).find(".carbon_cal_option_value").children(":input:not(:hidden)");
    var hasAvalue=false;
    var hasValueRequired=false;
    for(i=0;i<allInputItems.length;i++)
    {
      var MyValue=parseFloat($(allInputItems[i]).attr("value"));
      if(MyValue>0 && MyValue!="")
      {
        hasAvalue=true;
      }
    }
    for(i=0;i<allManditoryItems.length;i++)
    {
      var isManditory=$(allManditoryItems[i]).attr("value");
      var ItemID=$(allManditoryItems[i]).attr("id");
      ItemID=ItemID.substr(10,ItemID.length);
      if(isManditory==1 && hasAvalue==true )
      {
        if($("#option_"+ItemID).attr("value")=="0" || $("#option_"+ItemID).attr("value")=="0")
        {
          CarbonCalculator.show_field_error("option_"+ItemID,"Please enter a value.");
          hasValueRequired=true;
        }
        else
        {
          CarbonCalculator.hide_field_error("option_"+ItemID);
        }
      }
      else
      {
        CarbonCalculator.hide_field_error("option_"+ItemID);
      }
    }
    if(hasValueRequired==true)
    {
      return false;
    }
    return true;
    
  }
  /* Display Helper functions*/
  this.HasNext=function()
  {
    if(CarbonCalculator.getCurrentPageDisplayIndex<CarbonCalculator.getTotalPageNumer)
    {
      return true;
    }
    return false;
  }
  this.getCurrentPageDisplayIndex=function()
  {
    var CurrentItems=$(".options_bottom_section").children("div");
    var CurrentDisplayedItem=$(".options_bottom_section").children("div:visible");
    for(i=0;i<CurrentItems.length;i++)
    {
      if($(CurrentItems[i]).attr("id")==$(CurrentDisplayedItem).attr("id"))
      {
        return i;
      }
    }
    return -1;
  }
  this.getIsFirstPage=function(idtoCheckFor)
  {
    if(idtoCheckFor=="" || idtoCheckFor==undefined)
    {
      var currentPageIndex=CarbonCalculator.getCurrentPageDisplayIndex();
      if(currentPageIndex!=-1)
      {
        idtoCheckFor=$(".options_bottom_section").children("div:eq("+currentPageIndex+")").attr("id");
      }
    }
    CarbonCalculator.getCurrentPageDisplayIndex();
    var CurrentItemsAtFirst=$(".options_bottom_section").children("div:first");
    if($(CurrentItemsAtFirst).attr("id")==idtoCheckFor)
    {
      return true;
    }
    return false;
  }
  this.getIsLastPage=function(idtoCheckFor)
  {
    if(idtoCheckFor=="" || idtoCheckFor==undefined)
    {
      var currentPageIndex=CarbonCalculator.getCurrentPageDisplayIndex();
      if(currentPageIndex!=-1)
      {
        idtoCheckFor=$(".options_bottom_section").children("div:eq("+currentPageIndex+")").attr("id");
      }
    }

    var CurrentItemsAtFirst=$(".options_bottom_section").children("div:last");
    if($(CurrentItemsAtFirst).attr("id")==idtoCheckFor)
    {
      return true;
    }
    return false;
  }
  this.getTotalPageNumer=function()
  {
    var CurrentItems=$(".options_bottom_section").children("div");
    return CurrentItems.length - 1;
  }
  this.getFirstPage=function()
  {
    return $(".options_bottom_section").children("div:first").attr("id");
  }
  this.getLastPage=function()
  {
    return $(".options_bottom_section").children("div:last").attr("id");
  }
  this.getNextPage=function()
  {
    if(CarbonCalculator.validatePage())
    {
      if(CarbonCalculator.getIsLastPage())
      {
        var confirmVal=confirm("Would you like to Save your Values?");
        if(confirmVal)
        {
          CarbonCalculator.saveAndSendCategory();
          return;
        }
      }
      var currentIndex=CarbonCalculator.getCurrentPageDisplayIndex();
      var nextIndex=currentIndex+1;
      if(nextIndex<=CarbonCalculator.getTotalPageNumer())
      {
        return $(".options_bottom_section").children("div:eq("+nextIndex+")").attr("id");
      }
      else
      {
        return $(".options_bottom_section").children("div:eq(0)").attr("id");
      }
    }
    
  }
  this.getPrevPage=function()
  {
    if(CarbonCalculator.validatePage())
    {
      var currentIndex=CarbonCalculator.getCurrentPageDisplayIndex();
      var prevIndex=currentIndex-1;
      if(prevIndex>=0)
      {
        return $(".options_bottom_section").children("div:eq("+prevIndex+")").attr("id");
      }
      else
      {
        return $(".options_bottom_section").children("div:last").attr("id");
      }
    }
  }
  
  /**/
  this.setUpDisplay=function(CalcState)
  {
    if(CalcState=='options_display')
    {
      var OptionGroups=$(".options_bottom_section").children("div");
      $(".options_bottom_section").children("div").hide();
      var FirstItemID=$(".options_bottom_section").children("div:eq(0)").attr("id");
      FirstItemID=FirstItemID.substr(20,FirstItemID.length);
      CarbonCalculator.changeGroupPage(FirstItemID);
    }
  }
  this.performAction=function(event)
  {

    var EventId=event.target.id;
    if(EventId=="")
    {
      //CLICK ON THE Child element
      EventId=$(event.target).parent().attr("id");
    }
    var CalCulateSelected=checkIfType("calculate_",EventId);
    var ResetSelected=checkIfType("reset_",EventId);
    var OptionGroupSelected=checkIfType("option_group_",EventId);
    if(CalCulateSelected!="")
    {
      $.get(globalPagePath+"index.php?section=calculator&AJAXaction=Options_insert&category="+CalCulateSelected,
      function(data)
      {
        if(data!="")
        {
          show_modal_page(data,400,600);
          CarbonCalculator.hide_all_field_error();
          CarbonCalculator.setUpEvents("options_display");
          CarbonCalculator.setUpDisplay("options_display");
        }
        else
        {
          show_modal_page("<P>Page not found, Please contact your Support Administrator</P>",344,425);
        }
      });
    }
    else if(ResetSelected!="")
    {
      $.getJSON(globalPagePath+"index.php?section=calculator&AJAXaction=ResetCategory&category="+ResetSelected,
      function(data)
      {
        if(data.status==true)
        {
          $("#carbon_calc_val_"+data.content.Category).html(data.content.co2text);
          CarbonCalculator.setupAbatementArea(data.content.totalco2Text);
          $("#total_val").html(data.content.totalco2Text);
          $("#carbon_cal_is_calculated_"+data.content.Category).removeClass("carbon_cal_status_indicate_ok");
          $("#carbon_cal_is_calculated_"+data.content.Category).addClass("carbon_cal_status_indicate_not_ok");
        }
        else
        {
          
        }
      });
    }
    else if(OptionGroupSelected!="")
    {
      CarbonCalculator.changeGroupPage(OptionGroupSelected);
    }    
    
  }
  this.changeGroupPage=function(GroupSelected)
  {
    //hide the current and reset its button Style
    if($(".options_bottom_section").children("div:visible").length>0)
    {
      $(".options_bottom_section").children("div:visible").slideUp(1,function()
      {
        //Show next
        CarbonCalculator.changeSectionhighlight(GroupSelected);
        $("#option_group_holder_"+GroupSelected).slideDown(1);
      });
    }
    else
    {
      CarbonCalculator.changeSectionhighlight(GroupSelected);
      $("#option_group_holder_"+GroupSelected).slideDown(1);
    }
    
  }
  this.changeSectionhighlight=function(GroupSelected)
  {
    //RESET all to the Unselected State
    $(".options_top_section").children('p').removeClass("option_group_button_selected_hover");
    $(".options_top_section").children('p').addClass("option_group_button");
    if($("#option_group_"+GroupSelected).hasClass("option_group_button"))
    {
      $("#option_group_"+GroupSelected).addClass("option_group_button_selected_hover");
      $("#option_group_"+GroupSelected).removeClass("option_group_button");
    }
  }
  //Auxilary Functions

}
