//---------------------------------------------
// smartRollover
//---------------------------------------------

function smartRollover() {
	if(document.getElementsByTagName) {
		var images = document.getElementsByTagName("img");
		var preImages = new Array();
		for(var i=0; i < images.length; i++) {
			if(images[i].getAttribute("src").match("_off.")) {
				preImages[i] = new Image();
				preImages[i].src = images[i].getAttribute("src").replace("_off.", "_on.");
				images[i].onmouseover = function() {
					this.setAttribute("src", this.getAttribute("src").replace("_off.", "_on."));
				}
				images[i].onmouseout = function() {
					this.setAttribute("src", this.getAttribute("src").replace("_on.", "_off."));
				}
			}
		}
	}
}
if(window.addEventListener) {
	window.addEventListener("load", smartRollover, false);
} else if(window.attachEvent) {
	window.attachEvent("onload", smartRollover);
}

//---------------------------------------------
// stripedTable
//---------------------------------------------

function stripedTable () {
	var tables = document.getElementsByTagName("table");
	for (var i = 0; i < tables.length; i++) {
		if (tables[i].className.match(/striped/)) {
			stripedSet(tables[i]);
		}
	}
}
function stripedSet (table) {
	var current = "odd";
	var trs = table.getElementsByTagName("tr");
	for (var i = 0; i < trs.length; i++) {
		trs[i].className += " " + current;
		current = current == "even" ? "odd" : "even";
	}
}
if(window.addEventListener) {
	window.addEventListener("load", stripedTable, false);
} else if(window.attachEvent) {
	window.attachEvent("onload", stripedTable);
}

//---------------------------------------------
// smoothScroll
//---------------------------------------------

(function(){
    var easing = 0.25;
    var interval = 20;
    var d = document;
    var targetX = 0;
    var targetY = 0;
    var targetHash = '';
    var scrolling = false;
    var splitHref = location.href.split('#');
    var currentHref_WOHash = splitHref[0];
    var incomingHash = splitHref[1];
    var prevX = null;
    var prevY = null;
    addEvent(window, 'load', init);
    function init(){
        setOnClickHandler();
        if(incomingHash){
            if(window.attachEvent && !window.opera){
                setTimeout(function(){scrollTo(0,0);setScroll('#'+incomingHash);},50);
            }else{
                scrollTo(0, 0);
                setScroll('#'+incomingHash);
            }
        }
    }
    function addEvent(eventTarget, eventName, func){
        if(eventTarget.addEventListener){
            eventTarget.addEventListener(eventName, func, false);
        }else if(window.attachEvent){
            eventTarget.attachEvent('on'+eventName, function(){func.apply(eventTarget);});
        }
    }
    function setOnClickHandler(){
        var links = d.links;
        for(var i=0; i<links.length; i++){
            var link = links[i];
            var splitLinkHref = link.href.split('#');
            if(currentHref_WOHash == splitLinkHref[0] && d.getElementById(splitLinkHref[1])){
                addEvent(link, 'click', startScroll);
            }
        }
    }
    function startScroll(event){
        if(event){
            event.preventDefault();
        }else if(window.event){
            window.event.returnValue = false;
        }
        setScroll(this.hash);
    }
    function setScroll(hash){
        var targetEle = d.getElementById(hash.substr(1));
        if(!targetEle)return;
        var ele = targetEle
        var x = 0;
        var y = 0;
        while(ele){
            x += ele.offsetLeft;
            y += ele.offsetTop;
            ele = ele.offsetParent;
        }
        targetX = x;
        targetY = y;
        targetHash = hash;
        if(!scrolling){
            scrolling = true;
            scroll();
        }
    }
    function scroll(){
        var currentX = d.documentElement.scrollLeft||d.body.scrollLeft;
        var currentY = d.documentElement.scrollTop||d.body.scrollTop;
        var vx = (targetX - currentX) * easing;
        var vy = (targetY - currentY) * easing;
        var nextX = currentX + vx;
        var nextY = currentY + vy;
        if((Math.abs(vx) < 1 && Math.abs(vy) < 1)
           || (prevX === currentX && prevY === currentY)){
            scrollTo(targetX, targetY);
            scrolling = false;
            location.hash = targetHash;
            prevX = prevY = null;
            return;
        }else{
            scrollTo(parseInt(nextX), parseInt(nextY));
            prevX = currentX;
            prevY = currentY;
            var scope = this;
            setTimeout(function(){scroll.apply(scope)},interval);
        }
    }
}());

