 // the FireBug extension for Firefox offers a bonafide JavaScript error console
// to prevent errors in browsers without it, create a dummy console object
// with the required methods
try {
      console.log('Starting ' + window.location);
} catch (err) {
    var console = new Object;
    console.log = function() { return true };
    console.debug = function() { return true; }; 
    console.info = function() { return true; };
    console.warn = function() { return true; }; 
    console.error = function() { return true; };
    console.assert = function() { return true; };
    console.assertEquals = function() { return true; };
    console.assertNotEquals = function() { return true; };
    console.assertGreater = function() { return true; };
    console.assertNotGreater = function() { return true; };
    console.assertLess = function() { return true; };
    console.assertNotLess = function() { return true; };
    console.assertContains = function() { return true; };
    console.assertNotContains = function() { return true; };
    console.assertTrue = function() { return true; };
    console.assertFalse = function() { return true; };
    console.assertNull = function() { return true; };
    console.assertNotNull = function() { return true; };
    console.assertUndefined = function() { return true; };
    console.assertNotUndefined = function() { return true; };
    console.assertInstanceOf = function() { return true; };
    console.assertNotInstanceOf = function() { return true; };
    console.assertTypeOf = function() { return true; };
    console.assertNotTypeOf = function() { return true; };
    console.trace = function() { return true; }; 
    console.time = function() { return true; };
    console.timeEnd = function() { return true; }; 
    console.count = function() { return true; };
};




/****************************************************************************

  functions for the menu in the left column

****************************************************************************/
var refinementMenu = new Object();
// open the ul below this h3
refinementMenu['openMenuBelow'] = function(eventObject) {
    // look for the first ul above the current node and then go through each
    // li and attempt to assign a class menuitem_inactive to it.
    // only works (for now) if the H3 is underneath an LI
    var parentObject = this.parentNode;
    if(parentObject.tagName != 'LI') {
        return true;
    };
    if(! parentObject.className) {
      return true;
    };
    // don't do anything for selected refinements
    if(parentObject.className.match(/menuitem_chosen/)) {
      return true;
    }
    var ulObject = new Object;
    // the counter is a safety measure
    var counter =0;
    var currentTopObject = parentObject;
    while(! ulObject.tagName) {
        counter++;
        currentTopObject = currentTopObject.parentNode;
        if(currentTopObject.tagName == 'UL') {
            ulObject = currentTopObject;
        };        
        if(counter > 100){
            break;
        }
    }
    if(! ulObject.tagName) {
        return true;
    }
    // for the last item, the background for the containing div needs to be changed
    var divObject = new Object;
    currentTopObject = ulObject;
    counter = 0;
    while(! divObject.tagName) {
        counter++;
        currentTopObject = currentTopObject.parentNode;
        if(currentTopObject.tagName == 'DIV') {
            divObject = currentTopObject;
        }
        if(counter > 100)  {
            break;
        }
        
    };
    
    if(! divObject.tagName) {
        return true;
    }
    var imageSrcClose = GLOBAL_STOREIMAGEPATH + '/Images/Buttons/leftmenu_close.gif';
    var imageSrcCloseIE = 'http://' + location.host + GLOBAL_STOREIMAGEPATH + '/Images/Buttons/leftmenu_close.gif';
    var imageSrcOpen = GLOBAL_STOREIMAGEPATH + '/Images/Buttons/leftmenu_open.gif';
    var imageSrcOpenIE = 'http://' + location.host +  GLOBAL_STOREIMAGEPATH + '/Images/Buttons/leftmenu_open.gif';
    
    
    // now set all menu items inactive except for the one that is our parent node
    var topLevelItems = ulObject.childNodes;
    for(var i = 0; i < topLevelItems.length ;i++) {
        if(topLevelItems[i].tagName) {
            if(! topLevelItems[i].className.match(/menuitem_chosen/)) {
              topLevelItems[i].className = topLevelItems[i].className.replace(/menuitem_active/, 'menuitem_inactive');
              // there's an image inside the h3 that needs to be changed according to open / closed
              // status
              for(var j = 0; j < topLevelItems[i].childNodes.length; j++) {
                var childObject = topLevelItems[i].childNodes[j];
                if(childObject.tagName) {
                  if(childObject.tagName == 'H3') {
                    for(var k = 0; k < childObject.childNodes.length ; k++) {
                      var h3Child = childObject.childNodes[k];
                      if(h3Child.tagName && (h3Child.tagName == 'IMG')) {
                        var origSrc = h3Child.getAttribute('src');
                        if((origSrc == imageSrcClose) || (origSrc == imageSrcCloseIE)) {
                          h3Child.setAttribute('src', imageSrcOpen);
                        }
                      }
                    }
                  }
                }
              }
              
              // special: the last item 
              if(topLevelItems[i].className.match(/menuitem_last/)) {
                  divObject.className = divObject.className.replace(/blockmenu_bottom_open/, 'blockmenu_bottom_closed')
              };
            };
        };
    };
    parentObject.className = parentObject.className.replace(/menuitem_inactive/, 'menuitem_active');
    // set the image inside the h3 to close
    for(var j = 0; j < parentObject.childNodes.length; j++) {
      var childObject = parentObject.childNodes[j];
      if(childObject.tagName) {
        if(childObject.tagName == 'H3') {
          for(var k = 0; k < childObject.childNodes.length ; k++) {
            var h3Child = childObject.childNodes[k];
            if(h3Child.tagName && (h3Child.tagName == 'IMG')) {
              var origSrc = h3Child.getAttribute('src');
              if((origSrc == imageSrcOpen) || (origSrc == imageSrcOpenIE)) {
                h3Child.setAttribute('src', imageSrcClose);
              }
            }
          }
        }
      }
    }
    if(parentObject.className.match(/menuitem_last/)) {
        divObject.className = divObject.className.replace(/blockmenu_bottom_closed/, 'blockmenu_bottom_open')
    }
    
}
// only the first 10 items are shown by default. show the remaining items
// if an a with non-existent class showRemainingItems is clicked
refinementMenu['showRemainingItems'] = function(eventObject) {
  if(! this.className) {
    return true;
  };
  if(! this.className.match(/showRemainingItems/)) {
    return true;
  }
  var listObject = new Object;
  var safetyCounter = 0;
  var parentObject = this.parentNode;

  while(! listObject.tagName) {
    if((parentObject.tagName) && ( parentObject.tagName == 'UL')) {
      listObject = parentObject;
    } else {
      parentObject = parentObject.parentNode;
    }
    if(safetyCounter > 10) {
      break;
    };
    safetyCounter++;
  }
  if(! listObject.tagName) {
    return true;
  };

  
  window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
  
  for(var i = 0; i < listObject.childNodes.length ; i++) {
    var childObject = listObject.childNodes[i];
    if(childObject.className) {
      if(childObject.className.match(/hidden/)) {
        childObject.className = childObject.className.replace(/hidden/, 'displayed');
      } else {
        if(childObject.className.match(/displayed/)) {
          childObject.className = childObject.className.replace(/displayed/, 'hidden');
        };
      };
    };
  };
  return true;
  
}

