var CashCrate = {
	loadHtml: '<div><img src="lib/images/loading.gif" style="margin-right: 10px;" /><b>%%wait_msg%%</b></div>',
	curPage: false,
	
	loadMulti: function(dest, load_str, sdata)
	{
	    if (!sdata)
	        sdata = {};
	        
	    sdata.load_str = load_str;
	    
	    $.ajax({
	        type: 'GET',
	        url: '/' + dest + '.jsvc',
	        data: sdata,
	        success: CashCrate.loadMultiSuccess
	    });
	
	},
	
	loadMultiSuccess: function(data)
	{
	    //alert(typeof(data));
	    if (typeof(data) == 'object')
	    {
	        for (elem in data)
	        {
	            $('#' + elem).replaceWith(data[elem]);
	        }
	    }
	},
	
	load: function(eid, url, data, wait_msg, cb)
	{
		var e = $(eid);
		
		if (wait_msg == null)
			wait_msg = 'Please wait, loading...';

		// display wait indicator
		e.html(CashCrate.getLoadHtml(wait_msg));
		
		// load data	
		e.load(url, data, cb);
	},
	
	getLoadHtml: function(wait_msg)
	{
		return CashCrate.loadHtml.replace('%%wait_msg%%', wait_msg);
	},
	
	displayPopup: function(type, title, content)
	{
		alert(title + "\n\n" + content);
	},
	
	closePopupMessages: function()
	{
		$('.popup-msg').fadeOut(400);
	},
	
	pluralize: function(count, word)
	{
		return (count == 0) ? word : word + 's';
	},
	
	hideTempMessages: function(delay)
	{
		if (delay == false)
			$('.temp-message').hide();
		else if (delay == null)
			$('.temp-message').fadeOut(150);
		else
			$('.temp-message').fadeOut(delay);
	},
	
	selTab: function(hash)
	{
		// call the tab selection
		$('#tab-section').tabs('select', hash);
		
		// simulate the click on the tab
		$(hash + '-tab').trigger('click');
	    
		// manually trigger the tab select event
		$('#tab-section').trigger('tabsselect', [{
			'tab': $(hash + '-tab'),
			'panel': $(hash),
			'index': 0,
			'keep_temp_messages': true
		}]);
	},
	
	selTabOnPage: function(page, tab)
	{
		/*
		 * if we're already on this page, just select the tab and simulate
		 * a click on the tab's anchor. if not, allow going to the page.
		 */
		if (CashCrate.curPage == page)
		{
			CashCrate.selTab(tab);
			return false;
		}
		
		return true;
	}
};

/*
 * extensions to jQuery core
 */

$.generateId = function() {
    return arguments.callee.prefix + arguments.callee.count++;
};
$.generateId.prefix = 'ccjq__';
$.generateId.count = 0;
$.fn.generateId = function() {
    return this.each(function() {
        this.id = $.generateId();
    });
};
