var current_regions = [];

function getSelectedRadioButton(group) {
  for (var i=0; i < group.length; i++) {
    if (group[i].checked) {
      return group[i];
    }
  }
  return null;
}

function getSelectedFrequencyVariant() {
  // Return the RegionCodeObject array for the selected frequency variant
  var variants = document.licensekeyform.FrequencyVariant;
  var selected = getSelectedRadioButton(variants);
  if (selected != null) {
    return {'band': selected.value,
            'region_codes': RegionCodes[selected.value]};
  }
  return null;
}

function getSelectedRegionCode() {
  var current_index = document.licensekeyform.RegionCode.selectedIndex;
  if (current_regions) {
    return current_regions[current_index];
  }
  return null;
}

function getSelectedProductVariant() {
  var group = document.licensekeyform.ProductVariant;
  var pv = getSelectedRadioButton(group);
  if (pv != null) {
    return pv.value;
  }
  return null;
}

function verify()
{
   var msg = "";
   var selected_region_code = getSelectedRegionCode();
   var form = document.licensekeyform;
   var require_region_code = (getSelectedProductVariant() != 'PTP-800');

   // Transfer the values from each of our select boxes with optional
   // 'specify other' input boxes into hidden fields.
   for (var i = 0; i < other_select_handlers.length; i++) {
     other_select_handlers[i].store_value();
   }

   // Validate the customer name field	
   if(! validateName(form.CustomerName.value))
   {
      msg += " -  Your Name is Invalid\n";
   }

   // Validate the customer email address
   if(! checkEmail(form.CustomerEmail.value))
   {
      msg += " -  The E-mail Address is Invalid\n";
   }
   else if(form.CustomerEmail.value != form.ConfirmEmail.value)
   {
      msg += " -  The E-mail Address does not match the Confirm Email address\n";
   }

   // Validate the Unit 1 MAC Address
   if(   ! checkMac(form.mmaca.value)
      || ! checkMac(form.mmacb.value)
      || ! checkMac(form.mmacc.value))
   {
      msg += " -  Unit 1 Mac is Invalid\n";
   }
   else
   {
      form.MasterMac.value = "00:04:56:" 
                           + fmtMac(form.mmaca.value) + ":"
                           + fmtMac(form.mmacb.value) + ":"
                           + fmtMac(form.mmacc.value);
   }

   // Validate the Unit 2 MAC Address
   if(! form.singleended.checked)
   {
      if(   ! checkMac(form.smaca.value)
         || ! checkMac(form.smacb.value)
         || ! checkMac(form.smacc.value))
      {
         msg += " -  Unit 2 Mac is Invalid. If you only want to request a licence key for a single end then please check the single end box.\n";
      }
      form.SlaveMac.value = "00:04:56:" 
                          + fmtMac(form.smaca.value) + ":"
                          + fmtMac(form.smacb.value) + ":"
                          + fmtMac(form.smacc.value);
      if(form.MasterMac.value == form.SlaveMac.value)
      {
         msg += " -  The Unit 1 and Unit 2 Mac address fields are identical.\n"
      }
   }
   else
   {
      form.SlaveMac.value =  "00:04:56:XX:XX:XX";
   }

   if (require_region_code && (!selected_region_code)) {
      msg += " -  You have not selected a region code";
   }
         
   // Validate the link name (if entered)
   if(   form.LinkName.value.length > 0
      && ! validateName(form.LinkName.value))
   {
      msg += " -  Link Name Invalid\n";
   }

   // Validate the access key field
   if(   form.AccessKey.value.length != 0
      && form.AccessKey.value.length != 17)
   {
      msg += " -  Invalid access key, format is AAAAA-BBBBB-CCCCC\n"
   }

   
   if (require_region_code && selected_region_code) {
     if (selected_region_code.restricted == 'disclaimer') {
       if (!validateCompany(form.CompanyName)) {
         msg += " - Company Name is not valid\n";
       }
       if (!validateAddress(form.Address)) {
         msg += " - Address is not valid\n";
       }
       if (!validateLocation(form.LinkLocation)) {
         msg += " - Link Location is not valid\n";
       }
       if (!validatePhoneNumber(form.PhoneNumber)) {
         msg += " - Phone Number is not valid\n";
       }
       restricted_locations = /^(USA|CANADA|EUROPE|AUSTRALIA)$/;
       var location = form.LinkLocation.value.toUpperCase();
       if (location.match(restricted_locations)) {
         if (!validateUsage(form.LinkUsage)) {
           msg += " - Link Usage is not valid\n";
         }
         if (!validateAccept(form.ConfirmAccept)) {
           msg += " - You have not checked the confirmation box\n";
         }
       }
     }
   }

   // Check if an error has been detected
   if (msg.length == 0)
   {
      msg = "Please check the following information:\n\n";
	   msg += "> Your Name: " + form.CustomerName.value + "\n";
	   msg += "> Your E-Mail: " + form.CustomerEmail.value + "\n";
	   msg += "> Unit 1 MAC: " + form.MasterMac.value + "\n";
      if(! form.singleended.checked)
      {
         msg += "> Unit 2 MAC: " + form.SlaveMac.value + "\n";
      }
      msg += "> Product Variant: " + getSelectedProductVariant() + "\n";
      if(require_region_code && (selected_region_code != 0))
      {
         var variant = getSelectedFrequencyVariant();
         msg += "> Frequency Variant: " + variant.band + "\n";
         msg += "> Region Code: " + selected_region_code.name + "\n";
      }
      if(form.LinkName.value.length != 0)
      {
         msg += "> Link Name: " + form.LinkName.value + "\n";
      }
      if(form.AccessKey.value.length != 0)
      {
         msg += "> Access Key ID: " + form.AccessKey.value + "\n";
      }
      
      msg += "\nWARNING - BEFORE YOU DOWNLOAD A NEW LICENCE KEY AND REGION CODE FOR THIS PRODUCT, IT IS YOUR RESPONSIBILITY TO ENSURE THAT YOU ONLY DOWNLOAD AND INSTALL THE CORRECT LICENCE KEY/REGION CODE FOR THE COUNTRY IN WHICH THE PRODUCT IS/WILL BE DEPLOYED.\nClick 'Explanation of Region Codes' for more information\n"
      
      msg += "\nIf this information is correct click OK to send, if not click Cancel";
      return confirm(msg);
   }		
   else
   {
      alert("Please complete/correct the following fields:\n" + msg);
      return false;
   }
}

