/*global $,jx,TEMPLATE_VIEW_PATH,document,alert,CurrentUser,location,FB*/
var slideshow_initialized = false;
var first_music_call = true;
var music_youtube_player = null;
function onYouTubePlayerReady(ytplayerapi) {
	if (!ytplayerapi) {
		SlideShow.display_ytplayer.addEventListener("onStateChange", "onYouTubeStateChangeSlideShow");
		SlideShow.display_ytplayer.addEventListener("onError", "onYouTubeErrorSlideShow");
		SlideShow.display_ytplayer.loadVideoById(SlideShow.display_video_id);
	} else {
		music_youtube_player = document.getElementById("KapturMusicPlayer");
		music_youtube_player.addEventListener("onError", "onMusicPlayerError");
		music_youtube_player.addEventListener("onStateChange", "onMusicPlayerStateChange");
	}
}

/* youtube html5 iframe embed player code start */
var tag = document.createElement('script');
tag.src = "http://www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

var player;
function onYouTubePlayerAPIReady() {
	$(document).ready(function() {
		player = new YT.Player('yt_player',{
			/* videoId: '0TeWbJsgL_w', width: '527', height: '297',
			playerVars: { 'autoplay': 1, 'controls': 0 },*/
			events: {
				'onReady': onPlayerReady,
				'onStateChange': onPlayerStateChange
			}
		});
	});
}

function onPlayerReady(event) {
	event.target.mute();
	//event.target.playVideo();
}

var done = false;
function onPlayerStateChange(event) {
	if (event.data == YT.PlayerState.PLAYING && !done) {
		//player.stopVideo();
		done = true;
	} else if (event.data == YT.PlayerState.ENDED) {
		event.target.playVideo();
	}
}

function toggleMute() {
	var yt_player_mute = document.getElementById('yt_player_mute');
	if (yt_player_mute.className == 'muted') {
		player.unMute();
		yt_player_mute.className = 'unmuted';
	} else {
		player.mute();
		yt_player_mute.className = 'muted';
	}
} /* youtube html5 iframe embed player code end */

function onYouTubeErrorSlideShow(error) {
	var index = SlideShow.display_index;
	if (SlideShow.slideshow_data.type == "photo") {
		index = index + 1;
	}
	SlideShow.next();
	removeIndexFromArray(SlideShow.slideshow_data, index);
	//adjust the display_index so nothing gets skipped
	SlideShow.display_index = SlideShow.display_index - 1;
}

function onYouTubeStateChangeSlideShow(newstate) {
	//SlideShow.display_ytplayer.mute();
	//SlideShow.lightbox_ytplayer.unmute();
	var data = SlideShow.slideshow_data;
	var index = SlideShow.display_index;
	if ((data[index].type === "video")) {
		clearTimeout(SlideShow.autoscroll_main_timeout);
	}

	if (newstate == 1){ //playing
		if (SlideShow.autoscroll_paused) {
			SlideShow.display_ytplayer.pauseVideo();
		}

		if (music_youtube_player) {
			music_youtube_player.pauseVideo();
		}
	} else if (newstate == 0) { //ended
		SlideShow.nextMainDisplayMovieView();
		if (music_youtube_player) {
			music_youtube_player.playVideo();
		}
	}
}

function removeMusicPlayer() {
	$("#slideshowMusic").html('');
	$("#slideshowMusicBar").css("display","none");
	$("#nightSlideShowFacebookStatuses").removeClass("with_music");
}

function onMusicPlayerError(error) {
	removeMusicPlayer();
}

music_player_linked = true;
function onMusicPlayerStateChange(newstate) {
	if (newstate == 1) { //playing
		music_player_linked = true;
		if (!SlideShow.autoscroll_playing) {
			SlideShow.startAutoScroll(SlideShow.autoscroll_speed);
			$('#slideshowPlayButton').addClass('pause');
			hideControls();
		}
	} else if (newstate == 2) { //paused
		if (SlideShow.autoscroll_playing) {
			music_player_linked = false;
		}
		/*if (SlideShow.slideshow_data[SlideShow.display_index].type != 'video') {
			pause();
		}*/
	} else if (newstate == 0) { //ended
		music_youtube_player.seekTo(0);
	}
}

