/* == Begin Functions ================================================= */

$(function() {
	
	$("q").prepend("&ldquo;").append("&rdquo;");
	$("q q").prepend("&lsquo;").append("&rsquo;");
	// Add classes to input pseudotypes
	$("input[type='text'], input[type='password']").addClass("text");
	$("input[type='button'], input[type='submit'], input[type='checkbox'], input[type='image'], input[type='radio'], input[type='reset'], button").addClass("nontext");
	$("input[type='button'], input[type='submit'], input[type='reset'], button").addClass("button");
	// Add classes to link pseudotypes
	$("a[href^='mailto:']").addClass("mailto");
	$("a[href$='.pdf']").addClass("docpdf");
	$("a[href$='.swf']", "a[href$='.fla']", "a[href$='.swd']").addClass("docflash");
	$("a[href$='.xls']", "a[href$='.csv']", "a[href$='.xlt']", "a[href$='.xlw']").addClass("docexcel");
	$("a[href$='.ppt']", "a[href$='.pps']").addClass("docppoint");
	$("a[href$='.doc']", "a[href$='.rtf']", "a[href$='.txt']", "a[href$='.wps']").addClass("docword");
	$("a[href$='.zip']", "a[href$='.gzip']", "a[href$='.rar']").addClass("doczip");
	
	// Remove classes from a link containing an image
	$("a img").parent().removeClass();
	
	// Add Class Last to Each Last Child
	$('li:last-child').addClass('last');
	
	// Take focus off the body tag
	$('body').prepend('<input class="hidden" type="text" id="focus-stealer" type="hidden" />');
	$("#focus-stealer").focus();
			
	// Wrap <hr> so bg-image doesn't have a border in IE6 and Opera
	$("hr").wrap('<div class="hr"></div>');
	
	/* Apply special styles to forms, to activate add class "cmxform" to a fieldset */
	cmxform();
	
	// choose text for the show/hide link - can contain HTML (e.g. an image)
	var showText='Show More Information';
	var hideText='Hide';
	// append show/hide links to the element directly preceding the element with a class of "toggle"
	jQuery('.toggle-content').prev().append('<a href="#" class="toggle-switch">'+showText+'</a>');
	// hide all of the elements with a class of 'toggle'
	jQuery('.toggle-content').hide();
	// capture clicks on the toggle links
	jQuery('a.toggle-switch').click(function() {
	// change the link depending on whether the element is shown or hidden
	jQuery(this).html (jQuery(this).html()==hideText ? showText : hideText);
	// toggle the display - uncomment the next line for a basic "accordion" style
	jQuery(this).parent().next('.toggle-content').slideToggle();
		// return false so any link destination is not followed
		return false;
	});
	
	// CSS Sprites 2 - http://www.alistapart.com/articles/sprites2/
	// remove link background images since we're re-doing the hover interaction below 
	// (doing it this way retains the CSS default hover states for non-javascript-enabled browsers)
	// we also want to only remove the image on non-selected nav items, so this is a bit more complicated
	$("#sub .sidebar li").children("h2").each(function() {
		var current = "sidebar " + ($(this).attr("class"));
		var parentClass = $(".sidebar").attr("class");
		if (parentClass != current) {
			$(this).children("a").css({backgroundImage:"none"});
		}
	});	

	// create events for each nav item
	attachNavEvents(".sidebar", "widgettitle");

	function attachNavEvents(parent, myClass) {
		$(parent + " ." + myClass).mouseover(function() {
			$(this).append('<div class="nav-' + myClass + '"></div>');
			$("div.nav-" + myClass).css({display:"none"}).fadeIn(300);
		}).mouseout(function() {
			$("div.nav-" + myClass).fadeOut(200, function() {
				$(this).remove();
			});
		}).mousedown(function() {
			$("div.nav-" + myClass).attr("class", "nav-" + myClass + "-click");
		}).mouseup(function() {
			$("div.nav-" + myClass + "-click").attr("class", "nav-" + myClass);
		});
	}
	
	// Add class="obfuscated" and href="mailto:name(at)example.com" to an email address link
	$('.obfuscated').defuscate();
	
});
/* ==================================================================== */

/* == Begin jQuery plugins ============================================ */

/*
 * Email Defuscator - jQuery plugin 1.0 alpha
 *
 * Copyright (c) 2007 Joakim Stai
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * Revision: $Id$
 *
 */

/**
 * Converts obfuscated email addresses into normal, working email addresses.
 *
 * @name defuscate
 * @param Boolean link If true, all defuscated email addresses will be turned into links, defaults to true (optional)
 * @descr Converts obfuscated email addresses into normal email addresses
 */
 
