
/*
addJavascript('/js/jquery-1.4.4.min.js','head'); 

addJavascript('/js/jquery.scrollTo-1.4.2-min.js','head'); 

addJavascript('/fancybox/jquery.fancybox-1.3.4.pack.js','head'); 
addJavascript('/fancybox/jquery.easing-1.3.pack.js','head'); 
addCSS('/fancybox/jquery.fancybox-1.3.4.css','head'); 
addJavascript('/js/fancyboxOn.js','head'); 
addJavascript('/js/jquery.media.js','head'); 
*/

function addJavascript(jsname, pos) 
{
	var th = document.getElementsByTagName(pos)[0];
	var s = document.createElement('script');
	s.setAttribute('type','text/javascript');
	s.setAttribute('src',jsname);
	th.appendChild(s);
} 

function addCSS(CSSname, pos) 
{
	var th = document.getElementsByTagName(pos)[0];
	var s = document.createElement('link');
	s.setAttribute('type','text/css');
	s.setAttribute('rel','stylesheet');
	s.setAttribute('media','screen');
	s.setAttribute('href',CSSname);
	th.appendChild(s);
} 

// Funzione usata nei form per controllare la correttezza dei dati
function checkField(OField, sRegExMatch, sRegExNotMatch, sMessage)
{
	var BReturn = false;
	var RE = new RegExp(sRegExMatch);
	var RENot = new RegExp(sRegExNotMatch);
	
	if (OField)
	{
		if (OField.type == "checkbox")
		{
			if (OField.checked && OField.value.match(RE))
				BReturn = true;
			else
			{
				if (sRegExMatch.length == 0)
					BReturn = true;
			}
		}
		else
		{
			if (OField.value.match(RE))
			{
				BReturn = true;

				if ((sRegExNotMatch.length > 0) && (OField.value.match(RENot)))
				{
					//console.log("!" + sRegExNotMatch + "!");
					BReturn = false;
				}
			}
		}	

		var OSpanErr = document.getElementById(OField.form.id + "_" + OField.id + "_err");
		if (!BReturn)
		{
			if (OSpanErr)
			{
				OSpanErr.innerHTML = sMessage;
				OSpanErr.style.display = "block";				
			}
			else
			{
				//console.log("Cannot find id:" + OField.form.id + "_" + OField.name + "_err");
				alert(sMessage);
			}
			
			$(OField).addClass("formMan_errorField");
			$('#' + OField.id + '_tip').addClass("formMan_errorField");
			OField.focus();
			$('#' + OField.id + '_ui').focus();
		}
		else
		{
			if (OSpanErr)
			{
				OSpanErr.innerHTML = "";
				OSpanErr.style.display = "none";				
			}
			$(OField).removeClass("formMan_errorField");
			$('#' + OField.id + '_tip').removeClass("formMan_errorField");
		}
	}
	else
		alert('(unkown field) ' + sMessage);
	
	//console.log("%s = %s : %d", OField, OField.value, BReturn);	 
	
	return BReturn;
}

RegExp.escape = function(text) 
{
	return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}


// Apre 0 chiude un pannello anche dopo un determinato timeout, se non è stato reinviato il comando di apertura
function TogglePanel(PanelId, BOpen, nTimeout)
{
	if (typeof nTimeout == "undefined") 
		nTimeout = 0;

	OPanel = document.getElementById(PanelId);
	
	if (OPanel)
	{
		if (nTimeout == 0)
		{
			if (BOpen)
			{
				OPanel.style.display = 'block';
				OPanel.scadenza = -1;
				if (!isScrolledIntoView(OPanel))
					$.scrollTo($("#"+PanelId), 800);					
			}
			else
			{
				OPanel.style.display = 'none';
				OPanel.scadenza = -1;
			}
		}
		else
		{
			if (BOpen)
			{
				alert('TogglePanel parameter error.');
			}
			else
			{
				Data = new Date();
				OPanel.scadenza = Data.getTime() + nTimeout;
				setTimeout('TogglePanel_timeout("' + PanelId + '", 0)', nTimeout);
			}
		}	
	}
}

function TogglePanel_timeout(PanelId, BOpen)
{
	OPanel = document.getElementById(PanelId);
	
	if (OPanel)
	{
		Data = new Date();
		
		if (OPanel.scadenza > 0)
		{
			if (OPanel.scadenza <= Data.getTime())
			{
				if (BOpen)
				{
					OPanel.style.display = 'block';
					OPanel.scadenza = -1;
				}
				else
				{
					OPanel.style.display = 'none';
					OPanel.scadenza = -1;
				}
			}
		}

	}	
}

ToggleBox_callers = new Array();

function ToggleBox(BoxId, NearToObj, Top, Left, hide)
{
	Top = (Top) ? Top : 0;
	Left = (Left) ? Left : 0;
	hide = (hide) ? hide : false;
	
	if (jQuery)
	{	
		var OBox = $("#" + BoxId);
		if (OBox.length > 0)
		{
			if (hide)
			{
				OBox.hide(250);
			}
			else
			{
				//console.log(ToggleBox_callers[BoxId]);
				// Se sto chiamando da un'altro comando, nascondo il box immediatamente, prima di animare la visualizzazione
				if (ToggleBox_callers[BoxId] != arguments.callee.caller)
					OBox.hide(0);
				ToggleBox_callers[BoxId] = arguments.callee.caller;
			
				// Prima di chiudere un box già aperto verifico se è stato aperto con lo stesso chiamante, 
				// altrimenti potrei chiudere un vecchio box aperto invece di aprirne uno nuovo quando richiesto
				//console.log(window.event);			
				
				if (OBox.is(":visible"))
					OBox.hide(250);
				else
				{
					var ONearTo = $(NearToObj);
					if (ONearTo.length)
					{
						var offset = ONearTo.offset();
						
						var topNew = offset.top + Top;
						var leftNew = offset.left + Left;
						
						OBox.css("top", topNew + "px").css("left", leftNew + "px");
					}

					OBox.show(250, function () {
						//if ($.scrollTo)
						{
							var out = isScrolledIntoView(OBox);
							$.scrollTo({ top:'+=' + out.outY + 'px', left:'+=' + out.outX + 'px' }, 300);					
						}
					});				
						
				}			
			}
		}		
	}

	return false;
}

