// @author Roland Sadowski <szabla gmail.com>
//  -*- mode:js2; tab-width:2; intent-tabs-mode:nil;  -*-
// mathtalk

// format function by Ray
// http://community.hdri.net/blogs/ray_blog/archive/2006/02/27/5.aspx
String.prototype.format = function(){
  var str = this;
  for(var i=0;i<arguments.length;i++)
  {
    var re = new RegExp('\\{' + (i) + '\\}','gm');
    str = str.replace(re, arguments[i]);
  }
  return str;
};

var MAIN_CONFIG = {};
MAIN_CONFIG.wb_id_prefix = "WB_";
MAIN_CONFIG.close_btn_class = "close_btn"; // used for query+bind action
MAIN_CONFIG.del_btn_class = "del_btn";

if(MESSAGES == undefined){
	var MESSAGES = {};
}

MESSAGES["creation_ok"] = "<h2>You've created a new Whiteboard.</h2>"
	+ "<h3>You can access it under the following URL:</h3> "
	+ "<h3><a href=\"{0}\">{0}</a></h3>"
  + "<p>Send this address via email or IM to all participants, so they can join the discussion.</p>"
	+ "<input type=\"text\" class=\"text\" value=\"{0}\" />";
MESSAGES["creation_error"] = "<h2>We encountered some problems.</h2>"
  + "<p>Please be sure you are connected to the internet or try again later.</p>";
MESSAGES["deletion_ok"] = "The Whiteboard has been deleted.";
MESSAGES["close_error"] = MESSAGES.creation_error;

function invalidTopicError(){
	$("#topic_v").show();
	$("#topic_field").addClass('fhl');
}

function invalidNumberOfParticipantsError(){
	$("#parts_v").show();
	$("#participants_field").addClass('fhl');
}

function createOnClick(){
	var params = get_params();
	if(params.topic.length == 0 || $("#topic_field")[0].first_touch){
		invalidTopicError();
		return false;
	} else {
		$("#topic_v").hide();
		$("#topic_field").removeClass('fhl');
	}
	if(params.pts.split(/\s+/).length > 10){
		invalidNumberOfParticipantsError();
		return false;
	} else {
		$("#parts_v").hide();
		$("#participants_field").removeClass('fhl');
	}

	$("#createBtn").attr("disabled", true);
	$("#waiting").show().css("top", window.pageYOffset);
	var options = {
		type: "POST",
		dataType: "json",
		url: "/action/create",
		data: params,
		success: function(data, textStatus) {
			$("#create_form").hide();
			$("#waiting").hide().css("top", "0px");
			showCreationSuccessPanel(data);
		},
		error : function(XMLHttpRequest, textStatus, errorThrown){
			$("#info_panel").slideDown("slow").removeClass("success").addClass("error").html(MESSAGES.creation_error);
			$("#createBtn").attr("disabled", false);
			$("#waiting").hide().css("top", "0px");
		}
	};
	$.ajax(options);
	return false;
}

function showCreationSuccessPanel(data){
	// url of the whiteboard
	var panel = $("#info_panel").html("");
	var url = "http://{0}/whiteboard?id={1}".format(
		document.location.host,
		data.id);
	panel.html(MESSAGES.creation_ok.format(url));
	panel.hide().removeClass("error").addClass("success").slideDown("slow");
}

function showDeletionSuccessPanel(data){
	var panel = $("#info_panel").html("");
	panel.html(MESSAGES.deletion_ok);
	panel.hide().removeClass("error").addClass("success").slideDown("slow");
}

function get_params(){
	var p = {};
	p.topic = $.trim($("#topic_field").val());
	var pts = $.trim($("#participants_field").val());
	if(pts.length > 0) {
		p.pts = pts;
	}
	return p;
}

function closeOnClick(event){
	var container = $(event.target).parents("li");
	var wb_id = container[0].id.slice(MAIN_CONFIG.wb_id_prefix.length);
	var options = {
		type: "POST",
		dataType: "json",
		url: "/action/close",
		data: {"id": wb_id},
		success: function(data, textStatud){
			// replacing link inside h3 with text
			var heading = container.find("h3").append($("<em>").html("Closed"));
			$(event.target).unbind('click', closeOnClick).remove();
			$("#waiting").hide().css("top", "0px");
		},
		error : function(XMLHttpRequest, textStatus, errorThrown){
			$("#waiting").hide().css("top", "0px");
			var panel = $("#info_panel").hide().html(MESSAGES.close_error);
			$("#info_panel").removeClass("success").addClass("error").show("slow");
		}
	};
	$.ajax(options);
	$("#waiting").show().css("top", window.pageYOffset);
	return false;
}

function deleteOnClick(event){
	var container = $(event.target).parents("li");
	var wb_id = container[0].id.slice(MAIN_CONFIG.wb_id_prefix.length);
	var options = {
		type: "POST",
		dataType: "json",
		url: "/action/delete",
		data: {"id": wb_id},
		success: function(data, textStatud){
			$(event.target).unbind('click', deleteOnClick).remove();
			container.find("a" + MAIN_CONFIG.close_btn_class).unbind('click', closeOnClick);
			container.hide("slow").remove();
			$("#waiting").hide().css("top", "0px");
			showDeletionSuccessPanel();
		},
		error : function(XMLHttpRequest, textStatus, errorThrown){
			$("#waiting").hide().css("top", "0px");
			$("#info_panel").hide().removeClass('success').addClass("error").text("Delete failed").show("slow"); // TODO:proper error message
		}
	};
	$.ajax(options);
	$("#waiting").show().css("top", window.pageYOffset);
	return false;
}

function setup_buttons(){
	$("a." + MAIN_CONFIG.close_btn_class).bind('click', closeOnClick);
	$("a." + MAIN_CONFIG.del_btn_class).bind('click', deleteOnClick);
}

function ready_fn(){
  var topic = $("#topic_field");
	if(topic.size() == 0) return;
	topic[0].first_touch = true;
	topic.css("font-style", "italic");
	topic.focus(function(){
		if(this.first_touch){
			this.value = "";
			this.first_touch = false;
			$(this).css("font-style", "normal");
		}
	});
  $("#createBtn").click(createOnClick);
	setup_buttons();
}

$(document).ready(ready_fn);