jQuery.fn.defuscate=function(b){b=jQuery.extend({link:true},b);var c=/\b([A-Z0-9._%-]+)\([^)]+\)((?:[A-Z0-9-]+\.)+[A-Z]{2,6})\b/gi;return this.each(function(){if($(this).is('a[@href]')){$(this).attr('href',$(this).attr('href').replace(c,'$1@$2'));var a=true}$(this).html($(this).html().replace(c,(b.link&&!a?'<a href="mailto:$1@$2">$1@$2</a>':'$1@$2')))})}

/* ==================================================================== */

jQuery.fn.doFade = function(settings) {

    // if no paramaters supplied...
   settings = jQuery.extend({
      fadeColor: "black",
      duration: 200,
      fadeOn: 0.95,
      fadeOff: 0.65
   }, settings);

    var duration = settings.duration;
    var fadeOff = settings.fadeOff;
    var fadeOn = settings.fadeOn;
    var fadeColor = settings.fadeColor;

    jQuery(this).hover(function(){
     jQuery(this)
         .stop()
         .data("origColor", jQuery(this).css("background-color"))
         .animate({
             opacity: fadeOn,
             backgroundColor: fadeColor
         }, duration)
   }, function() {
     jQuery(this)
         .stop()
         .animate({
             opacity: fadeOff,
             backgroundColor: jQuery(this).data("origColor")
         }, duration)
   });

};

this.randomizer = function(){
	var length = jQuery("#randomizer li").length;
	var ran = Math.floor(Math.random()*length) + 1;
	jQuery("#randomizer li:nth-child(" + ran + ")").show();
};

if( document.addEventListener ) document.addEventListener( 'DOMContentLoaded', cmxform, false );

function cmxform(){
  // Hide forms
  jQuery( 'fieldset.cmxform' ).hide().end();
  
  // Processing
  jQuery( 'fieldset.cmxform' ).find( 'li label' ).not( '.nocmx' ).each( function( i ){
    var labelContent = this.innerHTML;
    var labelWidth = document.defaultView.getComputedStyle( this, '' ).getPropertyValue( 'width' );
    var labelSpan = document.createElement( 'span' );
        labelSpan.style.display = 'block';
        labelSpan.style.width = labelWidth;
        labelSpan.innerHTML = labelContent;
    this.style.display = '-moz-inline-box';
    this.innerHTML = null;
    this.appendChild( labelSpan );
  } ).end();
  
  // Show forms
  jQuery( 'fieldset.cmxform' ).show().end();
}

// IE6 fixes
// make sure IE has the abbr and acronym tag
if(document.all){
	document.createElement("abbr");
	document.createElement("acronym");
}