tagListeners.addListenerForTag('h3', 'onclick', refinementMenu['openMenuBelow']);
tagListeners.addListenerForTag('a', 'onclick', refinementMenu['showRemainingItems']);


/****************************************************************************


  functions for the menu in the left column end


****************************************************************************/




// special function that makes it look as if a text input turns into a password
// input onclick (which can't actually be done in IE)
function TurnPasswordFakeInputToInput(eventObject) {
    if(! this.id) {
        return true;
    };
    if(this.id != 'password_dummy') {
        return true;
    };
    var fakeInput = this;
    
    var loginForm = document.forms['loginform_top'];
    if(! loginForm) {
      return true;
    }
    var realInput = loginForm['CustPwd'];
    fakeInput.style.display = 'none';
    realInput.removeAttribute('style');
    realInput.className = 'login_input';

    realInput.focus();
}
tagListeners.addListenerForTag('span', 'onclick', TurnPasswordFakeInputToInput);


/*************************************************

 Show labels for bottles that have them

*************************************************/
// the open function
function ShowLabelInList(eventObject) {
  var productNo = this.id;
  if(! productNo) {
    return true;
  };
  productNo = productNo.replace(/^showlabel_for_/, '');
  var parentObject = this.parentNode;
  var closeLink = document.getElementById('hidelabel_for_' + productNo);
  if(! closeLink) {
    return true;
  };
  var labelObject = document.getElementById('label_for_' + productNo);
  if(! labelObject) {
    return true;
  }
  
  window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
  var objectToInsertBefore = labelObject.childNodes[0]
  
  var imageObject = document.createElement('IMG');
  imageObject.setAttribute('src', GLOBAL_STOREIMAGEPATH + '/Images/Etiket/' + productNo + '.gif');
  if(objectToInsertBefore) {
    labelObject.insertBefore(imageObject, objectToInsertBefore);
  } else {
    labelObject.appendChild(imageObject);
  };
  this.style.display = 'none';
  closeLink.style.display = 'block';
  labelObject.style.display = 'block';
  return true;
}

