/*
	slides.js
	
	v1.34, 2008-08-25, Christian Augustin

*/
/*
	JavaScript 1.3+, W3C DOM Level 1
	
	MSIE 5 (excl. Mac), Netscape 7, Mozilla 1.0, Firefox 1.0, Safari 1.1, Opera 7.0
	
	Attention!
	This module has some dependencies with album.js (Album has to know
	some properties of slides objects). No call-back function anymore!
	
	ToDo
	- "cycleWithButtons" and "noCycleWithButtons"
	- Language dependend itemOf and title templates.
	- Language specific button titles.
	- Text "buttons" and combined button+text solutions.
	- Resize on change of font size.
	- Blending.
	- Check for MSIE5/Mac problems.
	
	Changes
	2008-08-25 cma: .nextItemTexts/.prevItemTexts added (no lang detection yet).
	2007-12-05 cma: Stopping default behavior on in-page links (preliminary).
	2007-12-04 cma: Capturing in-page anchor links into slides (experimental).
	2007-12-03 cma: Bug in isShowSlideById fixed.
	2007-10-30 cma: CSS enhanded (relative postion for .slide).
	2007-10-30 cma: CSS enhanced (float-clearing for .slides, .slidesControl, .slide).
	2007-08-22 cma: Width 100% for slidesSlide (no offsetWidth detection needed).
	2007-08-12 cma: Automatic sz to ss conversion on text-transform "uppercase" (itemTitle).
	2007-03-18 cma: Using "zoom: 1" for MSIE bugfixing (experimental).
	2007-02-19 cma: Changed .findSlides to .initElements (new standard).
	2007-02-09 cma: Changing className of documentElement *after* document.write
	                to avoid serious problems with Firefox ...
	2007-02-07 cma: MSIE 7 bug fixed (problem with .slide float left).
	2007-02-05 cma: Implementing new updateLayout() functionality.
	2006-12-04 cma: Improved (only slightly modified) initial CSS similar to cards.js.
	2006-11-24 cma: Developing new standardized control API.
	2006-11-24 cma: "printSelectedSlideOnly" implemented.
	2006-11-24 cma: Initial CSS updated similar to cards.js.
	2006-11-24 cma: "html.slidesActive" added; ".slides, .slide {position: relative}" in initial CSS.
	2006-11-08 cma: Small warning fixed.
	2006-06-22 cma: Init bug fixed; using unmodified slideTitle.
	2006-05-18 cma: MSIE 6/Win printing problem fixed.
	2006-04-10 cma: Slight performance tuning.
	2006-04-10 cma: Page layout during init consolidated (.slidesReady).
	2006-03-30 cma: Added .slideTitle to @media print.
	2006-03-13 cma: Global updateLayout() bug on .showSlide() fixed.
	2006-03-13 cma: Album call-back function no longer used.
	2006-03-13 cma: Attached .updateLayout to the global updateLayout().
	2006-03-13 cma: Local Firefox setTimeout-workaround shifted to pagecomplete.js!
	2006-03-06 cma: Global updateLayout() integrated in .showSlide().
	2006-02-27 cma: Workaround for Firefox DOM load problem (.updateLayout() via timeout).
	2006-02-26 cma: Trying to fix problem when loaded via DOM.
	2006-01-31 cma: But in isShowSlideById()
	2006-01-29 cma: isShowSlideById() with return value, showSlideById() without.
	2006-01-28 cma: Cosmetics.
	2006-01-27 cma: Setting width of item only if smaller than container!
	2006-01-26 cma: Width-change problem fixed (set width before height).
	2006-01-24 cma: Album call-back function integrated with showSlide().
	2006-01-24 cma: Full control of buttons and click behavior by CSS classes!
	2006-01-24 cma: Added cycleSlideOnClick. Fixed MSIE/Win bug with cursor attribute.
	2006-01-23 cma: Presets added, declared v1.00!
	2006-01-23 cma: First/Last button added, improved controller formatting.
	2006-01-20 cma: MSIE/Win 5/6 CSS added.
	2006-01-20 cma: slideTitle modified, class names changed, basic CSS included.
	2006-01-20 cma: API naming modified.
	2006-01-19 cma: Setting width of slidesItem to slidesContainer.
	2006-01-19 cma: Moved from "gallery.js" to "slides.js" (future naming).
	2005-10-12 cma: Using RegExp to find slides divs.
	2005-08-17 cma: Little change in object manipulation order.
	2005-08-16 cma: Temporary fix for MSIE 5.0/Win "invisibility bug".
	2005-08-16 cma: Fixed MSIE 5.x/Win bug with comment nodes of type 1.
	2005-08-13 cma: Improved .showItemById (inside out).
	2005-08-09 cma: Redesigned with .slidesContainer wrapper DIV.
	2005-08-09 cma: Redesigned with .slidesItem wrapper DIVs.
	2005-08-08 cma: "Picture" replaced by "Item", print-ready.
	2005-08-07 cma: Initial setup.
	
	CSS classes to control behavior:
	
	showSlidesFirstLast
	noSlidesFirstLast
	showSlidesTitle
	noSlidesTitle
	cycleSlidesOnClick
	nextSlideOnClick
	noSlidesOnClick
	noSlidesControl
	
	They will influence the creation of controller elements, but are also used
	to control formatting via stylesheets! This two-fold strategy should give
	the highest flexibility with least strain :-)
	

*/


