MP.prototype.Page = function (params, parent) {
	var proto = this;
	
	if (!params._enabled) {
		return false;
	}
	
	var proto = {};
	var container = $('<div id="mp-page"></div>').appendTo(params._container);

	proto = {
		_container: container,
		_element: null,
		_contents: {}
	}

	proto.Show = parent.Page_Show;
	proto.Hide = parent.Page_Hide;
	proto.Load = parent.Page_Load;
	proto.Scroll = parent.Page_Scroll;
	proto.Resize = parent.Page_Resize;
	proto.Style = parent.Page_Style;
	proto.Prepare = parent.Page_Prepare;

	setTimeout(function () {
		proto.Load(params, parent);
		proto.Resize(params, parent);
		proto.Style(params, parent);
	}, 0);

	return proto;

};

MP.prototype.Page_Load = function(params, parent) {
	var proto = this;
	
	var page = params._page;
	
	if (!params._page && parent.__navigation._contents) {
		var hash = null;
		if (window.location.hash.indexOf('#') !== -1) {
			hash = window.location.hash.split('#')[1];
			if (parent.__navigation._contents[hash]) {
				params._default = hash;
			}
		}
		
		if (params._default && parent.__navigation._contents[params._default]) {
			return proto.Load(parent.__navigation._contents[params._default], parent);
		}
	}
	
	if (parent.__page._element) {
		parent.__page._element.fadeOut(MP_Env.speeds.fast, function () {
			parent.__page._element.remove();
			parent.__page._element = null;
			parent.__page.Load(params, parent);
		});
		
		return;
	}
	
	parent.__page._container.html('');
	
	if (params._navigate) {
		return window.location.href = page;
	}
	
	if (params._frame) {
		parent.__page._element = $('<iframe class="mp-page-element" frameborder="0" hspace="0" vspace="0" marginheight="0" marginwidth="0"></iframe>').appendTo(parent.__page._container)
	} else {
		parent.__page._element = $('<div class="mp-page-element"></div>').appendTo(parent.__page._container);
	};
	
	parent.__page._element
	.error(function() {
		alert('Handler for .error() called.')
	})
	.load(page, function (e) {
		$(this)
		.attr('src', page);

		if (params._callback) {
			params._callback(e);
		}
		
		parent.__page._element.css({opacity: 1});

		//Todo Move into a Background function
		parent.__background.Load({
			element: $('#mp-page .mp-background')
		}, parent);
		
		proto.Prepare(params, parent);
		proto.Scroll(params, parent);
	})
	.css({opacity: 0});
	
	window.location.hash = '#' + params._hash;
};

MP.prototype.Page_Scroll = function (params, parent) {
	var proto = this;

	if ($('.mp-page-content-container ul').height() === 0) {
		return setTimeout(function () {
			proto.Scroll(params, parent);
		}, 100);
	};

	var height = $('.mp-page-content-container ul').height();

	if (parent.__page._scroll) {
		parent.__page._scroll.destroy();
	}

	$('.mp-page-content-container ul').css({
		height: height - ($(window).height() - 10)
	});

	if (height > ($(window).height() - 10)) {
		parent.__page._scroll = new iScroll($('.mp-page-content-container')[0], {
			snap: 'li',
			momentum: true,
			hScrollbar: true,
			vScrollbar: true
		});
		
	};

};

MP.prototype.Page_Prepare = function (params, parent) {
	var proto = this;
	
	$('.mp-page-content').hover(function () {
		//Quickly hack in Description
		if (parent.__description && $(this).data()._description) {
			parent.__description.Text($(this).data(), parent);
			parent.__description.Show(params, parent);
		};
		
		proto._container.css({
			zIndex: 1
		});
		
		parent.__overlay.Show(params, parent);

	}, function () {
		//Quickly hack in Description
		if (parent.__description) {
			parent.__description.Hide(params, parent);
		}
		
		proto._container.css({
			zIndex: 0
		});
		
		parent.__overlay.Hide(params, parent);
	});

};

MP.prototype.Page_Show = function (params, parent) {
	this._container.css({opacity: 1});
};

MP.prototype.Page_Hide = function (params, parent) {
	this._container.css({opacity: 0});
};

MP.prototype.Page_Resize = function (params, parent) {
	
};

MP.prototype.Page_Style = function (params, parent) {
	var defaults = {
		main: ''
	};
	
	$('#mp-page-style').remove();
	this._style = $('<style id="mp-page-style">' + defaults.main + '</style>')
	.appendTo('head');
};