function ToggleBox_Delay(BoxId, BShow, nDelay)
{
	if (jQuery)
	{	
		var OBox = $("#" + BoxId);
		if (OBox.length > 0)
		{
			if (BShow)
			{
				OBox.stop(true, true).delay(nDelay).fadeIn(100, function () {
					var out = isScrolledIntoView(OBox);
					//$.scrollTo({ top:'+=' + out.outY + 'px', left:'+=' + out.outX + 'px' }, 600);					
				});				
			}
			else
			{
				OBox.stop(true, true).delay(nDelay).fadeOut(100);				
			}
		}		
	}
}

// restituisce {outX, outY} che indica di quanto è fuori l'oggetto dalla finestra:
// numeri positivi verso destra e in basso
// se è fuori in entrambe le direzioni si da precedenza all'angolo top/sx
function isScrolledIntoView(elem)
{
    var docViewTop = $(window).scrollTop();
    var docViewBottom = docViewTop + $(window).height();

    var elemTop = $(elem).offset().top;
    var elemBottom = elemTop + $(elem).height();

    var docViewLeft = $(window).scrollLeft();
    var docViewRight = docViewLeft + $(window).width();

    var elemLeft = $(elem).offset().left;
    var elemRight = elemLeft + $(elem).width();
	
	var Ret = {outX: 0, outY: 0};	
	if (elemTop < docViewTop)
		Ret.outY = elemTop - docViewTop;
	else if (elemBottom > docViewBottom)
		Ret.outY = elemBottom - docViewBottom;
	
	if (elemLeft < docViewLeft)
		Ret.outX = elemLeft - docViewLeft;
	else if (elemRight > docViewRight)
		Ret.outX = elemRight - docViewRight;

    return Ret;
}


function SetHTML(ObjId, sHTML)
{
	var Obj = document.getElementById(ObjId);
	if (Obj)
		Obj.innerHTML = sHTML;
}

function loginProtection()
{
	//console.log('protected: ' + this);	
	if (g_username != "")
		return true;
	else
	{
		// Decido dove mostrare il form
		ORif = $(this);
		if (ORif.is("form"))
		{
			ORifNew = ORif.find('input[type="submit"]');
			if (ORifNew.length > 0)
				ORif = ORifNew;
		}
		var offset = ORif.offset();
		var top = offset.top + 10;
		var left = offset.left + 10;		
		
		// Individuo le dimensioni del box
		$('#formLogin_box').hide(0);
		$('#formLogin_box').css("top", "0px").css("left", "0px");
		var W = $('#formLogin_box').width();
		var H = $('#formLogin_box').height();
		
		// Sono all'interno del container?
		if ($('#container').length)
		{
			var offsetCont = $('#container').offset();
			var WCont = $('#container').width();
			var HCont = $('#container').height();

			if (left + W > offsetCont.left + WCont) left = offsetCont.left + WCont - W - 5;
			if (top + H > HCont) top = offsetCont.top + HCont - H - 5;
			if (left < offsetCont.left) left = offsetCont.left + 5;
		}

		if (left < 0) left = 5;
		if (top < 0) top = 5;
		
		if (document.getElementById('formLogin_box'))
		{
			ToggleBox('formLogin_box', ORif, top - offset.top, left - offset.left);
		}
	}
	
	return false;
}

function loginAjax(responseText)
{
	AResponse = responseText.split("|");
	
	if (AResponse[0] == "Login successful")
	{
		// Nascondo il box login e carico il nome utente
		g_username = AResponse[1];
		$('#formLogin_box').hide(0);	
		
		// Aggiorno il menu
		//$('#menualto_dx').remove();
		$.get('include/loginmenu.php', function(data) {
			var OlangMenu = $('.langmenu_li').detach();
			$('#menualto_dx').html(data).append(OlangMenu);			
		});		
		
		return true;
	}
	else
	{
		$('#formLogin_x_submit_error').html(responseText).show();
	}
	
	return false;
}

(function( $ ){

	$.fn.insertAtCaret = function(myValue) {
		return this.each(function(i) 
		{
			if (document.selection) {
			  //For browsers like Internet Explorer
			  this.focus();
			  sel = document.selection.createRange();
			  sel.text = myValue;
			  this.focus();
			}
			else if (this.selectionStart || this.selectionStart == '0') {
			  //For browsers like Firefox and Webkit based
			  var startPos = this.selectionStart;
			  var endPos = this.selectionEnd;
			  var scrollTop = this.scrollTop;
			  this.value = this.value.substring(0, startPos)+myValue+this.value.substring(endPos,this.value.length);
			  this.focus();
			  this.selectionStart = startPos + myValue.length;
			  this.selectionEnd = startPos + myValue.length;
			  this.scrollTop = scrollTop;
			} else {
			  this.value += myValue;
			  this.focus();
			}
		});
	};
})( jQuery );

