/**
 * addEvent written by Dean Edwards, 2005
 * with input from Tino Zijdel
 *
 * http://dean.edwards.name/weblog/2005/10/add-event/
 **/
function addEvent(element, type, handler)
{
   // assign each event handler a unique ID
   if (!handler.$$guid) handler.$$guid = addEvent.guid++;
   
   // create a hash table of event types for the element
   if (!element.events) element.events = {};
   
   // create a hash table of event handlers for each element/event pair
   var handlers = element.events[type];
   if (!handlers)
   {
      handlers = element.events[type] = {};
      
      // store the existing event handler (if there is one)
      if (element["on" + type])
      {
         handlers[0] = element["on" + type];
      }
   }
   
   // store the event handler in the hash table
   handlers[handler.$$guid] = handler;
   
   // assign a global event handler to do all the work
   element["on" + type] = handleEvent;
};

// a counter used to create unique IDs
addEvent.guid = 1;

function removeEvent(element, type, handler) {
   // delete the event handler from the hash table
   if (element.events && element.events[type]) {
      element.events[type][handler.$$guid] = undefined;
   }
};

function handleEvent(event) {
   var returnValue = true;
   // grab the event object (IE uses a global event object)
   event = event || fixEvent(window.event);
   // get a reference to the hash table of event handlers
   var handlers = this.events[event.type];
   // execute each event handler
   for (var i in handlers) {
      this.$$handleEvent = handlers[i];
      if (this.$$handleEvent(event) === false) {
         returnValue = false;
      }
   }
   return returnValue;
};

function fixEvent(event) {
   // add W3C standard event methods
   event.preventDefault = fixEvent.preventDefault;
   event.stopPropagation = fixEvent.stopPropagation;
   return event;
};

fixEvent.preventDefault = function() {
   this.returnValue = false;
};
fixEvent.stopPropagation = function() {
   this.cancelBubble = true;
};

// end from Dean Edwards

function getStyleBySelector( selector )
{
   var sheetList = document.styleSheets;
   var ruleList;
   var i, j;
   
   /* look through stylesheets in reverse order that they appear in the document */
   for (i=sheetList.length-1; i  >= 0; i--)
   {
      ruleList = sheetList[i].cssRules;
      for (j=0; j < ruleList.length; j++)
      {
    //     alert(ruleList[j].selectorText);
         if (ruleList[j].type == CSSRule.STYLE_RULE && ruleList[j].selectorText == selector)
         {
            return ruleList[j].style;
         }   
      }
   }
   
   return null;
}

function findPos(obj) {
   var curleft = curtop = 0;
   if (obj.offsetParent) {
      curleft = obj.offsetLeft
      curtop = obj.offsetTop
      while (obj = obj.offsetParent) {
         curleft += obj.offsetLeft
         curtop += obj.offsetTop
      }
   }
   return [curleft,curtop];
}

function createCookie(name,value,days) {
   if (days) {
      var date = new Date();
      date.setTime(date.getTime()+(days*24*60*60*1000));
      var expires = "; expires="+date.toGMTString();
   }
   else var expires = "";
   document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
   var nameEQ = name + "=";
   var ca = document.cookie.split(';');
   for(var i=0;i < ca.length;i++) {
      var c = ca[i];
      while (c.charAt(0)==' ') c = c.substring(1,c.length);
      if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
   }
   return null;
}

function eraseCookie(name) {
   createCookie(name,"",-1);
}