/* ===========================
   Constructor function ...
=========================== */

function Slides(obj) {
	if (!obj) return void 0;
	if (!obj.className || !obj.className.match(/(^|\s)slides(\s|$)/)) return obj;
	var that = obj;
	that._slides = that;

	that.n = Slides.slides.length;
	Slides.slides[that.n] = that;
	that.items = new Array();
	that.vis = -1;
	
	/* Honor presets ... */
	
	that.slidesControl = true;
	if (that.className.match(/(^|\s)noSlidesControl(\s|$)/)) that.slidesControl = false;

	that.showFirstLast = Slides.showFirstLast;
	if (that.className.match(/(^|\s)showSlidesFirstLast(\s|$)/)) that.showFirstLast = true;
	if (that.className.match(/(^|\s)noSlidesFirstLast(\s|$)/)) that.showFirstLast = false;
	
	that.showTitle = Slides.showTitle;
	if (that.className.match(/(^|\s)showSlidesTitle(\s|$)/)) that.showTitle = true;
	if (that.className.match(/(^|\s)noSlidesTitle(\s|$)/)) that.showTitle = false;
	
	that.slidesOnClick = Slides.slidesOnClick;
	if (that.className.match(/(^|\s)cylcleSlidesOnClick(\s|$)/)) that.slidesOnClick = 'cycle';
	if (that.className.match(/(^|\s)nextSlideOnClick(\s|$)/)) that.slidesOnClick = 'next';
	if (that.className.match(/(^|\s)noSlidesOnClick(\s|$)/)) that.slidesOnClick = 'no';
	
	/* Collect and transform slides ... */
	
	that.container = that.insertBefore(document.createElement('div'), that.firstChild);
	that.container.className = 'slidesContainer';
	
	if (that.slidesOnClick == 'cycle') that.container.onclick = Slides.cycleSlideOnClick;
	if (that.slidesOnClick == 'next') that.container.onclick = Slides.nextSlideOnClick;

	var maxHeight = 0;
	var elm = that.container.nextSibling;
	while (elm) {
		if (elm.nodeType == 1 && elm.tagName != '!') {
			var item = document.createElement('div');
			item.className = 'slidesSlide invisibleOnScreen';
			item._slides = that;
			item._item = that.items.length;
			that.items[item._item] = item;
			that.container.appendChild(item);
			item.appendChild(elm);
			elm.style.visibility = 'inherit';
			//if (that.container.offsetWidth && item.offsetWidth < that.container.offsetWidth)
			//	item.style.width = that.container.offsetWidth + 'px';
			if (item.offsetHeight && (item.offsetHeight > maxHeight)) {
				maxHeight = item.offsetHeight;
				that.container.style.height = maxHeight + 'px';
			};
			
			if (that.showTitle) {
				var txt = '';
				if (elm.title) txt = elm.title;
				if (!txt) {
					var elms = (elm.all && !window.opera) ? elm.all : elm.getElementsByTagName('*');
					for (var j=0; j < elms.length; j++) {
						var thisElm = elms[j];
						if (thisElm.className 
						&& (thisElm.className.match(/(^|\s)slideTitle(\s|$)/)) 
						&& thisElm.innerHTML) {
							txt = thisElm.innerHTML;
							break;
						}
					}
				};
				if (!txt) {
					for (var i=1; i <= 6; i++) {
						var elms = elm.getElementsByTagName('h' + i);
						if (elms && elms.length && elms[0].innerHTML) {
							txt = elms[0].innerHTML;
							break;
						}
					}
				};
				item._title = txt;
			};
			
			elm = that.container.nextSibling;
		}
		else elm = elm.nextSibling;
	}
	
	if (that.slidesControl) {
	
		that.control = obj.appendChild(document.createElement('div'));
		that.control.className = 'slidesControl';
	
		if (that.showFirstLast) {
			that.first = that.control.appendChild(document.createElement('a'));
			that.first.className = 'slidesFirst';
			that.first.href = 'javascript:Slides.slidesByIdx('
				+ that.n + ').firstSlide()';
		}
		
		that.prev = that.control.appendChild(document.createElement('a'));
		that.prev.className = 'slidesPrev';
		that.prev.href = 'javascript:Slides.slidesByIdx('
			+ that.n + ').prevSlide()';
		
		if (Slides.prevItemTexts['default']) {
			that.prev.innerHTML = Slides.prevItemTexts['default'];
		}
		
		that.itemOf = that.control.appendChild(document.createElement('span'));
		that.itemOf.className = 'slidesItemOf'
		
		if (that.showTitle) {
			that.itemTitle = that.control.appendChild(document.createElement('span'));
			that.itemTitle.className = 'slidesItemTitle';
		}
		
		that.next = that.control.appendChild(document.createElement('a'));
		that.next.className = 'slidesNext';
		that.next.href = 'javascript:Slides.slidesByIdx('
			+ that.n + ').nextSlide()';
		
		if (Slides.nextItemTexts['default']) {
			that.next.innerHTML = Slides.nextItemTexts['default'];
		}
		
		if (that.showFirstLast) {
			that.last = that.control.appendChild(document.createElement('a'));
			that.last.className = 'slidesLast';
			that.last.href = 'javascript:Slides.slidesByIdx('
				+ that.n + ').lastSlide()';
		}
		
	}
	
	/* Extend obj with prototype methods ... */
	for (var m in Slides.prototype) that[m] = Slides.prototype[m];
	
	that.className += ' slidesReady';
	
	that.showIdx(0);

	return that;
	
}



