// remove the "$" namespace from jQuery, avoids conflicts with other libraries
jQuery.noConflict();

// closure, mapping jQuery to $, window, document and undefined - useful for minifing tools
(function($, window, document, undefined){

// document ready method
$(function(){

	var $window = $(window),
		menu = $('#header nav'),
		arrow = menu.append('<div class="arrow"/>').find('.arrow'),
		l = '-9px';
	
	setTimeout(function(){
		menu.find('li.active, li.open').eq(0).each(function(){
			var li = $(this), pos = li.position();
			l = Math.round(pos.left + li.width() / 2) + 'px';
		});
		$.data(arrow[0], 'left', l);
		arrow.css({ left: l });
	}, 400);

	menu.find('li').hover(function(){
		var li = $(this), pos = li.position();
		arrow.stop().animate({ left: Math.round(pos.left + li.width() / 2) + 'px' }, 250);
	}, function(){
		arrow.stop().animate({ left: $.data(arrow[0], 'left') }, 200);
	});

	$('#footer nav a').each(function(){
		$(this).append('<span>' + this.title + '</span>');
		this.title = '';
	});


	var categs = $('#nav-top .categs');
	if (categs.length)
	{
		var projects = $('#content ._project'), categ = categs.find('> a').click(function(){
			categs.find('ul').show();
			return false;
		});
		categs.find('ul a').click(function(){
			var a = $(this), id = a.attr('href').split('#')[1].split('-')[1];
			projects.show();
			if (id != 'all')
				projects.not('.term-' + id).hide();
			categs.find('ul a').removeClass('active');
			a.addClass('active');
			categ.html(a.html());
			categs.find('ul').hide();
			return false;
		});
		if (document.location.hash.match(/^#term-\d+$/))
		{
			var term = document.location.hash.substr(1);
			categs.find('ul .' + term + ' a').click();
		}
	}


	function fixQuotePhoto(){
		$('#quote .photo img').each(function(){
			$(this.parentNode).css('marginTop', - Math.round($(this).height() / 2) + 'px');
		});
	}
	fixQuotePhoto();
	setTimeout(fixQuotePhoto, 50);
	setTimeout(fixQuotePhoto, 750);

	$('#side1 a.more').wrap('<div></div>');

	
	$('#side1 .widget_twitter h3').each(function(){
		var t = $(this), a = t.find('a'), user = a.attr('title').match(/Twitter: (.+)/);
		t.prepend('<del>Tweets</del>Barks');
		a.html('@' + user[1]);
	});


	$('#content a.more-link, .more a, .more2 a, #side1 a.more').append('<span class="after"/>');

	var map1 = $('#map1');
	if (map1.length)
	{
		var gm = google.maps,
			ll = new gm.LatLng(-34.85698, 138.518446),
			map = new gm.Map(map1[0], {
				center: ll,
				mapTypeControl: false,
				mapTypeId: gm.MapTypeId.ROADMAP,
				streetViewControl: false,
				zoom: 15,
				zoomControl: false
			}),
			makerImage = new gm.MarkerImage(baseURL + 'wp-content/themes/brd/img/icon/marker.png', false, false, new gm.Point(61, 143));
			marker = new gm.Marker({
				position: ll,
				map: map,
				flat: true,
				icon: makerImage,
				title: 'Test'
			});
	}



	if ($.fn.jCarouselLite)
	{
		var sl = $('#slideshow-clients, #slideshow-home'),
			lastWidth = $window.width(),
			timerResize = null;

		if (sl.length)
		{
			var btns = [];
			if (sl[0].id == 'slideshow-home')
			{
				sl.find('.slider li').each(function(i){
					this.id = 'slide-' + (i + 1);
				});
				sl.find('.buttons a').each(function(){
					btns[btns.length] = '#' + this.id;
				});
			}
			sl.append('<p class="navig"><a href="#" class="prev"></a><a href="#" class="next"></a></p>');
			var params = {
					btnGo: btns,
					btnPrev: 'a.prev',
					btnNext: 'a.next',
					visible: (sl[0].id == 'slideshow-clients' ? 3 : 1),
					scroll: 1,
					speed: 500,
					auto: false,
					circular: true,
					easing: 'easeInExpo',
					afterEnd: function(li){
						btns.removeClass('active');
						$('#trigger-' + li[0].id.split('-')[1]).addClass('active');
					}
				},
				slider = sl.find('.slider').jCarouselLite(params);

			$.data(slider[0], 'params', params);

			if (sl[0].id == 'slideshow-clients')
				slider.width(slider.width() - 1);
			if (sl[0].id == 'slideshow-home')
			{
				var h = slider.find('li').height();
				slider.find('.wrap').height(h - 30);
			}

			btns = sl.find('.buttons a');
			btns.eq(0).addClass('active');


			$(window).resize(function(){
				if (lastWidth == $(window).width())
					return;
				lastWidth = $(window).width();
				if (timerResize)
					clearTimeout(timerResize);
				timerResize = setTimeout(doResize, 250);
			});

			function doResize(){
				var sl = $('#slideshow-home .slider');
				if (!sl.length) return;
				var p = $.data(sl[0], 'params'),
					ul = sl.find('ul'),
					slides = sl.find('li'),
					btns = sl.parent().find('.buttons a');
				sl.css({ visibility: 'hidden' }).unbind();
				sl.add(ul).css({ width: '' });
				slides.css({ width: '' }).eq(0).remove();
				slides.eq(-1).remove();
				sl.parent().find('.navig a, .buttons a').unbind('click');
				sl.jCarouselLite(p).trigger('slideGoToInstant', [btns.filter('.active').parent().index() + 1]);
				sl.css({ visibility: 'visible' });
			}
		}
	}


	if ($.fn.slideshowFade)
	{
		$('#content .slideshow-fade').slideshowFade({
			//speed: 600, // default 600
			//auto: 5000 // default 5000
		}).each(function(){
			var sl = $(this), li = sl.find('li'), max = 0;
			li.each(function(){
				max = Math.max(max, $(this).height());
			}).css({ width: '100%', height: '100%' });
			sl.find('ul').height(max);
			sl.find('.buttons').width(li.length * 24 - 10);
		});
	}


});

// plugins


// slideshowFade - jQuery plugin - creates a fading slideshow - by Valentin Agachi http://agachi.name
$.fn.slideshowFade = function(args)
{
	if (!this.length) return this;

	var opts = $.extend({
		slides: '> ul > li',	// slides selector
		buttons: true,			// show buttons
		speed: 600,				// speed of transition
		auto: 5000				// speed of auto transition
	}, args || {});

	return this.each(function(){
		var parent = $(this), slides = parent.find(opts.slides), buttons = $(), timer = null, n = 0, s = '';

		slides.each(function(){
			this.id = (parent[0].id || 'slide') + '-' + (++n);
			s += '<a href="#' + this.id + '">' + n + '</a>';
		});

		if (opts.buttons)
		{
			buttons = parent.append('<div class="buttons">' + s + '</div>').
				find('.buttons a').click(function(){
					var hash = this.hash.substr(1);
					parent.triggerHandler('slideChange', [slides.filter('#' + hash)]);
					return false;
				});
		}

		function change(next)
		{
			var active = slides.filter('.active');
			if (!next || !next.jquery)
				next = active.next();
			if (!next.length)
				next = slides.eq(0);

			var stop = parent.triggerHandler('slideChanging', [parent, slides, opts, active, next]);
			if (!stop)
			{
				next.addClass('next');
				active.fadeOut(opts.speed, function(){
					next.addClass('active').removeClass('next');
					active.removeClass('active').show();
					buttons.removeClass('active').filter('[href="#' + next[0].id + '"]').addClass('active');
				});
			}
			else
			{
				buttons.removeClass('active').filter('[href="#' + next[0].id + '"]').addClass('active');
			}

			parent.trigger('slideChanged', [parent, slides, next]);
		}

		function changeNow(next)
		{
			slides.removeClass('active');
			next.addClass('active').show();
			buttons.removeClass('active').filter('[href="#' + next[0].id + '"]').addClass('active');

			parent.trigger('slideChanged', [parent, slides, next]);
		}

		function auto()
		{
			if (opts.auto)
				timer = setInterval(change, opts.speed + opts.auto);
		}

		parent.bind('slideChange', function(ev, slide, now){
			clearInterval(timer);
			now ? changeNow(slide) : change(slide);
			auto();
		});
		parent.bind('slideAdvance', function(ev, delta){
			var dir = (delta > 0), cnt = Math.abs(delta),
				active = slides.filter('.active'), next = active;
			while (cnt--)
			{
				next = active[(dir ? 'next' : 'prev')]();
				if (!next.length)
					next = slides.eq(dir ? 0 : slides.length - 1);
			}
			parent.trigger('slideChange', [next]);
		});
		parent.bind('changeAuto', function(ev, time){
			clearInterval(timer);
			opts.auto = time;
			auto();
		});

		if ((a = slides.filter('.active')) && !a.length)
			changeNow(slides.eq(0));
		else
			changeNow(a);

		auto();
	});
};

})(jQuery, window, document);


/*
 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
 *
 * Uses the built in easing capabilities added In jQuery 1.1
 * to offer multiple easing options
 *
 * TERMS OF USE - jQuery Easing
 * 
 * Open source under the BSD License. 
 * 
 * Copyright © 2008 George McGinley Smith
 * All rights reserved.
 * 
 * TERMS OF USE - EASING EQUATIONS
 * 
 * Open source under the BSD License. 
 * 
 * Copyright © 2001 Robert Penner
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 * 
 * Redistributions of source code must retain the above copyright notice, this list of 
 * conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright notice, this list 
 * of conditions and the following disclaimer in the documentation and/or other materials 
 * provided with the distribution.
 * 
 * Neither the name of the author nor the names of contributors may be used to endorse 
 * or promote products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
 * OF THE POSSIBILITY OF SUCH DAMAGE. 
 *
*/

// t: current time, b: begInnIng value, c: change In value, d: duration
jQuery.easing['jswing'] = jQuery.easing['swing'];

jQuery.extend( jQuery.easing,
{
	def: 'easeOutQuad',
	swing: function (x, t, b, c, d) {
		//alert(jQuery.easing.default);
		return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
	},
	easeInQuad: function (x, t, b, c, d) {
		return c*(t/=d)*t + b;
	},
	easeOutQuad: function (x, t, b, c, d) {
		return -c *(t/=d)*(t-2) + b;
	},
	easeInOutQuad: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t + b;
		return -c/2 * ((--t)*(t-2) - 1) + b;
	},
	easeInCubic: function (x, t, b, c, d) {
		return c*(t/=d)*t*t + b;
	},
	easeOutCubic: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t + 1) + b;
	},
	easeInOutCubic: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t + b;
		return c/2*((t-=2)*t*t + 2) + b;
	},
	easeInQuart: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t + b;
	},
	easeOutQuart: function (x, t, b, c, d) {
		return -c * ((t=t/d-1)*t*t*t - 1) + b;
	},
	easeInOutQuart: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
		return -c/2 * ((t-=2)*t*t*t - 2) + b;
	},
	easeInQuint: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t*t + b;
	},
	easeOutQuint: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t*t*t + 1) + b;
	},
	easeInOutQuint: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
		return c/2*((t-=2)*t*t*t*t + 2) + b;
	},
	easeInSine: function (x, t, b, c, d) {
		return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
	},
	easeOutSine: function (x, t, b, c, d) {
		return c * Math.sin(t/d * (Math.PI/2)) + b;
	},
	easeInOutSine: function (x, t, b, c, d) {
		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
	},
	easeInExpo: function (x, t, b, c, d) {
		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
	},
	easeOutExpo: function (x, t, b, c, d) {
		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
	},
	easeInOutExpo: function (x, t, b, c, d) {
		if (t==0) return b;
		if (t==d) return b+c;
		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
	},
	easeInCirc: function (x, t, b, c, d) {
		return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
	},
	easeOutCirc: function (x, t, b, c, d) {
		return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
	},
	easeInOutCirc: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
		return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
	},
	easeInElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
	},
	easeOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
	},
	easeInOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
	},
	easeInBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*(t/=d)*t*((s+1)*t - s) + b;
	},
	easeOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
	},
	easeInOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158; 
		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
	},
	easeInBounce: function (x, t, b, c, d) {
		return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
	},
	easeOutBounce: function (x, t, b, c, d) {
		if ((t/=d) < (1/2.75)) {
			return c*(7.5625*t*t) + b;
		} else if (t < (2/2.75)) {
			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
		} else if (t < (2.5/2.75)) {
			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
		} else {
			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
		}
	},
	easeInOutBounce: function (x, t, b, c, d) {
		if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
		return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
	}
});

