/* 
	Author: Matthew Budd
*/
$(document).ready(function () {

	extLinks();
	replaceHrTag();


	// Needs the anythingSlider plugin to work.
	$('#slider1').anythingSlider({
		startStopped    : true, // If autoPlay is on, this can force it to start stopped
		width           : 950,   // Override the default CSS width
		theme           : 'metallic',
		onSlideComplete : function(slider){
			// alert('Welcome to Slide #' + slider.currentPage);
		}
	});
	
	$(" .hresume #control, .hresume .profile-header, .hresume .recommended, .hresume .connections, .hresume dt:eq(6), .hresume dd:eq(6), .hresume dt:eq(5), .hresume dd:eq(5), .hresume #additional-information h3:eq(1), .hresume #additional-information ul.websites, .viewfull, .hresume #additional-information, .hresume div.divider2:eq(4), .hresume div.divider2:eq(3), .hresume div.divider2:eq(0), #overview, #summary").hide();
	
	if($(".filters").length > 0 && !$.browser.msie){
		//$('.filters').jqTransform();
	}


	// Removes all filtered elements initially
	$("#holder li, .played").hide();
	$("#holder.showThis li").show();
	// Sets number in all filter list items to zero initially
	//$(".filters li span").html('0');

	// Counts up occurances of classes and sets number of occurrences in filter list
	$(".filters li").each(function(){
		var $val = $(this).find('input').val();
		var $valcount = $("."+$val).length;
		//$(this).find('span').html($valcount);
	});
	
	
	// Sets the number in the 'Show all' filter by counting the total amount of entries.
	var $itval = $("#holder li").length;
	$(".filters li input[value*='all']").parent().find('span').html($itval);
	
	
	// When clicking an item in the filter list, elements will appear or dissappear
	// depending on whether list item is checked or unchecked.
	
	$(".filters li input[type=checkbox]").click(function(){
		
		
		$('a.jqTransformCheckbox').parent().find('input[type=checkbox]').removeAttr('checked');
		$('a.jqTransformChecked').parent().find('input[type=checkbox]').attr('checked','checked');
		
		// next two lines remove the initial page content when a filter is clicked
		$(".entry-made").hide();
		$(".entry-written").hide();
		
		var selection = $(this).val();
		if (selection == "all"){
			//show all items
			if ($(this).is(':checked')){
				$("#holder li img").fadeIn('fast');
				$("#holder li").slideDown('slow');
				$(".filters li input[type=checkbox]").attr('checked','checked');
				$(".filters li").addClass('checked');
				//$(".filters li label").animate({'margin-left':'5px'}, 'slow');
				$(".filters li label").css({'color':'#75A5B1'});
			}else{
				$("#holder li img").fadeOut('slow');
				$("#holder li").slideUp('slow', function() {
					$(".played").slideDown('fast');
				});
				$(".filters li input[type=checkbox]").removeAttr('checked');
				$(".filters li").removeClass('checked');
				//$(".filters li label").animate({'margin-left':'0px'}, 'slow');
				$(".filters li label").css({'color':'#40575F'});
			}
		}else{
			if ($(this).is(':checked')){
				$("#holder li."+selection+" img").fadeIn('slow');
				$("#holder li."+selection).prependTo('#holder').slideDown('fast');
				//$("#holder li."+selection).slideDown('fast');
				
				var stringOfClassNames = '';
				var thisClassString = $("#holder li."+selection).attr('class');
				stringOfClassNames = stringOfClassNames +' '+ thisClassString;
				
				var arrayClasses = stringOfClassNames.split(' ');
				//alert(arrayClasses);
				$.each(arrayClasses, function() {
					$('.filters input[value='+this+']').parent('li').addClass('checked');
					$('.filters input[value='+this+']').parent('li').find('label').css({'color':'#75A5B1'});
					$('.filters input[value='+this+']').attr('checked','checked');
				});
				
				$(this).parent('li').addClass('checked');
				//$(this).parent().find('label').animate({'margin-left':'5px'}, 'slow');
				$(this).parent().find('label').css({'color':'#75A5B1'});
				
		
				if ($.browser.webkit) {
					$('#main #holder li').css({'position':'relative'})
				}
			}else{
			
				$("#holder li."+selection+" img").fadeOut('slow');
				$("#holder li."+selection).slideUp('fast', function() {
				
					var stringOfClassNames = '';
					var thisClassString = $("#holder li."+selection).attr('class');
					stringOfClassNames = stringOfClassNames +' '+ thisClassString;
					
					var arrayClasses = stringOfClassNames.split(' ');
					//alert(arrayClasses);
					$.each(arrayClasses, function() {
						$('.filters input[value='+this+']').parent('li').removeClass('checked');
						$('.filters input[value='+this+']').parent().find('a.jqTransformCheckbox').removeClass('jqTransformChecked');
						$('.filters input[value='+this+']').parent('li').find('label').css({'color':'#40575F'});
						$('.filters input[value='+this+']').removeAttr('checked');
					});
					
					
					if ($('.filters input:checked').length <= 0){
						$("#holder li").slideUp('fast');
						$(".played").slideDown('fast');
					}
					
				
				});
				
				
				$(this).parent('li').removeClass('checked');
				$(this).parent('li.'+selection+' input[type=checkbox]').removeAttr('checked');
				//$(this).parent().find('label').animate({'margin-left':'0px'}, 'slow');
				$(this).parent().find('label').css({'color':'#40575F'});
				
				if ($('#filterIDall').is(':checked')){
					$('#filterIDall').removeAttr('checked');
					$('#filterIDall').parent().find('li').removeClass('checked');
					//$('#filterIDall').parent().find('label').animate({'margin-left':'0'}, 'slow');
					$('#filterIDall').parent().find('label').css({'color':'#40575F'});
				}
			}
		}
	});
	
	
	//$(".filters li input[type=checkbox]#filterIDredweb").trigger('click');
	
	
	

/*

	// everything hinges on creating a string of class names, 
	// so i'll create a variable to hold that first
	
	var stringOfClassNames = '';
	
	// grab the class name of each list item to build that string
	$('.filterThis > li').each( function (i) {
		var thisClassString = $(this).attr('class');
		stringOfClassNames = stringOfClassNames +' '+ thisClassString
	});
	
	// now i have a space-delimited string of all class names stored
	// in the stringOfClassNames variable.	
	// Trim spaces from the ends of that string:
	stringOfClassNames = jQuery.trim(stringOfClassNames);
	
	// i can't really do anything with it until it's an array, so
	// convert that string to an array.
	var arrayClasses = stringOfClassNames.split(' ');
	
	
	// now for the isolating the filter that is common to all.
	// must do before extracting only the unique classes
	// one way to approach: count the number of times classes occur, and
	// if any occur the same number of times as how many list items i have,
	// assume that class is common to all list items, and remove it from
	// the filter list. duplicate class on same item = problem, but 
	// i'm not thinking about that right now.
	// i've also chosen sort the pre-unique'd array
	// instead of sorting the unique'd array.  i think i have to for the count.
	var arrayClasses = arrayClasses.sort();
	totalNumberOfItemsToFilter = $('.filterThis > li').length;
	
	
	// borrowed from http://stackoverflow.com/questions/348021/counting-results-in-an-array
	// for counting up items.  do i even need this?
	var result = new Object();
	for (var filterClass in arrayClasses) {
		if (result[arrayClasses[filterClass]] === undefined) {
			result[arrayClasses[filterClass]] = 1;
		} else {
			result[arrayClasses[filterClass]]++;
		}
	}
	var resultsToRemoveFromFilters = new Array();
	for (var item in result) {
		if (result[item] == totalNumberOfItemsToFilter) {
			resultsToRemoveFromFilters.push(item);
		}
	}
	
	
	

	// pull out only unique values from that array.  Otherwise
	// i'll end up with duplicate filter checkboxes.
	arrayUniqueClasses = (unique(arrayClasses));


	// and now remove classes that appear in every result from my 'unique
	// classes' array
	for (x in resultsToRemoveFromFilters) {
		arrayUniqueClasses = removeItems(arrayUniqueClasses,resultsToRemoveFromFilters[x]);
	}
	//$('.filterThis').before('<p><strong>Classes excluded from filters because they are common to all elements:<\/strong> '+resultsToRemoveFromFilters+'<\/p>');
	
	var myString = new String(resultsToRemoveFromFilters);
	var removeFromList = myString.split(','); 
	
	//var removeFromList = resultsToRemoveFromFilters.split(",");
	
	//alert(removeFromList);
	
	$.each(removeFromList, function() {
	$('.filters input[value='+this+']').parent('li').hide();
	});
	
	
	

	// we only want to create filters if there are multiple classes. check
	// length of that array to see if it worth going forward.  I need at least
	// two, so my value has to be greater than 1.
	if (arrayUniqueClasses.length > 1) {

		// it must be worth it, because everything else is
		// within the true side of this if statement.	
		// so since we're going to have some filters, 
		// lets give them a place to live
		//$('<ul class="filters"><\/ul>').insertBefore('.filterThis');
		
		// then build the filter checkboxes based on all the class names
		$.each(arrayUniqueClasses, function() {
			//$('<li><input class="dynamicFilterInput" type="checkbox" checked="checked" value="'+this+'" id="filterID'+this+'" /><label for="filterID'+this+'">'+this+'<\/label><\/li>').appendTo('ul.filters');
		});
		
		// lets throw in the 'show all' checkbox for giggles
		//$('<li><input type="checkbox" checked="checked" value="filterAll" id="filterIDall" /><label for="filterIDall">Show all<\/label><\/li>').appendTo('ul.filters');

		// now lets give those filters something to do
		$('.filters input').click( function() {
				$("#holder li img").fadeIn('fast');
			var value= $(this).val();
			if ((value == 'filterAll') && ($(this).is(':checked'))) {
				$('.filters input').attr('checked','checked');
				$('.filterThis li').slideDown();
			} else {
				stringValue = '.filterThis > li.'+value;
				stringValueOpposite = '.filterThis > li:not(.'+value+')';
				if ($(this).is(':checked')) {
					classesOfItemToShow = '';
					$(stringValue).fadeIn().slideDown().each( function() {
						classesOfItemToShow = classesOfItemToShow + ' ' + $(this).attr('class');
					});
					// trim spaces, then turn to an array, then
					// exclude non-unique classes
					classesOfItemToShow = jQuery.trim(classesOfItemToShow);
					classesOfItemToShow = classesOfItemToShow.split(' ');
					classesOfItemToShow = (unique(classesOfItemToShow));
					if (classesOfItemToShow.length > 1) {
						$.each(classesOfItemToShow, function() {
							$('.filters input[value='+this+']').attr('checked','true');
							$('.filters input[value='+this+']').parent().find('label').css({'color':'#75A5B1'});
							$('.filters input[value='+this+']').parent('li').addClass('checked');
						});	
					}
					if ($('.dynamicFilterInput').not(':checked').length == 0) {
						$('#filterIDall').attr('checked','true');
					};
				} else {
					// all my new stuff goes here to tackle that 'webdev'
					// and 'resources' class issue.
					OtherClassesAssociatedWithTheItemToBeRemoved = '';
					Oca = OtherClassesAssociatedWithTheItemToBeRemoved;
					$(stringValue).each(function(i) {
						Oca = Oca + ' ' + $(this).attr('class');
					});
					
					// trim spaces, then turn to an array, then
					// exclude non-unique classes
					Oca = jQuery.trim(Oca);
					Oca = Oca.split(' ');
					Oca = (unique(Oca));
					if (Oca.length > 1) {
						$.each(Oca, function() {
							classToCompare = this; 
							if (!($('.'+classToCompare).is(stringValueOpposite))) {
								// uncheck the checkbox that classToCompare represents
								$('.filters input[value='+classToCompare+']').removeAttr('checked');
								$('.filters input[value='+classToCompare+']').parent().find('label').css({'color':'#40575F'});
							$('.filters input[value='+this+']').parent('li').removeClass('checked');
							}
						});	
					}
					$(stringValue).fadeOut().slideUp();
					$('.filters #filterIDall').removeAttr('checked');
				}
			}
		});
	}
	
	
	*/

	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
});


