﻿/* Left Panel Buttons */

function changeButtonImage(s_ButtonID, s_ImageURL)
{
	var btn = document.getElementById(s_ButtonID);
	btn.src = location.protocol + '//' + document.domain + ":" + location.port + s_ImageURL;
}


/* Register form */

function SetSubmitButton(s_btnButton, s_cbSeller, s_cbBuyer, s_cbUser)
{
  var btnButton = document.getElementById(s_btnButton);
  var cbSeller = document.getElementById(s_cbSeller);
  var cbBuyer = document.getElementById(s_cbBuyer);
  var cbUser = document.getElementById(s_cbUser);
  
  btnButton.disabled = !cbUser.checked || (!cbSeller.checked && !cbBuyer.checked);
}

/* Modify User Details form */

function SetUpdateButton(s_btnButton, s_cbSeller, s_cbBuyer)
{
  var btnButton = document.getElementById(s_btnButton);
  var cbSeller = document.getElementById(s_cbSeller);
  var cbBuyer = document.getElementById(s_cbBuyer);
  
  btnButton.disabled = (!cbSeller.checked && !cbBuyer.checked);
}

/* Toggles the visibility and functionalities of the RINStar label, textbox, and validator according to the check state */
function ToggleRINStarControls(s_Row, s_cbSeller, s_Validator)
{
  var row = document.getElementById(s_Row);
  var cbSeller = document.getElementById(s_cbSeller);
  var validator = document.getElementById(s_Validator);
  
  if(cbSeller.checked)
  {
    row.style.display = '';
    SetValidator(s_Validator, true);
  }
  else
  {
    row.style.display = 'none';
    SetValidator(s_Validator, false);
  }
}

function ToggleControl(s_Control, s_cb)//, s_Validator)
{
  var control = document.getElementById(s_Control);
  var cb = document.getElementById(s_cb);
  //var validator = document.getElementById(s_Validator);
  
  if(cb.checked)
  {
    control.style.display = '';
    //SetValidator(s_Validator, true);
  }
  else
  {
    control.style.display = 'none';
    //SetValidator(s_Validator, false);
  }
}

/* General functions */

function SetValidator(s_Validator, bEnabled)
{
  for(var i = 0; i < Page_Validators.length; i++)
  {
    if(Page_Validators[i].id == s_Validator)
    {
	  Page_Validators[i].enabled = bEnabled;
      Page_Validators[i].style.display = bEnabled ? 'inline' : 'none';
      
      break;
    }
  }
}

/* Function for setting the default button to be clicked when pressing the "enter" button on a textbox */
function fnTrapKD(btn, event){
 if (document.all){
  if (event.keyCode == 13){
   event.returnValue=false;
   event.cancel = true;
   btn.click();
  }
 }
 else if (document.getElementById){
  if (event.which == 13){
   event.returnValue=false;
   event.cancel = true;
   btn.click();
  }
 }
 else if(document.layers){
  if(event.which == 13){
   event.returnValue=false;
   event.cancel = true;
   btn.click();
  }
 }
}

/* FAQ functions */
function ToggleRow(s_Row)
{
  var row = document.getElementById(s_Row);
  
  if(row == null)
  {
    return;
  }
  
  if(row.style.display == '')
  {
    row.style.display = 'none';
  }
  else
  {
    row.style.display = '';
  }
}

function HideRow(s_Row)
{
  var row = document.getElementById(s_Row);
  
  if(row == null)
  {
    return;
  }
  
  row.style.display = 'none';
}

/* Approve New Users */

// Set the value of the hiddenfield to the password entered
function SetHiddenField(s_HiddenField, s_tbPassword)
{
  var hf = document.getElementById(s_HiddenField);
  var tbPassword = document.getElementById(s_tbPassword);
  
  hf.value = tbPassword.value;
}

// 
//function EnableValidator(s_ValidatorID)
//{
//  for(var i = 0; i < Page_Validators.length; i++)
//  {
//    var bValidatorFound = Page_Validators[i].id == s_ValidatorID;
//    
//    Page_Validators[i].enabled = bValidatorFound;
//    Page_Validators[i].style.display = bValidatorFound ? 'inline' : 'none';    
//  }  
//}