function toggleSingleEnded()
{
   if(document.licensekeyform.singleended.checked == true)
   {
      document.licensekeyform.smaca.value = "";
      document.licensekeyform.smacb.value = "";
      document.licensekeyform.smacc.value = "";
      document.licensekeyform.smaca.disabled = true; 
      document.licensekeyform.smacb.disabled = true; 
      document.licensekeyform.smacc.disabled = true; 
      document.licensekeyform.mmaca.focus();
   }
   else
   {
      document.licensekeyform.smaca.disabled = false; 
      document.licensekeyform.smacb.disabled = false; 
      document.licensekeyform.smacc.disabled = false;   
      document.licensekeyform.smaca.focus();
  }
}

function RegionCodeObject(value, name, restricted)
{
   this.value = value;
   this.name  = name;
   this.restricted = restricted;
}


function checkProductVariant() {
  var group = document.licensekeyform.ProductVariant;
  var pv = getSelectedRadioButton(group);
  var rows = document.getElementById('region_code_rows');
  if ((pv != null) && (pv.value == "PTP-800")) {
    // On IE6, the region code select box doesn't disappear properly...
    window.setTimeout(function() {
      document.licensekeyform.RegionCode.style.display = 'none';
    }, 10);
    rows.style.display = 'none';
  } else {
    document.licensekeyform.RegionCode.style.display = '';
    rows.style.display = '';
  }
}