function togglePause() {
	/*var playButton = $("#slideshowPlayButton");
	SlideShow.toggleAutoScroll();
	//showPausePlay();
	playButton.toggleClass('pause');*/

	if (SlideShow.slideshow_data.length && (SlideShow.slideshow_data[SlideShow.display_index].type == 'video')) {
		if (SlideShow.autoscroll_playing) {
			SlideShow.display_ytplayer.playVideo();
		} else {
			SlideShow.display_ytplayer.pauseVideo();
		}
	} else if (music_player_linked){
		if (music_youtube_player && SlideShow.autoscroll_playing && ((typeof music_youtube_player.playVideo) == 'function')) {
			music_youtube_player.playVideo();
		} else if (music_youtube_player) {
			music_youtube_player.pauseVideo();
		}
		
		try {
			var KapturMusicPlayer = document.getElementById('KapturMusicPlayer');
			if (KapturMusicPlayer && SlideShow.autoscroll_playing && ((typeof KapturMusicPlayer.playVideo) == 'function')) 
				KapturMusicPlayer.playVideo();
			else if (KapturMusicPlayer) KapturMusicPlayer.pauseVideo();
		} catch(err) {}
		
		var musicPlayerControls = document.getElementById('musicPlayerControls');
		if (musicPlayerControls) togglePlayMusic(SlideShow.autoscroll_playing?1:0);
	}
}

var RmnDataManager = {
	"selected_date_utc" : null,
	"total_memories" : 0,
	"memory_increase_rate" : 0,
	"current_accurate_memories" : 0,
	"previous_accurate_memories" : 0,


	/**
	 * this method is intended to be called once every five seconds.  Calling it more or
	 * less frequently will render it inaccurate.
	 */
	"getTotalMemories" : function () {
		this.total_memories += this.memory_increase_rate;
		return Math.floor(this.total_memories);
	},
	
	/**
	 * this method gets the true total memories
	 */
	"getTrueTotalMemories" : function () {
		/*RmnDataManager.total_memories = Math.round(Math.random() * 1234567890);
		RmnDataManager.previous_accurate_memories = RmnDataManager.current_accurate_memories;
		RmnDataManager.current_accurate_memories = RmnDataManager.total_memories;*/
		jx.load(TEMPLATE_VIEW_PATH + 'memoryTotals.php', function (result) {
			result = parseInt(result, 10);
			RmnDataManager.total_memories = result;
			RmnDataManager.previous_accurate_memories = RmnDataManager.current_accurate_memories;
			RmnDataManager.current_accurate_memories = result;
		});
	},

	/**
	 * this method gets the current rate of increase from the server.
	 */
	"getMemoryIncreaseRate" : function () {
		jx.load(TEMPLATE_VIEW_PATH + 'memoryTotals.php?function=increaseRate', function (result) {
			result = parseFloat(result) / 3600;
			RmnDataManager.memory_increase_rate = result;
		});
		//RmnDataManager.memory_increase_rate = 1;
	},

	"setSelectedDate" : function (year, month, day) {
		var utc = (new Date(year, month - 1, day)).getTime();
		this.selected_date_utc = utc;
	}
};

function jumpToSlide(slide, section) {
	var bullets,
		jump_next = (slide === 'next'),
		jump_previous = (slide === 'previous'),
		i = 0,
		class_name;
		
	if ((typeof slide) === 'number') {
		slide = slide - 1;
	}
	if (section === 'recent') {
		bullets = document.getElementById('recentMemoriesBullets').childNodes;
		for (i = 0; i < bullets.length; i = i + 1) {
			class_name = bullets[i].childNodes[0].className;
			if ((typeof slide) === 'number') {
				if (i === slide) {
					bullets[i].childNodes[0].className = 'recentNightBulletSelected';
				} else {
					bullets[i].childNodes[0].className = 'recentNightBullet';
				}
			} else if (class_name === 'recentNightBulletSelected') {
				if (jump_next && bullets[i + 1]) {
					bullets[i].childNodes[0].className = 'recentNightBullet';
					bullets[i + 1].childNodes[0].className = 'recentNightBulletSelected';
					$(bullets[i + 1]).click();
					break;
				} else if (jump_previous && bullets[i - 1]) {
					bullets[i].childNodes[0].className = 'recentNightBullet';
					bullets[i - 1].childNodes[0].className = 'recentNightBulletSelected';
					$(bullets[i - 1]).click();
					break;
				}
			}
		}
	}
}

function checkDefaultTextInput(input, default_string) {
	var value = input.value;
	if (value === default_string) {
		input.value = "";
	} else if (value === "") {
		input.value = default_string;
	}
}

function kapturSearchMemories(search_terms) {
	alert("searching for \"" + search_terms + "\"");
}

function kapturMemorySearchFormSubmit() {
	var search_terms = document.getElementById('kapturMemorySearchTerms').value;
	kapturSearchMemories(search_terms);
}

