//If the anchor set in Iframe, the y's offset of scroll will add parent object's y offset.
var headerOffset = 150;

// translate to number
function intval(v) {
	v = parseInt(v);
	return isNaN(v) ? 0 : v;
}  
// get anchor's position
function getPos(e) {
	var l = 0;
	var t = 0;
	var w = intval(e.style.width);
	var h = intval(e.style.height);
	var wb = e.offsetWidth;
	var hb = e.offsetHeight;
	while (e.offsetParent) {
		l += e.offsetLeft + (e.currentStyle ? intval(e.currentStyle.borderLeftWidth) : 0);
		t += e.offsetTop + (e.currentStyle ? intval(e.currentStyle.borderTopWidth) : 0);
		e = e.offsetParent;
	}
	l += e.offsetLeft + (e.currentStyle ? intval(e.currentStyle.borderLeftWidth) : 0);
	t += e.offsetTop + (e.currentStyle ? intval(e.currentStyle.borderTopWidth) : 0);
	return {x:l, y:t, w:w, h:h, wb:wb, hb:hb};
}  
// get scroll
function getScroll() {
	var t, l, w, h;
	if (document.documentElement && document.documentElement.scrollTop) {
		t = document.documentElement.scrollTop;
		l = document.documentElement.scrollLeft;
		w = document.documentElement.scrollWidth;
		h = document.documentElement.scrollHeight;
	} else {
		if (document.body) {
			t = document.body.scrollTop;
			l = document.body.scrollLeft;
			w = document.body.scrollWidth;
			h = document.body.scrollHeight;
		}
	}
	return {t:t, l:l, w:w, h:h};
}  
// foward
function scroller(el, duration,hasHeaderOffset) {
	if (typeof el != "object") {
		var ua = navigator.userAgent;
		var isMSIE = (navigator.appName == "Microsoft Internet Explorer");
		if(isMSIE){
			el =window.frames['nj'].document.getElementById(el);
		}else{
			var iframeObject = document.getElementById('nj');
			el = iframeObject.contentDocument.getElementById(el);
		}
	}
	if (!el) {
		return;
	}
	var z = this;
	z.el = el;
	z.p = getPos(el);
	z.s = getScroll();
	z.clear = function () {
		window.clearInterval(z.timer);
		z.timer = null;
	};
	z.t = (new Date).getTime();
	z.step = function () {
		var t = (new Date).getTime();
		var p = (t - z.t) / duration;
		if (t >= duration + z.t) {
			z.clear();
			window.setTimeout(function () {
				z.scroll(hasHeaderOffset?z.p.y+headerOffset:z.p.y, z.p.x);
			}, 13);
		} else {
			st = ((-Math.cos(p * Math.PI) / 2) + 0.5) * (z.p.y - z.s.t) + z.s.t;
			sl = ((-Math.cos(p * Math.PI) / 2) + 0.5) * (z.p.x - z.s.l) + z.s.l;
			z.scroll(st, sl);
		}
	};
	z.scroll = function (t, l) {
		window.scrollTo(l, t);
	};
	z.timer = window.setInterval(function () {
		z.step();
	}, 13);
}


