var giTotalPages = 10;
var giCurrentPage = 1;

var giNotFound = -1;
// showMessage Constants
var giError = 0;
var giWarning = 1;
var giInformation = 2;

var ARequest = null;

var arFieldData = [];

function FieldData(psName, psType, psValue)
{
  this.name = psName;
  this.type = psType;
  this.value = psValue;
}

function showMessage(piMessageType, psMessage)
{
  alert(psMessage);
}

// Show or hide a field based on a boolean condition
function setVisible(pbTest, psID)
{
  if (pbTest === true) 
  {
    $(psID).show();
  }
  else 
  {
    $(psID).hide();
  }
}

// Return index into arFieldData for psName
// Returns giNotFound (-1), if the name is not found
function findElement(psName)
{
  var liIndex = giNotFound;
  for (var x = 0; x < arFieldData.length; x++) 
  {
    if (arFieldData[x].name === psName) 
    {
      liIndex = x;
    }
  }
  return liIndex;
}

function getValueStr(psName)
{
  var lsValue = "";
  var liIndex = findElement(psName)
  if (liIndex !== giNotFound) 
  {
    lsValue = arFieldData[liIndex].value;
  }
  else 
  {
    //console.error("Missing Value : %s", psName);
  }
  //console.log("getValueStr  - %s = %s", psName, lsValue);
  return lsValue;
}

function getValueInt(psName)
{
  var liValue = 0;
  var liIndex = findElement(psName)
  if (liIndex !== giNotFound) 
  {
    var lsValue = arFieldData[liIndex].value;
    liValue = parseInt(lsValue, 10);
    if (isNaN(liValue)) 
    {
      liValue = 0;
    }
  }
  else 
  {
    //console.error("Missing Value : %s", psName);
  }
  //console.log("getValueInt - %s = %d", psName, liValue);
  return liValue;
}

function getValueFloat(psName)
{
  var lfValue = 0;
  var liIndex = findElement(psName)
  if (liIndex !== giNotFound) 
  {
    var lsValue = arFieldData[liIndex].value;
    lfValue = parseFloat(lsValue, 10);
    if (isNaN(lfValue)) 
    {
      lfValue = 0;
    }
  }
  else 
  {
    //console.error("Missing Value : %s", psName);
  }
  //console.log("getValueFloat - %s = %f", psName, lfValue);
  return lfValue;
}

function fixNumber(pfValue)
{
	var lsReturn = "Error";
	if ((!isNaN(pfValue)) && (isFinite(pfValue)))
	{
		lsReturn = pfValue;
	}
	return lsReturn;
}

function addField(AElement)
{
  var lbHasValue = false;
  if (AElement.type === "radio") 
  {
    if (AElement.checked === true) 
    {
      lbHasValue = true;
    }
  }
  else 
  {
    lbHasValue = true;
  }
  if (lbHasValue === true) 
  {
    var liIndex = findElement(AElement.name);
    if (liIndex === giNotFound) 
    {
      arFieldData.push(new FieldData(AElement.name, AElement.type, AElement.value));
    }
    else 
    {
      arFieldData[liIndex].value = AElement.value;
    }
  }
}

// Save all inputs to from the screen to the 
function saveFields()
{
  var arInputs = document.getElementsByTagName("input");
  for (var liInput = 0; liInput < arInputs.length; liInput++) 
  {
    if (arInputs[liInput].name !== '') 
    {
      addField(arInputs[liInput]);
    }
  }
  return true;
}

// Load fields from saved values
function loadFields()
{
  var liData;
  var arInputs = document.getElementsByTagName("input");
  for (var liInput = 0; liInput < arInputs.length; liInput++) 
  {
    if (arInputs[liInput].name !== '') 
    {
      liData = findElement(arInputs[liInput].name);
      if (liData != giNotFound) 
      {
        // Set radio buttons to checked if 
        if (arInputs[liInput].type === "radio") 
        {
          if (arInputs[liInput].value === arFieldData[liData].value) 
          {
            arInputs[liInput].checked = true;
          }
        }
        else 
        {
          arInputs[liInput].value = arFieldData[liData].value;
        }
      }
    }
  }
}

// Sets the currently active page
function setPage(liNewPage)
{
  // Save and verify contents
  if (saveFields()) //Check if elements are empty		
  {
    giCurrentPage = liNewPage;
    var lsPage = giCurrentPage;
    if (lsPage < 10) 
    {
      lsPage = "0" + lsPage;
    } 

    // Set Menu
    $('#menu a').removeClass('current');
    $('#nav' + lsPage).addClass('current');
    
    // Set Buttons
    setVisible(giCurrentPage !== 1, '#btnPrevious');
    setVisible(giCurrentPage !== 10, '#btnContinue');
    
    // Load Sub Page	
    var lsUrl = "pages/page" + lsPage + ".html";
    $('#content').load(lsUrl, {}, function()
    {
      loadFields();
      $('a[rel*=facebox]').facebox();
    });
  }
  else 
  {
    showMessage(giWarning, "Please fill in all input fields");
  }
}

function decPage()
{
  setPage(giCurrentPage - 1);
}

function incPage()
{
  setPage(giCurrentPage + 1);
}