function createNight() {
	var user = CurrentUser.facebook_id,
		date = RmnDataManager.selected_date_utc,
		start_seconds,
		facebook_id,
		new_location = '?p=nw';//p=create

	if (user && date) {
		start_seconds = "&sts=" + (date / 1000);
		facebook_id = "&fid=" + user;
		new_location += start_seconds + facebook_id;
	}

	location.href = new_location;
}

/**
 * Sets the date that will be created
 */
function selectDate(year, month, day) {
	RmnDataManager.setSelectedDate(year, month, day);
	$("#createMemorySelectDateStepImage").removeClass('stepImage').addClass('completedStepImage').html("");
	createNight();
}

/**
 * Response to selecting a date in the datepicker
 */
function handleDateSelect(dateText, inst) {
	var date_values = dateText.split('/'),
		month = date_values[0],
		day = date_values[1],
		year = date_values[2];

	selectDate(year, month, day);
}

function handleDatePickerClosed(dateText, inst) {
	if (!dateText) {
		$("#selectDateButton").css("display", "block");
		$("#dateSelectedDisplay").css("display", "none");
	}
}

/**
 * Response to pressing the select date button
 */
function selectCalendarDate(event) {
	$("#selectDateButton").css("display", "none");
	$("#dateSelectedDisplay").css("display", "block").find("#dateSelectedDisplayInput").focus();
	return false;
}

function getFacebookLoginStatus(doAfter) {
	FB.getLoginStatus(function (response) {
	//FacebookProxy.getLoginStatus(function (response) {
		var session = getFacebookSession(),
			getNameFQL;
		if (session) {
			CurrentUser.facebook_id = getFacebookUserId(session);

			getNameFQL = 'SELECT name, pic_square FROM user WHERE uid="{0}"';
			queryFacebook(getNameFQL, CurrentUser.facebook_id, function (data) {
				CurrentUser.name = "";
				CurrentUser.pic_square = "";
				if (data && data.length > 0) {
					data = data[0];
					CurrentUser.name = data.name;
					CurrentUser.pic_square = data.pic_square;

					doAfter(session);
				}
			});
		} else {
			doAfter();
		}
	});
}

function generateLoggedInUserHtml() {
	var connected_img = '<img src="' + CurrentUser.pic_square + '" class="facebook_square_profile_pic" />',
		logged_in_html = '<div><div class="connected_as_text">' + connected_img + 'Connected as ' + CurrentUser.name + '</div><div class="facebook_logout_button" onclick="logoutOfFacebook()">Logout</div> | <div class="my_memories_button" onclick="viewMemories()">My Memories</div>';
	return logged_in_html;
}

function generateLoggedOutUserHtml() {
	var logged_out_html = 'Already a user? <a href="#" class="bold_red_text" onclick="return connectToFacebook()">Sign In</a>';
	return logged_out_html;
}

function doOnFacebookLogin(session) {
	if (session) {
		createNight();
	} else {
		CurrentUser.facebook_id = "";
		CurrentUser.name = "";
		CurrentUser.pic_square = "";
	}
}

function logInCurrentUser(session) {
	if (session) {
		location.href = replaceUrlParam('p', 'f');//'?p=f';
	}
}

function connectToFacebook(doAfterAuthentication) {
	var onLogin = function (response) {
			var session = getFacebookSession();
			if (session) {
				// refresh the page on login
				if ((typeof doAfterAuthentication) === 'function') {
					doAfterAuthentication(session);
				} else {
					getFacebookLoginStatus(doOnFacebookLogin);
				}
			} else {
				getFacebookLoginStatus(doOnFacebookLogin);
			}
		},
		perms = {scope:'email, friends_photos, user_photos, friends_videos, user_videos, friends_relationships, friends_relationship_details, read_stream'};//user_relationships, user_relationship_details, user_photo_video_tags, friends_photo_video_tags, 
	
	if (location.href.indexOf('perms=more') != -1) {
		perms = {
			scope: 'read_stream, publish_stream, user_events, friends_photos, user_photos, friends_videos, user_videos, email, user_relationships, user_relationship_details, friends_relationships, friends_relationship_details, read_friendlists'
		};//user_photo_video_tags, friends_photo_video_tags, 
	}
	try {
		FacebookProxy.login(onLogin, perms);
	} catch (err) {
		try {
			FB.login(onLogin, perms);
		} catch (err) {
			//swallow the error
		}
	}
	return false;
}

function viewMemories() {
	location.href = "?p=f";
}

function logoutOfFacebook() {
	var onLogout = function (response) {
		$.cookies.set("userPerms", null);
		getFacebookLoginStatus(doOnFacebookLogin);
	};

	try {
		FacebookProxy.logout(onLogout);
	} catch (err) {
		FB.logout(onLogout);
	}
}