/* =======================
   Instance methods ...
======================= */

Slides.prototype.setMaxHeight = function() {
	if (!(this.items && this.items.length)) return;
	var maxHeight = 0;
	var elm = null;
	for (var i=0; i<this.items.length; i++) {
		elm = this.items[i];
		if (elm.offsetHeight && (elm.offsetHeight > maxHeight))
			maxHeight = elm.offsetHeight;
	}
	if (maxHeight > 0) this.container.style.height = maxHeight + 'px';
}

Slides.prototype.setSizes = function() {
	if (!(this.items && this.items.length)) return;
	var maxHeight = 0;
	var elm = null;
	for (var i=0; i<this.items.length; i++) {
		elm = this.items[i];
		if (this.container.offsetWidth && elm.offsetWidth < this.container.offsetWidth)
			elm.style.width = this.container.offsetWidth + 'px';
		if (elm.offsetHeight && (elm.offsetHeight > maxHeight))
			maxHeight = elm.offsetHeight;
	}
	if (maxHeight > 0) this.container.style.height = maxHeight + 'px';
}

Slides.prototype.updateLayout = function() {
	//this.setSizes();
	this.setMaxHeight();
	var p = this.parentNode;
	while (p) {
		if (p.updateLayout) {
			p.updateLayout();
			break;
		};
		p = p.parentNode;
	};
}

