$(function(){
	if($('#eventslist').length > 0) { 
		loadFBEvents();
	}
	
	$('#networkitunes').hover(function(){
			//over
			$('#ituneslinks').fadeIn();
		},function(){
			//and out	
			$('#ituneslinks').fadeOut();
		});
	
	
	if($('#fbphotos').length > 0) { 
		photoLoader(facebookJSON, 'facebook','fbphotos',9);
	}
	
	if($('.skiitem').length > 0) { 
		//is ski catagory
		animateSkis();
	}
	
	if($('#skiswatches').length > 0) { 
		//is ski detail
		//Load the title of the ski to data
		$.data(document.getElementById('skidetailimg'),'shape',$('#skidetailimg img').attr('title'));
		initSkiDetail();
		initOrderForm();
		photoLoader(facebookSkiJSON, 'facebook','skiphotofeed',5);
		$('#skibox').click(function(){
			lbLoadAllSkis(this.href);
			return false;
		});
	}
	if($('#commentform').length > 0) {
		$('#commentform').validate();
	}
	
	if($('#photopage').length > 0){
		initPhotoDetail();
	}
	initContactForm();
});

$(window).ready(function(){
	/* Load all the images after the window loads */												 
	lightboxclose= new Image(); 
	lightboxclose.src="/images/lightbox/modal-window-controls.png"; 
	lightboxclose= new Image(); 
	lightboxclose.src="/images/lightbox/lightbox-load.gif"; 
	ajaxLoaderImg= new Image(); 
	ajaxLoaderImg.src="/images/common/loader.gif"; 
});

/*Core Functions
-------------------------------------*/

var zrScrollMe = function(el){
	var currentPos = $(window).scrollTop();
	var eOffset = $("#"+el).offset().top - 10;
	var scrollPos = eOffset;
	$('html, body').animate({
	scrollTop: scrollPos
	}, 500);
};


// JavaScript Document
/*In order to get the access token I think we need to first pass something like this to an iframe: 
	https://graph.facebook.com/oauth/authorize?client_id=101231259950790&redirect_uri=http://www.skatemontana.com/&type=user_agent&offline_access=true
	then in the response URL get the access token. 
	then call the facebook stuff. */
	
//window.location = 'https://graph.facebook.com/oauth/authorize?client_id=101231259950790&redirect_uri=http://www.skatemontana.com/&type=user_agent&scope=offline_access'
/*---------------------------

App Name:	Montana Ski Company
App URL:	http://localhost/
App ID:	172569212770275	

App Name:	Montana Ski Company
App URL:	http://www.montanaskicompany.com/
App ID:	124022527659364


---------------------------*/
//Set up global variables for various photo feeds
var flickrGroupJSON = 'http://api.flickr.com/services/feeds/groups_pool.gne?id=21268058@N00&lang=en-us&format=json&jsoncallback=?';
var twitterJSON = 'http://twitter.com/statuses/user_timeline/98563525.json?count=10&callback=?';
var token = '101231259950790%7C631bec8c5abacbb017ed2963-1047565466%7CXjzQ2HLKaSuhbVk_Zbxm0J3rLdo'
var facebookJSON = 'http://graph.facebook.com/278046361003/photos?limit=1000&callback=?'
var facebookSkiJSON = 'http://graph.facebook.com/278046361003/photos?limit=1000&callback=?'
var fbAlbumsJSON = 'https://graph.facebook.com/MontanaSkiCo/albums?access_token=' + token + '&callback=?';
var fbEventsJSON = 'https://graph.facebook.com/MontanaSkiCo/events?access_token=' + token + '&callback=?';

// pass in the 'created_at' string returned from twitter //
// stamp arrives formatted as Tue Apr 07 22:52:51 +0000 2009 //
function parseTwitterDate($stamp)
{		
// convert to local string and remove seconds and year //		
	var date = new Date(Date.parse($stamp)).toLocaleString().substr(0, 16);
// get the two digit hour //
	var hour = date.substr(-5, 2);
// convert to AM or PM //
	var ampm = hour<12 ? ' AM' : ' PM';
	if (hour>12) hour-= 12;
	if (hour==0) hour = 12;
// return the formatted string //
	return date.substr(0, 11)+',  ' + hour + date.substr(13) + ampm;
}


