(function(){
function Cookie(name){ this.$name = name; var allcookies = document.cookie; if(allcookies == "") return; var cookies = allcookies.split('; '); var cookie = null; for(var i = 0; i<cookies.length; i++){ if(cookies[i].substring(0, name.length+1) == (name + "=")){ cookie = cookies[i]; break;}
}
if(cookie == null) return; var cookieval = cookie.substring(name.length+1); var a = cookieval.split("&"); for(var i = 0; i<a.length; i++)
a[i] = a[i].split(":"); for(var i=0; i<a.length; i++){ this[a[i][0]] = decodeURIComponent(a[i][1]);}
}
Cookie.prototype.store = function(daysToLive, path, domain, secure){ var cookieval = ""; for(var prop in this){ if((prop.charAt(0)=='$') || ((typeof this[prop])=='function'))
continue; if(cookieval != "") cookieval += '&'; cookieval += prop + ':' + encodeURIComponent(this[prop]);}
var cookie = this.$name + '=' + cookieval; if(daysToLive || daysToLive == 0){ cookie += "; max-age=" + (daysToLive*24*60*60);}
if(path) cookie += "; path=" + path
if(domain) cookie += "; domain=" + domain; if(secure) cookie += "; secure"; document.cookie = cookie;}
Cookie.prototype.remove = function(path, domain, secure){ for(var prop in this){ if(prop.charAt(0) != '$' && typeof this[prop] != 'function')
delete this[prop];}
this.store(0, path, domain, secure);}


var Zoom = function(c){ this.size = [63, 69, 77, 93, 108, 123.1, 138.5, 167, 197]; this.defaultIdx = 3; this.selectedIdx = 3; this.container = c; this.cookie = new this.Cookie("fontsize"); if(this.cookie.sizeIdx){ this.selectedIdx = this.cookie.sizeIdx; this.change();}
}
Zoom.prototype.up = function(){ if(this.selectedIdx==this.size.length-1) return; this.selectedIdx++; this.change();}
Zoom.prototype.down = function(){ if(this.selectedIdx==0) return; this.selectedIdx--; this.change();}
Zoom.prototype.resetZoom = function(){ this.selectedIdx = this.defaultIdx; this.change();}
Zoom.prototype.change = function(){ this.cookie.sizeIdx = this.selectedIdx; this.cookie.store(null, "/"); document.getElementById(this.container).style.fontSize = this.size[this.selectedIdx]+"%";}
Zoom.prototype.Cookie = Cookie;

function setZoomEvent(){
	if(!!document.getElementById("zoomSmall")){
		var zoom = new Zoom('container');
		setFontSizePos();
		
		//set event
		addEvent(document.getElementById("zoomSmall"), "click", function(){zoom.down(); setFontSizePos(); return false;}, false);
		addEvent(document.getElementById("zoomReset"), "click", function(){zoom.resetZoom(); setFontSizePos(); return false;}, false);
		addEvent(document.getElementById("zoomLarge"), "click", function(){zoom.up(); setFontSizePos(); return false;}, false);
	}
	
	function setFontSizePos(){
		var classname = "fontDefault";
		if(zoom.selectedIdx < zoom.defaultIdx) classname = "fontSmall";
		else if(zoom.selectedIdx > zoom.defaultIdx) classname = "fontLarge";
		
		document.getElementById("funcZoom").className = classname;
	}
}

var targetObj;
var posY = 0;
function setSmoothScroll(){
	var elems = document.getElementsByTagName("a");
	var pathname = location.href.replace(location.hash, "").replace(location.search, "");
	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 addEvent(elem, ev, func, capt) {
	if(elem.addEventListener) {// FF, SF, OP, NS
		elem.addEventListener(ev, func, capt);
		return true;
	} else if(elem.attachEvent) {// Win IE
		return elem.attachEvent('on' + ev, func);
	} else {// Mac IE
		var temp = elem['on' + ev];
		if(typeof elem['on' + ev] != 'function') {
			elem['on' + ev] = function(e) { func(e); }
		} else {
			elem['on' + ev] = function(e) {
				temp(e);
				func(e);
			}
		}
	}
}
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(/\_ov\.(gif|jpg)/)) return;
	this.src = this.src.replace(/\.(gif|jpg|png)/,'_ov.$1');
}
function onMouseOutHandler(){
	this.src = this.src.replace(/\_ov\.(gif|jpg|png)/,'.$1');
}
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;
}

addEvent(window, "load", setZoomEvent);
addEvent(window, "load", setSmoothScroll);
addEvent(window, "load", setHover);
})();
