/***********************************************
* CMotion Image Gallery- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
* Visit http://www.dynamicDrive.com for source code
* This copyright notice must stay intact for legal use
* Modified for autowidth and optional starting positions in
* http://www.dynamicdrive.com/forums/showthread.php?t=11839 by jschuer1 8/5/06
***********************************************/

 //1) Set width of the "neutral" area in the center of the gallery.
var restarea=6;
 //2) Set top scroll speed in pixels. Script auto creates a range from 0 to top speed.
var maxspeed=7;
 //3) Set to maximum width for gallery - must be less than the actual length of the image train.
var maxwidth=1000;
 //4) Set to 1 for left start, 0 for right, 2 for center.
var startpos=0;
////NO NEED TO EDIT BELOW THIS LINE////////////

var iedom = document.all || document.getElementById;
var loadedyes = 0;
var motionGalleries = new Array();
var count = 0;
var replaceImage = '/images/blank.gif';
var loadingImage = '/images/spinner.gif';

function ietruebody(){
    return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body;
}

function getposOffset(what, offsettype)
{
    var totaloffset=(offsettype=="left")? what.offsetLeft: what.offsetTop;
    var parentEl=what.offsetParent;
    while (parentEl!=null){
        totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
        parentEl=parentEl.offsetParent;
    }
    return totaloffset;
}


function moveleft(mg)
{
    if (loadedyes)
    {
        mg.movestate="left";
        if (iedom && parseInt(mg.cross_scroll.style.left)>(mg.menuwidth-mg.actualwidth))
        {
            mg.cross_scroll.style.left = parseInt(mg.cross_scroll.style.left)-mg.scrollspeed+"px";       
        }
    }
    //mg.lefttime=setTimeout(moveleft, 10, mg);
    var f = function() { moveleft(mg); };
    mg.lefttime=setTimeout(f, 10);
}

function moveright(mg)
{
    if (loadedyes)
    {
        mg.movestate="right";
        if (iedom&&parseInt(mg.cross_scroll.style.left)<=0)
        {
            mg.cross_scroll.style.left=parseInt(mg.cross_scroll.style.left)+mg.scrollspeed+"px";   
        }
    }
    //mg.righttime=setTimeout(moveright, 10, mg);
    var f = function() { moveright(mg); };
    mg.righttime=setTimeout(f, 10);
}

function motionengine(e)
{
    var crossmain = e ? e.currentTarget : window.event.srcElement;
    var mg = motionGalleries[getMotionGallery(crossmain)];
    var mainobjoffset = getposOffset(mg.crossmain, "left");
    var dsocx = (window.pageXOffset)? pageXOffset: ietruebody().scrollLeft;
    var dsocy = (window.pageYOffset)? pageYOffset : ietruebody().scrollTop;
    var curposy = window.event? event.clientX : e.clientX? e.clientX: "";
    var curposy2 = curposy;
    curposy -= mainobjoffset-dsocx;
    var leftbound = (mg.menuwidth-restarea)/2;
    var rightbound = (mg.menuwidth+restarea)/2;
    if (curposy > rightbound)
    {
        mg.scrollspeed = (curposy-rightbound)/((menuwidth-restarea)/2) * maxspeed;
        clearTimeout(mg.righttime);
        if (mg.movestate!="left") 
        {
            moveleft(mg);
        }
    }
    else if (curposy < leftbound)
    {
        mg.scrollspeed = (leftbound-curposy)/((menuwidth-restarea)/2) * maxspeed;
        clearTimeout(mg.lefttime);
        if (mg.movestate!="right")
        { 
            moveright(mg);
        }
    }
    else
    {
        scrollspeed=0;
    }
}

function contains_ns6(a, b) {
    if (b!==null)
    {
        while (b.parentNode)
        {
            if ((b = b.parentNode) == a)
            {
                return true;
            }
        }
    }
    return false;
}

function stopmotion(e)
{
    var crossmain = e ? e.currentTarget : window.event.srcElement;
    var mg = motionGalleries[getMotionGallery(crossmain)];
    if (!window.opera||(window.opera&&e.relatedTarget!==null))
    {
        if ((window.event&&!crossmain.contains(event.toElement)) || (e && e.currentTarget && e.currentTarget!= e.relatedTarget && !contains_ns6(e.currentTarget, e.relatedTarget)))
        {
            clearTimeout(mg.lefttime);
            clearTimeout(mg.righttime);
            mg.movestate="";
        }
    }
}

function getMotionGallery(currentTarget)
{
    while ( currentTarget.className != "motioncontainer" )
    {
        currentTarget = currentTarget.parentElement;
    }
    var i;
    for ( i = 0; i < motionGalleries.length; i++ )
    {
        if ( motionGalleries[i].id == currentTarget.id )
            return i;
    }
    return -1;
}

function fillup()
{
    var crossmains = getElementsByClassName("motioncontainer");
    var cross_scrolls = getElementsByClassName("motiongallery");
    var truecontainers = getElementsByClassName("truecontainer");
    var motionGallery, crossmain, cross_scroll, truecontainer;
    var i = 0;
    if (iedom)
    {
        for (i = 0; i < crossmains.length; i++)
        {
            crossmain = crossmains[i];
            cross_scroll = cross_scrolls[i];
            truecontainer = truecontainers[i];
            if(typeof crossmain.style.maxWidth !== 'undefined')
            {
                crossmain.style.maxWidth = maxwidth+'px';
            }
            menuwidth = crossmain.offsetWidth;
            actualwidth = truecontainer.offsetWidth;
            if (startpos != 0)
            {
                cross_scroll.style.left = (menuwidth-actualwidth)/startpos+'px';
            }

            crossmain.onmousemove = function(e)
            {
                motionengine(e);
            }

            crossmain.onmouseout = function(e)
            {
                stopmotion(e);
            }
            if ( document.body.filters )
            {
                if (typeof motioncontainer !== 'undefined' && motioncontainer.filters)
                {
                    motioncontainer.style.width = "0";
                    motioncontainer.style.width = "";
                    motioncontainer.style.width= Math.min(motioncontainer.offsetWidth, maxwidth)+'px';
                }
                cross_scroll.style.left = startpos ? (menuwidth-actualwidth)/startpos + 'px' : 0;
            }
            motionGallery = new motionGalleryObject(crossmain, cross_scroll, truecontainer, menuwidth, actualwidth);
            motionGalleries.push(motionGallery); 
        } 
    }
    loadedyes = 1;
}

function motionGalleryObject(crossmain, cross_scroll, truecontainer, menuwidth, actualwidth)
{
    this.crossmain = crossmain;
    this.id = crossmain.id;
    this.cross_scroll = cross_scroll;
    this.truecontainer = truecontainer;
    this.menuwidth = menuwidth;
    this.actualwidth = actualwidth;
    this.movestate = '';
    this.lefttime = null;
    this.righttime = null;
    this.scrollspeed = 0;
}

function SwapImage(imgId, imgSrc, index)
{
    var img = document.images[imgId];
    var anchor = img.parentNode;
    img = anchor.removeChild(img);
    var div = anchor.parentNode;
    var anchors = div.childNodes;
    anchors[index].appendChild(img);
    var newImg = new Image();
	img.src = replaceImage;
	newImg.src = imgSrc;
    newImg.onload = function () {
        img.src = imgSrc;

    }
}

/*
	Developed by Robert Nyman, http://www.robertnyman.com
	Code/licensing: http://code.google.com/p/getelementsbyclassname/
*/	
var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : 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) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			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(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				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 getElementsByClassName(className, tag, elm);
};