// the close function
function CloseLabelInList(eventObject) {
  if(! this.id) {
    return true;
  }
  if((! this.id.match(/^hidelabel_for_/)) && (! this.id.match(/^label_closebutton_for_/))) {
    return true;
  }
  var productNo = '';
  var matches = this.id.match(/^label_closebutton_for_(.+?)$/);
  if(matches) {
    productNo = matches[1];
  };
  matches = this.id.match(/^hidelabel_for_(.+?)$/);
  if(matches) {
    productNo = matches[1];
  };
  if(! productNo) {
    return true;
  };
  var parentObject = document.getElementById('label_for_' + productNo);
  if(! parentObject) {
    return true;
  };
  window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
  // remove the image from the div object on div close as the easiest
  // method to avoid continuously adding the same image on repeated
  // openings
  var imageObject = new Object;
  for(var i = 0; i < parentObject.childNodes.length ; i++) {
    var childObject = parentObject.childNodes[i];
    if(childObject.tagName == 'IMG') {
      var src = childObject.getAttribute('src');
      if(src.match(/\/Images\/Etiket\/.+?\.gif$/)) {
        imageObject = childObject;
        break;
      };
    };
  };
  if(! imageObject['src']) {
    return true;
  };
  parentObject.removeChild(imageObject);
  parentObject.style.display = 'none';
  
  var openLink = document.getElementById('showlabel_for_' + productNo);
  var closeLink = document.getElementById('hidelabel_for_' + productNo);
  
  if(openLink) {
    openLink.style.display = 'block';
  };
  if(closeLink) {
    closeLink.style.display = 'none';
  };
  return true;
}
tagListeners.addListenerForTag('a', 'onclick', ShowLabelInList);
tagListeners.addListenerForTag('a', 'onclick', CloseLabelInList);



/****************************************************************************

Registration / Login form
 
****************************************************************************/
function submitMinimalRegistrationForm(eventObject) {
    if(! this.name) {
        return true;
    };
    if(this.name != 'register_new_account') {
        return true;
    };
    window.event? event.returnValue = false : eventObject.preventDefault();
    if(validateFormRegExp(this)) {
        this.submit();
    };
}
tagListeners.addListenerForTag('form', 'onsubmit', submitMinimalRegistrationForm);
function submitLoginForm(eventObject) {
    if(! this.name) {
        return true;
    };
    if(this.name != 'loginform') {
        return true;
    };
    window.event? event.returnValue = false : eventObject.preventDefault();
    if(validateFormRegExp(this)) {
        this.submit();
    };
};
tagListeners.addListenerForTag('form', 'onsubmit', submitLoginForm);


/****************************************************************************

 Registration / Shipping form
 
****************************************************************************/

// the birthdate in the registration /shipping address form
function CalculateBirthDateISO(Day, Month, Year) {
  var BirthDateISO;
  if (Day < 10) {
     DayText = "0" + Day;
  } else {
     DayText = Day;
  };
  if (Month < 10) {
     MonthText = "0" + Month;
  } else {
     MonthText = Month;
  };
  BirthDateISO = Year + "" + MonthText + "" + DayText;
  return BirthDateISO;
}
//function for returning how many days there are in a month including leap years
function DaysInMonth(WhichMonth, WhichYear){
  var DaysInMonth = 31;
  if (WhichMonth == "Apr" || WhichMonth == "Jun" || WhichMonth == "Sep" || WhichMonth == "Nov") DaysInMonth = 30;
  if (WhichMonth == "Feb" && (WhichYear/4) != Math.floor(WhichYear/4))	DaysInMonth = 28;
  if (WhichMonth == "Feb" && (WhichYear/4) == Math.floor(WhichYear/4))	DaysInMonth = 29;
  return DaysInMonth;
}

var addressForm = new Object();
addressForm['initialize'] = function(eventObject) {
  var formObject = document.forms['shippingaddressform'];
  addressForm['formObject'] = formObject;
  addressForm['submitButton'] = document.getElementById('shipping_submit_button');
  addressForm['submitButton2'] = document.getElementById('shipping_submit_button2');
  addressForm['displayButton'] = document.getElementById('toggleshippingblock_display');
  addressForm['displayButtonDiv'] = document.getElementById('toggleshippingblock_div');
  addressForm['shippingaddress'] = document.getElementById('shippingaddress');
  addressForm['hideButton'] = document.getElementById('toggleshippingblock_hide');
};
window.addOnLoadListener(addressForm['initialize']);