refreshfonts();
function refreshfonts(){
	//Cufon.replace('#header h2', { fontFamily: 'laneregular', hover:true,hoverables:{strong:true,em:true,a:true} });
	//Cufon.replace('#amazingnavcontainer ul li a', { fontFamily: 'laneregular', hover:true,hoverables:{strong:true,em:true,a:true} });
	//Cufon.replace('#main h2', { fontFamily: 'laneregular', hover:true,hoverables:{strong:true,em:true,a:true} });
	//Cufon.replace('#main h3', { fontFamily: 'laneregular', hover:true,hoverables:{strong:true,em:true,a:true} });
	//Cufon.replace('#main .half .caption h3', { fontFamily: 'laneregular', hover:true,hoverables:{strong:true,em:true,a:true} });
}


/**
 * Removes duplicates in the array 'a'
 * @author Johan Känngård, http://johankanngard.net/
 */
function unique(a) {
	tmp = new Array(0);
	for(i=0;i<a.length;i++){
		if(!contains(tmp, a[i])){
			tmp.length+=1;
			tmp[tmp.length-1]=a[i];
		}
	}
	return tmp;
}

/**
 * Returns true if 's' is contained in the array 'a'
 * @author Johan Känngård, http://johankanngard.net/
 */
function contains(a, e) {
	for(j=0;j<a.length;j++)if(a[j]==e)return true;
	return false;
}



