/*
Leonardo Service Provider S.p.A.
Tutti i diritti registrati e riservati,(R)(C) 2009.
La riproduzione parziale o totale del presente software
delle pagine generate nonchè della strutturazione dei dati,
delle tabelle e di quant'altro è ad esso inerente  è illegale 
ed è punibile secondo tutte le Leggi vigenti sulla violazione del Diritto D'Autore.
L'utilizzo del presente software senza regolare licenza d'uso
è illegale e sarà perseguito secondo tutte le Leggi vigenti applicabili
*/

// JavaScript Document
(function() {
		  
	var isPressed = false;
	var clickX = 0;
	var clickY = 0;
	var lastElemTop = 0;
	var lastElemLeft = 0;


	$.fn.popw = function(options) {
		var defaults = {
			title: 'Avviso',
			backopacity: 0.5, // 1 = opaco, 0 = invisibile
			backcolor: '#000000',
			wwidth: 200, // larghezza della finestra
			wheight:'auto', // altezza della finestra
			wtype: 'alert', // alert, message, confirm, form
			modale: true,
			draggable: false,
			callback: null
		}
		var o = $.extend(defaults, options);
		
		var wcontainer = $('body');
		if (o.modale == true) {
			$('#modalebg').remove();
			drawMBG();
			wcontainer = $('#modalebg');
		}
		drawMainWindow();
		
		return {
			writehtml: function(msg) {
				$('#whtml').html(msg)
			},
			callfn: function() {
				o.callback()
			},
			wclose: function() {
				$('#modalew').remove();
				$('#modalebg').remove();
			}
		}
			
		function drawMainWindow() {
			// Inizio Contenitore
			$('#modalew').remove();
			var mWindow = createDiv('modalew', o.wwidth, o.wheight);
			mWindow.css('z-index', '100');
			mWindow.css('position', 'fixed');
			mWindow.css('left', ($(window).width()/2)-(o.wwidth/2)+'px');
			mWindow.css('top', (($(window).height()/2))+'px');
			lastElemTop = ($(window).height()/2);
			lastElemLeft = ($(window).width()/2)-(o.wwidth/2);
			// Fine Contenitore
			// Inizio TitleBar
			mWTitle = createDiv('modaledragger', 'no', 'no');
			mWTitle.html(o.title)
			$(mWindow).append(mWTitle);
			if (o.draggable == true) { /// Disegno il div per il trascinamento
				handleDrag(mWindow, mWTitle)
			}
			// Fine TitleBar
			// Inizio Close button
			mWClose = createDiv('modaleclose', 20, 20);
			mWClose.css('position', 'absolute');
			mWClose.css('right', '0px');
			mWClose.css('top', '0px');
			mWClose.css('cursor', 'pointer');
			mWClose.html('X');
			$(mWindow).append(mWClose);
			$(mWClose).click(function(){
				$('#modalew').remove();
				$('#modalebg').remove();
				$(document).unbind('keydown');
			})
			$(document).bind('keydown', function(event) {
				if(event.keyCode == 27) {
					$('#modalew').remove();
					$('#modalebg').remove();
					$(document).unbind('keydown');
				}
			})
			// Fine Close Button
			$('body').append(mWindow);
			var content = createDiv('whtml', 'auto', 'auto');
			content.css('overflow', 'auto');
			content.css('margin-bottom', '5px');
			$(mWindow).append(content);
			
			if (o.wtype == 'confirm') {
			//Creo il pulsante di conferma
				var btnDiv = createDiv('btns', 'auto', 'auto');
				var btnYes = $('<button>');
				var btnNo = $('<button>');
				btnYes.html('Si');
				btnNo.html('No');
				$(btnDiv).append(btnYes).append(btnNo).css('text-align', 'center');
				$(mWindow).append(btnDiv);
				
				$(btnNo).bind('click', function(event) {
					$('#modalew').remove();
					$('#modalebg').remove();
					$(document).unbind('keydown');
				})
				$(btnYes).bind('click', function(event) {
					o.callback();
					$('#modalew').remove();
					$('#modalebg').remove();
					$(document).unbind('keydown');
				})
			}
		}
		
		
		function drawMBG() {
			var mBG = createDiv('modalebg', $(window).width(), $(window).height());
			
			//mBG.css('z-index', '1');
			mBG.css('opacity', o.backopacity);
			mBG.css('background-color', '#1d2b45');
			mBG.css('position', 'fixed');
			mBG.css('left', '0px');
			mBG.css('top', '0px');
			mBG.css('cursor', 'wait');
		
			$('body').append(mBG);
		}
		
		function createDiv(nome, larghezza, altezza) {
			var tempDiv = $('<div>');
			tempDiv.attr('id', nome);
			if (larghezza != 'no') {
				tempDiv.css('width', isNaN(larghezza)?'auto':String(larghezza)+'px');
			}
			if (altezza != 'no') {
				tempDiv.css('height', isNaN(altezza)?'auto':String(altezza)+'px');
			}
			return tempDiv;
		}
		
		function handleDrag(finestra, handler) {
			$(handler).css('cursor', 'move');
			
			$(handler).mousedown(function(e){
										  
				$('*').attr('unselectable', 'on');									  
										  
				clickX = e.pageX;
				clickY = e.pageY;
				isPressed = true;
			})
			$(document).mouseup(function(){
				if (isPressed == true) {
				$('*').removeAttr('unselectable');	
					isPressed = false;
					var myX = Number($('#modalew').css('left').replace('px', ''));
					var myY = Number($('#modalew').css('top').replace('px', ''));
					var maxX = $(window).width() - $('#modalew').width()
					var maxY = $(window).height() - $('#modalew').height()
					
					var safeX = myX < 0 ? 20 : myX > maxX ? maxX - 20 : myX;
					var safeY = myY < 0 ? 20 : myY > maxY ? maxY - 20 : myY;
					$('#modalew').css('top', safeY+'px')
					$('#modalew').css('left', safeX+'px')
					lastElemTop = safeY;
					lastElemLeft = safeX;
				}
			})
		}
		
		
	}
	$(document).mousemove(function(e){
		if (isPressed == true) {
			$.updatePosition(e);
		}
	});
	
	
	$.getMousePosition = function(e){
		var posx = 0;
		var posy = 0;

		if (!e) var e = window.event;

		if (e.pageX || e.pageY) {
			posx = e.pageX;
			posy = e.pageY;
		}
		else if (e.clientX || e.clientY) {
			posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
			posy = e.clientY + document.body.scrollTop  + document.documentElement.scrollTop;
		}

		return { 'x': posx, 'y': posy };
	};
	
	$.updatePosition = function(e) {
		var pos = $.getMousePosition(e);

		var spanX = (pos.x-clickX);
		var spanY = (pos.y-clickY);

		$('#modalew').css("top",  (lastElemTop + spanY)+'px');
		$('#modalew').css("left", (lastElemLeft + spanX)+'px');
			
		//$('#modalebg').html('posX:' + spanX + '<br>posY:' + spanY)
	};
	
	
})($);