// ---------------------------------------- jQuery extentions ----------------------------------------
/*	jQuery: Exists Function
	Checks to see if the a selector exists before processing with a function.
	Why this itself doesn't exist, I have no idea.
*/
jQuery.fn.exists = function(){return jQuery(this).length>0;}

/* jQuery: Outer HTML Function
	Converts DOM element to string with html
*/
jQuery.fn.outerHTML = function() {
    return $('<div>').append( this.eq(0).clone() ).html();
}

// ---------------------------------------- Twitter Linkify ----------------------------------------
function Linkify(text) {
    text = text.replace(/(https?:\/\/\S+)/gi, function (s) {
        return '<a target="_blank" href="' + s + '">' + s + '</a>';
    });

    text = text.replace(/(^|)@(\w+)/gi, function (s) {
        return '<a target="_blank" href="http://twitter.com/' + s + '">' + s + '</a>';
    });

    text = text.replace(/(^|)#(\w+)/gi, function (s) {
        return '<a target="_blank" href="http://search.twitter.com/search?q=' + s.replace(/#/,'%23') + '">' + s + '</a>';
     });
    return text;
}

// ---------------------------------------- Content Rotator ----------------------------------------
function activateRotator(selector, rotatorType, waitTime){
	if(selector.find('.slider').exists()){
		rotatorType = 'slider';
	} else if(selector.find('.fader').exists()) {
		rotatorType = 'fader';
	}
	
	rotatorType = typeof(rotatorType) != 'undefined' ? rotatorType : 'slider';	//Default Transition
	waitTime = typeof(waitTime) != 'undefined' ? waitTime : 15000;				//Default Delay
	var pageCount = selector.find('.itemHolder .item').length;					//Page Count
	
	//Pager Variables
	var pagerItemWidth = 0;
	var pagerItemMargin = 0;
	var pagerSliderMargin = 0;
	
	if(rotatorType == 'slider'){
		//Slider Loop
		var pageWidth = selector.find('.rotator').width();						//Page Width		
		var currentPage = 0;													//Current Page
		var timer = setInterval(function(){slidePage();}, waitTime);			//Timer Interval

		if (Browser.isWebkit && Browser.supportsTouch) {
			selector.find('.itemHolder').stop().css({
				'-webkit-transition-duration': '1s',
				'-webkit-transition-property': '-webkit-transform',
				'-webkit-transform': 'translate3d(' + (-pageWidth * currentPage) + 'px, 0, 0)'
			});
						
			selector.find('.itemHolder .item').each(function(index, element) {
				$('.itemImage', this).css({'background':'url('+$('.itemImage img',this).attr('src')+') top left', 'width':$(this).width(),'height':$(this).height()}).empty();
			});			
		}
		
		function slidePage() {
			currentPage == pageCount? currentPage = 0 : currentPage;
			
			if (Browser.isWebkit && Browser.supportsTouch) {
				selector.find('.itemHolder').stop().css({
					'-webkit-transform': 'translate3d(' + (-pageWidth * currentPage) + 'px, 0, 0)'					
				});
				if(selector.find('.pager').exists()){
					selector.find('.pager .scrubber').stop().css({
						'-webkit-transition-duration': '1s',
						'-webkit-transition-property': '-webkit-transform',
						'-webkit-transform': 'translate3d(' + (pagerSliderMargin * currentPage) + 'px, 0, 0)'
					});
				}			
			} else {
				selector.find('.itemHolder').stop().animate({'margin-left':-pageWidth * currentPage},1000,'easeInOutExpo');
				if(selector.find('.pager').exists()){
					selector.find('.pager .scrubber').stop().animate({'margin-left':pagerSliderMargin * currentPage},1000,'easeInOutExpo');
				}	
			}
			resetTimer();
		}
		
		function resetTimer(){
			clearInterval(timer);
			timer = setInterval(function(){currentPage++;slidePage();}, waitTime);	
		}
		
		if(selector.find('.pager').exists()){									//Pager Buttons / Slider
			pagerItemWidth = 20;
			pagerItemMargin = (selector.find('.pager').width() - pageCount * pagerItemWidth) / (pageCount -1);
			pagerSliderMargin = pagerItemWidth + pagerItemMargin;
			selector.find('.itemHolder .item').each(function(index, element) {
				selector.find('.pager').append('<div class="item"><div></div></div>');
			});
			selector.find('.pager .item:nth-child(n+2)').css({'margin-left':pagerItemMargin+'px'});
			
			selector.find('.pager .item').each(function(index, element){
				$(this).bind('click', function(){
					event.preventDefault();
					currentPage = index;
					clearInterval(timer);
					slidePage();
					return false;
				});	
			});
			
			selector.find('.pager').prepend('<div class="scrubber"></div>');
		}
		
		if(selector.find('.prev').exists()){									//Prev Button
			selector.find('.prev').each(function(index, element){
				$(this).bind('click', function(){
					event.preventDefault();
					currentPage == 0? currentPage = pageCount-1 : currentPage--;
					clearInterval(timer);
					slidePage();
					return false;
				});	
			});
		}
		
		if(selector.find('.next').exists()){									//Next Button
			selector.find('.next').each(function(index, element){
				$(this).bind('click', function(){
					event.preventDefault();
					currentPage++;
					clearInterval(timer);
					slidePage();
					return false;
				});	
			});
		}

		
	} else {
		
	}
}

// ---------------------------------------- JavaScript ----------------------------------------
$(document).ready(function(){
	// Top Secret CODES
	if ( window.addEventListener ) {
		// Konami Komando
		var kkeys = [], konami = "38,38,40,40,37,39,37,39,66,65";
		window.addEventListener("keydown", function(e){
			kkeys.push( e.keyCode );
			if ( kkeys.toString().indexOf( konami ) >= 0 )
				window.location = "http://onenyne.com/";
		}, true);
	}
	
	//Twitter Linkify
	$('.tweet .tweettext').each(function(index, element) {
		var tweetLink = Linkify($(this).outerHTML());
		$(this).replaceWith(tweetLink);
    });
	
	//Tweet Loop
	if ($('.tweet').exists()){
		$('.tweet').stop().hide();
		var tweetCount = $('.tweet').length;
		var currentTweet = 0;
		var tweetTimer;
		showTweet();
		function showTweet() {
			currentTweet == tweetCount? currentTweet = 0 : currentTweet;
			$('.tweet').stop().css({'opacity':''}).hide();
			$('.tweet:eq('+ (currentTweet) +')').fadeIn(500,'easeOutQuad').delay(3000).fadeOut(500,'easeOutQuad');
			resetTweets();	
		}
		
		function resetTweets(){
			currentTweet++;
			currentTweet == tweetCount? currentTweet = 0 : currentTweet;
			if (tweetTimer){
				clearInterval(tweetTimer);
			}
			tweetTimer = setInterval(showTweet, 5000);	
		}
	}
	
	//Rotator
	if($('#mainRotator').exists()){
		activateRotator($('#mainRotator'),'slider',10000);
	}
});

$(window).load(function() {
	$('.logo').fadeIn(500,'easeOutQuad');
});
