var isResizing=false;
var isMoving=false;
var cpoint_offs;
var cpoint=null;
var grid_offs=null;
var move_start_offs=null;
var grid_margs=null;
var last_update=null;
var min_width=20;
var min_height=20;
var cform_clicked=false;
var orig_color= 'grey';


function update_cpoint(e) {
 // change div height& width
    if( ! cpoint || cpoint.length > 1 || ! cpoint_offs ||  ! cpoint.hasClass('volatile')) {
    return;
 }
 if( isResizing ) {
  neww=Math.max(e.pageX-cpoint_offs.left,min_width);
  newh=Math.max(e.pageY-cpoint_offs.top,min_height);
  cpoint.width(neww);
  cpoint.height(newh);
  return false;
 } 
 if( isMoving ) {
  // check left+ top margin
  if ( ! move_start_offs ) {
    return;
  }
  new_offs_top=Math.max(grid_offs.top,cpoint_offs.top+e.pageY-move_start_offs.top);
  new_offs_left=Math.max(grid_offs.left,cpoint_offs.left+e.pageX-move_start_offs.left);
  move_start_offs.left=e.pageX;
  move_start_offs.top=e.pageY;
  // check bottob+right margin
  // update offset
  cpoint_offs.left = Math.min(new_offs_left, grid_margs.left-cpoint.width());
  cpoint_offs.top = Math.min(new_offs_top,grid_margs.top-cpoint.height());
  cpoint.css('left', cpoint_offs.left-grid_offs.left);
  cpoint.css('top', cpoint_offs.top-grid_offs.top);
  return false;
 }
};



function create_cpoint(e){
   /* we are outside a comment, make div appear and resize*/
   if( ! $("#grid").hasClass("enabled") ){
     return;
   }
   if( cform_clicked ){
    cform_clicked= false;
    return;
   }
   new_cpoint_offs={'left':e.pageX, 'top': e.pageY};
   var new_cpoint=$(".comment-area.clone").clone()
   new_cpoint.removeClass("clone");
   new_cpoint.css('top', new_cpoint_offs.top-grid_offs.top);
   new_cpoint.css('left', new_cpoint_offs.left-grid_offs.left);
   new_cpoint.css('display', 'block');
   $("#grid").append(new_cpoint);
   isResizing=true;
   isMoving=false;
   select_cpoint(new_cpoint);
   new_cpoint.mousedown(move_cpoint);
   new_cpoint.children(".comment-resize").mousedown(resize_cpoint);
}

function close_cpoint(e) {
 // if div is big enough make comment form appear
 if ( ! cpoint ) {
  return;
 }
 isResizing=false;
 isMoving=false;
 if ( cpoint.width() < min_width || cpoint.height() < min_height) {
   cpoint.remove();
   return false;
 }
 /* make comment form appear */
 display_cform();
};


function move_cpoint(e) {
 if ( ! $(e.target).hasClass("comment-area") ) {
  return;
 }
 move_start_offs={'top':e.pageY, 'left': e.pageX};
 select_cpoint(e.target);
 isResizing=false;
 isMoving=true;
 return false;
};

function resize_cpoint(e) {
 select_cpoint(e.target.parentNode);
 isResizing=true;
 isMoving=false;
 return false;
};

function select_cpoint(elm){
  if ( cpoint ) {
    cpoint.removeClass("current");
 }
 cpoint=$(elm)
 cpoint.addClass('current');
 cpoint_offs=cpoint.offset();
}

/* comment stuff */
function get_comments(cform) {
 var clist_arrived= function(data, textStatus){
     if ( textStatus='200' ){
         cform.children(".jmessage").remove();
	 cform.prepend(data);
     }
 }
 pageid=cpoint.children(".pageid").text();
 if ( ! pageid ) {
     return;
 }
 cform.children(".jmessage").remove();
 cform.prepend('<p class="jmessage">carico commenti..</p>');
 y=cpoint.css('top').slice(0,-2);
 x=cpoint.css('left').slice(0,-2);
 $.get('/commentlist/' + pageid + '/' + x + '/' + y +'/', 
   callback=clist_arrived);
}

function display_cform() {
 cform=$("#comment-form");
 cform.css('left', cpoint_offs.left-grid_offs.left);
 cform.css('top', cpoint_offs.top-grid_offs.top+cpoint.height());
 cform.css('display', 'block');
 cform.mousedown(function() { cform_clicked=true; });
 cform.children(".comment").remove();
 if (! cpoint.hasClass('volatile') ) {
     get_comments(cform);
 }
}

function addComment() {
 var comment_added = function(data, textStatus){
  $("#comment-form").css('background-color',orig_color);
  $("#comment-form .comment").remove();
  get_comments(cform);
 }
 var cform=$("#comment-form");
 $("#comment-form").css('background-color','yellow');
 if ( cpoint == null || cpoint_offs == null ) {
  return;
 }
 pageid=cpoint.children(".pageid").text();
 if ( ! pageid ) {
     return;
 }
 $("#comment-form").css('background-color','red');
 cpoint.removeClass("volatile");
 $.post('/comment/'+pageid+'/', data={
  'x': cpoint_offs.left-grid_offs.left,
  'y': cpoint_offs.top-grid_offs.top,
  'w': cpoint.width(),
  'h': cpoint.height(),
  'text': $("#comment-form #comment-text").val()}, 
  callback=comment_added);
}

/* DEBUGGING */
function introspect(elm) {
 msg='';
 for( i in elm ) {
  msg += i + ' ';
 }
 alert(msg);
};

/* init */
$(document).ready( function () {
 grid_offs=$("#grid").offset();
 grid_margs={'left': $("#grid").width()+grid_offs.left, 
      'top':$("#grid").height()+grid_offs.top};
 $(".comment-area").mousedown(move_cpoint);
 $(".comment-number").mousedown(function(e){
       select_cpoint(e.target.parentNode); 
       return false;
 });
 orig_color=$("#comment-form").css("background-color");
 $("#grid").mousedown( create_cpoint);
 $(document).mouseup( close_cpoint );
 $("#grid").mousemove(update_cpoint);
});
