//////////////////////////////////////////////////////////////////////////
//																		//
//		Standalone Photo Slideshow										//
//		Copyright 2011, James Clarke - Adnet Communications				//	
//																		//
//////////////////////////////////////////////////////////////////////////


addLoadEvent( function(){
									 
	function $(pass){
		return document.getElementById(pass);	
	}								 
	function $$(id,el,elClass){
		var me = document.getElementById(id);
			me = me.getElementsByTagName(el);
		var out = new Array;	
			if(elClass){
				for(i in me){
					if(me[i].className == elClass) out.push(me[i]);
				}
			}else{
				out = me;	
			}
			return out;
	}

	var rate = 7000; //animation delay in milliseconds
	var dur = 1500;
	var photos = $$("slideshow","div","slide");
	var buttons = new Array();
	var fx = new Array();
	
	for (i=0; i<photos.length; i++){
		
		var item = photos[i];
			item.style.visibility = 'hidden';
			
		fx.push( photos[i] );
		var but = document.createElement('a');
			but.className = 'button';
			but.href = "#";
			
			but.innerHTML = (i+1);
			with({i:i}){
				but.onclick = function(){
					
						stopAnim();
						buttons[last].className = 'button';
						anim(fx[i],0,1);
						
						if((last != -1)&&(last != i)){
						//  anim(fx[last],1,0);
						}
						
						last = i;
						buttons[last].className = 'button activeBut';
				}
			}
			
			buttons.push(but);
			$("navBtns").appendChild(but);
	}
	
	
	// Animation functionality	
	var last = -1;
	var inty;
	var curEl;
	var frameRate;
	var curStart;
	var curTar;
	var cur;
	var animArray = new Array();
	
	function anim(el,start,target){
		
		var node = $("slideshow").removeChild(el);
			el.style.visibility = "hidden";
 			el = $("slideshow").appendChild(node);
	//		
		var nav = $("slideshow").removeChild($('navCont'));
			nb = $("slideshow").appendChild(nav);
	//		
			animArray.push(new tween(el,start,target));	
			if(animArray.length > 5)animArray.shift();
			
	}
	
	function tween(el,start,target){
		
			this.cur = start;
			this.curStart = start;
			this.curTar = target;
			
			if(document.all){
				el.style.filter = "alpha(opacity="+start*100+")";
			}else{
				el.style.opacity = start;	
			}
			el.style.visibility = 'visible';
			
			var me = this;
			this.frameRate = setInterval(function(){ step(el,me)},30);
			
			function step(el,caller){
				//set
				if(document.all){
					el.style.filter = "alpha(opacity="+caller.cur*100+")";	
				}else{
					el.style.opacity = caller.cur;
				}
								
				//clear when done
				if(caller.cur>=caller.curTar){
					clearInterval(caller.frameRate);
					if(caller.curStart==1) el.style.visibility = 'hidden';
					delete caller;
				}else{
				// or increment
					if(caller.curStart==0) caller.cur += .05;
					if(caller.curStart==1) caller.cur -= .05;
				}
			}
			
	}
	
	function startAnim(){
		anim(fx[0],0,1);
		last = 0;
		inty = setInterval(advance, rate);
	}
	
	function stopAnim(){
		clearInterval(inty);
		clearInterval(frameRate);
	}
	function advance(){
		
		buttons[last].className = 'button';
		
		if(last >= fx.length-1){
			//anim(fx[last],1,0);
			last = 0;
		}else{
			//anim(fx[last],1,0);
			last++;
		}
		anim(fx[last],0,1);
		
		buttons[last].className = 'button activeBut';
	}
	
	startAnim();
	buttons[0].className = 'button activeBut';

} );

function addLoadEvent(func) { 
	  var oldonload = window.onload; 
	  if (typeof window.onload != 'function') { 
	    window.onload = func; 
	  } else { 
	    window.onload = function() { 
	      if (oldonload) { 
	        oldonload(); 
	      } 
	      func(); 
	    } 
	  } 
	} 
	 
