/*
This function can be used to add unlimited window.onload events.
*/
function addLoadEvent(func) {
    var oldonload = window.onload;
        if (typeof window.onload != 'function') {
            window.onload = func;
        } else {
            window.onload = function() {
            if (oldonload) {
                oldonload();
            }
            func();
        }
    }
}

/*
This function is used to disable the form to help prevent 
double submits.

Usage: 
<form onsubmit="submitAndDisableForm(this);return void;">
*/
function submitAndDisableForm(form)
{
    form.submit();
    var elements = form.elements();
    for(var i=0;i<elements.length;i++) {
        elements[i].disabled=true;
    }
}

/*
This function can be used to disable the "Enter" key for 
stricter control over forms.
Usage:
document.onkeypress = disableEnterKey;
*/
function disableEnterKey(e)
{
     var key;
     if(window.event)
          key = window.event.keyCode;     //IE
     else
          key = e.which;     //firefox

     if(key == 13)
          return false;
     else
          return true;
}

function number_format( number, decimals, dec_point, thousands_sep ) {
	var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;
	var d = dec_point == undefined ? "." : dec_point;
	var t = thousands_sep == undefined ? "," : thousands_sep, s = n < 0 ? "-" : "";
	var i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;

	return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
}

function moveOnMax(field, nextFieldId)
{
    //alert(field.value.length+':'+field.maxlength);
	if(field.value.length >= field.maxlength) {
		document.getElementById(nextFieldId).focus();
	}   
}

function addCommas(nStr)
{
	nStr += ''; 
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : ''; 
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}   
	return x1 + x2; 
}

CharacterLimit = function(limit, field, track)
{
	this.limit = limit;
	this.field = field;
	this.track = track || false;

	var tmp = this;
	this.field.onkeyup = function() { tmp.update(); }

	this.update = function() {
		
		if(this.field.value.length > this.limit) {
			this.field.value = this.field.value.substring(0, this.limit);
			alert('Character limit has been reached.');
		}

		if(this.track) {
			this.track.innerHTML = '' + this.limit - this.field.value.length;
		}
	}
}

document.getElementsByClassName = function(cl) {
	var retnode = [];
	var myclass = new RegExp('\\b'+cl+'\\b');
	var elem = this.getElementsByTagName('*');
	for (var i = 0; i < elem.length; i++) {
		var classes = elem[i].className;
		if (myclass.test(classes)) retnode.push(elem[i]);
	}
	return retnode;
}; 

function AjaxRequest(url, callbackFunction) {

	var that=this;
	this.updating = false;

	this.abort = function() {
		if (that.updating) {
			that.updating=false;
			that.AJAX.abort();
			that.AJAX=null;
		}
	}

	this.send = function(passData,postMethod) {

		if(typeof(passData) == 'object') { passData = that.encodeDataObject(passData); }

		if (that.updating) { return false; }
			that.AJAX = null;
			if (window.XMLHttpRequest) {
				that.AJAX=new XMLHttpRequest();
			} else {
				that.AJAX=new ActiveXObject("Microsoft.XMLHTTP");
			}
			if (that.AJAX==null) {
			return false;
		} else {
			that.AJAX.onreadystatechange = function() {
				if (that.AJAX.readyState==4) {
					that.updating=false;
					that.callback(that.AJAX.responseText,that.AJAX.status,that.AJAX.responseXML);
					that.AJAX=null;
				}
			}
			that.updating = new Date();
			if (/post/i.test(postMethod)) {
				var uri=urlCall+'?'+that.updating.getTime();
				that.AJAX.open("POST", uri, true);
				that.AJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				that.AJAX.setRequestHeader("Content-Length", passData.length);
				that.AJAX.send(passData);
			} else {
				var uri=urlCall+'?'+passData+'&timestamp='+(that.updating.getTime());
				that.AJAX.open("GET", uri, true);
				that.AJAX.send(null);
			}
			return true;
		}
	}

	var urlCall = url;
	this.callback = callbackFunction || function () { };

}
AjaxRequest.prototype.objectToString = function(data) {
	var r='',j=0;
	for(var i in data) {
		if(j>0){ r = r + '&'; }
		r = r + i + '=' + data[i];
		j++;
	}
	return r;
}
AjaxRequest.prototype.encodeDataObject = function(data) {
    var pairs = [];
    var regexp = /%20/g;

    for(var name in data) {
        var value = data[name].toString();
        var pair = encodeURIComponent(name).replace(regexp, '+') + '=' +
          encodeURIComponent(value).replace(regexp, '+');
        pairs.push(pair);
    }

    return pairs.join('&');
}
AjaxRequest.prototype.post = function(passData) { this.send(passData, 'POST'); }
AjaxRequest.prototype.get = function(passData) { this.send(passData); }