var loadTweets = function(){
	$('#loadhapps').removeClass('active');
	$('#loadtweets').addClass('active');
	$('#twitterbox').css('display','block');
	$('#happeningsbox').css('display','none');
	$('#happeningshead').text("Latest Tweets");
	var tweetAlt = ' odd';
	
	$.getJSON(twitterJSON, function(data){
			$.each(data, function(i, item) {
				if(i == 0) {
					$("#twitterbox").empty();	
				}
					$("#twitterbox").append('<div class="post' + tweetAlt + '">' + item.text + ' | Posted on ' + parseTwitterDate(item.created_at) + ' via ' + item.source+ '</div>');
					if(tweetAlt == ' odd') { 
						tweetAlt = '';
					} else { 
						tweetAlt = ' odd';
					}
			});
	});
}


var loadHapps = function(){
	$('#loadhapps').addClass('active');
	$('#loadtweets').removeClass('active');
	$('#twitterbox').css('display','none');
	$('#happeningsbox').css('display','block');
	$('#happeningshead').text("Happenings");
}

	
var loadFBEvents = function() { 
	$.getJSON(fbEventsJSON,function(json) {
			$('#eventslist').html('<ul></ul>');
			if(json.data.length == 0){
				//if there aren't any events hide them
				$('#homeevents').hide();
			}
		 	$.each(json.data,function(i,fb){
				if (i==0){
					$('#eventslist').hide();
				}
				//start date
				var dStart = fb.start_time;
				var dStartArray = dStart.split("T");
				var dStartDate = dStartArray[0];
				var dStartTime = dStartArray[1];
		    var dStartDateObj = new Date(dStartDate);
		 		var dStartFormatted = eval(dStartDateObj.getMonth() + 1) + "." + dStartDateObj.getDate() + "." + dStartDateObj.getFullYear();
				
				//End date
				var dEnd = fb.end_time;
				var dEndArray = dStart.split("T");
				var dEndDate = dStartArray[0];
				var dEndTime = dStartArray[1];
		    var dEndDateObj = new Date(dEndDate);
		 		var dEndFormatted = eval(dEndDateObj.getMonth() + 1) + "." + dEndDateObj.getDate() + "." + dEndDateObj.getFullYear();
				if(dStartFormatted == dEndFormatted) {
					var dString = dStartFormatted;
				}
				else { 
					var dString = dStartFormatted + " - " + dEndFormatted;
				}
				var dEnd = fb.end_time;
			$('#eventslist ul').append('<li>' + dString + ': <a href="http://www.facebook.com/event.php?eid=' + fb.id + '">' + fb.name + ', ' + fb.location + '</a></li>');
		});
	});
}



var initPhotoDetail = function() { 
	albumLoader(fbAlbumsJSON);
	$('.loadgallery').live('click',function(){
		//reset the lightbox arrays when switching betweet galleries.
		lbArray = new Array();
		lbTitleArray = new Array();
		$('#photolinks a.button').removeClass('active');
		$(this).addClass('active');
		$('#photopage').empty();
		$('#photopage').append('<div class="loading"><img src="/images/common/loader.gif" alt="Loading Photos" title="Loading Photos" /></div>');
		galLink = this.href;
		galLinkArr = galLink.split('=');
		galId = galLinkArr.pop();
		switch(galId){
			case 'flickr':
			photoLoader(flickrGroupJSON, 'flickr','photopage');
			break;
			default:
			photoLoader('http://graph.facebook.com/' + galId + '/photos?limit=1000&callback=?', 'facebook','photopage');
		}
		
		return false;
	});
	
}

var albumLoader = function(url){
	$.getJSON(url,function(json) {
		$.each(json.data,function(i,obj){
			if(obj.name != "Profile Pictures"){
				if(i == eval(json.data.length - 1)){
					var buttonClass=' active';
					photoLoader('http://graph.facebook.com/' + obj.id + '/photos?limit=1000&callback=?', 'facebook','photopage');
				}
				else { 
					var buttonClass='';
				}
				$('#photolinks').append('<a href="/photos?id=' + obj.id + '" class="button loadgallery' + buttonClass + '">' + obj.name + '</a>');
			}
		});
	});
}


