
//kco.js

var KCO = KCO || {};

KCO.Event = {};

// Adds an event handler to an element
KCO.Event.addEvent = function(element, eventName, handler)
{
	if (element.addEventListener) { // DOM
		element.addEventListener(eventName, handler, false);
	} else if (element.attachEvent) { // IE
		element.attachEvent('on' + eventName, handler);
	} else { // Other
		element[eventName] = handler;
	}
};

// Gets an event consistently from DOM and IE event models
KCO.Event.getEvent = function(e)
{
	return e || window.event;
};

// Returns the target of an event consistently from DOM and IE event models
KCO.Event.getTarget = function(e)
{
	var e = e || KCO.Event.getEvent(e);
	return e.target || e.srcElement;
};



// Utilities
KCO.Utils = {};

// Walks through child nodes of element
KCO.Utils.walkTheDOM = function(node, func) {
	func(node);
	node = node.firstChild;
	while (node) {
		KCO.Utils.walkTheDOM(node, func);
		node = node.nextSibling;
	}
}

// Returns the parent node matching a particular filter (if it exists)
KCO.Utils.getParentNode = function(node, filter, level)
{
	var level = level || 0;
	var parent = node.parentNode;
	if (parent) {
		if (parent.nodeName == filter) {
			if (level > 0)
				parent = arguments.callee(parent, filter, level - 1);
		} else {
			parent = arguments.callee(parent, filter, level);
		}
	}
	return parent;
};

// Returns all child nodes of element of the specified class
KCO.Utils.getElementsByClass = function(element, className) {
	var elements = [];
	function checkClass (node) {
		if (node.className == className) {
			elements.push(node);
		}
	}
	KCO.Utils.walkTheDOM(element, checkClass);
	return elements;
}

// Adds a class to an element	
KCO.Utils.addClass = function(element, className)
{
	element.className += (' ' + className);
};

// Removes a class from an element	
KCO.Utils.removeClass = function(element, className)
{
	element.className = element.className.replace(new RegExp(' *' + className), '');
};

// Generates a random number beteen minimum and maximum
KCO.Utils.randomNumber = function(minimum, maximum)
{
	var minimum = minimum || 0;
	var maximum = maximum || 1;
	return Math.floor(Math.random() * (maximum - minimum + 1)) + minimum;
};

// Random sort function to pass to Array.sort()
KCO.Utils.randomSort = function(a, b)
{ 
	return KCO.Utils.randomNumber(-1, 1);
};


// Forms
KCO.Forms = {};

KCO.Forms.isEmpty = function (field) {
	if (field.value) {
		return false;
	}
	return true;
}

KCO.Forms.isValidEmail = function (field) {
	var email = field.value;
	if(/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/.test(email)) {
		return true;
	}
	return false;
}
