//add event to a given element
//for instance...
//addEvent(window, 'load', POINTER_TO_FUNCTION);
function addEvent (element, type, handler) {
	if (element.addEventListener) {
		element.addEventListener(type, handler, false);
	} else {
		// assign each event handler a unique ID
		if (!handler.$$guid) handler.$$guid = 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
var guid = 1;
function removeEvent(element, type, handler) {
	if (element.removeEventListener) {
		element.removeEventListener(type, handler, false);
	}else{
		// delete the event handler from the hash table
		if (element.events && element.events[type]) {
			delete element.events[type][handler.$$guid];
		}
	}
};
function handleEvent (event) {
	var returnValue = true;
	// grab the event object (IE uses a global event object)
	event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || 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 = preventDefault;
	event.stopPropagation = stopPropagation;
	return event;
};
function preventDefault() {
	this.returnValue = false;
};
function stopPropagation() {
	this.cancelBubble = true;
};
function Trim(chaine){
	return(chaine.replace(/^\s+|\s+$/g,''));
};
Array.prototype.returnRandomItem=function(){
    return this[Math.floor(Math.random()*this.length)];
};
function RandomAds(){
	this.containers = [];
};
RandomAds.prototype.addContainer=function(element){
	element=typeof element=="string"?document.getElementById(element):element;
	this.containers.push(element);
};
RandomAds.prototype.getRandomContainer=function(){
	return this.containers.returnRandomItem();
};
function removeClassName(element,classNames){
    element=(typeof element).toLowerCase()=="string"?document.getElemenById(element):element;
    var stringPatern = " ?(" + classNames.join("|") + ")";
    var reg = new RegExp(stringPatern,"gi");
    element.className=element.className.replace(reg,"");
};
function addClassName(element,className){
    element=(typeof element).toLowerCase()=="string"?document.getElemenById(element):element;
    className=className.replace(/^\s+|\s+$/g,"");
    element.className+=" "+className;
};
/*
 * fonction absente dans ie
 */
if(!Array.prototype.indexOf){
    Array.prototype.indexOf = function(valeur){
        for(var t=0;t<this.length;t++)
            if(this[t] == valeur)
            	return t;
        return -1;
    };
}
if(typeof document.getElementsByClassName == "undefined"){
	function walkTheDOM (node, func) {
		func(node);
		node = node.firstChild;
		while (node) {
			walkTheDOM(node, func);
			node = node.nextSibling;
		}
	};
	document.getElementsByClassName=function(className) {
		var results = [];
		walkTheDOM(document.body, function (node) {
			var a, c = node.className, i;
			if (c) {
				a = c.split(' ');
				for (i=0; i<a.length; i++) {
					if (a[i] === className) {
						results.push(node);
						break;
					}
				}
			}
		});
		return results;
	};
}
function getUrlParamObject(win){
    var thewin=win==null?window:win;
    var urlParams=thewin.location.search.replace(/^\?/,"").split(/\&/g);
    var params = {};
    var splittedKeyVal;
    for(var i=0;i<urlParams.length;i++){
            if (typeof urlParams[i] == "string") {
                    splittedKeyVal = urlParams[i].split(/\=/g);
            }
            params[splittedKeyVal[0]]=splittedKeyVal[1];
    }
    params.getParam=function(param){
    	return typeof this[param]!="undefined"?this[param]:null;
    }
    return params;
};
/* 
 * Cross-browser style extraction, from the JavaScript & DHTML Cookbook
 * <http://www.oreillynet.com/pub/a/javascript/excerpt/JSDHTMLCkbk_chap5/index5.html>
 */
function getElementStyle(elementID, CssStyleProperty) {
    var element = document.getElementById(elementID);
    if (element.currentStyle) {
        return element.currentStyle[toCamelCase(CssStyleProperty)];
    } else if (window.getComputedStyle) {
        var compStyle = window.getComputedStyle(element, '');
        return compStyle.getPropertyValue(CssStyleProperty);
    } else {
        return '';
    }
};

/* 
 * CamelCases CSS property names. Useful in conjunction with 'getElementStyle()'
 * From <http://dhtmlkitchen.com/learn/js/setstyle/index4.jsp>
 */
function toCamelCase(CssProperty) {
    var stringArray = CssProperty.toLowerCase().split('-');
    if (stringArray.length == 1) {
        return stringArray[0];
    }
    var ret = (CssProperty.indexOf("-") == 0)
              ? stringArray[0].charAt(0).toUpperCase() + stringArray[0].substring(1)
              : stringArray[0];
    for (var i = 1; i < stringArray.length; i++) {
        var s = stringArray[i];
        ret += s.charAt(0).toUpperCase() + s.substring(1);
    }
    return ret;
};

/*
 * Disables all 'test' links, that point to the href '#', by Ross Shannon
 */
function disableTestLinks() {
  var pageLinks = document.getElementsByTagName('a');
  for (var i=0; i<pageLinks.length; i++) {
    if (pageLinks[i].href.match(/[^#]#$/)) {
      addEvent(pageLinks[i], 'click', knackerEvent, false);
    }
  }
};

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

function readCookie(name) {
    var cookieCrumbs = document.cookie.split(';');
    var nameToFind = name + '=';
    for (var i = 0; i < cookieCrumbs.length; i++) {
        var crumb = cookieCrumbs[i];
        while (crumb.charAt(0) == ' ') {
            crumb = crumb.substring(1, crumb.length); /* delete spaces */
        }
        if (crumb.indexOf(nameToFind) == 0) {
            return crumb.substring(nameToFind.length, crumb.length);
        }
    }
    return null;
};

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