String.prototype.removeBlanks = function() {
	return this.replace(/\s+/g, '');
}

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}


function JPError(id,descr) {
	this.id = id;
	this.desc = desc;
}

String.prototype.toHtml = function() {
	return this.replace(/\n/g, "<br>\n");
}

// Determine browser and version.

function Browser() {

  var ua, s, i;

  this.isIE    = false;
  this.isNS    = false;
  this.version = null;

  ua = navigator.userAgent;

  s = "MSIE";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isIE = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  s = "Netscape6/";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  // Treat any other "Gecko" browser as NS 6.1.

  s = "Gecko";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = 6.1;
    return;
  }
}

var browser = new Browser();
var enableCaptureEnter = false;

function executeSubmitOnEnterEvent()
{
	if(browser.isIE){
        document.onkeypress = captureEnter;
	}
	else if(browser.isNS){
	    if (document.layers) {
	        document.captureEvents( Event.KEYPRESS );
	        document.onkeypress = captureEnter;
	    // Netscape 6/Gecko
	    } else if (document.getElementById) {
	        var targetObject = document;
	        targetObject.addEventListener ("keypress",captureEnter,false);
	    }
	}
	enableCaptureEnter = true;
}

function captureEnter(eventObj)
{
	var thisEvent = null;
	if(browser.isNS)
		thisEvent = eventObj;
	else
		thisEvent = event;

	if (thisEvent.keyCode == 13 && enableCaptureEnter)
	{
		if (document.forms[0].onsubmit)
		{
			if ( document.forms[0].onsubmit())
				document.forms[0].submit();
		}
		else
			 document.forms[0].submit();
			 
		return false;
	}
}

function getStyleClass(name) {
	for ( i = 0; i < document.styleSheets.length; i++ )
	{
		if (document.styleSheets[0].rules.item(name))
			return document.styleSheets[0].rules.item(name).style;
	}
	return null;
}

function jpRadioValue(field)
{
	for(var i = 0 ; i < field.length ; ++i)
	{
		if (field[i].checked)
			return field[i].value;
	}
	return null;
}

function jpHideSelect(){
	mySels = document.getElementsByTagName('select');
	if(mySels){
		for (var i = 0; i < mySels.length; i++)
			mySels[i].style.visibility = 'hidden';
	}
	iframes = document.getElementsByTagName('iframe');
	if(iframes){
		for (var ifrm = 0; ifrm < iframes.length; ifrm++){
			mySels = frames[ifrm].document.getElementsByTagName('select');
			if(mySels){
				for (var i = 0; i < mySels.length; i++)
					mySels[i].style.visibility = 'hidden';
			}
		}
	}
}

function jpShowSelect(){
	mySels = document.getElementsByTagName('select');
	if(mySels){
		for (var i = 0; i < mySels.length; i++)
			mySels[i].style.visibility = 'visible';
	}
	iframes = document.getElementsByTagName('iframe');
	if(iframes){
		for (var ifrm = 0; ifrm < iframes.length; ifrm++){
			mySels = frames[ifrm].document.getElementsByTagName('select');
			if(mySels){
				for (var i = 0; i < mySels.length; i++)
					mySels[i].style.visibility = 'visible';
			}
		}
	}
}

function closeDiv(divName){
	var tmpClosingDiv = getElement(divName);
	if(tmpClosingDiv){
		tmpClosingDiv.style.display = 'none';
	}
}

function closeDivAndClear(divName){
	var tmpClosingDiv = getElement(divName);
	if(tmpClosingDiv){
		tmpClosingDiv.style.display = 'none';
		tmpClosingDiv.outerHTML = '';
	}
}

function getElement(divName){
	return document.getElementById(divName);
}

