//flickr code
//thanks to:
//http://www.richardshepherd.com/
//and
//http://stephenwyattbush.com

//function getphotos(){
//    $.getJSON("http://api.flickr.com/services/rest/?format=json&method=flickr.photos.search&user_id=32084005@N02&api_key=354e7893076674674b34cd75bd686c6e&jsoncallback=?", function(data){
//		var photoStream = "";
//		$.each(data.photos.photo, function(i, item){ 
//			photoStream += '<li><a href="http://www.flickr.com/photos/32084005@N02/'+item.id+'/" target="_blank" title="'+item.title+'"><img width="75" height="75" src="http://farm' + item.farm + '.static.flickr.com/' + item.server + '/' + item.id + '_' + item.secret + '_s.jpg" alt="'+item.title+'" /></a></li>';
//        	if(i == 9){
//				return false;
//			};
//		});
//		$("#photoStream").html('<li class="widget">Photos</li>'+photoStream);
//    });       
//}
//getphotos(); photostream is disabled until i figure out exactly what i do and don't want to share

/*
 * jQuery hashchange event - v1.2 - 2/11/2010
 * http://benalman.com/projects/jquery-hashchange-plugin/
 * 
 * Copyright (c) 2010 "Cowboy" Ben Alman
 * Dual licensed under the MIT and GPL licenses.
 * http://benalman.com/about/license/
 */
