function Utils() {

	
	var instance = this;
	
	this.isNumber = function(n) {
	  return !isNaN(parseFloat(n)) && isFinite(n);
	};
	
	this.stripslashes = function(str) {
		str=str.replace(/\\'/g,'\'');
		str=str.replace(/\\"/g,'"');
		str=str.replace(/\\0/g,'\0');
		str=str.replace(/\\\\/g,'\\');
		return str;
	};
	
	this.htmlEntities = function(str) {
	    return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
	};

	this.escapeHTML = function(str) {
		return $("<div />").text(str).html().replace(/"/g, '&quot;');
	};

	this.unescapeHTML = function(str) {
		return $("<div />").html(str).text();
	};

	this.getUniqueTimestamp = function() {
		var time = new Date().getTime();
		while (time == new Date().getTime()); // Wait until the next tick to make sure the timestamp has not been used before
		return new Date().getTime();
	};

	this.getUrlParameter = function(name) {
	    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
	    var regexS = "[\\?&]" + name + "=([^&#]*)";
	    var regex = new RegExp(regexS);
	    var results = regex.exec(window.location.href);
	    if (results == null)
	        return "";
	    else
	        return results[1];
	};

	this.insertParam = function(key, value) {
	    key = escape(key); value = escape(value);

	    var kvp = document.location.search.substr(1).split('&');

	    var i = kvp.length; var x; while (i--) {
	        x = kvp[i].split('=');

	        if (x[0] == key) {
	            x[1] = value;
	            kvp[i] = x.join('=');
	            break;
	        }
	    }

	    if (i < 0) { kvp[kvp.length] = [key, value].join('='); }

	    //this will reload the page, it's likely better to store this until finished
	    document.location.search = kvp.join('?');
	};

	/* get past date */
	this.getPastDate = function(datetime) {
	    var now = new Date();
	    var year = now.getFullYear();
	    var month = now.getMonth() + 1;
	    var date = now.getDate();
	    var hour = now.getHours();
	    var minute = now.getMinutes();

	    var dateTimeArray = datetime.split("T");
	    var dateArray = dateTimeArray[0].split("-");
	    var pastYear = dateArray[0];
	    var pastMonth = dateArray[1];
	    var pastDate = dateArray[2];

	    var timeArray = dateTimeArray[1].split(":");
	    var pastHour = timeArray[0];
	    var pastMinute = timeArray[1];

	    var y = year - pastYear;
	    var mt = month - pastMonth;
	    var d = date - pastDate;
	    var h = hour - pastHour;
	    var mi = minute - pastMinute;

	    var completed = false;
	    var str = "";
	    if (y > 0 && !completed) {
	        if (y == 1) {
	            str += y + " year ";
	        } else {
	            str += y + " years ";
	        }
	        completed = true;
	    }

	    if (mt > 0 && !completed) {
	        if (mt == 1) {
	            str += mt + " month ";
	        } else {
	            str += mt + " months ";
	        }
	        completed = true;
	    }

	    if (d > 0 && !completed) {
	        if (d == 1) {
	            str += d + " day ";
	        } else {
	            str += d + " days ";
	        }
	        completed = true;
	    }

	    if (h > 0 && !completed) {
	        if (h == 1) {
	            str += h + " hour ";
	        } else {
	            str += h + " hours ";
	        }
	        completed = true;
	    }

	    if (mi > 0 && !completed) {
	        if (mi == 1) {
	            str += mi + " minute ";
	        } else {
	            str += mi + " minutes ";
	        }
	        completed = true;
	    }

	    str += "ago";
	    return str;

	};
	
	this.addOverlay = function() {
	    $("body").prepend("<div id=\"overlay\">&nbsp;</div>");
	    var height = ($("body").height() > $(window).height() ? $("body").height() : $(window).height());
	    $("#overlay").css("opacity", "0.8").css("z-index", "2000").css("background-color", "#000000").css("width", "100%").css("height", height + "px").css("position", "absolute");
	}


	this.removeOverlay = function() {
	    $("#overlay").fadeTo(100, 0, function () {
	        $(this).remove();
	    });
	}
	
}

var utils = new Utils();