addressForm['display'] = function(eventObject) {
  if(this != addressForm['displayButton']) {
    return true;
  };
  addressForm['displayButtonDiv'].style.display = 'none';
  addressForm['shippingaddress'].style.display = 'block';
  addressForm['isDisplayed'] = 1;
  window.event? event.returnValue = false : eventObject.preventDefault();
  return true;
};
tagListeners.addListenerForTag('a', 'onclick', addressForm['display']);

addressForm['hide'] = function(eventObject) {
  if(this != addressForm['hideButton']) {
    return true;
  };
  addressForm['reset']();
  addressForm['displayButtonDiv'].style.display = 'block';
  addressForm['shippingaddress'].style.display = 'none';
  addressForm['isDisplayed'] = 0;
  window.event? event.returnValue = false : eventObject.preventDefault();
  return true;
};
tagListeners.addListenerForTag('a', 'onclick', addressForm['hide']);

addressForm['reset'] = function(eventObject) {
  var formObject = addressForm['formObject'];
  var billingGender = getInputValue('in_ca_cu_Gender', formObject);
  for(var i = 0; i < formObject.elements.length ; i++) {
    var elementObject = formObject.elements[i];
    if(elementObject.name) {
      var currentName = elementObject.name;
      if(currentName.match(/^sh_/)) {
        var matchingName = currentName.replace(/^sh_/, '');
        if(formObject[matchingName]) {
          elementObject.value = formObject[matchingName].value;
        };
      };
      if(currentName.match(/^in_ca_of_Shipping/)) {
        var matchingName = currentName.replace(/^in_ca_of_Shipping/, 'in_ca_cu_Cust');
        if(formObject[matchingName]) {
          elementObject.value = formObject[matchingName].value;
        };
      };
      if(currentName.match(/^in_ca_cu_Shipping/)) {
        var matchingName = currentName.replace(/^in_ca_cu_Shipping/, 'in_ca_cu_Cust');
        if(formObject[matchingName]) {
          elementObject.value = formObject[matchingName].value;
        };
      }
      if(elementObject.name == 'in_ca_cu_Shipping_Gender') {
          if(elementObject.value == billingGender) {
              elementObject.checked = true;
          } else {
              elementObject.checked = false;
          };
      };
    };
  };
};

addressForm['validate'] = function (eventObject) {
  if((this != addressForm['submitButton']) && (this != addressForm['submitButton2'])) {
    return true;
  }
  
  window.event? event.returnValue = false : eventObject.preventDefault();

  var formObject = addressForm['formObject'];
  if(! formObject) {
     return true;
  };
  
  if(! addressForm['isDisplayed']) {
      addressForm.reset();
  };

  var radioObjectGenderValue = getInputValue('in_ca_cu_Gender', formObject);
  if(!radioObjectGenderValue) {
      var GenderObject = document.getElementById('r3');
      if(GenderObject.getAttribute('errordisplay')) {
        var errorDisplayObject = document.getElementById(GenderObject.getAttribute('errordisplay'));
        if(errorDisplayObject && GenderObject.getAttribute('errormessage')) {
          errorDisplayObject.innerHTML = GenderObject.getAttribute('errormessage');
          errorDisplayObject.style.display = 'block';
        };
      };
      location.href= '#custformstart';
     return false;
  };
  
  if(! validateFormRegExp(formObject, '#ffffff', '#ffffdd')) {
      location.href= '#custformstart';
    return false;
  };

  var radioObjectShippingGenderValue = getInputValue('in_ca_cu_Shipping_Gender', formObject);
  if(!radioObjectShippingGenderValue) {
      var GenderObject = document.getElementById('r5');
      if(GenderObject.getAttribute('errordisplay')) {
        var errorDisplayObject = document.getElementById(GenderObject.getAttribute('errordisplay'));
        if(errorDisplayObject && GenderObject.getAttribute('errormessage')) {
          errorDisplayObject.innerHTML = GenderObject.getAttribute('errormessage');
          errorDisplayObject.style.display = 'block';
        };
      };
            location.href= '#shippingformstart';
     return false;
  };


  var DaysObject = formObject.in_ca_cu_Birthdate_Day;
  
  var day = getInputValue('in_ca_cu_Birthdate_Day', formObject);
  var month = getInputValue('in_ca_cu_Birthdate_Month', formObject);
  var year = getInputValue('in_ca_cu_Birthdate_Year', formObject);
  
  var BirthdateISO = CalculateBirthDateISO(day, month, year);
  BirthdateObject = formObject.in_ca_cu_Birthdate;
  BirthdateObject.value = BirthdateISO;

  DateNow = new Date();
  var YearAllowed = DateNow.getYear();
  // IE gives a different year than FF
  if(YearAllowed < 1900) {
      YearAllowed = YearAllowed + 1900;
  };
  var AlloweddateISO = CalculateBirthDateISO(DateNow.getDate(), DateNow.getMonth() + 1, YearAllowed - 16);
  if (BirthdateISO > AlloweddateISO)  {
      if(DaysObject.getAttribute('errordisplay')) {
        var errorDisplayObject = document.getElementById(DaysObject.getAttribute('errordisplay'));
        if(errorDisplayObject && DaysObject.getAttribute('errormessage')) {
          errorDisplayObject.innerHTML = DaysObject.getAttribute('errormessage');
          errorDisplayObject.style.display = 'block';
        };
      };
  }  else  {
    formObject.submit();
  }
}
tagListeners.addListenerForTag('input', 'onclick', addressForm['validate']);