var RegionCodes = {
    "2.5 GHz": [
        {
            "name": "PTP25600", 
            "region_codes": [
                {
                    "name": "16 - FCC", 
                    "region_code": 16, 
                    "restricted": "none"
                }, 
                {
                    "name": "18 - Taiwan", 
                    "region_code": 18, 
                    "restricted": "none"
                }
            ]
        }
    ], 
    "4.5 GHz": [
        {
            "name": "PTP45600", 
            "region_codes": [
                {
                    "name": "23 - USA Federal", 
                    "region_code": 23, 
                    "restricted": "none"
                }, 
                {
                    "name": "24 - NTIA", 
                    "region_code": 24, 
                    "restricted": "none"
                }
            ]
        }
    ], 
    "4.8 GHz": [
        {
            "name": "PTP48600", 
            "region_codes": [
                {
                    "name": "14 - USA, Canada", 
                    "region_code": 14, 
                    "restricted": "none"
                }, 
                {
                    "name": "15 - USA Federal Extended", 
                    "region_code": 15, 
                    "restricted": "none"
                }, 
                {
                    "name": "23 - USA Federal", 
                    "region_code": 23, 
                    "restricted": "none"
                }, 
                {
                    "name": "24 - NTIA", 
                    "region_code": 24, 
                    "restricted": "none"
                }
            ]
        }
    ], 
    "4.9 GHz": [
        {
            "name": "PTP49400", 
            "region_codes": [
                {
                    "name": "14 - USA, Canada", 
                    "region_code": 14, 
                    "restricted": "none"
                }
            ]
        }, 
        {
            "name": "PTP49600", 
            "region_codes": [
                {
                    "name": "14 - USA, Canada", 
                    "region_code": 14, 
                    "restricted": "none"
                }, 
                {
                    "name": "18 - Hong Kong", 
                    "region_code": 18, 
                    "restricted": "none"
                }
            ]
        }
    ], 
    "5.4 GHz": [
        {
            "name": "PTP54300", 
            "region_codes": [
                {
                    "name": "7 - Full Power + Radar", 
                    "region_code": 7, 
                    "restricted": "disclaimer"
                }, 
                {
                    "name": "8 - Full Power", 
                    "region_code": 8, 
                    "restricted": "disclaimer"
                }, 
                {
                    "name": "12 - FCC", 
                    "region_code": 12, 
                    "restricted": "warning"
                }, 
                {
                    "name": "13 - Australia \/ Canada", 
                    "region_code": 13, 
                    "restricted": "none"
                }, 
                {
                    "name": "20 - Thailand", 
                    "region_code": 20, 
                    "restricted": "none"
                }, 
                {
                    "name": "26 - ETSI", 
                    "region_code": 26, 
                    "restricted": "warning"
                }
            ]
        }, 
        {
            "name": "PTP54400", 
            "region_codes": [
                {
                    "name": "7 - Full Power + Radar", 
                    "region_code": 7, 
                    "restricted": "disclaimer"
                }, 
                {
                    "name": "8 - Full Power", 
                    "region_code": 8, 
                    "restricted": "disclaimer"
                }, 
                {
                    "name": "9 - ETSI \/ FCC", 
                    "region_code": 9, 
                    "restricted": "warning"
                }, 
                {
                    "name": "10 - Australia \/ Canada", 
                    "region_code": 10, 
                    "restricted": "none"
                }, 
                {
                    "name": "20 - Thailand", 
                    "region_code": 20, 
                    "restricted": "none"
                }, 
                {
                    "name": "21 - Korea", 
                    "region_code": 21, 
                    "restricted": "none"
                }
            ]
        }, 
        {
            "name": "PTP54500", 
            "region_codes": [
                {
                    "name": "7 - Full Power + Radar", 
                    "region_code": 7, 
                    "restricted": "disclaimer"
                }, 
                {
                    "name": "8 - Full Power", 
                    "region_code": 8, 
                    "restricted": "disclaimer"
                }, 
                {
                    "name": "12 - FCC", 
                    "region_code": 12, 
                    "restricted": "warning"
                }, 
                {
                    "name": "13 - Australia \/ Canada", 
                    "region_code": 13, 
                    "restricted": "none"
                }, 
                {
                    "name": "20 - Thailand", 
                    "region_code": 20, 
                    "restricted": "none"
                }, 
                {
                    "name": "26 - ETSI", 
                    "region_code": 26, 
                    "restricted": "warning"
                }
            ]
        }, 
        {
            "name": "PTP54600", 
            "region_codes": [
                {
                    "name": "7 - Full Power + Radar", 
                    "region_code": 7, 
                    "restricted": "disclaimer"
                }, 
                {
                    "name": "8 - Full Power", 
                    "region_code": 8, 
                    "restricted": "disclaimer"
                }, 
                {
                    "name": "12 - ETSI (Before software 600-06-00) \/ FCC", 
                    "region_code": 12, 
                    "restricted": "warning"
                }, 
                {
                    "name": "13 - Australia \/ Canada", 
                    "region_code": 13, 
                    "restricted": "none"
                }, 
                {
                    "name": "20 - Thailand", 
                    "region_code": 20, 
                    "restricted": "none"
                }, 
                {
                    "name": "21 - Korea", 
                    "region_code": 21, 
                    "restricted": "none"
                }, 
                {
                    "name": "26 - ETSI", 
                    "region_code": 26, 
                    "restricted": "warning"
                }
            ]
        }
    ], 
    "5.8 GHz": [
        {
            "name": "PTP58300", 
            "region_codes": [
                {
                    "name": "1 - FCC USA, Canada, Taiwan, Brazil", 
                    "region_code": 1, 
                    "restricted": "none"
                }, 
                {
                    "name": "2 - China", 
                    "region_code": 2, 
                    "restricted": "none"
                }, 
                {
                    "name": "3 - Australia, Hong Kong", 
                    "region_code": 3, 
                    "restricted": "none"
                }, 
                {
                    "name": "4 - UK", 
                    "region_code": 4, 
                    "restricted": "none"
                }, 
                {
                    "name": "5 - Singapore", 
                    "region_code": 5, 
                    "restricted": "none"
                }, 
                {
                    "name": "6 - Eire", 
                    "region_code": 6, 
                    "restricted": "none"
                }, 
                {
                    "name": "7 - Full Power + Radar + RTTT \/ Norway", 
                    "region_code": 7, 
                    "restricted": "none"
                }, 
                {
                    "name": "8 - Full Power", 
                    "region_code": 8, 
                    "restricted": "none"
                }, 
                {
                    "name": "19 - India", 
                    "region_code": 19, 
                    "restricted": "none"
                }, 
                {
                    "name": "20 - Thailand", 
                    "region_code": 20, 
                    "restricted": "none"
                }, 
                {
                    "name": "22 - Germany", 
                    "region_code": 22, 
                    "restricted": "none"
                }, 
                {
                    "name": "24 - Bahrain", 
                    "region_code": 24, 
                    "restricted": "none"
                }, 
                {
                    "name": "25 - ETSI", 
                    "region_code": 25, 
                    "restricted": "none"
                }, 
                {
                    "name": "27 - Denmark", 
                    "region_code": 27, 
                    "restricted": "none"
                }
            ]
        }, 
        {
            "name": "PTP58400", 
            "region_codes": [
                {
                    "name": "1 - FCC USA, Canada, Taiwan, Brazil", 
                    "region_code": 1, 
                    "restricted": "none"
                }, 
                {
                    "name": "2 - China", 
                    "region_code": 2, 
                    "restricted": "none"
                }, 
                {
                    "name": "3 - Australia, Hong Kong", 
                    "region_code": 3, 
                    "restricted": "none"
                }, 
                {
                    "name": "4 - UK", 
                    "region_code": 4, 
                    "restricted": "none"
                }, 
                {
                    "name": "5 - Singapore", 
                    "region_code": 5, 
                    "restricted": "none"
                }, 
                {
                    "name": "6 - Eire", 
                    "region_code": 6, 
                    "restricted": "none"
                }, 
                {
                    "name": "7 - Full Power + Radar + RTTT \/ Norway", 
                    "region_code": 7, 
                    "restricted": "none"
                }, 
                {
                    "name": "8 - Full Power", 
                    "region_code": 8, 
                    "restricted": "none"
                }, 
                {
                    "name": "11 - Korea", 
                    "region_code": 11, 
                    "restricted": "none"
                }, 
                {
                    "name": "20 - Thailand", 
                    "region_code": 20, 
                    "restricted": "none"
                }
            ]
        }, 
        {
            "name": "PTP58500", 
            "region_codes": [
                {
                    "name": "1 - FCC USA, Canada, Taiwan, Brazil", 
                    "region_code": 1, 
                    "restricted": "none"
                }, 
                {
                    "name": "2 - China", 
                    "region_code": 2, 
                    "restricted": "none"
                }, 
                {
                    "name": "3 - Australia, Hong Kong", 
                    "region_code": 3, 
                    "restricted": "none"
                }, 
                {
                    "name": "4 - UK", 
                    "region_code": 4, 
                    "restricted": "none"
                }, 
                {
                    "name": "5 - Singapore", 
                    "region_code": 5, 
                    "restricted": "none"
                }, 
                {
                    "name": "6 - Eire", 
                    "region_code": 6, 
                    "restricted": "none"
                }, 
                {
                    "name": "7 - Full Power + Radar + RTTT \/ Norway", 
                    "region_code": 7, 
                    "restricted": "none"
                }, 
                {
                    "name": "8 - Full Power", 
                    "region_code": 8, 
                    "restricted": "none"
                }, 
                {
                    "name": "19 - India", 
                    "region_code": 19, 
                    "restricted": "none"
                }, 
                {
                    "name": "20 - Thailand", 
                    "region_code": 20, 
                    "restricted": "none"
                }, 
                {
                    "name": "22 - Germany", 
                    "region_code": 22, 
                    "restricted": "none"
                }, 
                {
                    "name": "24 - Bahrain", 
                    "region_code": 24, 
                    "restricted": "none"
                }, 
                {
                    "name": "25 - ETSI", 
                    "region_code": 25, 
                    "restricted": "none"
                }, 
                {
                    "name": "27 - Denmark", 
                    "region_code": 27, 
                    "restricted": "none"
                }
            ]
        }, 
        {
            "name": "PTP58600", 
            "region_codes": [
                {
                    "name": "1 - FCC USA, Canada, Taiwan, Brazil", 
                    "region_code": 1, 
                    "restricted": "none"
                }, 
                {
                    "name": "2 - China", 
                    "region_code": 2, 
                    "restricted": "none"
                }, 
                {
                    "name": "3 - Australia, Hong Kong", 
                    "region_code": 3, 
                    "restricted": "none"
                }, 
                {
                    "name": "4 - UK (Reduced power before software 600-06-00)", 
                    "region_code": 4, 
                    "restricted": "none"
                }, 
                {
                    "name": "5 - Singapore", 
                    "region_code": 5, 
                    "restricted": "none"
                }, 
                {
                    "name": "6 - Eire", 
                    "region_code": 6, 
                    "restricted": "none"
                }, 
                {
                    "name": "7 - Norway", 
                    "region_code": 7, 
                    "restricted": "none"
                }, 
                {
                    "name": "8 - Full Power", 
                    "region_code": 8, 
                    "restricted": "none"
                }, 
                {
                    "name": "11 - Korea", 
                    "region_code": 11, 
                    "restricted": "none"
                }, 
                {
                    "name": "19 - India", 
                    "region_code": 19, 
                    "restricted": "none"
                }, 
                {
                    "name": "20 - Thailand", 
                    "region_code": 20, 
                    "restricted": "none"
                }, 
                {
                    "name": "22 - Germany", 
                    "region_code": 22, 
                    "restricted": "none"
                }, 
                {
                    "name": "24 - Bahrain", 
                    "region_code": 24, 
                    "restricted": "none"
                }, 
                {
                    "name": "25 - ETSI", 
                    "region_code": 25, 
                    "restricted": "none"
                }, 
                {
                    "name": "27 - Denmark", 
                    "region_code": 27, 
                    "restricted": "none"
                }
            ]
        }
    ], 
    "5.9 GHz": [
        {
            "name": "PTP59600", 
            "region_codes": [
                {
                    "name": "15 - Full Power", 
                    "region_code": 15, 
                    "restricted": "none"
                }, 
                {
                    "name": "16 - Russia", 
                    "region_code": 16, 
                    "restricted": "none"
                }, 
                {
                    "name": "19 - India", 
                    "region_code": 19, 
                    "restricted": "none"
                }
            ]
        }
    ]
};