function intStringToImages(num, length) {
	var i = 0,
		image_html = '';

	while ((num.length + i) < length) {
		image_html += '<img src="' + TEMPLATE_VIEW_PATH + 'images/kaptur/tickernumbers_0.png">';
		i++;
	}

	for (i = 0; i < num.length; i++) {
		image_html += '<img src="' + TEMPLATE_VIEW_PATH + 'images/kaptur/tickernumbers_' + num[i] + '.png">';
	}

	return image_html;
}

function getCurrentMemoryTotal() {
	var total_memories = RmnDataManager.getTotalMemories().toString();
	
	total_memories = intStringToImages(total_memories, 13);

	$("#ticker").html(total_memories);
}

function getMusic() {
	var json = SlideShow.json,
		music = null,
		song = null,
		song_div = null,
		embed_html = '',
		i = 0;

	if (json) {
		music = JSON.parse(json);
		for(i in music) {
			if (music[i].type == "music") {
				song = music[i].metadata.src;
				return song;
			}
		}
	}
	
	return song;
}

function embedMusicVideo(url, destination, id, width, height) {
	var so = new SWFObject(url, id, width, height, "8", "#000000");
	so.addParam("allowScriptAccess", "always");
	so.addParam("wmode", "transparent");
	so.write(destination);
}

function displayMusic(song) {	
	if (song) {
		song = song.replace("&fs=1", "");
		song = song.replace("&feature=player_embedded", "");
		song = song.replace("&version=3", "");
		song = song.replace("&autoplay=1", "");
		song += '&autoplay=1&enablejsapi=1&playerapiid=kapturmusic';
		embedMusicVideo(song, "slideshowMusic", "KapturMusicPlayer", 200, 25);
		$("#slideshowMusicBar").css({
			'display':'block',
			'bottom':'-25px'
		});
		$("#nightSlideShowFacebookStatuses").addClass("with_music");
	} else {
		removeMusicPlayer();
	}
}

function playMusic() {
	var song = null;

	song = getMusic();
	displayMusic(song);
}

function initializeSlideShow(){
	SlideShow.json = "";
	if (!slideshow_initialized) {
		var width = 540;
		var height = 360;
		SlideShow.slideshow_id = "nightSlideShowCanvas";
		SlideShow.facebook_div_id = "nightSlideShowFacebookStatuses";
		SlideShow.display_height = height;
		SlideShow.display_width = width;
		SlideShow.display_facebook_video_width = 540;
		SlideShow.display_facebook_video_height = 480;
		SlideShow.display_youtube_video_width = 540;
		SlideShow.display_youtube_video_height = 480;
		SlideShow.display_spacing = 0;
		SlideShow.display_padding = 0;
		SlideShow.display_facebook_height = 54;
		SlideShow.autoscroll_speed = 2000;
		SlideShow.autoscroll_video_wait = 9000;
		SlideShow.autoscroll_photo_wait = 3000;
		SlideShow.autoscroll_facebook_wait = 4000;
		SlideShow.cross_fade_speed = 500;
		SlideShow.video_preload_amount = 1500;
		SlideShow.facebook_userpic_width = 50;
		SlideShow.facebook_userpic_height = 50;
		SlideShow.max_post_length = 120;
		SlideShow.video_offset = 0;
		SlideShow.replay_image = TEMPLATE_VIEW_PATH+"/images/replayimage.png";
		SlideShow.flashcover = TEMPLATE_VIEW_PATH+"/images/ieflashcover.png";
		SlideShow.ieflashcover = TEMPLATE_VIEW_PATH+"/images/ieflashcover.png";
		SlideShow.title_div_id = "slideshowTitle";
		SlideShow.initialize("movie");
		slideshow_initialized = true;

		$("#cboxPrevious").after('<div id="cboxPause" style="display:none;"></div>');
		/*$("#nightSlideShowCanvas").bind("click", function() {
			slideshowPause();
			if (SlideShow.autoscroll_playing) {
			$("#cboxPause").css("background-position", "-150px -25px");
			} else {
				$("#cboxPause").css("background-position", "-125px -25px")
			}
		});*/
	}
}

function loadSlideShowData(segment_id) {
	document.getElementById('nightSlideShowStatus').style.display = 'none';
	SlideShow.loadData(SlideShow.json, true);
	if (SlideShow.slideshow_data.length > 0) {
		var width = $("#nightSlideShowCanvas").css("width");
		var height = $("#nightSlideShowCanvas").css("height");
		//redisplay the slideshow to resize to prevent arrows from causing improper
		//resizing
		if (!SlideShow.closedEarly) {
			displaySlideShow(SlideShow.onCloseFunction);
			loadSlideshowNavigation();
		} else {
			SlideShow.closedEarly = false;
		}
	} else {

	}
}

