// JavaScript Document
function OpacityClass() {
	var OpacValue;
	var _element;
	this.setOpac = function(value, element) {
		OpacValue = value;
		if (typeof(element) != 'object') {
		_element = document.getElementById(element);
		} else {
			_element = element;	
		}
		setOpacValue();
	};
	this.getOpacValue = function(element) {
		if (TypeOf(element) != 'object') {
			_element = document.getElementById(element);
		} else {
			_element = element;	
		}
		if (_element.style.opacity)
			return nav.Int(_element.style.opacity);
		else if (_element.style.MozOpacity)
			return nav.Int(_element.style.MozOpacity);
		else if (_element.style.KhtmlOpacity)
			return nav.Int(_element.style.KhtmlOpacity);
		else if (_element.style.filter)
			return nav.Int(_element.style.filter);
	};
	var setOpacValue = function() {
		_element.style.opacity = (OpacValue / 100);
		_element.style.MozOpacity = (OpacValue / 100);
		_element.style.KhtmlOpacity = (OpacValue / 100);
		_element.style.filter = "alpha(opacity=" + OpacValue + ")";
	};
}
var SlideShow = new function() {
	this.slideDiv = null;
	this.proc = 'ready';
	this.loadProc = 'done';
	this.blinkProc = 'done';
	this.opac = 0;
	this.numImg = 0;
	this.imgs = null
	this.imgLoaded = 0;
	this.slideImgs = [];
	this.activeImg = 0;
	this.nextImg = 0;
	this.auto = null;
	this.slideTimer = 0;
	this.slideWidth = null;
	this.slideHeight = null;
	this.loadDiv = null;
	this.statusInterval = null;
	this.tranInterval = null;
	this.loadInterval = null;
	this.loadStatusInterval = null;
	this.slideShowInterval = null;
	this.blinkInterval = null;
	this.loadImg = null;
	this.Opac = null;
	this.slideBut = null;
	this.selectBut = null;
	this.loadTimeout = 0;
	this.nextLoad = 0;
	this.init = function() {
		var self = SlideShow;
		self.Opac = new OpacityClass();
		self.slideTimer = SLIDE_TIMER*1000;
		self.imgs = SLIDE_IMG, self.numImg = self.imgs.length;
		if (SLIDE_WIDTH && SLIDE_HEIGHT) {
			self.slideWidth = SLIDE_WIDTH;
			self.slideHeight = SLIDE_HEIGHT;
		}
		var parentDiv = document.getElementById(SLIDE_DIV);
		parentDiv.style.position = 'relative';
		var imageDiv = document.createElement('div');
		imageDiv.id = 'slide-images-div';
		imageDiv.style.position = 'absolute';
		parentDiv.appendChild(imageDiv);
		self.slideDiv = document.getElementById('slide-images-div');
		var loadDiv = null
		loadDiv = document.createElement('div');
		loadDiv.id = 'slideLoadingDiv';
		loadDiv.style.position = 'absolute';
		loadDiv.style.zIndex = 3;
		parentDiv.appendChild(loadDiv);
		self.auto = SLIDE_AUTO;
		self.selectBut = SLIDE_SELECTOR;
		self.slideBut = SLIDE_BUTTON;
		self.loadDiv = document.getElementById('slideLoadingDiv');
		self.loadImg = new Image();
		self.loadImg.src = 'ajax-loader.gif';
		self.loadInterval = setInterval(self.loadImgs, 1000);
	};
	this.createSelectButtons = function() {
		var self = SlideShow;
		var selDiv = document.createElement('div');
		selDiv.id = 'select-button-div';
		selDiv.style.position = 'absolute';
		selDiv.style.bottom = '40px';
		selDiv.style.right = '5px';
		selWidth = self.numImg*9;
		selDiv.style.width = selWidth + 'px';
		for (i=0;i<self.numImg;i++) {
		itemDiv = document.createElement('div');
		itemDiv.style.cssFloat = 'left';
		itemDiv.style.styleFloat = 'left';
		itemDiv.style.padding = '2px';
		itemButDiv = document.createElement('div');
		itemButDiv.style.backgroundColor = 'red';
		itemButDiv.style.width = '5px';
		itemButDiv.style.height = '5px';
		itemButDiv.style.fontSize = '5px';
		itemDiv.appendChild(itemButDiv);
		itemDiv.id = 'slide-select-button-'+i;
		itemDiv.onclick = new Function("SlideShow.setImage('"+i+"')");
		if (i == self.activeImg)
			self.Opac.setOpac(80, itemDiv);
		else
			self.Opac.setOpac(30, itemDiv);
		selDiv.appendChild(itemDiv);
		}
		selDiv.style.zIndex = 3;
		selDiv.style.cursor = 'pointer';
		self.slideDiv.parentNode.appendChild(selDiv);
		self.selectBut = document.getElementById('select-button-div');
	};
	this.keyCheck = function(e) {
		var self = SlideShow;
		if (!e) 
			e = window.event;
		var key = e.keyCode;
		var next = self.activeImg;
		if (key == 39) {
			next++;
			self.setImage(next);
		} else if (key == 37) {
			next--;
			self.setImage(next);
		}
	}
	this.cleanup = function() {
		var self = SlideShow;
		self.slideDiv = null;
		self.loadDiv = null;
	};
	this.loadImgs = function() {
		var self = SlideShow;
		if (self.imgLoaded < self.numImg) {
			var imgAdded = self.slideImgs.length;
			if (self.loadProc == 'done') {
				self.loadProc = 'loading';
				self.slideImgs[imgAdded] = new Image();
				self.slideImgs[imgAdded].src = self.imgs[self.nextLoad];
				if (self.slideWidth && self.slideHeight) {
					self.slideImgs[imgAdded].width = self.slideWidth;
					self.slideImgs[imgAdded].height = self.slideHeight;
				}
				if (imgAdded == 0 && self.proc =='ready') {
					self.proc = 'loading';
					self.startLoadAnim();
				} else {
					if (self.selectBut)
						self.startBlinkAnim();
				}
			} else {
				if (self.isLoaded(self.slideImgs[imgAdded-1])) {
					if (imgAdded == 1) {
						self.setImage(imgAdded-1);
						if (self.slideBut)
							self.createSlideButton();
						if (self.selectBut)
							self.createSelectButtons();
						if (self.auto) {
							self.startShow();
						} else {
							if (self.slideBut) {
								self.stopShow();
							}
						}
					} else {
					if (self.selectBut)
						self.stopBlinkAnim();
					}
					self.loadProc = 'done';	
					self.imgLoaded++;
					self.nextLoad++;
				} else {
					//if (self.loadTimeout < 10) {
					//	self.loadTimeout++;
					//	self.startBlinkAnim();
					//} else {
						//	alert(self.slideImgs[imgAdded-1].src + ' Image is broken');
					//	self.loadProc = 'done';	
					//	if (self.selectBut)
					//	self.stopBlinkAnim();
					//	self.loadTimeout = 0;
					//	self.imgLoaded++;
					//	self.nextLoad++;
					//}
					return;
				}
			}
		} else {
			if (self.proc != 'show')
				self.proc = 'done';
			self.stopBlinkAnim();
			clearInterval(self.loadInterval);
		}
	};
	this.setKeyEvent = function() {
		var self = SlideShow;
		document.onkeyup = self.keyCheck;
	};
	this.clearKeyEvent = function() {
		document.onkeyup = null;
	};
	this.setImage = function(img) {
		var self = SlideShow;
		var nextImg = null;
		if (img < 0)
			img = self.numImg-1;
		else if (img >= self.numImg)
			img = 0;
		if (img > self.imgLoaded)
			return;
		if (self.isLoaded(self.slideImgs[img])) {
		self.clearKeyEvent();
		if (self.proc == 'show') {
			self.proc = 'busy';
			self.stopShow();
		} else if (self.proc =='busy')
			return;
		nextImg = document.createElement('img');
		nextImg.src = self.slideImgs[img].src;
		nextImg.width = self.slideImgs[img].width;
		nextImg.height = self.slideImgs[img].height;
		nextImg.style.position = 'absolute';
		nextImg.style.top = '0px';
		nextImg.style.left = '0px';
		nextImg.style.zIndex = 1;
		self.Opac.setOpac(0,nextImg);
		self.slideDiv.parentNode.style.width = nextImg.width+'px';
		self.slideDiv.parentNode.style.height = nextImg.height+'px';
		self.slideDiv.insertBefore(nextImg, self.slideDiv.firstChild);
		self.nextImg = img;
		self.startChange();
		}
	};
	this.isLoaded = function(img) {
	    if (!img.complete) {
	        return false;
	    }
	    if (typeof img.naturalWidth != "undefined" && img.naturalWidth == 0) {
	        return false;
	    }
	    return true;
	};
	this.createSlideButton = function() {
		var self = SlideShow;
		var slideBut = document.createElement('div');
		slideBut.id = 'slide-button';
		slideBut.style.padding = '3px';
		slideBut.style.backgroundColor = '#ffffff';
		self.Opac.setOpac(40,slideBut);
		slideBut.style.position = 'absolute';
		slideBut.style.zIndex = 3;
		slideBut.style.textAlign = 'center';
		slideBut.style.fontWeight = 'bold';
		slideBut.style.fontFamily = 'arial';
		slideBut.style.fontSize = '18px';
		slideBut.style.cursor = 'pointer';
		slideBut.innerHTML = '';
		self.slideDiv.parentNode.appendChild(slideBut);
		self.slideBut = document.getElementById('slide-button');
		self.setButPos();
		if (self.auto) {
			self.lockSlideShowBut();	
		} else {
			self.slideBut.onclick = new Function("self.startShow();self.lockSlideShowBut();");
		}
	};
	this.lockSlideShowBut = function() {
		var self = SlideShow;
		self.slideBut.onclick = null;
		self.slideBut.onmouseover = self.stopShow;
		self.slideBut.onmouseout = self.startShow;
	}
	this.setButPos = function() {
		var self = SlideShow;
		self.slideBut.style.right = '10px';
		self.slideBut.style.bottom = '10px';
	};
	this.startLoadAnim = function() {
		var self = SlideShow;
		self.doLoadAnim();
		self.loadStatusInterval = setInterval(self.doLoadAnim,200);
	};
	this.doLoadAnim = function() {
		var self = SlideShow;
		var width = self.slideImgs[self.activeImg].width;
		var height = self.slideImgs[self.activeImg].height;
		var topPos = (height/2)-(self.loadImg.width/2);
		var leftPos = (width/2)-(self.loadImg.height/2);
		if (self.proc == 'loading') {
		if (!document.getElementById('slide-loading-image')) {
		var loadImg = null;
		loadImg = document.createElement('img');
		loadImg.src = self.loadImg.src;
		loadImg.id = 'slide-loading-image';
		self.loadDiv.style.top = topPos+'px';
		self.loadDiv.style.left = leftPos+'px';
		self.loadDiv.appendChild(loadImg);
		} else {
			return;	
		}
		} else if (self.proc != 'loading') {
			self.loadDiv.innerHTML = '';
			clearInterval(self.loadStatusInterval);
		}
	};
	this.startChange = function() {
		var self = SlideShow;
		self.tranInterval = setInterval(self.doChange, 50);
	};
	this.startShow = function() {
		var self = SlideShow;
		self.clearKeyEvent();
		if (self.slideBut && self.proc != 'busy') {
			self.slideBut.innerHTML = 'PAUSE';
			self.slideBut.style.color = '#000000';
		}
		self.proc = 'show';
		self.slideShowInterval = setInterval(self.doSlideShow, self.slideTimer);
	};
	this.doSlideShow = function() {
		var self = SlideShow;
		if (self.proc == 'show') {
			var next = self.activeImg;
			next++;
			self.setImage(next);
		} else if (self.proc == 'done') {
			return;
		} else {
			return;
		}
	};
	this.stopShow = function() {
		var self = SlideShow;
		if (self.slideBut && self.proc != 'busy') {
			self.slideBut.innerHTML = 'PAUSE';
			self.slideBut.style.color = 'red';
			self.proc = 'done';
			self.setKeyEvent();
		}
		clearInterval(self.slideShowInterval);
	};
	this.doChange = function() {
		var self = SlideShow;
		if (self.opac >= 100) {
			self.opac = 0;
			if (self.imgLoaded > 1) {
				if (self.selectBut) {
				self.Opac.setOpac(30,document.getElementById('slide-select-button-'+self.activeImg));
				self.Opac.setOpac(80,document.getElementById('slide-select-button-'+self.nextImg));
				}
				self.slideDiv.removeChild(self.slideDiv.lastChild);
			}
			self.activeImg = self.nextImg;
			self.slideDiv.firstChild.style.zIndex = 2;
			if (self.proc != 'busy' && self.proc != 'show')
				self.setKeyEvent();
			else
				self.startShow();
			clearInterval(self.tranInterval);
			return;
		}
		self.opac += 10;
		self.upElement();
		if (self.imgLoaded > 1)
			self.downElement();
	};
	this.upElement = function() {
		var self = SlideShow;
		element = self.slideDiv.firstChild;
		newopac = self.opac;
		self.Opac.setOpac(newopac, element);
	};
	this.downElement = function() {
		var self = SlideShow;
		element = self.slideDiv.lastChild;
		newopac = 100 - self.opac;
		self.Opac.setOpac(newopac, element);
	};
	this.startBlinkAnim = function() {
		var self = SlideShow;
		self.blinkProc = 'loading';
		self.blinkInterval = setInterval(self.blinker, 150);
	};
	this.stopBlinkAnim = function() {
		var self = SlideShow;
		clearInterval(self.blinkInterval);
		if (self.loadProc == 'loading') {
			self.blinkProc = 'done';
			self.blinker(true);
		}
	};
	this.blinker = function() {
		var self = SlideShow;
		if (self.imgLoaded < self.numImg) {
		ele = document.getElementById('slide-select-button-'+self.imgLoaded);
		if (ele.style.visibility == 'visible' && self.blinkProc != 'done') {
			ele.style.visibility = 'hidden';
		} else {
			ele.style.visibility = 'visible';
		}
		}
	};
}
window.onload = SlideShow.init;
window.onunload = SlideShow.cleanup;