function LoadCompanyInfo(s_DDL, s_lblName, s_lblAddress, s_lblCity, s_lblState, s_lblZipcode)
{
  var ddl = document.getElementById(s_DDL);
  var lblName = document.getElementById(s_lblName);
  var lblAddress = document.getElementById(s_lblAddress);
  var lblCity = document.getElementById(s_lblCity);
  var lblState = document.getElementById(s_lblState);
  var lblZipcode = document.getElementById(s_lblZipcode);
  
  var iSelectIndex = ddl.selectedIndex;
  
  lblName.innerHTML = facs[iSelectIndex][0];
  lblAddress.innerHTML = facs[iSelectIndex][1];
  lblCity.innerHTML = facs[iSelectIndex][2];
  lblState.innerHTML = facs[iSelectIndex][3];
  lblZipcode.innerHTML = facs[iSelectIndex][4];
}

// function for moving the selected items in listbox1 to listbox 2
function MoveSelectItem(s_lb1, s_lb2)
{
  var lb1 = document.getElementById(s_lb1);
  var lb2 = document.getElementById(s_lb2);
  
  for (var i = lb1.options.length-1; i >= 0; i--)
  {
    if(lb1.options[i].selected)
    {
      var item = document.createElement('option');

      item.value = lb1.options[i].value;
      item.text = lb1.options[i].value;
  
      try
      {
        lb2.options.add(item, null);// Standard
      }
      catch(ex)
      {
        lb2.options.add(item);// IE
      }
  
      lb1.options.remove(i);
    }
  }
}

// Toggle the div depending on the checkbox state
function ToggleDiv(s_Div, s_Checkbox)
{
  var div = document.getElementById(s_Div);
  var cb = document.getElementById(s_Checkbox);
  
  if(cb.checked)
  {
    div.style.display = '';
  }
  else
  {
    div.style.display = 'none';
  }
}


// Binary Search
/*
array : vectorarray that will be looked up 
value : valueobject that will be searched 
i : insert if true, the function will return the index where the value should be inserted to keep the array ordered, 
    otherwise returns the index where the value was found or -1 if it wasn't found 
*/
function binarysearch(array, value, i)
{
  var h = array.length, l = -1, m;
  while(h - l > 1)
  {
    if(array[m = h + l >> 1] < value)
    {
      l = m;
    }
    else
    {
      h = m;
    }
  }
  
  var retVal;
  
  if(array[h] != value)
  {
    if(i)
    {
      retVal = h;
    }
    else
    {
      retVal = -1;
    }
  }
  else
  {
    retVal = h;
  }
  
  return retVal;
}


function HandleCheckBoxClick(s_checkbox, s_label, s_Textbox, s_Validator)
{
  var checkbox = document.getElementById(s_checkbox);
  var label = document.getElementById(s_label);
  var textbox = document.getElementById(s_Textbox);
  var item = label.innerHTML;
  var validator = document.getElementById(s_Validator);
  
  if(item == null)
  {
    return;
  }
  
  if(checkbox.checked)
  {    
    var bFound = binarysearch(epacompanies, item, false) >= 0;
  
    var iIndex;
    
    if(!bFound)
    {
      // Add to the array
      iIndex = binarysearch(epacompanies, item, true);
    
      epacompanies.splice(iIndex, 0, item);
    }
    
    if(textbox.value == "")
    {
      maxContractVolume[item] = "0";
    }
    else
    {
	  maxContractVolume[item] = textbox.value;
    }
    
    
//    validator.enabled = true;
//    validator.style.display = 'inline';
  }
  else
  {
    // Remove from the array
    var bFound = binarysearch(epacompanies, item, false) >= 0;
  
    if(bFound)
    {
      var iIndex = binarysearch(epacompanies, item, true);
    
      epacompanies.splice(iIndex, 1);
    }
    
//    validator.enabled = false;
//    validator.style.display = 'none';
  }
}

function HandleVolumeChangeScript(s_CheckBox, s_Label, s_Textbox, s_Validator)
{
  var checkbox = document.getElementById(s_CheckBox);
  var label = document.getElementById(s_Label);
  var textbox = document.getElementById(s_Textbox);
  var item = label.innerHTML;
  var validator = document.getElementById(s_Validator);
  
  if(item == null)
  {
    return;
  }

  if(checkbox.checked)
  {
    // Add to the array
    var bFound = binarysearch(epacompanies, item, false) >= 0;
  
    if(bFound)
    {
      var iIndex = binarysearch(epacompanies, item, true);
    
      if(textbox.value == "")
      {
        maxContractVolume[item] = "0";
      }
      else
      {
        maxContractVolume[item] = textbox.value;
      }
    }
    
//    validator.enabled = true;
//    validator.style.display = 'inline';
  }
  else
  {
//    validator.enabled = false;
//    validator.style.display = 'none';
  }
}

