 
    



function popUpUCC(model_id){
	window.open("http://autos.upnorthautos.com/Autos?tp=AUTOS.UPNORTHAUTOS.COM&amp;tl=7&amp;temp_type=DETAIL&amp;category=Auto&amp;property=autos.upnorthautos.com&amp;model_id="+model_id,"","scrollbars=yes,toolbar=no,location=no,status=yes,menubar=no,titlebar=no,resizable=yes,HEIGHT=600,WIDTH=520")
}
function popUpContact(dealer_id){
	window.open("http://autos.upnorthautos.com/Autos?tp=AUTOS.UPNORTHAUTOS.COM&amp;tl=12&amp;temp_type=DETAIL&amp;category=Search&amp;property=autos.upnorthautos.com&amp;classification=&amp;search_logic=&amp;debug=&amp;dealer_id="+dealer_id, "","scrollbars=yes,toolbar=no,location=no,status=yes,menubar=no,titlebar=no,resizable=yes,HEIGHT=560,WIDTH=520")
}
function popUpQuote(id,car){
	window.open("http://autos.upnorthautos.com/Autos?tp=AUTOS.UPNORTHAUTOS.COM&amp;tl=12&amp;temp_type=DETAIL&amp;category=Search&amp;property=autos.upnorthautos.com&amp;classification=&amp;search_logic=&amp;debug=&amp;dealer_id="+id+"&car_id="+car, "","scrollbars=yes,toolbar=no,location=no,status=yes,menubar=no,titlebar=no,resizable=yes,HEIGHT=560,WIDTH=470")
}

// Cookie Toolbox Javascript
// copyright 4th September 2002, by Stephen Chapman, Felgall Pty Ltd

// You have permission to copy and use this javascript provided that
// the content of the script is not changed in any way.
// For instructions on how to use these functions see "A Cookie Toolbox"
// in the Javascript section of our site at http://www.felgall.com/

var dbug = 0; function d_a(ary) {var beg = next_entry(ary) - 1; for (var i = beg ; i > -1; i--) {ary[i] = null;}} function init_array() {if (dbug) alert('init_cookie');  var ary = new Array(null); return ary;} function set_cookie(name,value,expires) {if (dbug) alert('set_cookie'); if (!expires) expires = new Date();
document.cookie = name + '=' + escape(value) + '; expires=' + expires.toGMTString() + '; path=/';} function get_cookie(name) {if (dbug) alert('get_cookie'); var dcookie = document.cookie; var cname = name + "="; var clen = dcookie.length; var cbegin = 0; while (cbegin < clen) {var vbegin = cbegin + cname.length;
if (dcookie.substring(cbegin, vbegin) == cname) {var vend = dcookie.indexOf (";", vbegin); if (vend == -1) vend = clen; return unescape(dcookie.substring(vbegin, vend));} cbegin = dcookie.indexOf(" ", cbegin) + 1; if (cbegin == 0) break;} return null;} function del_cookie(name) {if (dbug) alert('del_cookie');
document.cookie = name + '=' + '; expires=Thu, 01-Jan-70 00:00:01 GMT; path=/';} function get_array(name, ary) {if (dbug) alert('get_array'); d_a(ary); var ent = get_cookie(name); if (ent) {i = 1; while (ent.indexOf('^') != '-1') {ary[i] = ent.substring(0,ent.indexOf('^')); i++;
ent = ent.substring(ent.indexOf('^')+1, ent.length);}}} function set_array(name, ary, expires) {if (dbug) alert('set_array'); var value = ''; for (var i = 1; ary[i]; i++) {value += ary[i] + '^';} set_cookie(name, value, expires);} function del_entry(name, ary, pos, expires) {if (dbug) alert('del_entry');
var value = ''; get_array(name, ary); for (var i = 1; i < pos; i++) {value += ary[i] + '^';} for (var j = pos + 1; ary[j]; j++) {value += ary[j] + '^';} set_cookie(name, value, expires);} function next_entry(ary) {if (dbug) alert('next_entry'); var j = 0; for (var i = 1; ary[i]; i++) {j = i} return j + 1;}
function debug_on() {dbug = 1;} function debug_off() {dbug = 0;} function dump_cookies() {if (document.cookie == '') document.write('No Cookies Found'); else {thisCookie = document.cookie.split('; '); for (i=0; i<thisCookie.length; i++) {document.write(thisCookie[i] + '<br \/>');}}}


