/* This slideshow is based off of the 'SimpleSlideShow' Mootools tutorial written by Aaron Newton
The original code and tutorial can be found here: http://clientside.cnet.com/wiki/mootoolsfullhtmlexample */
var Tour = new Class({
	options: {
		startIndex: 0,
		slides: [],
		currentIndexContainer: false,
		maxContainer: false,
		nextLink: false,
		prevLink: false,
		subMenu: false,
		wrap: false, 
		subMenu: false,
		disabledLinkClass: 'hidden', 
		onNext: Class.create(),
		onPrev: Class.create(),
		onSlideClick: Class.create(),
		crossFadeOptions: {}
	},
	
	// load new options
	initialize: function(options){
		this.setOptions(options);
		this.slides = this.options.slides;
		this.makeSlides();
		this.setCounters();
		this.setUpNav();
	},
	
	setCounters: function(){
		if($(this.options.currentIndexContainer)) {
			$(this.options.currentIndexContainer).setHTML(this.now+1);
		}
		if($(this.options.maxContainer)) {
			$(this.options.maxContainer).setHTML(this.slides.length);
		}
	},
	makeSlides: function(){
		this.now = $pick(this.now, this.options.startIndex);
		this.slides.each(function(slide, index){
			if(index != this.now) {
				$(slide).setStyle('display', 'none');
			} else {
				$(slide).setStyle('display', 'block');
			}
		}, this);
		this.highlightSubNav();
	},
	
	setUpNav: function(){	
		// add next/prev links
		if($(this.options.nextLink)) {
			$(this.options.nextLink).addEvent('click', function(){
				this.cycleForward();
			}.bind(this));
		}
		if($(this.options.prevLink)) {
			$(this.options.prevLink).addEvent('click', function(){
				this.cycleBack();
			}.bind(this));
		}
		this.hideShowNav();
		
		// Add events to index links
		$$('#tourSub a').each(function(link, index){
			link.addEvent('click', function(){
				this.showSlide(index);
			}.bind(this));
		}, this);		
		
		// Show submenu
		if($(this.options.subMenu)) {
			$(this.options.subMenu).addClass(this.options.subMenu);
		}		
	},
	
	cycleForward: function(){
		if($type(this.now) && this.now < this.slides.length-1) {
			this.showSlide(this.now+1);
		} else if($type(this.now) && this.options.wrap) {
			this.showSlide(0);
		} else {
			this.showSlide(this.options.startIndex);
		}
		
		if(this.now == this.slides.length && !this.options.wrap && $(this.options.nextLink)) {
			$(this.options.nextLink).addClass(this.options.disabledLinkClass);
		} else if ($(this.options.nextLink)) {
			$(this.options.nextLink).removeClass(this.options.disabledLinkClass);
		}
	},
	
	cycleBack: function(){
		if(this.now > 0) {
			this.showSlide(this.now-1);
		} else if (this.options.wrap) {
			this.showSlide(this.slides.length-1);
		}
		this.fireEvent('onPrev');
		if(this.now == 0 && !this.options.wrap && $(this.options.prevSlide)) {
			$(this.options.prevSlide).addClass(this.options.disabledLinkClass);
		} else if ($(this.options.prevSlide)) {
			$(this.options.prevSlide).removeClass(this.options.disabledLinkClass);
		}
	},
	
	hideShowNav: function() {
		if(this.now == 0 && !this.options.wrap && $(this.options.prevLink)) {
			$(this.options.prevLink).setStyles({ 'display':'none','opacity':0 })
		} else if ($(this.options.prevLink)) {
			$(this.options.prevLink).setStyles({ 'display':'inline','opacity':100 })
		}
		if(this.now == this.slides.length-1 && !this.options.wrap && $(this.options.nextLink)) {
			$(this.options.nextLink).setStyles({ 'display':'none','opacity':0 })
		} else if ($(this.options.prevLink)) {
			$(this.options.nextLink).setStyles({ 'display':'inline','opacity':100 })
		}
	},
	
	highlightSubNav: function(){
		$$('#tourSub a').each(function(link, index){
			if (!this.now && index == this.options.startPage) {
				link.addClass('Highlight');
			} else if (index == this.now) {
				link.addClass('Highlight');
			} else {
			link.removeClass('Highlight');
			}
		}, this);	
	},
	
	showSlide: function(iToShow){
		var now = this.now; //track current
		if(this.slides[iToShow]) { // if there is a slide
			if($type(this.now) && this.now != iToShow){ // and we are not already showing it
				// fade out
				$(this.slides[this.now]).effect('opacity', this.options.crossFadeOptions).start(0).chain(function(){
					$(this.slides[now]).setStyle('display','none'); // set display to none
					// show slide with no opacity
					$(this.slides[iToShow]).addClass(this.options.currentSlideClass).setStyles({
						'display':'block',
						'opacity':0
					// and fade it in	
					}).effect('opacity', this.options.crossFadeOptions).start(1);
				}.bind(this)); 
			// First time condition (nothing to fade out)
			} else $(this.slides[iToShow]).setStyles({
						'display':'block',
						'opacity':0
					}).effect('opacity', this.options.crossFadeOptions).start(1);
			this.now = iToShow;
			this.setCounters();
			this.hideShowNav();
			this.highlightSubNav();
			location.hash = "tour"+(this.now+1);
		}
	}
});
Tour.implement(new Events);
Tour.implement(new Options);

function showSubnav(id, toClass) {
	element = document.getElementById(id);
    if(element.className == "hidden") {
        element.className = toClass;
    } else {
		element.className = "hidden";
    }
} 

function opacity(id, opacStart, opacEnd, millisec) { 
    //speed for each frame 
    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++; 
        } 
    } 
} 

//change the opacity for different browsers 
function changeOpac(opacity, id) { 
    var object = document.getElementById(id).style; 
    object.opacity = (opacity / 100); 
    object.MozOpacity = (opacity / 100); 
    object.KhtmlOpacity = (opacity / 100); 
    object.filter = "alpha(opacity=" + opacity + ")"; 
} 

function pausecomp(millis) {
	var date = new Date();
	var curDate = null;
	
	do { curDate = new Date(); }
	while(curDate-date < millis);
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

// Ajax function
function getContent(url,objectID,iconState) {
	var object = document.getElementById(objectID);
	var request;
	
	// Get 
	if(window.XMLHttpRequest) { request=new XMLHttpRequest();  // Firefox, Opera 8.0+, Safari
	} else if (window.ActiveXObject) { request=new ActiveXObject("Msxml2.XMLHTTP");  // Internet Explorer
	} else { return false; } //Non-AJAX Browser
	request.onreadystatechange=function() {
		object.innerHTML = request.responseText;
	}	

	if (iconState == 'hideIcons') { 
		iconHtml = document.getElementById('icons').innerHTML;
		document.getElementById('icons').innerHTML = ""; 
		document.getElementById('top_nav').innerHTML = ""; 
	}
	request.open("GET",url,true);
	request.send(null);
}

function goTo(newpage) {
	window.location="tour.php#tour"+page;
	setTimeout("window.location.reload(true)",100);
	//var oog = Tour.showSlide(page);
}
