var remove = new Array('lang');
var optionsWindow;
var banners = new Array();

function addLoadEvent(func) {
	//alert('load event');
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

/***********************************************************
* Logout
************************************************************/
function logout_check(del){
	var agree=confirm('By logging out, your shopping basket will be lost');
	if (agree) {
		return true;
	} else {
		return false;
	}
}

/***********************************************************
* Pop-up Window
************************************************************/
function showPopup(url,name,options)
{
	if(optionsWindow!=null && !optionsWindow.closed && optionsWindow.location) {
		optionsWindow.location.href = url;
	} else {
		optionsWindow = window.open(url,name,options);
		if(!optionsWindow.opener) {
			optionsWindow.opener = self;
		}
	}

	if(window.focus) {
		optionsWindow.focus();
	}
}

/***********************************************************
* Banner Rotation
************************************************************/
var speed = 10000;

function rotateBanners(){
	//Start rotation with second banner
	setTimeout("displayBanner(1)", speed);
}

function displayBanner(count){
	//alert('Banners Length: '+banners.length-1);
	//alert('Count: '+count);
	document.getElementById('banner').href = banners[count][0];
	var img = document.getElementById('banner').getElementsByTagName('img')[0];
	img.alt = banners[count][1];
	img.src = banners[count][2];
	if(count==banners.length-1){
		count = 0;
		//alert('set count to zero');
	} else {
		count = count+1;
	}
	setTimeout("displayBanner("+count+")", speed);
}

/***********************************************************
* Form Validation
************************************************************/
var node_text = 3;	// DOM text node-type
var emptyString = new RegExp(/^\s*$/ );

function trim(str)
{
  return str.replace(/^\s+|\s+$/g, '');
}

function msg(fld, msgtype, messtext, messnumber){
	var dispmessnumber;
	if (emptyString.test(messtext))
		dispmessnumber = String.fromCharCode(160);
	else
		dispmessnumber = messtext;
	var elem = document.getElementById(fld);
	elem.firstChild.nodeValue = dispmessnumber;
	elem.className=msgtype;
}

var proceed = 2;

function commonCheck(valfield, infoID)
{
	//alert('Value Field: '+valfield+', Info Field: '+infoID);
	if (!document.getElementById)
		return true;  // not available on this browser - leave validation to the server
	var elem = document.getElementById(infoID);
	//if (!elem.firstChild) return true;  // not available on this browser
	//if (elem.firstChild.nodeType != node_text) return true;  // infoID is wrong type of node
	return proceed;
}

function validaterequired(valfield, infoID)
{
  var stat = commonCheck (valfield, infoID);
  if (stat != proceed) return stat;

    if (emptyString.test(valfield.value)) {
      msg (infoID, "warning", 'This is a required field', 1);
      return false;
    }

  msg (infoID, "valid", "*", 3);
  return true;
}

function validateemail  (valfield, infoID)
{
  var stat = commonCheck (valfield, infoID);
  if (stat != proceed) return stat;

  var tfld = trim(valfield.value);  // value of field with whitespace trimmed off
  var email = new RegExp(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i);
  if (!email.test(tfld)) {
    msg (infoID, "warning", 'You have entered an invalid e-mail address', 1);
    return false;
  } else {
  	msg (infoID, "valid", "*", 3);
  	return true;
	}
}

function validatenumber (valfield, infoID)
{
	var stat = commonCheck (valfield, infoID);
	if (stat != proceed) return stat;

	var tfld = trim(valfield.value);

	if (emptyString.test(valfield.value)) {
		msg (infoID, "warning", 'This is not a valid number', 1);
		return false
	}

	var numberRE = new RegExp(/^[0-9 ]*$/);
	if (!numberRE.test(tfld)) {
		msg (infoID, "warning", 'This is not a valid number', 1);
		return false;
	}
	msg (infoID, "valid", "*", 3);
	return true;
}

function validateagreed (valfield, infoID)
{
	var stat = commonCheck (valfield, infoID);
	if (stat != proceed) return stat;

	if (valfield.checked!=true) {
		msg (infoID, "warning", valfield.title, 1);
		return false;
	}
	msg (infoID, "valid", "*", 3);
	return true;
}

function validateOnSubmit(form) {
	var elem;
	var errs=0;

	var infoLinks = getElementsByClassName('required','span', form);
	for (var i=0; i < infoLinks.length; i++){
		//alert(infoLinks[i].id);
		//infoLinks[i].className = '';
		infoLinks[i].firstChild.nodeValue = '*';
	}

	var dateLinks = getElementsByClassName('date','input', form);
	for (var i=0; i < dateLinks.length; i++){
		//alert('info_'+dateLinks[i].name);
		if (!validatedate(dateLinks[i], 'info_'+dateLinks[i].name)) errs +=1;
	}

	var numberLinks = getElementsByClassName('number','input', form);
	for (var i=0; i < numberLinks.length; i++){
		//alert('info_'+numberLinks[i].name);
		if (!validatenumber(numberLinks[i], 'info_'+numberLinks[i].name)) errs +=1;
	}

	var emailLinks = getElementsByClassName('email','input', form);
	for (var i=0; i < emailLinks.length; i++){
		//alert('info_'+emailLinks[i].name);
		if (!validateemail(emailLinks[i], 'info_'+emailLinks[i].name)) errs +=1;
	}

	var requireLinks = getElementsByClassName('require','input', form);
	var requireLinks1 = getElementsByClassName('require','textarea', form);
	for (var i=0; i < requireLinks.length; i++){
		//alert(requireLinks[i].id);
		if (!validaterequired(requireLinks[i], 'info_'+requireLinks[i].name)) errs +=1;
	}
	for (var i=0; i < requireLinks1.length; i++){
		//alert('info_'+requireLinks[i].name);
		if (!validaterequired(requireLinks1[i], 'info_'+requireLinks1[i].name)) errs +=1;
	}

	var agreeLinks = getElementsByClassName('agree','input', form);
	for (var i=0; i < agreeLinks.length; i++){
		//alert('info_'+agreeLinks[i].name);
		if (!validateagreed(agreeLinks[i], 'info_'+agreeLinks[i].name)) errs +=1;
	}

	return (errs==0);
};

/***********************************************************
* Set up the links in the page with their onblur and onsubmit handlers
************************************************************/
function preparePage(){
	/*var dateLinks = getElementsByClassName('date','input');

	for (var i=0; i < dateLinks.length; i++){
		dateLinks[i].onblur = function(){
			return validatedate(this, 'info_'+this.name);
		}
	}

	var emailLinks = getElementsByClassName('email','input');
	for (var i=0; i < emailLinks.length; i++){
		emailLinks[i].onblur = function(){
			return validateemail(this, 'info_'+this.name);
		}
	}

	var numberLinks = getElementsByClassName('number','input');

	for (var i=0; i < numberLinks.length; i++){
		numberLinks[i].onblur = function(){
			return validatenumber(this, 'info_'+this.name);
		}
	}

	var requireLinks = getElementsByClassName('require','input');

	for (var i=0; i < requireLinks.length; i++){
		requireLinks[i].onblur = function(){
			return validaterequired(this, 'info_'+this.name);
		}
	}

	var requireLinks1 = getElementsByClassName('require','textarea');

	for (var i=0; i < requireLinks1.length; i++){
		requireLinks1[i].onblur = function(){
			return validaterequired(this, 'info_'+this.name);
		}
	}*/

	if(document.getElementById('del_same_as_bill')){
		del_same_as_bill = document.getElementById('del_same_as_bill');
		del_same_as_bill.onclick = function(){
			if(del_same_as_bill.checked==true){
				document.getElementById('del_address1').className = '';
				document.getElementById('info_del_address1').className = '';
				document.getElementById('info_del_address1').firstChild.nodeValue = '';

				document.getElementById('del_town').className = 'town';
				document.getElementById('info_del_town').className = '';
				document.getElementById('info_del_town').firstChild.nodeValue = '';

				document.getElementById('del_county').className = 'town';
				document.getElementById('info_del_county').className = '';
				document.getElementById('info_del_county').firstChild.nodeValue = '';

				document.getElementById('del_postcode').className = 'postcode';
				document.getElementById('info_del_postcode').className = '';
				document.getElementById('info_del_postcode').firstChild.nodeValue = '';

				document.getElementById('del_country').className = '';
				document.getElementById('info_del_country').className = '';
				document.getElementById('info_del_country').firstChild.nodeValue = '';
			} else {
				document.getElementById('del_address1').className = 'require';
				document.getElementById('info_del_address1').className = 'required';
				document.getElementById('info_del_address1').firstChild.nodeValue = '*';

				document.getElementById('del_town').className = 'require town';
				document.getElementById('info_del_town').className = 'required';
				document.getElementById('info_del_town').firstChild.nodeValue = '*';

				document.getElementById('del_county').className = 'require town';
				document.getElementById('info_del_county').className = 'required';
				document.getElementById('info_del_county').firstChild.nodeValue = '*';

				document.getElementById('del_postcode').className = 'require postcode';
				document.getElementById('info_del_postcode').className = 'required';
				document.getElementById('info_del_postcode').firstChild.nodeValue = '*';

				document.getElementById('del_country').className = 'require';
				document.getElementById('info_del_country').className = 'required';
				document.getElementById('info_del_country').firstChild.nodeValue = '*';
			}
		}
	}

	if(document.getElementById('agree_terms')){
		var agree_terms = document.getElementById('agree_terms');
		agree_terms.onclick = function(){
			if(agree_terms.checked==true){
				document.getElementById('info_agree_terms').className = '';
				document.getElementById('info_agree_terms').firstChild.nodeValue = '';
				document.getElementById('agree_terms_1').checked = true;
				document.getElementById('info_agree_terms_1').className = '';
				document.getElementById('info_agree_terms_1').firstChild.nodeValue = '';
			} else {
				document.getElementById('info_agree_terms').className = 'agree';
				document.getElementById('info_agree_terms').firstChild.nodeValue = '*';
				document.getElementById('agree_terms_1').checked = false;
				document.getElementById('info_agree_terms_1').className = 'agree';
				document.getElementById('info_agree_terms_1').firstChild.nodeValue = '*';
			}
		}
	}
	
	if(document.getElementById('agree_terms_1')){
		var agree_terms_1 = document.getElementById('agree_terms_1');
		agree_terms_1.onclick = function(){
			if(agree_terms_1.checked==true){
				document.getElementById('info_agree_terms_1').className = '';
				document.getElementById('info_agree_terms_1').firstChild.nodeValue = '';
				document.getElementById('agree_terms').checked = true;
				document.getElementById('info_agree_terms').className = '';
				document.getElementById('info_agree_terms').firstChild.nodeValue = '';
			} else {
				document.getElementById('info_agree_terms_1').className = 'agree';
				document.getElementById('info_agree_terms_1').firstChild.nodeValue = '*';
				document.getElementById('agree_terms').checked = false;
				document.getElementById('info_agree_terms').className = 'agree';
				document.getElementById('info_agree_terms').firstChild.nodeValue = '*';
			}
		}
	}

	var forms = getElementsByClassName('validate','form');
	for (var i=0; i < forms.length; i++){
		forms[i].onsubmit = function(){
			return validateOnSubmit(this);
		}
	}

	var pop_ups = getElementsByClassName('pop','a');
	for (var i=0; i < pop_ups.length; i++){
		pop_ups[i].onclick = function(){
			showPopup(this.href+'?pop_up=true','popup','toolbar=no, scrollbars=yes, resizable=yes, menubar=no, width=800, height=600');
			return false;
		}
	}

	var logoutLinks = getElementsByClassName('logout','a');
	for (var i=0; i < logoutLinks.length; i++){
		logoutLinks[i].onclick = function(){
			return logout_check(this);
		}
	}

	if(banners!='' && banners.length!=1){
		rotateBanners();
	}

}

/*
  http://muffinresearch.co.uk/archives/2006/04/29/getelementsbyclassname-deluxe-edition/
*/
function getElementsByClassName(strClass, strTag, objContElm) {
  strTag = strTag || "*";
  objContElm = objContElm || document;
  var objColl = objContElm.getElementsByTagName(strTag);
  if (!objColl.length &&  strTag == "*" &&  objContElm.all) objColl = objContElm.all;
  var arr = new Array();
  var delim = strClass.indexOf('|') != -1  ? '|' : ' ';
  var arrClass = strClass.split(delim);
  for (var i = 0, j = objColl.length; i < j; i++) {
    var arrObjClass = objColl[i].className.split(' ');
    if (delim == ' ' && arrClass.length > arrObjClass.length) continue;
    var c = 0;
    comparisonLoop:
    for (var k = 0, l = arrObjClass.length; k < l; k++) {
      for (var m = 0, n = arrClass.length; m < n; m++) {
        if (arrClass[m] == arrObjClass[k]) c++;
        if (( delim == '|' && c == 1) || (delim == ' ' && c == arrClass.length)) {
          arr.push(objColl[i]);
          break comparisonLoop;
        }
      }
    }
  }
  return arr;
}

// To cover IE 5.0's lack of the push method
Array.prototype.push = function(value) {
  this[this.length] = value;
}

addLoadEvent(preparePage);