var _ua = navigator.userAgent.toLowerCase();
var browser = {
  version: (_ua.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
  opera: /opera/i.test(_ua),
  msie: (!this.opera && /msie/i.test(_ua)),
  msie6: (!this.opera && /msie 6/i.test(_ua)),
  mozilla: /firefox/i.test(_ua),
  chrome: /chrome/i.test(_ua),
  safari: (!(/chrome/i.test(_ua)) && /webkit|safari|khtml/i.test(_ua)),
  iphone: /iphone/i.test(_ua)
}

function addEvent(element, type, handler) {
  if (!handler.$$guid) handler.$$guid = addEvent.guid++;
  if (!element.events) element.events = {};
  var handlers = element.events[type];
  if (!handlers) {
    handlers = element.events[type] = {};
    if (element["on" + type]) {
      handlers[0] = element["on" + type];
    }
  }
  handlers[handler.$$guid] = handler;
  element["on" + type] = handleEvent;
};

addEvent.guid = 1;

function removeEvent(element, type, handler) {
  if (element.events && element.events[type]) {
    delete element.events[type][handler.$$guid];
  }
};

function handleEvent(event) {
  event = event || window.event;
  var handlers = this.events[event.type];
  for (var i in handlers) {
    this.$$handleEvent = handlers[i];
    this.$$handleEvent(event);
  }
};

function onLoad (f) {
	//addEvent(window, 'load', f);
	jQuery(f);
}

// function onReady (f) {
// 	if (onReady.done) return f();
// 	if (onReady.timer) {
// 		onReady.ready.push(f);
// 	} else {
// 		addEvent(window, 'load', isDOMReady);
// 		onReady.ready = [f];
// 		onReady.timer = setInterval(isDOMReady, 13);
// 	}
// }

// function isDOMReady () {
// 	if (domReady.done) return false;
// 	if (document && document.getElementsByTagName && document.getElementById && document.body) {
// 		clearInterval(onReady.timer);
// 		onReady.timer = null;
// 		for (var i=0; i<onReady.ready.length; i++) {
// 			onReady.ready[i]();
// 		}
// 		onReady.ready = null;
// 		onReady.done = true;
// 	}
// }

function next (elem) {
	do {
		elem = elem.nextSibling;
	} while (elem && elem.nodeType != 1);
	return elem;
}

function prev (elem) {
	do {
		elem = elem.previousSibling;
	} while (elem && elem.nodeType != 1);
	return elem;
}

function first (elem) {
	elem = elem.firstChild;
	return elem && elem.nodeType != 1 ?
		next(elem) : elem;
}

function last (elem) {
	elem = elem.lastChild;
	return elem && elem.nodeType != 1 ?
		prev(elem) : elem;
}


function parent (elem, num) {
	if (!elem) return false;
	num = (num || 1);
	for (var i=0; i<num; i++) 
		if (elem != null) { elem = elem.parentNode };
	return elem;
}

function parentElem (elem, num) {
	if (!elem) return false;
	num = (num || 1);
	for (var i=0; i<num; i++) 
		if (elem != null) { elem = elem.parentNode };
	return elem;
}

function create (elem) {
	return document.createElementNS ?
		document.createElementNS('http://www.w3.org/1999/xhtml', elem) :
		document.createElement(elem);
}

function destroy(elem) {
	return elem.parentNode.removeChild(elem);
}

function before (elem, beforeElem) {
	parentElem(beforeElem).insertBefore(elem, beforeElem);	
}

function append (parent, elem) {
	parent.appendChild(elem);
}

function $(name) {
	return document.getElementById(name);
}

function byId(name) {
	return document.getElementById(name);
}

function tag(name,node) {
	return (node || document).getElementsByTagName(name);
}

function css(name,node,tag) {
    var classElements = new Array();
    if ( node == null )
        node = document;
    if ( tag == null )
        tag = '*';
    var els = node.getElementsByTagName(tag);
    var elsLen = els.length;
    var pattern = new RegExp('(^|\\s)'+name+'(\\s|$)');
    for (i = 0, j = 0; i < elsLen; i++) {
        if ( pattern.test(els[i].className) ) {
            classElements[j] = els[i];
            j++;
        }
    }
    return classElements;
}

function isVisible(elem) {
	if (elem.style.display == 'none') {
		return false;
	}
	return true;
}

function show(elem,display) {
	display = display || 'block';
	elem.style.display = elem.$oldDisplay || 'block';
}

function hide(elem) {
	if (elem.style.display != 'none') {
		elem.$oldDisplay = elem.style.display;
	}
	elem.style.display = 'none';
}

function toggle(elem) {
	if (isVisible(elem)) {
		hide(elem);
	} else {
		show(elem);
	}
}

String.prototype.capitalize = function(){
    return this.replace(/\w+/g, function(a){
        return a.charAt(0).toUpperCase() + a.substr(1).toLowerCase();
    });
};

String.prototype.rtrim = function() {
	return this.replace(/(\s+$)/g, "");
};


String.prototype.ltrim = function() {
	return this.replace(/(^\s+)/g, "");
};

String.prototype.trim = function() {
	return this.replace(/(^\s+)|(\s+$)/g, "");
};

