
addEvent(window, 'load', init);

function init(){
	setHover();
	setSmoothScroll();
}

function setHover(){
	var elems = getElemntsByCName("rollover", "img");
	elems = elems.concat(getElemntsByCName("rollover", "input"));
	var len = elems.length;
	for(var i=0; i<len; i++){
		elems[i].onmouseover = onMouseOverHandler;
		elems[i].onmouseout = onMouseOutHandler;
	}
}

function onMouseOverHandler(){
	if(this.src.match(/\_on\.(gif|jpg)/)) return;
	this.src = this.src.replace(/\.(gif|jpg)/,'_on.$1');
}
function onMouseOutHandler(){
	this.src = this.src.replace(/\_on\.(gif|jpg)/,'.$1');
}


var targetObj;
var posY = 0;
function setSmoothScroll(){
	var elems = document.getElementsByTagName("a");
	var pathname = location.pathname;
	if(pathname.charAt(pathname.length-1) == "/") pathname += 'index.html';
	for(var i=0; i<elems.length; i++){
		var h = elems[i].href;
		if(h.match(/#\w+/)){
			var tmp = h.split("/");
			if(!tmp[tmp.length - 1].match(/.\htm/)) tmp[tmp.length - 1] = 'index.html'+tmp[tmp.length - 1];
			h = tmp.join("/");
			if(h.indexOf(pathname) > -1) elems[i].onclick = startSmoothScroll;
		}
	}
}
function startSmoothScroll(evt){
	if(window.opera) return;
	
	var evtObj = this;
	if(document.all) event.returnValue = false;
	else evt.preventDefault();
	
	var n = evtObj.href.substr(evtObj.href.lastIndexOf("#")+1);
	var elems=document.all || document.getElementsByTagName("*");
	for(var i=0; i<elems.length; i++){
		if(elems[i].id==n || elems[i].name==n){
			targetObj = elems[i];
			break;
		}
	}
	if(targetObj){		
		var ph = getPageHeight();
		var wh = getWindowHeight();
		if(ph<wh) ph = wh;
		
		var offsetTrail = evtObj;
		posY = 0;
		while(offsetTrail){
			posY += offsetTrail.offsetTop;
			offsetTrail = offsetTrail.offsetParent;
		}
		offsetTrail = targetObj;
		targetObj.posY = 0;
		while(offsetTrail){
			targetObj.posY += offsetTrail.offsetTop;
			offsetTrail = offsetTrail.offsetParent;
		}
		if(targetObj.posY<0) targetObj.posY = 0;
		if(targetObj.posY>(ph-wh)) targetObj.posY = ph-wh;
		setTimeout(loop, 33);
	}
}
function loop(){	
	scrollY = document.body.scrollTop || document.documentElement.scrollTop;
	var moveY = (targetObj.posY - posY - (posY - scrollY)) / 4;		
	posY += moveY;
	if((moveY<0 && posY>scrollY) || (moveY>0 && posY<scrollY)) posY = scrollY;
	
	if(Math.abs(posY-targetObj.posY)<2) {
		scroll(0, targetObj.posY);
		return false;
	}
	scroll(0, posY);
	setTimeout(loop, 33);
}
function getPageHeight(){
	var ph;
	if(window.innerHeight && window.scrollMaxY)
		ph = window.innerHeight + window.scrollMaxY;
	else if(document.body.scrollHeight>document.body.offsetHeight)
		ph = document.body.scrollHeight;
	else
		ph = document.body.offsetHeight;
	return ph;
}
function getWindowHeight(){
	var wh;
	if(window.innerHeight)
		wh = window.innerHeight;
	else if(document.documentElement && document.documentElement.clientHeight)
		wh = document.documentElement.clientHeight;
	else if(document.body)
		wh = document.body.clientHeight;
	return wh;
}

function getElemntsByCName(classname/*string*/, tag/*string*/, p/*element*/){
	var base = p || document;
	var target = tag || "*";
	var elems = base.getElementsByTagName(target);
	var len = elems.length;
	var reg = new RegExp("(?:^|\\s)" + classname + "(?:$|\\s)");
	var result = [];
	
	for(var i=0; i<len; i++){
		if(reg.test(elems[i].className)){
			result.push(elems[i]);
		}
	}
	return result;
}

function addEvent(target/*element*/, evt/*string*/, func/*function*/){
	if(window.addEventListener) target.addEventListener(evt, func, false);
	if(window.attachEvent) target.attachEvent('on'+evt, func);
}


