//** Featured Content Slider script-  Dynamic Drive DHTML code library (http://www.dynamicdrive.com)
//** Last updated: Nov 3rd- 07- Added optional fade transition effect.
////Ajax related settings
var csbustcachevar=0; //bust potential caching of external pages after initial Ajax request? (1=yes, 0=no)
var enabletransition=1; //enable fade into view transition effect? (1=yes, 0=no)
var csloadstatustext="<img src='loading.gif' /> Requesting content..."; //HTML to indicate Ajax page is being fetched
var csexternalfiles=[]; //External .css or .js files to load to style the external content(s), if any. Separate multiple files with comma ie: ["cat.css", dog.js"]

////NO NEED TO EDIT BELOW////////////////////////
var enablepersist=true;
var slidernodes=new Object(); //Object array to store references to each content slider's DIV containers (<div class="contentdiv">)
var csloadedobjects=""; //Variable to store file names of .js/.css files already loaded (if Ajax is used)

function ContentSlider(sliderid, autorun, customPaginateText, customNextText){            
	var slider=document.getElementById(sliderid);
	if (typeof(customPaginateText)!="undefined" && customPaginateText!=""){ //Custom array of pagination links text defined?
		slider.paginateText=customPaginateText;
    }
	if (typeof(customNextText)!="undefined" && customNextText!=""){ //Custom HTML for "Next" link defined?
		slider.nextText=customNextText;
    }    
	slidernodes[sliderid]=[]; //Array to store references to this content slider's DIV containers (<div class="contentdiv">)
	ContentSlider.loadobjects(csexternalfiles); //Load external .js and .css files, if any
	var alldivs=slider.getElementsByTagName("div");
	for (var i=0; i<alldivs.length; i++){
		if (alldivs[i].className=="opacitylayer"){
			slider.opacitylayer=alldivs[i];
		}else if (alldivs[i].className=="contentdiv"){
			slidernodes[sliderid].push(alldivs[i]); //add this DIV reference to array
			if (typeof(alldivs[i].getAttribute("rel"))=="string"){ //If get this DIV's content via Ajax (rel attr contains path to external page)
				ContentSlider.ajaxpage(alldivs[i].getAttribute("rel"), alldivs[i]);
            }
		}
	}    
	ContentSlider.buildpagination(sliderid);    
	var loadfirstcontent=true;    
	if (enablepersist && getCookie(sliderid)!=""){ //if enablepersist is true and cookie contains corresponding value for slider
		var cookieval=getCookie(sliderid).split(":"); //process cookie value ([sliderid, int_pagenumber (div content to jump to)]
		if (document.getElementById(cookieval[0])!=null && typeof(slidernodes[sliderid][cookieval[1]]!="undefined")){ //check cookie value for validity
			ContentSlider.turnpage(cookieval[0], parseInt(cookieval[1])); //restore content slider's last shown DIV
			loadfirstcontent=false;
		}
	}    
	if (loadfirstcontent==true){ //if enablepersist is false, or cookie value doesn't contain valid value for some reason (ie: user modified the structure of the HTML)
		ContentSlider.turnpage(sliderid, 0);
    }    //Display first DIV within slider    
	if (typeof autorun=="number" && autorun>0){ //if autorun parameter (int_miliseconds) is defined, fire auto run sequence
		window[sliderid+"timer"]=setTimeout(function(){ContentSlider.autoturnpage(sliderid, autorun)}, autorun);
    }    
}

ContentSlider.buildpagination=function(sliderid){    
	var slider=document.getElementById(sliderid);
	var paginatediv=document.getElementById("paginate-"+sliderid); //reference corresponding pagination DIV for slider
	var pcontent='';
	for (var i=0; i<slidernodes[sliderid].length; i++){ //For each DIV within slider, generate a pagination link
		pcontent+='<a href="#" onmouseover=\"ContentSlider.turnpage(\''+sliderid+'\', '+i+'); return false\">'+(slider.paginateText ? slider.paginateText[i] : i+1)+'</a>';
    }    
	pcontent+='<a href="#" style="font-weight: bold;" onmouseover="ContentSlider.turnpage(\''+sliderid+'\'); return false;"></a>';    
	paginatediv.innerHTML=pcontent;    
	paginatediv.onmouseover=function(){ //cancel auto run sequence (if defined) when user clicks on pagination DIV
	    if (typeof window[sliderid+"timer"]!="undefined"){
		    clearTimeout(window[sliderid+"timer"]);
	    }
    }    
}

