
// **** Common functions **** \\
function $() {
	var elements = [];
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}
function addEvent( obj, type, fn, useCapture ) {
	if (obj.addEventListener) {
		obj.addEventListener( type, fn, useCapture );
		EventCache.add(obj, type, fn);
	}
	else if (obj.attachEvent) {
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
		EventCache.add(obj, type, fn);
	}
	else {
		obj["on"+type] = obj["e"+type+fn];
	}
}

var EventCache = function(){
	var listEvents = [];
	return {
		listEvents : listEvents,
		add : function(node, sEventName, fHandler){
			listEvents.push(arguments);
		},
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				};
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				};
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				};
				item[0][item[1]] = null;
			};
		}
	};
}();
addEvent(window,'unload',EventCache.flush);


function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	}	else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}
function getElementsByClassName(className, container) {
	container = container||document;
	var all = container.all||container.getElementsByTagName('*');
	var matchedElements = [];
	var classes = '';
	for(var k=0;k<all.length;k++){
		var elemClasses = all[k].className;
		if(elemClasses){
			elemClasses = elemClasses.split(' ');
			for(var kk=0;kk<elemClasses.length;kk++)
				if(elemClasses[kk] == className)
					matchedElements.push(all[k]);
		}
	}
	return matchedElements;
}

String.prototype.string = function(l) { var s = '', i = 0; while (i++ < l) { s += this; } return s; }
String.prototype.zf = function(l) { return '0'.string(l - this.length) + this; }
Number.prototype.zf = function(l) { return this.toString().zf(l); }

// a global month names array
var gsMonthNames = new Array(
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'
);
// a global day names array
var gsDayNames = new Array(
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday'
);
// the date format prototype
Date.prototype.format = function(f)
{
    if (!this.valueOf())
        return '&nbsp;';

    var d = this;

    return f.replace(/(yyyy|mmmm|mmm|mm|dddd|ddd|dd|hh|nn|ss|a\/p)/gi,
        function($1)
        {
            switch ($1.toLowerCase())
            {
            case 'yyyy': return d.getFullYear();
            case 'mmmm': return gsMonthNames[d.getMonth()];
            case 'mmm':  return gsMonthNames[d.getMonth()].substr(0, 3);
            case 'mm':   return (d.getMonth() + 1).zf(2);
            case 'dddd': return gsDayNames[d.getDay()];
            case 'ddd':  return gsDayNames[d.getDay()].substr(0, 3);
            case 'dd':   return d.getDate().zf(2);
            case 'hh':   return ((h = d.getHours() % 12) ? h : 12).zf(2);
            case 'nn':   return d.getMinutes().zf(2);
            case 'ss':   return d.getSeconds().zf(2);
            case 'a/p':  return d.getHours() < 12 ? 'a' : 'p';
            }
        }
    );
}

// ====== Cookies ======


// Form Validation Functions

function validateText(field, regex, message){
	if(field['value'] == undefined) return false;
	var value = field.value;
	if(value && value.match(regex)) return true;
	field.focus();
	alert(message);
	return false;
}

function validateRadio(field, message){
	if(field[0] == undefined) return false;
	if(field[0]['type'] != "radio") return false;
	var radioSelected = false;
	for(var i = 0, len = field.length; i < len; i++)
		if(field[i].checked){ radioSelected = true; break; }
	if(radioSelected) return true;
	field[0].focus();
	alert(message);
	return false;
}