function BirthDateChange() {
  DaysObject = document.shippingaddressform.in_ca_cu_Birthdate_Day;
  MonthObject = document.shippingaddressform.in_ca_cu_Birthdate_Month;
  YearObject = document.shippingaddressform.in_ca_cu_Birthdate_Year;

  Month = MonthObject[MonthObject.selectedIndex].text;
  Year = YearObject[YearObject.selectedIndex].text;

  DaysForThisSelection = DaysInMonth(Month, Year);
  CurrentDaysInSelection = DaysObject.length;
  if (CurrentDaysInSelection > DaysForThisSelection)
  {
    for (i=0; i < (CurrentDaysInSelection-DaysForThisSelection); i++)
    {
      DaysObject.options[DaysObject.options.length - 1] = null
    }
  }
  if (DaysForThisSelection > CurrentDaysInSelection)
  {
    for (i=0; i < (DaysForThisSelection-CurrentDaysInSelection); i++)
    {
      NewOption = new Option(DaysObject.options.length + 1);
      DaysObject.options[DaysObject.options.length] = NewOption;
//      DaysObject.add(NewOption);
    }
  }
  if (DaysObject.selectedIndex < 0) DaysObject.selectedIndex == 0;
}

function SelectBirthDateChange(eventObject) {
  if(! this.name) {
    return true;
  };
  if(! this.name.match(/^in_ca_cu_Birthdate_/)) {
    return true;
  };

  BirthDateChange();
}
tagListeners.addListenerForTag('select', 'onchange', SelectBirthDateChange);

function BirthDateChangeOnLoad() {
  var formObject = document.forms['shippingaddressform'];
  if(! formObject) {
     return true;
  };

  DaysObject = document.shippingaddressform.in_ca_cu_Birthdate_Day;
  MonthObject = document.shippingaddressform.in_ca_cu_Birthdate_Month;
  YearObject = document.shippingaddressform.in_ca_cu_Birthdate_Year;
 
  if (YearObject)
  {
    BirthdateObject = document.shippingaddressform.in_ca_cu_Birthdate;

    if (BirthdateObject.value)
    {
      var date_elements = BirthdateObject.value.match(/^(\d\d\d\d)(\d\d)(\d\d)$/);
      if(date_elements) {
        DaysObject.selectedIndex = date_elements[3] - 1;
        MonthObject.selectedIndex = date_elements[2] - 1;
        YearObject.selectedIndex = date_elements[1] - 1910;
      };
    }

    BirthDateChange();
  }
}
window.addOnLoadListener(BirthDateChangeOnLoad);


/****************************************************************************

  Miscellaneous functions

****************************************************************************/