function SaveSellerRestrictions(s_hf)
{
  var hf = document.getElementById(s_hf);
  
  var sString = "";
  
  for(var i = 0; i < epacompanies.length; i++)
  {
    sString = sString + " " + epacompanies[i];
  }
  
  hf.value = sString.substring(1);
}

function SaveMaxContractVolume(s_hf)
{
  var hf = document.getElementById(s_hf);
  
  var sString = "";
  
  for(var i = 0; i < epacompanies.length; i++)
  {
    sString = sString + " " + maxContractVolume[epacompanies[i]];
  }
  
  hf.value = sString.substring(1);
}


function SelectAll()
{
  for(var i = 0; i < chkbox.length; i++)
  {
    var CheckBox = document.getElementById(chkbox[i]);
    var TextBox = document.getElementById(txtbox[i]);
    var RFV = document.getElementById(rfvs[i]);
    var Label = document.getElementById(labels[i]);
    
    if(TextBox.value == '')
    {
      TextBox.value = '';
      HandleVolumeChangeScript(chkbox[i], labels[i], txtbox[i], rfvs[i]);
    }
    
    CheckBox.checked = true;
    //RFV.enabled = true;
    //RFV.style.display = 'inline';
    
    HandleCheckBoxClick(chkbox[i], labels[i], txtbox[i], rfvs[i]);
  }
}

function SelectNone()
{
  for(var i = 0; i < chkbox.length; i++)
  {
    var CheckBox = document.getElementById(chkbox[i]);
    var TextBox = document.getElementById(txtbox[i]);
    var RFV = document.getElementById(rfvs[i]);
    var Label = document.getElementById(labels[i]);
    
    TextBox.value = '';
    CheckBox.checked = false;
    //RFV.enabled = false;
    //RFV.style.display = 'none';
    
    HandleCheckBoxClick(chkbox[i], labels[i], txtbox[i], rfvs[i]);
  }
}



/* Match Orders */

// Add a buy reference number to the textbox
function AddBuy(s_ReferenceNumber, s_TextBox)
{
  var tb = document.getElementById(s_TextBox);
  
  if(tb.value.replace(/^\s+|\s+$/, '') == '')
  {
    tb.value = s_ReferenceNumber + ",";
  }
  else
  {
    tb.value = tb.value + "\r\n" + s_ReferenceNumber + ",";
  }
}

// Add a sell reference number to the textbox
function AddSell(s_ReferenceNumber, s_TextBox)
{
  var tb = document.getElementById(s_TextBox);
  
  tb.value = tb.value + s_ReferenceNumber + ",";

  if (tb.createTextRange) {
    var range = tb.createTextRange();
    range.collapse(false);
    range.select();
  }
  else if (tb.setSelectionRange) {
    tb.focus();
    var length = tb.value.length;
    tb.setSelectionRange(length, length);
  }
  //tb.focus();
}

// Enable a required field validator of a specific option is selected
function HandleDDLChange(s_ddl, s_Value, s_RFV)
{
  var ddl = document.getElementById(s_ddl);
  var rfv = document.getElementById(s_RFV);
  
  var bOtherSelected = ddl.options[ddl.selectedIndex].text.toUpperCase() == s_Value.toUpperCase();
  
  rfv.enabled = bOtherSelected;
  rfv.style.display = bOtherSelected ? 'inline' : 'none';
}


/* Order Entry Script */
function ResetOrderEntryTicket(s_tbSize, s_ddlExecInstruction, s_RFV, s_ddlVintage, s_tbPrice, s_ddlTIF)
{
  var tbSize = document.getElementById(s_tbSize);
  var ddlExecInstruction = document.getElementById(s_ddlExecInstruction);
  var RFV = document.getElementById(s_RFV);
  var ddlVintage = document.getElementById(s_ddlVintage);
  var tbPrice = document.getElementById(s_tbPrice);
  var ddlTIF = document.getElementById(s_ddlTIF);
  
  tbSize.value = '';
  ddlExecInstruction.selectedIndex = 0;
  RFV.enabled = false;
  RFV.style.display = 'none';
  ddlVintage.selectedIndex = 0;
  tbPrice.value = '';
  if(!ddlTIF.disabled)
  {
    ddlTIF.selectedIndex = 0;
  }
}

function SetBackgroundColour(s_Table, s_Colour)
{
  var table = document.getElementById(s_Table);
  
  table.style.backgroundColor = s_Colour;
}