// ---- SLIDESHOW JAVASCRIPT --- //
//set these variables 		// limited to 100 images 0 to 99
  var numberOfLastImage = "";	// no greater than 99
  var numberOfFirstImage = "";	// best if you start with 0
  var delayInSeconds = "";
  var autoLoop = ""; 		// if false will display an alert when past the end or beginning
  var autoStart = "";		// start in automatic

function setVariables(first, last, delay, boolStart)
{	
	numberOfLastImage = last;	// no greater than 99
	numberOfFirstImage = first;	// best if you start with 0
	delayInSeconds = delay;
	autoStart = boolStart;		// start in automatic
}

// do not change these variables
var slideNumber = 1;
var auto = false;		// not an auto start. setting true will break
var gblTimer = '';
var slide = new Array();
var thumbs = new Array();
var enlarge = new Array();


// called when auto is turned on(true), by switchAutomatic() and showSlide()
function nextSlideDelayed()
{	
	if(autoStart)
		setTimeout("showSlide('next')",delayInSeconds * 1000);
	else
		setTimeout("showSlide('current')", 1000 * 1000);
}


// called when auto button is pushed. 
function switchAutomatic()
{	

	if(auto==false)
	{   		
		auto = true;   		
		document.getElementById('buttonAuto').childNodes[0].data="  Stop Slideshow  ";
   		//nextSlideDelayed();
		gblTimer = setTimeout("showSlide('next')",delayInSeconds * 1000);
	}	
	else   	
	{   		
		auto = false;
   		slideNumber--;
   		document.getElementById('buttonAuto').childNodes[0].data="  Play Slideshow  ";
   	}
}

// called when next or back button is pushed and auto is off(false)
// also called by nextSlideDelayed() when auto is on(true) this is recursive
// ie nextSlideDelayed() is called at the end of showSlide() which will again
// call showSlide()
function showSlide(direction)
{	
	clearTimeout(gblTimer);
	if(direction=="next") 	// if next add 1 to slideNumber
		{
			slideNumber++;
		}
	if(direction=="back")	// if back subtract 1 from slideNumber
		{
			slideNumber--;
		}	
	if(slideNumber > numberOfLastImage )	// if past last slide
		{
			slideNumber = numberOfFirstImage ;
		}
	if(slideNumber < numberOfFirstImage) 	// if before first slide
		{
			slideNumber = numberOfLastImage ;
		}

	document.getElementById('main_photo').src = slide[slideNumber]; 	// send slide to screen
	//document.getElementById('photo_num').childNodes[0].data = slideNumber;
	//if(auto==true)nextSlideDelayed(); // if auto next slide
	if (auto==true) gblTimer = setTimeout("showSlide('next')",delayInSeconds * 1000);
}

function thumbTomain(index)
{
	clearTimeout(gblTimer);
	slideNumber = index;
	showSlide('current');
}

function popUpCopyright() {
	window.open("http://autos.upnorthautos.com/Autos?tp=AUTOS.UPNORTHAUTOS.COM&amp;tl=6&amp;temp_type=DETAIL&amp;category=design", "","scrollbars,toolbar=no,location=no,status=yes,menubar=no,titlebar=no,resizable=1,HEIGHT=470,WIDTH=470");
}

