﻿function stripTags(str) {
	return str.replace(/<\/?[^>]+>/gi, '');
};
function escapeHTML(str){
	var div = document.createElement("div");
	var text = document.createTextNode(str);
	div.appendChild(text);
	return div.innerHTML;
};
var Comments = {
	init: function(){
		$("li.comment a").click(Comments.toggle);
		$("input.comment-submit").click(Comments.submit);
		
		$("div.comment ol").each(function(){
			Comments.list = new CommentList($(this));
		});
	},
	toggle: function(e){
		e.preventDefault();
		var parent = $(e.target).parents("div.module");
		var el = $("div.comment", parent);
		el.toggle();
		sIFR.customReplace($("h2", el));
	},
	submit: function(e){
		e.preventDefault();
		Comments.parent = $(e.target).parents("div.module");
        Comments.parentId = $("input.comment-parentId", Comments.parent).val();
		var text = escapeHTML(stripTags($("textarea.comment-text", Comments.parent).val()));
		Comments.data = {
			comment: text,
			name: Connect.name,
			email: Connect.userid,
			url:  $("input.comment-parentUrl", Comments.parent).val(),
			title:  $("input.comment-parentTitle", Comments.parent).val(),
			website: "",
			parentId: Comments.parentId
		};
		if(Comments.data.comment){
			$("input, textarea", Comments.parent).attr("disabled", true);
			$.post("/ajax/commentadd.aspx", Comments.data, Comments.complete);
		}
	},
	complete: function(data){
		$("div.comments-holder", Comments.parent).load("/ajax/commentadd/ListComments.aspx", "parentId=" + Comments.parentId + "&x=" + (new Date()).getTime(), function(){
			var count = $("div.comments-holder ol li", Comments.parent).length;
			$("li.comment a", Comments.parent).text(count);
			$("div.comment ol", Comments.parent).each(function(){
				Comments.list = new CommentList($(this));
			});
			
			Comments.list.goToPage(1, true);
			
			Comments.data.id = $(Comments.list.comments[0]).attr("id");
			
			Connect.parseElements();
			Connect.publish(Comments.data);
		});
	}
};
var CommentList = function(el){
	this.el = el;
	this.el.addClass(this.css.script);
	this.comments = $("li", this.el);
	this.pages = Math.ceil(this.comments.length / this.perPage);
	this.paging = $("<ul class=\"" + this.css.paging + "\" />").insertAfter(this.el);
	for(var i=0;i<this.pages;i++){
		var page = i + 1;
		this.paging.append(
			$("<li />").append(
				$("<a href=\"" + this.pageLinkPrefix + page + "\">" + page + "</a>").click($.fnbind(this.click, this))
			)
		);
	}
	var text = $("<p class=\"" + this.css.pagingTitle + "\">Sida:</p>").insertBefore(this.paging);
	if(this.pages < 2){
		this.paging.hide();
		text.hide();
	}
	this.paging = $("li", this.paging);
	this.goToPage(1, false);
	this.parent = this.el.parents("div.comment");
};
CommentList.prototype = {
	css: {
		script: "comments-js-active",
		active: "active",
		paging: "comments-paging",
		pagingTitle: "comments-paging-title",
		selected: "sel"
	},
	pageLinkPrefix: "#page",
	perPage: 10,
	goToPage: function(page, jump){
		var end = page * this.perPage;
		var start = end -  this.perPage;
		start = start < 0 ? 0 : start;
		end = end > this.comments.length ? this.comments.length : end;
		this.comments.loop(function(comment){ $(comment).removeClass(this.css.active); }, this);
		for(var i = start ;i < end; i++){ $(this.comments[i]).addClass(this.css.active); }
		this.paging.removeClass(this.css.selected);
		$(this.paging[page-1]).addClass(this.css.selected);
		this.page = page;
		
		if(jump){ $(window).scrollTop(this.parent.position().top); }
	},
	click: function(e){
		e.preventDefault();
		var href = $(e.target).attr("href");
		var page = href.match(/[#page(\d)]$/);
		this.goToPage(page, true);
	}
};
jQuery(document).ready(Comments.init);
