/*=======================================================================================*/

var ajax_page_method = 
	{
		POST:				"POST",
		POST_FORM:			"POST_FORM",
		CALL:				"CALL",
		CALL_FORM:			"CALL_FORM"
	}


/*=======================================================================================*/

function ajax_page(page, method)
{
	var ap_page = page
	var ap_params = "ajax_callback=1"
	var ap_method = method

	this.add_parameter = function(name, value) {
		ap_params += "&" + encodeURIComponent(name) + "=" + encodeURIComponent(value)
	}
	
    this.new_page = function(page){
    	ap_params = 'ajax_callback=1'
    	ap_page = page
     }
    
	this.send = function(arg1, arg2, arg3) {
		if (ap_method == ajax_page_method.POST)
			return ap_post_page(arg1, arg2)						// arg1 = id_result arg2 = on success funtion to execute
		else if (ap_method == ajax_page_method.POST_FORM)
			return ap_post_form(arg1, arg2, arg3)				// arg1 = id_result arg2 = form_name arg3 = on success funtion to execute
		else if (ap_method == ajax_page_method.CALL)
			return ap_call_page(arg1)							// arg1 = on success funtion to execute
		else if (ap_method == ajax_page_method.CALL_FORM)
			return ap_call_form(arg1, arg2)						// arg1 = form_name arg2 = on success funtion to execute 
		}

	var ap_add_form_parameters = function(form_name) {
		ap_params += '&' + $('form[name='+form_name+']').serialize()
	}

	/* ================================================================= Invio di un intero form POST */
	var ap_post_form = function(id_result, form_name, onSuccess) {
		ap_add_form_parameters(form_name)
	
	return ap_post_page(id_result, onSuccess)
	}
	
	/* ================================================================= Invio di un intero form CALL */
	var ap_call_form = function(form_name, onSuccess) {
		ap_add_form_parameters(form_name)
	
	return ap_call_page(onSuccess)
	}
	
	/* ================================================================= Invio POST */

	var ap_post_page = function(id_result, onSuccess) {
		$('#'+id_result).load(ap_page,ap_params,function(request,status,xhr){
			if (status == 'error')
				modal_alert(xhr.responseText)
    		 else if (status == 'success' && onSuccess != null && typeof onSuccess =='function')
    		 	onSuccess()
				}
			)
	}
	
	/* ================================================================= Invio post CALL */

	var ap_call_page = function(onSuccess) {
		if (!$('#ap_call_page_element').length) $('body').append('<div id="ap_call_page_element" style="display:none;width:0;height:0"></div>')
		$('#ap_call_page_element').load(ap_page,ap_params,function(request,status,xhr){
    		 	if (status == 'error')
    		 		 modal_alert(xhr.responseText)
    		 	else if (status == 'success' && onSuccess != null && typeof onSuccess =='function')
    		 		onSuccess()
    		 }
		)
	}
}

/*=======================================================================================*/

