google.load("gdata", "1");

var formatPage = {
	browserType: "IE",
	windowHeight: 0,
	windowWidth: 0,
	contentEl: Object,
	contentElHeight: 0,
	pictureContainerEl: Object,
	pictureContainerElHeight: 0,
	pictureContainerElWidth: 700,
	init: function() {
		this.contentEl = document.getElementById("contentWrapper");
		this.pictureContainerEl = document.getElementById("pictureContainer");
		this.disclaimer = document.getElementById("disclaimer");
		this.contentElHeight =  580;
		//this.getBrowserType();
		//this.getWindowDimensions();
		//this.placeContentEl();
	},
	getBrowserType: function() {
		if (!document.all) this.browserType = "notIE";
	},
	getWindowDimensions: function() {
		if (this.browserType == "IE") {
			this.windowHeight = document.documentElement.clientHeight;		
			this.windowWidth = document.documentElement.clientWidth;		
		} else {
			this.windowHeight = window.innerHeight;
			this.windowWidth = window.innerWidth;
		}		
	},
	placeContentEl: function() {
		var delta = (this.windowHeight - this.contentElHeight) / 2;
		var deltaW = (this.windowWidth - this.pictureContainerElWidth) / 2;
		/*console.log(deltaW);*/
		/*console.log(delta);*/
		this.contentEl.style.paddingTop = delta + "px";
		this.contentEl.style.display = "block";
		this.pictureContainerEl.style.left = deltaW + "px";
		this.disclaimer.style.display = "block";
	}
}

var movePage = {
	currentSelection: "homepage",
	contentWidth: 0,
	containerWidth: 0,
	contentEl: Object,
	containerEl: Object,
	oneliners: Object,
	contentHash: Array,
	onelinersArray: Array,
	init: function(currentSelection, containerEl, contentEl) {
		//console.log(currentSelection);
		if (currentSelection) this.currentSelection = document.getElementById(currentSelection);
		this.onelinersArray = ["massage","pollen","chlamydia","parents","famous","rubber","game","animals"];
		this.oneliners = document.getElementById("oneliners");
		this.contentEl = document.getElementById(contentEl);
		this.contentWidth = this.contentEl.clientWidth;
		this.containerEl = document.getElementById(containerEl);
		this.requestData(currentSelection);
		this.buildContentHash();
	},
	changeOneliner: function() {
		var currentClassname = this.oneliners.className.split(/\s/)[1];
		var randomNumber = Math.floor(Math.random()*(this.onelinersArray.length - 1));
		var newClassname = this.onelinersArray[randomNumber];
		if (currentClassname == newClassname) {
			this.changeOneliner();
			return;
		} else {
			this.oneliners.className = "oneliners " + newClassname;
		}
		
	},
	buildContentHash: function() {
		var contentItems = this.containerEl.getElementsByTagName("DIV");
		var loc = 0;
		for (var i = 0;i<contentItems.length;i++) {
			if (contentItems[i].className == "content") {
				this.contentHash[contentItems[i].id] = document.getElementById(contentItems[i].id);
				
			}
        }
	},
	revertVideoContainer: function() {
		var playerContainer = document.getElementById("playerContainer");
		var playerContainerWrapper = document.getElementById("playerContainerWrapper");
		
		if (playerContainer.tagName.toLowerCase() == "object" ) {
			var htmlString = '<div id="playerContainer">';
			htmlString += '<a href="#" onclick="loadVideo("http://www.youtube.com/v/kMN1EBTl3WA&f=user_uploads&app=youtube_gdata", true);return false;">';
			htmlString += '<img src="/wp-content/themes/hh/images/youtube_thumb.gif"/>';
			htmlString += '</a>';
			htmlString += '</div>';
			playerContainerWrapper.innerHTML = htmlString;
		}
	},
	to: function(target,title,animation) {
		if (this.currentSelection.id == "videos") this.revertVideoContainer();
		if (target == "homepage") this.changeOneliner();
		if (this.contentHash[target] == this.currentSelection) return;
		var nextItemPos = (this.currentSelection.style.left.replace("px","") * 1) + this.contentWidth;
		this.contentHash[target].style.left = nextItemPos + "px";
		this.contentHash[target].style.display = "block";
		
		var final_x = nextItemPos * -1;
		if (animation == false) {
			this.currentSelection.style.display = "none";
			document.getElementById("contentInner").style.left = final_x + "px";
		} else {
			animate("contentInner", final_x, 0, 25,this.currentSelection.id);			
		}
		movePage.changeBody(target);
		document.title = title;
		this.requestData(target);
		this.currentSelection = this.contentHash[target];
		
	},
	changeBody: function(target) {
		if (target.match("subpage")) {
			var targetSplit = target.split("_");
			target = targetSplit[1];
		}
		if (target.match("hasChild")) {
			var targetSplit = target.split("_");
			target = targetSplit[0];
		}
		document.body.className = target;
	},
	requestData: function(target) {
		var dt = new Date();
		var dt_day = dt.getDate();
		if (dt_day < 10) dt_day = "0" + dt_day;
		var dt_month = dt.getMonth() + 1;
		if (dt_month < 10 ) dt_month = "0" + dt_month;
		var dt_year = dt.getFullYear();
		
		
		var edt = new Date();
		var edt_month = edt.getMonth() + 6;
		var edt_year = edt.getFullYear();
		if (edt_month >= 13) {
			edt_year += 1;
			edt_month = edt_month - 12;
		}
		if (edt_month < 10 ) edt_month = "0" + edt_month;
		
		
		var startDate = dt_year + "-"+dt_month+"-"+dt_day+"T00:00:00.000-00:00";
		var endDate = edt_year + "-"+edt_month+"-"+dt_day+"T00:00:00.000-23:59";
		if (target == "calendar") googleRequester.getCalFeed("http://www.google.com/calendar/feeds/funnyhelenhong@gmail.com/public/full", googleRequester.renderCalendar,startDate,endDate);
		if (target == "photos") googleRequester.getPicasaFeed("http://picasaweb.google.com/data/feed/api/user/FunnyHelenHong/albumid/5320579414528663105", googleRequester.renderPicasa);
		if (target == "videos") googleRequester.getYouTubeFeed();

	}
}

