function getPage()
{
    var url=window.location.href;
    var paramsStart = url.indexOf("?");
    if(paramsStart == -1)
	return 1
    var paramString = url.substr(paramsStart+1)
    var tokenStart = paramString.indexOf("page");
    if(tokenStart== -1)
	return 1
    paramToEnd = paramString.substr(tokenStart + 5);
    var delimiterPos = paramToEnd.indexOf("&");
    if(delimiterPos == -1) 
	return paramToEnd
    else
	return paramToEnd.substr(0, delimiterPos)
}

function setPagesHref(param)
{
    links = document.getElementsByClassName('page');
    links.each(function (element) {
    var pairs = element.href.split('\?');
    var page_param = pairs[1].split('\&')[0].split('\#')[0];
    element.href = pairs[0] + "\?" + page_param + "\&" + param + "\#commentsTree";
  });

}

function extract_id(name) {
  var pairs = name.split('-');
  return parseInt(pairs[1]);
}

function prepareContainers() {
  forms = document.getElementsByClassName('commentFormContainer');
  forms.each(function(e){Element.update(e, '');});
  divs = document.getElementsByClassName('commentReply');
  divs.each(function(e){Element.show(e);});
}

function handleCommentClick(e) {
  Event.stop(e);
  var link = Event.element(e);
  var href = link.attributes['href'].value;
  var pairs = href.split('\?');
  var r = new AjaxClient(pairs[0],
                         {method: "post",
			  onFailure: reportError,
			  //onSuccess: prepareContainers,
			  parameters: pairs[1],
			  evalScripts: true});
}

function handleDelete(link) {
  var href = link.attributes['href'].value;
  var pairs = href.split('\?');

  var r = new AjaxClient(pairs[0],
                         {method: "post",
			  onFailure: reportError,
			  //onSuccess: prepareContainers,
			  parameters: pairs[1],
			  evalScripts: true});
}

function handleExpandComment(e) {
  Event.stop(e);
    
  var link = Event.element(e);
  var href = link.attributes['href'].value;
  var pairs = href.split('\?');
  if(pairs.length>1) 
    params=pairs[1] + "&";
  else
    params="";
  var r = new AjaxClient(pairs[0].replace("view","comments"),
                         {method: "post",
			  onFailure: reportError,
			  parameters: params+"action=expandComment",
			  //onSuccess: prepareContainers,
			  evalScripts: true});
}

function handleExpandAllComments(e) {
  Event.stop(e);
  var link = Event.element(e);
  var href = link.attributes['href'].value;
  var pairs = href.split('\?');
  var r = new AjaxClient(pairs[0].replace("view","comments"),
                         {method: "post",
			  onFailure: reportError,
			  parameters: "action=expandAllComments&"+pairs[1],
			  //onSuccess: prepareContainers,
			  evalScripts: true});
}

function handleCloseAllComments(e) {
  Event.stop(e);
  var link = Event.element(e);
  var href = link.attributes['href'].value;
  var pairs = href.split('\?');
//  if(pairs[1].split('\&').length==2)
//    add = "\&page="+getPage()
// else
//    add = "";
  var r = new AjaxClient(pairs[0].replace("view","comments"),
                         {method: "post",
			  onFailure: reportError,
			  parameters: "action=closeAllComments&"+pairs[1],
			  //onSuccess: prepareContainers,
			  evalScripts: true});
}

function handleCommentForm (e) {
  Event.stop(e);
  form = Event.element(e);
  var r = new AjaxClient(form.attributes['action'].value,
                         {method: "post",
                          parameters: Form.serialize(form),
                          onComplete: registerCommentHandlers,
                          onFailure: reportError,
                          evalScripts: true});
}

function handleCancel (e) {
  Event.stop(e);
  var button = Event.element(e);
  var id = extract_id(button.id);
  Element.remove('comment-'+id+'-reply');
  Element.show('commentReply-'+id);
  if(!($('comment-'+id+'-childs').childNodes.length)){
    Element.hide('comment-'+id+'-childs-block');}
}

function handleEditCancel (e) {
  Event.stop(e);
  var button = Event.element(e);
  var id = extract_id(button.id);
  Element.remove('comment-'+id+'-edit');
  Element.show('comment-'+id);
}

function registerCommentHandlers () {
  links = document.getElementsByClassName('commentReplyLink');
  links.each(function (element) {
    Event.stopObserving(element, 'click', handleCommentClick);
    Event.observe(element, 'click', handleCommentClick);
  });
}

function findHrefParent(element) {
  var tries = 5;
  while (tries > 0 && element) {
    if (element.attributes['href']) {
      return element;
    }
  element = element.parentNode;
  tries += 1;
  }
}

function handleVote(e) {
  Event.stop(e);
  var link = findHrefParent(Event.element(e));
  if (link) {
    var pairs = link.attributes['href'].value.split('\?');
    var r = new AjaxClient(pairs[0],
	{method: "post",
	 onFailure: reportError,
	 parameters: pairs[1],
	 evalScripts: true});
  }
}

function handleCommentsClick(e) {
  var button = Event.element(e);
  var id = extract_id(button.id);
  switch(button.className)
  {
    case "expandLink":
	handleExpandComment(e);
	break;	
    case "expandAllLink":
	handleExpandAllComments(e);
	break;	
    case "closeAllLink":
	handleCloseAllComments(e);
	break;	
    case "commentReplyLink":
    case "comments_write":
	handleCommentClick(e);
	break;
    case "commentEditLink":
	handleCommentClick(e);
	break;
    case "commentDeleteLink":
	Event.stop(e);
	Element.hide("deleteComment-"+id+"-actionContainer");
	Element.show("deleteComment-"+id+"-confirmationContainer");
	break;
    case "confirmFalse":
	Event.stop(e);
	Element.show("deleteComment-"+id+"-actionContainer");
	Element.hide("deleteComment-"+id+"-confirmationContainer");
	break;
    case "confirmTrue":
	Event.stop(e);
    	handleDelete($("deleteComment-"+id+"-action"));
	break;
    case "voteUp":
    case "voteDown":
        handleVote(e);
	break;
  }
};


function registerCommentTreeHandler() {
  element = document.getElementById('commentsTree');
  if(element)
  {
    Event.stopObserving(element, 'click', handleCommentsClick);
    Event.observe(element, 'click', handleCommentsClick);
 }
}

if (Ajax.getTransport()) {
    new FastInit(registerCommentTreeHandler);
}