// for select.onchange in the list 
function SubmitChangeSelectInBasket(eventObject) {
  if(! this.name) {
    return true;
  };
  if((! this.name.match(/^NumOf_/)) && (! this.name.match(/^NumOf2_/))) {
    return true;
  };

  var formObject = new Object;
  var safetyCounter = 0;
  var parentObject = this.parentNode;

  while(! formObject.tagName) {
    if((parentObject.tagName) && ( parentObject.tagName == 'FORM')) {
      formObject = parentObject;
    } else {
      parentObject = parentObject.parentNode;
    }
    if(safetyCounter > 10) {
      break;
    };
    safetyCounter++;
  };
  // the mini basket updates through an AJAX call
  if(formObject.getAttribute('showresultin')) {
      return true;
  }
  if (formObject.name == 'basketform')
  {
    document.forms['basketform'].submit();
  }
  if (formObject.name == 'basketformmini')
  {
    document.forms['basketformmini'].submit();
  }

  if (formObject.name == 'ProductMultiAdd')
  {
    var productNo = this.name;
    var SelectBox2;
    if (this.name.match(/^NumOf_/))
    {
      productNo = productNo.replace(/^NumOf_/, '');
      SelectBox2 = formObject['NumOf2_' + productNo];
      if (SelectBox2) {
        SelectBox2.selectedIndex = this.selectedIndex;
      }
    }
    else
    {
      productNo = productNo.replace(/^NumOf2_/, '');
      SelectBox2 = formObject['NumOf_' + productNo];
      if (SelectBox2) {
        SelectBox2.selectedIndex = this.selectedIndex;
      }
    }
  }
}
tagListeners.addListenerForTag('select', 'onchange', SubmitChangeSelectInBasket);


// submit the mini basket through an ajax call if a select is updated
function submitBasketOnSelectChangeThroughAjax(eventObject) {
     if(! this.name) {
        return true;
      };
      if((! this.name.match(/^NumOf_/)) && (! this.name.match(/^NumOf2_/))) {
        return true;
      };

      var formObject = new Object;
      var safetyCounter = 0;
      var parentObject = this.parentNode;

      while(! formObject.tagName) {
        if((parentObject.tagName) && ( parentObject.tagName == 'FORM')) {
          formObject = parentObject;
        } else {
          parentObject = parentObject.parentNode;
        }
        if(safetyCounter > 10) {
          break;
        };
        safetyCounter++;
      };
      
      // the mini basket updates through an AJAX call
      if(! formObject.getAttribute('showresultin')) {
          return true;
      }
      console.log(formObject.onsubmit);
      // a nasty hack for multi add forms in the product page
      if (formObject.name == 'ProductMultiAdd') {
        var productNo = this.name;
        var SelectBox2;
        if (this.name.match(/^NumOf_/)) {
          productNo = productNo.replace(/^NumOf_/, '');
          SelectBox2 = formObject['NumOf2_' + productNo];
          if (SelectBox2) {
            SelectBox2.selectedIndex = this.selectedIndex;
          }
        } else {
          productNo = productNo.replace(/^NumOf2_/, '');
          SelectBox2 = formObject['NumOf_' + productNo];
          if (SelectBox2) {
            SelectBox2.selectedIndex = this.selectedIndex;
          };
        };
      };
      AjaxBasket.submitFormObjectAsAjax(formObject);
}
tagListeners.addListenerForTag('select', 'onchange', submitBasketOnSelectChangeThroughAjax);
// form on the product page. use an AJAX call if the form has an attribute prependoutputto
function submitProductFormOnProductPage(eventObject) {
  var productForm = document.forms['ProductMultiAdd'];
  if(! productForm) {
    return true;
  };
  if(this != productForm){
    return true;
  };
  var displayResultIn = productForm.getAttribute('prependoutputto');
  if(displayResultIn) {
    window.event? event.returnValue = false : eventObject.preventDefault(); /* IE : standards */
    
    if(document.getElementById(displayResultIn)){
      
      var miniBasket = document.getElementById('block_MiniBasket');
      if(miniBasket) {
        miniBasket.parentNode.removeChild(miniBasket);
      };
      var params = '';
      var url = productForm['action'];
      console.log(url);
      for(var i = 0; i < productForm.elements.length ; i++) {
        var inputElement = productForm.elements[i];
        var inputName = inputElement.name;
        var inputValue = inputElement.value;
        if(inputName && inputValue) {
          params = params + '&' + inputName + '=' + inputValue;
        };
      }
      params = params + '&displayas=minibasket';
      console.log(params);
      var handleWaitFunction = function() {
        return true;
      };
      var handleCompleteFunction = function(returnData) {
        var displayObject = document.getElementById(displayResultIn);
        var previousContents = displayObject.innerHTML;
        displayObject.innerHTML = returnData + previousContents;
        tagListeners.assignListenersToElementsBelow(displayObject);
        return true;
      };
      ECubeAjax['assignHandlerToState']('READY_STATE_INCOMPLETE', handleWaitFunction);
      ECubeAjax['assignHandlerToState']('READY_STATE_COMPLETE', handleCompleteFunction);
      ECubeAjax['sendRequest'](url, params, 'POST');
    } else {
      return true;
    };
  } else {
    return true;
  }
}
tagListeners.addListenerForTag('form', 'onsubmit', submitProductFormOnProductPage);