function modal_dialog(options)
{
	var defaults = {
		speed: 0,									// fade in/out speed
		width: 400,									// dialog width in px
		top: 'center',								// dialog top position
		left: 'center',								// dialog left position	
		relative: true,								// dialog top-left relative position ?	
		header: '',									// header dialog string
		page: '',									// address ajax called page for dialog content
		message:'',									// or dialog content message
		parameters: 'modal_dialog=true',			// parameter to pass to ajax page called
		bordercolor: '#555',						// dialog border color
		bordersize: '8px',							// dialog border size
		background: '#fff',							// dialog background
		onclickout: false,							// close on click out dialog ?
		onscroll: false,							// recalculate dialog position onscroll
		onunload: null,								// function to call while closing dialog
		onload: null								// function to call while loading dialog
		}

    var settings = $.extend({}, defaults, options)

    this.show = function(top, left){
	if ($('.control_input_alert_modal').length) return alert('Modal dialog non può essere eseguito dopo un Control input dialog.')
	if ($('.dialog_modal').length) return alert('Modal dialog non può essere eseguito due volte.')
    var doc = $('body')
	var close_img = new Array()
	close_img[0] = new Image()
	close_img[0].src = '/lib/resources/message_box/closeBtnd.png'
	close_img[1] = new Image()
	close_img[1].src = '/lib/resources/message_box/closeBtn.png'
	doc.append('<div class="dialog_modal" style="z-index:100;position:absolute;left:0;top:0;display:none;width:0;height:0;background:#000;"></div>')
	if (settings.page)
		{
		doc.append('<div class="dialog_button" style="z-index:102;position:absolute;left:0;top:0;display:none;width:29px;height:29px;background: url('+close_img[1].src+')"></div>')
		doc.append('<div class="dialog_box" style="z-index:101;position:absolute;left:0;top:0;background:' + settings.background + ';display:none;width:' + settings.width + 'px;border:'+ settings.bordersize + ' solid '+ settings.bordercolor + ';"></div>')
		if (settings.message) $('.dialog_box').html('<div class="dialog_loading" style="background:#333;color:#fff;text-align:center;vertical-align:middle;padding:4px"><br><img src="/lib/resources/stop_and_go/load_spinner.gif" style="width:60px;height:60px;"><br>' + settings.message + '<br>&nbsp;</div>')
		this.load_page()
		}
	else
		{
		doc.append('<div class="dialog_button" style="z-index:102;position:absolute;left:0;top:0;display:none;width:29px;height:29px;background: url(/lib/resources/message_box/closeBtn.png)">&nbsp;</div>')
		if (settings.header)
			doc.append('<div class="dialog_box" style="z-index:101;position:absolute;left:0;top:0;display:none;width:' + settings.width + 'px;border:'+ settings.bordersize + ' solid ' + settings.bordercolor + ';background:' + settings.background + '"><div style="padding:4px;background:#FF8C00;color:#444;font-weight:bold;text-align:center;">' + settings.header + '</div><div class="dialog_msg" style="padding:4px;color:#444;font-weight:bold;text-align:left;"></div></div>')
		else
			doc.append('<div class="dialog_box" style="z-index:101;position:absolute;left:0;top:0;display:none;width:' + settings.width + 'px;border:'+ settings.bordersize + ' solid ' + settings.bordercolor + ';padding:8px;background:' + settings.background + '"><div class="dialog_msg" style="padding:4px;color:#444;font-weight:bold;text-align:left;"></div></div>')

		$('.dialog_msg').html(settings.message.replace(/\r\n|\r|\n/g, '<br>') + '<br>&nbsp;')
		}
	
    if (top != null && !isNaN(parseInt(top,10))) settings.top = top
    if (left != null && !isNaN(parseInt(left,10))) settings.left = left
    
    if (settings.top != 'center' && isNaN(parseInt(settings.top,10))) settings.top = 'center'
    if (settings.left != 'center' && isNaN(parseInt(settings.left,10))) settings.left = 'center'
    if (settings.onscroll) settings.relative = true

	var dialog_modal = $('.dialog_modal')
	var dialog_button = $('.dialog_button')
	var dialog_box = $('.dialog_box')
	var win = $(window)
	
	dialog_modal.css('opacity', '0.4')
	dialog_box.css('border-radius', settings.bordersize+' '+settings.bordersize+' '+settings.bordersize+' '+settings.bordersize)
	dialog_box.css('-moz-border-radius', settings.bordersize)
	dialog_box.css('-webkit-border-radius', settings.bordersize)
	dialog_box.css('text-align', 'left')

	dialog_box.css('-moz-box-shadow', '#000 0 4px 18px')
	dialog_box.css('-webkit-box-shadow', '#000 0 4px 18px')
	dialog_box.css('-khtml-box-shadow', '#000 0 4px 18px')
	dialog_box.css('box-shadow',' #000 0 4px 18px')

	win.bind('resize', modal_dialog_draw)

	if (settings.onclickout) dialog_modal.bind('click', this.close)
	dialog_button.bind('click', this.close)
	dialog_modal.show()
	dialog_box.slideDown(settings.speed)
	dialog_button.show()
	dialog_button.mouseenter(function(){$(this).css('cursor','pointer');$(this).css('background','url('+close_img[0].src+')');})
	dialog_button.mouseleave(function(){$(this).css('cursor','default');$(this).css('background','url('+close_img[1].src+')');})
	if (settings.onload) settings.onload()
	modal_dialog_draw()
    }
    
    this.load_page = function(onSuccess){
    	$('.dialog_box').load(settings.page,settings.parameters,function(request,status,xhr){
		if (status == 'error')
			$(this).html(xhr.responseText)
		 else if (status == 'success')
			{
			modal_dialog_draw()
			if (onSuccess != null && typeof onSuccess =='function')
				onSuccess()
			}
 		 })
    }
	
    this.add_parameter = function(name, value){
    	settings.parameters += "&" + encodeURIComponent(name) + "=" + encodeURIComponent(value)
    }

    this.set_message = function(message){
    	settings.message = message
    }
    
    this.set_onunload = function(onunload){
    	settings.onunload = onunload
     }
    
    this.close = function(){
		var dialog_modal = $('.dialog_modal')
		var dialog_button = $('.dialog_button')
		var dialog_box = $('.dialog_box')
		var win = $(window)
	
		dialog_button.unbind()
		dialog_modal.unbind()
		dialog_box.unbind()
		dialog_box.slideUp(settings.speed, function(){$(this).remove();dialog_button.hide(0, function(){$(this).remove();dialog_modal.fadeOut('fast', function(){$(this).remove();})})})
		win.unbind('resize', modal_dialog_draw)
		if (settings.onunload) settings.onunload()
    }
    
    this.new_page = function(page){
    	settings.parameters = 'modal_dialog=true'
    	settings.page = page
     }
    
  	var modal_dialog_draw = function(){
		var dialog_modal = $('.dialog_modal')
		var dialog_box = $('.dialog_box')
		var dialog_button = $('.dialog_button')
		var doc = $(document)
		var win = $(window)

		dialog_modal.height(0)
		dialog_modal.width(0)
 		if (settings.onscroll)
			{
			var p = dialog_box.position()
			if ((win.height() > dialog_box.outerHeight(true)+8+p.top) && (win.width() > dialog_box.outerWidth(true)+8+p.left))
				{
				dialog_box.css('position','fixed')
				dialog_button.css('position','fixed')
				}
			else
				{
				dialog_box.css('position','absolute')
				dialog_button.css('position','absolute')
				}
			}
 		dialog_box_position()
 		dialog_modal.height(doc.height())
		dialog_modal.width(doc.width())
		}
	
	var dialog_box_position = function(){
		var dialog_box = $('.dialog_box')
		var dialog_button = $('.dialog_button')
		var win = $(window)
		var t,l

 		t = (settings.top == 'center') ? ((win.height()-dialog_box.outerHeight(true)) / 2) + win.scrollTop() + 8 : settings.relative ? Number(settings.top) + win.scrollTop() + 8 : Number(settings.top) + 8
 		l = (settings.left == 'center') ?  ((win.width()-dialog_box.outerWidth(true)) / 2) + win.scrollLeft() + 8 : settings.relative ? Number(settings.left) + win.scrollLeft() + 8 :  Number(settings.left) + 8
		dialog_box.offset({top:(t < 8) ? 8 : t,left:(l < 8) ? 8 : l})
 		var c = dialog_box.offset()
		dialog_button.offset({top:c.top-8,left:c.left-8})
	}
 	
}