var other_select_handlers;

function object_keys(obj) {
   var result = [];
   for (var name in obj) {
      if (obj.hasOwnProperty(name)) {
         result.push(name);
      }
   }
   return result;
}

function create_option(text, value, classname) {
   var newOpt   = document.createElement('option');
   newOpt.text  = text;
   //newOpt.innerHTML = text;
   newOpt.value = value;
   if (classname) {
      newOpt.className = classname;
   }
   return newOpt;
}
        
function setFrequencyVariant(optionsArray)
{
   function add_option(option) {
       try
       {
         document.licensekeyform.RegionCode.add(option, null);
       }
       catch(ex)
       {
         document.licensekeyform.RegionCode.add(option);
       }
   }
   // Clear any old entries
   document.licensekeyform.RegionCode.innerHTML = "";
   current_regions = [];

   add_option(create_option('Please select a region code...', 0));
   current_regions.push(undefined);
         
   // Now create the new entries. optionsArray is actually a list of
   // product objects, each of which has a 'name' and a 'region_codes'
   // property.
   for (var ii = 0; ii < optionsArray.length; ii++) {
     var product = optionsArray[ii];
     var region_codes = product.region_codes;
     var group = document.createElement('optgroup')
     group.label = product.name;
     document.licensekeyform.RegionCode.appendChild(group);
     for(var jj = 0; jj < region_codes.length; jj++)
     {
       current_regions.push(region_codes[jj]);
       var name = region_codes[jj].name;
       var newOpt = create_option(
            name,
            region_codes[jj].region_code + 1,
            region_codes[jj].restricted == 'none' ? undefined : 'restricted_option'
       );
       group.appendChild(newOpt);
       // For some reason, IE 7 loses the label assigned to the option unless
       // we assign it twice...
       newOpt.text = 'dummy';
       newOpt.text = name;
     }
   }
   // If there are only two options, select the second one (since the first
   // one is just the note asking you to select a region code). Otherwise,
   // select the note.
   if (document.licensekeyform.RegionCode.length == 2) {
     document.licensekeyform.RegionCode.selectedIndex = 1;
   } else {
     document.licensekeyform.RegionCode.selectedIndex = 0;
   }
   onRegionCodeChanged();
}