/*photoLoader
	generic function to load photos with JSON from either flickr or facebook. 
	Arguements
	------------------------------
	url = the JSON feed
	src = 'flickr' or 'facebook'
	id = The id of the container to load the photos into.
*/
	



var photoLoader = function(url,src,id,limit){
	var counter = 1;
	$.getJSON(url,function(json) {
		if(src == 'facebook'){
		 objPath = json.data;
		} else if (src == 'flickr') { 
			objPath = json.items;
		}
		if(limit) { 
			startIdx = objPath.length - limit;
		} 
		else {
			startIdx = 0;
		}
		
		$.each(objPath,function(i,obj){
			if (i == 0){
				$('#'+id).empty();
			}
			if (i >= startIdx){
			
				var newThumb = new Image();
				var imgAlt = '';
				if(src == 'facebook'){
					var imgThumb = obj.images[1].source;
					var imgZoom = obj.images[0].source;
							imgAlt = obj.name;
					
				} else if (src == 'flickr') { 
					var imgThumb = obj.media.m;
					var imgZoom = imgThumb.replace('m.jpg','b.jpg');
							imgAlt = obj.title;
				}
				$(newThumb).load(
					function(){
						//call back once the image is loaded
						var thumbClass = '';
						if(id == "fbphotos"){
							var counterLast = 3;
						}
						else if (id == "photopage") {
							var counterLast = 5;
						}
						
						if(counter == counterLast) { 
								thumbClass=' last';
								counter = 1;
							}
							else { 
								thumbClass='';
								counter++;
							}
							
						if(imgAlt == undefined) { 
							imgAlt = '';
						}
						//$('#fbphotos').append('<img src="' + imgThumb + '"/>');
						$('#'+id).append('<a href="' +imgZoom + '" class="zoom"><img src="/images/common/clear.gif" id="imgthumb' + i + '" style="background:url(' +imgThumb + ') no-repeat 50% 50%;" class="imgthumb imgframe' + thumbClass + '" alt="' + imgAlt + '" title ="' + imgAlt + '"/></a>');
						$('#imgthumb' + i).fadeIn();
				}).attr('src',imgThumb).error(function(){
					alert('There was an error Loading the Image');
				});
			} //end if startIdx
		});
	});
}


var animateSkis = function(){
	$('.skiitem').hover(
		function(){
			//mousein
			$(this).find('.skiimg').animate({top: '0px'}, 200, 'easeOutQuad');
		},function(){
			$(this).find('.skiimg').animate({top: '20px'}, 600, 'easeOutBounce');
		});
}


/*---------------------------------------
	Note: Skis must be named like so:
	parc-1.png, parc-2.png, etc
	park-1-base.png, park-2-base.png, etc
---------------------------------------*/

var initSkiDetail = function(){
	var skiJSLoaderImg= new Image(); 
	skiJSLoaderImg.src="/images/common/ski-loader.gif"; 
	
	var currentNum = $('#skifeaturecolornum').text();
	//used to store the data
	
	//Load the ski topsheet
	$('#skiswatches img').click(function(){
		//JS loader
		showSkiLoader();
		//Thumb activation
		$('#skiswatches img').removeClass('active');
		//var skiIdx = $('#skiswatches img').index(this);
		var skiThumb = this.src;
				skiThumb = skiThumb.replace('.jpg','');
		var skiNum = skiThumb.split('-');
				skiNum = skiNum.pop();
		var selectedGraphic = $(this).attr('title');
		$.data(document.getElementById('skidetailimg'),'graphic',$(this).attr('title'));
		$(this).addClass('active');
		//Set Topsheet to active
		$('#skiswatchbtn a.button').removeClass('active');
		$('#skiswatchbtn a.button:eq(0)').addClass('active');
		//swap Detail Images
		var skiSrc = $('#skidetailimg img').attr('src');
		var newSkiSrc = skiSrc.replace(currentNum,skiNum);
		if(skiSrc.indexOf('-base') > 0) { 
			newSkiSrc = newSkiSrc.replace('-base','');
		}
		
		//$('#skidetailimg img').attr('src',newSkiSrc);
		loadSkiImg(newSkiSrc);
		currentNum = skiNum;
	});
	
	
	//Load the ski Base
	$('#skiswatchbtn a.button').click(function(){
		showSkiLoader();
		$('#skiswatchbtn a.button').removeClass('active');
		$(this).addClass('active');
		var skiSrc = $('#skidetailimg img').attr('src');
		if (this.innerHTML == 'Topsheet'){
			if(skiSrc.indexOf('-base') > 0) { 
				var newSkiSrc = skiSrc.replace('-base','');
				loadSkiImg(newSkiSrc);
			}
		} 
		else { 
			if(skiSrc.indexOf('-base') < 0) { 
				var newSkiSrc = skiSrc.replace('.png','-base.png');
				loadSkiImg(newSkiSrc);
			}
		}
		return false;
	});
}

