function preloadImage(imageUrl)
{
	preload = new Image();
	preload.src = imageUrl;
}
function pause(millis)
{
	date = new Date();
	var curDate = null;
	
	do { var curDate = new Date(); }
	while(curDate-date < millis); // do nothing
} 

function switchClass(elementName,newclassname)
{
	var element = document.getElementById(elementName);
	element.className = newclassname;
}
function fadeElementIn(elementName,newClassName,fadeTime)
{
	var element = document.getElementById(elementName);
	element.className = newClassName;
	var fader = new Fadomatic(element, 25,0,0,100);
	fader.fadeIn();
}
function fadeElement(elementName,newClassName,fadeTime)
{
	var element = document.getElementById(elementName);
	var fader = new Fadomatic(element, 25);
	fader.show();
	fader.fadeOut();
}
function fadeAngleIn(elementName,newClassName,fadeTime)
{
	/*
	var element = document.getElementById(elementName);
	element.className = newClassName;
	var fader = new Fadomatic(element, 25,50,50,100);
	fader.fadeIn();
	*/
}
function fadeAngle(elementName,newClassName,fadeTime)
{
	var element = document.getElementById(elementName);
	var fader = new Fadomatic(element, 25,50,50,100);
	fader.show();
	fader.fadeOut();
}
function ZoomSwitch(imgsrc)
{
	var element = document.getElementById('ZoomLink');
	element.onclick = function() { zoomClick(imgsrc) };
	switchhref('ZoomLinkExt',imgsrc);
	if(zooming == true)
	{
		zoomClick();
	}
}
function ImagePreview(imageSrc)
{
	var element = document.getElementById('ProductImagePopup');
	element.src = imageSrc;
	element.height = 125;
	element.width = 125;
	fadeElementIn('ProductImagePopupContainer','ProductImagePopup Display');
//	setTimeout("",5000);
}
function CloseImagePreview()
{
	fadeElement('ProductImagePopupContainer','ProductImagePopup',true);
}
function ImageSwitch(imageSrc)
{
	var element = document.getElementById('ProductImage');
	element.src = imageSrc;
	var fader = new Fadomatic(element,25,0,0,100);
		fader.fadeIn();
	element.height = 400;
	element.width = 400;
}
function switchImgSrc(elementName,newimgsrc,height,width)
{
	var element = document.getElementById(elementName);
	element.src = 'images/elements/blank.png';
	if(height && width)
	{
		element.height = height;
		element.width = width;
	}
	if(element.src = newimgsrc)
		return true;
	else
		return false;
}
function switchProductImage(elementName,newimgsrc,height,width)
{
	var element = document.getElementById(elementName);
	element.src = newimgsrc;
	var fader = new Fadomatic(element, 25,0,0,100);
	fader.fadeIn();
	if(height && width)
	{
		element.height = height;
		element.width = width;
	}
}

function setAttr(elementName,attr,newover)
{
	var element = document.getElementById(elementName);
	element.setAttribute(attr,newover);
}
function switchhref(elementName,newhref)
{
	var element = document.getElementById(elementName);
	element.href = newhref;
}
function setStatusBar(newstring)
{
	var element = document.getElementById(elementName);
	element.href = newhref;
}

function SwitchCustomProduct(imageSrc,imageSrcSm, url)
{
	var Custom = document.getElementById('Customizable');
	Custom.className = 'Customizable';
	Custom.onclick = function() { ImageSwitch(imageSrc); ZoomSwitch(url); };
	Custom.onmouseover = function() { ImagePreview(imageSrcSm); };
}
function DisableCustom()
{
	var Custom = document.getElementById('Customizable');
	Custom.className = 'Hidden';
}



// Fade interval in milliseconds
// Make this larger if you experience performance issues
Fadomatic.INTERVAL_MILLIS = 50;