function populateRegionCodes() {
  // Pre-fill the region code box based on the selected band
  setFrequencyVariant(getSelectedFrequencyVariant().region_codes);
}

function onRegionCodeChanged() {
  var region_code = getSelectedRegionCode();

  var boxes = [['region_disclaimer_box', 'disclaimer'],
               ['region_warning_box', 'warning']];
               
  for (var i = 0; i < boxes.length; i++) {
    var box = document.getElementById(boxes[i][0]);
    if (box) {
      if (region_code && (region_code.restricted === boxes[i][1])) {
        box.className = 'restricted_region_warning';
      } else {
        box.className = 'invisible';
      }
    }
  }

  var box = document.getElementById('extra_details_box');
  if (box) {
    if (region_code && (region_code.restricted != 'none')) {
      box.className = 'restricted_region_warning';
    } else {
      box.className = 'invisible';
    }
  }
}

function checkMac(hexvalue)
{
   var filter  = /^([a-fA-F0-9])+$/;
   if(! filter.test(hexvalue) || hexvalue == "")
   {
      return false;
   }
   return true;
}

function fmtMac(hex)
{
   if(hex.length == 1)
   {
      return "0" + hex;
   }
   return hex
}

function checkEmail(emailaddress)
{
   var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
   if(! filter.test(emailaddress) || emailaddress.length == 0)
   {
      return false;
   }
   return true;
}

