/* Author: Grey Ang
 * Project: RebeccaSaw.com Topbanner
 */

var BeckyBanner = function() {}

BeckyBanner.prototype.init = function(){
		this.css(); 
		this.imgMove();
		this.hover();
		this.tweets();
	}

BeckyBanner.prototype.options = {
	container : '#banner',
	areaWidth : 1000,
	items : '#banner li',
	itemPos : [
		{name: 'food', top: 10, left: 160, rateX: 10, rateY: 200},
		{name: 'glamour', top: 30, left: 400, rateX: 10, rateY: 50},
		{name: 'travel', top: 54, left: 600, rateX: 10, rateY: 100},
		{name: 'wacky', top: 60, left: 0, rateX: 5, rateY: 40},
		{name: 'something', top: 20, left: 730, rateX: 5, rateY: 100}		
	],
	rateX : 30,
	zIndexStep : 20
}

BeckyBanner.prototype.css = function(){
		var op = BeckyBanner.prototype.options;
		var container = op.container;
		var items = op.items;
				
		var zIndexMax = $(items).length * op.zIndexStep;
		
		//Set zIndex
		$(items).each(function(){
			$(this).css({
				'z-index': zIndexMax
			});
			zIndexMax -= op.zIndexStep;			
		});
				
		//Set positions
		$(op.itemPos).each(function(){
			var name = this.name;
			var top = this.top;
			var left = (($(container).width() - op.areaWidth) / 2) + this.left;
						
			$(container).find('.'+name).css({'top': top, 'left': left});
		});
		
		this.data();		
	}
	
BeckyBanner.prototype.data = function(){
		$(this.options.items).each(function(){
			var cssTop = parseFloat($(this).css('top'));
			var cssLeft = parseFloat($(this).css('left'));
			var offset = $(this).offset();
			var offsetTop = offset.top;
			var offsetLeft = offset.left;
			
			$(this).data('pos', {
				'cssTop' : cssTop, 
				'cssLeft': cssLeft,
				'offsetTop' : offsetTop,
				'offsetLeft' : offsetLeft
			});
		});
	}
	
BeckyBanner.prototype.mouseMoveFn = function(e){
    var op = BeckyBanner.prototype.options;
  
	  var centerX = $(op.container).width() / 2;
		
		var containerPos = $(op.container).offset();
		var containerTop = containerPos.top;
		var centerY = ($(op.container).height() / 2) + containerTop;
		
		var areaMargin = ($(window).width() - op.areaWidth)/2;
	  
	  var movefn = function(i){
			//Variables
			var offsetLeft = $(this).data('pos').offsetLeft;
			var offsetTop = $(this).data('pos').offsetTop;
			var posX = 0;
			var posY = 0;
			
			var rateX = op.rateX * 0.01;
			var rateY = op.itemPos[i].rateY * 0.01;
			
			//Define mouse rate
			var mouseRateX = (((e.pageX-areaMargin) / op.areaWidth)-0.5)*200;
			if (mouseRateX < 0){
				mouseRateX = -(mouseRateX);
			}
			var newRateX = (mouseRateX * rateX)/100;
			
			var mouseRateY = (((e.pageY-containerTop) / $(op.container).height())-0.5)*200;
			if (mouseRateY < 0){
				mouseRateY = -(mouseRateY);
			}
			var newRateY = (mouseRateY * rateY)/100;
			
			//Define position
			var toCenterX = offsetLeft - centerX;
			posX = offsetLeft + (toCenterX*newRateX);
			if (e.pageY > centerY){
				posY = offsetTop - (-(offsetTop*newRateY))-containerTop;
			} else {
				posY = offsetTop - (offsetTop*newRateY)-containerTop;
			}
			
			//Final action
			$(this).css({'left': posX, 'top' : posY});
		}
	  
	  
		$(op.items).each(movefn);
		BeckyBanner.prototype.flag = 1;
		e.stopPropagation();
	}
	
BeckyBanner.prototype.windowMouseMoveFn = function(e){
		if (BeckyBanner.prototype.flag == 1){
			$.doTimeout('window', 1000, function(){
				BeckyBanner.prototype.resetPosition();
				if ($('.dark').is(':visible') == true){
					$('.dark').trigger('mouseover');
				}
			}, true);
			BeckyBanner.prototype.flag = 0;
		} else {
			return false;
		}
	}
	