function unloadSlideShowData() {
	/*$("#cboxPause").css("display", "none");
	$("#cboxTitle").css("display", "none");
	$(document).unbind("keyup", setSlideshowKeys);
	$("#cboxPrevious").unbind("click", slideshowPrevious);
	$("#cboxNext").unbind("click", slideshowNext);*/
	removeMusicPlayer();
	SlideShow.unload(true);
}

function displaySlideShow(keep_blank){
	var width = SlideShow.display_width,//$("#nightSlideShowCanvas").css("width"), //540
		height = SlideShow.display_height,//parseInt($("#nightSlideShowCanvas").css("height").replace('px',''), 10), //360
		hasMusic = !!getMusic();
	
	SlideShow.has_music = hasMusic;
	if (hasMusic) {
		height += 25;
	}
	
	var colorbox_args = {
		scrolling:false,
		inline:true,
		href:"#nightSlideShowWrapper",
		innerWidth: width,
		innerHeight: height,
		escKey: true,
		//onCleanup:unloadSlideShowData,
		onOpen:function(){SlideShow.loadNavigationTimeout=setTimeout("loadSlideshowNavigation()",500)},
		onClosed:function () {
			unloadSlideShowData();
			SlideShow.destroyClipboards();
			if ((typeof onClose) == "function") {
				onClose();
			}
			
			if (SlideShow.loadNavigationTimeout)
			{
				clearTimeout(SlideShow.loadNavigationTimeout);
				SlideShow.loadNavigationTimeout = null;
			}
		}
	}
	
		$.colorbox(colorbox_args);
	
		if (hasMusic) {
			playMusic();
		} else {
			$('#slideshowToggleHidden.show').css('bottom', '0px');
		}
}

function toggleSlideshowLoading(show) {
	var slideshowLoadingDiv = $("#nightSlideShowLoading");
	if (show) {
		//display the slideshow loading bar
		slideshowLoadingDiv.show();
	} else {
		//hide the slideshow loading bar
		slideshowLoadingDiv.hide();
	}
}

function setSlideshowKeys(event) {
	if (event.keyCode == 39) {
		slideshowNext();
	} else if (event.keyCode == 37) {
		slideshowPrevious();
	}
}

function loadSlideshowNavigation() {
	$("#slideshowPlayButton").addClass('pause');
	return;
	
	//display the various controlls
	$("#cboxPrevious").css("display", "block");
	$("#cboxNext").css("display","block");
	$("#cboxPause").css();
	$("#cboxPause").css({"display":"block","background-position": "-150px -25px"}).hover(function(){
		$(this).css("background-position", "-150px 0px");
	},
	function() {
		$(this).css("background-position", "-150px -25px");
	});

	//unbind functions to prevent them being doubly called
	//$("#cboxPrevious").unbind("click", slideshowPrevious);
	$("#cboxPrevious").unbind('click'); //prevents the music player for reloading every time
	//$("#cboxNext").unbind("click", slideshowNext);
	$("#cboxNext").unbind("click"); //prevents the music player from reloading every time
	$(document).unbind("keyup", setSlideshowKeys);
	$("#cboxPause").unbind("click", slideshowPause);

	//bind functions to ensure proper functionality
	$("#cboxPrevious").bind("click", slideshowPrevious);
	$("#cboxNext").bind("click", slideshowNext);
	$(document).bind("keyup", setSlideshowKeys);
	$("#cboxPause").bind("click", slideshowPause);

	//$("#cboxTitle").css("display", "block");
	//$("#cboxTitle").html(SlideShow.title?SlideShow.title:'' + " " + SlideShow.date_string?SlideShow.date_string:'');
}

function slideshowPause() {
	if (SlideShow.autoscroll_playing) {
		SlideShow.pauseAutoScroll();
		$("#cboxPause").css("background-position", "-125px 0px").hover(function(){
			$(this).css("background-position", "-125px 0px");
		},
		function() {
			$(this).css("background-position", "-125px -25px");
		});
	} else {
		SlideShow.startAutoScroll();
		$("#cboxPause").css("background-position", "-150px 0px").hover(function(){
			$(this).css("background-position", "-150px 0px");
		},
		function() {
			$(this).css("background-position", "-150px -25px");
		});
	}
}

function slideshowPrevious() {
	SlideShow.previous();
}

function slideshowNext() {
	SlideShow.next();
}