// use an Ajax call to load the product page in the place of the list
// links that make this happen have the attribute showproductpageinlistblock
// set to 1
function loadProductPageInListArea(eventObject) {
  if(! this.getAttribute('showproductpageinlistblock')) {
    return true;
  };
  window.event? event.returnValue = false : eventObject.preventDefault();
  var url = this.getAttribute('href');
  url = url + '?ProductsOnly=1';

  var handleWaitFunction = function() {
    return true;
  };
  var handleCompleteFunction = function(returnData) {
    var productBlock = document.createElement('DIV');
    productBlock.setAttribute('id', 'product_content');
    var listBlock = document.getElementById('list_content');
    var parentBlock = listBlock.parentNode;
    productBlock.innerHTML = returnData;
    parentBlock.replaceChild(productBlock, listBlock);
    var anchorID = randomString(8);
    var anchorObject = document.createElement('A');
    anchorObject.setAttribute('name', 'anchor_' + anchorID);
    anchorObject.setAttribute('id', anchorID);
    parentBlock.insertBefore(anchorObject, productBlock);
    tagListeners.assignListenersToElementsBelow(productBlock);
    location.href = '#anchor_' + anchorID; 
    return true;
    
  };
  ECubeAjax['assignHandlerToState']('READY_STATE_INCOMPLETE', handleWaitFunction);
  ECubeAjax['assignHandlerToState']('READY_STATE_COMPLETE', handleCompleteFunction);
  ECubeAjax['sendRequest'](url);
};
tagListeners.addListenerForTag('a', 'onclick', loadProductPageInListArea);
// for select.onchange in the list page submit the form
function submitSortDropdown(eventObject) {
  if(! this.name) {
    return true;
  };
  if(this.name != 'Sort') {
    return true;
  };
  var parentObject = this.parentNode;
  if(! parentObject) {
    return true;
  };
  if(! parentObject.tagName) {
    return true;
  };
  if(parentObject.tagName != 'FORM') {
    return true;
  };
  if(! getInputValue(this.name, parentObject)) {
    return true;
  };
  parentObject.submit();
}
tagListeners.addListenerForTag('select', 'onchange', submitSortDropdown);

// the checkboxes with refinements in the list page
function submitModifiedRefinements(eventObject) {
  if(! this.name) {
    return true;
  }
  if(this.type != 'checkbox') {
    return true;
  }
  var safetycounter = 0;
  var formObject = new Object();
  var parentObject = this.parentNode;
  while(! formObject.name) {
    safetycounter++;
    if(safetycounter > 100) {
      break;
    }
    if(parentObject.tagName) {
      if(parentObject.tagName == 'FORM') {
        formObject = parentObject;
        break;
      }
    }
    parentObject = parentObject.parentNode;
  }
  if(formObject.name) {
    if(formObject.name == 'chosenrefinementsform') {
      var url = GLOBAL_URL_STORE + '/';
      var refinements = '';
      for(var i = 0; i < formObject.elements.length ; i++) {
        var elementObject = formObject.elements[i];
        if(elementObject.name) {
          var inputName = elementObject.name;
          var inputValue = elementObject.value;
          if(inputName == 'url') {
            url = url + inputValue;
          } else {
            if(elementObject.checked) {
              refinements = refinements + inputName + '/' + inputValue + '/';
            };
          }
        }
      }
      url = url + '/' + refinements;
      location.href = url;
    }
  }
}
tagListeners.addListenerForTag('input', 'onchange', submitModifiedRefinements)
tagListeners.addListenerForTag('input', 'onclick', submitModifiedRefinements)


// Ogone redirect
function submitOgoneForm(eventObject) {
  if(GLOBAL_TEMPLATEID != 'OgoneRedirect') {
    return true;
  };
  // nasty. the cartridge supplies form html but does not give the form a name
  for(var i = 0; i < document.forms.length ; i++) {
    var formObject = document.forms[i];
    if(formObject.action.match(/secure.ogone.com/i)) {
      formObject.submit();
    };
  };
  return true;
};
window.addOnLoadListener(submitOgoneForm);

// load the "wijnvinder" using swf object
function loadWijnvinder(eventObject) {
  var divObject = document.getElementById('wijnadviseur');
  if(! divObject) {
    return true;
  };
  var flashObject = new SWFObject("/isroot/Delafranconi/SWF/wijnadviseur-auto.swf", "wijnadviseur", "760", "230", "7", "#FFFFFF");
  flashObject.addVariable('url', GLOBAL_URL_STORE + '/UserTemplate/xml_wijnvinder');
  flashObject.addParam("wmode", "transparent");
  flashObject.write("wijnadviseur");
};
window.addOnLoadListener(loadWijnvinder);

