// Based on the wonderful Mootools String.substitute
String.prototype['substitute'] = function(object, regexp, context){
	return this.replace(regexp || (/\\?\{([^{}]+)\}/g), function(match, name){
		if (match.charAt(0) == '\\') return match.slice(1);
		var dotSplit = name.split('.');
		if(dotSplit.length > 1){
			var value = object[dotSplit[0]];
			for (var i=1; i<dotSplit.length; i++) {
				value = value[dotSplit[i]];
			}
			return value;
		}else{
			var varSplit = name.split('var:');
			if(varSplit.length > 1){
				var getter = context[varSplit[1]];
				return getter.call();
			}else{
				return (object[name] != undefined) ? object[name] : '';
			}
		}
	});
};

TumbulusCross = {
	root: "tumbulus_magic_inside",
  base_url: "http://www.tumbulus.com",
  content_url: "users/{user_id}/sites/{site_id}/comments/outside.js",
  send_url: "users/{user_id}/sites/{site_id}/comments/post.js",
	abstract_url: "users/{user_id}/sites/{site_id}/comments/abstract.js",
	cycle: function(){
		var current = this._cycle;
		if(!current) this._cycle = current = "";
		this._cycle = (this._cycle == "" ? "alt" : "");
		return current;
  },
	
	randomString: function() {
		var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
		var string_length = 8;
		var randomstring = 'tblus';
		for (var i=0; i<string_length; i++) {
			var rnum = Math.floor(Math.random() * chars.length);
			randomstring += chars.substring(rnum,rnum+1);
		}
		return randomstring;
	},
	
	getBlock: function(block, value){
		var regexp = new RegExp("{" + block + "}([\\s\\S]*){/" + block + "}");
		return value.match(regexp);
	},

	firstRequest: function(local) {
		var script = document.createElement('script');
		script.src = TumbulusCross.base_url + "/" + TumbulusCross.content_url.substitute(TumbulusCrossData.website) + "?" + "permalink=" + TumbulusCrossData.permalink + '&from=' + escape(local || location.href);
		document.getElementsByTagName('head')[0].appendChild(script);
	},
	
	firstAddComments: function(comments, settings){
		if (!comments) return;
		var div = document.getElementById(TumbulusCross.root);
		if(settings.premium_config){
			var outer_block = TumbulusCross.getBlock("block:Comments", settings.premium_theme);
			div.innerHTML = outer_block[1].replace(/{block:Comment}([\s\S]*){\/block:Comment}/, TumbulusCross.addComments(comments, settings));
		} else {
			div.innerHTML = "<ul id=\"tumbulus-comment-list\">" + TumbulusCross.addComments(comments, settings); + "</ul>";
		}
		div.style.display = 'block'; // make element visible
		div.style.visibility = 'visible'; // make element visible
	},

	addComments: function(comments, settings) {
		if (!comments) return;
		var div = document.getElementById("tumbulus-comment-list"); var txt = "";
		for (var i = 0; i < comments.length; i++) { txt += TumbulusCross.addComment(comments[i], settings);	}
		return txt;
	},
	
	getAbstract: function(permalink, local) {
		var script = document.createElement('script');
		var tag_id = TumbulusCross.randomString();
		script.src = TumbulusCross.base_url + "/" + TumbulusCross.abstract_url.substitute(TumbulusCrossData.website) + "?" + "permalink=" + permalink + '&from=' + escape(local || location.href) + '&tag_id=' + tag_id;
		var html = "<div id='" + tag_id + "' class='tumbulus-comments-abstract'></div>";
		document.write(html);
		document.getElementsByTagName('head')[0].appendChild(script);
	},
	
	addCommentsAbstract: function(tag_id, comments_count) {
		var div = document.getElementById(tag_id);
		var html = "<p>";
		switch (comments_count) {
			case 0:
				html += "Be the first to comment!";
				break;
			case 1:
				html += "<span>1</span> comment, will you be the next?";
				break;
			default:
				html += "Already <span>" + comments_count.toString() + "</span> comments, let us hear your voice!";
				break;
		}
		html += "</p>";
		
		div.innerHTML = html;
	},
	
	commentPosted: function(comment, settings, captcha) {
		if (!comment) return;
		var div = document.getElementById("tumbulus-comment-list");
		div.innerHTML = TumbulusCross.addComment(comment, settings) + div.innerHTML;
		TumbulusCross.resetForm(captcha);
	},
	
	addComment: function(comment, settings) {
		if (!comment) return;
		var comment = comment.comment; // var div = document.getElementById("tumbulus-comment-list");	
		var txt = "";
		
		
		if(settings.premium_config){
			var comment_block = TumbulusCross.getBlock("block:Comment", settings.premium_theme);
			txt = comment_block[1].substitute(comment, null, TumbulusCross);
		} else {			
			var html = '<li class="tbus-list-comment clearfix '+ TumbulusCross.cycle +'">'; if(TumbulusCross.cycle == ""){ TumbulusCross.cycle = "alt"; }else{ TumbulusCross.cycle = ""; };
			html += '<div class="tbus-author">';
			html += "<a class=\"tbus-position\" name=\""+comment.position+"\">" + comment.position +'</a>';
			if(settings.name == true){ 
				if(settings.website == true && comment.website){ 
					html += '<p class="tbus-author-name"><a href="' + comment.website + '">' + comment.display_name + '</a></p>';
				} else {
					html += '<p class="tbus-author-name">' + comment.display_name + '</p>';
				}
			} else {
				if(settings.website == true){ html += '<p class="tbus-author-website">' + comment.website + '</p>';	}
			}
			if(settings.avatar == true){ html += '<p class="tbus-avatar">' + comment.avatar + '</p>'; }
		
			html += '<p class="tbus-author-date">' + comment.created_at.time + ' on ' + comment.created_at.date + '</p>';
			html += '</div>';
			html += '<div class="tbus-comment"><p class="tbus-content">' + comment.content + '</p></div></li>';
		
			//div.innerHTML = html + div.innerHTML;
			txt = html;
		}
		return txt;
	},
	
	sendComment: function(data) {
	  var script = document.createElement('script');
		script.src = TumbulusCross.base_url + "/" + TumbulusCross.send_url.substitute(TumbulusCrossData.website) + this.queryString(data)  + '&comment[from]=' + escape(location.href);
		document.getElementsByTagName('head')[0].appendChild(script);
		// return false so the form doesn't reload page
	  return false;
	},
	
	resetForm: function(captcha){
		document.getElementById("tumbulus-comment-form").reset();
		document.getElementById("tumbulus-form-captcha-image").innerHTML = captcha.image;
		document.getElementById("tumbulus-form-captcha-field").innerHTML = captcha.field;		
	},
	
	queryString: function(data) {
	  var query = "?comment[permalink]=" + encodeURIComponent(TumbulusCrossData.permalink);
		for(var i = 0; i < data.elements.length; i++) {
			var element = data.elements[i];
			query += "&" + element.name + "=" + encodeURIComponent(element.value);
		}
	  return query;
	},
	
	addCommentForm: function(captcha, settings) {
		var tumbulus = document.getElementById(TumbulusCross.root);
		var form_div = document.createElement('div');
		
		if(settings.premium_config){
			var comment_block = TumbulusCross.getBlock("block:Form", settings.premium_theme);
			var html = comment_block[1].substitute({"captcha": captcha}, null, TumbulusCross);
		} else {
			var html = "<form method=\"post\" id=\"tumbulus-comment-form\" class=\"new_comment\" onsubmit=\"return TumbulusCross.sendComment(this);\" action=\"\">\
				 <p class=\"clearfix\"><label for=\"comment_email\">Email</label><input class=\"t\" type=\"text\" size=\"30\" name=\"comment[email]\" id=\"comment_email\"/></p>";
			if(settings.name == true){ html += '<p class=\"clearfix\"><label for=\"comment_name\">Name</label><input class=\"t\" type=\"text\" value=\"\" size=\"30\" name=\"comment[name]\" id=\"comment_name\"/></p>'; }
			if(settings.website == true){ html += '<p class=\"clearfix\"><label for=\"comment_website\">Website</label><input class=\"t\" type=\"text\" value=\"\" size=\"30\" name=\"comment[website]\" id=\"comment_website\"/></p>'; }
			html += "<p class=\"clearfix\"><label for=\"comment_content\">Comment</label><textarea rows=\"10\" name=\"comment[content]\" id=\"comment_content\" cols=\"40\"/></textarea></p>\
				<div class=\"clearfix\" id=\"tumbulus-form-captcha\"><p><label for=\"captcha\">Captcha</label><div id=\"tumbulus-form-captcha-image\" class=\"simple_captcha_image\">" + captcha.image + "</div>\
				<div id=\"tumbulus-form-captcha-field\" class=\"simple_captcha_field\">" + captcha.field + "</div><div class=\"simple_captcha_label\"></div></div>\
				<p class=\"clearfix\"><input class=\"s\" type=\"submit\" value=\"Post!\" name=\"commit\" id=\"comment_submit\"/></p></form>";
		}
		form_div.innerHTML = html;
		tumbulus.appendChild(form_div);
	},
	
	init: function(){
		document.write("<div id='" + TumbulusCross.root + "' style='display: none'></div>");
		if(TumbulusCrossData.base_url){ TumbulusCross.base_url = TumbulusCrossData.base_url; }
		TumbulusCross.firstRequest();
		var no_script = document.getElementById('no_script');
		if (no_script) { no_script.style.display = 'none'; }
	}
}