(function($){  
	$.fn.extend({  
		clock: function(options) { 
			
			var defaults = { 
        radius: 35, 
        GMT: 0
      },
			options =  $.extend(defaults, options),
			canvas, hour_hand, minute_hand, second_hand, now, ampm = false;
			
			return this.each(function() {
				var width = 2 * options.radius;
				
				$(this).width(width).height(width);
				
				
				canvas = Raphael( $(this).attr('id'), width, width);
				var clock = canvas.circle(options.radius, options.radius, 0.95 * options.radius);
			  clock.attr({"stroke":"#000000","stroke-width": (0.04 * options.radius)})  
			  
				var
					hour_sign,
					start_dot = 0.8 * options.radius,
					end_dot = 0.9 * options.radius;
				
				for(i=0; i<12; ++i) {
					var val = 30*i*Math.PI/180;
					var start_x = options.radius + Math.round(start_dot * Math.cos(val));
					var start_y = options.radius + Math.round(start_dot * Math.sin(val));
					var end_x = options.radius + Math.round(end_dot * Math.cos(val));
					var end_y = options.radius + Math.round(end_dot * Math.sin(val));
					hour_sign = canvas.path("M"+start_x+" "+start_y+"L"+end_x+" "+end_y);
				}
				
				var center = ('M' + options.radius + ' ' + options.radius + 'L' + options.radius + ' ');
				hour_hand = canvas.path(center + (0.5 * options.radius));
				hour_hand.attr({stroke: "#000000", "stroke-width": 3});
				minute_hand = canvas.path(center + (0.4 * options.radius));
				minute_hand.attr({stroke: "#000000", "stroke-width": 2});
				second_hand = canvas.path(center + (0.25 * options.radius));
				second_hand.attr({stroke: "#000000", "stroke-width": 1});
				
				var pin = canvas.circle(options.radius, options.radius, 0.05 * options.radius);
				pin.attr("fill", "#000000"); 
				
				update_clock();
				setInterval(function() {
					update_clock();
				}, 1000);
				
				canvas.safari();
			});
			
			function update_clock() {
				now = new Date();
				var offset = new Date().getTimezoneOffset() / 60;
				var hours = now.getHours() + offset + options.GMT;
				var minutes = now.getMinutes();
				var seconds = now.getSeconds();
				hour_hand.rotate(30*hours+(minutes/2.5), options.radius, options.radius);
				minute_hand.rotate(6*minutes, options.radius, options.radius);
				second_hand.rotate(6*seconds, options.radius, options.radius);
				
				var ampm_str = (hours > 11) ? 'PM' : 'AM';
				if (ampm != ampm_str || ! ampm) {
					canvas.text(36, 50, ampm_str);
					ampm = ampm_str;
				}
			}
		} 
	});  
})(jQuery);