/*******************************************************************
  
  Contactformulier
  
*******************************************************************/

var ContactForm = new Object();
ContactForm.handleWaitFunction = function() {
  ContactForm['displayObject'].innerHTML = 'Een ogenblik geduld alsjeblieft ... het formulier wordt verzonden.';
  return true;
};
ContactForm.handleCompleteFunction = function(data) {
  ContactForm['displayObject'].innerHTML = data;
  return true;
}
ContactForm.submitForm = function(eventObject) {
  if(! ContactForm['formObject']) {
    return 1;
  };
  if(this != ContactForm['formObject']) {
    return 1;
  };
  window.event? event.returnValue = false : eventObject.preventDefault();

  if(! validateFormRegExp(ContactForm['formObject'])) {
    return 0;
  }
  ContactForm['params'] = '';
  for(var i = 0; i < ContactForm['formObject'].elements.length ;i++) {
    var elementObject = ContactForm['formObject'].elements[i];
    if(elementObject.name) {
      var key = elementObject.name;
      var value = elementObject.value;
      ContactForm['params'] = ContactForm['params'] + key + '=' + value + '&';
    };
  };
  ECubeAjax['assignHandlerToState']('READY_STATE_INCOMPLETE', ContactForm.handleWaitFunction);
  ECubeAjax['assignHandlerToState']('READY_STATE_COMPLETE', ContactForm.handleCompleteFunction);
  ECubeAjax['sendRequest'](ContactForm['action'], ContactForm['params'], 'post');  
};
ContactForm.initialize = function() {
  var formObject = document.forms['contactform'];
  if(! formObject) {
    return 1;
  };
  ContactForm['formObject'] = formObject;
  ContactForm['params'] = '';
  ContactForm['action'] = formObject['action'];
  ContactForm['displayObject'] = formObject.parentNode;
  tagListeners.addListenerForTag('form', 'onsubmit', ContactForm.submitForm);
  tagListeners.assignListenersToElement(formObject);
};
window.addOnLoadListener(ContactForm.initialize);

/*******************************************************************

  Einde contactformulier
  
*******************************************************************/


/*******************************************************************

  Select Payment
  
*******************************************************************/
var SelectPaymentForm = new Object();
SelectPaymentForm.setExtraFieldsOnSubmit = function(eventObject) {
    if(this != SelectPaymentForm.formObject) {
        return true;
    };
    var paymentForm = this;
    var isPaymentMethodSelected = 0;
    var paymentMethodPM = '';
    var paymentMethodBrand = '';
    for(var i = 0 ; i < paymentForm.elements.length ; i++) {
        var currentElement = paymentForm.elements[i];
        if(currentElement.checked) {
            if(currentElement.getAttribute('PM')) {
                paymentMethodPM = currentElement.getAttribute('PM');
            };
            if(currentElement.getAttribute('Brand')) {
                paymentMethodBrand = currentElement.getAttribute('Brand');
            };
            isPaymentMethodSelected = 1;
        };
    };
    if(! isPaymentMethodSelected) {
        window.event? event.returnValue = false : eventObject.preventDefault();
        return false;
    };
    if(! paymentForm.PM) {
        appendField('PM', paymentMethodPM, 'hidden', paymentForm);
    };
    if(! paymentForm.Brand) {
        appendField('Brand', paymentMethodBrand, 'hidden', paymentForm);        
    };
    paymentForm.PM.value = paymentMethodPM;
    paymentForm.Brand.value = paymentMethodBrand;
    return true;
};
SelectPaymentForm.initialize = function(eventObject) {
    if(! document.forms['selectpaymentform']) {
        return true;
    };
    SelectPaymentForm['formObject'] = document.forms['selectpaymentform'];
    SelectPaymentForm['formObject'].onsubmit = SelectPaymentForm.setExtraFieldsOnSubmit;
    return true;
    
};
window.addOnLoadListener(SelectPaymentForm.initialize);
/*******************************************************************

  Einde Select Payment
  
*******************************************************************/
// Google analytics for the order confirmation page
if(GLOBAL_TEMPLATEID == 'OrderConfirmation') {
  window.addOnLoadListener(__utmSetTrans);  
};

// development code. this should be commented out in the live shop
//function urchinTracker() {
//    return true;
//};