function showSegment(segment_id) {
	//location.href = '?p=n&sid=' + segment_id;
	//$("#slideshowKapturButton").attr('href', 'http://' + location.host + '/?p=n&sid=' + segment_id);
	toggleSlideshowLoading(true);
	initializeSlideShow();
	//displaySlideShow(true);
	SlideShow.segment_id = segment_id;
	SlideShow.url_base = 'http://' + location.host + '/';
	jx.load("?p=slideshowJSON&sid="+segment_id+"&cache=true", function(data){
		if (!data || data == "{}" || data == "[]") data = '[{"type":"segment","metadata":{"title":"","description":"","utcStartSec":"","utcEndSec":"","utcLastModifiedSec":"","timezoneOffset":"","fbUserId":"","rmnOwnerId":"","numContentObjects":0}},{"type":"analytics","metadata":{"guettaMemoriesCount":null}}]';
		SlideShow.json = data;
		
		try { // load music for future weddings page
			if (memoryCreationWizard) {
				var hasMusic = !!getMusic(); // don't load music if music is already loaded
				if (document.getElementById('musicPlayerWrapper')) hasMusic = false;
				SlideShow.has_music = hasMusic;
				if (hasMusic) playMusic();
				else $('#slideshowToggleHidden.show').css('bottom', '0px');
			}
		} catch(err) {}
		
		loadSlideShowData(segment_id);
		togglePlayMusic(1);
	});
	
	// flag slideshow permissions for new memory page
	try {memoryCreationWizard.slideshowActive = 1} catch(err) {}
}

function displayRecentNights(segments) {
var html = '',
	recent_nights = $("#entries"),
	height = 105,
	i = 0,
	name = 'Maria Minano',
	title = 'March for Life',
	user_thumb = TEMPLATE_VIEW_PATH + 'images/kaptur/profilepic.png',
	segment_thumb = TEMPLATE_VIEW_PATH + 'images/placeholders/night_thumb.png',
	limit = segments.length,
	on_click;

	if (limit > 5) limit = 5;
	recent_nights.html('');

	for (i = 0; i < limit; i++) {
		title = decodeURIComponent(segments[i].title);
		name = segments[i].user.firstName + ' ' + segments[i].user.lastName;
		user_thumb = decodeURIComponent(segments[i].user.thumb);
		segment_thumb = segments[i].thumb || (TEMPLATE_VIEW_PATH + 'images/placeholders/night_thumb.png');
		on_click = "showSegment('" + segments[i].id + "')";
		html = '<img src="' + user_thumb + '" style="left:0px; top:' + (2 + height*i) + 'px;">' +
			'<span onclick="' + on_click + '" style="cursor:pointer;"><img src="' + segment_thumb + '" style="position:absolute; width:96px; height:68px; left:55px; top:' + (18 + height*i) + 'px;" border="0"></span>' +
			'<p style="position:absolute; left:55px; top:' + (-13 + height*i) + 'px;">' +
			'<b>' + name + '</b> just created a memory: <b>' + title + '</b></p>' +
			'<p style="position:absolute; left:155px; top:' + (16 + height*i) + 'px;">' +
			'1-24-11<br>Washington D.C.<br>with 4234 friends:</p><span id="recent_' + segments[i].id + '_friends">' +
			/*'<img src="' + thumb + '" style="left:260px; top:' + (30 + height*i) + 'px;">' +
			'<img src="' + thumb + '" style="left:312px; top:' + (30 + height*i) + 'px;">' +
			'<img src="' + thumb + '" style="left:364px; top:' + (30 + height*i) + 'px;">*/'</span>' +
			'<hr size="1" width="500px" style="left:0px; top:' + (88 + height*i) + 'px;">';

		recent_nights.append(html);
	}
}

function loadRecentNights(max_nights) {
	max_nights = max_nights || 5;

	readFromDB('getRecentSegments', [max_nights], function (data) {
		var result,
			i = 0,
			load_user_args = ['firstName', 'lastName', 'emailAddress',
				'mobileNumber', 'appId', 'thumb'];
		if (data) {
			data = JSON.parse(data);
			result = data.result;
			for (i = 0; i < max_nights; i++) {
				result.loaded = 0;
				readFromDB('getRmnUserInfo', [load_user_args, result[i].user_id], (function (segments, i) {
					return function (data) {
						var result,
							media_id_array;

						if (data) {
							result = JSON.parse(data).result;
							segments[i].user = result;
							segments.loaded++;

							//display on the last index
							if (segments.length == segments.loaded) {
								media_id_array = []
								for (i = 0; i < segments.length; i++) {
									media_id_array[i] = segments[i].media_id;
								}
								readFromDB('getMedia', [media_id_array], function (media_info) {
									var i = 0,
										j = 0;
									if (media_info) {
										media_info = JSON.parse(media_info).result;

										for (i = 0; i < media_info.length; i++) {
											for (j = 0; j < segments.length; j++) {
												if (segments[j].media_id == media_info[i].id) {
													segments[j].thumb = decodeURIComponent(media_info[i].thumb);
													break;
												}
											}
										}
										displayRecentNights(segments);
									}
								});
							}
						}
					};
				})(result, i));
			}
		}
	});
}

