blogController = new Object();
blogController.filters = new Object();
blogController.filters.search = "";
blogController.filters.tagged = "";
blogController.searchField = "blog-filter-search";
blogController.tagField = "blog-filter-tag";
blogController.cursor = 0;
blogController.posts = [];
blogController.earlierButton = 'blog-advance-button';
blogController.laterButton = 'blog-retire-button';
blogController.allTags = [];
blogController.tagCount = new Object();
blogController.sortedTags = [];
blogController.tagCursor = 0;
blogController.temporaryOffset = 0;
blogController.tagsLoaded = false;
blogController.commentContainer = "viewBox";


blogController.initializeBlog = function(){
	this.cursor = 0;
	this.posts = [];
	this.totalPosts = [];
	this.getTumbleLog("");	
}

blogController.getTumbleLog = function(query){
	if((query != "") && (query.charAt(0) != "&"))
		query = "&" + query;
//	alert("start=" + blogController.temporaryOffset + query);
	new Ajax.Request("AJAX/fetch_tumblelog.lasso", {parameters: "start=" + blogController.temporaryOffset + query,
		onSuccess: function(data){
			if(data.responseText.indexOf("!DOCTYPE") != -1)
				blogController.getTumbleLog(query);
			eval("responseText = " + data.responseText);
			temporaryPostArray = responseText.posts;
			for(i=0; i< temporaryPostArray.length; i++){
				blogController.posts[blogController.posts.length] = Object.clone(temporaryPostArray[i]);
				if(!blogController.tagsLoaded){
					if("tags" in responseText.posts[i]){
						for(j=0; j < responseText.posts[i].tags.length; j++){
							blogController.allTags.push(responseText.posts[i].tags[j]);
						}
					}
				}
			}
//			alert(blogController.posts.length + " " + responseText['posts-total'] + " " + temporaryPostArray.length);
			if((blogController.temporaryOffset + 50 < responseText['posts-total']) && (temporaryPostArray.length != 0)){
				blogController.temporaryOffset += 50;
//				alert("there are more blog posts left to download");
				blogController.getTumbleLog(query);
			}
			else{  //we've reached an iteration of blog.update where all posts have been retrieved, and can move on
				
				var len = blogController.posts.length;
				for(i=0; i < len; i++){
					if(!((blogController.posts[i].type == "regular") || (blogController.posts[i].type == "photo"))){
						blogController.posts.splice(i, 1);
						len--;
					}
					
				}
				
				blogController.loadPost(0);
				//blogController.updateBodyHeight();
				blogController.cursor = 0;
				blogController.temporaryOffset = 0;
				blogController.totalPosts = blogController.posts.length;
				$('max-post-no').innerHTML = blogController.posts.length;
				blogController.updateArrows();
				if(!blogController.tagsLoaded)
					blogController.finalizeTagList();
			}
		},
		
		onFailure: function(){ alert("Blog failed to load.");}
		
		});
//	blogController.blog.update(query);
}

blogController.loadPost = function(id){
//	for(i=0; i<this.tumblelog.posts.length; i++){
//		if(this.tumblelog.posts[i].id == id){
			//$('blog-post-title').innerHTML = 
		if(this.posts[id].type=="regular"){

			$('blog-post-content').innerHTML = "<div class='text-5'>" +this.posts[id]['regular-title']+"</div><div class='text-6'>" + this.posts[id]['regular-body']+"</div>";
		}
		if(this.posts[id].type == "photo"){

			$('blog-post-content').innerHTML = "<img src='"+this.posts[id]["photo-url-500"]+"' width='420'><div class='text-6'>" + this.posts[id]['photo-caption']+"</div>";

		
		}

			$('blog-index').value = (id + 1);
			new Ajax.Updater(this.commentContainer, "AJAX/fetch_comments.lasso", {parameters: {"Post_ID" : this.posts[id].id}, evalScripts: true});

		
			if(onSmartphone)
				blogScroller = new TouchScroll(document.querySelector(".scroller"), {elastic: true});
			//this.updateBodyHeight();
			//read title into div
			//read content into div
			//refresh touchscroll if necessary
			//asynchronous call to load comments from our server
//		}
//	}
	//blogPosts.posts[]
}

blogController.updateBodyHeight = function(){
		titleHeight = $('blog-post-title').getHeight();			/* just added these */
		var newHeight = 560 - titleHeight;				
		$('blog-post-content').style.height = newHeight+'px';
}