BeckyBanner.prototype.resetPosition = function(){
	  var op = BeckyBanner.prototype.options;
	  
		$(op.items).each(function(i){
			var cssLeft = $(this).data('pos').cssLeft;
			var cssTop = $(this).data('pos').cssTop;
			
			$(this).animate({
				'left': cssLeft + 'px',
				'top' : cssTop + 'px'
			}, 1000);
		});			
	}
	
BeckyBanner.prototype.imgMove = function(){
		var op = BeckyBanner.prototype.options;
		BeckyBanner.prototype.flag = 0;
		
		$(op.container).bind('mousemove', this.mouseMoveFn);
		
		//Reset position of stays on window
		$(window).bind('mousemove', this.windowMouseMoveFn);
	}
	
BeckyBanner.prototype.fn = {
			mouseIn : function(t){
			  
			  
				t.parent().unbind('mouseover');
				t.parent().css('z-index', 2000);
				$('.dark').stop(true,true).fadeIn(400, function(){
					t.stop(true,true).fadeIn(400);
					BeckyBanner.prototype.fn.mouseOut(t);
				});
			},
			mouseOut : function(t){
				$('.dark').bind('mouseover', function(){
					$('.dark').fadeOut(400);
					t.fadeOut(300);
					t.parent().css('z-index', t.data('css').zIndex);
					t.parent().bind('mouseover', function(){
						$.doTimeout('banner', 200, function(){
							BeckyBanner.prototype.fn.mouseIn(t);
						}, true);
					});
				});
			}			
		}
	
BeckyBanner.prototype.hover = function(){
		var i = 0;
		var op = BeckyBanner.prototype.options;
		var items = op.items;
		
		//Append dark
		$(this.options.container).append('<div class="dark"></div>');
		$(this.options.container).append('<div class="shadow"></div>');
		var dark = $('.dark');		
		
		//Click function
		$(items).each(function(){
			var href = $(this).find('a').attr('href');
			$(this).css('cursor', 'pointer');
			$(this).click(function(){
				if (href !== undefined){
					window.location = href;
				}
			});
		});
		
		var timer;
		
		var linkFn = function(){
			var t = $(this);
			t.hide();
			t.data('css', {'width': t.outerWidth(), 'zIndex' : t.parent().css('z-index')});
			t.parent().bind('mouseover', function(){
				$.doTimeout('banner', 400, function(){
					BeckyBanner.prototype.fn.mouseIn(t);
				}, true);
			});
		}

		$(items).find('a').each(linkFn);		
		
		$('.shadow').hover(function(e){
			e.stopPropagation();
		});
	}
	
BeckyBanner.prototype.tweets = function(){
	var url = 'http://api.twitter.com/1/statuses/user_timeline.json?callback=?&screen_name=wackybecky&count=1';
	
	$.getJSON(url, function(data, status){
		var text = data[0].text;
		var date = data[0].created_at;
		date = $.timeago(date.split(' ').slice(1).join(' '));
		
		text = text.split(' ');
		var i = 0;
		var tweet = '';
		
		while(i < text.length){
			if (text[i].indexOf('http') > -1){
				var e = '<a href="'+text[i]+'">'+text[i]+'</a>';
				tweet += e + ' ';
			} else if (text[i].indexOf('#') > -1){
				var e = '<a href="http://search.twitter.com/search?q=%23'+text[i].substr(0)+'">'+text[i]+'</a>';
				tweet += e + ' ';
			}else {
				tweet += text[i] + ' ';
			}
			i++;
		}
		
		$('.tweet').html(tweet);
		$('.date').text(date);
	});
}

$(function(){
  $('#banner').show();
  var banner = new BeckyBanner();
	banner.init();
});


//Random number
function random(minVal,maxVal,floatVal)
{
  var randVal = minVal+(Math.random()*(maxVal-minVal));
  return typeof floatVal=='undefined'?Math.round(randVal):randVal.toFixed(floatVal);
}

/*
 * jQuery doTimeout: Like setTimeout, but better! - v1.0 - 3/3/2010
 * http://benalman.com/projects/jquery-dotimeout-plugin/
 * 
 * Copyright (c) 2010 "Cowboy" Ben Alman
 * Dual licensed under the MIT and GPL licenses.
 * http://benalman.com/about/license/
 */
