/***************************************
* EmbedChirbits v0.1: embed chirbit
* http://www.chirbit.com/embed_chirbits
*
* (c) 2009 Ivan Reyes/chirbit.com
*
***************************************/

var ChirbitEmbed = Class.create();
ChirbitEmbed.prototype = {
   initialize: function(element, chirbit_embed) {
      var options = Object.extend({
      default_css: true,
      margin: "0px",
      padding: "0px",
      backgroundColor: "white",
      min_distance_x: 15,
      min_distance_y: -150,
      delta_x: 0,
      delta_y: 0,
      zindex: 1000
    }, arguments[2] || {});

    this.element      = $(element);

    this.options      = options;
    
    // use the supplied chirbitembed element or create our own div
    if($(chirbit_embed)) {
      this.chirbit_embed = $(chirbit_embed);
    } else {
      this.chirbit_embed = $(document.createElement("div")); 
      document.body.appendChild(this.chirbit_embed);
      this.chirbit_embed.addClassName("chirbitembed");
      
      var ChirbitURL = ('<iframe src="'+chirbit_embed+'" width=350 height=150 marginwidth=0 marginheight=0 frameborder=0 scrolling=no style=\"border:2px solid #000000;margin:0px;padding:0px;\"></iframe>');
      this.chirbit_embed.innerHTML = ChirbitURL;

    }

    // hide the tool-tip by default
    this.chirbit_embed.hide();

    this.eventMouseOver = this.showChirbitEmbed.bindAsEventListener(this);
    this.eventMouseOut   = this.hideChirbitEmbed.bindAsEventListener(this);
    this.eventMouseMove  = this.moveChirbitEmbed.bindAsEventListener(this);

    this.registerEvents();
  },

  destroy: function() {
    Event.stopObserving(this.element, "mouseover", this.eventMouseOver);
    Event.stopObserving(this.element, "mouseout", this.eventMouseOut);
    Event.stopObserving(this.element, "mousemove", this.eventMouseMove);
  },

  registerEvents: function() {
    Event.observe(this.element, "mouseover", this.eventMouseOver);
    Event.observe(this.element, "mouseout", this.eventMouseOut);
    Event.observe(this.element, "mousemove", this.eventMouseMove);
  },

  moveChirbitEmbed: function(event){
	  Event.stop(event);
	  // get Mouse position
    var mouse_x = Event.pointerX(event);
	  var mouse_y = Event.pointerY(event);
	
	  // decide if wee need to switch sides for the chirbitembed
	  var dimensions = Element.getDimensions( this.chirbit_embed );
	  var element_width = dimensions.width;
	  var element_height = dimensions.height;
	
	  if ( (element_width + mouse_x) >= ( this.getWindowWidth() - this.options.min_distance_x) ){ // too big for X
		  mouse_x = mouse_x - element_width;
		  // apply min_distance to make sure that the mouse is not on the tool-tip
		  mouse_x = mouse_x - this.options.min_distance_x;
	  } else {
		  mouse_x = mouse_x + this.options.min_distance_x;
	  }
	
	  if ( (element_height + mouse_y) >= ( this.getWindowHeight() - this.options.min_distance_y) ){ // too big for Y
		  mouse_y = mouse_y - element_height;
	    // apply min_distance to make sure that the mouse is not on the tool-tip
		  mouse_y = mouse_y - this.options.min_distance_y;
	  } else {
		  mouse_y = mouse_y + this.options.min_distance_y;
	  } 
	
	  // now set the right styles
	  this.setStyles(mouse_x, mouse_y);
  },
	
		
  showChirbitEmbed: function(event) {
    Event.stop(event);
    this.moveChirbitEmbed(event);
	  new Element.show(this.chirbit_embed);
  },
  
  setStyles: function(x, y){
   // set the right styles to position the tool tip
    Element.setStyle(this.chirbit_embed, {
      position:'absolute',
      top:y + this.options.delta_y + "px",
      left:x + this.options.delta_x + "px",
      zindex:this.options.zindex
      });
	
   // apply default theme if wanted
   if (this.options.default_css){
      Element.setStyle(this.chirbit_embed, {
      	margin:this.options.margin,
	padding:this.options.padding,
	backgroundColor:this.options.backgroundColor,
	zIndex:this.options.zindex
      });	
   }	
  },

  hideChirbitEmbed: function(event){
	  new Element.hide(this.chirbit_embed);
  },

  getWindowHeight: function(){
    var innerHeight;
	  if (navigator.appVersion.indexOf('MSIE')>0) {
		  innerHeight = document.body.clientHeight;
    } else {
		  innerHeight = window.innerHeight;
    }
    return innerHeight;	
  },
 
  getWindowWidth: function(){
    var innerWidth;
	  if (navigator.appVersion.indexOf('MSIE')>0) {
		  innerWidth = document.body.clientWidth;
    } else {
		  innerWidth = window.innerWidth;
    }
    return innerWidth;	
  }

}

Event.observe(window,"load",function() {
   $$("*").findAll(function(node){
      return node.getAttribute('chirbit');
      }).each(function(node){
         new ChirbitEmbed(node,node.attributes.chirbit.value);
         node.removeAttribute("chirbit");
         node.style.borderStyle="none none double none";
         node.style.borderBottomColor = "#00b3e8";
         node.style.cursor = "pointer";
         });
   });