/** {{{ MIT and GPL licenses.
 * Copyright (c)2005-2008 Matt Kruse (javascripttoolbox.com)
 * 
 * Copy&Pasted/BugsAdded?? by Nick Robinson 2009
 * 
 * Dual licensed under the MIT and GPL licenses. 
 * This basically means you can use this code however you want for
 * free, but don't claim to have written it yourself!
 * Donations always accepted: http://www.JavascriptToolbox.com/donate/
 *
}}} */

// {{{ defined
// Determine if a reference is defined
function defined(o) {
	return (typeof(o)!="undefined");
};
// }}}

var Helpers = new Object();
    
// {{{ resolveEvent
Helpers.resolveEvent = function( e ) {
  if (! e) {
    e = window.event;
  }
  return e;
}
// }}}

// {{{ resolveMouseEvent
Helpers.resolveMouseEvent = function( e, container ) {
  Helpers.resolveEvent( e );
    
  if (e.pageX) {
    e.x = e.pageX;
    e.y = e.pageY;
  } else {
    e.x = e.clientX + Helpers.getScrollLeft();
    e.y = e.clientY + Helpers.getScrollTop();
  }

  if ( defined(container) ) {
    var topLeft = Helpers.calcPosition( container );
    e.relX = e.x - topLeft[0];
    e.relY = e.y - topLeft[1];
  }
  
  return e;
}
// }}}

// {{{ calcPosition
Helpers.calcPosition = function(obj) {
	var curleft = curtop = 0;

  do {
    curleft += obj.offsetLeft;
    curtop += obj.offsetTop;

  } while (obj = obj.offsetParent);

  return [curleft,curtop];
}
// }}}

// {{{ getScrollTop
Helpers.getScrollTop = function() {
  if (document.documentElement && defined(document.documentElement.scrollTop) && document.documentElement.scrollTop>0) {
    return document.documentElement.scrollTop;
  }
  if (document.body && defined(document.body.scrollTop)) {
    return document.body.scrollTop;
  }
  return null;
};
// }}}

// {{{ getScrollLeft
Helpers.getScrollLeft = function() {
  if (document.documentElement && defined(document.documentElement.scrollLeft) && document.documentElement.scrollLeft>0) {
    return document.documentElement.scrollLeft;
  }
  if (document.body && defined(document.body.scrollLeft)) {
    return document.body.scrollLeft;
  }
  return null;
};
// }}}

// {{{ createAjax
Helpers.createAjax = function() {
  try {
    return new XMLHttpRequest();
  } catch (e) {
    try {
      return new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        return new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
        alert( "Your browser does not support AJAX. Upgrade to firefox, or another modern web browser.");
        return null;
      }
    }
  }
}
// }}}

// {{{ createXMLParser
Helpers.createXMLParser = function( text ) {

  try { //Internet Explorer
    var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async="false";
    xmlDoc.loadXML(text);
    return xmlDoc;
  } catch(e) {
    try { // Firefox, Mozilla, Opera, etc.
      var parser = new DOMParser();
      var xmlDoc = parser.parseFromString( text, "text/xml" );
      return xmlDoc;
    } catch(e) {
      alert( e.message );
      return null;
    }
  }
 
}
// }}}

// {{{ escapeHtml
Helpers.escapeHtml = function( text ) {                                       
  return text.replace(/&/g,'&amp;').replace(/>/g,'&gt;').replace(/</g,'&lt;').replace(/"/g,'&quot;');
};
// }}}
    
Helpers.log = new Log( "Helpers" );

