/* --------------------------------------------------------------------------
							SS - Slide Show
					Developed by Simon Colmer X-Volt.com
					  Free to use if credits kept here
					  			  2009
								  
								  
				Add images manualy to the slideshow using the 
				SS.addImage(URL, Description, Thumbnail URL)
			
				View slideshow by SS.Show([optional image ID]);
	
	Add images to the slideshow by adding 'rel="SSWithAdd"' to a link to add
				the image to the slideshow and auto links
			
	Allow single images to be opened by adding 'rel="SSSingle"' to the link
			of image for automatic slideshow single view
			
	Allow open of gallery by adding 'rel="SSV1"' with URL pointing to the
			image that has been PRE added using another method
	
	Allow open of gallery by adding 'rel="SSV2:#"  # Being the ID of the image
			to open PRE ADDED
-------------------------------------------------------------------------- */

function SlideShow () {
	//Filename, Description, Thumbnail
    this.images = new Array();
    this.title = "Slideshow";
	this.divHold = null;
	this.divImage = null;
	this.divMessage = null;
	this.currentImage = 0;
	this.currentImageOriginalHeight = 0;
	this.currentImageOriginalWidth = 0;
	this.visible = false;
	
	this.Initialise = function() {
		//Container
		var cdiv = document.createElement('div');
		cdiv.id = "SlideShowHold";
		cdiv.className = "SlideShowContainer";
		cdiv.style.display = "none";
		
			//Background - child to container
			var SSDiv = document.createElement('div');
			SSDiv.id = "SlideShowBackground";
			SSDiv.className = "SlideShowBackground";
			
			//Image Change Div - child to container
			var SSImage = document.createElement('div');
			SSImage.id = "SlideShowImage";
			SSImage.className = "SlideShowImage";
		
		cdiv.appendChild(SSDiv);
		cdiv.appendChild(SSImage);
		
		document.getElementsByTagName('body')[0].appendChild(cdiv);
		
		this.divHold = document.getElementById("SlideShowHold");
		this.divImage = document.getElementById("SlideShowImage");
		this.PreloadImage("/images/ajax-loader.gif");
		
		//Process links
		var AnchorTags = document.body.getElementsByTagName("a");
		for(var i = 0; i < AnchorTags.length; i++){
			if(AnchorTags[i].rel.toUpperCase() == "SSWITHADD"){
				var tempInsert = new Array();
				tempInsert.push(AnchorTags[i].href);
				tempInsert.push(AnchorTags[i].href);
				tempInsert.push(AnchorTags[i].href);
				this.images.push(tempInsert);
				
				//AnchorTags[i].setAttribute('onclick', 'SS.Show("' + this.images.length + '");');
				AnchorTags[i].href = 'javascript: SS.Show("' + this.images.length + '");';
			}
			else if(AnchorTags[i].rel.toUpperCase() == "SSSINGLE"){
				if(this.images.length > 0) {
					//AnchorTags[i].setAttribute('onclick', 'SS.ShowImage("' + AnchorTags[i].href + '");');
					AnchorTags[i].href = 'javascript: SS.ShowImage("' + AnchorTags[i].href + '");';
				}
			}
			else if(AnchorTags[i].rel.substring(0, 5).toUpperCase() == "SSV2:"){
				$REL = AnchorTags[i].rel.substring(5);
				//AnchorTags[i].setAttribute('onclick', 'SS.Show("' + $REL + '");');
				AnchorTags[i].href = 'javascript: SS.Show("' + $REL + '");';
			}
			else if(AnchorTags[i].rel.toUpperCase() == "SSV1"){
				for(var j = 0; j < this.images.length; j++){	
					if(AnchorTags[i].href.substring((AnchorTags[i].href.length) - (this.images[j][0].length)).toUpperCase() == this.images[j][0].toUpperCase()){
						//AnchorTags[i].setAttribute('onclick', 'SS.Show("' + (j + 1) + '");');
						AnchorTags[i].href = 'javascript: SS.Show("' + (j + 1) + '");';
						break;
					}
				}
			}
		}
	};
	
	this.Show = function(image) {
		if(this.images.length > 0) {
			this.divHold.style.display = "inline";
			this.divHold.style.visibility = "visible";
			this.visible = true;
			this.goToImage(image);
			scroll(0,0);
		}
	};
	
	this.ShowWithImage = function(imageURL) {
		if(imageURL != "" && this.images.length > 0) {
				for(var i = 0; i < this.images.length; i++) {
					if(this.images[i][0].toUpperCase() == imageURL.toUpperCase()) {
						this.Show(i);
						break;
					}
				}
		}
	}
	
	this.Hide = function() {
		this.divHold.style.display = "none";
		this.divHold.style.visibility = "hidden";
		this.visible = false;
		this.currentImage = -1;
		while (this.divImage.childNodes.length >= 1)
			this.divImage.removeChild(this.divImage.firstChild);
	};
	
    this.addImage = function (imageLocation, imageName, imageThumbnail) {
		if(imageThumbnail == "" || imageThumbnail == 'undefined'){ imageThumbnail = imageLocation; }
        var tempInsert = new Array();
		tempInsert.push(imageLocation);
		tempInsert.push(imageName);
		tempInsert.push(imageThumbnail);
		this.images.push(tempInsert);
    };	
	
	this.ImageResize = function () {
		var img = document.getElementById("SlideShowImageObject");
		var CalcWidth = getSSWidth() * 0.8;
		var CalcHeight = getSSHeight() * 0.6;
		
		if(img != null) {
			if(this.currentImageOriginalWidth > CalcWidth || this.currentImageOriginalHeight > CalcHeight){
				img.width = this.currentImageOriginalWidth;
				img.height = this.currentImageOriginalHeight;
				while(img.height > CalcHeight || img.width > CalcWidth){
					if(img.width > CalcWidth){
						img.height = (CalcWidth * img.height) / (img.width);
						img.width = CalcWidth;	
					}
					
					if(img.height > CalcHeight){
						img.width = (CalcHeight * img.width) / (img.height);
						img.height = CalcHeight;
					}
				}
			}
		}
	};
	
	this.ImageOnload = function () {
		//alert("ImageOnload");
		if(SS.visible) {
			var CalcWidth = getSSWidth() * 0.9;
			var CalcHeight = getSSHeight() - 300;
			
			if(CalcWidth > 0 && CalcHeight > 0) {
			
				setSSImageWidths(this.width, this.height);
				
				while(this.height > CalcHeight || this.width > CalcWidth){
					if(this.width > CalcWidth){
						this.height = (CalcWidth * this.height) / (this.width);
						this.width = CalcWidth;	
					}
					
					if(this.height > CalcHeight){
						this.width = (CalcHeight * this.width) / (this.height);
						this.height = CalcHeight;
					}
				}
				HidePW();
			}
			else
				alert("Error, did you forget to add the style sheet?");
		}
	};
	
	this.ImageOnloadSmall = function () {
		//alert("ImageOnloadSmall");
		var CalcWidth = 100;
		var CalcHeight = 100;
		while(this.height > CalcHeight || this.width > CalcWidth){
			if(this.width > CalcWidth){
				this.height = (CalcWidth * this.height) / (this.width);
				this.width = CalcWidth;	
			}
			
			if(this.height > CalcHeight){
				this.width = (CalcHeight * this.width) / (this.height);
				this.height = CalcHeight;
			}
		}
		opacity(this.id, 30, 100, 200);
	};
	
	this.ImageShow = function () {
		var img = document.getElementById("SlideShowImageObject");
		img.style.visibility = "visible";
		img.style.display = "inline";
		
		opacity("SlideShowImageObject", 80, 100, 200);
		//changeOpac(0 , "SlideShowImageObject");
		//shiftOpacity("SlideShowImageObject", 200);
	}
	
	this.ShowImage = function (image) {
		this.divHold.style.display = "inline";
		this.divHold.style.visibility = "visible";
		
		while (this.divImage.childNodes.length >= 1)
      				this.divImage.removeChild(this.divImage.firstChild);

		var Table = document.createElement('table');
		Table.align = "center";
		Table.width = "100%";
		Table.border = 0;
		//Table.class = "SSMainTable";
		
		var TBody = document.createElement('tbody');
		
		var tr = document.createElement('tr');
		var td = document.createElement('td');
		var a = document.createElement('a');
		a.href = "javascript: SS.Hide();";
					
		//Create image
		var img = new Image();
		img.id = "SlideShowImageObject";
	
		img.style.visibility = "hidden";
		img.style.display = "none";
		img.onload = this.ImageOnload;
		img.src = image;
		img.title = image;
		img.alt = image;
		img.border = 0;
		
		a.appendChild(img);
		td.appendChild(a);
		
		//Create please wat image
		var PW = new Image();
		PW.id = "SlideShowImagePW";
		PW.src = "/images/ajax-loader.gif";
		PW.style.margin = "50";
		
		td.appendChild(PW);
		tr.appendChild(td);
		TBody.appendChild(tr);
				
		
		tr = document.createElement('tr');
		td = document.createElement('td');
		a = document.createElement('a');
		a.href = "javascript: SS.Hide();";
		a.innerHTML = "Close";
		td.appendChild(a);
		tr.appendChild(td);
		TBody.appendChild(tr);
		
		tr = document.createElement('tr');
		
		TBody.appendChild(tr);
		Table.appendChild(TBody);
		this.divImage.appendChild(Table);
	};

	this.goToImage = function (image) {
		
		image = parseInt(image);
		if(image == 0 || isNaN(image) || image == 'undefined'){ image = 1; }
		
		if(image != this.currentImage) {
		
			if(this.images.length > 0){
				if(image <= this.images.length){
					while (this.divImage.childNodes.length >= 1)
						this.divImage.removeChild(this.divImage.firstChild);
	
					var DivWrapper = document.createElement('div');
					DivWrapper.id = "SlideShowWrapper";
	
					var Table = document.createElement('table');
					Table.align = "center";
					Table.width = "100%";
					Table.border = 0;
					
					var TBody = document.createElement('tbody');
					
					var tr = document.createElement('tr');
					var td = document.createElement('td');
					td.colSpan = 2;
					var a = document.createElement('a');
					a.href = this.images[image - 1][0];
					a.target = "_blank";
								
					//Create image
					var img = new Image();
					img.id = "SlideShowImageObject";
	
					img.style.visibility = "hidden";
					img.style.display = "none";
					img.onload = this.ImageOnload;
					img.src = this.images[image - 1][0];
					img.title = this.images[image - 1][1];
					img.alt = this.images[image - 1][1];
					img.border = 0;
					
					a.appendChild(img);
					td.appendChild(a);
					
					//Create please wat image
					var PW = new Image();
					PW.id = "SlideShowImagePW";
					PW.src = "/images/ajax-loader.gif";
					PW.style.margin = "100px";
					
					td.appendChild(PW);
					tr.appendChild(td);
					TBody.appendChild(tr);
					Table.appendChild(TBody);		
							
					DivWrapper.appendChild(Table);
						
					var Table = document.createElement('table');
					Table.align = "center";
					Table.width = "400px";
					Table.border = 0;
					Table.bgColor = "#FFFFFF";
					Table.style.borderWidth = "1px";
					Table.style.borderStyle = "solid";
					Table.style.borderColor = "#000000";
							
					TBody = document.createElement('tbody');
					
					//Image Description
					tr = document.createElement('tr');
					td = document.createElement('td');
					
					var P = document.createElement("p");
					P.innerHTML = this.images[image - 1][1];
					
					td.colSpan = 2;
					td.align = "center";
					td.appendChild(P);
					tr.appendChild(td);
					TBody.appendChild(tr);
					
					//Create text links
					tr = document.createElement('tr');
					td = document.createElement('td');
					
					//Start Link
					td.align = "right";
					td.style.paddingRight = "20px";
					a = document.createElement('a');
					a.href = "javascript: SS.goToImage(1);";
					a.innerHTML = "&lt;- Start";
					td.appendChild(a);
					
					var Spacer = document.createElement("span");
					Spacer.innerHTML = " &nbsp; &nbsp; &nbsp; &nbsp;";
					td.appendChild(Spacer);
					
					//Back Link
					a = document.createElement('a');
					a.href = "javascript: SS.Back();";
					a.innerHTML = "Back";
					td.appendChild(a);
					tr.appendChild(td);
					
					//Next Link
					td = document.createElement('td');
					td.align = "left";
					td.style.paddingLeft = "20px";
					a = document.createElement('a');
					a.href = "javascript: SS.Next();";
					a.innerHTML = "Next";

					td.appendChild(a);
					
					//End Link
					a = document.createElement('a');
					a.href = "javascript: SS.goToImage(" + this.images.length + ");";
					a.innerHTML = "End -&gt;";
					
					
					var Spacer = document.createElement("span");
					Spacer.innerHTML = " &nbsp; &nbsp; &nbsp; &nbsp;";
					td.appendChild(Spacer);
					td.appendChild(a);
					
					tr.appendChild(td);
					TBody.appendChild(tr);
					
					tr = document.createElement('tr');
					td = document.createElement('td');
					
					//Hide/Close Link
					td.colSpan = 2;
					td.style.paddingBottom = "10px"; 
					td.innerHTML = image + "/" + this.images.length + "<p>";
					a = document.createElement('a');
					a.href = "javascript: SS.Hide();";
					a.innerHTML = "Close";
					td.appendChild(a);
					tr.appendChild(td);
					TBody.appendChild(tr);
					
					Table.appendChild(TBody);	
					DivWrapper.appendChild(Table);
					
					//Footer/Thumbs
					var DivPush = document.createElement("div");
					DivPush.id = "SlideShowPush";
					
					DivWrapper.appendChild(DivPush);
					this.divImage.appendChild(DivWrapper);
					
					Table = document.createElement('table');
					Table.align = "center";
					Table.width = "100%";
					Table.border = 0;
					
					TBody = document.createElement('tbody');
									
					tr = document.createElement('tr');
					
					for(var i = 0; i < 5; i++){
						td = document.createElement('td');
						td.width = "20%";
						
						try{
							if(this.images[image - 3 + i][0] != null || this.images[image - 3 + i][2] != null)
							{
								img = new Image();
								img.id = "uxSSThumb" + i;
								img.onload = this.ImageOnloadSmall;
								img.style.visibility = "hidden";
								img.style.display = "none";
								if(this.images[image - 3 + i][2] != null)
									img.src = this.images[image - 3 + i][2];
								else
									img.src = this.images[image - 3 + i][0];
								
								a = document.createElement('a');
								a.href = "javascript: SS.Show(" + (image - 2 + i) + ");";
								a.appendChild(img);
								
								td.appendChild(a);
							}
						}
						catch(err){
							td.innerHTML = "&nbsp;";
						}
						
						if(i == 3)
							td.colSpan = 2;
							
						tr.appendChild(td);
					}
					
					TBody.appendChild(tr);
					Table.appendChild(TBody);
					
					var DivFooter = document.createElement("div");
					DivFooter.id = "SlideShowFooter";
					DivFooter.appendChild(Table);
					
					this.divImage.appendChild(DivFooter);
					this.divImage.appendChild(document.createElement("p"));
					//this.divImage.innerHTML = this.divImage.innerHTML + " ";
					
					this.currentImage = image;
					if(image < this.images.length)
						this.PreloadImage(this.images[image][0]);
				}
				else
					this.goToImage(0);
			}
		}
	};
	
	this.Next = function () {
		var Temp = this.currentImage + 1;
		
		if(Temp <= this.images.length)
			this.goToImage(Temp);
	};
	
	this.Back = function () {
		var Temp = this.currentImage - 1;
		
		if(Temp > 0)
			this.goToImage(Temp);
	};

	this.PreloadImage = function (ImageURL) {
			if(ImageURL == 'undefined'){ ImageURL = ""; }
			var Temp = new Image();
			Temp.src = ImageURL;
	}
}