// javascript method: "pxToEm"
eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(4($){k.9.7=5.9.7=4(a){3 b=p;2(b.j==5)b=d(b);2(!a)3 a=$(\'g\');2($(a).6()>0){3 c=b*(1/(d($(a).r("n-6"))))+\'m\';8 c}l 8\'i: o h q f s a e t\'}})(u);',31,31,'||if|var|function|String|size|pxToEm|return|prototype||||parseInt|DOM|is|body|scope|Error|constructor|Number|else|em|font|Provided|this|argument|css|not|element|jQuery'.split('|'),0,{}));

/*-------------------------------------------------------------------- 
 * JQuery Plugin: "EqualHeights"
 * by:
   Scott Jehl (scott@filamentgroup.com) 
   Todd Parker (todd@filamentgroup.com)
   http://www.filamentgroup.com
 *
 * Copyright (c) 2007 Filament Group
 * Licensed under GPL (http://www.opensource.org/licenses/gpl-license.php)
 *
 * Description: Compares the heights of the first-children of a provided element 
 								  and sets their min-height to the tallest height. Sets in em units by default if pxToEm() method is available.
 * Dependencies: jQuery library, pxToEm method								  
 * Usage Example: $(element).equalHeights();
   						      Optional: to set min-height in px, pass a true argument: $(element).equalHeights(true);
 * Version: 1.0, 08.02.2007
 * Changelog:
 *  08.02.2007 initial Version 1.0
--------------------------------------------------------------------*/

$.fn.equalHeights = function(px) {
	$(this).each(function(){
		var currentTallest = 0;
		$(this).children().each(function(i){
				if($(this).height() > currentTallest) { currentTallest = $(this).height(); }
		});
		if(!px || !Number.prototype.pxToEm) currentTallest = currentTallest.pxToEm($(this)); //use ems unless px is specified or 
		// for ie6, set height since min-height isn't supported
		var ie6 = (navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion) == 4 && navigator.appVersion.indexOf("MSIE 6.0") != -1);
		if ($.browser.msie && (ie6)) { $(this).children().css({'height': currentTallest}); }
		$(this).children().css({'min-height': currentTallest}); 
	});
	return $(this);
};

document.documentElement.className = "js";

/*
* jQuery Flickr - jQuery plug-in
* Version 1.0, Released 2008.04.17
*
* Copyright (c) 2008 Daniel MacDonald (www.projectatomic.com)
* Dual licensed GPL http://www.gnu.org/licenses/gpl.html 
* and MIT http://www.opensource.org/licenses/mit-license.php
*/
(function($){$.fn.flickr=function(i){var a={api_key:null,type:null,photoset_id:null,text:null,user_id:null,group_id:null,tags:null,tag_mode:'any',sort:'relevance',thumb_size:'s',size:null,per_page:100,page:1,attr:'',api_url:null,params:'',api_callback:'?',loadFirst:null,loadAll:null,loadInit:null};if(i)$.extend(a,i);return this.each(function(){if(a.loadInit){a.loadInit()}var h=$('<ul>').appendTo(this);var k=$.flickr.format(a);var f=0;$.getJSON(k,function(b){if(b.stat!="ok"){for(d in b){$('<li>').text(d+': '+b[d]).appendTo(h)}}else{if(a.type=='photoset')b.photos=b.photoset;for(var d=0;d<b.photos.photo.length;d++){var c=b.photos.photo[d];$.getJSON('http://api.flickr.com/services/rest/?format=json&jsoncallback='+a.api_callback+'&api_key='+a.api_key+'&method=flickr.photos.getSizes&photo_id='+c.id,function(g){if(g.stat=='ok'){var l=g.sizes.size[0].source;var e='http://farm'+c['farm']+'.static.flickr.com/'+c['server']+'/'+c['id']+'_';switch(a.size){case'm':e+=c['secret']+'_0.jpg';break;case'b':e+=c['secret']+'_1.jpg';break;case'o':e=g.sizes.size[3].source;if(g.sizes.size.length>4){e=g.sizes.size[4].source}break;default:e+=c['secret']+'.jpg'};var j=b.photos.photo[f]['title'];var m=b.photos.photo[f]['id'];h.append('<li><a href="'+e+'" '+a.attr+' title="'+j+'"><img src="'+l+'" alt="'+j+'" id="'+m+'" /></a></li>');f++;if(f==1&&a.loadFirst){a.loadFirst(h)}if(f==b.photos.photo.length&&a.loadAll){a.loadAll(h)}}})}}})})};

// static function to format the flickr API url according to the plug-in settings 
$.flickr={format:function(a){if(a.url)return a.url;var b='http://api.flickr.com/services/rest/?format=json&jsoncallback='+a.api_callback+'&api_key='+a.api_key;switch(a.type){case'photoset':b+='&method=flickr.photosets.getPhotos&photoset_id='+a.photoset_id;break;case'search':b+='&method=flickr.photos.search&sort='+a.sort;if(a.user_id)b+='&user_id='+a.user_id;if(a.group_id)b+='&group_id='+a.group_id;if(a.tags)b+='&tags='+a.tags;if(a.tag_mode)b+='&tag_mode='+a.tag_mode;if(a.text)b+='&text='+a.text;break;default:b+='&method=flickr.photos.getRecent'};if(a.size=='o')b+='&extras=original_format';b+='&per_page='+a.per_page+'&page='+a.page+a.params;return b}}})(jQuery);

/*
This gallery is under copyright. Do not use or reproduce without Permission.
(c) 2009 David Hellsing – monc.se
*/
(function(b){var a,c;a=b.fn.fsGallery=function(e){var d={loadingText:"loading...",delay:300,fade:200,raster:true,onLoad:function(){}};a.options=b.extend(d,e);if(b("body").find("#fsImage").length<1){b("body").prepend('<div id="fsImage"><div><table><tr><td><img src="/_common/images/ajax-loader.gif" class="init"></td></tr></table></div></div>');}return this.each(function(){b(this).addClass("fsGallery");a.preload(b(this).find("li:first"));});};a.next=function(d){if(!d||d.length<1||d.siblings().length<1){return false;}else{clearTimeout(c);d.siblings().find("a").css("display","none");a.show(d.next().length>0?d.next():d.siblings(":first"));}};a.prev=function(d){if(!d||d.length<1||d.siblings().length<1){return false;}else{clearTimeout(c);d.siblings().find("a").css("display","none");a.show(d.prev().length>0?d.prev():d.siblings(":last"));}};a.preload=function(e){var d=e.find("a");var f=b(new Image());if(d.text().length>0){d.text(d.text().replace(/ /,"\xa0"));}e.addClass("loading");f.load(function(){e.removeClass("loading");if(d.find("img").length>0){e.css({backgroundImage:"url("+d.find("img").attr("src")+")",backgroundRepeat:"no-repeat",backgroundPosition:"50% 50%"});}e.addClass("loaded").click(function(){a.show(b(this));return false;}).hover(function(){b(this).addClass("hover");b(".fsGallery li a").css("display","none");d.css({marginLeft:((d.width()/2))*-1+"px",marginTop:(d.height()+20)*-1+"px"});clearTimeout(c);c=setTimeout(function(){if(a.options.fade>1){d.css({marginLeft:((d.width()/2)+10)*-1+"px"});d.fadeIn(a.options.fade,function(){b(this).css({display:"block"});});}else{if(b.browser.msie){d.css({marginLeft:((d.width()/2)+10)*-1+"px"});}d.css("display","block");}},a.options.delay);},function(){b(this).removeClass("hover");clearTimeout(c);d.css("display","none");});if(b("#fsImage td img:not(.init)").length<1){a.show(e);}if(e.next().length>0){a.preload(e.next());}b(this).remove();}).attr("src",d.attr("href"));};a.c=function(d){return b(document.createElement(d));};a.resize=function(e){var d=Math.max(b(window).width()/e.width(),b(window).height()/e.height());if(b(window).width()>b(window).height()){e.css({width:e.width()*d,height:"auto"});}else{e.css({width:"auto",height:e.height()*d});}};a.show=function(f){f.siblings(".active").removeClass("active");f.addClass("active");var h=b(new Image).attr({src:f.find("a").attr("href"),alt:f.find("a").attr("title"),id:f.find("a img").attr("id")});var g=a.c("span").addClass("left").click(function(){a.prev(f);});var e=a.c("span").addClass("right").click(function(){a.next(f);});var d=a.options.raster?a.c("span").addClass("raster"):false;b("#fsImage td").empty().append(h.css("display","block")).prepend(g).prepend(e).prepend(d);if((b.browser.msie&&b.browser.version<7)||b.browser.safari){b(window).resize(function(){a.resize(b("#fsImage td img:not(.init)"));});b(function(i){a.resize(h);});}a.options.onLoad();};b.fn.hoverClass=function(){return this.hover(function(){b(this).addClass("hover");},function(){b(this).removeClass("hover");});};})(jQuery);

/*
* Filterable
/*
* Copyright (C) 2009 Joel Sutherland.
* Liscenced under the MIT liscense
*/
(function($){$.fn.filterable=function(settings){settings=$.extend({useHash:true,animationSpeed:1000,show:{width:'show',opacity:'show'},hide:{width:'hide',opacity:'hide'},useTags:true,tagSelector:'#portfolio-filter a',selectedTagClass:'current',allTag:'all'},settings);return $(this).each(function(){$(this).bind("filter",function(e,tagToShow){if(settings.useTags){$(settings.tagSelector).removeClass(settings.selectedTagClass);$(settings.tagSelector+'[href='+tagToShow+']').addClass(settings.selectedTagClass)}$(this).trigger("filterportfolio",[tagToShow.substr(1)])});$(this).bind("filterportfolio",function(e,classToShow){if(classToShow==settings.allTag){$(this).trigger("show")}else{$(this).trigger("show",['.'+classToShow]);$(this).trigger("hide",[':not(.'+classToShow+')'])}if(settings.useHash){location.hash='#'+classToShow}});$(this).bind("show",function(e,selectorToShow){$(this).children(selectorToShow).fadeIn()});$(this).bind("hide",function(e,selectorToHide){$(this).children(selectorToHide).hide()});if(settings.useHash){if(location.hash!='')$(this).trigger("filter",[location.hash]);else $(this).trigger("filter",['#'+settings.allTag])}if(settings.useTags){$(settings.tagSelector).click(function(){$('#portfolio-list').trigger("filter",[$(this).attr('href')]);$(settings.tagSelector).removeClass('current');$(this).addClass('current')})}})}})(jQuery);$(document).ready(function(){$('#portfolio-list').filterable()});

/**
 * Cookie plugin
 *
 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 * http://www.stilbuero.de/2006/09/17/cookie-plugin-for-jquery/
 */
 
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}
//jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options.expires=-1}var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000))}else{date=options.expires}expires='; expires='+date.toUTCString()}var path=options.path?'; path='+options.path:'';var domain=options.domain?'; domain='+options.domain:'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('')}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break}}}return cookieValue}};

