// JavaScript Document


var Utils = {
	popUp: function (source, width, height) {
		if(!width) width = 900;
		if(!height) height = 1000;
		
		window.open(source ,"_blank","width="+width+",height="+height+",resizable,scrollbars");
	},
	
	//Addition. akorkki 8/5/2008 function to add onload events unobtrusively
	addLoadEvent: function(func) {
		var oldOnLoad = window.onload;
		if (typeof window.onload != 'function') {
			window.onload = func;
		} else {
			window.onload = function() {
				if (oldOnLoad) {
					oldOnLoad();
				}
				func();
			}
		}
	},
	
	/*showErrorDialog: function(messageText) {
        dialog = new Dialog('errorDialog', 'System Error Occured');
        
        content = new Element('div', { });
        content.setStyle({
            padding: '5px'
        });
        
        message = new Element('p' , { });
        message.innerHTML = messageText;
        content.appendChild(message);
        
		//Addition. akorkki 8/19/2008 bind used functions to the proper scope
		var closeFunction = dialog.close.bind(dialog);
		var confirmAndCloseFunction = function() { confirmFunction(); closeFunction(); };
        
        var okButton = new ImgButton('okButton', "Ok", "images/UI/Icons/apply.png");
        okButton.element.observe('click', closeFunction);
        okButton.element.setStyle({
			marginLeft: '270px'
        });

        content.appendChild(okButton.element);
        
        dialog.setContent(content);
        dialog.render();
	},*/
	
	JSON: {
		//Addition. tcoffield 8/20/2008 Sort a json object based on key
		sort: function(jsonObject, columnKey, direction){
			columnKey || 'key'; direction || 'ascending';
			
			var sortedObject = Array();
			var tmpObject = Array();
			var sortingArray = Array();
			
			var columns = Utils.JSON.automapColumns(jsonObject);

			jsonObject.each(function(jsonRecord) {
				var key = jsonRecord[columnKey].toString().toLowerCase();
				tmpObject[key] = jsonRecord;
				sortingArray.push(key);
			});

			sortingArray.sort();
			if(!(direction=='ascending')){
				sortingArray.reverse();
			}
			
			for(var x=0; x < sortingArray.length; x++){
				sortedObject.push( tmpObject[ sortingArray[x] ] );
			}
			
			tmpObject = null;
			sortingArray = null;
			columns = null; 
                        
			return sortedObject;
		},
		
		//Addition. jbethke 8/10/2008  Filter records by filter params
		filter: function(jsonObject, filterParams) {
			var filterParams = filterParams || Object();
			var filterResult = Array();
			
			var columns = Utils.JSON.automapColumns(jsonObject);
			jsonObject.each(function(jsonRecord) {
				var rowGood = true;
				
				columns.each(function(column) {
					var paramValue = eval("filterParams."+column.key);
					
					if(rowGood && paramValue) {
						var columnValue = jsonRecord[column.key] || "";
						columnValue = columnValue.toString().toLowerCase();
						if(!columnValue.match(paramValue.toLowerCase())) rowGood = false;
//						alert(paramValue + " - " + columnValue + " - " + rowGood);
					}
				});
				if(rowGood) filterResult.push(jsonRecord);
			});
			
			return filterResult;
		},
	
		//Addition. akorkki 8/4/2008 function to convert a json string to a useful object
		deserialize: function(jsonString) {
			var json = Utils.JSON.clean(jsonString).evalJSON(true);
			
			var results = new Array();
			for(var row = 0; row < json.DATA.length; row++) {
				results[row] = {};
				for(var col = 0; col < json.COLUMNS.length; col++) {
					results[row][json.COLUMNS[col].toLowerCase()] = json.DATA[row][col];
				}
			}
			
			return results;
		},
		
		//Addition. jbethke 8/8/2008  Prepare standard map of columns in JSON object
		automapColumns: function(jsonObject) {
			var columnMap = Array();
			
			if(jsonObject.length == 0) return columnMap;
			
			// derive columns from first row
			for(var column in jsonObject[0]) {
				columnMap.push({key: column, label: column});
			}
			
			return columnMap;
		},
		
		clean: function(jsonString) {
			return jsonString.strip().replace(/\n/g, '');
		}
	}
};