function getSSHeight(){
	return SS.divImage.offsetHeight;
}

function getSSWidth(){
	return SS.divImage.offsetWidth;
}

function HidePW(){
	var PW = document.getElementById("SlideShowImagePW");
	if(PW != null){
		PW.style.visibility = "hidden";
		PW.style.display = "none";
		SS.ImageShow();
	}
	else
		setTimeout("HidePW()", 200);
}

function setSSImageWidths(Width, Height){
	SS.currentImageOriginalWidth = Width;
	SS.currentImageOriginalHeight = Height;
}

function opacity(id, opacStart, opacEnd, millisec) {
    //speed for each frame
	if(document.getElementById(id) == null) {
		setTimeout("opacity('" + id + "'," + opacStart + "," + opacEnd + "," + millisec + ")", 20);
	}
	else {
		changeOpac(opacStart , id);
		document.getElementById(id).style.visibility = "visible";
		document.getElementById(id).style.display = "inline";
		
		var speed = Math.round(millisec / 100);
		var timer = 0;
	
		//determine the direction for the blending, if start and end are the same nothing happens
		if(opacStart > opacEnd) {
			for(i = opacStart; i >= opacEnd; i--) {
				setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
				timer++;
			}
		} else if(opacStart < opacEnd) {
			for(i = opacStart; i <= opacEnd; i++)
				{
				setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
				timer++;
			}
		}
	}
}

function changeOpac(opacity, id) {
	var object = document.getElementById(id);
	
	if(object != null) {
		object = object.style;
		object.opacity = (opacity / 100);
		object.MozOpacity = (opacity / 100);
		object.KhtmlOpacity = (opacity / 100);
		object.filter = "alpha(opacity=" + opacity + ")";
	}
} 

function shiftOpacity(id, millisec) {
    //if an element is invisible, make it visible, else make it ivisible
    if(document.getElementById(id).style.opacity == 0) {
        opacity(id, 0, 100, millisec);
    } else {
        opacity(id, 100, 0, millisec);
    }
} 

var SS = new SlideShow();

var oldEvt = window.onload;

window.onload = function() {
	if (oldEvt) oldEvt();
		SS.Initialise();
	} 
	
var oResize = window.onresize;
window.onresize = function() {
	if (oResize) oResize();
		SS.ImageResize();
	}

