var dove;
if (!dove) {
	dove = {};
}
if (!dove.social) {
	dove.social = {};
}
dove.social.doveask = {
	element: ".doveAsk",
	pageId: "21435141328",
	showComments: true,
	postID: "",
	accessToken: "",
	postFound: false,
	postData: {},
	masterPost: {},
	comments: {},
	htmls: {
		post: '<h3 class=\"box-heading\"><span></span>DOVE<sup>&reg;</sup> ASKS</h3><h2>{~POST~}</h2>',
		comment: '<li class=\"commentID-{~ID~}{~CLASS~}\"><div class=\"figure\"><a title=\"{~USERNAME~}\" href=\"{~URL~}\"><img src=\"{~USERIMAGEURL~}\" alt=\"{~USERNAME~}\"\/></a></div><div class=\"comments\"><strong>{~USERNAME~}</strong>&nbsp;{~MESSAGE~}</div></li>',
		moreResults: '<li class=\"moreResults\"><a href=\"#\" class=\"arrow-link\" title=\"See More\">See More</a></li>',
		commentFB : "<li><a href=\"{{HREF}}\" target=\"_blank\" class=\"arrow-link commentFB\" title = \"Comment on Facebook\">Comment on Facebook</a></li>",
		commentContainer: "<ul>"
	},
	checkUserStatus: function () {
		var app = this;
		FB.getLoginStatus(function (response) {

		    if (response.authResponse !== "" && response.authResponse !== null) {
				document.getElementById('fbLoginDiv').style.display = "none";
				app.accessToken = response.authResponse.accessToken;
				app.getParticularComments();
				dove.log("logged in");
				
			} else {
				
				dove.log("not logged in");
				document.getElementById('fbLoginDiv').style.display = "block";
				FB.Event.subscribe('auth.login', function (response) {
				    if (response.authResponse) {
						document.getElementById('fbLoginDiv').style.display = "none";
						app.accessToken = response.authResponse.accessToken;
						app.getParticularComments();
					} else {
						document.getElementById('fbLoginDiv').style.display = "block";
					}
				});
			}
		});
	},
	getParticularPost: function () {
		var app = this;
		if (app.accessToken === "") {
			app.checkUserStatus();
			return false;
		}
		app.calls.getPosts();
	},
	getParticularComments: function () {
		var app = this;
		if (app.accessToken === "") {
			app.checkUserStatus();
			return false;
		}
		app.calls.getComments();
	},
	searchParticularPost: function () {
		var app = this;
		$(app.postData.data).each(function (index, value) {
			if (value.id === app.postID) {
				app.masterPost = value;
				app.postData = null;
				app.postFound = true;
				app.DOM.populatePost();
				return true;
			}
		});
		return false;
	},
	calls: {
		getPosts: function () {
			var app = dove.social.doveask;
			$.ajax({
				url: "https://graph.facebook.com/" + app.pageId + "/feed?access_token=" + app.accessToken + "&callback=?",
				dataType: 'jsonp',
				success: function (json) {
					app.postData = json;
					if (app.searchParticularPost()) {
						app.postFound = true;
					}
				}
			});
		},
		getComments: function () {
			app = dove.social.doveask;
			$.ajax({
				url: "https://graph.facebook.com/" + app.pageId + "_" + app.postID + "/comments?access_token=" + app.accessToken + "&limit=1000&offset=0&callback=?",
				dataType: 'jsonp',
				success: function (json) {
					app.comments = json; //callback.call(this,json);
					
					var dummyData = [], data = app.comments.data, length = data.length ;
					
					for(i = 0; i <= length; i++)
						{
							dummyData[i] = data[(length - 1) - i];
						}
						
					app.comments.data = dummyData;
					setTimeout(function(){
					
						app.DOM.populateComments({
							count: 2
						});
						
					}, 200)
					
				}
			});
		}
	},
	DOM: {
		createBasic: function () {},
		populatePost: function () {
			var app = dove.social.doveask,
				post = "",
				data = app.masterPost;
			post = app.htmls.post.replace(/\{~POST~\}/g, data.message);
			$(app.element).append(post);
			app.calls.getComments();
		},
		populateComments: function (params) {
			params = params || {};
			var commentsCont = "",
				app = dove.social.doveask;
			commentsCont = app.DOM.createComments({
				count: 2
			});
			commentsCont.appendTo(app.element);
			app.DOM.makeCommentsPopupData();
			$(".moreResults .arrow-link").colorbox({
				width: "390",
				height: "370",
				inline: true,
				href: ".doveAskCommentsCont",
				scrolling: false
			}).click(function(){
				ntptEventTag("ev=doveAskSeeMoreClick&link=" +document.location.href);	
			});
		},
		makeCommentsPopupData: function (params) {
			params = params || {};
			var commentsCont = "",
				app = dove.social.doveask;
			commentsCont = app.DOM.createComments();
			questionCont = $("#doveAskQuestion", app.element).html();
			$(".doveAskComments ul", app.element).replaceWith(commentsCont);
			$(".doveAskComments", app.element).prepend(questionCont);
		},
		createComments: function (params) {
			params = params || {};
			var app = dove.social.doveask,
				comments = "",
				commentsCont = $(app.htmls.commentContainer),
				length = 0,
				totalComment = app.comments.data.length,
				data = app.comments.data,
				i = 0;
			if (typeof params.count !== "undefined") {
				if (params.count < totalComment) {
					length = params.count;
				} else {
					length = (totalComment - 1);
				}
			} else {
				length = (totalComment - 1);
			}
			
			for (i; i <= (length - 1); i++) {
				var comment;
				var object = data[i];
				
				
				
				comment = app.htmls.comment
				.replace(/\{~ID~\}/g, object.from.id)
				.replace(/\{~CLASS~\}/g, "_" + i)
				.replace(/\{~USERNAME~\}/g, object.from.name)
				.replace(/\{~URL~\}/g, "#doveask")
				.replace(/\{~USERIMAGEURL~\}/, "https://graph.facebook.com/" + object.from.id + "/picture")
				.replace(/\{~MESSAGE~\}/, object.message);
				comments += comment;
			}
			if (totalComment > length) {
				comments += app.htmls.moreResults;
			}
			
			comments += app.htmls.commentFB.replace(/\{\{HREF\}\}/, "https://www.facebook.com/dove/posts/" + app.postID);
			$(".commentFB").click(function(){
				ntptEventTag("ev=doveAskCommentOnFacebookClick&link=" +document.location.href);	
			});
			commentsCont.html(comments);
			return commentsCont;
		}
	},
	init: function () {
		var app = this;
		this.element = $(app.element);
		app.postID = app.element.attr("rel");
		if (app.postID === "" && DoveAskFBId === "") {
			return false;
		}
		
		var curLoc = window.location;
		FB.init({
			appId: DoveAskFBId,
			cookie: true,
			status: true,
			xfbml: true,
			channelUrl: curLoc.protocol + "//" + curLoc.hostname + "/channel.html",
			oauth: true


		});
		app.checkUserStatus();		
	}
};