function validateName(name)
{
	var filter  = /^([a-zA-Z0-9_\s\-])+$/;
	if(! filter.test(name) || name.length == 0)
	{
	   return false;
	}
	return true;
}


function validateCompany(name_element)
{
  /* At least 3 chars... */
  return name_element.value.match(/[a-zA-Z0-9]{3}/);
}

function validateAddress(address_element)
{
  return address_element.value.match(/[a-zA-Z0-9]{3}/);
}

function validateAccept(accept_element)
{
  return accept_element.checked;
}

function validateLocation(location_element)
{
  return location_element.value.match(/[a-zA-Z0-9]{2}/);
}

function validateUsage(usage_element)
{
  return usage_element.value.match(/[a-zA-Z0-9]{2}/);
}

function validatePhoneNumber(phone_element)
{
  return phone_element.value.match(/[0-9]{3}/);
}

function OtherSelectHandler(id_prefix, chain_on_change) {
  this.id_prefix = id_prefix;
  this.chain_on_change = chain_on_change;
  this.select = document.getElementById(id_prefix + 'Select');
  this.text = document.getElementById(id_prefix + 'Text');
  this.hidden = document.getElementById(id_prefix + 'Hidden');
  var self = this;
  this.select.onchange = function () {
    self.on_select_change.apply(self, arguments);
  }
}

