//
function initMoving(target, position, topLimit, btmLimit) {
	if (!target)
		return false;

	var obj = target;
	obj.initTop = position;
	obj.topLimit = topLimit;
	obj.bottomLimit = document.documentElement.scrollHeight - btmLimit;

	obj.style.position = "absolute";
	obj.top = obj.initTop;
	obj.left = obj.initLeft;

	if (typeof(window.pageYOffset) == "number") {
		obj.getTop = function() {
			return window.pageYOffset;
		}
	} else if (typeof(document.documentElement.scrollTop) == "number") {
		obj.getTop = function() {
			return document.documentElement.scrollTop;
		}
	} else {
		obj.getTop = function() {
			return 0;
		}
	}

	if (self.innerHeight) {
		obj.getHeight = function() {
			return self.innerHeight;
		}
	} else if(document.documentElement.clientHeight) {
		obj.getHeight = function() {
			return document.documentElement.clientHeight;
		}
	} else {
		obj.getHeight = function() {
			return 500;
		}
	}

	obj.move = setInterval(function() {
		if (obj.initTop > 0) {
			pos = obj.getTop() + obj.initTop;
		} else {
			pos = obj.getTop() + obj.getHeight() + obj.initTop;
			//pos = obj.getTop() + obj.getHeight() / 2 - 15;
		}

		if (pos > obj.bottomLimit)
			pos = obj.bottomLimit;
		if (pos < obj.topLimit)
			pos = obj.topLimit;

		interval = obj.top - pos;
		obj.top = obj.top - interval / 3;
		obj.style.top = obj.top + "px";
		obj.style.left = document.getElementById('body').offsetLeft + document.getElementById('body').offsetWidth + 'px';
	}, 30)
}