/*=======================================================================================*/

function page_dialog(options)
{
	var defaults = {
		attach_id: '',								// attached element
		speed: 0,									// fade in/out speed
		width: '400px',								// dialog width
		position: 'right',							// dialog position
		bordercolor: '#fff',						// dialog border color
		bordersize: '4px',							// dialog border size
		message:'',									// or dialog content message
		page: '',									// address ajax called page for dialog content
		parameters: 'page_dialog=true'				// parameter to pass to ajax page called
		}

    var settings = $.extend({}, defaults, options);
    var timeout_id = null;
    var dialog_inited = false;
	var close_img = new Array()
	close_img[0] = new Image()
	close_img[0].src = '/lib/resources/message_box/closeBtnd.png'
	close_img[1] = new Image()
	close_img[1].src = '/lib/resources/message_box/closeBtn.png'
 
    this.show = function(){
    var doc = $('body')
	doc.append('<div class="page_modal" style="z-index:100;position:absolute;left:0;top:0;display:none;width:0;height:0;background:#000;"></div>')
	doc.append('<div class="page_box" style="z-index:101;padding:0;margin:0;position:absolute;left:0;top:0;background:#fff;display:none;width:' + settings.width + ';text-align:left;border:'+ settings.bordersize + ' solid ' + settings.bordercolor + ';"></div>')
	doc.append('<div class="page_button" style="z-index:102;position:absolute;left:0;top:0;display:none;width:29px;height:29px;background: url('+close_img[1].src+')"></div>')
	if (settings.message)
		{
		$('.page_box').html('<div class="page_dialog_waiting" style="background:#666;color:#fff;text-align:center;vertical-align:middle;padding:4px"><br><img src="/lib/resources/stop_and_go/load_spinner.gif" style="width:60px;height:60px;"><br>' + settings.message + '<br>&nbsp;</div>')
		timeout_id = setTimeout(page_dialog_init, 100)
   		}
   	page_dialog_load()
 	}
    
    this.add_parameter = function(name, value){
    	settings.parameters += "&" + encodeURIComponent(name) + "=" + encodeURIComponent(value)
    }

    this.set_message = function(message){
    	settings.message = message
    }
    
    this.new_page = function(page){
    	settings.parameters = 'page_dialog=true'
    	settings.page = page
     }
     
    this.close = function(){
    	page_dialog_close()
     }
    
    var page_dialog_load = function(){
    	$('.page_box').load(settings.page,settings.parameters,function(request,status,xhr){
			if (status == 'error')
				{
				$(this).html(xhr.responseText);
				page_dialog_init();
				}
			else if (status == 'success')
				page_dialog_init();
		 })
    }

	var page_dialog_init = function(){
		if (timeout_id)
			clearTimeout(timeout_id)
		if (!dialog_inited)
			{
			dialog_inited = true
			var page_modal = $('.page_modal')
			var page_box = $('.page_box')
			var page_button = $('.page_button')
	
			page_modal.css('opacity', '0.4')
			page_box.css('border-radius', settings.bordersize+' '+settings.bordersize+' '+settings.bordersize+' '+settings.bordersize)
			page_box.css('-moz-border-radius', settings.bordersize)
			page_box.css('-webkit-border-radius', settings.bordersize)
			
			if (!$.browser.msie)
				{
				page_box.css('-moz-box-shadow', '#000 0 4px 18px')
				page_box.css('-webkit-box-shadow', '#000 0 4px 18px')
				page_box.css('-khtml-box-shadow', '#000 0 4px 18px')
				page_box.css('box-shadow','#000 0 4px 18px')
				}

			page_modal.bind('click', page_dialog_close)
			page_button.bind('click', page_dialog_close)
			page_modal.show()
			page_box.slideDown(settings.speed)
			page_button.show()
			page_button.mouseenter(function(){$(this).css('cursor','pointer');$(this).css('background','url('+close_img[0].src+')');})
			page_button.mouseleave(function(){$(this).css('cursor','default');$(this).css('background','url('+close_img[1].src+')');})
			$(window).bind('resize', page_dialog_draw)
			}
		page_dialog_draw()
	}
	
	var page_dialog_draw = function(){
		var page_modal = $('.page_modal')
		var page_box = $('.page_box')
		var page_button = $('.page_button')
		var doc = $(document)
		var win = $(window)
		var attach_info = $(settings.attach_id).get_dimension(false)
		
		page_modal.height(0)
		page_modal.width(0)
		page_box.offset({top:(settings.position == 'right') ? attach_info.top : attach_info.bottom,left:(settings.position == 'right') ? attach_info.right : attach_info.left})
		var pagebox_info = page_box.get_dimension(true)
		page_button.offset({top:pagebox_info.top-16,left:pagebox_info.left-16})
		page_modal.height(doc.height())
		page_modal.width(doc.width())
	}
   
	var page_dialog_close = function(){
		var page_modal = $('.page_modal')
		var page_box = $('.page_box')
		var page_button = $('.page_button')

		page_button.unbind()
		page_modal.unbind()
		page_box.unbind()
		page_box.slideUp(settings.speed, function(){$(this).remove();page_button.hide(0, function(){$(this).remove();page_modal.fadeOut('fast', function(){$(this).remove();})})})
	}
}

