Utility = {

	//BEGIN service methods
	getPars: function(p,extendedPars){
		var pars = {}
		Object.extend(pars,p)
		if(extendedPars) Object.extend(pars,extendedPars)
		return Transform.toQueryString(pars);
	},
	
	callService: function(pars){
		var call = new Ajax.Request(pars.service,{
			parameters: pars.pars,
			method: pars.method,
			onComplete:pars.onComplete
		});
	},
	
	jsonFixer: function(string){
		string = string.replace(/,+/g,",")
		string = string.replace(/\[,/g,"[")
		string = string.replace(/,]/g,"]")
		string = string.replace(/,}/g,"}")
		string = string.replace(/{,/g,"{")
		string = string.replace(/:,/g,':"",')
		string = string.replace(/":}/g, '":""}')
		return string
	},
	
	evalJSON: function(string){
		//try{
			var obj = string.exe()
		//}catch(e){
			//var obj = Utility.jsonFixer(string).exe()
		//}
		return obj
	},
	//END service methods
	
	//BEGIN Array manipulations
	stripDups: function(ary){
		//get dups next to each other
		ary.DESC()
		//remove the dups
		var temp = []
		for(var i=0; ary.length>i; i++){
			if(ary[i] !== ary[i+1]){
				temp.push(ary[i])
			}
		}
		return temp
	},
	
	valTest: function(ary,val,parameter){
		var valTest = false
		looping:
		for(var i=0; i<ary.length; i++ ){
			if(parameter){
				if(ary[i][parameter] == val){
					valTest = {key:i,value:ary[i]}
					break looping
				}
			}else{
				if(ary[i] == val){
					valTest = {key:i,value:ary[i]}
					break looping
				}
			}
		}
		return valTest
	},
	
	valGreater: function(ary,val,parameter){
		var valTest = false
		looping:
		for(var i=0; i<ary.length; i++ ){
			if(ary[i][parameter] < val){
				valTest = {key:i,value:ary[i]}
				break looping
			}
		}
		return valTest
	},
	//END Array manipulations
	
	truncate: function(string,trc){
		if(string.length > trc-3){
			string = string.substring(0,trc-3) + '...'
		}
		return string
	},
	
	//BEGIN object manipulations
	countObject: function(obj){
		var i = 0
		for(p in obj){
			i++
		}
		return i
	},
	//END object manipulations
	
	//table cells
	matchCellHeights: function(){
		for(var i=0; i<arguments.length; i++){
			for(var j=0; j<arguments[i].getElementsByTagName('tr').length; j++){
				var thisHeight = parseInt(arguments[i].getElementsByTagName('tr')[j].getElementsByTagName('td')[0].offsetHeight)
				
				if(arguments[i+1]){
					var nextHeight = parseInt(arguments[i+1].getElementsByTagName('tr')[j].getElementsByTagName('td')[0].offsetHeight)
				
					if(nextHeight>thisHeight){
						arguments[i].getElementsByTagName('tr')[j].getElementsByTagName('td')[0].style.height = nextHeight + 'px'
					}else if(nextHeight<thisHeight){
						arguments[i+1].getElementsByTagName('tr')[j].getElementsByTagName('td')[0].style.height = thisHeight + 'px'
					}
				}
			}
		}
	}
	
}