function popUpRedirect(id,destination) {
	destination = escape(destination);
	window.open( "http://autos.upnorthautos.com/Autos?&tp=mdTransit v2.4 Core&tl=9&category=dealer+reporting&mdt_reporting_base=http://rpt.autos.upnorthautos.com/images/mdwtc&temp_type=detail&advertiser_id="+id+'&destination='+destination, "","scrollbars,toolbar=yes,location=yes,status=yes,menubar=yes,titlebar=yes,resizable=1,HEIGHT=600,WIDTH=900");
}
// Save Listing as Favorite
function populateFavListCount() {
	var elemFavlist_count = document.getElementById('favlist_count');
	var favorite_id_list=getCookieValue('favorites_list');
//alert("elemFavlist_count = "+elemFavlist_count+"<br />"+"favorite_id_list = "+favorite_id_list);
	if (elemFavlist_count != undefined) {
		var favlist_html = '';
		if (favorite_id_list != "" && favorite_id_list != null) {
			var fullStr = favorite_id_list;
			var initial_whitespace_rExp = /^[^A-Za-z0-9]+/gi;
			var left_trimmedStr = fullStr.replace(initial_whitespace_rExp, "");
			var non_alphanumerics_rExp = rExp = /[^A-Za-z0-9]+/gi;
			var cleanedStr = left_trimmedStr.replace(non_alphanumerics_rExp, " ");
			var splitString = cleanedStr.split(" ");
			var favlist_html = splitString.length;
			elemFavlist_count.innerHTML = favlist_html;                                                                              
		} else {
			favlist_html = '0';
			elemFavlist_count.innerHTML = favlist_html;                                                                              
		}
		return favlist_html;
	}
}

function clearSavedListings(){
	var favoritesList = getCookieValue("favorites_list").split(",");
	for(var i = 0; i < favoritesList.length; i++){
		if(favoritesList[i] > 0 && document.getElementById("compare_link_" + favoritesList[i]) != undefined){
			document.getElementById("compare_link_" + favoritesList[i]).style.display = "none";
		}
		if(favoritesList[i] > 0 && document.getElementById("save_link_" + favoritesList[i]) != undefined){
			document.getElementById("save_link_" + favoritesList[i]).style.display = "block";
		}
	}
	clearFavorites();
	populateFavListCount();
}

function clearFavorites(){
	setCookieValue("favorites_list", "", "/", "");
	populateFavListCount();
}


function addFavorite(listingId, url, favoritesString){
	var currentList = getCookieValue("favorites_list");
	if(currentList != "null" && currentList != undefined && currentList != ""){		
		if(currentList.indexOf(listingId) == -1){	
			setCookieValue("favorites_list", currentList + "," + listingId, "/", "");
			var favoritesDiv = document.getElementById("favorites");
	
			if(favoritesDiv != undefined){
				var recent_id_list=getCookieValue('recently_viewed_listings_list');
				if (recent_id_list == null){
					recent_id_list="";
				}
				var favorite_id_list=getCookieValue('favorites_list');
				if (favorite_id_list == null){
					favorite_id_list="";
				}		
//				var follow_agent=getCookieValue('follow_id');
//				if (follow_agent == null){
//					follow_agent="";
//				}	
				if (favorite_id_list != "" || recent_id_list != ""){		
//					sndReq("http://autos.upnorthautos.com/Autos?tp=AUTOS.UPNORTHAUTOS.COM&amp;name=db:Saved%20Listings&amp;render_content=true=" + favorite_id_list +"&follow_agent="+ follow_agent +"&recent_id_list=" + recent_id_list, "search_tools_container");
					sndReq("http://autos.upnorthautos.com/Autos?tp=AUTOS.UPNORTHAUTOS.COM&name=db:Saved%20Listings&render_content=true&favorite_id_list=" + favorite_id_list +"&recent_id_list=" + recent_id_list, "saved_listings_output_container");
				}
				populateFavListCount();
			}
		}
	}else{
		setCookieValue("favorites_list", listingId, "/", "");
		var favoritesDiv = document.getElementById("favorites");
		var recent_id_list=getCookieValue('recently_viewed_listings_list');
		if (recent_id_list == null){
			recent_id_list="";
		}
		var favorite_id_list=getCookieValue('favorites_list');
		if (favorite_id_list == null){
			favorite_id_list="";
		}		
//		var follow_agent=getCookieValue('follow_id');
//		if (follow_agent == null){
//			follow_agent="";
//		}	
		if (favorite_id_list != "" || recent_id_list != ""){		
//			sndReq("?tp=AUTOS.UPNORTHAUTOS.COM&name=db:Search+Tools&render_content=true&favorite_id_list=" + favorite_id_list +"&follow_agent="+ follow_agent +"&recent_id_list=" + recent_id_list, "search_tools_container");
			sndReq("http://autos.upnorthautos.com/Autos?tp=AUTOS.UPNORTHAUTOS.COM&name=db:Saved%20Listings&render_content=true&favorite_id_list=" + favorite_id_list +"&recent_id_list=" + recent_id_list, "saved_listings_output_container");
		}
		populateFavListCount();
	}
}

