if (!Array.prototype.indexOf)Array.prototype.indexOf = function(A,B,C){for(var i= +B||0, l=this.length;i<l;i++){if(this[i]===A||C&&this[i]==A){return i;}}return -1;};

var C = {};

C.textureMap = {};
C.colors = {};
C.primaryImageExtension = '.jpg';
C.swatchImageExtension = '.gif';
C.priceRegExp = new RegExp(" " + String.fromCharCode(92) + "(");

C.getFieldValue = function(field) {
	var name = field.children[field.selectedIndex].innerHTML;
	if (name.match(C.priceRegExp)) name = name.split(C.priceRegExp)[0];
	return name.toLowerCase().replace(/ /g,'_');
}

C.generateSwatchUrl = function(texture, color) {
	return "images/swatches/" + texture + "/" + color.toLowerCase().replace(/ /g, '_') + C.swatchImageExtension;
}

C.generateImageUrl = function(texture, color) {
	return "images/products/" + C.productId + "/" + texture + "/" + color.toLowerCase().replace(/ /g, '_') + C.primaryImageExtension;
}

C.textureChange = function(e) {
  C.updateColors(C.getFieldValue(C.textureSelect));
};

C.updateColors = function(textureName) {
  var visibleColors = C.textureMap[textureName];
  if (!visibleColors) visibleColors = [];
  var checked = true;
  for (var color in C.colors) {
    if (visibleColors.indexOf(color) == -1) {
      YAHOO.util.Dom.addClass(C.colors[color], 'yui-hidden');
      C.colors[color].childNodes[0].checked = false;
    } else {
      YAHOO.util.Dom.removeClass(C.colors[color], 'yui-hidden');
      C.colors[color].childNodes[0].checked = checked;
      if (checked && C.img) {
        C.img.src = C.generateImageUrl(textureName, color);
      }
      checked = false;
      YAHOO.util.Dom.getElementsByClassName('swatch', 'img', C.colors[color])[0].src = C.generateSwatchUrl(textureName, color);
    }
  }
};

C.changeImage = function(e){
  var t = YAHOO.util.Event.getTarget(e);

  while (!YAHOO.util.Dom.hasClass(t, "radioSwatch")) t = t.parentNode;
  YAHOO.util.Dom.getChildren(t)[0].checked = true;
  var name = YAHOO.util.Dom.getElementsBy(function(){return true;}, 'img', t)[0].alt;
  C.img.src = C.generateImageUrl(C.getFieldValue(C.textureSelect), name);
}

YAHOO.util.Event.onDOMReady(function(){
  C.img = YAHOO.util.Dom.get('mainProductImage');
  YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName("radioSwatch"), 'click', C.changeImage);
  var opts = YAHOO.util.Dom.getElementsByClassName('product_option');
  for (var i=0; i<opts.length; i++) {
    if (opts[i].innerHTML == 'Textile:') {
      C.textureSelect = YAHOO.util.Dom.getNextSibling(opts[i]).childNodes[0];
      YAHOO.util.Event.addListener(C.textureSelect, 'change', C.textureChange);
    } else if (opts[i].innerHTML == 'Color:') {
      var colors = YAHOO.util.Dom.getChildren(YAHOO.util.Dom.getNextSibling(opts[i]));
      for (var j=0; j<colors.length; j++) {
        var cImg = YAHOO.util.Dom.getElementsBy(function(){return true;}, 'img', colors[j])[0];
        C.colors[cImg.alt.toLowerCase()] = colors[j];
      }
    } else if (typeof C.customProductSelect == 'function') {
    	C.customProductSelect(opts[i]);
    }
  }
  C.textureChange();
});