/*=======================================================================================*/

function modal_loading()
{
	this.show = function(msg){
		var msg = (msg==null) ? "attendere..." : msg
		var doc = $('body')
		doc.append('<div class="modal_loading_modal" style="z-index:100;position:absolute;left:0;top:0;display:none;width:0;height:0;background:#000;"></div>')
		doc.append('<div class="modal_loading_box" style="z-index:101;position:absolute;left:0;top:0;background:transparent;display:none;"><img src="/lib/resources/stop_and_go/load_spinner.gif" style="width:80px;height:80px;"><br><h1 style="color:#fff">' + msg + '</h1></div>')

		var modal = $('.modal_loading_modal')
		var box = $('.modal_loading_box')
		var win = $(window)
		
		modal.css('opacity', '0.4')
		win.bind('resize', modal_loading_draw)
		win.bind('scroll', modal_loading_draw)
		
		modal.show()
		box.show()
		modal_loading_draw()
	}

	this.close = function(){
		$('.modal_loading_modal').remove()
		$('.modal_loading_box').remove()
		$(window).unbind('resize', modal_loading_draw)
		$(window).unbind('scroll', modal_loading_draw)
	}
	
	var modal_loading_draw = function(){
		var modal = $('.modal_loading_modal')
			modal.height(0)
			modal.width(0)
		var box = $('.modal_loading_box')
		var doc = $(document)
		var win = $(window)

		box.offset({top:((win.height()-box.outerHeight(true)) / 2) + win.scrollTop(), left:((win.width()-box.outerWidth(true)) / 2) + win.scrollLeft()})
		modal.height(doc.height())
		modal.width(doc.width())
		}

}

