function spinner(holderid, R1, R2, count, stroke_width, colour) {
	var sectorsCount = count || 12,
		color = colour || "#fff",
		width = stroke_width || 15,
		r1 = Math.min(R1, R2) || 35,
		r2 = Math.max(R1, R2) || 60,
		cx = r2 + width,
		cy = r2 + width,
		r = Raphael(holderid, r2 * 2 + width * 2, r2 * 2 + width * 2),
		
		sectors = [],
		opacity = [],
		beta = 2 * Math.PI / sectorsCount,

		pathParams = {stroke: color, "stroke-width": width, "stroke-linecap": "round"};
		Raphael.getColor.reset();
	for (var i = 0; i < sectorsCount; i++) {
		var alpha = beta * i - Math.PI / 2,
			cos = Math.cos(alpha),
			sin = Math.sin(alpha);
		opacity[i] = 1 / sectorsCount * i;
		sectors[i] = r.path([["M", cx + r1 * cos, cy + r1 * sin], ["L", cx + r2 * cos, cy + r2 * sin]]).attr(pathParams);
		if (color == "rainbow") {
			sectors[i].attr("stroke", Raphael.getColor());
		}
	}
	var tick;
	(function ticker() {
		opacity.unshift(opacity.pop());
		for (var i = 0; i < sectorsCount; i++) {
			sectors[i].attr("opacity", opacity[i]);
		}
		tick = setTimeout(ticker, 1000 / sectorsCount);
	})();
	return function () {
		clearTimeout(tick);
		r.remove();
	};
}


function DetectAndroid()
{
    //Initialize our user agent string to lower case.
    var uagent = navigator.userAgent.toLowerCase();
    var deviceAndroid = "android";


   if (uagent.search(deviceAndroid) > -1)
      return true;
   else
      return false;
}