var googleRequester = {
	myService: Object,
	feedUrl: "http://www.google.com/calendar/feeds/greenfieldctv@gmail.com/public/full",
	picasaUrl: "http://picasaweb.google.com/data/feed/api/user/FunnyHelenHong/",
	youTubeUrl: "http://gdata.youtube.com/feeds/api/users/comedianhelenhong/uploads",
	callback: Object,
	newScript: Object,
	startMin: '2008-11-01T00:00:00.000-08:00',
	startMax: '2008-11-30T00:00:00.000-08:00',
	maxResults: 175,
	calendarContainer: Object,
	getCalFeed: function(feedUrl,callback,startMin,startMax){
		this.feedUrl = feedUrl;
		this.callback = callback;
		this.myService = new google.gdata.calendar.CalendarService('exampleCo-exampleApp-1');
		// Create a CalendarEventQuery, and specify that this query is
		// applied toward the "private/full" feed
		var query = new google.gdata.calendar.CalendarEventQuery(feedUrl);
		//CalendarSortOrder.ascending
		//P:Google.GData.Calendar.EventQuery.SortOrder
		// Create and set the minimum and maximum start time for the date query YYYY-MM-DD
		startMin = google.gdata.DateTime.fromIso8601(startMin);
		startMax = google.gdata.DateTime.fromIso8601(startMax);
		query.setMinimumStartTime(startMin);
		query.setMaximumStartTime(startMax);
		query.setMaxResults(this.maxResults);
		query.setOrderBy("starttime");
		query.setSortOrder("ascending");
		// Error handler to be invoked when getEventsFeed() produces an error
		var handleError = function(error){
			/*console.log(error);*/
		}
		this.myService.getEventsFeed(query, callback, handleError);
	},
	
	getPicasaFeed: function(picasaUrl,callback){
		
		this.picasaUrl = picasaUrl;
		this.callback = callback;
		this.myService = new google.gdata.client.GoogleService("bing-bong-bing");
		// Create a CalendarEventQuery, and specify that this query is
		// applied toward the "private/full" feed
		var query = new google.gdata.client.Query(picasaUrl);
		query.setParam("max-results",this.maxResults);
		query.setParam("imgmax",512);
		// Error handler to be invoked when getEventsFeed() produces an error
		var handleError = function(error){
			/*console.log(error);*/
		}
		//   getAttributesFeed(<string|google.gdata.gbase.AttributesQuery> uriOrQuery, <function(Object)> continuation, <function(Error)|undefined> opt_errorHandler)
           //Retrieves the feed of public attributes. 
		this.myService.getFeed(query, callback, handleError);
	},
	getYouTubeFeed: function(){
		var headEl = document.getElementsByTagName("head")[0];  
		this.newScript = document.createElement('script');  
		this.newScript.type = 'text/javascript';  
		this.newScript.onload=this.scriptLoaded;  
		this.newScript.src = 'http://gdata.youtube.com/feeds/users/comedianhelenhong/uploads?alt=json-in-script&format=5&callback=showMyVideos';  
		headEl.appendChild(this.newScript);  
	},
	scriptLoaded: function() {  
		//console.log(this.newScript);
		var headEl = document.getElementsByTagName("head")[0];  
		headEl.removeChild(googleRequester.newScript);
	  	//el.removeNode(false);  
	}, 
	displayFeed: function(jsonObj) {
		/*console.log(jsonObj);*/	
	},
	renderCalendar: function(jsonObj){
		var months = ["Jan.", "Feb.", "March", "April", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."];
		var days = ["Sun.", "Mon.", "Tues.", "Wed.", "Thurs.", "Fri.", "Sat."];
		var entries = jsonObj.feed.getEntries();
		var htmlString = "<ul class='arrowlist'>";
		for (var j=0; j<entries.length; j++) {
				var event = entries[j];
				var eventDesc = event.getContent().getText();
				var eventTitle = event.getTitle().getText();
				var eventLoc = event.gd$where[0].valueString;
				var eventStartTime = event.gd$when[0].startTime;
				var eventStartTimeDay = eventStartTime.split("T");
				eventStartTimeDay = eventStartTimeDay[0].split("-");
				eventStartYear = eventStartTimeDay[0];
				eventStartDay = dayOfWeek(eventStartTimeDay[1] - 1, eventStartTimeDay[0], eventStartTimeDay[2]);
				eventStartMonth = months[eventStartTimeDay[1] - 1];
				
				htmlString += "<li><strong>";
				htmlString += eventTitle;
				htmlString += "</strong><br/>";
				htmlString +=  eventLoc + "<br />";
				
				if (eventStartTime.match("T")) {
					var eventStartHour = eventStartTime.split("T")[1].split(":")[0];
					var eventStartMinute = eventStartTime.split("T")[1].split(":")[1];
					var eventStartHourMinute = returnDate((eventStartHour * 1), (eventStartMinute * 1), 0);
					htmlString += days[eventStartDay] + " " + eventStartHourMinute + " - " + eventStartMonth + " " + (eventStartTimeDay[2] * 1) + "<br />";
				} else {
					htmlString += days[eventStartDay] +  " " + eventStartMonth + (eventStartTimeDay[2] * 1) + "<br />";
				}		

				
				htmlString += eventDesc;
				
				htmlString += "</li>";
				//if (j > 4) break;
		};
		htmlString += "</ul>";
		document.getElementById("calendarContainer").innerHTML = htmlString;
	},
	renderYouTube: function(jsonObj){
	
		var entries = jsonObj.feed.entry || [];
		var htmlString = "";
		for (var j=0; j<entries.length; j++) {
				var entry = entries[j];
				var title = entry.title.$t.substr(0, 12);
    			var thumbnailUrl = entries[j].media$group.media$thumbnail[0].url;
    			var playerUrl = entries[j].media$group.media$content[0].url;

				htmlString += "<div class='item'>";
				htmlString += "<a href='#' onclick='loadVideo(\"" + playerUrl + "\", true);return false;'>";
				htmlString += "<img src='"+thumbnailUrl+"' width='87' height='65' alt='' onclick='loadVideo(\"" + playerUrl + "\", true)'/><br />";
				htmlString += "</a>";
				htmlString += "<a href='#' onclick='loadVideo(\"" + playerUrl + "\", true);return false;'>";
				htmlString += title + "...";
				htmlString += "</a>";
				htmlString += "</div>";
				if (j > 7) break;
		};
		document.getElementById("youTubeContainer").innerHTML = htmlString;
	},
	renderPicasa: function(jsonObj){
	
		var entries = jsonObj.feed.entry || [];
		var htmlString = "";
		for (var j=0; j<entries.length; j++) {
				var entry = entries[j];
				var title = entry.summary.$t;
				var fullTitle = entry.summary.$t;
				if (title == null) title = "";
				if (title && title.length > 14) title = title.substr(0, 12);
    			var thumbnailUrl = entries[j].media$group.media$thumbnail[0].url;
				var thumbnailWidth = entries[j].media$group.media$thumbnail[0].width;
				var thumbnailHeight = entries[j].media$group.media$thumbnail[0].height;
    			var fullSizeUrl = entries[j].media$group.media$content[0].url;

				htmlString += "<div class='item'>";
				htmlString += "<a href='#' class='thumbnailWrapper' onclick='showImage(\"" + fullSizeUrl + "\",\""+escape(fullTitle)+"\");return false;'>";
				htmlString += "<img src='"+thumbnailUrl+"' width='"+thumbnailWidth+"' height='"+thumbnailHeight+"' alt='"+escape(fullTitle)+"'/><br />";
				htmlString += "</a>";
				htmlString += "<a href='#' onclick='showImage(\"" + fullSizeUrl + "\",\""+escape(fullTitle)+"\");return false;'>";
				htmlString += title + "...";
				htmlString += "</a>";
				htmlString += "</div>";
				if (j > 20) break;
		};
		document.getElementById("picasaContainer").innerHTML = htmlString;
		document.getElementById("pictureGalleryContainer").innerHTML = htmlString; 
	}
}

function animate(elementID,final_x,final_y,interval,oldEl) {
		
		if ( !document.getElementById(elementID) ) return false;
		var elem = document.getElementById(elementID);
	    if ( elem.movement ) { 
			clearTimeout(elem.movement);
		}
	    
		if ( !elem.style.position ) { 
		
			elem.style.position = "absolute";
		
		}
		
		//check for style
		if ( !elem.style.left ) { 
			
		//if style doesnt exist, set it to 0px	
			elem.style.left = "0px";
		}	
		
		if ( !elem.style.top ) { 
		//	elem.style.top = "0px";
		}				
		
		//get the position without the 'px' suffix
		var xpos = parseInt(elem.style.left);
		var ypos = parseInt(elem.style.top);
		
		//end function if the object is at the destination
		if (xpos == final_x) {
			document.getElementById(oldEl).style.display = "none";
			return true;
		}
		
		//ease functionality
    	if (xpos < final_x) {
			var dist = Math.ceil((final_x - xpos)/10);
			xpos = xpos + dist;
		 }		
		 
    	if (xpos > final_x) {
			var dist = Math.ceil((xpos - final_x)/10);
			xpos = xpos - dist;
		 }
		 
    	if (ypos < final_y) {
			var dist = Math.ceil((final_y - ypos)/10);
			ypos = ypos + dist;
		 }
		 
    	if (ypos > final_y) {
			var dist = Math.ceil((ypos - final_y)/10);
			ypos = ypos - dist;
		 }
		 
		 elem.style.left = xpos + "px";
		 //elem.style.top = ypos + "px";
				 
		 var repeat = "animate('"+elementID+"',"+final_x+","+final_y+","+interval+",'"+oldEl+"')";
		 elem.movement = setTimeout(repeat,interval);		 				 			 
}

function loadVideo(playerUrl, autoplay) {
  swfobject.embedSWF(
      playerUrl + '&rel=1&border=0&fs=1&autoplay=' + 
      (autoplay?1:0), 'playerContainer', '435', '250', '9.0.0', false, 
      false, {allowfullscreen: 'true'});
}

function showImage(url,caption) {
	var pictureContainer = document.getElementById("pictureContainer");
	var galleryImage = document.getElementById("galleryImage");
	var galleryImageCaption = document.getElementById("pictureCaption");
	galleryImageCaption.innerHTML = unescape(caption);
	galleryImage.src = url;
	galleryImage.style.display = "block";
	pictureContainer.style.display = "block";
}

function dayOfWeek(month,year,dayOfMonth) {
	var dd = new Date(year, month, dayOfMonth);
	return dd.getDay();
}

function returnDate(hour,minute,second) {
	   var temp = "" + ((hour > 12) ? hour - 12 : hour)
	   if (hour == 0) temp = "12";
	   if (hour < 12 && hour > 0) temp = hour.toString().replace("0","");
	   temp += ((minute < 10) ? ":0" : ":") + minute;
	   //temp += ":" + minute;
	 //  if (second) {
	  // 	temp += ((second < 10 && second.length < 2) ? ":0" : ":") + second;	   	
	   //}
	   temp += (hour >= 12) ? " PM" : " AM";
	   return temp;
}