(function($)
{
	
	if(typeof console === 'undefined')
	{
		console = 
		{
			log: function(){},
			trace: function(){},
			dir: function(){}
		}
	}

	var Scroller = function(obj, steps, selectOnClick)
	{
		this.obj = $(obj);
		var t = this;

		if(!steps)
			steps = 20;

		this.steps = steps;

		this.container = this.obj.find('.selector');

		this.items = this.obj.find('.selector_item:visible');

		this.items.each(function(i)
		{
			$(this).data('offsetLeft', i * ($(this).width() + 1));
		});

		if(selectOnClick)
			this.items.click(function(){t.selectItem(this);});

		//this.container.css({width: (this.items.length + 1) * this.items.width()})

		this.onSelect = function(){};
		this.afterScroll = function(){};
		this.onMoveStep = function(){};
		this.onStopScroll = function(){};


		this.selectItem = function(item)
		{
			item = $(item);

			this.container.find('.selected').removeClass('selected');
			item.addClass('selected');

			var pad = Math.round((this.obj.width() - item.width()) / 2);

			this.onSelect(item);

			this.moveTo(-(item.data('offsetLeft') - pad));

		}

		this.moveTo = function(offsetLeft)
		{
			var currOffset = this.container.offset().left;//parseInt(this.container.css('marginLeft').replace('px', ''));

			if(isNaN(currOffset))
				currOffset = 0;
				
			var t = this;
			
			var delta = Math.abs(currOffset - offsetLeft);
			
			var direction = (currOffset < offsetLeft)? +1: -1;
				
			this.container.animate({marginLeft: offsetLeft}, 
			{ 
				complete: function(){setTimeout(function(){t.afterScroll();}, 10);},
				duration: 1000,
				step: function(pos)
				{
					t.onMoveStep(Math.abs(pos - currOffset) / delta * t.steps, t.steps, (pos * direction) - currOffset , delta, direction);
				}
			});
			
			return;

//			var y = [];
//
//			var steps = parseInt(delta / 1500 * this.steps);
//
//			for(var i = 0; i <= steps; ++i)
//			{
//				var x = -1.0 + (i * (2/steps));
//
//				if(x <= 0)
//					y[i] = Math.round((Math.pow(1.0 + x, 2)) / 2 * delta) ;
//				else
//					y[i] = Math.round((-Math.pow(1.0 - x, 2) + 2) / 2 * delta);
//			}
//
//			var index = 0;
//
//			this._tm = setInterval(function()
//			{
//
//				//t.container.css({marginLeft: currOffset + (y[index] * direction)});
//				try
//				{
//					t.container.get(0).style.marginLeft = (currOffset + (y[index] * direction)) + 'px';
//				}
//				catch(e){}
//
//				t.onMoveStep(index, y.length, y[index], delta, direction);
//
//				++index;
//
//				if(index >= y.length)
//				{
//					clearInterval(t._tm);
//					setTimeout(function(){t.afterScroll();}, 10);
//				}
//
//			}, 10);
		};

		this.stopScroll = function()
		{
			if(this._tm)
				clearInterval(this._tm);
				
			this.container.stop();

			this.onStopScroll();
		};

	};

	var AfterAll = function()
	{
		this._counter = 0;

		this._fn = [];

		this.getCallBack = function(cb)
		{
			var t = this;

			++this._counter;

			return function()
			{
				--t._counter;
				if(cb)
					cb.apply(this);

				if(t._counter == 0)
					t._afterAll(this);
			};
		};


		this.addAfterAllCB = function(fn)
		{
			this._fn.push(fn);
		};

		this._afterAll = function(obj)
		{
			for(var i = 0; i < this._fn.length; ++i)
				this._fn[i].apply(obj);
		};

	};


	var bg = {};
	var currentPage;
	var lastPage;
	var pagesMeta = {};
	var loader;
	var transition = [];
	var images;
	var preloadImages = [];
	var main_doc;
	var stopEffects = false;
	var firstLoad = true;
	var slideshow;
	var linkChanged = false;
	var forceGo = false;
	//var stopSlideshow = true;

	sbApi =
	{

		resizeBG: function()
		{
			var contentTop = 0;
			var contentLeft = 0;

			if(!bg.top)
				return;

			var box = {width: bg.top.width(), height: bg.top.height()};

			var img = bg.content.get(0);

			bg.contentAspect = bg.content.width() / bg.content.height();

			if(isNaN(bg.contentAspect))
				return;

			var currAspect = box.width / box.height;

			if(currAspect >= bg.contentAspect)
			{
				bg.content.css({marginTop: contentTop - ((box.width * (1 / bg.contentAspect)) - box.height) / 2, marginLeft: contentLeft, width: '100%', height: 'auto'});
			}
			else
			{
				bg.content.css({marginTop: contentTop, marginLeft: contentLeft - ((box.height * bg.contentAspect) - box.width) / 2, width: 'auto', height: box.height});
			}
		},
		
		sortBGs: function()
		{
			var i = 0;
			
			var count = $('#bg .indexed', main_doc).length;
			
			while(count > 0)
			{
				var item = $('#bg .index_' + i++, main_doc);
				if(item.length)
				{
					item.parent().append(item);
					count -= item.length;
				}
				
				if(i > 100)
					break;
			}
		},

		scrollContentTo: function(item, afterScroll, cycle)
		{
			var scroller = item.parent();

			if(!scroller.is('.selector'))
			{
				afterScroll(false);
				return;
			}

			var speed = scroller.attr('class').match(/scroll_speed_(\d+)/);

			if(speed)
				speed = parseInt(speed[1]);
			else
				speed = 20;

			var items = scroller.children();

			var newIndex = items.index(item);
			var oldIndex = items.index(scroller.find('.selected'));
			var count = 2;
			
			if(currentPage.main_section == 'works')
			{
				var goRight = newIndex < oldIndex;
				var goIndexRight = parseInt(items.eq(newIndex).data('index')) < parseInt(items.eq(oldIndex).data('index'));
				
				if(cycle)
				{
					goIndexRight = !goIndexRight;
				}
				
				if(goIndexRight && !goRight)
					scroller.prepend(items.eq(newIndex));
				
				if(!goIndexRight && goRight)
					scroller.append(items.eq(newIndex));
				
				count = items.filter('.current, .next_item').length + 1;
			}
			else
			{
				var goIndexRight = newIndex < oldIndex;
				
				for(var i = Math.min(newIndex, oldIndex) + 1; i < Math.max(newIndex, oldIndex); ++i)
				{
					items.eq(i).addClass('current');
					++count;
				}
			}

			var next = items.eq(newIndex);
			
			var addItem = false;
			
			if(!next.is('.next_item,.current'))
				addItem = true;
			
			next.addClass('next_item').addClass('current');
			
			var visibleItems = items.filter('.current, .next_item');
			
			var deltaIndex = visibleItems.index(items.eq(oldIndex)) - visibleItems.index(next);
			
			sbApi.placeParalaxBg('callback');

			//scroller.addClass('moving');

			scroller.css({width: 100 * count + '%'});
			
			items.css('width', 100 / count + '%');
			
			console.log(cycle, oldIndex, newIndex, items.eq(oldIndex).data('index'), items.eq(newIndex).data('index'), deltaIndex, addItem);

			if(goIndexRight && deltaIndex > 0 && addItem)
			{
				//scroller.addClass('back');
				//console.log(scroller.css('marginLeft'));
				
				var oldMargin = parseFloat(scroller.css('marginLeft').replace('px', ''));
				
				var w = items.eq(0).width();
				
				scroller.css({marginLeft: (oldMargin - (w * deltaIndex)) + 'px'});
			}

			

			if(next.find('img.content').length)
			{
				bg.content = next.find('img.content');
				sbApi.resizeBG();
			}

			//$('div#scroll_buttons').hide();

			var sel = new Scroller(scroller.parent(), (currentPage.main_section == 'works')? speed: (speed * (count - 1)));

			sel.afterScroll = function()
			{
				console.log('afterScroll');
				
				item.parent().find('.current').removeClass('current');
				item.removeClass('next_item').addClass('current');
				item.parent().find('.next_item').removeClass('next_item');
				item.parent().removeClass('moving').attr('style', ' ');
				items.attr('style', ' ');

				sbApi.sortBGs();

				afterScroll(true);

			};

			sel.onStopScroll = function()
			{
			};

			sel.onMoveStep = sbApi.moveParalaxBG;

			if(sbApi.drag.start)
				sel.moveTo = function(offset)
				{
					sbApi.dragWorksData.targetMargin = offset;
					items.eq(oldIndex).addClass('selected');
					next.removeClass('selected');
				};
			
			sel.selectItem(next);
			
			return sel;
		},

		getPageMeta: function(doc)
		{
			if(!doc)
				doc = document;

			doc = $(doc);

			var page = {};

			var next = doc.find('#next_link_meta');
			var prev = doc.find('#prev_link_meta');

			page.next_link = (next.attr('href'))? sbApi.getLink(next.get(0)): false;
			page.prev_link = (prev.attr('href'))? sbApi.getLink(prev.get(0)): false;

			if(!doc.find('#main_section_meta').html())
				console.trace();

			page.main_section = doc.find('#main_section_meta').html().toLowerCase();
			page.sub_section = doc.find('#sub_section_meta').html().toLowerCase();
			page.project = doc.find('#project_meta').html().toLowerCase();
			page.index = parseInt(doc.find('#index_meta').html());
			doc.find('.index_' + page.index).data('index', page.index);
			
			page.name = doc.find('#name_meta').html().toLowerCase();

			return page;
		},

		getLink: function(link)
		{
			var path = link.pathname.replace('.html', '').split('/');

			return path[path.length - 1];
		},


		setupLinks: function(doc)
		{
			if(!doc)
				doc = document;

			$(doc).find('a').each(function()
			{
				if($(this).attr('href') == '')
				{
					$(this).hide();
					return;
				}

				if($(this).is('.meta_info') || $(this).is('.untouch_link'))
					return;

				if(this.hostname == location.hostname && this.pathname.match(/html$/))
				{
					var page = sbApi.getLink(this);

					$(this).attr('href', '#' + page);

					$(this).addClass('_link').addClass(page + '__link');

					if(redirectTable[page.replace(/^page_/, '')])
						page = 'page_' + redirectTable[page.replace(/^page_/, '')];

					$(this).data('page', page);

					$(this).click(function()
					{
						if(sbApi.gotoPage.apply(this))
						{
							var inactive = $(this).parent().find('a');
							inactive.removeClass('active');
							inactive.trigger('sb.deactivate');

							$(this).addClass('active');
							$(this).trigger('sb.activate');

							return true;
						}

						return false;
					});
				}
			});
		},


	//		setInterval(function() {
	//			if(location.hash != currentLocation)
	//			{
	//				currentLocation = location.hash.replace('#', '');
	//
	//				loadPage(currentLocation);
	//			}
	//		}, 10);

		getContentOrder: function(meta)
		{
			var order = [];

			for(var n in pagesMeta)
			{
				order.push(pagesMeta[n].index);
			}

			order.push(meta.index);

			order.sort(function(a,b)
			{
				a = parseInt(a);
				b = parseInt(b);

				return a - b;
			});

			var pos = 0;

			for(var i = 0; i < order.length; ++i)
			{
				if(order[i] == meta.index)
				{
					pos = i;
					break;
				}
			}

			return {'pos': pos, 'order':order};
		},

		addTextContent: function(meta, content)
		{
			var order = sbApi.getContentOrder(meta);
			var pos = order.pos;
			order = order.order;

			if(content.find('#bg .selector_item').length)
			{
				var item = content.find('#bg .selector_item').removeClass('current').removeClass('selected');

				if(pos == 0)
					item.prependTo('#main_div #bg .selector')
				else
					item.insertAfter('#main_div #bg .index_' + order[pos - 1]);
			}

			item = content.find('#text .selector_item').removeClass('current').removeClass('selected').appendTo('#main_div #text .selector');

			if(pos == 0)
				item.prependTo('#main_div #text .selector')
			else
				item.insertAfter('#main_div #text .index_' + order[pos - 1]);
				
			if(meta.main_section == 'works')
			{
				$('#bottom .content', main_doc).append(content.find('#bottom .page_' + meta.name + '_page_content').removeClass('current'));
			}
			else
			{
				$('#bottom', main_doc).append(content.find('#bottom .page_' + meta.name + '_page_content').removeClass('current'));
			}

			$('#scroll_buttons', main_doc).append(content.find('#scroll_buttons .content').removeClass('current'));
		},

		loadPage: function(page, state)
		{
//			if($('.' + page + '_page_content').length)
//			{
//				loader.trigger('data_loaded');
//				return;
//			}

			loader.data("state", (state)?state: "loading");
			loader.data("page", page);

			//$.ajaxSetup({dataType: 'xml'});

			loader.data("request", $.get(page + '.html?ajax=1'/*&rnd=' + Math.random()*/, {}, sbApi.onPageDocumentLoad));
		},

		abortLoad: function()
		{
			loader.data('request').abort();
			loader.data('state', 'loaded');
			images = false;
			preloadImages = [];
		},

		onPageDocumentLoad: function(data)
		{
			loader.html(data);

			stylize(loader);

			sbApi.setupLinks(loader);

			images = loader.find('img');
			preloadImages = [];

			sbApi.imgChecker();
		},

		imgChecker: function()
		{
			var ok = true;

			if(!images)
				return;

			images.each(function()
			{
				if(!this.complete && $(this).attr('src'))
				{
					ok = false;
					//$('#wait').html($('#wait').html() + $(this).attr('src') + " "+ this.complete + '<br>');

					if(!this._checked)
					{
						var img = new Image();
						img.src = this.src;
						//img.onload = sbApi.imgChecker;
						preloadImages.push(img);
						this._checked = true;
					}
				}
			});

			if(ok)
			{
				images = false;
				preloadImages = [];
				sbApi.onPageLoad();
			}
			else
				setTimeout(sbApi.imgChecker, 500);
		},

		onPageLoad: function()
		{
			if(loader.data('state') == 'loaded')
				return;

			var page = sbApi.getPageMeta(loader);

			pagesMeta[loader.data('page')] = page;

			if(sbApi.slideOrReload(page) == 'slide')
			{
				switch(page.main_section)
				{
					case 'vision':
					case 'about':
					case 'contact':
					case 'works':
						sbApi.addTextContent(page, loader);
						break;
				}

				loader.html('');

				var state = loader.data("state");
				
				loader.data("state", "loaded");
				loader.trigger('data_loaded');
				
				if(state == 'preloading')
					loader.trigger('preload_completed');

				return;
			}
			else
			{

				var refresh = function()
				{
					$('#main_div').unbind('transition_finished', refresh);

					if(page.sub_section == currentPage.sub_section)
						loader.find('#works').remove();

					loader.children().each(function()
					{
						//console.log(this.innerHTML);
						$('#' + this.id, $('#main_div')).replaceWith(this);
					});

					loader.html('');

					loader.data("state", "loaded");

					lastPage = currentPage;
					currentPage = page;
					pagesMeta = {};
					pagesMeta[loader.data('page')] = page;

					$(document.body).attr('class', 'page_' + page.main_section);
					$('#main_div').attr('class', 'page_' + page.sub_section);

					loader.trigger('data_loaded');
					loader.trigger('page_opened');
					loader.trigger('page_reloaded');
				};

				if(sbApi.checkTransition())
					$('#main_div').bind('transition_finished', refresh);
				else
					refresh();

				return;
			}

		},

		slideOrReload: function(page)
		{
			if(page.main_section == currentPage.main_section)
			{
				if(page.main_section == 'works' && page.project != currentPage.project)
					return 'reload';

				return 'slide';
			}

			return 'reload';
		},

		preload: function()
		{
			if(!currentPage)
				console.trace();

			if(currentPage.next_link && !$('.' + currentPage.next_link + '_page_content').length)
			{
				sbApi.loadPage(currentPage.next_link, 'preloading');
				return;
			}

			if(currentPage.prev_link && !$('.' + currentPage.prev_link + '_page_content').length)
			{
				sbApi.loadPage(currentPage.prev_link, 'preloading');
				return;
			}
		},

		gotoPage: function()
		{

			if($(this).is('a'))
			{
				stopSlideshow = true;
				if(sbApi.scrollFeaturedInterval)
					clearInterval(sbApi.scrollFeaturedInterval);
					
				if(sbApi.featuredScroller && sbApi.featuredScroller.stopScroll)
					sbApi.featuredScroller.stopScroll();

			}

			if(loader.data('state') == 'loading')
				return false;

			loader.unbind('data_loaded', sbApi.gotoPage);

			if('page_' + currentPage.name == $(this).data('page') && !forceGo)
			{
				loader_anim.hide();
				return true;
			}
			
			forceGo = false;
			
			if(main_doc.data('state') == 'transition')
			{
				var trans = main_doc.data('trans');

				for(var i = 0; i < trans.length; ++i)
				{
					if(trans[i])
						trans[i].stopScroll();
				}

				main_doc.data('state', 'ok');
			}

			if($(this).is('a'))
				linkChanged = true;

			var content = $('#main_div .' + $(this).data('page') + '_page_content');

			var page = pagesMeta[$(this).data('page')];

			if(content.length)
			{
				main_doc.data('state', 'transition');
				loader_anim.hide();

				var count = content.length;

				var trans = [];
				
				lastPage = currentPage;
				currentPage = page;
				
				content.each(function() {
					var item = $(this);
					
					if(currentPage.main_section == 'works')
					{
						var btns = item.find('#scroll_left'); 
						if(btns.length) //init scroll buttons first
						{
							item.parent().find('.current').removeClass('current').attr('style', ' ');
							item.addClass('current');
						}
					}

					trans.push(sbApi.scrollContentTo(item, function(ok)
					{
						--count;

						if(count == 0)
						{
							content.parent().find('.current').removeClass('current').attr('style', ' ');
							content.addClass('current').find('#scroll_left a, #scroll_right a').attr('style', ' ');

							if(page.next_link && !lastPage.next_link)
								sbApi.showScrollRight();

							if(page.prev_link && !lastPage.prev_link)
								sbApi.showScrollLeft();

							if(!page.next_link && lastPage.next_link)
								sbApi.hideScrollRight();

							if(!page.prev_link && lastPage.prev_link)
								sbApi.hideScrollLeft();

							main_doc.data('state', 'ok');
							loader.trigger('page_opened');
						}
					}, ((lastPage.prev_link == 'page_' + page.name && page.index > lastPage.index)
							|| (lastPage.next_link == 'page_' + page.name && page.index < lastPage.index))));
				});

				main_doc.data('trans', trans);

				return true;
			}

			loader.bind('data_loaded', sbApi.gotoPage);

			loader_anim.show();

			if(loader.data('state') == 'preloading')
			{
				if($(this).data('page') == loader.data('page'))
				{
					loader.data('state', 'loading');

					return true;
				}
				else
					sbApi.abortLoad();
			}

			sbApi.animateTransition($(this).data('page'));

			sbApi.loadPage($(this).data('page'));

			return true;
		},

		animateTransition: function(newPage)
		{
			var meta = sbApi.detectPageSections(newPage);

			transition = [];

			if(meta.main_section != currentPage.main_section)
			{
				sbApi.addTransition($('#text', main_doc), 'fadeOut');

				sbApi.addTransition($('#bg', main_doc), 'fadeOut', [], function()
				{
					sbApi.addTransition($('#bottom', main_doc), 'slideUp');

					switch(currentPage.main_section)
					{
						case 'home':
							sbApi.addTransition($('#slogan', main_doc), 'slideUp');
							break;
						case 'works':
							sbApi.addTransition($('#works', main_doc), 'slideUp');
						default:
							sbApi.addTransition($('#submenu', main_doc), 'slideUp');
					}

				});

				$('#menu_' + currentPage.main_section + ' span:first').animate({marginTop: 0}, 1000);
				$('#menu_' + meta.main_section + ' span:first').animate({marginTop: -19}, 1000);

				sbApi.hideScrollLeft();
				sbApi.hideScrollRight();
			}
			else if(meta.sub_section != currentPage.sub_section && meta.main_section == 'works')
			{
				sbApi.addTransition($('#bg', main_doc), 'fadeOut', [], function()
				{
					sbApi.addTransition($('#works', main_doc), 'slideUp');
				});

				sbApi.hideScrollLeft();
				sbApi.hideScrollRight();
			}
		},

		addTransition: function(obj, type, args, cb)
		{
			if(!args)
				args = [];

			stopEffects = true;
			transition.push(obj);
			if(args.length == 0)
				args.push('slow');

			args.push(function(){sbApi.transition(cb);});

			obj[type].apply(obj, args);
		},

		transition: function(cb)
		{
			if(transition.length)
				transition.shift();
			else
				return;

			if(cb)
				cb();

			if(transition.length == 0)
				$('#main_div').trigger('transition_finished');
		},

		checkTransition: function()
		{
			return transition.length;
		},

		detectPageSections: function(page)
		{
			page = page.split('_');

			return {main_section: page.slice(1,2).join('_'), sub_section: page.slice(1,3).join('_')};
		},

		colorLinks: function()
		{
			$('#main_div a._link').removeClass('active');
			$('#main_div a.page_' + currentPage.name + '__link').addClass('active');
			$('#main_div a.page_' + currentPage.project + '__link').addClass('active');
			$('#main_div a.page_' + currentPage.sub_section + '__link').addClass('active');
		},

		trackPageview: function()
		{
			pageTracker._trackPageview('page_' + currentPage.name + '.html');
			//alert('page_' + currentPage.name + '.html');
		},

		checkContactsForm: function()
		{
			$('#EmailForm', main_doc).submit(function(){

				$('#form_loader', main_doc).load(function()
				{
					$('#EmailForm', main_doc).hide();
					$('#EmailFormOk', main_doc).show();
				});

				return true;
			});

		},

		fixScreenSizeIssues: function()
		{
			var height = main_doc.height();

			if(height < 695)
				main_doc.find('#text').addClass('wide');
			else
				main_doc.find('#text').removeClass('wide');

			sbApi.screen_width = main_doc.width();
		},

		initNewPage: function()
		{

			$('#wait', main_doc).attr('style', ' ').addClass('no_logo');

			if(sbApi.loaderTextAnimation)
				clearInterval(sbApi.loaderTextAnimation);

			$('#loader_text').hide();

			bg.content = $('#bg .selected .content');
			bg.container = $('#bg .selector');
			//bg.contentAspect = 1600 / 900; // real image size;
			bg.top = $('#bg');

			stopEffects = false;

			sbApi.resizeBG();

			if(sbApi.scrollFeaturedInterval)
				clearInterval(sbApi.scrollFeaturedInterval);

			$('#bg', main_doc).css({opacity: '0'});

			var wait = new AfterAll();

			wait.addAfterAllCB(function()
			{
				$('#bg', main_doc).animate({opacity: 1}, 'slow', function(){$(this).css('opacity', 'auto');});
			});

			switch(currentPage.main_section)
			{
				case 'works':
					sbApi.initWorksPage();

					if(lastPage.main_section != 'works')
					{
						$('#works').hide().slideDown('slow', wait.getCallBack(sbApi.clearStyle));

						$('#submenu').hide().slideDown('slow', wait.getCallBack(sbApi.clearStyle));
						$('#bottom').hide().slideDown('slow', wait.getCallBack(sbApi.clearStyle));
					}
					else if (lastPage.sub_section != currentPage.sub_section)
					{
						$('#works').hide().slideDown('slow', wait.getCallBack(sbApi.clearStyle));
					}
					else
					{
						setTimeout(wait.getCallBack(), 10);
					}
					break;
				case 'home':
					sbApi.initHomePage();
					$('#slogan').hide().slideDown('slow', wait.getCallBack(sbApi.clearStyle));
					$('#bottom').hide().slideDown('slow', wait.getCallBack(sbApi.clearStyle));
					break;
				default:
					sbApi.initTextPages();
					$('#submenu').hide().slideDown('slow', wait.getCallBack(sbApi.clearStyle));
					$('#bottom').hide().slideDown('slow', wait.getCallBack(sbApi.clearStyle));
			}

			//$('#bg').css({opacity: 'hide', display:'none'}).fadeIn('slow');
			$('#text').css({opacity: 'hide', display:'none'}).fadeIn('slow');
			//$('#scroll_buttons').css({opacity: 'hide', display:'none'}).fadeIn('slow');

			sbApi.showScrollLeft();
			sbApi.showScrollRight();


			if(firstLoad)
				$('#wait').fadeOut('fast', function(){sbApi.clearStyle.apply(this); loader_anim.hide();});


		},

		initTextPages: function()
		{
			sbApi.placeParalaxBg(true);

			bg.container = $('#bg .paralax');
			bg.top = bg.container;

			sbApi.resizeBG();
		},

		placeParalaxBg: function(init)
		{
			if(currentPage.main_section != 'vision'
					&& currentPage.main_section != 'about'
					&& currentPage.main_section != 'contact')
			{
				return false;
			}
			
			var pbg =  $('#bg .paralax', main_doc);
			
			if(!pbg.length)
				return false;
			
			pbg.stop();
			
			var items = $('#submenu_' + currentPage.main_section + ' a', main_doc);
			var count = items.length;
			
			var getFirstItem = function()
			{
				return $('#text .selector_item.next_item, #text .selector_item.current ', main_doc).eq(0);
			};
			
			var first_item = getFirstItem();
			var item_width = first_item.width();
			
			var aspect = Math.abs((pbg.width() - item_width) / (item_width * count - item_width));
			
			var getParalaxCurrentPos = function()
			{
				return parseFloat(pbg.css('marginLeft').replace('px',''));
			};
			
			var getParalaxPos = function(item_pos)
			{
				if(typeof item_pos == 'undefined')
					item_pos = parseFloat($('#text .selector', main_doc).css('marginLeft').replace('px', ''));
				
				return (item_pos - getFirstItem().data('index') * item_width) * aspect;
			};
			
			var getContentPos = function(p_pos)
			{
				if(typeof p_pos == 'undefined')
					p_pos = getParalaxCurrentPos(); 
					
				return p_pos / aspect + getFirstItem().data('index') * item_width;
			};
			
			if(init === true)
				pbg.css({marginLeft: getParalaxPos()});
			else if(init == 'callback')
			{
				sbApi.moveParalaxBG = function(i, length, pos, delta, direction)
				{
					pbg.css({marginLeft: getParalaxPos()});
				};
				
				sbApi.paralaxToContent = function(dx)
				{
					var new_pos = getParalaxCurrentPos() + dx;
					
					pbg.css({marginLeft: new_pos});
					
					return getContentPos(new_pos);
				};
			}
			else
			{
				pbg.animate({marginLeft: getParalaxPos()}, 'slow');
			}

		},
		
		paralaxToContent: function(dx)
		{
		},

		moveParalaxBG: function(){},

		initWorksPage: function()
		{
			var slide;

			if(lastPage.main_section != 'works')
			{
				slide = setTimeout(function() {
					$('.works_info.current', main_doc).slideUp("slow");
				}, 2000);
			}
			else
			{
				$('.works_info.current', main_doc).hide();
			}


			if(!touchBrowser)
			{
				$('#bottom').mouseover(function() {

					if(!$('.works_info.current', main_doc).length)
						return true;

					if(slide)
						clearTimeout(slide);

					slide = setTimeout(function()
					{
						$('.works_info.current', main_doc).slideDown("slow", function(){$(this).attr('style', ' ')});
					}, 100);
				});
				
				$('#bottom').mouseout(function(e) {
	
					if(e.pageY > $(this).offset().top && e.pageY < $(this).offset().top + $(this).height())
						return;
					
					if(slide)
						clearTimeout(slide);
					
					slide = setTimeout(function(){$('.works_info.current', main_doc).slideUp("slow");}, 600);
				});
			}
			else
			{
	
			}

			stopSlideshow = false;

			if(sbApi.slideshow)
				clearInterval(sbApi.slideshow);

			sbApi.slideshow = setInterval(function()
			{
				if(loader.data('state') == 'loading' || main_doc.data('state') == 'transition')
					return false;

				if(!stopSlideshow)
				{
					main_doc.data('page', currentPage.next_link);
					main_doc.trigger('go');
					stopSlideshow = false;
					//$('#scroll_right a.scroll_button', main_doc).click();
				}
				else
				{
					clearInterval(sbApi.slideshow);
				}
			}, 5000);

			var works = $('#works', main_doc);

			if(!works.data('animated'))
			{

				var items = works.find('a.selector_item');

				var selector = works.find('.selector').css('width', items.eq(0).outerWidth() * items.length);

				var sel_width = selector.width();

				var scroll;
				var fix;

				var pos;
				var posX;
				var currPos;
				var stop = false;
				//var startMove = false;
				
				var handle_move = function(e)
				{
					posX = e.pageX;

					stop = false;
					//startMove = true;
				};

				var handle_start = function(e)
				{
					if(fix)
						clearTimeout(fix);

					if(scroll)
						clearInterval(scroll);
						
//					e.stopPropagation();
//					e.preventDefault();
					
					//startMove = false;

					scroll = setInterval(function()
					{
						if(stop)
						{
							clearInterval(scroll);
							return;
						}
						
//						if(!startMove)
//							return;

						selector.stop();

						var aspect = (sel_width + 100) / sbApi.screen_width;

						if(aspect < 1)
							return;

						pos = - ((posX * aspect - posX) - 50);

						if(!currPos)
							currPos = parseFloat(selector.get(0).style.marginLeft.replace('px', ''));

						if(isNaN(pos))
							return;

						var d = currPos - pos;

						if(d == 0)
							return;

						//var move = Math.abs(600 / d);
						var move = Math.abs(d / 10);

						if(move > 10)
							move = 10;

						if(move < 1)
							move = 1;

						if(move > Math.abs(d))
							move = Math.abs(d);

						currPos = currPos - (move * (d/Math.abs(d)));

						selector.get(0).style.marginLeft = currPos + 'px';

					}, 10);
				};

				var handle_stop = function()
				{
					fix = setTimeout(function()
					{
						if(scroll)
							clearInterval(scroll);

						currPos = false;

						stop = true;

						if(stopEffects)
							return;

						if(!touchBrowser)
							sbApi.placeWorksSelector();
					}, 500);
				};
				
				if(!touchBrowser)
				{
					works.mouseenter(handle_start);
					works.mouseleave(handle_stop);
					works.mousemove(handle_move);
				}
				

				sbApi.placeWorksSelector(true);

			}

			works.data('animated', 1);


		},

		placeWorksSelector: function(immediate)
		{
			var sel = $('#works .selector', main_doc).stop();

			var selected = sel.find('.active');

			var item_pos = Math.abs(selected.offset().left - sel.offset().left);

			var sel_pos = (sel.parent().width() - sel.width()) / 2; //centred

			if(sel_pos < 0 && -sel_pos > item_pos)
				sel_pos = + (item_pos + 30);

			if((sel.parent().width() + sel_pos) < (item_pos + selected.width()))
			{
				sel_pos = - ((item_pos  + selected.width()) - (sel.parent().width() - 30));
			}

			if(sel_pos != sel.offset().left)
			{
				if(immediate)
					sel.css({marginLeft: sel_pos});
				else
					sel.animate({marginLeft: sel_pos}, 'slow');
			}
		},

		initHomePage: function()
		{
			var fItems = $('#featured_slide .selector_item').removeClass('current');

			var parent = fItems.parent();

			var items = [];
			fItems.each(function(index)
			{
				items.push($(this));//.remove());
			});

			//items.reverse();

			for(var i = 1; i < items.length; ++i)
			{
				if(i < 4)
					$(items[i]).addClass('current');

				parent.prepend(items[i]);
			}

			parent.prepend(items[0]);

			////fItems.parent().append($(fItems.get(0)).remove());
			////sbApi.selectNextFeaturedInfo();

			sbApi.resizeHomePage();
			sbApi.resizeFeatured();
			sbApi.resizeBG();

			if(!!window.opera)
				$('#bottom', main_doc).addClass('opera');

			sbApi.scrollFeaturedInterval = setTimeout(sbApi.scrollFeatured, 5000);
		},

		scrollFeatured: function(direction)
		{
			//if(!direction)
				direction = -1;

			var fItems = $('#featured_slide .selector_item');

			if(fItems.length < 4)
				return;

			var next = (direction > 0)? fItems.not('.current').filter(':first'): fItems.not('.current').filter(':last');
			var fake_next = (direction > 0)? next.prev(): next.next();

			next.parent().addClass('moving');

			if(direction < 0)
			{
				next.parent().css({marginLeft: -fake_next.width() + fake_next.parent().offset().left});
				next.parent().addClass('back');
			}

			next.addClass('next_item');
			sbApi.resizeFeatured();

			var current_image = $('#bg .selector_item.selected');

			var next_image = $('#bg .selector_item').eq(1);
			next_image.addClass('selected');

			bg.content = $('#bg .selector_item.selected .content');
			sbApi.resizeBG();

			next_image.css({top:'0px', position: 'absolute', opacity: '0.5', display: 'none'}).addClass('selected');

			//next_image.css({top:'0px', position: 'absolute', opacity: '0'}).addClass('selected');

			var sel = new Scroller('#featured_slide', 100);

			sel.afterScroll = function()
			{

				var previos_item = (direction > 0)? fItems.filter('.current:first'): fItems.filter('.current:last');


				var item = previos_item.removeClass('current');//.remove();

				next.removeClass('next_item').addClass('current');
				next.parent().removeClass('moving').removeClass('back').attr('style', ' ');

				if(direction > 0)
					next.parent().append(item);
				else
					next.parent().prepend(item);

				sbApi.scrollFeaturedInterval = setTimeout(sbApi.scrollFeatured, 5000);

				sbApi.selectNextFeaturedLink();
				sbApi.selectNextFeaturedInfo();

				$('#featured .featured_top.selected').css({opacity: 'hide', display:'none'}).fadeIn('slow');
				next_image.css({opacity: 0, display:'block'}).animate({opacity: 1}, 'slow', function()
				{
					current_image.parent().append(current_image.removeClass('selected'));
					bg.content = $('#bg .selector_item.selected .content');
					next_image.attr('style', ' ');
				});
			};



//			sel.onMoveStep = function(i, length)
//			{
//				//if(i % 4)
//				if(i == 0)
//					sbApi.selectNextFeaturedInfo();
//
////				if(1)//!(i % 2))
////				{
////					next_image.css('opacity', ((1 / length) * i));
////					$('#featured .featured_top.selected').css('opacity', ((1 / length) * i));
////				}
//			};


			sel.selectItem(fake_next);
			
			sbApi.featuredScroller = sel;

		},

		selectNextFeaturedInfo: function()
		{
			sbApi.selectNextItem('#featured .featured_top');
			//$('#featured .featured_top.selected').css({opacity:0}).animate({opacity:1});
		},

		selectNextFeaturedLink: function()
		{
			sbApi.selectNextItem('#text .selector_item');
		},

		selectNextItem: function(items)
		{
			var infos = $(items);

			var current = infos.parent().find('.selected');

			var current_index = infos.index(current);

			++current_index;

			if(current_index == infos.length)
				current_index = 0;

			current.removeClass('selected');

			infos.eq(current_index).addClass('selected');
		},

		resizeFeatured: function()
		{
			var imgs = $('#bottom #featured img');

			if(!imgs.length)
				return;

			imgs.each(function()
			{
				var item = $(this);
				var parent = item.parent();
				var item_box = {width: item.width(), height: item.height()};

				var parent_box = {width: parent.width(), height: parent.height()};

				item_box.aspect = item_box.width / item_box.height;

				if(isNaN(item_box.aspect))
					return;

				parent_box.aspect = parent_box.width / parent_box.height;

				if(parent_box.aspect >= item_box.aspect)
				{
					item.css({width: '100%', height: 'auto', marginTop: -(((parent_box.width / item_box.aspect) - parent_box.height) / 2), marginLeft: 0});
				}
				else
				{
					item.css({width: 'auto', height: '100%', marginTop: 0, marginLeft: -(((parent_box.height * item_box.aspect) - parent_box.width) / 2)});
				}


			});
		},

		resizeHomePage: function()
		{
			if(currentPage.main_section == 'home')
			{
				var height = main_doc.height() - $('#bg', main_doc).position().top;

				$('#bg', main_doc).css('bottom', height / 4 + $('.featured_top', main_doc).height() + $('#featured .current .img_heading', main_doc).eq(0).height());
				$('#featured .img_holder', main_doc).css('height', Math.ceil(height / 4));
			}
		},

		clearStyle: function()
		{
			$(this).attr('style', ' ');
		},

		showScrollLeft: function()
		{
			$('#scroll_left a', main_doc).css({marginLeft: -40}).animate({marginLeft: 0}, 'slow');
		},

		showScrollRight: function()
		{
			$('#scroll_right a', main_doc).css({marginLeft: 40}).animate({marginLeft: 0}, 'slow');
		},

		hideScrollLeft: function()
		{
			$('#scroll_left a', main_doc).animate({marginLeft: -40}, 'slow');
		},

		hideScrollRight: function()
		{
			$('#scroll_right a', main_doc).animate({marginLeft: 40}, 'slow');
		},

		checkLocation: function()
		{
			var loc_hash = location.hash;
			
			if(!loc_hash)
				loc_hash = '#page_home';
			
			
			if(loc_hash == currentLocation && linkChanged)
				return;

			if(loc_hash != currentLocation && !linkChanged)
			{
				currentLocation = loc_hash;

				var hash = loc_hash.replace('#', '');

				//console.log('go to' + location.hash + 'from' + currentLocation);

				var name = hash.replace(/^page_/, '');
				
				stopSlideshow = true;

				main_doc.data('page', (redirectTable[name])? 'page_' + redirectTable[name]: hash);
				main_doc.trigger('go');
			}

			currentLocation = loc_hash;
			linkChanged = false;
		},
		
		drag: {x:0, y:0, lastX: 0, lastY: 0, start: false, firstMove: false, handleMove: function(){}, handleStop: function(){}, type: 'both', needClick: false},
		
		dragWorksData: {prev_link:'', next_link:'', direction: false, page: null, dx: 0, targetMargin:0, firstMargin: 0},
		
		dragWorks: function(dx, dy, firstMove)
		{
			var sel = $('#bg .selector, #text .selector', main_doc);
			
			var dir = (dx > 0)? 1: -1;
			
			if(firstMove)
			{
				sbApi.dragWorksData.prev_link = currentPage.prev_link;
				sbApi.dragWorksData.next_link = currentPage.next_link;
				sbApi.dragWorksData.direction = -dir;
				sbApi.dragWorksData.page = currentPage;
				sbApi.dragWorksData.dx = dx;
				stopSlideshow = true;
			}
			
			if(sbApi.dragWorksData.direction != dir)
			{				
				if(dir > 0 && sbApi.dragWorksData.prev_link)
				{
					main_doc.data('page', sbApi.dragWorksData.prev_link);
					main_doc.trigger('go');
				}
				else if(dir <0 && sbApi.dragWorksData.next_link)
				{
					main_doc.data('page', sbApi.dragWorksData.next_link);
					main_doc.trigger('go');
				}
				
				//currentPage = sbApi.dragWorksData.page;
				
				sbApi.dragWorksData.direction = dir;
				
			}
			
			var oldBGMargin = parseFloat(sel.css('marginLeft').replace('px', ''));
			
			if(firstMove)
				sbApi.dragWorksData.firstMargin = oldBGMargin;
			
			//console.log(sel.css('marginLeft'));
			var newMargin = (dx - sbApi.dragWorksData.dx) + oldBGMargin;
			
			sel.stop();
			
			sel.css({marginLeft: newMargin});
			
			sbApi.moveParalaxBG();
			
			//sbApi.moveParalaxBG(0,0, Math.abs(newMargin - sbApi.dragWorksData.firstMargin), Math.abs(sbApi.dragWorksData.targetMargin - sbApi.dragWorksData.firstMargin));
			
			sbApi.dragWorksData.dx = dx;
		},
		
		dragWorksStop: function(dx, dy)
		{
			//console.log(dx);
			
			//console.log(currentPage.name);
			
			if(dx > 0 && sbApi.dragWorksData.prev_link)
			{
				currentPage =sbApi.dragWorksData.page;
				main_doc.data('page', sbApi.dragWorksData.prev_link);
				forceGo = true;
				main_doc.trigger('go');
			}
			else if(dx < 0 && sbApi.dragWorksData.next_link)
			{
				currentPage =sbApi.dragWorksData.page;
				main_doc.data('page',sbApi.dragWorksData.next_link);
				forceGo = true;
				main_doc.trigger('go');
			}
			
			
			if((dx > 0 && !sbApi.dragWorksData.prev_link) || (dx < 0 && !sbApi.dragWorksData.next_link))
			{
				$('#bg .selector, #text .selector', main_doc).animate({marginLeft: sbApi.dragWorksData.firstMargin},
				{
					duration: 'slow',
					step: function(){setTimeout(sbApi.moveParalaxBG, 10);}
				});	
			}	
		
		},
		
		dragBottom: function(dx, dy, firstMove)
		{
			var b = $('.works_info.current', main_doc);
			
			if(firstMove)
			{
				if(dy > 0)
				{
					b.stop();
					b.slideUp('slow');
				}
				else
				{
					b.stop();
					b.slideDown("slow", function(){$(this).attr('style', ' ')});
				}
			}
			
		},
		
		dragBottomStop: function(dx, dy)
		{
		},
		
		dragMenuData: {dx: 0, start_time: 0, lastMove: 0},
		
		dragMenu: function(dx, dy, firstMove)
		{
			var sel = $('#works .selector', main_doc);
			
			if(firstMove)
			{
				sbApi.dragMenuData.dx = dx;
				if(sel.width() <= sel.parent().width())
				{
					sbApi.drag.start = false;
					return;
				}
			}
			
			var sel = $('#works .selector', main_doc);
			
			var oldBGMargin = parseFloat(sel.css('marginLeft').replace('px', ''));
			
			sbApi.dragMenuData.start_time = (new Date()).getTime();
			
			sbApi.dragMenuData.lastMove = dx - sbApi.dragMenuData.dx; 
			
			var newMargin = (dx - sbApi.dragMenuData.dx) + oldBGMargin;
			
			sel.stop();
			
			sel.css({marginLeft: newMargin});
			
			sbApi.dragMenuData.dx = dx;
		},
		
		dragMenuStop: function(dx, dy)
		{
			var speed = sbApi.dragMenuData.lastMove / Math.abs(((new Date()).getTime() - sbApi.dragMenuData.start_time));
			
			console.log('sp' + speed);
			console.log('lastMove' + sbApi.dragMenuData.lastMove);
			
			var sel = $('#works .selector', main_doc);
			
			var pos = sel.offset();
			var width = sel.width();
			
			if(pos.left > 0)
			{
				sel.animate({marginLeft: 0}, 'slow');
			}
			else if (pos.left + width < sel.parent().width())
			{
				sel.animate({marginLeft: sel.parent().width() - width},
				{
					easing: "cubicEaseOut",
					duration: 500
				});
			}
			else
			{
				var min =  sel.parent().width() - width;
				var max = 0;
				
				var next_pos = pos.left + (speed * 500);
				
				console.log('pos' + pos.left);
				console.log('next_pos' + next_pos);
				
				sel.animate({marginLeft: (next_pos > max)? max: ((next_pos < min)? min: next_pos)},
				{
					duration: 800, 
					easing: "cubicEaseOut"
				});
			}
			
		},
		
		dragStart: function(e)
		{
			var pos;
			if(e.targetTouches)
			{
				if(e.targetTouches.length != 1)
					return true;
				
				pos = e.targetTouches[0];
			}
			else
			{
				pos = e;
			}
			
			sbApi.drag.x = pos.pageX;
			sbApi.drag.y = pos.pageY;
			sbApi.drag.lastX = pos.pageX;
			sbApi.drag.lastY = pos.pageY;
			sbApi.drag.firstMove = true;
			sbApi.drag.needClick = false;
			
			if(currentPage.main_section == 'vision'
					|| currentPage.main_section == 'about'
					|| currentPage.main_section == 'contact'
					|| currentPage.main_section == 'works')
			{
				if(sbApi.mouseIn($('#bottom', main_doc)) && currentPage.main_section == 'works')
				{
					sbApi.drag.handleMove = sbApi.dragBottom;
					sbApi.drag.handleStop = sbApi.dragBottomStop;
					sbApi.drag.type = 'y';
					sbApi.drag.start = true;
				}
				else if(sbApi.mouseIn($('#bg', main_doc)))
				{
					sbApi.drag.handleMove = sbApi.dragWorks;
					sbApi.drag.handleStop = sbApi.dragWorksStop;
					sbApi.drag.type = 'x';
					sbApi.drag.start = true;
				}
				else if(sbApi.mouseIn($('#works', main_doc)) && currentPage.main_section == 'works')
				{
					sbApi.drag.handleMove = sbApi.dragMenu;
					sbApi.drag.handleStop = sbApi.dragMenuStop;
					sbApi.drag.type = 'x';
					sbApi.drag.start = true;
					//sbApi.drag.needClick = true;
				}
			}
			
			if(sbApi.drag.start)
			{
				//e.preventDefault();
				//e.stopPropagation();
			}
			
			return;
		},
		
		mouseIn: function(obj)
		{
			var pos = obj.offset();
			var width = obj.width();
			var height = obj.height();
			
			//console.log(sbApi.drag.x + ' ' + sbApi.drag.y + ' ' + pos.left + ' ' + pos.top + ' ' + width + ' ' + height);
			
			return (sbApi.drag.x > pos.left && sbApi.drag.x < (pos.left + width) 
						&& sbApi.drag.y > pos.top && sbApi.drag.y < (pos.top + height));
		},
		
		dragMove: function(e)
		{
			var pos;
			if(e.targetTouches)
				pos = e.targetTouches[0];
			else
				pos = e;
			
			sbApi.drag.lastX = pos.pageX;
			sbApi.drag.lastY = pos.pageY;
			
			if(!sbApi.drag.start)
				return true;
				
			e.preventDefault();
				
			sbApi.dragDataSend(sbApi.drag.handleMove, e, false);
			
			sbApi.drag.firstMove = false;
			
//			e.preventDefault();
//			e.stopPropagation();
		},
		
		dragDataSend: function(cb, e, force_move)
		{
			var dx = sbApi.drag.lastX - sbApi.drag.x;
			var dy = sbApi.drag.lastY - sbApi.drag.y;
			var move = false;
			
			switch(sbApi.drag.type)
			{
				case 'x':
					move = Math.abs(dx) > Math.abs(dy);
					break;
				case 'y':
					move = Math.abs(dy) > Math.abs(dx);
					break;
				dafault:
					move = true;
			}
			
			if(force_move)
				move = true;
				
			if((dx != 0 || dy != 0) && move)
			{
				cb(dx, dy, sbApi.drag.firstMove);
				return true;
			}
			
			return false;
		},
		
		dragEnd: function(e)
		{
			if(!sbApi.drag.start)
				return true;
				
//			e.preventDefault();
//			e.stopPropagation();
				
			sbApi.drag.start = false;
			
			if(!sbApi.dragDataSend(sbApi.drag.handleStop, e, true) && sbApi.drag.needClick)
			{
				$(e.target).click();
			}
			
			return;
		},

		init: function()
		{
			if(!supportedBrowser)
			{

				var time;
				if((time = document.cookie.match(/browser_warning=(\d+)/)))
				{
					if((new Date()).getTime() - parseInt(time[1]) < 60000 * 60 * 24 /*one day*/)
						return;
				}

				$('#browser_warning').click(function(){$(this).fadeOut()})
				//	.append('<p style="font-weight:bold; text-align:center;">Click to close</p>')
					.parent().show();

				document.cookie = 'browser_warning=' + (new Date()).getTime() + '; expires=Fri, 1 Jan 2038 12:00:00 UTC; path=/';
				//javascript:document.cookie = 'sublimio_developer=1; expires=Fri, 1 Jan 2038 12:00:00 UTC; path=/';void(0);

				return;
			}

			currentPage = sbApi.getPageMeta();
			lastPage = currentPage;

			main_doc = $('#main_div');

			pagesMeta['page_' + currentPage.name] = currentPage;

			loader = $('#ajax_loader');

			sbApi.setupLinks();
			sbApi.preload();

			loader.bind('page_opened', sbApi.preload);
			loader.bind('page_opened', sbApi.colorLinks);
			loader.bind('page_opened', sbApi.checkContactsForm);
			loader.bind('page_opened', sbApi.trackPageview);
			loader.bind('page_opened', sbApi.fixScreenSizeIssues);

			loader.bind('preload_completed', sbApi.preload);

			loader.bind('page_reloaded', sbApi.initNewPage);

			main_doc.bind('go', sbApi.gotoPage);
			
			if(touchBrowser)
			{
				document.addEventListener('touchstart', sbApi.dragStart, false);
				document.addEventListener('touchmove', sbApi.dragMove, false);
				document.addEventListener('touchend', sbApi.dragEnd, false);
			}
			else if(!$.browser.msie)
			{
				document.addEventListener('mousedown', sbApi.dragStart, false);
				document.addEventListener('mousemove', sbApi.dragMove, false);
				document.addEventListener('mouseup', sbApi.dragEnd, false);
			}

			$(window).resize(sbApi.placeParalaxBg);
			$(window).resize(sbApi.resizeHomePage);
			$(window).resize(sbApi.resizeBG);
			$(window).resize(sbApi.resizeFeatured);
			$(window).resize(sbApi.fixScreenSizeIssues);

			currentLocation = location.hash;

			$(window).bind('hashchange', sbApi.checkLocation);

			$('#wait').css({top: 0, bottom: 0});

			$('#wait').mousedown(function(){return false;}); // prevent selection on dblclick
			
			loader_anim.show();

			$('#loader_text').show();
			sbApi.loaderTextAnimation = setInterval(function()
			{
				var item = $('#wait #loader_text p').eq(0);
				item.animate({marginTop:-item.height()}, 'slow', function()
				{
					$(this).attr('style', ' ').appendTo($(this).parent());
				});

			}, 2000);

			$('#main_div').show();

			var page = sbApi.getLink(location);
			var hash = location.hash.replace('#', '');

			if(hash && page != hash)
			{

				var name = hash.replace(/^page_/, '');

				main_doc.data('page', (redirectTable[name])? 'page_' + redirectTable[name]: hash);
				main_doc.trigger('go');
			}
			else
			{
				$(window).load(function()
				{
					sbApi.trackPageview();
					sbApi.initNewPage();
				});
			}

		}

	};
	
	$.extend( $.easing, 
	{
		
		cubicEaseOut: function(p, n, firstNum, diff) 
		{
			var c = firstNum + diff;
			return c*((p=p/1-1)*p*p + 1) + firstNum;
		}
	});

	
	//wf_debug('sbApi', sbApi);

	$(sbApi.init);

	//$(window).load(sbApi.init);


})(jQuery);


function playerReady(obj) {
	//alert('the videoplayer '+obj['id']+' has been instantiated');
	var player = document.getElementById(obj['id']);

	player.addViewListener("PLAY","handlePlayer");

};


function handlePlayer()
{
	stopSlideshow = true;
};

