function Blender(width, height, enableLinks, instanceName) {
	
	// PROPERTIES
	this.imageArray				= new Array();
	this.linkArray				= new Array();
	this.width					= width;
	this.height					= height;
	this.startIndex				= 0;
	this.enableLinks			= enableLinks;
	this.instanceName			= instanceName;
	this.counter				= 0;

	this.fadeObject				= new Object();
	this.fadeTimers				= new Object();
	this.rate					= 70;
	this.delta					= 5;
	this.delay					= (100 / this.delta) * this.rate;
	this.moving					= true;
	this.doPopup				= true;
	this.pic_top;
	this.pic_bottom;
	this.popupWidth				= 790;
	this.popupHeight			= 440;
	this.opacity				= 99;
	this.retval					= '';
	this.overlay				= '';
	this.overlayOpacity			= 50;
	this.transision				= '';
	this.transisionDelay		= this.delay;
	this.text					= '';
	this.textOpacity			= 100;
	
	// METHODS
	this.setRate				= Blender_setRate;
	this.setDelta				= Blender_setDelta;
	this.setStartIndex			= Blender_setStartIndex;
	this.setDelay				= Blender_setDelay;
	this.setPopupWidth			= Blender_setPopupWidth;
	this.setPopupHeight			= Blender_setPopupHeight;
	this.setOverlay				= Blender_setOverlay;
	this.setOverlayOpacity		= Blender_setOverlayOpacity;
	this.setTransision			= Blender_setTransision;
	this.setTransisionDelay		= Blender_setTransisionDelay;
	this.setText				= Blender_setText;
	this.setTextOpacity			= Blender_setTextOpacity;
	this.getMinDelay			= Blender_getMinDelay;
	this.getArray				= Blender_getArray;
	this.getFadeObject			= Blender_getFadeObject;
	this.addPics				= Blender_addPics;
	this.pause					= Blender_pause;
	this.play					= Blender_play;
	this.popupWin				= Blender_popupWin;
	this.restoreOpacity			= Blender_restoreOpacity
	this.startFade				= Blender_startFade;
	this.fadePic				= Blender_fadePic;
	this.swopPic				= Blender_swopPic;
	this.doFade					= Blender_doFade;
	this.write					= Blender_write;
	
	// INITS
	if (this.enableLinks)
		this.pointerStr = "cursor: pointer;";
	else
		this.pointerStr = "";
}

function Blender_setRate(val) {
	this.rate = val;
}

function Blender_setDelta(val) {
	this.delta = val;
}

function Blender_setStartIndex(val) {
	this.startIndex = this.counter = val;
}

function Blender_setDelay(val) {
	this.delay = Math.max((100 / this.delta) * this.rate, val)
}

function Blender_setPopupWidth(val) {
	this.popupWidth = val;
}

function Blender_setPopupHeight(val) {
	this.popupHeight = val;
}

function Blender_setOverlay(val) {
	this.overlay = val;
}

function Blender_setOverlayOpacity(val) {
	this.overlayOpacity = val;
}

function Blender_setTransision(val) {
	this.transision = val;
}

function Blender_setTransisionDelay(val) {
	if (val == 0)
		this.transisionDelay = (100 / this.delta) * this.rate;
	else
		this.transisionDelay = val;
}

function Blender_setText(val) {
	this.text = val;
}

function Blender_setTextOpacity(val) {
	this.textOpacity = val;
}

function Blender_getMinDelay() {
	return (100 / this.delta) * this.rate;
}

function Blender_getArray() {
	return this.imageArray;
}

function Blender_getFadeObject() {
	return this.fadeObject;
}

function Blender_addPics() {
	for (i=0; i<(arguments.length/2); i++) {
		if (arguments[i*2] != "") {
			if (this.transision != '') {
				this.imageArray.push(new Image());
				this.imageArray[this.imageArray.length - 1].src = this.transision;
				this.linkArray.push("#");
			}
			this.imageArray.push(new Image());
			this.imageArray[this.imageArray.length - 1].src = arguments[i*2];
			if (arguments[i] != "")
				this.linkArray.push(arguments[i*2+1]);
			else
				this.linkArray.push("#");
		}
	}
}

function Blender_startFade() {
	setTimeout(this.instanceName + ".fadePic()", this.delay);
}

function Blender_pause() {
	this.moving = false;
}

function Blender_play() {
	this.moving = true;
}

function Blender_popupWin() {
	if (this.doPopup && this.enableLinks && (this.linkArray[this.counter] != "#")) {
		var newPopup = window.open(this.linkArray[this.counter], "blender_" + this.instanceName, "width=" + this.popupWidth + ", height=" + this.popupHeight + ", scrollbars=yes, resizable=yes, menubar=yes, toolbar=yes, location=yes");
		newPopup.focus();
	}
}