(function($) {
	var loadingTimeout;
	$.dialog = function(settings)
	{	
		clearTimeout(loadingTimeout);
		if (typeof(settings) == "undefined")
		{
			var settings = {};
		}
		
		$.extend($.dialog.settings, settings);
		
		if (typeof(settings.onload) != "undefined")
		{
			$(document).bind('beforeReveal.dialog.onload', function()
			{
				settings.onload();
				$(document).unbind('beforeReveal.dialog.onload');
			});
		}
		
		if (typeof(settings.onunload) != "undefined")
		{
			$(document).bind('close.dialog.onunload', function()
			{
				settings.onunload();
				$(document).unbind('close.dialog.onunload');
			});
		}
		
		if (typeof(settings.url) != "undefined")
		{
			$.dialog.loading();
			
			$.get(
				settings.url,
				null,
				function(data)
				{
					$.dialog.reveal(data);
				},
				'html'
			);
		}
		else if (typeof(settings.alert) != "undefined")
		{
			var content = '\
				<div class="dialog_container"> \
					<h4>' + settings.alert.title + '</h4> \
					<div class="dialog_content"> \
						<div style="min-height: 50px; width: 300px; text-align: center;">' + settings.alert.content + '</div> \
						<div class="dialog_footer"><input type="button" value="' + settings.alert.label + '" class="dialog_button"/></div> \
					</div> \
				</div>';
			
			$.dialog.reveal(content);
			
			$('#dialog div.dialog_footer input[type="button"]').first().click(function()
			{
				$.dialog.close();
			});
		}
		else if (typeof(settings.yesno) != "undefined")
		{
			var content = '\
				<div class="dialog_container"> \
					<h4>' + settings.yesno.title + '</h4> \
					<div class="dialog_content"> \
						<div style="min-height: 50px;  width: 300px;">' + settings.yesno.content + '</div> \
						<div class="dialog_footer"><input type="button" value="' + settings.yesno.label + '" class="dialog_button" /><input type="button" value="cancel" class="dialog_button dialog_button_cancel"/></div> \
					</div> \
				</div>';
			
			$.dialog.reveal(content);
			
			$('#dialog div.dialog_footer input[type="button"]:not(.dialog_button_cancel)').click(function()
			{
				if (typeof(settings.yesno.closeAfterAction) == 'undefined')
				{
					$('#dialog').hide();
					$('div.dialog_overlay').hide();
				}
				
				if (typeof(settings.yesno.action) == "string")
				{
					document.location.href = settings.yesno.action;
				}
				else
				{
					settings.yesno.action();
				}
			});
			
			$('#dialog div.dialog_footer input[type="button"].dialog_button_cancel').click(function()
			{
				if (typeof(settings.yesno.actionCancel) != "undefined")
				{
					if (typeof(settings.yesno.actionCancel) == "string")
					{
						document.location.href = settings.yesno.actionCancel;
					}
					else
					{
						settings.yesno.actionCancel();
					}
				}
				else
				{
					$.dialog.close();
				}
			});
		}
	}
	$.extend($.dialog, {
		
		settings: {
			inited: false,
			
			dialogHtml : '\
				<div class="dialog_overlay"></div> \
				<div id="dialog"> \
				</div>'
		
		},
		
		loading: function(withTimeout)
		{
			clearTimeout(loadingTimeout);
			var dialog = $('#dialog');
			var overlay = $('div.dialog_overlay');
			var holder = $('#holder');
			
			// var dialogQueue = dialog.queue() || [];
			// var overlayQueue = overlay.queue() || [];
			// 
			// if (dialogQueue.length > 0 || overlayQueue.length > 0)
			// {
			// 	dialog.clearQueue().remove();
			// 	overlay.clearQueue().remove();
			// 	holder.hide();
			// }
			
			if (dialog.is(':visible') || holder.is(':visible'))
			{
				dialog.hide();
				holder.show();
			}
			else
			{
				init();
				$("div.dialog_overlay").css("opacity","0").css("display","block");
				$("div.dialog_overlay").animate({"opacity":0.6})
				$("div.dialog_overlay").html('<div id="holder" style="height:120px;width:120px;"></div>');

				if(!DetectAndroid()) spinner("holder", 40, 50, 12, 15, $("#holder").css('color'));
			}
			
			if (arguments.length == 0)
			{
				withTimeout = true;
			}
			
			if (withTimeout)
			{
			    loadingTimeout = setTimeout("$.dialog.timeout()", 100000);
			}
		},
		
		show: function()
		{
			clearTimeout(loadingTimeout);
			$('#dialog').show();
			$('#holder').hide();
			$(window).resize();
			
		},
		timeout: function(){
			if($("#holder").css("display") != "none" && $("#holder")[0]) {
				var content = '<div class="dialog_container marketplace_module_info"><h4>Unable to reach the server application</h4><div class="dialog_content"><div>The system encounter a problem, please check your internet connection</div><div class="dialog_footer"><input type="button" value="Cancel" onclick="$.dialog.close(); return false;" class="dialog_button dialog_button_cancel dialog_button dialog_button_cancel button"></div></div></div>'
				$.dialog.reveal(content);
			}else{
				clearTimeout(loadingTimeout);
			}

		},
		reveal: function(content)
		{
			clearTimeout(loadingTimeout);
			init();
			
			$(document).bind('keydown.dialog', function(e)
			{
				if (e.keyCode == 27) $.dialog.close();
				return true;
			});
			
			$(window).bind('resize.dialog', function()
			{
				resize();
			});
						
			if ($('#dialog').is(':visible'))
			{
				// Ajax content, expand the container
				var container = $('#dialog');

				container
					.html(content);
				
				$(document).trigger('beforeReveal.dialog');
			}
			else
			{
				// Static content, show it
				$(document).trigger('replaceExisting.dialog');
				
				$('#dialog')
					.html(content);
				
				$(document).trigger('beforeReveal.dialog');
				$("div.dialog_overlay").css("opacity", 0).css('display', 'block');
				$("div.dialog_overlay").animate({opacity:0.6})
				$("#dialog").fadeIn();
			}
			
			$('#holder').hide();
			Charts.draw();
			resize();		
			$(document).trigger('afterReveal.dialog');
	
		},
		
		close: function()
		{
			clearTimeout(loadingTimeout);
			$(document).trigger('close.dialog');
			return false;
		},
		
		opener: function()
		{
			clearTimeout(loadingTimeout);
			return $($.dialog.settings.opener);
		}
		
	});
	
	$.fn.dialog = function()
	{
		var clickHandler = function()
		{
			$.dialog({opener: this});
			return false;
		};
		
		return this.click(clickHandler);
	};
	
	function resize()
	{
		var coords = getCenterCoordinates($('#dialog').width(),  $('#dialog').height());
		
		if (coords[0] < 20)
		{
			coords[0] = 20;
		}
		
		if (coords[1] < 20)
		{
			coords[1] = 20;
		}
		
		$('#dialog')
			.css('left', coords[0] + 'px')
			.css('top', coords[1] + 'px');
			

		var bodyelem = $(document);
	
			
		if (($('#dialog').height() / $(window).height()) > 1 || ($('#dialog').width() / $(window).height()) > 1)
		{
			
			$('#dialog')
				.css('top', bodyelem.scrollTop() + parseInt($('#dialog').css('top')) + 'px')
				.css('left', bodyelem.scrollLeft() + parseInt($('#dialog').css('left')) + 'px')
				.css('position', 'absolute');
		}
		else
		{
			$('#dialog').css('position', 'fixed');
		}
	};
	
	function getCenterCoordinates(width, height)
	{
		return [($(window).width() - width) / 2, ($(window).height() - height) / 2];
	}
	
	function init()
	{
		if ($.dialog.inited) return true;
		$.dialog.inited = true;
		
		$(document).trigger('init.dialog');
		
		$('body').append($.dialog.settings.dialogHtml);
	};
	
	$(document).bind('close.dialog', function() {
		clearTimeout(loadingTimeout);
		$(document).unbind('keydown.dialog');
		$(window).unbind('resize.dialog');
		$("#dialog").fadeOut();
		$("div.dialog_overlay").fadeOut(400, function() { $('#dialog').remove(); $(this).remove();});
		$.dialog.inited = false;	
	});
		$(document).bind('afterReveal.dialog', function()
		{
			clearTimeout(loadingTimeout);
			$(document).trigger("dialog.scrolltop");
		});
		$(document).bind('dialog.scrolltop', function()
		{
			$(".scrollbar, #contact_list").scrollTop(0);
		});
})(jQuery);