function SearchSlider() {
	var scroll = {time:1, start:0, change:0, duration:20, timer:null};
	var originaltime = scroll.time;
	var objWrap = null;
	var objCloseButton = null;
	var objMainButtons = new Array();

	// private status.
	var status = {inner:false, outer:false, type:'outer'};
	var temp = {duration:3, buffer:null, outer:[650, 58], inner:[319, 226]};
	var fireEvents = {animation:{finish:null}};

	this.initialize = function () {
		var objButtons = document.getElementById('buttons').getElementsByTagName('a');
		objCloseButton = document.getElementById('closeButton');

		document.getElementById('sm_content_01').style.display = 'none';

		for (var i=0; i<objButtons.length; i++) {
			switch (i) {
			case 0:
				objButtons[i].onclick = function () { if(document.getElementById('resultframe')!=null) {document.getElementById('resultframe').src = '/include/search/searchresult.aspx'}; fn_spec_search_reset(); return activate('inner', 2, 0); }
				break;
			case 1:
				objButtons[i].onclick = function () { if(document.getElementById('resultframe')!=null) {document.getElementById('resultframe').src = '/include/search/searchresult.aspx'}; return activate('inner', 1, 1); }
				break;
			}

			objMainButtons.push(objButtons[i]);
		}
	}

	var activate = function (type, visibleId, num) {
		switch (type) {
		case 'inner':
			if (visibleId == 2 && isInnerCompact() == false || visibleId == 1 && isInnerCompact() == true)
				return false;

			objWrap = document.getElementById('temp1');

			if (temp.buffer == null) {
				temp.buffer = scroll.duration;
				scroll.duration = temp.duration;
			}

			if (status.inner == false) {
				// reduce.
				var start = temp.inner[1];
				var end = temp.inner[0];
				var operator = '+';
			} else {
				// widen.
				var start = temp.inner[0];
				var end = temp.inner[1];
				var operator = '-';
			}

			toggleButton(num);
			resizeMainBox(temp.inner[0], temp.inner[1], operator);

			if (visibleId != undefined)
				toggleVisible(visibleId);

			status.inner = !status.inner;

			break;
		default:
			type = 'outer';
			objWrap = document.getElementById('sm_search');
			if (temp.buffer != null)
				scroll.duration = temp.buffer;

			if (status.outer == false) {
				// down.
				var start = -temp.outer[0];
				var end = temp.outer[1];
			} else {
				// up.
				var start = temp.outer[1];
				var end = -temp.outer[0];
			}

			status.outer = !status.outer;
			break;
		}

		status.type = type;
		startScroll(start, end, type, showCloseButton);

		return false;
	}

	var toggleButton = function (num) {
		for (var i=0; i<objMainButtons.length; i++) {
			if (i == num) {
				objMainButtons[i].className = objMainButtons[i].className.replace(/_off/, '_on');
			} else {
				objMainButtons[i].className = objMainButtons[i].className.replace(/_on/, '_off');
			}
		}
	}

	var resizeMainBox = function (num1, num2, operator) {
		var gap = num1 - num2;
		hideCloseButton();

		switch (operator) {
		case '+':
			temp.outer[0] += gap;
			break;
		case '-':
			temp.outer[0] -= gap;
			break;
		}

		relocateCloseButton(gap, operator);
	}

	var relocateCloseButton = function (gap, operator) {
		switch (operator) {
		case '+':
			objCloseButton.style.top = (parseInt(getRealStyle(objCloseButton.id, 'top')) + gap) + 'px';
			break;
		case '-':
			objCloseButton.style.top = (parseInt(getRealStyle(objCloseButton.id, 'top')) - gap) + 'px';
			break;
		}
	}

	var hideCloseButton = function () {
		toggleVisibility(objCloseButton.id, 'hide');
	}

	var showCloseButton = function () {
		toggleVisibility(objCloseButton.id, 'show');
	}

	var toggleVisibility = function (id, type) {
		var objTemp = document.getElementById(id);

		switch (type) {
		case 'show':
			objTemp.style.display = 'block';
			break;
		default:
			objTemp.style.display = 'none';
			break;
		}
	}

	var toggleVisible = function (id) {
		switch (id) {
		case 1:
			document.getElementById('sm_content_01').style.display = 'block';
			document.getElementById('sm_content_02').style.display = 'none';
			break;
		default:
			document.getElementById('sm_content_01').style.display = 'none';
			document.getElementById('sm_content_02').style.display = 'block';
			break;
		}
	}

	var getRealStyle = function (id, styleName) {
		var element = document.getElementById(id);
		var realStyle = null;

		if (element.currentStyle)
			realStyle = element.currentStyle[styleName];
		else if (window.getComputedStyle)
			realStyle = window.getComputedStyle(element,null)[styleName];
		return realStyle;
	}

	var isInnerCompact = function () {
		return status.inner;
	}

	this.activateOuter = function () {
		activate('outer');
	}

	var startScroll = function (start, end, type, fnc) {
		if (scroll.timer != null) {
			clearInterval(scroll.timer);
			scroll.timer = null;
		}

		if (fnc != undefined)
			fireEvents.animation.finish = fnc;

		scroll.start = start;
		scroll.change = end - start;
		scroll.timer = setInterval(scrollVertical, 15);
	}

	var scrollVertical = function () {
		if (scroll.time > scroll.duration) {
			clearInterval(scroll.timer);
			scroll.time = originaltime;
			scroll.timer = null;

			if (fireEvents.animation.finish != null)
				fireEvents.animation.finish();
		} else {
			switch (status.type) {
			case 'inner':
				objWrap.style.height = sineInOut(scroll.time, scroll.start, scroll.change, scroll.duration) + 'px';
				break;
			default:
				objWrap.style.top = sineInOut(scroll.time, scroll.start, scroll.change, scroll.duration) + 'px';
				break;
			}

			scroll.time++;
		}
	}

	var sineInOut = function (t, b, c, d) {
		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
	}
}

var objSearchSlider = new SearchSlider();
objSearchSlider.initialize();

function tempCaller() {
	objSearchSlider.activateOuter();
}