﻿//***********************************************************************//
// ImageScroller - Author:iLawton - PureNet Solutions Ltd
//***********************************************************************//

var IsScrolling = false;
var Element;
var ScrollerSpans;
var ItemWidth = 115;
var ItemHeight = 77;

function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;		
	} else {
		window.onload = function() {
			if (oldonload) {
				oldonload();
			}
			func();
		}
	}
}

function DetectBrowser() {
	// Detects browser version and sets a higher scroll speed if the browser is IE 8.0 and above
	var browser = navigator.appName;
	var b_version = navigator.appVersion;
	var version = parseFloat(b_version);
	var speed = 3;
	var ie8 = b_version.indexOf("MSIE 8.0");

	if ((browser == "Microsoft Internet Explorer") && (ie8 != -1)) {
		speed = 2;
	}
	else if ((browser == "Netscape" || browser == "Microsoft Internet Explorer") && (version >= 4)) {
		speed = 2;
	}
	else {
		speed = 2;
	}

	return speed;
}



function ScrollLeft(ElementID) {
	Scroll(ElementID, -(DetectBrowser()));
}

function ScrollRight(ElementID) {
	Scroll(ElementID, DetectBrowser());
}

function ScrollLeftSetValues(ElementID, width, height) {
	ItemWidth = width;
	ItemHeight = height;
	Scroll(ElementID, -(DetectBrowser()));
}

function ScrollRightSetValues(ElementID, width, height) {
	ItemWidth = width;
	ItemHeight = height;
	Scroll(ElementID, DetectBrowser());
}

function ScrollUp(ElementID) {
	ScrollVertical(ElementID, DetectBrowser());
}

function ScrollDown(ElementID) {
	ScrollVertical(ElementID, -(DetectBrowser()));
}


function Scroll(ElementID, Value) {
	if (!IsScrolling) {
		Element = document.getElementById(ElementID);
		if (Element != null) {
			ScrollerSpans = getElementsByClass("ScrollerSpan", Element);
			IsScrolling = true;
			MoveImages(Value);
		}
	}
}

function ScrollVertical(ElementID, Value) {
	if (!IsScrolling) {
		Element = document.getElementById(ElementID);
		if (Element != null) {
			ScrollerSpans = getElementsByClass("ScrollerSpan", Element);
			IsScrolling = true;
			MoveImagesVertical(Value);
		}
	}
}

function StopScrolling() {
	IsScrolling = false;
	if (Element != null)
		Element.onMouseout = null;
}

function MoveImages(Value) {	
		
	if ((ScrollerSpans.length * ItemWidth) > Element.offsetWidth) {
		if (IsScrolling) {
			var MaxLeft = 0;
			var MaxRight = Element.offsetWidth;

			for (var i = 0; i < ScrollerSpans.length; i++) {
				var Image = ScrollerSpans[i];

				if ((Value > 0 // We're going right
					&& ScrollerSpans[0].offsetLeft >= 0)
					|| (Value < 0 // We're going left
					&& ScrollerSpans[ScrollerSpans.length-1].offsetLeft <= (Element.offsetWidth - Image.offsetWidth))) {
					IsScrolling = false;
					break;
				}
				if (Image.style != null) {
					Image.style.left = (Image.offsetLeft + Value) + "px";

					if (Image.offsetLeft < MaxLeft) {
						MaxLeft = Image.offsetLeft;
					}

					if ((Image.offsetLeft + ItemWidth) > MaxRight) {
						MaxRight = (Image.offsetLeft + ItemWidth);
					}
				}
			}
			setTimeout("MoveImages(" + Value + ");", 0);
		}
	}
}

function MoveImagesVertical(Value) {
	if ((ScrollerSpans.length * ItemHeight) > Element.offsetHeight) {
		if (IsScrolling) {
			var MaxTop = 0;
			var MaxBottom = Element.offsetHeight;

			for (var i = 0; i < ScrollerSpans.length; i++) {

				var Image = ScrollerSpans[i];
				//alert(Image.offsetTop);
				if ((Value > 0 // We're going down
					&& ScrollerSpans[0].offsetTop >= 0) 
					|| (Value < 0 // We're going up
					&& ScrollerSpans[ScrollerSpans.length - 1].offsetTop <= (Element.offsetHeight - Image.offsetHeight))) {
					IsScrolling = false;
					break;
				}

				if (Image.style != null) {
					Image.style.top = (Image.offsetTop + Value) + "px";

					if (Image.offsetTop < MaxTop) {
						MaxTop = Image.offsetTop;
					}

					if ((Image.offsetTop + ItemHeight) > MaxBottom) {
						MaxBottom = (Image.offsetTop + ItemHeight);
					}
				}
			}

			setTimeout("MoveImagesVertical(" + Value + ");", 0);
		}
	} else {
	}
}









/*
	Developed by Robert Nyman, http://www.robertnyman.com
	Code/licensing: http://code.google.com/p/getelementsbyclassname/
*/	
var getElementsByClass = function (className, elm){
	if (document.getElementsByClass) {
		getElementsByClass = function (className, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClass(className),
				nodeName = null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClass = function (className, elm) {
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//*" + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//*" + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClass = function (className, elm) {
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = elm.all,
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClass(className, elm);
};