/**
 * Things to do when facebook has loaded the document is also finished loading
 * when this is called.
 */
function doOnFacebookLoaded() {
	//loadRecentNights();
}

function signInWithEmail() {
	var emailConnect = document.getElementById('emailConnect');
	var emailConnectValue = emailConnect.value;
	if (!emailConnectValue.match(new RegExp('^(?:[A-Z0-9._%+-]|\')+@[A-Z0-9.-]+\\.[A-Z]{2,4}$', 'i'))) {
		showAlert('Invalid email', 'Please enter a valid email address!')
		emailConnect.blur();
	} else {
		var email_addr = d_escape(emailConnectValue);
		readFromDB('getUserIdByEmailAddress', [email_addr], function(data) {
			var rmnid = JSON.parse(data);
			rmnid = rmnid['result'];
			if (rmnid) createWithEmail(emailConnectValue, rmnid);
			else {
				writeToDB('addUserByEmailAddress', [{'emailAddress':email_addr, 'app_id':10}], function(data) {
					rmnid = extractJSONid(data);
					createWithEmail(emailConnectValue, rmnid);
				});
			}
		});
	}
}

function createWithEmail(email, rmnid) {
	$.cookies.set("emailLoginId", JSON.stringify([email,rmnid]));
	location.href = replaceUrlParam('p', 'nw');//'?p=create_weddingpromo';
}

function showAlert(title, msg) {
	var display_style = (title||msg)? 'block':'';
	document.getElementById('customAlertOverlay').style.display = display_style;
	document.getElementById('customAlert').style.display = display_style;
	document.getElementById('customAlertTitle').innerHTML = title?title:'';
	document.getElementById('customAlertText').innerHTML = msg?msg:'';
}

function showMoreAlbums(revert) {
	var display_style = 'none', display_width = '100%';
	var action_html = '<div id="viewFewerAlbums"></div><a href="#" onclick="showMoreAlbums(1); return false">View fewer albums</a>';if (revert) {
		action_html = '<div id="viewMoreAlbums"></div><a href="#" onclick="showMoreAlbums(); return false">View more albums</a>';
		display_style = '';display_width = '';
	}document.getElementById('contentLeftWrapper').style.display = display_style;
	document.getElementById('contentRightWrapper').style.width = display_width;
	document.getElementById('viewMoreAlbumsWrapper').innerHTML = action_html;
}

function proceedToStep2() {
	var error_msg = '';
	var start_month = document.getElementById('createMemoryStartTimeMonth').value;
	var start_day = document.getElementById('createMemoryStartTimeDay').value;
	var start_year = document.getElementById('createMemoryStartTimeYear').value;
	var date_str = start_month+'/'+start_day+'/'+start_year;
	var start_time = Date.parse(date_str);
	if (!start_month || start_month < 1 || start_month > 12) {
		error_msg = 'Please enter a number between 1 and 12 for month!';
	} else if (!start_day || start_day < 1 || start_day > 31) {
		error_msg = 'Please enter a number between 1 and 31 for day!';
	} else if (!start_year || start_year.toString().length != 4) {
		error_msg = 'Please enter a valid year!';
		if (start_year.toString().length != 4) error_msg = 'Please enter a four-digit year!';
	} else if (!start_time) {
		error_msg = 'Please enter a valid wedding date!';
	}if (error_msg) showAlert('Invalid date', error_msg);
	else {
		if (start_time > new Date().getTime()) location.href = replaceUrlParam('p', 'nw')+'&start_date='+date_str;
		else location.href = replaceUrlParam('p', 'nw')+'&start_date='+date_str+'&title=Our Wedding';
		//else location.href = replaceUrlParam('p', 'create_weddingpromo')+'&step=2&start_date='+date_str+'&title=Our Wedding';
	}
}

function formatFeaturedDate(date, timezone_offset) {
	var offset_milliseconds = timezone_offset * 60 * 60 * 1000,
		date_string;
	
	date = new Date((date * 1000) - offset_milliseconds);
	
	date_string = formatDateStr(date);
	return date_string;
}

/**
 * gets the data for the recent kapturs
 */