function RemoveFavorite (itemToRemove) {
	var CookieString = document.cookie;
	var CookieSet = CookieString.split (';');
	var SetSize = CookieSet.length;
	var CookiePieces = "";
	var CookieSubPieces = "";
	var CookieValue = "";
	var SubSetSize = "";
	
	var x = 0;
	var i = 0;
	
	for (x = 0; ((x < SetSize) && (CookieValue == "")); x++) {
		
		CookiePieces = CookieSet[x].split ('=');
		
		if (CookiePieces[0].substring (0,1) == ' ') {
			CookiePieces[0] = CookiePieces[0].substring (1, CookiePieces[0].length);
		}
		
		if (CookiePieces[0] == "favorites_list") {
			CookieSubPieces = unescape(CookiePieces[1]).split(',');
			SubSetSize = CookieSubPieces.length;
			for (i = 0; i < SubSetSize; i++) {
				if (CookieSubPieces[i] != itemToRemove && CookieSubPieces[i].length > 0)  {
					if (CookieValue != null && typeof(CookieValue) != 'undefined' && CookieValue != ""){
						CookieValue = CookieValue + ',' + CookieSubPieces[i];
					}else{
						CookieValue = CookieSubPieces[i];
					}
				}
			}
			setCookieValue(CookiePieces[0], CookieValue,'/', '');
			var favoritesDiv = document.getElementById("favorites");
			var SaveLinkDiv = document.getElementById("save_link_"+itemToRemove);
			var CompareLinkDiv = document.getElementById("compare_link_"+itemToRemove);
			
			if(favoritesDiv != undefined){
				var recent_id_list=getCookieValue('recently_viewed_listings_list');
				if (recent_id_list == null){
					recent_id_list="";
				}
				var favorite_id_list=getCookieValue('favorites_list');
				if (favorite_id_list == null){
					favorite_id_list="";
				}		
//				var follow_agent=getCookieValue('follow_id');
//				if (follow_agent == null){
//					follow_agent="";
//				}	
//				sndReq("?tp=AUTOS.UPNORTHAUTOS.COM&name=db:Search+Tools&render_content=true&favorite_id_list=" + favorite_id_list +"&follow_agent="+ follow_agent +"&recent_id_list=" + recent_id_list, "search_tools_container");
				sndReq("http://autos.upnorthautos.com/Autos?tp=AUTOS.UPNORTHAUTOS.COM&name=db:Saved%20Listings&render_content=true&favorite_id_list=" + favorite_id_list +"&recent_id_list=" + recent_id_list, "saved_listings_output_container");
				populateFavListCount();
			}
			if(SaveLinkDiv != undefined){
				
				document.getElementById("save_link_"+itemToRemove).style.display = "block";
			}
			if(CompareLinkDiv != undefined){
				document.getElementById("compare_link_"+itemToRemove).style.display="none";
			}									  
		}
	}
}

var favlist_html = '';
function setCookieValue(cookieName, cookieValue, cookiePath, cookieExpires){
	cookieValue = escape(cookieValue);
	var today = new Date();
	today.setTime( today.getTime() );
	if(cookieExpires == ""){
		var expires_date = new Date();
		expires_date.setMonth(expires_date.getMonth() + 6);
		cookieExpires = expires_date.toGMTString();
	}else{
		var expires = cookieExpires * 1000 * 60 * 60 * 24;
		expires_date = new Date( today.getTime() + (expires) );
		cookieExpires = expires_date.toGMTString();								
	}
	if(cookiePath != ""){
		cookiePath = ";Path=" + cookiePath;
	}
	document.cookie = cookieName + "=" + cookieValue + "; expires=" + cookieExpires + cookiePath;	
}

function setSessionCookieValue(cookieName, cookieValue, cookiePath){
	cookieValue = escape(cookieValue);
	if(cookiePath != ""){
		cookiePath = ";Path=" + cookiePath;
	}
	document.cookie = cookieName + "=" + cookieValue  + cookiePath;	
}	

