/* ImageMorph V1.51, by Greg Brown, www.ibdg.co.nz. */

function ImageMorph(mn, p){
	this.ip = p ? p : '';
	this.mn = mn;
	this.inc = 0.04;
	this.int = 50;
	this.il = [];
	this.imageList = this.il;
	this.ni = 0;
	this.hih = null;
	this.timer = null;
};

ImageMorph.prototype.init = function(imgId, capId){
	//alert(1);
	this.img = document.getElementById(imgId);
	this.cap = document.getElementById(capId);
 	this.temp = new Image();
	this.temp.onload = new Function(this.mn + '.morph();');
};

ImageMorph.prototype.setAnimSpeed = function(inc,int){
	if (inc) this.inc = inc;
	if (int) this.int = int;
};

ImageMorph.prototype.switchImage = function(id){
	// browser must be a piece of crap so no morph
	//if (!window.XMLHttpRequest){ 
//		this.img.src = this.ip + (this.isArray(this.il[this.ni]) ? this.il[this.ni][0] : this.il[this.ni]);
//		return;
//	}
	
	if (id == 'previous') this.ni--;
	else if (id == null || id == 'next')	this.ni++;
	else this.ni = id;
	if (this.ni >= this.il.length) this.ni = 0;
	if (this.ni < 0) this.ni = this.il.length - 1;

	//preload before calling fade script:
	this.temp.src = this.ip + (this.isArray(this.il[this.ni]) ? this.il[this.ni][0] : this.il[this.ni]);
};


ImageMorph.prototype.morph = function(){
	if (!this.ol) this.makeOverlay();
	this.img.src = this.getOlBg();
//	this.ol.opacity
	setTimeout(new Function(this.mn+'.startFade();'), 1);	
};

ImageMorph.prototype.makeOverlay = function(){
	var cont = document.createElement('div');
	this.img.parentNode.style.position = 'relative';
  this.ol = this.img.parentNode.insertBefore(cont,this.img);
	
  this.ol.style.position = 'absolute';
	this.ol.style.left = '0px';
	this.ol.style.top = '0px';
	//alert(this.img.getAttribute('width'));
	this.ol.style.width = this.img.getAttribute('width') ? (parseInt(this.img.getAttribute('width')) + 'px') : '100%';
	this.ol.style.height = this.img.getAttribute('height') ? (parseInt(this.img.getAttribute('height')) + 'px') : '100%';
	
	//this.img.parentNode.removeChild(this.img);
  //cont.appendChild(this.img);
	
  this.setOlBg(this.img.src);
};

ImageMorph.prototype.startFade = function(){
	this.img.style.opacity = 1;
	this.img.style.filter = 'alpha(opacity=100)';
	if (this.timer) clearTimeout(this.timer);
	setTimeout(new Function(this.mn + '.setOlBg("' + this.temp.src + '");' + this.mn + '.fadeObj();'),1);	

};

ImageMorph.prototype.fadeObj = function(){
  this.ol.newOp = (this.ol.newOp && this.ol.newOp != -1) ? (this.ol.newOp > this.inc ? this.ol.newOp - this.inc : 0) : 1;
	this.img.style.opacity = this.ol.newOp;
	this.img.style.filter = 'alpha(opacity=' + (this.ol.newOp * 100) + ')';
	//alert('alpha(opacity=' + Math.round(this.ol.newOp * 100) + ')');
	this.ol.style.opacity = 1 - this.ol.newOp;
	this.ol.style.filter = 'alpha(opacity=' + ((1 - this.ol.newOp) * 100) + ')';
	//alert('alpha(opacity=' + Math.round((1 - this.ol.newOp) * 100) + ')');
	if (this.cap){
		this.cap.style.opacity = this.ol.newOp;
		this.cap.style.filter = 'alpha(opacity=' + (this.ol.newOp * 100) + ')';
	}
	if (this.ol.newOp > 0) this.timer = setTimeout(new Function(this.mn+'.fadeObj()'),this.int);
	else {
		this.timer = null;
		this.ol.newOp = -1;
		// insert new caption if found
		if (this.cap){
			if (this.isArray(this.il[this.ni]) && this.il[this.ni][1]){
				this.cap.innerHTML = this.il[this.ni][1];
				this.cap.style.opacity = 1;
				this.cap.style.filter = 'alpha(opacity=100)';
			}
			else this.cap.innerHTML = '';
		}
	}
};

ImageMorph.prototype.setOlBg = function(src){
  this.ol.style.background = 'url(' + src + ') top left no-repeat';
  //this.ol.src = src;
  this.ol.setAttribute('bg',src);
};
ImageMorph.prototype.getOlBg = function(){
  return this.ol.getAttribute('bg');
};


ImageMorph.prototype.isArray = function(a){
	return ((a && typeof a == 'object') || typeof a == 'function') && a.constructor == Array;
};