(function($,i,b){var j,k=$.event.special,c="location",d="hashchange",l="href",f=$.browser,g=document.documentMode,h=f.msie&&(g===b||g<8),e="on"+d in i&&!h;function a(m){m=m||i[c][l];return m.replace(/^[^#]*#?(.*)$/,"$1")}$[d+"Delay"]=100;k[d]=$.extend(k[d],{setup:function(){if(e){return false}$(j.start)},teardown:function(){if(e){return false}$(j.stop)}});j=(function(){var m={},r,n,o,q;function p(){o=q=function(s){return s};if(h){n=$('<iframe src="javascript:0"/>').hide().insertAfter("body")[0].contentWindow;q=function(){return a(n.document[c][l])};o=function(u,s){if(u!==s){var t=n.document;t.open().close();t[c].hash="#"+u}};o(a())}}m.start=function(){if(r){return}var t=a();o||p();(function s(){var v=a(),u=q(t);if(v!==t){o(t=v,u);$(i).trigger(d)}else{if(u!==t){i[c][l]=i[c][l].replace(/#.*/,"")+"#"+u}}r=setTimeout(s,$[d+"Delay"])})()};m.stop=function(){if(!n){r&&clearTimeout(r);r=0}};return m})()})(jQuery,this);

//contactPanel object
var contactOn = false;

var caramel = {
	
	ajax_loader : $('<img id="ajaxLoader" src="/wp-content/themes/caramel_pro/img/ajax-loader.gif" width="220" height="19" alt="Hang on a sec&hellip;" />'),
	contactPanel : {
		navDuration : 300,
		thePanel : $('<div id="contactPanel"/>'),
		id : '#contactPanel',
		controlID: '#btnContact',
		closeButton : $('<a href="#site" title="Close contact details" id="closeContact"><span>close</span></a>'),
		ins_point: $('#header'),
		opener : function(){ 
			caramel.contactPanel.thePanel.fadeIn((caramel.contactPanel.navDuration*2)).load(caramel.showcase.pageLink+' .vcard').ajaxStart(function(){
			}).ajaxComplete(function(){
				$(caramel.contactPanel.id).append(caramel.contactPanel.closeButton);																											  
			});
			$(caramel.contactPanel.controlID).addClass('on');
			
		},
		closer : function(){ 
			caramel.contactPanel.thePanel.fadeOut((caramel.contactPanel.navDuration*2), function(){
				caramel.contactPanel.closeButton.remove();
			});
			$(caramel.contactPanel.controlID).animate( { "top" : "-15px" }, caramel.contactPanel.navDuration ).removeClass('on');
		},
		init : function(){
			caramel.contactPanel.ins_point.append(caramel.contactPanel.thePanel);
			$('a[rel=contact]').attr('href',caramel.contactPanel.id).click(function(e){
				caramel.contactPanel.opener();
				contactOn = true;
			});
			$(caramel.contactPanel.controlID).attr('href',caramel.contactPanel.id).click(function(e){
				caramel.contactPanel.opener();
				contactOn = true;
				e.preventDefault();
			});
			$('#closeContact').attr('href','#site').live('click',function(e){
				caramel.contactPanel.closer();
				contactOn = false;
				e.preventDefault();
			});
		}
	},

	//form_validation
	validate : {
		me : $('.requires_validation'),
		required : $('.required'),
		requiredClass : 'required',
		vText : 'text',
		vEmail : 'email',
		vSelect : 'select',
		vTextarea : 'textarea',
		eFilter : /^[a-z0-9_+.-]+\@([a-z0-9-]+\.)+[a-z0-9]{2,4}$/,
		fieldClass : 'errorfield',
		labelClass : 'errorlabel',
		msgContainer : $('<p class="cs_error_msg"/>'),
		blurBox : $('<span class="fielderror"/>'),
		blurMsg : 'Please enter',
		bbFade : 300,
		bbImg : $('<span class="fieldicon"/>'),
		msgSubmitErr : 'Hi, to successfully send me a comment please fill out all the fields marked with an * before submitting.',
		msgNoEmail : 'Something doesn\'t look right with your email address?',
		init : function(){
			caramel.validate.required.each(function(){
					
					if( $(this).hasClass(caramel.validate.vText) ){
						$(this).blur(function(){
							caramel.validate.textField( $(this) );
						});	
					}
					if( $(this).hasClass(caramel.validate.vEmail) ){
						$(this).blur(function(){
							caramel.validate.emailField( $(this) );
						});	
					}
					if( $(this).hasClass(caramel.validate.vTextarea) ){
						$(this).blur(function(){
							caramel.validate.textField( $(this) );
						});
					}
				
			});
			caramel.validate.me.each(function(){
				$(this).submit(function(e){
					$(this).prepend(caramel.validate.msgContainer);
					caramel.validate.msgContainer.hide();
					var msgValidation = {
						text : ''	
					};					
					if( $(this).find('.'+caramel.validate.requiredClass).hasClass(caramel.validate.fieldClass) || $(this).find('.'+caramel.validate.requiredClass).val() == '' ){
						
						if ( $(this).find('.'+caramel.validate.vEmail).hasClass(caramel.validate.fieldClass) ){
							msgValidation.text = caramel.validate.msgSubmitErr+' '+caramel.validate.msgNoEmail;
						}else{
							msgValidation.text = caramel.validate.msgSubmitErr;
						}
						$(this).find('.'+caramel.validate.requiredClass).each(function(){
							if( $(this).val() == '' ){ $(this).addClass(caramel.validate.fieldClass).siblings('label').addClass(caramel.validate.labelClass); }													   
						});
						caramel.validate.msgContainer.text(msgValidation.text).addClass('error').show();
						e.preventDefault();
					}else{
						//validation is successful
						//temp condition
						if($(this).hasClass('test_form')){
							alert('good to go');
							e.preventDefault();
						}
					}
					
				});
			});
		},
		textField : function(elem){
			var thisLabel = $(elem).siblings('label').text().split('*')[0];
			if($(elem).val().length >= 2){
				$(elem).removeClass(caramel.validate.fieldClass).siblings('label').removeClass(caramel.validate.labelClass);
				caramel.validate.blurBox.fadeOut(caramel.validate.bbFade, function(){ $(this).remove(); });
				caramel.validate.bbImg.remove();
			}else{
				$(elem).addClass(caramel.validate.fieldClass).siblings('label').addClass(caramel.validate.labelClass);
				caramel.validate.blurBox.text(caramel.validate.blurMsg+' '+thisLabel).hide().insertAfter($(elem)).fadeIn(caramel.validate.bbFade);
				caramel.validate.bbImg.hide().insertAfter($(elem)).fadeIn(caramel.validate.bbFade);
			}
		},
		emailField : function(elem){
			var thisLabel = $(elem).siblings('label').text().split('*')[0];
			if($(elem).val() == '' || !caramel.validate.eFilter.test( $(elem).val() )){
				$(elem).addClass(caramel.validate.fieldClass).siblings('label').addClass(caramel.validate.labelClass);
				caramel.validate.blurBox.text(caramel.validate.blurMsg+' '+thisLabel).hide().insertAfter($(elem)).fadeIn(caramel.validate.bbFade);
				caramel.validate.bbImg.hide().insertAfter($(elem)).fadeIn(caramel.validate.bbFade);
			}else{
				$(elem).removeClass(caramel.validate.fieldClass).siblings('label').removeClass(caramel.validate.labelClass);
				caramel.validate.blurBox.fadeOut(caramel.validate.bbFade, function(){ $(this).remove(); });
				caramel.validate.bbImg.remove();
			}
		}
	},
	
	clearFields : function(input,value){
		//example usage: caramel.clearFields('form #name', 'Your name');
		$(input).focus(function(){
			if( $(this).val() == value ){
				$(this).val('');
			}
		}).blur(function(){
			if( $(this).val() == '' ){
				$(this).val(value);
			}
		});
	},
	
	pn : 1,
	showcase : {
		//DOM elements
		showcase_el : $('<div id="showcase" />'),
		box_el : $('<div id="box1" class="content_box" />'),
		wrapper_el : $('<div id="c_wrapper" />'),
		content_el : $('<div id="highlight" />'),
		control_el : $('<div id="control_bar" />'),
		//selectors from page
		data_list : $('#mySites li'),
		//arrays
		item_count : [],
		//methods
		showSlide : function(which, pageLink){
			caramel.pn=which;
			var whichZip = which;
			var data = pageLink+' #content'+which;
			caramel.showcase.sc_els.content.fadeOut('fast', function(){
					$(this).css('left','0').css('top','280px').load(data).ajaxStart(function(){
						caramel.showcase.sc_els.wrapper.append(caramel.ajax_loader);																										   
					}).ajaxSuccess(function(){
						caramel.showcase.sc_els.content.fadeIn(100, function(){
							caramel.ajax_loader.fadeOut('fast').remove();														  
						}).animate({top:'0px'}, 300, 'swing');											
					});
			});
			caramel.showcase.zippy(whichZip);
			caramel.showcase.sc_els.dates.removeClass('on');
			$(caramel.showcase.sc_els.dates[which-1]).addClass('on');

			which == 1 ? caramel.showcase.sc_els.prev.fadeOut() : caramel.showcase.sc_els.prev.fadeIn();
			which == caramel.showcase.item_count.length ? caramel.showcase.sc_els.next.fadeOut() : caramel.showcase.sc_els.next.fadeIn();
			return false;
			
		},
		zippy : function(whichZip){
			caramel.showcase.sc_els.highlight.removeClass('on');
			//calculate viewport
			function windowHeight(){
				var de = document.documentElement;
				return self.innerHeight || (de && de.clientHeight) || document.body.clientHeight;
			}
			function windowWidth(){
				var de = document.documentElement;
				return self.innerWidth || (de && de.clientWidth) || document.body.clientWidth;
			}
			var viewportArea = windowHeight() * windowWidth();
			var topPos = Math.round(Math.random() * windowHeight());
			var rgtPos = Math.round(Math.random() * windowWidth());
			var btmPos = Math.round(Math.random() * windowHeight());
			var lftPos = Math.round(Math.random() * windowHeight());
			
			$('#zippy'+whichZip).css('top',topPos).css('left',lftPos).fadeIn('fast').animate({ left:rgtPos, top:btmPos }, 200, 'linear', function(){
				$(this).fadeOut('fast');
			});
		},
		pageLink : 'http://blog.caramelbiscuit.com/',
		init : function(firstSite){
			
			//inject DOM elements
			caramel.showcase.showcase_el.insertBefore('#page').append(caramel.showcase.box_el).append(caramel.showcase.control_el);
			caramel.showcase.box_el.append(caramel.showcase.wrapper_el);
			caramel.showcase.wrapper_el.append($(caramel.showcase.content_el));
			$(caramel.showcase.content_el).load(caramel.showcase.pageLink+' '+firstSite);
			caramel.showcase.control_el.append('<ol id="sc_itemList" />');
			$('#sc_itemList').append('<li class="prev"><a href="#"><span>Back</span></a>&nbsp;</li>')
			.append('<li class="site_list" />').append('<li class="next"><a href="#?slide=2"><span>Forth</span></a></li>');
			$('.site_list').append('<ol />');
			
			caramel.showcase.data_list.each(function(intIndex){
				count = intIndex+1;
				caramel.showcase.item_count.push(count);
				var sl_item = $('<li id="slide'+count+'"><a class="slide'+count+'" href="#header?slide='+count+'"><span>'+count+'</span></a></li>');
				$('.site_list ol').append(sl_item);
			});
			$('.site_list li:first').addClass('first');
			$('.site_list li:last').addClass('last');
			
			//populate sc_els object
			caramel.showcase.sc_els.dates = $('.site_list ol li a'),
			caramel.showcase.sc_els.prev = $('#control_bar li.prev a'),
			caramel.showcase.sc_els.next = $('#control_bar li.next a'),
			caramel.showcase.sc_els.highlights = $('.content_box'),
			caramel.showcase.sc_els.highlight = $('#box1'),
			caramel.showcase.sc_els.content = $('#highlight'),
			caramel.showcase.sc_els.wrapper = $('#c_wrapper'),
			
			caramel.showcase.launch(firstSite, caramel.showcase.pageLink);
			
		},
		sc_els : {
			//blank object for receiving selectors for dynamic elements
		},
		launch : function(firstSite, pageLink){
			
			caramel.showcase.sc_els.highlight.show().addClass('on').css('height','280px');
			
			//set up random zippy ships
			var imagePath = '/wp-content/themes/caramel_pro/img/';
			caramel.showcase.data_list.each(function(intIndex){
				var count=intIndex+1;
				var rand=Math.floor(Math.random() * count);
				rand==0?rand=5:rand=rand;
				$('<div id="zippy'+count+'" class="zippy" style="background-image:url('+imagePath+'zip_'+rand+'.png);">&nbsp;</div>').insertAfter('#header').hide();
			});
						
			caramel.showcase.sc_els.prev.hide();			
			
			caramel.showcase.sc_els.dates.each(function(intIndex){
				var slide = intIndex+1;
				$(this).bind('click',function(e){
					if($('#box'+slide).hasClass('on')){
						return false;
					}else{
						caramel.showcase.showSlide(slide, pageLink);
						e.preventDefault();
					}
				});
				
			});
			
			caramel.showcase.sc_els.prev.live('click',function(e){
				caramel.pn=caramel.pn-1;
				caramel.showcase.showSlide(caramel.pn, pageLink);
				e.preventDefault();
			});
			caramel.showcase.sc_els.next.live('click',function(e){
				caramel.pn++;
				caramel.showcase.showSlide(caramel.pn, pageLink);
				e.preventDefault();
			});
			
		}
	}

}

$(function() {
		   
	//extend this script to check for all browsers which don't support media queries, then copy into php function for betterness
	if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)){
		var ffversion=new Number(RegExp.$1);
		if (ffversion<3.5){
			$('body').addClass('media');
		}
	}
	//test for IE
	if(isIE==false){

		$('body').removeClass('noScript').addClass('hasJS');
		
		//animate footer mouseovers
		$("#connect li a").hover(function() {
			$(this).find('.blob').animate({marginTop: '30px', marginLeft: '30px', top: '15%', left: '15%', width: '0px', height: '0px' }, caramel.contactPanel.navDuration);
			} , function() { 
				$(this).find('.blob').animate({marginTop: '0', marginLeft: '0', top: '0', left: '0', width: '80px', height: '80px' }, caramel.contactPanel.navDuration);
			}
		);
		
		//launch contactPanel
		new caramel.contactPanel.init();
			  
	}//end ie condition test
	
	$('#headNav a').hover(
		//create the currently clunky nav animations
		function(){
			//these conditions ensure any 'on' states are left alone. on states work by parent page class selector + nav id.
			if( $('body').hasClass('home') && $(this).is('#workNav') ){ return false; }
			if( $('body').hasClass('page-id-2') && $(this).is('#aboutNav') ){ return false; }
			if( $('body').hasClass('blog') && $(this).is('#blogNav') ){ return false; }
			if( contactOn == true && $(this).is('#btnContact') ){ return false; }
			else{ $(this).animate({ "top":"0" }, caramel.contactPanel.navDuration); }
		},

		function(){
			//again leave any on states.
			if( $('body').hasClass('home') && $(this).is('#workNav') ){ return false; }
			if( $('body').hasClass('page-id-2') && $(this).is('#aboutNav') ){ return false; }
			if( $('body').hasClass('blog') && $(this).is('#blogNav') ){ return false; }
			if( contactOn == true && $(this).is('#btnContact') ){ return false; }
			else{ $(this).animate({ "top":"-15px" }, caramel.contactPanel.navDuration); }
		}

	);
	
	//launch form validation
	new caramel.validate.init();

});