Slides.prototype.showSlide = function(c) {

	//if ((c < 0) || (c > this.items.length-1)) return;
	c = (c < 0) ? 0 : ((c > this.items.length-1) ? this.items.length-1 : c);
	
	if (this.vis > -1) {
		this.items[this.vis].className =
			this.items[this.vis].className.replace(' slidesSlideSelected', ' invisibleOnScreen');
	};
	this.vis = c;
	var thisItem = this.items[c];
	thisItem.className =
		thisItem.className.replace(' invisibleOnScreen', ' slidesSlideSelected');

	//if (typeof updateLayout == 'function') updateLayout();
	this.updateLayout();
	
	/* Set cursor on slide ... */
	if ((this.slidesOnClick == 'cycle') 
	|| (this.slidesOnClick == 'next' && c != this.items.length-1))
		this.container.style.cursor = (document.all && !window.opera) ? 'hand' : 'pointer'
	else
		this.container.style.cursor = 'default';
	
	if (!this.slidesControl) return;
	
	/* Show item of items ... */
	var itemOf = Slides.itemOfTemplates['default'];
	itemOf = itemOf.replace(/%item%/, c+1);
	itemOf = itemOf.replace(/%items%/, this.items.length);
	this.itemOf.innerHTML = itemOf;
	
	/* Show title of item ... */
	if (this.itemTitle) {
		var cs = Slides.getCurrentStyle(this.itemTitle);
		if (thisItem._title && cs && cs.textTransform.match(/uppercase/i)) {
			thisItem._title = thisItem._title.replace(/&szlig;|\xDF/, "ss");
		};
		var itemTitle = Slides.titleTemplates['default'];
		itemTitle = itemTitle.replace(/%title%/, (thisItem._title) ? thisItem._title : '');
		this.itemTitle.innerHTML = (thisItem._title) ? thisItem._title : '';
	}
	
	/* Enable/Disable buttons ... */
	if (this.first) this.first.className = (c == 0) ? 'slidesFirstDisabled' : 'slidesFirst';
	this.prev.className = (c == 0) ? 'slidesPrevDisabled' : 'slidesPrev';
	this.next.className = (c == this.items.length-1) ? 'slidesNextDisabled' : 'slidesNext';
	if (this.last) this.last.className = (c == this.items.length-1) ? 'slidesLastDisabled': 'slidesLast';
	
}

Slides.prototype.nextSlide = function() {
	if (this.vis < (this.items.length -1))
		this.showSlide(this.vis+1);
}

Slides.prototype.prevSlide = function() {
	if (this.vis > 0)
		this.showSlide(this.vis-1);
}

Slides.prototype.firstSlide = function() {
	this.showSlide(0);
}

Slides.prototype.lastSlide = function() {
	this.showSlide(this.items.length-1);
}

Slides.prototype.cycleSlide = function() {
	if (this.vis < (this.items.length -1))
		this.showSlide(this.vis+1)
	else
		this.showSlide(0);
}

/* New standardized control API */

Slides.prototype.showIdx = Slides.prototype.showSlide;
Slides.prototype.showNext = Slides.prototype.nextSlide;
Slides.prototype.showPrev = Slides.prototype.prevSlide;
Slides.prototype.showFirst = Slides.prototype.firstSlide;
Slides.prototype.showLast = Slides.prototype.lastSlide;
Slides.prototype.showCycle = Slides.prototype.cycleSlide;

Slides.prototype.getVisibleIdx = function() {
	return (typeof this.vis != 'undefined') ? this.vis : -1;
}

Slides.prototype.getFirstIdx = function() {
	return (this.items && this.items.length) ? 0 : -1;
}

Slides.prototype.getLastIdx = function() {
	return (this.items && this.items.length) ? this.items.length - 1 : -1;
}

Slides.prototype.getCount = function() {
	return (this.items && this.items.length) ? this.items.length : 0;
}

Slides.prototype.getDeckIdx = function() {
	return (typeof this.n != 'undefined') ? this.n : -1;
}





/* ==========================
   Class properties ...
========================== */

Slides.slides = new Array();

/* Presets ... */

Slides.mark = '/slides.js';
//Slides.styleSheet = 'slides.css';
Slides.showFirstLast = false;
Slides.showTitle = true;
Slides.slidesOnClick = 'cycle';	// 'next' | 'cycle' | 'no' (or empty string '')
Slides.itemOfTemplates = new Object;
Slides.itemOfTemplates['default'] = '%item% | %items%';
Slides.titleTemplates = new Object;
Slides.titleTemplates['default'] = '%title%';
Slides.prevItemTexts = new Object;
Slides.prevItemTexts['default'] = '';
Slides.nextItemTexts = new Object;
Slides.nextItemTexts['default'] = '';

if ((typeof presets != 'undefined') && presets.Slides) {
	if (typeof presets.Slides.showFirstLast != 'undefined') Slides.showFirstLast = presets.Slides.showFirstLast;
	if (typeof presets.Slides.showTitle != 'undefined') Slides.showTitle = presets.Slides.showTitle;
	if (typeof presets.Slides.slidesOnClick != 'undefined') Slides.slidesOnClick = presets.Slides.slidesOnClick;
	if (typeof presets.Slides.itemOfTemplates != 'undefined') Slides.itemOfTemplates = presets.Slides.itemOfTemplates;
	if (typeof presets.Slides.titleTemplates != 'undefined') Slides.titleTemplates = presets.Slides.titleTemplates;
	if (typeof presets.Slides.prevItemTexts != 'undefined') Slides.prevItemTexts = presets.Slides.prevItemTexts;
	if (typeof presets.Slides.nextItemTexts != 'undefined') Slides.nextItemTexts = presets.Slides.nextItemTexts;
}

