//--------------------------------
//********************************
//******** Class mouse_interface *
//********************************
//--------------------------------

/*
//********************************
//********* Constructors *********
//********************************
function mouse_interface()
{
   alert('mouse_interface');
}

function on_mouse_move_enter(i_mouse) 
{       
   alert('1');
}

function on_mouse_move_leave(i_mouse) 
{       
   alert('1');
}

function on_mouse_move(i_mouse) 
{       
   alert('1');
}

function on_mouse_button_down(i_mouse) 
{       
   alert('1');
      alert(i_mouse.position().x);
      
}

function on_mouse_button_up(i_mouse) 
{       
   alert('yes1on_mouse_button_up');
}


mouse_interface.prototype.on_mouse_move_enter = on_mouse_move_enter;
mouse_interface.prototype.on_mouse_move_leave = on_mouse_move_leave;
mouse_interface.prototype.on_mouse_move = on_mouse_move;
mouse_interface.prototype.on_mouse_button_down = on_mouse_button_down;
mouse_interface.prototype.on_mouse_button_up = on_mouse_button_up;

*/

//--------------------------------
//********************************
//******** Class point **********
//********************************
//--------------------------------


//********************************
//********* Constructors *********
//********************************
var object_global_mouse;
function mouse()
{
  // object_global_mouse = this;
   this.m_has_capture_ptr = 0;
  
   this.m_position  = new point();
   
   this.m_listener = new Array();
}


function owk_mouse_create()
{  
 //  object_global_mouse = this;
}

function owk_mouse_position()
{
   return this.m_position;
}

function owk_mouse_left_button() 
{
   if(event.button==0){return true;}else{return false;}
}

function owk_mouse_middle_button() 
{
   if(event.button==1){return true;}else{return false;}
}

function owk_mouse_right_button() 
{
   if(event.button==2){return true;}else{return false;}
}  

function owk_mouse_ctrl_key() 
{
   return event.ctrlKey;
}

function owk_mouse_alt_key() 
{
   return event.altKey;
}

function owk_mouse_shift_key() 
{
   try
   {
      if (e)
      {
	      return e.shiftKey;
      }
      else if (event)
      {
	      return event.shiftKey;
      }
   }
   catch(e){return false}

}


function owk_mouse_os_key() 
{

}  
 
 
function owk_mouse_move(e) 
{ 
   if (this.has_capture() != 0)
   {
      this.has_capture().on_mouse_move(this);
   }
   else
   {
      for (var i=0; i<this.m_listener.length; i++) 
      {
         this.m_listener[i].on_mouse_move(this);         
      } 
   }
}

function owk_mouse_button_down(event) 
{
   // when we have a mouse capture only this interface receives mouse events
   if (this.has_capture() != 0)
   {
  // alert('has_capture' + this.has_capture().m_name);
      try{this.has_capture().on_mouse_button_down(this);}catch(e){}
   }
   else
   { 

      for (var i=0; i<this.m_listener.length; i++) 
      { 
         this.m_listener[i].on_mouse_button_down(this); 
      } 
   }
}

function owk_mouse_button_up(event) 
{  
 //  if(event.button==0){this.left_button_press = true;}else{this.left_button_press = false;}
 //  if(event.button==1){this.middle_button_press = true;}else{this.middle_button_press = false;}  
 //  if(event.button==2){this.right_button_press = true;}else{this.right_button_press = false;}  

   // when we have a mouse capture only this interface receives mouse events
   if (this.has_capture() != 0)
   {
      this.has_capture().on_mouse_button_up(this);
   }
   else
   {
      for (var i=0; i<this.m_listener.length; i++) 
      { 
         this.m_listener[i].on_mouse_button_up(this); 
      } 
   }   
}

function owk_mouse_count_listeners() 
{
   return this.ge_listener.length;
}

function owk_mouse_ge_listener(i_index) 
{
   return this.m_listener[i_index];
}

function owk_mouse_push_back_listener(i_listener) 
{
   this.m_listener.push(i_listener);
}

function owk_mouse_has_capture() 
{ 
   return this.m_has_capture_ptr; 
}

function owk_mouse_capture(i_has_capture_ptr)
{
   this.m_has_capture_ptr = i_has_capture_ptr;
}

function owk_mouse_release_capture()
{
   this.m_has_capture_ptr = 0; 
}


//********************************
//******** Public Methods ********
//********************************
mouse.prototype.create = owk_mouse_create;
mouse.prototype.os_key_pressed = owk_mouse_os_key;
mouse.prototype.shift_key_pressed = owk_mouse_shift_key;
mouse.prototype.alt_key_pressed = owk_mouse_alt_key;
mouse.prototype.ctrl_key_pressed = owk_mouse_ctrl_key;

mouse.prototype.right_button = owk_mouse_right_button;
mouse.prototype.middle_button = owk_mouse_middle_button;
mouse.prototype.left_button  = owk_mouse_left_button;
mouse.prototype.position = owk_mouse_position;

mouse.prototype.move = owk_mouse_move;
mouse.prototype.button_up = owk_mouse_button_up;
mouse.prototype.button_down = owk_mouse_button_down;

mouse.prototype.count_listeners = owk_mouse_count_listeners;
mouse.prototype.ge_listener = owk_mouse_ge_listener;
mouse.prototype.push_back_listener = owk_mouse_push_back_listener;
mouse.prototype.has_capture = owk_mouse_has_capture;
mouse.prototype.capture = owk_mouse_capture;
mouse.prototype.release_capture = owk_mouse_release_capture;