function getRecentKapturs(callback){
	data = null;
	readFromDB("getFeaturedSegments",[3], function (ajax) {
		var recent_segment_ids = [],
			recent_segment_media = [],
			recent_segment_locations = [],
			recent_segments, recent_segment, media_loaded, locations_loaded,
			doOnMediaAndLocationsLoaded = function () {
				var data, segmentData, recent_segment_media_item, recent_segment_location,
					thumb, title, startDate, endDate, i;
				if (!(media_loaded && locations_loaded)) {
					return;
				}
				
				data = [];
				forEach(recent_segments, function (i, recent_segment) {
					recent_segment = recent_segments[i];
					segmentData = [];

					// get thumbnail
					recent_segment_media_item = recent_segment_media[recent_segment.media_id];
					recent_segment_location = recent_segment_locations[recent_segment.location_id];
					thumb = decodeURIComponent(recent_segment_media_item.thumb);
					if (!thumb) {
						thumb = decodeURIComponent(recent_segment_location.thumb);
					}

					segmentData['thumb'] = thumb;

					// get title
					title = decodeURIComponent(recent_segment.title);
					title = title.substr(0, 30);
					segmentData['title'] = title;

					// get link
					segmentData['url'] = "?p=n&sid=" + recent_segment.id + "&ref=recent";

					// get location name
					segmentData['description'] = decodeURIComponent(recent_segment_locations[recent_segment.location_id].name);

					// get dates
					startDate = formatFeaturedDate(recent_segment.utcStartSec, recent_segment.timezoneOffset);
					endDate =  formatFeaturedDate(recent_segment.utcEndSec, recent_segment.timezoneOffset);

					segmentData['date'] = startDate;
					if (endDate && startDate!=endDate){
						segmentData['date'] += " to " + endDate;
					} 

					data.push(segmentData);
				});
				
				safeCall(callback, [data]);
				
			};
		
		if (ajax) {
			ajax = JSON.parse(ajax);
		}
		if (ajax.status=="ok") {
			recent_segments = ajax.result;
			forEach(recent_segments, function (key, recent_segment) {
				recent_segment_media.push(recent_segment.media_id);
				recent_segment_locations.push(recent_segment.location_id);
				recent_segment_ids.push(recent_segment.id);
			});
	
			readFromDB('getMedia', [recent_segment_media], function (segment_media) {
				var i, media_item;
				if (segment_media) {
					segment_media = JSON.parse(segment_media);
				}
				if (segment_media.status == "ok") {
					segment_media = segment_media.result;
					forEach(segment_media, function (i, media_item) {
						recent_segment_media[media_item.id] = media_item;
					});
				}
				media_loaded = true;
				doOnMediaAndLocationsLoaded();
			});
	
			readFromDB('getLocations', [recent_segment_locations], function (segment_locations) {
				var i, location;
				if (segment_locations) {
					segment_locations = JSON.parse(segment_locations);
				}
				if (segment_locations.status == "ok") {
					segment_locations = segment_locations.result;
					if (segment_locations) {
						forEach(segment_locations, function (i, location) {
							recent_segment_locations[location.id] = location;
						});
					}
				}
				locations_loaded = true;
				doOnMediaAndLocationsLoaded();
			});
		}
	});
}

/**
 * builds the html for a featured kaptur
 */
function buildFeaturedKaptur(wrapper_id, kaptur, layout){
	 var output = '<div class="featuredMetadata"><center>';
	 output += '<div class="featuredTitle">' + kaptur['title'] + '</div>';
	 output += '<div class="featuredDescription">' + kaptur['description'] + '</div>';
	 output += '<div class="featuredDate">' + kaptur['date'] + '</div>';
	 output += '</center></div>';
	
	var featuredImg = '<div class="featuredImageWrapper"><center><img src="' + kaptur['thumb'] + '" style="max-width:168px;height:120px;border:0"/></center></div>';
	if (layout=="left") {
		output = output + featuredImg;
	} else {
		output = featuredImg + output;
	}
	output = '<a href="' + kaptur['url'] + '" target="_blank"><div id="' + wrapper_id + '">' + output + '</div></a>'; 
	return output;
}

/**
 * loads the featured kapturs and inserts them into the featured segments area
 */
function insertFeaturedKapturs () {
	getRecentKapturs(function (kapturs) {
		var kaptur_html = '',
			num_kapturs = arrayLength(kapturs),
			i;
		
		for (i = 0; i < num_kapturs; i++) {
			kaptur_html += buildFeaturedKaptur('featuredWedding' + (i + 1), kapturs[i], (i ? 'right' : 'left'));
		}
		
		$('#featuredWeddings').append(kaptur_html);
	});
}

