var Kernel = {
	
	addEvent: function(obj, evType, fn, useCapture){
		if(obj.addEventListener){
			obj.addEventListener(evType, fn, useCapture);
			return true;
		}else if(obj.attachEvent){
			var r = obj.attachEvent('on'+evType, fn);
			return r;
		}else{
			return false;
		}
	},
	
	getElementByClass: function(className, node){
		if(!node) node=document;
		var refTags = document.all ? node.all : node.getElementsByTagName("*");
		var retVal = new Array();
		for(var z=0;z<refTags.length;z++){
			if(refTags[z].className==className)
				retVal.push(refTags[z]);
		}
		return retVal;
	},
	
	getElementByClassEnh: function(className, node){
		if(!node) node=document;
		var refTags = document.all ? node.all : node.getElementsByTagName("*");
		var retVal = new Array();
		for(var z=0;z<refTags.length;z++){		
			if(refTags[z].className.indexOf(className)>=0) {
				retVal.push(refTags[z]);
			}
		}
		return retVal;
	},	
	
	getLabelsByFor: function(str){
		var labels = document.getElementsByTagName('label');
		for(var j=0;j<labels.length;j++){
			if(labels[j].htmlFor==str){
				return labels[j];
				break;
			}
		}
	},
	
	getFormIndividualElements: function(node){
		if(!node) node=document;
		var refTags = document.all ? node.all : node.getElementsByTagName("*");
		var retVal = new Array();
		for(var t=0;t<refTags.length;t++){
			if(refTags[t].tagName=='INPUT'||refTags[t].tagName=='TEXTAREA'||refTags[t].tagName=='SELECT'){
				if(refTags[t].getAttribute('type')!='checkbox')
					retVal.push(refTags[t]);
			}
		}
		return retVal;
	},
	
	getFormGroupedElements: function(node){
		if(!node) node=document;
		var refTags = document.all ? node.all : node.getElementsByTagName("*");
		var retVal = new Array();
		var actualLabel = '';
		for(var t=0;t<refTags.length;t++){
			if(refTags[t].getAttribute('type')=='checkbox'){
				var l = refTags[t].getAttribute('name');
				if(l!=actualLabel){
					retVal.push(l);
				}
				actualLabel = l;		
			}
		}
		return retVal;
	},
	
	getElementsByName: function(name, node){
		if(!node) node=document;
		var refTags = document.all ? node.all : node.getElementsByTagName("*");
		var retVal = new Array();
		for(var t=0;t<refTags.length;t++){
			if(refTags[t].getAttribute('name')==name)
				retVal.push(refTags[t]);
		}
		return retVal;		
	},
	
	addStyleSheet: function(stylesheet, mtype){
		tagsHead = document.getElementsByTagName('head');
		for(var h=0;h<tagsHead.length;h++) {tagHead = tagsHead[h]}
		newStyleSheet = document.createElement('link');
		attrHREF = document.createAttribute('href');
		attrREL = document.createAttribute('rel');
		attrTYPE = document.createAttribute('type');
		attrMEDIA = document.createAttribute('media');
		attrHREF.value = stylesheet;
		attrREL.value = "stylesheet";
		attrTYPE.value = "text/css";
		attrMEDIA.value = mtype;
		newStyleSheet.setAttributeNode(attrHREF);
		newStyleSheet.setAttributeNode(attrREL);
		newStyleSheet.setAttributeNode(attrTYPE);	
		newStyleSheet.setAttributeNode(attrMEDIA);				
		tagHead.appendChild(newStyleSheet);
	},
	
	removeStyleSheet: function(sheet){
		links = document.getElementsByTagName('link');
		for(var l=0;l<links.length;l++) {
			if(links[l].getAttribute('href')==sheet){
				lnk = links[l];break;
			}
		}
		tagsHead = document.getElementsByTagName('head');
		for(var h=0;h<tagsHead.length;h++) {tagHead = tagsHead[h]}		
		tagHead.removeChild(lnk);
	},
	
	getAbsolutePos: function(el) {
		var SL = 0, ST = 0;
		var is_div = /^div$/i.test(el.tagName);
		if (is_div && el.scrollLeft)
			SL = el.scrollLeft;
		if (is_div && el.scrollTop)
			ST = el.scrollTop;
		var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST };
		if (el.offsetParent) {
			var tmp = this.getAbsolutePos(el.offsetParent);
			r.x += tmp.x;
			r.y += tmp.y;
		}
		return r;
	},
	
	stringTrim: function(string){
		string = string.replace( /^\s+/g, "" );
		return string.replace( /\s+$/g, "" );
	},
	
	getCookieVal: function (offset) {
         var endstr = document.cookie.indexOf (";", offset);
         if (endstr == -1)
         endstr = document.cookie.length;
         return unescape(document.cookie.substring(offset, endstr));
	},

	getCookie: function (name) {
         var arg = name + "=";
         var alen = arg.length;
         var clen = document.cookie.length;
         var i = 0;
         while (i < clen) {
               var j = i + alen;
               if (document.cookie.substring(i, j) == arg)
                  return KRNL.getCookieVal (j);
               i = document.cookie.indexOf(" ", i) + 1;
               if (i == 0) break;
         }
         return null;
	},

	setCookie: function (name, value) {
         var argv = KRNL.setCookie.arguments;
         var argc = KRNL.setCookie.arguments.length;
         var path = (argc > 3) ? argv[3] : null;
         var domain = (argc > 4) ? argv[4] : null;
         var secure = (argc > 5) ? argv[5] : false;
		 var expires = new Date();
		 expires.setTime(expires.getTime() + 24*60*60*1000*365*3);
         document.cookie = name + "=" + escape (value) + "; expires=" + expires.toGMTString() + ((path == null) ? "" : ("; path=" + path)) + ((domain == null) ? "" : ("; domain=" + domain)) + ((secure == true) ? "; secure" : "");
	},

	deleteCookie: function (name) {
         var exp = new Date();
         exp.setTime (exp.getTime() - 1);
         var cval = KRNL.getCookie (name);
         document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
	}
	
}


//---------------------------------------------------------------------------------------------------------------------------------------
if(!Array.prototype.push){
	Array.prototype.push = function(){
		var i;
		for(i=0;j=arguments[i];i++) this[this.length] = j;
		return this.length;
	}
}	


