/** Copyright (C) 2009  Simon ANDRE
 *
 *   This program is free software: you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation, either version 3 of the License, or
 *    (at your option) any later version.
 *
 *    This program is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU General Public License for more details.
 *
 *    You should have received a copy of the GNU General Public License
 *    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */


/** Ce framework est fait par moi même afin de bien comprendre les mecanisme 
 * 	des autres framework javascript. Si vous avez des amelioration, des idées, des recommandations n'hesitez
 * 	à me les faire parvenir à elsilent.hunter[at]gmail.com
 * merçi
 */


// Pour reperer internet explorer
var isIE=function(){
	return /msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent);
	};

//Fonction simplifier pour faire appel à un id du code xhtml 
function $(id){
	var obj;
	if(document.all)
		{
			obj=document.all[id];
		}else 
		{
			obj = document.getElementById(id);
		}
	return obj;}

//Fonction pour recuperer les objets dom par nom de class
function getElementsByClass(className, context) {
    context = context || document;
    if (document.getElementsByClassName) {
        return context.getElementsByClassName(className);
    } else {
        var classElements = [];
        var els = context.getElementsByTagName('*');
        var pattern = new RegExp('(^|\\s)' + className + '(\\s|$)');
        for (i=0, l=els.length; i<l; i++) {
            if (pattern.test(els[i].className)) {
                classElements.push(els[i]);
            }
        }
        return classElements;
    }
}

//addEvent and removeEvent, designed by Aaron Moore
function addEvent(element, listener, handler)
{
	//if the system is not set up, set it up, and
	// store any outside script's event registration in the first handler slot
	if(typeof element[listener] != 'function' || 
	typeof element[listener + '_num'] == 'undefined'){
		element[listener + '_num'] = 0;
		if(typeof element[listener] == 'function'){
			element[listener + 0] = element[listener];
			element[listener + '_num']++;
		}
		element[listener] = function(e){
			var r = true;
			e = (e) ? e : window.event;
			for(var i = 0; i < element[listener + '_num']; i++)
				if(element[listener + i](e) === false) r = false;
			return r;
		};
	}
	//if handler is not already stored, assign it
	for(var i = 0; i < element[listener + '_num']; i++)
		if(element[listener + i] == handler) return;
	element[listener + element[listener + '_num']] = handler;
	element[listener + '_num']++;
}

function removeEvent(element, listener, handler)
{
	//if the system is not set up, or there are no handlers to remove, exit
	if(typeof element[listener] != 'function' || 
	typeof element[listener + '_num'] == 'undefined' ||
	element[listener + '_num'] == 0) return;
	//loop through handlers,
	//  if target handler is reached, begin overwriting each
	//  handler with the handler in front of it until one before the last
	var found = false;
	for(var i = 0; i < element[listener + '_num']; i++){
		if(!found)
			found = element[listener + i] == handler;
		if(found && (i+1) < element[listener + '_num'])
			element[listener + i] = element[listener + (i+1)];
	}
	//if handler was found, decrement the handler count
	if(found)
		element[listener + '_num']--;
}

function fireEvent(element,event)
{
	if(document.createEventObject){
		//For ie
		var evt = document.createEventObject();
		return element.fireEvent('on'+event.evt);
	}
	else{
		//dispatch event for firefox others
		var evt = document.createEvent("HTMLEvents");
		evt.initEvent(event,true,true); //event type,bubbling,cancelable
		return !element.dispatchEvent(evt);
	}
}

// Pour changer l'opacite d'un element sur les differents navigateurs
function setOpacity(obj,opacity){
	opacity=(opacity==100)?99.999:opacity;
	obj.style.filter="alpha(opacity:"+opacity+")";
	obj.style.KHTMLOpacity=opacity/100;
	obj.style.MozOpacity=opacity/100;
	obj.style.opacity=opacity/100;}


// +----------------------------------------------------------------+ 
// ¦ array functions that are missing in ie 5.0      ¦ 
// ¦ Author: Cezary Tomczak [www.gosu.pl]       ¦ 
// ¦ Free for any use as long as all copyright messages are intact. ¦ 
// +----------------------------------------------------------------+ 

// Removes the last element from an array
// and returns that element.
if (!Array.prototype.pop) {
Array.prototype.pop = function() {
var last;
if (this.length) {
last = this[this.length - 1];
this.length -= 1;
}
return last;
};
}

 // the new length of the array.
if (!Array.prototype.push) {
Array.prototype.push = function() {
for (var i = 0; i < arguments.length; ++i) {
this[this.length] = arguments[i];
}
return this.length;
};
}

function getStyle(obj,jsprop,cssprop)
{
	if(obj.currentStyle) {
		return obj.currentStyle[jsprop];
	}else if(window.getComputedStyle){
		return document.defaultView.getComputedStyle(obj,null).getPropertyValue(cssprop);
	}else
	{
		return null;
	}
}
String.prototype.trim = function()
{
	return this.replace(/^\s+/, "").replace(/\s+$/, "");
};
function changeBorder()
{
	this.style.border = "2px solid #000";
}

function reChangeBorder()
{
	this.style.border = "2px solid #124711";
}
function getEventTarget(e)
{
	 var evt = (e) ? e : window.event;
     var targ = (evt.target) ? evt.target : evt.srcElement;

     if(targ == null) return false;
     if(targ.nodeType == 3)  targ = targ.parentNode;//safari bug

     /*var val = targ.value;*/
     return targ;
}
