// http://sergep.developpez.com/tutoriels/javascript/introduction/?page=page_5#LV-B-2
(function(){

// Constructor
if(typeof jHtml != "undefined"){var _jHtml = jHtml;}
var jHtml = window.jHtml = function(s){return this instanceof jHtml ? this.ini(s) : new jHtml(s);};
if(typeof $ != "undefined"){var _$ = $;}
window.$ = jHtml;

// Prototype
jHtml.fn = jHtml.prototype = {
	ini: function(s){
		e = [];
		if(typeof s  == 'string'){ 
			var Obj = s.substr(1, s.length);
			switch(s.substr(0, 1)){
				case '#':
					e[0] = document.getElementById(Obj);
					break;
				case '.':
					e = getElementsByClassName(Obj);
					break;
				default:
					e = document.getElementsByTagName(s);
			}
		}else{
			e[0] = s;
		}
	},
	length: function(){
		return e.length;
	},
	addClass: function(c){
		for(i=0;i<e.length;i++){
			if(!e[i].className){
				e[i].className = c;
			}else{
				e[i].className  = e[i].className +' '+c;
			}
		}
		return this;
	},
	removeClass: function(c){
		for(i=0;i<e.length;i++){
			var reg = new RegExp('(\\s|^)'+c+'(\\s|$)');
			e[i].className = e[i].className.replace(reg,' ');
		}
		return this;
	},
	haveClass: function(c){
		for(i=0;i<e.length;i++){
			var reg = new RegExp('(\\s|^)'+c+'(\\s|$)');
			if(e[i].className.search(reg) == -1){
				return false;
			}else{
				return true;
			}
		}
	},
	css: function(p,v){
		for(i=0;i<e.length;i++){
			if(document.all){
				e[i].style.setAttribute(p,v);
			}else{
				e[i].setAttribute('style', e[i].getAttribute('style')+';'+p+':'+v);
			}
		}
		return this;
	},
	id: function(){
		return e[0].id;
	},
	toogle: function(){
		for(i=0;i<e.length;i++){
			if(e[i].style.display == 'none'){
				e[i].style.display = '';
			}else{
				e[i].style.display = 'none';
			}
		}
		return this;
	},
	event: function(t,f){
		for(i=0;i<e.length;i++){
			switch(t){
				case 'onclick' : e[i].onclick = f; break;
				case 'onmouseover' : e[i].onmouseover = f; break;
				case 'onmouseout' : e[i].onmouseout = f; break;
				case 'onchange' : e[i].onchange = f; break;
			}
		}
		return this;
	},
	next: function(){
		for(i=0;i<e.length;i++){
			e[i] = e[i].nextSibling;
		}
		return this;
	},
	previous: function(){
		for(i=0;i<e.length;i++){
			e[i] = e[i].previousSibling;
		}
		return this;
	},
	find: function(s){
		f = new Array();
		obj = s.substr(1, s.length);
		switch(s.substr(0, 1)){
			case '#':
				f[0] = document.getElementById(obj);
				break;
			case '.':
			/*
				for(i=0;i<e.length;i++){
					f.join(getElementsByClassName(t[0], '*', e[i]));
				}
				f = getElementsByClassName(t[0], '', e);
				break;
			*/
			default:
				var t = s.split('.');
				if(t[1]==undefined){
					for(i=0; i<e.length; i++){
						if(f.length == 0){
							f = e[i].getElementsByTagName(t[0]);
						}else{
							f = f.concat(e[i].getElementsByTagName(t[0]));
						}
					}
				}else{
					var g = new Array();
					for(i=0; i<e.length; i++){
						if(f.length == 0){
							f = getElementsByClassName(t[1], t[0], e[i]);
						}else{
							f = f.concat(getElementsByClassName(t[1], t[0], e[i]));
						}
					}
				}
		}
		e = f;
		return this;
	},
	child: function(){
		var result = [];
		for(i=0;i<e.length;i++){
			var child = e[i].childNodes;
			for(var c=0; c<child.length; c++){
				result.push(child[c]);
			}
		}
		e = result;
		return this;
	},
	parent: function(){
		for(i=0;i<e.length;i++){
			e[i] = e[i].parentNode;
		}
		return this;
	},
	element: function(p){
		return e[p];
	},
	checked: function(){
		if(e[0].checked){
			return true;
		}else{
			return false;
		}
	},
	html: function(p){
		if(typeof(p) !='undefined'){
			for(i=0;i<e.length;i++){
				e[i].innerHTML = p;
			}
		}else{
			return e[0].innerHTML;
		}
		
		

		return this;
	},
	value: function(p){
		if(typeof(p) !='undefined'){
			e[0].value = p;
		}else{
			return e[0].value;
		}
	}
}

function getElementsByClassName(className, tag, elm){
	var testClass = new RegExp("(^|s)" + className + "(s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var eents = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returneents = [];
	var current;
	var length = eents.length;
	for(var i=0; i<length; i++){
		current = eents[i];
		if(testClass.test(current.className)){
			returneents.push(current);
		}
	}
	return returneents;
}


/*
var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};

*/









})();