blogController.setFilter = function(param){
	if(param == 'search'){
		this.filters.search = $(this.searchField).value;
	}
	if(param == 'tag'){
		//alert(this.tagField);
		this.filters.tagged = $(this.tagField).value;
	}
	this.updateListing();
}

blogController.updateListing = function(){
	query = "";
	if(this.filters.tagged != "")
		query += "tagged=" + this.filters.tagged;
	if(this.filters.search != ''){
		if(query != '')
			query += "&";
		query += "search=" + this.filters.search;
	}
	//alert(query);

	this.cursor = 0;
	this.posts = [];
	this.totalPosts = [];	
	this.getTumbleLog(query);
}

blogController.earlier = function(){
	if((this.cursor + 1) < this.totalPosts){
		if((this.cursor +1) < this.posts.length){
			this.loadPost(this.cursor + 1);
		}
		else{  // we need to download more posts from tumblr via ajax
		
		}
		this.cursor++;
		this.updateArrows();
	}
}

blogController.later = function(){
	if((this.cursor - 1) >= 0){
		this.loadPost(this.cursor - 1);
		this.cursor--;
		this.updateArrows();
	}
}

blogController.goToPost = function(index){
	if((index <= 0) || (index > this.totalPosts)){
		$('blog-index').value = "";
		return false;
	}
	if(index <= this.posts.length){
		this.cursor = index - 1;
		this.loadPost(this.cursor);
	}
	else{
		alert("we'll need to load this post via ajax");
	}	
	//two cases - either the page is already cached in the tumblelog posts array, or it needs to be downloaded.
	//in former case, easy enough
	//in latter case, need to download the actual blog post using the api. next and previous buttons work as usual, recursively calling gotopost
	this.updateArrows();
	return false;
}

blogController.updateArrows = function(){
	if((this.cursor == 0) && (this.totalPosts == 1)){
		$(this.earlierButton).writeAttribute({"class" : "slide_navigator_disabled"});
		$(this.laterButton).writeAttribute({"class" : "slide_navigator_disabled"});	
		return;	
	}
	if(this.cursor == 0){	//at most recent [index 0]
		$(this.earlierButton).writeAttribute({"class" : "slide_navigator_enabled"});
		$(this.laterButton).writeAttribute({"class" : "slide_navigator_disabled"});
	}
	else if(this.cursor == (this.posts.length - 1)){	// at earliest post [index n]
		$(this.earlierButton).writeAttribute({"class" : "slide_navigator_disabled"});
		$(this.laterButton).writeAttribute({"class" : "slide_navigator_enabled"});
	}
	else{	//anywhere else
		$(this.laterButton).writeAttribute({"class" : "slide_navigator_enabled"});
		$(this.earlierButton).writeAttribute({"class" : "slide_navigator_enabled"});
	}
}

blogController.finalizeTagList = function(){
	for(i=0; i<this.allTags.length; i++){
		this.tagCount[this.allTags[i]] = (this.tagCount[this.allTags[i]] ? this.tagCount[this.allTags[i]] + 1 : 1);
	}
	for(var n in this.tagCount){
		this.sortedTags[this.sortedTags.length] = new Object();
		this.sortedTags[this.sortedTags.length - 1][n] = this.tagCount[n];
	}
	this.sortedTags.sort(function(a,b){if((Object.values(a))[0] > (Object.values(b))[0]) return -1; else return 1;});
	$('blog-filter-tag').update().insert("<option value=''>All categories</option>");
	for(i=0; (i<10) && (i<this.sortedTags.length); i++)
		$('blog-filter-tag').insert("<option value=\"" + Object.keys(this.sortedTags[i])[0] + "\">" + Object.keys(this.sortedTags[i])[0] + "</option>");
	$('blog-filter-tag').down(0).writeAttribute({"selected" : "selected"});
	this.tagsLoaded = true;

}

blogController.postBlogComment = function(){
	if($('blog_comment_email').value == ""){
		$('blog_comment_email').focus();
		return false;
	}
	if($('blog_comment_name').value == "")
		$('blog_comment_name').value = 'Anonymous';
	commentQuery = $('blog_comment').serialize();
	ID = this.posts[this.cursor].id;
	commentQuery += "&Post_ID=" + ID;
	this.commentPoster.update(commentQuery);

	//validation code here

	return false;
}

blogController.commentPoster = new ajaxObject("AJAX/add_blog_comment.lasso");
blogController.commentPoster.callback = function(responseText, responseStatus){
	eval(responseText);
}