/* Initial Stylesheet ... */

Slides.initialCSS = '\
<style type="text/css">\
	.slides, .slidesControl, .slide { position: relative; clear:both; }\
	.slides:before, .slides:after,\
	.slidesControl:before, .slicesControl:after,\
	.slide:before, .slide:after {\
		content: ".";\
		display: block;\
		height: 0;\
		visibility: hidden;\
		clear: both;\
	}\
	.slides>.slide/* */ {\
		visibility: hidden;\
		position: absolute;\
		top: 0;\
	}\
	.slides>.slide:first-child/* */ {\
		visibility: inherit;\
		position: relative;\
	}\
	.slidesContainer {\
		margin: 0;\
		padding: 0;\
		position: relative;\
	}\
	.slidesSlide {\
		margin: 0;\
		padding: 0;\
		position: absolute;\
		width: 100%;\
		top: 0px;\
		left: 0px;\
	}\
	.noSlidesControl>.slidesControl/* */ {\
		display: none;\
	}\
	@media screen {\
		.invisibleOnScreen {visibility: hidden;}\
		.slideTitle, .hideInSlides {display: none;}\
	}\
	@media print {\
		.slidesControl {display: none !important;}\
		.slides, .slidesContainer, .slidesSlide {\
			position: static !important;\
			height: auto !important;\
		}\
		.printSelectedSlideOnly .slidesSlide {\
			display: none;\
		}\
		.printSelectedSlideOnly .slidesSlideSelected {\
			display: block;\
		}\
		.showInSlides {display: none;}\
	}\
<\/style>\
';

if (!window.opera && document.all) {
	Slides.initialCSS += '\
<!--[if IE]>\
	<style type="text/css">\
		@media screen {\
			.slides, .slidesControl, .slide {zoom: 1;}\
		}\
		.slide {\
			top: 0px;\
			visibility: expression((parentElement.className.match(/(^|\\s)slides(\\s|$)/)) ? ((parentElement.children[0] != this) ? "hidden" : "inherit") : "inherit");\
			position: expression((parentElement.className.match(/(^|\\s)slides(\\s|$)/)) ? ((parentElement.children[0] != this) ? "absolute" : "relative") : "relative");\
		}\
		.slidesControl {\
			display: expression((parentElement.className.match(/noSlidesControl/)) ? "none" : "block");\
		}\
	<\/style>\
<![endif]-->\
';
};



/* ====================
   Class methods ...
==================== */

Slides.initElements = function(obj) {
	if (!document.getElementsByTagName) return;
	var divs = (obj||document).getElementsByTagName('div');
	var slides = new Array();
	if (divs) {
		for (var i=0; i<divs.length; i++) {
			var n = divs[i];
			if (n.className && n.className.match(/(^|\s)slides(\s|$)/)) slides[slides.length] = n;
		}
	};
	if (slides.length) {
		for (var j=0; j<slides.length; j++) new Slides(slides[j]);
	};
	if (document.addEventListener)
		document.addEventListener("click", Slides.checkId, false)
	else if (document.attachEvent)
		document.attachEvent("onclick", Slides.checkId);
}

Slides.findSlides = Slides.initElements;

Slides.updateLayout = function() {
	//for (var i=0; i<Slides.slides.length; i++) Slides.slides[i].setSizes();
}

/*
Slides.attachStyleSheet = function() {
	var head = document.getElementsByTagName('head');
	if (!head || !head[0].appendChild) return;
	head = (head) ? head[0] : null;
	var slides = null;

	var scripts = document.getElementsByTagName('script');
	for (var i=0; i<scripts.length; i++) {
		var src = scripts[i].src;
		if (src.match(Slides.mark)) {
			Slides.path = src.replace(Slides.mark, '');
			var ref = scripts[i];
			break;
		}
	}

	var styleLink = document.createElement('link');
	styleLink.rel = 'stylesheet';
	styleLink.type = 'text/css';
	styleLink.href = Slides.path + '/' + Slides.styleSheet;
	head.appendChild(styleLink);
}
*/

Slides.getCurrentStyle = function(elm) {
	return (elm.currentStyle)
		? elm.currentStyle
		: ((document.defaultView && document.defaultView.getComputedStyle)
		? document.defaultView.getComputedStyle(elm, null)
		: null);
};