function getCookieValue(cookieName){
	var cookieValue = document.cookie;
	var cookieStartsAt = cookieValue.indexOf(" " + cookieName + "=");
	if(cookieStartsAt == -1){
		cookieStartsAt = cookieValue.indexOf(cookieName + "=");
	}
	if(cookieStartsAt == -1){
		cookieValue = null;
	}else{
		cookieStartsAt = cookieValue.indexOf("=", cookieStartsAt) + 1;
		var cookieEndsAt = cookieValue.indexOf(";", cookieStartsAt);
		if(cookieEndsAt == -1){
			cookieEndsAt = cookieValue.length;
		}
		cookieValue = unescape(cookieValue.substring(cookieStartsAt, cookieEndsAt));
	}
	return cookieValue;
}
// AJAX Setup Functions:
function createRequestObject()
{
    var ro;
    var browser = navigator.appName;
    if(browser == "Microsoft Internet Explorer")
    {
      ro = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else
    {
      ro = new XMLHttpRequest();
    }
    return ro;
}

function sndReq(url,outputContainer)
{
    // Instantiate the XML HTTP request object:
    var http = createRequestObject();
    http.open('get', url);
    http.onreadystatechange = function()
    {
      if(http.readyState == 4 && document.getElementById(outputContainer) != undefined)
      {
        document.getElementById(outputContainer).innerHTML = http.responseText;
      }
    };
    http.send(null);
}

function TrimString(str)
{
	return str.replace(/^\s+|\s+$/g,"");
} 

function getCount(url,outputContainer)
{
	var http = createRequestObject();
	http.open('get', url);
	http.onreadystatechange = function()
	{
		if(http.readyState == 4 && document.getElementById(outputContainer) != undefined)
		{
			var ts=TrimString(http.responseText);
			if (ts > 1)
			{
				document.getElementById(outputContainer).innerHTML = http.responseText;
			}
		}
	};
	http.send(null);
}
/* Ultimate Fade-in slideshow (v2.0)
* Last updated: Sept 10th, 2009. This notice must stay intact for usage
* Author: Dynamic Drive at http://www.dynamicdrive.com/
* Visit http://www.dynamicdrive.com/ for full source code
*/

var fadeSlideShow_descpanel={
	controls: [['x.png',7,7], ['restore.png',10,11], ['loading.gif',54,55]], //full URL and dimensions of close, restore, and loading images
	fontStyle: 'normal 11px Verdana', //font style for text descriptions
	slidespeed: 200 //speed of description panel animation (in millisec)
}

//No need to edit beyond here...

jQuery.noConflict()

function fadeSlideShow(settingarg){
	this.setting=settingarg
	settingarg=null
	var setting=this.setting
	setting.fadeduration=setting.fadeduration? parseInt(setting.fadeduration) : 500
	setting.curimage=(setting.persist)? fadeSlideShow.routines.getCookie("gallery-"+setting.wrapperid) : 0
	setting.curimage=setting.curimage || 0 //account for curimage being null if cookie is empty
	setting.currentstep=0 //keep track of # of slides slideshow has gone through (applicable in displaymode='auto' only)
	setting.totalsteps=setting.imagearray.length*(setting.displaymode.cycles>0? setting.displaymode.cycles : Infinity) //Total steps limit (applicable in displaymode='auto' only w/ cycles>0)
	setting.fglayer=0, setting.bglayer=1 //index of active and background layer (switches after each change of slide)
	setting.oninit=setting.oninit || function(){}
	setting.onslide=setting.onslide || function(){}
	var preloadimages=[] //preload images
	setting.longestdesc="" //get longest description of all slides. If no desciptions defined, variable contains ""
	for (var i=0; i<setting.imagearray.length; i++){ //preload images
		preloadimages[i]=new Image()
		preloadimages[i].src=setting.imagearray[i][0]
		if (setting.imagearray[i][3] && setting.imagearray[i][3].length>setting.longestdesc.length)
			setting.longestdesc=setting.imagearray[i][3]
	}
	var closebutt=fadeSlideShow_descpanel.controls[0] //add close button to "desc" panel if descreveal="always"
	setting.closebutton=(setting.descreveal=="always")? '<img class="close" src="'+closebutt[0]+'" style="float:right;cursor:hand;cursor:pointer;width:'+closebutt[1]+'px;height:'+closebutt[2]+'px;margin-left:2px" title="Hide Description" />' : ''

	var slideshow=this
	jQuery(document).ready(function($){ //fire on DOM ready
		var setting=slideshow.setting
		var fullhtml=fadeSlideShow.routines.getFullHTML(setting.imagearray) //get full HTML of entire slideshow
		setting.$wrapperdiv=$('#'+setting.wrapperid).css({position:'relative', visibility:'visible', background:'black', overflow:'hidden', width:setting.dimensions[0], height:setting.dimensions[1]}).empty() //main slideshow DIV
		if (setting.$wrapperdiv.length==0){ //if no wrapper DIV found
			alert("Error: DIV with ID \""+setting.wrapperid+"\" not found on page.")
			return
		}
		setting.$gallerylayers=$('<div class="gallerylayer"></div><div class="gallerylayer"></div>') //two stacked DIVs to display the actual slide
			.css({position:'absolute', left:0, top:0, width:'100%', height:'100%', background:'black'})
			.appendTo(setting.$wrapperdiv)
		var $loadingimg=$('<img src="'+fadeSlideShow_descpanel.controls[2][0]+'" style="position:absolute;width:'+fadeSlideShow_descpanel.controls[2][1]+';height:'+fadeSlideShow_descpanel.controls[2][2]+'" />')
			.css({left:setting.dimensions[0]/2-fadeSlideShow_descpanel.controls[2][1]/2, top:setting.dimensions[1]/2-fadeSlideShow_descpanel.controls[2][2]}) //center loading gif
			.appendTo(setting.$wrapperdiv)
		var $curimage=setting.$gallerylayers.html(fullhtml).find('img').hide().eq(setting.curimage) //prefill both layers with entire slideshow content, hide all images, and return current image
		if (setting.longestdesc!=""){ //if at least one slide contains a description (feature is enabled)
			fadeSlideShow.routines.adddescpanel($, setting)
			if (setting.descreveal=="always"){ //position desc panel so it's visible to begin with
				setting.$descpanel.css({top:setting.dimensions[1]-setting.panelheight})
				setting.$descinner.click(function(e){ //asign click behavior to "close" icon
					if (e.target.className=="close"){
						slideshow.showhidedescpanel('hide')
					}
				})
				setting.$restorebutton.click(function(e){ //asign click behavior to "restore" icon
					slideshow.showhidedescpanel('show')
					$(this).css({visibility:'hidden'})
				})
			}
			else{ //display desc panel on demand (mouseover)
				setting.$wrapperdiv.bind('mouseenter', function(){slideshow.showhidedescpanel('show')})
				setting.$wrapperdiv.bind('mouseleave', function(){slideshow.showhidedescpanel('hide')})
			}
		}
		setting.$wrapperdiv.bind('mouseenter', function(){setting.ismouseover=true}) //pause slideshow mouseover
		setting.$wrapperdiv.bind('mouseleave', function(){setting.ismouseover=false})
		if ($curimage.get(0).complete){ //accounf for IE not firing image.onload
			$loadingimg.hide()
			slideshow.paginateinit($)
			slideshow.showslide(setting.curimage)
		}
		else{ //initialize slideshow when first image has fully loaded
			$loadingimg.hide()
			slideshow.paginateinit($)
			$curimage.bind('load', function(){slideshow.showslide(setting.curimage)})
		}
		setting.oninit.call(slideshow) //trigger oninit() event
		$(window).bind('unload', function(){ //clean up and persist
			if (slideshow.setting.persist) //remember last shown image's index
				fadeSlideShow.routines.setCookie("gallery-"+setting.wrapperid, setting.curimage)
			jQuery.each(slideshow.setting, function(k){
				if (slideshow.setting[k] instanceof Array){
					for (var i=0; i<slideshow.setting[k].length; i++){
						if (slideshow.setting[k][i].tagName=="DIV") //catches 2 gallerylayer divs, gallerystatus div
							slideshow.setting[k][i].innerHTML=null
						slideshow.setting[k][i]=null
					}
				}
			})
			slideshow=slideshow.setting=null
		})
	})
}

fadeSlideShow.prototype={

	navigate:function(keyword){
		var setting=this.setting
		clearTimeout(setting.playtimer)
		if (setting.displaymode.type=="auto"){ //in auto mode
			setting.displaymode.type="manual" //switch to "manual" mode when nav buttons are clicked on
			setting.displaymode.wraparound=true //set wraparound option to true
		}
		if (!isNaN(parseInt(keyword))){ //go to specific slide?
			this.showslide(parseInt(keyword))
		}
		else if (/(prev)|(next)/i.test(keyword)){ //go back or forth inside slide?
			this.showslide(keyword.toLowerCase())
		}
	},

	showslide:function(keyword){
		var slideshow=this
		var setting=slideshow.setting
		if (setting.displaymode.type=="auto" && setting.ismouseover && setting.currentstep<=setting.totalsteps){ //if slideshow in autoplay mode and mouse is over it, pause it
			setting.playtimer=setTimeout(function(){slideshow.showslide('next')}, setting.displaymode.pause)
			return
		}
		var totalimages=setting.imagearray.length
		var imgindex=(keyword=="next")? (setting.curimage<totalimages-1? setting.curimage+1 : 0)
			: (keyword=="prev")? (setting.curimage>0? setting.curimage-1 : totalimages-1)
			: Math.min(keyword, totalimages-1)
		var $slideimage=setting.$gallerylayers.eq(setting.bglayer).find('img').hide().eq(imgindex).show() //hide all images except current one
		var imgdimensions=[$slideimage.width(), $slideimage.height()] //center align image
		$slideimage.css({marginLeft: (imgdimensions[0]>0 && imgdimensions[0]<setting.dimensions[0])? setting.dimensions[0]/2-imgdimensions[0]/2 : 0})
		$slideimage.css({marginTop: (imgdimensions[1]>0 && imgdimensions[1]<setting.dimensions[1])? setting.dimensions[1]/2-imgdimensions[1]/2 : 0})
		setting.$gallerylayers.eq(setting.bglayer).css({zIndex:1000, opacity:0}) //background layer becomes foreground
			.stop().css({opacity:0}).animate({opacity:1}, setting.fadeduration, function(){ //Callback function after fade animation is complete:
				clearTimeout(setting.playtimer)
				try{
					setting.onslide.call(slideshow, setting.$gallerylayers.eq(setting.fglayer).get(0), setting.curimage)
				}catch(e){
					alert("Fade In Slideshow error: An error has occured somwhere in your code attached to the \"onslide\" event: "+e)
				}
				setting.currentstep+=1
				if (setting.displaymode.type=="auto"){
					if (setting.currentstep<=setting.totalsteps || setting.displaymode.cycles==0)
						setting.playtimer=setTimeout(function(){slideshow.showslide('next')}, setting.displaymode.pause)
				}
			}) //end callback function
		setting.$gallerylayers.eq(setting.fglayer).css({zIndex:999}) //foreground layer becomes background
		setting.fglayer=setting.bglayer
		setting.bglayer=(setting.bglayer==0)? 1 : 0
		setting.curimage=imgindex
		if (setting.$descpanel)
			setting.$descpanel.css({visibility:(setting.imagearray[imgindex][3])? 'visible' : 'hidden'})
		if (setting.imagearray[imgindex][3])
			setting.$descinner.empty().html(setting.closebutton + setting.imagearray[imgindex][3])
		if (setting.displaymode.type=="manual" && !setting.displaymode.wraparound){
			this.paginatecontrol()
		}
		if (setting.$status) //if status container defined
			setting.$status.html(setting.curimage+1 + "/" + totalimages)
	},

	showhidedescpanel:function(state, showcontrol){
		var setting=this.setting
		var endpoint=(state=="show")? setting.dimensions[1]-setting.panelheight : this.setting.dimensions[1]
		setting.$descpanel.stop().animate({top:endpoint}, fadeSlideShow_descpanel.slidespeed, function(){
			if (setting.descreveal=="always" && state=="hide")
				setting.$restorebutton.css({visibility:'visible'}) //show restore button
		})
	},

	paginateinit:function($){
		var slideshow=this
		var setting=this.setting
		if (setting.togglerid){ //if toggler div defined
			setting.$togglerdiv=$("#"+setting.togglerid)
			setting.$prev=setting.$togglerdiv.find('.prev').data('action', 'prev')
			setting.$next=setting.$togglerdiv.find('.next').data('action', 'next')
			setting.$prev.add(setting.$next).click(function(e){ //assign click behavior to prev and next controls
				var $target=$(this)
				slideshow.navigate($target.data('action'))
				e.preventDefault()
			})
			setting.$status=setting.$togglerdiv.find('.status')
		}
	},

	paginatecontrol:function(){
		var setting=this.setting
			setting.$prev.css({opacity:(setting.curimage==0)? 0.4 : 1}).data('action', (setting.curimage==0)? 'none' : 'prev')
			setting.$next.css({opacity:(setting.curimage==setting.imagearray.length-1)? 0.4 : 1}).data('action', (setting.curimage==setting.imagearray.length-1)? 'none' : 'next')
			if (document.documentMode==8){ //in IE8 standards mode, apply opacity to inner image of link
				setting.$prev.find('img:eq(0)').css({opacity:(setting.curimage==0)? 0.4 : 1})
				setting.$next.find('img:eq(0)').css({opacity:(setting.curimage==setting.imagearray.length-1)? 0.4 : 1})
			}
	}


}

fadeSlideShow.routines={

	getSlideHTML:function(imgelement){
//alert(imgelement);
		var layerHTML=(imgelement[1])? '<a href="'+imgelement[1]+'" target="'+imgelement[2]+'">\n' : '' //hyperlink slide?
		layerHTML+='<img src="'+imgelement[0]+'" style="border-width:0;width:100%;" />\n'
		layerHTML+=(imgelement[1])? '</a>\n' : ''
		return layerHTML //return HTML for this layer
	},

	getFullHTML:function(imagearray){
		var preloadhtml=''
		for (var i=0; i<imagearray.length; i++)
			preloadhtml+=this.getSlideHTML(imagearray[i])
		return preloadhtml
	},

	adddescpanel:function($, setting){
		setting.$descpanel=$('<div class="fadeslidedescdiv"></div>')
			.css({position:'absolute', visibility:'hidden', width:'100%', left:0, top:setting.dimensions[1], font:fadeSlideShow_descpanel.fontStyle, zIndex:'1001'})
			.appendTo(setting.$wrapperdiv)
		$('<div class="descpanelbg"></div><div class="descpanelfg"></div>') //create inner nav panel DIVs
			.css({position:'absolute', left:0, top:0, width:setting.$descpanel.width()-8, padding:'4px'})
			.eq(0).css({background:'black', opacity:0.7}).end() //"descpanelbg" div
			.eq(1).css({color:'white'}).html(setting.closebutton + setting.longestdesc).end() //"descpanelfg" div
			.appendTo(setting.$descpanel)
		setting.$descinner=setting.$descpanel.find('div.descpanelfg')
		setting.panelheight=setting.$descinner.outerHeight()
		setting.$descpanel.css({height:setting.panelheight}).find('div').css({height:'100%'})
		if (setting.descreveal=="always"){ //create restore button
			setting.$restorebutton=$('<img class="restore" title="Restore Description" src="' + fadeSlideShow_descpanel.controls[1][0] +'" style="position:absolute;visibility:hidden;right:0;bottom:0;z-index:1002;width:'+fadeSlideShow_descpanel.controls[1][1]+'px;height:'+fadeSlideShow_descpanel.controls[1][2]+'px;cursor:pointer;cursor:hand" />')
				.appendTo(setting.$wrapperdiv)


		}
	},


	getCookie:function(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 null
	},

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

/***********************************************
* Ultimate Fade In Slideshow v2.0- (c) Dynamic Drive DHTML code library (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit Dynamic Drive at http://www.dynamicdrive.com/ for this script and 100s more
***********************************************/