OtherSelectHandler.prototype.on_select_change = function() {
  //alert('this = ' + this.toString() +', arguments = ' + arguments.toString());
  if (this.select[this.select.selectedIndex].value == 'Other') {
    this.text.className = '';
  } else {
    this.text.className = 'invisible';
  }
  if (this.chain_on_change) {
    this.chain_on_change.call(null, this.select, this.text);
  }
}

OtherSelectHandler.prototype.store_value = function() {
  var value = this.select[this.select.selectedIndex].value;
  if (value == 'Other') {
    value = this.text.value;
  }
  this.hidden.value = value;
}

function check_link_usage(select, text) {
  var usage_box = document.getElementById('LinkUsageBox');
  var usage_select = document.getElementById('LinkUsageSelect');
  if (usage_box) {
    var invisible = usage_box.className == 'invisible';
    if (select[select.selectedIndex].value == 'Other') {
      if (!invisible) {
        usage_box.className = 'invisible';
        usage_select[usage_select.length-1].selected = true;
      }
    } else {
      if (invisible) {
        usage_box.className = '';
        usage_select[0].selected = true;
      }
    }
    usage_select.onchange()
  }
}

function initialise() {
  other_select_handlers = [
    new OtherSelectHandler('LinkLocation', check_link_usage),
    new OtherSelectHandler('LinkUsage')
  ];
  // Make sure that everything is in the right state to begin with...
  populateRegionCodes();
  checkProductVariant();
  for (var i = 0; i < other_select_handlers.length; i++) {
    other_select_handlers[i].on_select_change();
  }
}