ContentSlider.turnpage=function(sliderid, thepage){
	var paginatelinks=document.getElementById("paginate-"+sliderid).getElementsByTagName("a"); //gather pagination links
	for (var i=0; i<slidernodes[sliderid].length; i++){ //For each DIV within slider
		paginatelinks[i].className=""; //empty corresponding pagination link's class name
		slidernodes[sliderid][i].style.display="none"; //hide DIV
	}
	paginatelinks[thepage].className="selected"; //for selected DIV, set corresponding pagination link's class name
	if (enabletransition){
		if (window[sliderid+"fadetimer"]){
			clearTimeout(window[sliderid+"fadetimer"]);
        }
		this.setopacity(sliderid, 0.1);
	}
	slidernodes[sliderid][thepage].style.display="block"; //show selected DIV
	if (enabletransition){
		this.fadeup(sliderid, thepage);
    }
	//Set "Next" pagination link's (last link within pagination DIV) "rel" attribute to the next DIV number to show
	paginatelinks[paginatelinks.length-1].setAttribute("rel", thenextpage=(thepage<paginatelinks.length-2)? thepage+1 : 0);
	if (enablepersist){
		setCookie(sliderid, sliderid+":"+thepage);
    }
}

ContentSlider.autoturnpage=function(sliderid, autorunperiod){
	var paginatelinks=document.getElementById("paginate-"+sliderid).getElementsByTagName("a"); //Get pagination links
	var nextpagenumber=parseInt(paginatelinks[paginatelinks.length-1].getAttribute("rel")); //Get page number of next DIV to show
	ContentSlider.turnpage(sliderid, nextpagenumber); //Show that DIV
	window[sliderid+"timer"]=setTimeout(function(){ContentSlider.autoturnpage(sliderid, autorunperiod)}, autorunperiod);
}

ContentSlider.setopacity=function(sliderid, value){ //Sets the opacity of targetobject based on the passed in value setting (0 to 1 and in between)
	var targetobject=document.getElementById(sliderid).opacitylayer || null; //reference slider container itself
	if (targetobject && targetobject.filters && targetobject.filters[0]){ //IE syntax
		if (typeof targetobject.filters[0].opacity=="number"){ //IE6
			targetobject.filters[0].opacity=value*100;
		}else{ //IE 5.5
			targetobject.style.filter="alpha(opacity="+value*100+")";
		}
	}else if (targetobject && typeof targetobject.style.MozOpacity!="undefined"){ //Old Mozilla syntax
		targetobject.style.MozOpacity=value;
	}else if (targetobject && typeof targetobject.style.opacity!="undefined"){ //Standard opacity syntax
		targetobject.style.opacity=value;
    }
	targetobject.currentopacity=value;
}

ContentSlider.fadeup=function(sliderid){
	var targetobject=document.getElementById(sliderid).opacitylayer || null; //reference slider container itself
	if (targetobject && targetobject.currentopacity<1){
		this.setopacity(sliderid, targetobject.currentopacity+0.1);
		window[sliderid+"fadetimer"]=setTimeout(function(){ContentSlider.fadeup(sliderid)}, 100);
	}
}

function getCookie(Name){ 
	var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair
	if (document.cookie.match(re)){ //if cookie found
		return document.cookie.match(re)[0].split("=")[1];
    } //return its value
	return "";
}

function setCookie(name, value){
	document.cookie = name+"="+value;
}

////////////////Ajax Related functions //////////////////////////////////

ContentSlider.ajaxpage=function(url, thediv){
	var page_request = false;
	var bustcacheparameter="";
	if (window.XMLHttpRequest){ // if Mozilla, Safari etc
		page_request = new XMLHttpRequest();
	}else if (window.ActiveXObject){ // if IE
		try {
		    page_request = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e){
		try{
		    page_request = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch (e){}
		}
	}	else{
		return false;
    }
	thediv.innerHTML=csloadstatustext;
	page_request.onreadystatechange=function(){
		ContentSlider.loadpage(page_request, thediv);
	}
	if (csbustcachevar){ //if bust caching of external page
		bustcacheparameter=(url.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime();
    }
	page_request.open('GET', url+bustcacheparameter, true);
	page_request.send(null);
}

ContentSlider.loadpage=function(page_request, thediv){
	if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1)){
		thediv.innerHTML=page_request.responseText;
    }
}

ContentSlider.loadobjects=function(externalfiles){ //function to load external .js and .css files. Parameter accepts a list of external files to load (array)
	for (var i=0; i<externalfiles.length; i++){
		var file=externalfiles[i];
		var fileref="";
		if (csloadedobjects.indexOf(file)==-1){ //Check to see if this object has not already been added to page before proceeding
			if (file.indexOf(".js")!=-1){ //If object is a js file
				fileref=document.createElement('script');
				fileref.setAttribute("type","text/javascript");
				fileref.setAttribute("src", file);
			}
			else if (file.indexOf(".css")!=-1){ //If object is a css file
				fileref=document.createElement("link")
				fileref.setAttribute("rel", "stylesheet");
				fileref.setAttribute("type", "text/css");
				fileref.setAttribute("href", file);
			}
		}
		if (fileref!=""){
			document.getElementsByTagName("head").item(0).appendChild(fileref);
			csloadedobjects+=file+" "; //Remember this object as being already added to page
		}
	}
}

