(function($){

var WP = {
	open: function(blogUrl){
		var superPublicMethods  = {
			posts: function(){
				var limit = 5;
				var page = 0;
				var publicMethods = {
					all: function(callback){
						var url = blogUrl + '/api/get_recent_posts/'
						url += '?count=' + limit + '&page=' + page + '&callback=?'; 
						$.getJSON(url, function(data) {
							var newPosts = data.posts;
							for(var i = 0; i < newPosts.length; i++){
								var newPost = newPosts[i];
								newPost.createComment = function(data, callback){
									data.postId = newPost.id;
									superPublicMethods.comments().create(data, callback);
								}
							}
							callback(newPosts);
						});
					}, 
					findBySlug: function(slug, callback){
						var url = blogUrl + '/api/get_post/'
						url += '?slug=' + slug + '&callback=?'; 
						$.getJSON(url, function(data) {
							 callback(data.post);
						});								
					},
					limit: function(_limit){
						limit = _limit;
						return publicMethods;
					},
					page: function(_page){
						page = _page;
						return publicMethods;
					}
				};
				return publicMethods;
			},
			pages: function(){
				var publicMethods = {
					findBySlug: function(slug, callback){
						var url = blogUrl + '/api/get_page/';
						url += '?slug=' + slug + '&callback=?'; 
						$.getJSON(url, function(data) {
							 callback(data.page);
						});								
					}
				};
				return publicMethods;
			},
			categories: function(){
				var publicMethods = {
					all: function(callback){
						var url = blogUrl + '/api/get_category_index/';
						url += '?callback=?'; 
						$.getJSON(url, function(data) {
							 callback(data.categories);
						});								
					}
				};
				return publicMethods;						
			},
			categories_posts: function(catData){
				var publicMethods = {
					all: function(callback){
						
						var url = blogUrl + '/api/get_category_posts/';
						
						url += '?slug='+catData.category;
						
						if(catData.count)
							url += '&count='+catData.count;
							
						if(catData.postType)
							url += '&post_type='+catData.postType;
							
						url += '&callback=?'; 
						$.getJSON(url, function(data) {
							var newPosts = data.posts;
							for(var i = 0; i < newPosts.length; i++){
								var newPost = newPosts[i];
								newPost.createComment = function(data, callback){
									data.postId = newPost.id;
									superPublicMethods.comments().create(data, callback);
								}
							}
							callback(newPosts);
						});								
					}
				};
				return publicMethods;						
			},
			tags: function(){
				var publicMethods = {
					all: function(callback){
						var url = blogUrl + '/api/get_tag_index/';
						url += '?callback=?'; 
						$.getJSON(url, function(data) {
							 callback(data.tags);
						});								
					}
				};
				return publicMethods;						
			},
			comments: function(){
				var publicMethods = {
					create: function(comment, callback){
						var url = blogUrl + '/api/submit_comment/';
						url += '?post_id=' + comment.postId + '&name=' + comment.name + '&email=' + comment.email + '&content=' + comment.content + '&callback=?'; 
						$.getJSON(url, function(data) {
							 callback(data);
						});								
					}
				};
				return publicMethods;
			}
		};
		return superPublicMethods;
	}
}

$.getCategory = function(data){
	var blog = WP.open(data.url),
		category = data.category,
		// data.count to change the post you want to show.
		count = (data.count) ? data.count : -1;
	
	blog.categories_posts({ category: category, count: count }).all(function(posts){
		// put initial data to the main element
		$('#'+data.ID).data('ite',0);
		
		// function for prev query
		$('#'+data.prevID).click(function(e){
			
			e.preventDefault();
			
			if(posts.length > 1){
			
			var ite = $('#'+data.ID).data('ite'),
				query = (ite == 0) ? (posts.length - 1) : (ite - 1);
				
				$('#'+data.ID).fadeOut(600, function(){
					$(this).empty().append(posts[query].title).fadeIn(600);
					$(this).append(posts[query].content).fadeIn(600);
					$('#'+data.ID).data('ite', query);
				});
				
			} return;
		});
		
		// function for next query
		$('#'+data.nextID).click(function(e){
			e.preventDefault();
			
			if(posts.length > 1){
			
			var ite = $('#'+data.ID).data('ite'),
				query = (ite == posts.length - 1 ) ? 0 : (ite + 1);
				
				$('#'+data.ID).fadeOut(600, function(){
					$(this).empty().append(posts[query].title).fadeIn(600);
					$(this).append(posts[query].content).fadeIn(600);
					$('#'+data.ID).data('ite', query);
				});
				
			} return;
		});
		
		
		// put initial content to the page
		$('#'+data.ID).append(posts[0].title);
		$('#'+data.ID).append(posts[0].content);
			
	});
}

})(jQuery);

/** 
	Initialize code
	@param url 		=> url of your wordpress site
	@param category => category you want to query
	@param ID		=> id of the content wrapper, the place that you data to be insert
	@param nextID	=> id of next button
	@param prevID	=> id of prev button
*/
jQuery(document).ready(function($){

	/** EXAMPLE 1*/
	$.getCategory({

		url: 'http://sc.mobilecubix.com/',
	category :'Testimonials',
	ID: 'testimonialblock',
	nextID: 'prev1',
	prevID: 'next1'

	});

});

