/*==========================*/
/*=           FX           =*/
/*==========================*/

function page_right()
{
  //To be overwritten
}

function page_left()
{
  //To be overwritten  
}

function start_drips(target)
{
	var drips = $($(target).id+"drips").getElementsByTagName("DIV");
		
	for ( var i=0; i<drips.length; i++ ) 
	{
		var drip = drips[i];
		if ( drip.action != "down" )
		{
			var y = parseInt(drip.style.cssText.replace(/.*(\s[0-9]+)px.*/, "$1"));
			if ( !y )
				y=0;
			drip.action = "down";
			if ( drip.tween_down )
				drip.tween_down.stop();
			if ( drip.tween_up )
				drip.tween_up.stop();
			
			drip.tween_down = new Tween(drip.style, 'cssText', Math.random() > 0.5 ? Tween.strongEaseOut : Tween.strongEaseIn, y, 10+parseInt(52*Math.random()), 1.5+3.5*Math.random(), 'px', 'background-position: 0px ');
			drip.tween_down.start();
		}
	}
}

function stop_drips(target)
{
	var drips = $($(target).id+"drips").getElementsByTagName("DIV");
		
	
	for ( var i=0; i<drips.length; i++ ) 
	{
		var drip = drips[i];
		if ( drip.action != "up" )
		{
			var y = parseInt(drip.style.cssText.replace(/.*(\s[0-9]+)px.*/, "$1"));
			drip.action = "up";
			if ( y != 0 && !y )
				y=62;
			if ( drip.tween_down )
				drip.tween_down.stop();
			if ( drip.tween_up )
				drip.tween_up.stop();
			
			drip.tween_up = new Tween(drip.style, 'cssText', Math.random() > 0.5 ? Tween.strongEaseOut : Tween.strongEaseIn, y, 0, 1, 'px','background-position: 0px ');
			drip.tween_up.start();
		}
	}	
}

function after_tag_completion(element, value)
{
	element.value = element.value + ", ";
	if (element.createTextRange) {
    var range = element.createTextRange();
    range.collapse(false);
    range.select();
  }
  else if (element.setSelectionRange) {
    element.focus();
    var length = element.value.length;
    element.setSelectionRange(length, length);
  }
}



var _FBK = {
  $: function() {
    var results = [], element;
    for (var i = 0; i < arguments.length; i++) {
      element = arguments[i];
      if (typeof element == 'string')
        element = document.getElementById(element);
      results.push(element);
    }
    return results.length < 2 ? results[0] : results;
  },
  
  registerEvent: function(event_name, listener, target)
	 {
    if ( !target )
      target = window;
    //Add the listener
    if (target.addEventListener)
    {
      if ( event_name == "unload")
        event_name = "beforeunload";
      target.addEventListener(event_name, listener, false);
    }
    else if (target.attachEvent)
    {
      if ( target == window && !(event_name == "unload" || event_name == "load"))
        target = window.document;
      
      target.attachEvent("on"+event_name, listener);
    }

  },
  
  pos: function(obj, target)
  {
    obj = _FBK.$(obj);
    
    if ( obj.nodeName.toLowerCase() == "area" )
    {
     return _FBK.posForArea(obj, target);
    }
    else
    {
      orig_obj = obj;
    
      var valueT = 0, valueL = 0;
      do {
      	valueT += obj.offsetTop  || 0;
      	valueL += obj.offsetLeft || 0;
      	obj = obj.offsetParent;
    	
      } while (obj);
      return {x: valueL, y: valueT};
    }
  },

  size: function(element) 
  {	
    element = _FBK.$(element);
    
    if ( element.nodeName.toLowerCase() == "area")
      return _FBK.sizeForArea(element);
  	return { width: element.offsetWidth, height: element.offsetHeight };
  },

  getX: function(obj, target) 
  {
  	return _FBK.pos(obj, target).x;
  },

  getY: function(obj, target) 
  {
  	return _FBK.pos(obj, target).y;
  },
  
  getWidth: function(obj)
  {
    return _FBK.size(obj).width;
  },

  getHeight: function(obj)
  {
    return _FBK.size(obj).height;
  },
  
  pointer: function(event)
  {
    return {x: _FBK.pointerX(event), y: _FBK.pointerY(event)};
  },
  
  pointerX: function(event)
  {
    return event.pageX || (event.clientX +
      (document.documentElement.scrollLeft || document.body.scrollLeft));
  },

  pointerY: function(event)
  {
    return event.pageY || (event.clientY +
      (document.documentElement.scrollTop || document.body.scrollTop));
  },
  
  delay: function(millis) 
  {
    date = new Date();
    var curDate = null;

    do { var curDate = new Date(); } 
    while(curDate-date < millis);
  },
  
  click_position: function(element, event)
  {
    var click_x = null;
    var click_y = null;
  
    try
    {
      click_x = _FBK.pointerX(event);
      click_y = _FBK.pointerY(event);
  
      if ( _FBK.isSafari )
      {
        //If the item is an input element then the origin is actually in the lower-left corner
        //and we need to invert it
        if ( element.nodeName.toLowerCase() == "input")
        {
          //Find the bottom of the outside edge of the window (outerHeight+screenY) and then subtract
          //the screenY from that ( because it's an inverted origin )
          click_y = (window.outerHeight+window.screenY)-event.screenY;
        }
      }
    
      //Find the relative positions only
      var pos = _FBK.pos(element);
      var size = _FBK.size(element);
    
      click_x -= pos.x;
      click_y -= pos.y;
    
      click_x /= size.width;
      click_y /= size.height;
    }
    catch(e)
    {
      //Ignore any errors in the process of getting the position
    }
  
    return {x: click_x, y: click_y};
  }
  
};

/*=====================================*/
/*=           BROWSER STUFF           =*/
/*=====================================*/


_FBK.isSafari = (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? true : false;
_FBK.isIE = (/MSIE/.test(navigator.userAgent)) ? true : false;
_FBK.isMoz = (/Gecko/.test(navigator.userAgent) && !_FBK.isSafari) ? true : false;


_FBK.log = function(message){
  var fbk_logger = _CE.$('fbk_logger');
  if ( !fbk_logger )
  {
    var fbk_logger = document.createElement("DIV");
    fbk_logger.id = "fbk_logger"
    fbk_logger.style.position = "fixed";
    fbk_logger.style.width = "100%";
    fbk_logger.style.height = "100";
    fbk_logger.style.margin = "0";
    fbk_logger.style.padding = "0";
    fbk_logger.style.bottom = "0";
    fbk_logger.style.background = "#FFFFFF";
    fbk_logger.style.border = "2px solid black";
    fbk_logger.style.overflow = "scroll";
    document.body.appendChild(fbk_logger);
  }
  fbk_logger.innerHTML = fbk_logger.innerHTML + message + "<br/>";
}