// Creates a fader
// element - The element to fade
// speed - The speed to fade at, from 0.0 to 100.0
// initialOpacity (optional, default 100) - element's starting opacity, 0 to 100
// minOpacity (optional, default 0) - element's minimum opacity, 0 to 100
// maxOpacity (optional, default 0) - element's minimum opacity, 0 to 100
function Fadomatic (element, rate, initialOpacity, minOpacity, maxOpacity) {
  this._element = element;
  this._intervalId = null;
  this._rate = rate;
  this._isFadeOut = true;

  // Set initial opacity and bounds
  // NB use 99 instead of 100 to avoid flicker at start of fade
  this._minOpacity = 0;
  this._maxOpacity = 99;
  this._opacity = 99;

  if (typeof minOpacity != 'undefined') {
    if (minOpacity < 0) {
      this._minOpacity = 0;
    } else if (minOpacity > 99) {
      this._minOpacity = 99;
    } else {
      this._minOpacity = minOpacity;
    }
  }

  if (typeof maxOpacity != 'undefined') {
    if (maxOpacity < 0) {
      this._maxOpacity = 0;
    } else if (maxOpacity > 99) {
      this._maxOpacity = 99;
    } else {
      this._maxOpacity = maxOpacity;
    }

    if (this._maxOpacity < this._minOpacity) {
      this._maxOpacity = this._minOpacity;
    }
  }
  
  if (typeof initialOpacity != 'undefined') {
    if (initialOpacity > this._maxOpacity) {
      this._opacity = this._maxOpacity;
    } else if (initialOpacity < this._minOpacity) {
      this._opacity = this._minOpacity;
    } else {
      this._opacity = initialOpacity;
    }
  }

  // See if we're using W3C opacity, MSIE filter, or just
  // toggling visiblity
  if(typeof element.style.opacity != 'undefined') {

    this._updateOpacity = this._updateOpacityW3c;

  } else if(typeof element.style.filter != 'undefined') {

    // If there's not an alpha filter on the element already,
    // add one
    if (element.style.filter.indexOf("alpha") == -1) {

      // Attempt to preserve existing filters
      var existingFilters="";
      if (element.style.filter) {
        existingFilters = element.style.filter+" ";
      }
      element.style.filter = existingFilters+"alpha(opacity="+this._opacity+")";
    }

    this._updateOpacity = this._updateOpacityMSIE;
    
  } else {

    this._updateOpacity = this._updateVisibility;
  }

  this._updateOpacity();
}

// Initiates a fade out
Fadomatic.prototype.fadeOut = function () {
  this._isFadeOut = true;
  this._beginFade();
}

// Initiates a fade in
Fadomatic.prototype.fadeIn = function () {
  this._isFadeOut = false;
  this._beginFade();
}

// Makes the element completely opaque, stops any fade in progress
Fadomatic.prototype.show = function () {
  this.haltFade();
  this._opacity = this._maxOpacity;
  this._updateOpacity();
}

// Makes the element completely transparent, stops any fade in progress
Fadomatic.prototype.hide = function () {
  this.haltFade();
  this._opacity = 0;
  this._updateOpacity();
}

// Halts any fade in progress
Fadomatic.prototype.haltFade = function () {

  clearInterval(this._intervalId);
}

// Resumes a fade where it was halted
Fadomatic.prototype.resumeFade = function () {

  this._beginFade();
}

// Pseudo-private members

Fadomatic.prototype._beginFade = function () {

  this.haltFade();
  var objref = this;
  this._intervalId = setInterval(function() { objref._tickFade(); },Fadomatic.INTERVAL_MILLIS);
}

Fadomatic.prototype._tickFade = function () {

  if (this._isFadeOut) {
    this._opacity -= this._rate;
    if (this._opacity < this._minOpacity) {
      this._opacity = this._minOpacity;
      this.haltFade();
    }
  } else {
    this._opacity += this._rate;
    if (this._opacity > this._maxOpacity ) {
      this._opacity = this._maxOpacity;
      this.haltFade();
    }
  }

  this._updateOpacity();
}

Fadomatic.prototype._updateVisibility = function () {
  
  if (this._opacity > 0) {
    this._element.style.visibility = 'visible';
  } else {
    this._element.style.visibility = 'hidden';
  }
}

Fadomatic.prototype._updateOpacityW3c = function () {
  
  this._element.style.opacity = this._opacity/100;
  this._updateVisibility();
}

Fadomatic.prototype._updateOpacityMSIE = function () {
  
  this._element.filters.alpha.opacity = this._opacity;
  this._updateVisibility();
}

Fadomatic.prototype._updateOpacity = null;

