var utils = {
	name: 'utils',
	getMin : function(values) {
		var i;
		var min = 100;

		for (i = 0; i < values.length; i++) {
			if (values[i] < min) {
				min = values[i];
			}
		}
		min -= 5;

		var floor = min - (min % 5);
		if (floor < 0) {
			floor = 0;
		}
		return floor;
	},
	getMax : function(values) {
		var i;
		var max = 0;

		for (i = 0; i < values.length; i++) {
			if (values[i] > max) {
				max = values[i];
			}
		}
		max += 5;

		var roof = max + (5 - (max % 5));
		if (roof > 110) {
			roof = 110;
		}
		return roof;
	},
	getScale: function(values) {
		var max = 0;
		for(i=0; i<values.length; i++) {
			var value = Math.abs(values[i]);
			if (value > max) {
				max = value;
			}
		}
		var roof = max + (5 - (max % 5));
		if (roof > 110) {
			roof = 100;
		}
		return roof;
	},
	getPercentages: function(values) {
		var percentages = [];
		var total = 0;
		for (i = 0; i<values.length; i++) {
			total += values[i];
		}
		for (i = 0; i<values.length; i++) {
			percentages[i] = Math.round(100 * values[i] / total);
		}
		return percentages;
	},
	unescapeHTML: function(html) {
		return html.replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">");
	},
	useLoadingMessage: function(message) {
		var loadingMessage;
		if (message) {
			loadingMessage = message;
		}
		else {
			loadingMessage = "Loading";
		}

		dwr.engine.setPreHook( function() {
			var disabledZone = dojo.byId('disabledZone');
			if (!disabledZone) {
				disabledZone = document.createElement('div');
				disabledZone.setAttribute('id', 'disabledZone');
				disabledZone.style.position = "absolute";
				disabledZone.style.zIndex = "1000";
				disabledZone.style.left = "0px";
				disabledZone.style.top = "0px";
				disabledZone.style.width = "100%";
				disabledZone.style.height = "100%";
				document.body.appendChild(disabledZone);
				var messageZone = document.createElement('div');
				messageZone.setAttribute('id', 'messageZone');
				messageZone.style.position = "absolute";
				messageZone.style.top = "10px";
				messageZone.style.right = "10px";
				messageZone.style.background = "red";
				messageZone.style.color = "white";
				messageZone.style.fontFamily = "Verdana,Helvetica,sans-serif";
				messageZone.style.padding = "5px";
				disabledZone.appendChild(messageZone);
				var text = document.createTextNode(loadingMessage);
				messageZone.appendChild(text);
			} else {
				dojo.byId('messageZone').innerHTML = loadingMessage;
				disabledZone.style.visibility = 'visible';
			}
		});

		dwr.engine.setPostHook( function() {
			dojo.byId('disabledZone').style.visibility = 'hidden';
		});
	},
	mapify: function(map) {
		if (map.get !== undefined) {
		    return map;
		}
		else if (map.keys === undefined || map.values === undefined) {
		    alert("mapify only works on maps");
		    return map;
		}

		map.get=function(key) {
		    var i;
		    var found=-1;
		    for (i=0; i<map.keys.length; i++) {
			if (map.keys[i]===key) {
			    found=i;
			    break;
			}
		    }

		    return found===-1?null:map.values[found];
		};

		return map;
	},
	camelCase: function(str) {
		if (str===undefined || str===null) {
		    return "";
		}
		var newStr="";
		var len=str.length;
		var newWord=true;
		for (var i=0; i<len; i++) {
		    if (str.charAt(i)===' ' || str.charAt(i)==='/' || str.charAt(i)==='-') {
				newWord=true;
				newStr+=str.charAt(i);
				continue;
		    }
		    else if (newWord===true) {
		    	newStr+=str.charAt(i).toUpperCase();
		    }
		    else {
		    	newStr+=str.charAt(i).toLowerCase();
		    }
		    newWord=false;
		}
		return newStr;
	},
	trim: function(str) {
		if (str===undefined || str===null) {
			return "";
		}
		return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
	},
	noneify: function(str) {
		return str === undefined || str ===null ? '' : str;
	}
};