Slides.slidesByIdx = function(n) {
	var slides = Slides.slides[n];
	return (slides) ? slides : null;
}

Slides.showSlideInSlidesByIdx = function(p, n) {
	var slides = Slides.slides[n];
	if (!slides) return;
	slides.showSlide(p);
}

Slides.slidesById = function(id) {
	if (!document.getElementById) return null;
	var elm = document.getElementById(id);
	return (elm && elm.items) ? elm : null;
}

Slides.firstSlideById = function(id) {
	if (!document.getElementById) return;
	var elm = document.getElementById(id);
	if (elm && elm.firstSlide) elm.firstSlide();
}

Slides.prevSlideById = function(id) {
	if (!document.getElementById) return;
	var elm = document.getElementById(id);
	if (elm && elm.prevSlide) elm.prevSlide();
}

Slides.nextSlideById = function(id) {
	if (!document.getElementById) return;
	var elm = document.getElementById(id);
	if (elm && elm.nextSlide) elm.nextSlide();
}

Slides.lastSlideById = function(id) {
	if (!document.getElementById) return;
	var elm = document.getElementById(id);
	if (elm && elm.lastSlide) elm.lastSlide();
}

Slides.isShowSlideById = function(id) {
	if (!document.getElementById) return false;
	var elm = document.getElementById(id);
	if (!elm) return false;
	if (elm._slides) elm._slides.showSlide(elm._item);
	var par = elm.parentNode;
	while (par) {
		if (par._slides && typeof par._item != 'undefined') par._slides.showSlide(par._item);
		par = par.parentNode;
	}
	return true;
}

Slides.showSlideById = function(id) {
	Slides.isShowSlideById(id);
	return void 0;
}


Slides.nextSlideOnClick = function() {
	if (!this.parentNode) return;
	var elm = this.parentNode;
	if (elm && elm._slides) elm._slides.nextSlide();
}

Slides.cycleSlideOnClick = function() {
	if (!this.parentNode) return;
	var elm = this.parentNode;
	if (elm && elm._slides) elm._slides.cycleSlide();
}

Slides.checkId = function(evt) {
	evt = (evt) ? evt : ((event) ? event : null); if (!evt) return true;
	var elm = evt.target || evt.srcElement; if (!elm) return true;
	if (!elm.tagName || !elm.tagName.match(/^a$/i) || !elm.href) return true;
	
	// Get target ID ...
	var id = elm.href.match(/#[^#]+$/); if (!id) return true;
	id = id[0]; id = id.substring(1); if (!id) return true;
	
	// Check for same page ...
	var tpage = elm.href.match(/^[^#]+/); if (tpage) tpage = tpage[0];
	var apage = document.location.href.match(/^[^#]+/); if (apage) apage = apage[0];
	if (!(tpage && (tpage == apage))) return true;

	if (Slides.isShowSlideById(id) && document.getElementById) {
		if (evt.preventDefault) evt.preventDefault();
		if (typeof evt.cancelBubble != 'undefined') evt.cancelBubble = true;
		if (typeof evt.returnValue != 'undefined') evt.returnValue = false;
		return false;
	}
	
	return true;
}



/* =================
   Initialize ...
================= */

if (document.getElementsByTagName 
	&& document.createElement
	&& (!window.opera || document.createDocumentFragment)
	&& !(!window.opera && navigator.userAgent.match(/MSIE 5\..*Mac/))) {

	Slides.initComplete = false;
	
	document.write(Slides.initialCSS);
	
	Slides.docElm = document.documentElement;
	if (Slides.docElm) {
		if (!Slides.docElm.className) {
			Slides.docElm.className = 'slidesActive';
		} else if (!Slides.docElm.className.match('slidesActive')) {
			Slides.docElm.className += ' slidesActive';
		};
	};
	
	Slides.init = function() {

		Slides.initElements();
		
		if (document.location.hash) {
			var id = document.location.hash;
			id = id.replace('#', '');
			Slides.isShowSlideById(id);
		}
		
		Slides.initComplete = true;
		return true;
	}
	
	if (window.onDomReady) {
		window.onDomReady(Slides.init);
	} else if (typeof pageComplete == 'function') {
		Slides.oldPageComplete = pageComplete || function(){};
		pageComplete = function() {
			Slides.oldPageComplete();
			Slides.init();
		};
	} else {
		Slides.oldOnload = window.onload || function(){};
		window.onload = function() {
			Slides.oldOnload();
			Slides.init();
		};
	};

};

/* End of slides.js */
