/**
 * @author Nikolay Borisov (nikolay@borisov.me | http://nikolay.borisov.me/)
 * @copyright Notamedia (http://notamedia.ru/)
 * @version 0.3
 * @required jQuery
 * @date 2009-11-12
 */

var NaveganteClass = function(){

	var self = this;

	var $container = $('#container');
	var $scroller = $('#scroller'),
		scroller = $scroller.get(0);
	var $campo = $('#campo');
	var $header = $('#header');
	var $footer = $('#footer');
	var $window = $(window);

	var stageWidth;
	var stageHeight;
	var scrollWidth;

	var loaded = false;

	var left = 2030;
	var top = 1870;
	var height = 1300;
	var footerOffset = 342;
	var loadFunc;
	var unloadFunc;


	this.setPosition = function(_left, _top, _height, _footerOffset, _loadFunc, _unloadFunc, _ani){
		if(left != _left || top != _top){
			if(loaded && unloadFunc){
				unloadFunc();
				loaded = false;
			}

			left = _left;
			top = _top;
			height = _height;
			footerOffset = _footerOffset;
			loadFunc = _loadFunc;
			unloadFunc = _unloadFunc;

			setPlace(_ani);
		}		
	}

	this.scrollTo = function(_scrollTo){
		if(height > stageHeight){
			$scroller.stop().animate({ scrollTop: _scrollTo }, 1000);
		}
	}

	this.setHeight = function(_height, _scrollTo){
		height = _height;
		var yOffset = (stageHeight-height)/2;

		var y;

		if(height > stageHeight){
			y = top;
		}else{
			y = top - yOffset;
		}

		var footerTop, headerTop;

		if(height > stageHeight){
			headerTop = 0;
			footerTop = height - footerOffset;
		}else{
			headerTop = yOffset;
			footerTop = yOffset + height - footerOffset;
		}

		if(height > stageHeight){
			$container.css({ 'width':scrollWidth }).animate({ 'height':height }, 1000);
			$scroller.css({ 'width':stageWidth });
		}else{
			$container.css({ 'width':stageWidth }).animate({ 'height':stageHeight }, 1000);
			$scroller.css({ 'width':3000 });
		}

		$header.stop().animate({ 'top':headerTop }, 1000);
		$footer.stop().animate({ 'top':footerTop }, 1000);
		$campo.stop().animate({ 'top':-y }, 1000);
			
	}

	this.getHeight = function(){
		return height;
	}

	this.show = function(){
		$container.show();
		resizeMe();
	}

	var resizeMe = function(e){
		stageWidth = $window.width();
		stageHeight = $window.height();

		$scroller.css({ 'width':stageWidth, 'height':stageHeight });

		var h = $container.css('height');
		$campo.hide();
		$container.css({ 'width':'auto', 'height':3000 });
		scrollWidth = parseInt(scroller.scrollWidth);
		$campo.show();
		$container.css({ 'width':scrollWidth, 'height':h });

		setPlace();
	}

	var setPlace = function(ani){
		var xOffset = (stageWidth-980)/2;
		var yOffset = (stageHeight-height)/2;

		var x = left - xOffset;
		var y;

		if(height > stageHeight){
			y = top;
		}else{
			y = top - yOffset;
		}

		var footerTop, headerTop;

		if(height > stageHeight){
			headerTop = 0;
			footerTop = height - footerOffset;
		}else{
			headerTop = yOffset;
			footerTop = yOffset + height - footerOffset;
		}


		$header.css({ 'left':xOffset });
		$footer.css({ 'left':xOffset });

		if(ani){
			$scroller.css({ 'width':3000 });
			$container.css({ 'width':stageWidth });
			if(parseInt(scroller.scrollTop) > 0){
				$scroller.stop().animate({ scrollTop:0 }, 2000);
			}
			$header.stop().animate({ 'top':headerTop }, 2000);
			$footer.stop().animate({ 'top':footerTop }, 2000);
			$campo.stop().animate({ 'left':-x, 'top':-y }, 2000, function(){
				updateContainer();
				if(loadFunc){
					loadFunc();
					loaded = true;
				}
			});
		}else{
			$header.css({ 'top':headerTop });
			$footer.css({ 'top':footerTop });
			$campo.css({ 'left':-x, 'top':-y });
			updateContainer();
			if(loadFunc){
				loadFunc();
				loaded = true;
			}
		}
	}

	var updateContainer = function(){
		if(height > stageHeight){
			$container.css({ 'width':scrollWidth, 'height':height });
			$scroller.css({ 'width':stageWidth });
		}else{
			$container.css({ 'width':stageWidth, 'height':stageHeight });
			$scroller.css({ 'width':3000 });
		}
	}

	$('html').css({ overflow:'hidden' });

	$window.resize(resizeMe);

	resizeMe();

}

