//This code required to get indexOf to work in IE - see http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:indexOf
if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

var GetStock = new function() {
  this.ajax = null;
  this.form = null;
  this.formElements = new Array();
  this.enabled = true;
  this.levelfield = null;
  this.productoptionids = null;

  this.cleanup = function() {
    var self = GetStock;
    self.form = null;
    self.arrFormElements = new Array();
  };

  this.init = function(strFormID, arrFormElements, strLevelFieldID, strProductOptionIDsID) {
    var self = GetStock;
    var strAgent = navigator.userAgent.toLowerCase();

    if (document.getElementById(strFormID)) {
     self.ajax = new Ajax();
     self.toggleEnabled(true);

     self.form = document.getElementById(strFormID);
     self.formElements = arrFormElements;
     self.levelfield = document.getElementById(strLevelFieldID);
     self.productoptionids = document.getElementById(strProductOptionIDsID);

     var arrProductOptionIDs = new Array();

     for (i=0; i<this.form.elements.length; i++) {

      //Find all form elements that are product options
      var arrMatches = this.form.elements[i].name.match(/^(ProductOption)([0-9]+)$/);
      if (arrMatches != null) {

       if (strAgent.indexOf("safari") != -1) {
        this.form.elements[i].onclick = GetStock.submitData;
       } else {
        this.form.elements[i].onchange = GetStock.submitData;
       }//if

       if (arrProductOptionIDs.indexOf(arrMatches[2]) == -1) {
        arrProductOptionIDs.push(arrMatches[2]);
       }//if
      }//if

     }//for

     strProductOptionIDs = '';
     for (i=0; i<arrProductOptionIDs.length; i++) {
      strProductOptionIDs += arrProductOptionIDs[i] + ',';
     }//for

     self.productoptionids.value = strProductOptionIDs.substring(0, strProductOptionIDs.length - 1);
     self.submitData();
    }//if
  };

  this.toggleEnabled = function(able) {
    var self = GetStock;
    if (able) {
     for (i=0; i<self.formElements.length; i++) {
      if (document.getElementById(self.formElements[i])) {
       document.getElementById(self.formElements[i]).disabled = false;
      }//if
     }//for
     self.enabled = true;
    } else {
     for (i=0; i<self.formElements.length; i++) {
      if (document.getElementById(self.formElements[i])) {
       document.getElementById(self.formElements[i]).disabled = true;
      }//if
     }//for
     self.enabled = false;
    }//if
  };

  this.submitData = function() {
    toggleSIFM();
    var self = GetStock;
    self.toggleEnabled(false);
    var postData = '';
    postData = formData2QueryString(self.form);
    //alert("post data = " + postData);
    self.ajax.doPost('ajax/get-stock.php', postData, self.handleResponse, 'xml');
  };

  this.handleResponse = function(xml) {
    var self = GetStock;
    res = XMLParse.xml2ObjArray(xml, 'stock');

    if (res.length > 0) {

     //Set the class as long as the browser recognises the class - checking necessary for Internet Exploder
     //if (self.levelfield.className) {
      //self.levelfield.className = 'stockset';
     //}//if

     //if (self.levelfield.class) {
      //self.levelfield.class = 'stockset';
     //}//if

     if (res[0].level > 0) {
      self.levelfield.innerHTML = res[0].level;
      self.toggleEnabled(true);
     } else {
      self.levelfield.innerHTML = res[0].outofstockmessage;
      self.form.onsubmit = function() {alert(res[0].outofstockmessage);return false;}
      self.toggleEnabled(false);
     }//if
    }//if
  };

};

function toggleSIFM() {
 blnDisabled = true;
 if (document.getElementById("sifmoptions")) {
  allInputs = document.getElementById('sifmoptions').getElementsByTagName("input");
  for (i = 0; i < allInputs.length; i++) {
   if (allInputs.item(i).className == 'radio') {
    if (allInputs.item(i).checked) {
     if (allInputs.item(i).value == 1) {
      blnDisabled = false;
     }//if
    }//if
   }//if
  }//for
  allTextareas = document.getElementById('sifmmessage').getElementsByTagName("textarea");
  for (i = 0; i < allTextareas.length; i++) {
   allTextareas.item(i).disabled = blnDisabled;
  }//for
 }//if
}//function

function doSIFM() {
 if (document.getElementById("sifmmessage")) {
  allTextareas = document.getElementById('sifmmessage').getElementsByTagName("textarea");
  for (i = 0; i < allTextareas.length; i++) {
   allTextareas.item(i).disabled = true;
  }//for

  //var strAgent = navigator.userAgent.toLowerCase();
  //allInputs = document.getElementById('sifmoptions').getElementsByTagName("input");
  //for (i = 0; i < allInputs.length; i++) {
  // if (allInputs.item(i).className = 'radio') {
  //  if (strAgent.indexOf("safari") != -1) {
  //   allInputs.item(i).onclick = toggleSIFM;
  //  } else {
  //   allInputs.item(i).onchange = toggleSIFM;
  //  }//if
  // }//if
  //}//for

 }//if
}//function

window.onunload = GetStock.cleanup;
window.onload = init;

function init() {
 //Set up all the form elements that we want to disable while stock is checked or when a product is out of stock
 var arrFormElements = new Array();
 doSIFM();
 GetStock.init('productform', arrFormElements, 'StockLevel', '_ProductOptionIDs');
}//function