function removeItems(array, item) {
	var i = 0;
	while (i < array.length) {
		if (array[i] == item) {
			array.splice(i, 1);
		} else {
			i++;
		}
	}
	return array;
}

function extLinks(){
	$('a[rel*="external"]').click(function(){
		window.open(this.href);
		return false;
	});
}

function hug(){
	$('body').append("<div class='hug' style='display:none;'><div style='position:absolute;top:0;padding:20px;font-size:20px;background:#ccc;width:100%;text-align:center;'>it works, I need a hug</div></div>");
	$('.hug').fadeIn('normal');
}

function replaceHrTag(){	
	$("hr").wrap("<div class='divider2'></div>");
}

function StripeTable(){	// must include table plugin to use this function			
	$(".stripeMe tr").mouseover(function(){
		$(this).addClass("over");
	}).mouseout(function(){
		$(this).removeClass("over");
	});
	$(".stripeMe tr:even").addClass("alt");  
}

function styleSecondCol(){
    $('tr').each(function(){		  
		var count=1;
    	$('td').each(function(){
      		count++;
			//alert(count);
			if(count%2 != 0){ 
				$(this).addClass("txtright");
			}
    	})
    })
}

function addPrintLink(){
	// add print page link - since it can only work for JS, only add it for JS users
	$('#print') // create list item
    .addClass('print') //add relevant class to it
    .append('<a href="javascript:window.print();">Print this page</a>') //put in the link
    .insertBefore('li a.foo'); //add before the li item with link of class 'foo'
}