var loadSkiImg = function(skiImgPath){
	var skiImg = new Image();
	$(skiImg).load(function() { 
		$('#skidetailimg img').attr('src',skiImgPath);
		$('#skiloader').remove();
		$('#loaderholder').show();
	}).attr('src',skiImgPath).error(function () {
		alert('there was an error loading the image:\n' + name);
	});
	
}

var showSkiLoader = function(){
	$('#loaderholder').hide();
	$('#skiswatches').append('<img src="/images/common/ski-loader.gif" alt="Loading" title="Loading" id="skiloader"/>');
}




var initOrderForm = function(){
	$('#skiplaceorder').click(function(){
		
		if($('#skiplaceorder').hasClass('active') == true){
			$('#skiordercontainer').slideUp(function(){
				$('#skiplaceorder').removeClass('active');
				$('#skiordercontainer').empty();
			});
		} 
		else { 
			
			$('#skiplaceorder').addClass('active');
			var selectedShape = $('#skidetailimg img').attr('title');
			var selectedGraphic = $('#skiswatches img.active').attr('title');
			$('#skiordercontainer').load('/includes/order.php','shape='+ selectedShape + '&graphic=' + selectedGraphic, function(){
				$('#skiorderform').validate({
					errorPlacement: function(error, element) {
						$(element).parents('.formblock').prepend(error);
					},
					submitHandler: function(form){
						submitOrderForm();
						return false;
					}
				});
				$('#skiordercontainer').slideDown(function(){
					zrScrollMe('skiplaceorder');
				});
			});
		}
		return false;
	});
	//Set the selected links to hidden form fields for the whole form
	$('.skiselectbox .button').live('click',function(){
		$(this).siblings('.button').removeClass('active');
		$(this).addClass('active');
		var selectedValue = this.title;
		$(this).siblings('input').val(selectedValue);
		return false;
	});
}

var submitOrderForm = function(){
	var parms = $('#skiorderform').serialize();
	$.ajax({
	 type: "POST",
	 url: "/includes/order.php",
	 data: parms,
	 cache: false,
	 success: function(msg){
		$('#skiordercontainer').html(msg);
		$('#skiplaceorder').removeClass('active');
	 },
	 error: function(XMLHttpRequest, textStatus, errorThrown){
		alert('There was an error Sending your order.\n Please contact us or try again');
		}
 });
}


var initContactForm = function(){
	$('#footercontact').click(function(){
		if($('#footercontactbox').css('display') == 'block'){
			$('#footercontactbox').slideUp(function(){
				$('#footercontact').removeClass('active');
				$('#footercontactbox').empty();
			});
		} 
		else { 
			
			$('#footercontact').addClass('active');
			$('#footercontactbox').load('/includes/contact.php', function(){
				$('#contactform').validate({
					errorPlacement: function(error, element) {
						$(element).parents('.formblock').prepend(error);
					},
					submitHandler: function(form){
						submitContactForm();
						return false;
					}
				});
				$('#footercontactbox').slideDown(function(){
					zrScrollMe('footercontactbox');
				});
			});
		}
		return false;
	});
}


var submitContactForm = function(){
	var parms = $('#contactform').serialize();
	$.ajax({
	 type: "POST",
	 url: "/includes/contact.php",
	 data: parms,
	 cache: false,
	 success: function(msg){
		$('#footercontactbox').html(msg);
		//$('#footercontact').removeClass('active');
	 },
	 error: function(XMLHttpRequest, textStatus, errorThrown){
		alert('There was an error Sending your order.\n Please contact us or try again');
		}
 });
}







