/*
 * Scadometer - sexy jquery plugin for scada.lv
 * Version: 0.2
 * Copyright (c) 2009 SIA SCADA
 * Licensed under the MIT License: http://en.wikipedia.org/wiki/MIT_License
 * Requires: jQuery v1.2+
*/

(function($) {
	$.fn.scadometer = function(settings) {		
		
			var settings = $.extend({
					elementToChange: 'body',
					cursor: 'crosshair',
					returnSpeed: 400
				}, settings);

			var default_background = $(settings.elementToChange).css('backgroundColor');

			var obj = $(this);							
			

			obj.mousemove(function(e) {	
				
				var pos = obj.position();
				var radius = obj.height()/2;					
				var curr_pos_x = radius - (e.pageX - this.offsetLeft);
				var curr_pos_y = radius - (e.pageY - this.offsetTop);
				var current_radius = Math.sqrt(Math.pow(Math.abs(curr_pos_x), 2) + Math.pow(Math.abs(curr_pos_y),2));					
				if(current_radius <= radius && current_radius >= 45) {
					
					$(settings.elementToChange).stop();
										
					var segment = 0;
					var a, b, sa, ba = 0;
					if(curr_pos_x >= 0 && curr_pos_y >= 0) {
						a = curr_pos_x;
						b = curr_pos_y;
					} else if(curr_pos_x > 0 && curr_pos_y < 0) {
						a = Math.abs(curr_pos_y);
						b = curr_pos_x;
						segment += 90;
					} else if(curr_pos_x <= 0 && curr_pos_y <= 0) {
						a = Math.abs(curr_pos_x);
						b = Math.abs(curr_pos_y);
						segment += 180;
					} else {
						a = curr_pos_y;
						b = Math.abs(curr_pos_x);
						segment += 270;
					}
					
					sa = 98;
					bi = 98;

					var gradus = Math.atan(a/b)*180/Math.PI+ segment;		
					
					$(this).css({cursor: settings.cursor});

					var hsb = {
						h: gradus,
						s: sa,
						b: bi
					};	
					
					

					$(settings.elementToChange).css({'backgroundColor': '#' + HSBToHex(hsb)}, 10);

				} else {

					$(this).css({cursor: 'auto'});		
					
					if(default_background!= $(settings.elementToChange).css('backgroundColor'))
						$(settings.elementToChange).animate({'backgroundColor': default_background}, settings.returnSpeed);

				}

			});

			obj.mouseleave(function(e) {				
				
				valid = false;

				$(this).css({cursor: 'auto'});

				if(default_background!= $(settings.elementToChange).css('backgroundColor'))
					$(settings.elementToChange).animate({'backgroundColor': default_background}, settings.returnSpeed);

			});


			var HSBToHex = function (hsb) {
				var rgb = {};
				var h = Math.round(hsb.h);
				var s = Math.round(hsb.s*255/100);
				var v = Math.round(hsb.b*255/100);
				
				if(s == 0) {
					rgb.r = rgb.g = rgb.b = v;
				} else {
					var t1 = v;
					var t2 = (255-s)*v/255;
					var t3 = (t1-t2)*(h%60)/60;
					if(h==360) h = 0;
					if(h<60) {rgb.r=t1;	rgb.b=t2; rgb.g=t2+t3}
					else if(h<120) {rgb.g=t1; rgb.b=t2;	rgb.r=t1-t3}
					else if(h<180) {rgb.g=t1; rgb.r=t2;	rgb.b=t2+t3}
					else if(h<240) {rgb.b=t1; rgb.r=t2;	rgb.g=t1-t3}
					else if(h<300) {rgb.b=t1; rgb.g=t2;	rgb.r=t2+t3}
					else if(h<360) {rgb.r=t1; rgb.g=t2;	rgb.b=t1-t3}
					else {rgb.r=0; rgb.g=0;	rgb.b=0}
				}

				var rgb = {r:Math.round(rgb.r), g:Math.round(rgb.g), b:Math.round(rgb.b)};

				var hex = [
						rgb.r.toString(16),
						rgb.g.toString(16),
						rgb.b.toString(16)
					];

				$.each(hex, function (nr, val) {
					if (val.length == 1) {
						hex[nr] = '0' + val;
					}
				});
				return hex.join('');
			};
		}

})(jQuery);