function Blender_restoreOpacity() {
	if (bw.ie4 || bw.ie5 || bw.ie6)
		this.fadeObject.filters.alpha.opacity = 100;
	else
		this.opacity = 90;
}

function Blender_fadePic() {
	eval(this.instanceName + ".doFade(this.pic_top,0," + this.rate + "," + this.delta + ");");
	if ((this.transision != '') && (this.counter % 2 == 0))
		delay = this.transitionDelay;
	else
		delay =  this.delay;
	setTimeout(this.instanceName + ".swopPic()", delay);
	return;
}

function Blender_doFade(object, destOp, rate, delta) {
	direction = 1;
	if (bw.ie4 || bw.ie5 || bw.ie6) {
		clearTimeout(this.fadeTimers);
		if (object.filters.alpha.opacity > destOp)
			direction = -1;
		object.filters.alpha.opacity += direction * delta;
	    if (object.filters.alpha.opacity != destOp){
			this.fadeObject = object;
			this.fadeTimers = setTimeout(this.instanceName + ".doFade(" + this.instanceName + ".getFadeObject(),"+destOp+","+rate+","+delta+")",rate);
	    }
	} else {
		if (object.style.MozOpacity > destOp)
	        direction = -1;
		this.fadeObject = object;
		if (this.opacity >= destOp) {
			object.style.MozOpacity = this.opacity / 100;
			this.opacity += direction * delta;
			this.fadeTimers = setTimeout(this.instanceName + ".doFade(" + this.instanceName + ".getFadeObject(),"+destOp+","+rate+","+delta+")", rate);
		}
	}
}

function Blender_swopPic() {
	document.links["linker"] = this.linkArray[this.counter*2+1]
	
	this.pic_top.src = this.imageArray[this.counter++].src;
	
	eval(this.instanceName + ".restoreOpacity()");
	
	if (this.counter == this.imageArray.length)
		this.counter = 0;
	
	if (this.counter == this.imageArray.length) {
		this.pic_bottom.src = this.imageArray[0].src;
		this.counter = 0;
	} else {
		this.pic_bottom.src = this.imageArray[this.counter].src;
	}

	eval(this.instanceName + ".fadePic();");
	return;
}

function Blender_write() {
	if (this.startIndex >= (this.imageArray.length - 1))
		this.startIndex = 0;
	
	this.counter = this.startIndex;
	
	document.write('<table cellpadding="0" cellspacing="0" border="0"><tr><td width="' + this.width + '" height="' + this.height + '" valign="top"><div style="position: relative;">');
	if (this.enableLinks)
		document.write('<div class="blender_onclick"><img src="images/shift.gif" width="' + this.width + '" height="' + this.height + '" alt="" border="0" id="' + this.instanceName + '_divtop" style="' + this.pointerStr + '" onclick="' + this.instanceName + '.popupWin()"></div>');
	if (this.text)
		document.write('<div class="blender_text" style="filter:alpha(opacity=' + this.textOpacity + '); -moz-opacity: ' + (this.textOpacity / 100) + ';">' + this.text + '</div>');
	if (this.overlay != "")
		document.write('<div class="blender_overlay"><img src="' + this.overlay + '" width="' + this.width + '" height="' + this.height + '" alt="" border="0" id="' + this.instanceName + '_overlay" style="filter:alpha(opacity=' + this.overlayOpacity + '); -moz-opacity: ' + (this.overlayOpacity / 100) + ';"></div>');
	document.write('<div class="blender_top"><img src="images/shift.gif" width="' + this.width + '" height="' + this.height + '" alt="" border="0" id="' + this.instanceName + '_pictop" style="filter:alpha(opacity=100); -moz-opacity: 0.99; ' + this.pointerStr + '"></div>');
	document.write('<div class="blender_bottom"><img src="images/shift.gif" width="' + this.width + '" height="' + this.height + '" alt="" border="0" id="' + this.instanceName + '_picbottom"></div>');
	document.write('</div></td></tr></table>');
	
	this.pic_top		= document.getElementById(this.instanceName + "_pictop");
	this.pic_bottom		= document.getElementById(this.instanceName + "_picbottom");
	
	this.pic_top.src = this.imageArray[this.startIndex].src;
	if (this.startIndex < this.imageArray.length) {
		this.pic_bottom.src = this.imageArray[this.startIndex + 1].src;
		this.counter++;
	} else {
		this.pic_bottom.src = this.imageArray[0].src;
		this.counter = 0;
	}
}