(function($){var a={},c="doTimeout",d=Array.prototype.slice;$[c]=function(){return b.apply(window,[0].concat(d.call(arguments)))};$.fn[c]=function(){var f=d.call(arguments),e=b.apply(this,[c+f[0]].concat(f));return typeof f[0]==="number"||typeof f[1]==="number"?this:e};function b(l){var m=this,h,k={},g=l?$.fn:$,n=arguments,i=4,f=n[1],j=n[2],p=n[3];if(typeof f!=="string"){i--;f=l=0;j=n[1];p=n[2]}if(l){h=m.eq(0);h.data(l,k=h.data(l)||{})}else{if(f){k=a[f]||(a[f]={})}}k.id&&clearTimeout(k.id);delete k.id;function e(){if(l){h.removeData(l)}else{if(f){delete a[f]}}}function o(){k.id=setTimeout(function(){k.fn()},j)}if(p){k.fn=function(q){if(typeof p==="string"){p=g[p]}p.apply(m,d.call(n,i))===true&&!q?o():e()};o()}else{if(k.fn){j===undefined?e():k.fn(j===false);return true}else{e()}}}})(jQuery);


//Timeago plugin
(function($){$.timeago=function(timestamp){if(timestamp instanceof Date){return inWords(timestamp);}else if(typeof timestamp==="string"){return inWords($.timeago.parse(timestamp));}else{return inWords($.timeago.datetime(timestamp));}};var $t=$.timeago;$.extend($.timeago,{settings:{refreshMillis:60000,allowFuture:false,strings:{prefixAgo:null,prefixFromNow:null,suffixAgo:"ago",suffixFromNow:"from now",seconds:"less than a minute",minute:"about a minute",minutes:"%d minutes",hour:"about an hour",hours:"about %d hours",day:"a day",days:"%d days",month:"about a month",months:"%d months",year:"about a year",years:"%d years",numbers:[]}},inWords:function(distanceMillis){var $l=this.settings.strings;var prefix=$l.prefixAgo;var suffix=$l.suffixAgo;if(this.settings.allowFuture){if(distanceMillis<0){prefix=$l.prefixFromNow;suffix=$l.suffixFromNow;}
distanceMillis=Math.abs(distanceMillis);}
var seconds=distanceMillis/1000;var minutes=seconds/60;var hours=minutes/60;var days=hours/24;var years=days/365;function substitute(stringOrFunction,number){var string=$.isFunction(stringOrFunction)?stringOrFunction(number,distanceMillis):stringOrFunction;var value=($l.numbers&&$l.numbers[number])||number;return string.replace(/%d/i,value);}
var words=seconds<45&&substitute($l.seconds,Math.round(seconds))||seconds<90&&substitute($l.minute,1)||minutes<45&&substitute($l.minutes,Math.round(minutes))||minutes<90&&substitute($l.hour,1)||hours<24&&substitute($l.hours,Math.round(hours))||hours<48&&substitute($l.day,1)||days<30&&substitute($l.days,Math.floor(days))||days<60&&substitute($l.month,1)||days<365&&substitute($l.months,Math.floor(days/30))||years<2&&substitute($l.year,1)||substitute($l.years,Math.floor(years));return $.trim([prefix,words,suffix].join(" "));},parse:function(iso8601){var s=$.trim(iso8601);s=s.replace(/\.\d\d\d+/,"");s=s.replace(/-/,"/").replace(/-/,"/");s=s.replace(/T/," ").replace(/Z/," UTC");s=s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2");return new Date(s);},datetime:function(elem){var isTime=$(elem).get(0).tagName.toLowerCase()==="time";var iso8601=isTime?$(elem).attr("datetime"):$(elem).attr("title");return $t.parse(iso8601);}});$.fn.timeago=function(){var self=this;self.each(refresh);var $s=$t.settings;if($s.refreshMillis>0){setInterval(function(){self.each(refresh);},$s.refreshMillis);}
return self;};function refresh(){var data=prepareData(this);if(!isNaN(data.datetime)){$(this).text(inWords(data.datetime));}
return this;}
function prepareData(element){element=$(element);if(!element.data("timeago")){element.data("timeago",{datetime:$t.datetime(element)});var text=$.trim(element.text());if(text.length>0){element.attr("title",text);}}
return element.data("timeago");}
function inWords(date){return $t.inWords(distance(date));}
function distance(date){return(new Date().getTime()-date.getTime());}
document.createElement("abbr");document.createElement("time");}(jQuery));











