var cP = {
 addEvent: function(elm, evType, fn, useCapture){
  if (elm.addEventListener) {
   elm.addEventListener(evType, fn, useCapture);
   return true;
  } 
  else if (elm.attachEvent) {
   var r = elm.attachEvent('on' + evType, fn);
   return r;
  } 
  else {
   elm['on' + evType] = fn;
  }
 },
 addListeners: function(e) {
  if (!document.getElementById) {
   return; 
  }
  var selectColor = document.getElementById('paypal').os0;
  cP.addEvent(selectColor, 'change', cP.changeColor, false);
 },
 addLoadEvent: function(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
   window.onload = func;
  } 
  else {
   window.onload = function() {
    oldonload();
    func();
   }
  }
 },
 changeColor: function(e) {
  var target = window.event ? window.event.srcElement : e ? e.target : null; 
  if (!target) { 
   return;
  }
  var colorSelect = target; 
  var images = document.getElementById('productimage').getElementsByTagName('img');
  for (var i = 0; i < images.length; i++) {   
   images[i].src = cP.img[colorSelect.options[colorSelect.selectedIndex].value].src;
  }
/*
links = document.getElementById('productimage').getElementsByTagName('a');
  for (var i = 0; i < links.length; i++) {   
   links[i].href = cP.bimg[colorSelect.options[colorSelect.selectedIndex].value].href;
  }  
*/
},
 init: function() {
  if (!document.getElementById) {
   return; 
  }
  var color = document.getElementById('paypal').os0.options;
  for (var i = 0; i < color.length; i++) {
   cP.img[color[i].value] = new Image()
   cP.img[color[i].value].src = "images/rollovers/" + color[i].value.toLowerCase().replace(/[^a-z0-9]/g, '_') + ".jpg";
/*
   cP.bimg[color[i].value] = new Image()
   cP.bimg[color[i].value].src= "images/full/" + color[i].value.toLowerCase().replace(/[^a-z0-9]/g, '_') + ".jpg";
*/
}
  cP.addListeners();
 },
 img: [],
 bimg: []
};

cP.addLoadEvent(cP.init);


var validationSet = {
 'os0': {
  isValid: function(s) {
   return !(fV.isEmpty(s) || s == 'null');   
  },
  'error': 'Please select a color.'
 },
 'os1': {
  isValid: function(s) {
   return !(fV.isEmpty(s) || s == 'null');   
  },
  'error': 'Please select a size.'  
 },
 'quantity': {
  isValid: function(s) {
   return (!fV.isEmpty(s) && fV.isInteger(s) && s > 0);
  },
  'error': 'Please enter a quantity greater than zero.'   
 }
};

var fV = {
 addEvent: function(elm, evType, fn, useCapture){
  if (elm.addEventListener) {
   elm.addEventListener(evType, fn, useCapture);
   return true;
  } 
  else if (elm.attachEvent) {
   var r = elm.attachEvent('on' + evType, fn);
   return r;
  } 
  else {
   elm['on' + evType] = fn;
  }
 },
 addLoadEvent: function(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
   window.onload = func;
  } 
  else {
   window.onload = function() {
    oldonload();
    func();
   }
  }
 },
 init: function() {
  if (!document.getElementById) {
   return; 
  }
  for (var i in validationSet) {
   if (document.getElementsByName(i)) {
    var formField = document.getElementsByName(i)[0];
	fV.addEvent(formField, 'change', fV.checkValid, false);
	if (!formField.form.validateSubmit) {
	 fV.addEvent(formField.form, 'submit', fV.checkValidSubmit, false);
	 formField.form.onsubmit = fV.checkSubmit; // Safari
	 formField.form.validateSubmit = true;
	}
   }
  }
 },
 validateColor: function(s) { 
  return !(fV.isEmpty(s) || s == 'null'); 
 },
 validateSize: function(s) { 
  return !(fV.isEmpty(s) || s == 'null');
 },
 validateQuantity: function(s) { 
  return (!fV.isEmpty(s) && fV.isInteger(s) && s > 0);
 },	 
 checkValidSubmit: function(e) {
  var frm = window.event ? window.event.srcElement : e ? e.target : null;
  if (!frm) return;
  var errText = [];

  for (var i = 0; i < frm.elements.length; i++) {
   if (frm.elements[i].name && validationSet[frm.elements[i].name]) {
    var failedE = fV.handleValidity(frm.elements[i]);
    var errDisplay = document.getElementById('error_' + frm.elements[i].name);
    if (failedE && errDisplay) {
     errDisplay.innerHTML = validationSet[failedE.name]['error'];
    }
    if (!failedE && errDisplay) {
     errDisplay.innerHTML = '';
    }
    if (failedE) {
     var labels = document.getElementsByTagName('label');
     errText[errText.length] = validationSet[failedE.name]['error'];
     for (var j = 0; j < labels.length; j++) {
      if (labels[j].htmlFor == failedE.id) {
       errText[errText.length - 1] += ' (field \'' + labels[j].firstChild.nodeValue + '\')';
      }
     }
    }
   }  /* end 'if' */
  } /* end 'for' */
  if (errText.length > 0) {
   alert('Please fix the following and resubmit:\n' + errText.join('\n'));
   frm.submitAllowed = false;
   if (e && e.stopPropagation && e.preventDefault) {
    e.stopPropagation();
    e.preventDefault();
   }
   if (window.event) {
    window.event.cancelBubble = true;
    window.event.returnValue = false;
    return false;
   }
  } 
  else {
   frm.submitAllowed = true;
  }
 },
 checkSubmit: function() {
  return this.submitAllowed;
 },
 checkValid: function(e) {
  var target = window.event ? window.event.srcElement : e ? e.target : null;
  if (!target) return;
  var failedE = fV.handleValidity(target);
  var errDisplay = document.getElementById('error_' + target.name);
  if (failedE && errDisplay) {
   errDisplay.innerHTML = validationSet[failedE.name]['error'];
   failedE.focus();
  }
  if (failedE && !errDisplay) {
   alert(validationSet[failedE.name]['error']);
  }
  if (!failedE && errDisplay) {
   errDisplay.innerHTML = '';
  }
 },
 handleValidity: function(field) { 
  if(!field.value){
   return null;
  }
  if (!validationSet[field.name].isValid(field.value)) {
   return field;
  }
  else {
   return null;
  }
 },
 isDigit: function(c) {
  return ((c >= "0") && (c <= "9"))
 },
 isEmpty: function(s) {
  return ((s == null) || (s.length == 0))
 },
 isInteger: function(s) {
  if (fV.isEmpty(s)) {
   if (isInteger.arguments.length == 1) {
    return true;
   } 
   else {
    return (isInteger.arguments[1] == true);
   }
  }
  for (var i = 0; i < s.length; i++) {
   var c = s.charAt(i);
   if (!fV.isDigit(c)) {
	return false;
   }
  }
  return true;
 }
};
fV.addEvent(window, 'load', fV.init, false);