/*=======================================================================================*/

function modal_canceling()
{
	var onabort_function = ''
	
	this.show = function(msg, onabort){
		var msg = (msg==null) ? "attendere..." : msg
		onabort_function = (onabort != null) ? onabort : ''
		var doc = $('body')
		doc.append('<div class="modal_loading_modal" style="z-index:100;position:absolute;left:0;top:0;display:none;width:0;height:0;background:#000;"></div>')
		doc.append('<div class="modal_loading_box" style="z-index:101;position:absolute;left:0;top:0;background:transparent;display:none;"><img src="/lib/resources/stop_and_go/loader.gif" style="width:150px;height:15px;">&nbsp;<span class="modal_loading_cancel"><img src="/lib/resources/message_box/closeBtn.png"></span><br><h1 style="color:#fff">' + msg + '</h1></div>')

		var modal = $('.modal_loading_modal')
		var box = $('.modal_loading_box')
		var cancel = $('.modal_loading_cancel')
		var win = $(window)
		
		modal.css('opacity', '0.6')
		cancel.bind('click', this.close)
		win.bind('resize', modal_canceling_draw)
		win.bind('scroll', modal_canceling_draw)
		
		modal.show()
		box.show()
		modal_canceling_draw()
	}

	var modal_canceling_draw = function(){
		var modal = $('.modal_loading_modal')
		if (modal.length)
			{
			modal.height(0)
			modal.width(0)
			var box = $('.modal_loading_box')
			var doc = $(document)
			var win = $(window)
	
			box.offset({top:((win.height()-box.outerHeight(true)) / 2) + win.scrollTop(), left:((win.width()-box.outerWidth(true)) / 2) + win.scrollLeft()})
			modal.height(doc.height())
			modal.width(doc.width())
			}
		}

	this.close = function(){
		if ($('.modal_loading_modal').length)
			{
			$('.modal_loading_modal').remove()
			$('.modal_loading_box').remove()
			$('.modal_loading_cancel').remove()
			$(window).unbind('resize', modal_canceling_draw)
			$(window).unbind('scroll', modal_canceling_draw)
			if (onabort_function) onabort_function()
			}
	}

}

/*=============================== SHORTCUTS ==================================================*/

function ajax_post_form(form_name, id_result)
{

new ajax_page(document.forms[form_name].action, ajax_page_method.POST_FORM).send(id_result, form_name)
}

/*=================================================================================*/
function ajax_call_form(form_name, onSuccess)
{

new ajax_page(document.forms[form_name].action, ajax_page_method.CALL_FORM).send(form_name,onSuccess)
}

/*=================================================================================*/
function modal_message(msg)
{

new modal_dialog({message:msg}).show();
}

/*=================================================================================*/
function modal_alert(msg, alrt)
{
if (alrt == null) alrt = "ATTENZIONE"
new modal_dialog({message:msg,header:alrt}).show();
}