function openDiv(headerId,divId,offWidth,offHeight){
	var tmpHeader = getElement(headerId);
	var tmpobj = getElement(divId);
	var obj = tmpHeader;
	var curleft = 0;
	if (obj.offsetParent){
		while (obj.offsetParent){
			curleft += obj.offsetLeft;
			obj = obj.offsetParent;
			if(obj.tagName == 'DIV')break;
			if(obj.tagName == 'FIELDSET')curleft += 1;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	obj = tmpHeader;
	var curtop = 0;
	if (obj.offsetParent){
		while (obj.offsetParent){
			curtop += obj.offsetTop;
			obj = obj.offsetParent;
			if(obj.tagName == 'DIV')break;
			if(obj.tagName == 'FIELDSET')curtop += 1;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	tmpobj.style.left = curleft + offWidth;
	tmpobj.style.top = curtop + offHeight;
//	tmpobj.style.width = 100;
	tmpobj.style.display = '';
}

// Global object to hold drag information.

var dragObj = new Object();
dragObj.zIndex = 0;

function dragStart(event,elem) {
	dragObj.elNode = elem;

	var x, y;
	
	// Get cursor position with respect to the page.
	
	if (browser.isIE) {
		x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
		y = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
	}
	if (browser.isNS) {
		x = event.clientX + window.scrollX;
		y = event.clientY + window.scrollY;
	}

	if (browser.isIE) {
		document.attachEvent("onmousemove", dragGo);
		document.attachEvent("onmouseup",   dragStop);
		window.event.cancelBubble = true;
		window.event.returnValue = false;
	}
	if (browser.isNS) {
		document.addEventListener("mousemove", dragGo,   true);
		document.addEventListener("mouseup",   dragStop, true);
		event.preventDefault();
	}

	dragObj.cursorStartX = x;
	dragObj.cursorStartY = y;
	dragObj.elStartLeft  = parseInt(dragObj.elNode.style.left, 10);
	dragObj.elStartTop   = parseInt(dragObj.elNode.style.top,  10);
	
	if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;
	if (isNaN(dragObj.elStartTop))  dragObj.elStartTop  = 0;	
}

function dragGo(event) {
	var x, y;
	
	// Get cursor position with respect to the page.
	
	if (browser.isIE) {
		x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
		y = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
	}
	if (browser.isNS) {
		x = event.clientX + window.scrollX;
		y = event.clientY + window.scrollY;
	}
	
	// Move drag element by the same amount the cursor has moved.
	var left = (dragObj.elNode.offsetLeft + x - dragObj.cursorStartX);
	var top = (dragObj.elNode.offsetTop  + y - dragObj.cursorStartY);
	
	if(window.parent == window){
		dragObj.cursorStartX = x;
		dragObj.cursorStartY = y;
	}
	dragObj.elNode.style.left = left;
	dragObj.elNode.style.top  = top;
	
	if (browser.isIE) {
		window.event.cancelBubble = true;
		window.event.returnValue = false;
	}
	if (browser.isNS)
		event.preventDefault();
		
/*
	var x, y;
	
	// Get cursor position with respect to the page.
	
	if (browser.isIE) {
		x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
		y = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
	}
	if (browser.isNS) {
		x = event.clientX + window.scrollX;
		y = event.clientY + window.scrollY;
	}
	
	// Move drag element by the same amount the cursor has moved.
	var left = (dragObj.elNode.offsetLeft + x - dragObj.cursorStartX);
	var top = (dragObj.elNode.offsetTop  + y - dragObj.cursorStartY);
	
	dragObj.elNode.style.left = left;
	dragObj.elNode.style.top  = top;
	
	if (browser.isIE) {
		window.event.cancelBubble = true;
		window.event.returnValue = false;
	}
	if (browser.isNS)
		event.preventDefault();

*/		
}

function dragStop(event) {

  // Stop capturing mousemove and mouseup events.

	if (browser.isIE) {
		document.detachEvent("onmousemove", dragGo);
		document.detachEvent("onmouseup",   dragStop);
	}
	if (browser.isNS) {
		document.removeEventListener("mousemove", dragGo,   true);
    	document.removeEventListener("mouseup",   dragStop, true);
  	}
}

function closePopup(){
//if (window.opener != null)
//	 window.opener.focus();

self.close();

}

function printPage(){
	var pageLink = document.location.href;
	if(pageLink){
		if(pageLink.indexOf('?') > -1)
			pageLink += '&';
		else
			pageLink += '?';
		pageLink += '_JPPRINT=true';
//		alert(pageLink);
		openNewPopup(pageLink,900,700);
	}
}

function printSearchPage(link){
	var pageLink = null;
	if(link){
		pageLink = link;
	}
	else{
		pageLink = document.location.href;
	}
	if(pageLink){
		if(pageLink.indexOf('?') > -1)
			pageLink += '&';
		else
			pageLink += '?';
		pageLink += '_JPPRINT=true';

		var printName = 'Print_' + (new Date().getTime());
	
		var oldAction = document.forms[0].action;
		var oldTarget = document.forms[0].target;
		
		document.forms[0].target = printName;
		document.forms[0].action = pageLink;
		var printPage = window.open('',printName,'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,width=900,height=700');
	
		if (document.forms[0].onsubmit)
		{
			if ( document.forms[0].onsubmit())
				document.forms[0].submit();
		}
		else
			 document.forms[0].submit();
	
		document.forms[0].target = oldTarget;
		document.forms[0].action = oldAction;
	}
}

function _JPShowWait(){
	_JPShowWaitPopUp(false);
}

function _JPWaitAll(){
	var allElements = document.getElementsByTagName("*");
	document.body.style.cursor='move';
	if(allElements){
		var n = allElements.length;
		for(var i = 0; i < n; i++){
			var el = allElements[i];
			if(el)
				el.style.cursor = 'wait';
		}
	}
	var iframes = document.getElementsByTagName('iframe');
	if(iframes){
		for (var ifrm = 0; ifrm < iframes.length; ifrm++){
			allElements = frames[ifrm].document.getElementsByTagName('*');
			if(allElements){
				var n = allElements.length;
				for(var i = 0; i < n; i++){
					var el = allElements[i];
					if(el)
						el.style.cursor = 'wait';
				}
			}
		}
	}
}

function _JPShowWaitPopUp(onOpen){
	var div = getElement('WAIT_DIV');
	if(div == null){
		div = document.createElement('DIV');
		div.id = 'WAIT_DIV';
		document.body.insertBefore(div,null);
	}
	div.style.position = 'absolute';
	div.style.left = 0;
	div.style.top = 0;
	div.style.width = '100%';
	div.style.height = '100%';
	div.style.cursor = 'wait';
	div.style.display = '';
/*	if(onOpen)
		document.body.style.cursor='wait';
	else
		setTimeout('_JPWaitAll()',2);
*/
}

function closeWaitIfCompleted() {
	if (window.document.readyState == 'interactive') {
		_JPCloseWait();
	}
}

function _JPCloseWait(){
	closeDivAndClear('WAIT_DIV');
}

function removeCR(input) {
// Removes carriage returns from input

	var output = "";
	for (var i = 0; i < input.length; i++) {
		if ((input.charCodeAt(i) == 13) && (input.charCodeAt(i + 1) == 10)) {
		i++;
		output += "";
		} else 
			output += input.charAt(i);	   
	}
	return output;
}

function replacevar(hreftmp,param,value){
	var newLink = '';
	if (hreftmp.length == 0) return
	
	hreftmp = hreftmp.replace(/\+/g, ' ')

	var oldLink = hreftmp.split('?');
	var newLink = oldLink[0];
	
	if (oldLink.length > 1){
		var paramSet = false;
		var qs = oldLink[1];		
		var args = qs.split('&');
		for (var i=0;i<args.length;i++)
		{
			var pair = args[i].split('=')
			name = unescape(pair[0])
			if(name == param){
				pair[1] = value;
				paramSet = true;
			}
			if (i > 0)
				newLink += '&';
			else
				newLink += '?';
			newLink += pair[0] + '=' + pair[1];
		}
		if(!paramSet)
			newLink += '&' + param + '=' + value;
	}
	else
		newLink += '?' + param + '=' + value;
	return newLink;

}

function openNewPopup(link,width,height){
	var opOtp = 'toolbar=no,status=no,scrollbars=yes,height=' + height + ',width=' + width + ',resizable=yes';
	_JPCloseWait();
	return window.open(link,'_blank',opOtp);	
}

function openNewModalPopup(link,width,height){
	var opOtp = 'toolbar:no;status:no;scroll:yes;dialogHeight:' + height + 'px;dialogWidth:' + width + 'px;resizable:yes';
	window.showModalDialog(link,window,opOtp);
	_JPCloseWait();
}

/**
* Metodo di formattazione quantità (by Alessandro Giupponi)
* @params num		--> valore da formattare
* @params dec		--> decimali da tenere in considerazione, default 1
* @params val		--> eventuale simbolo da aggiungere al valore ritornato
*/
function formatDecimal(num, dec, val) {
	// Tolgo la virgola e metto il punto per verificare se si tratta di un numero
	if(num){
		num = num.toString().replace(',','.');
		if(isNaN(num)){
			num = '0.0';
		}
	} else {
		num = '0.0';
	}
	
	// Fisso il default per il dec
	if(dec == 0)
		dec = 1;
	
	var where_is_comma = num.indexOf('.');
	var result = num;
	if(where_is_comma > -1) {
		result = num.substring(0, where_is_comma );
		result = result + ',';
		result = result + num.substring(where_is_comma + 1, where_is_comma + dec + 1 );
	} else {
		result = result + ',';
		for(i = 0; i < dec; i++)
			result = result + '0';
	}
	if(val && val != '')
		result = result + ' ' + val;
	
	return result;
}

