//var general_op_window = null;
var record_changed = false;
var record_blocked = false;

var lov_window = null;

// Open lov window and give it the focus
function openLovWindow (_url) {
  if (_url == null)
    _url = '';
  lov_window = window.open(_url,'lov_window','location,status,left=100,top=100,height=500,width=900,scrollbars=1,resizable=1');
  lov_window.focus();
}

// Open lov window and give it the focus
function openUploadWindow (_url) {
  if (_url == null)
    _url = '';
  lov_window = window.open(_url,'lov_window','location,status,left=100,top=100,height=100,width=500,scrollbars=1,resizable=1');
  lov_window.focus();
}

function resizeMultipleSelectWindow (_windowObject) {

  _windowObject.moveTo(100, 100);
  _windowObject.resizeTo(900, 600);
}

function openDetailWindow (url) {
  parent.opener.location = url;
}

/*
function open_win_op(_url) {
    if (_url == null)
      _url = '';
      
    general_op_window = window.open(_url,'general_op_window',',left=200,top=200,height=400,width=500,scrollbars=1,resizable=1');
    general_op_window.focus();
}*/

/*
function close_opener_and_set_url (_window) {
  var existsopener = false;

  if (_window.opener != null) {
    existsopener = true;
    close_opener_and_set_url (_window.opener);
  }

  if (existsopener == false) {

    openerurl = _window.location;
    _window.location  = openerurl;
  }
  else
    _window.close();  
}*/

// The user have selected a value in a LOV-Page, give the Value to the Main page
function selectLovItem (_id, _desc) {
  window.opener.document.getElementsByName( document.getElementsByName('retfieldpk')[0].value )[0].value = _id;
  opener.document.getElementsByName(document.getElementsByName('retfielddesc')[0].value)[0].value = _desc;
  beforeCloseSelectedLov();

  opener.record_changed = true;

  window.close();

  opener.mainFormValidate( opener.document.getElementsByName(document.getElementsByName('retfielddesc')[0].value)[0] );
}

function insertDetail (_form, _detail_name, detail_tab_page_name) {
  _form.action.value = 'det';
  _form.action_det.value = 'insert';
  _form.dett_name.value = _detail_name;
  _form.detail_tab_page_name.value = detail_tab_page_name;

  if (_form.onsubmit()){
    _form.submit();
  };
}

function ajax_insertDetail (_form, _det_name, _op_pageName) {
  _form.action.value = 'det';
  _form.action_det.value = 'insert';
  _form.detail_tab_name.value = _det_name;  

  ajaxMakeOpRequest(_op_pageName, _form);
}
function ajax_insertMultipleDetail (_form, _det_name, _op_pageName, _window) {
  _form.action.value = 'det';
  _form.action_det.value = 'insert_multiple_lov';
  _form.detail_tab_name.value = _det_name;
  ajaxMakeOpRequest(_op_pageName, _form);
}

function insertDetailMultipleLov (_form, _detail_name, detail_table_name, detail_tab_page_name) {
  _form.action.value = 'det';
  _form.action_det.value = 'insert_multiple_lov';
  _form.dett_name.value = _detail_name;
  _form.detail_table_name.value = detail_table_name;
  _form.detail_tab_page_name.value = detail_tab_page_name;

  if (_form.onsubmit()){
    _form.submit();
  }
  alert('implement');
}

function changeDetail (_form, _detail_name) {
  _form.action.value = 'det';
  _form.action_det.value = 'change';
  _form.dett_name.value = _detail_name;

  alert('implement');
}

function removeDetail (_form, _det_name) {
  _form.action.value = 'det';
  _form.action_det.value = 'remove';
  _form.detail_tab_name.value = _det_name;  

  alert('implement');
}
function ajax_removeDetail (_form, _det_name, _op_pageName) {
  _form.action.value = 'det';
  _form.action_det.value = 'remove';
  _form.detail_tab_name.value = _det_name;  

  ajaxMakeOpRequest(_op_pageName, _form);
}

// Controlla che in un Text area vengono inseriti caratteri fino ad un certo limite
// Da usare in onkeydown e onkeyup
function checkLengthTextArea (field, maxLimit) {

  if (field.value.length > maxLimit) // if too long...trim it!
    field.value = field.value.substring(0, maxLimit);
}


function alertRecordChanged (_text) {
  if (record_changed == true && record_blocked == true) {
    alert(_text);
    return false;
  }else
    return true;
}

function tabOnMouseOver(_name) {
  document.getElementsByName(_name + '_left')[0].src='img/tab/left_selected.jpg';
  document.getElementById(_name + '_center').style.backgroundImage='url(img/tab/center_selected.jpg)';
  document.getElementsByName(_name + '_right')[0].src='img/tab/right_selected.jpg';
}
function tabOnMouseOut(_name) {
  document.getElementsByName(_name + '_left')[0].src='img/tab/left.jpg';
  document.getElementById(_name + '_center').style.backgroundImage='url(img/tab/center.jpg)';
  document.getElementsByName(_name + '_right')[0].src='img/tab/right.jpg';
}

// _itemName = Nome dell' oggetto che vienen visualizzato o meno
function openCloseFolder (_itemName) {

  if (document.getElementById(_itemName).style.display == 'none') {
   	document.getElementById(_itemName).style.display = 'block';
   	document.getElementById('imgplus_' + _itemName).src = 'img/buttons/button_minus.gif';
   	document.getElementById('imgfolder_' + _itemName).src = 'img/folderopen.gif';
  } else {
   	document.getElementById(_itemName).style.display = 'none';
   	document.getElementById('imgplus_' + _itemName).src = 'img/buttons/button_plus.gif';
   	document.getElementById('imgfolder_' + _itemName).src = 'img/folder.gif';
  }
}

// Value of a Radio Button group
function getRadioValue(rObj) {
  for (var i=0; i<rObj.length; i++) {
    if (rObj[i].checked)
      return rObj[i].value;
  }
  return '';
}

function getNavigator() {
  if (navigator.appName == "Netscape")
    return "Netscape";
  else
    return "IExplorer";
}

function getKeyCode(_event) {
  var keypressed;

  if (getNavigator() == "Netscape") {
  
    keypressed = _event.which;
  } else {
    keypressed = _event.keyCode;
  }
  
  return keypressed;
}

function checkEnterKey(_event){

  if (getKeyCode(_event) == 13)
    return true;
  else
    return false;
}

function URLEncode(plainUrl)
{
	// The Javascript escape and unescape functions do not correspond
	// with what browsers actually do...
   
	var SAFECHARS = "0123456789" +					// Numeric
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()";					// RFC2396 Mark characters
	var HEX = "0123456789ABCDEF";

	var plaintext = plainUrl;
   
	var encoded = "";
	for (var i = 0; i < plaintext.length; i++ ) {
		var ch = plaintext.charAt(i);
	    if (ch == " ") {
		    encoded += "+";				// x-www-urlencoded, rather than %20
		} else if (SAFECHARS.indexOf(ch) != -1) {
		    encoded += ch;
		} else {
		    var charCode = ch.charCodeAt(0);
			if (charCode > 255) {
			    alert( "Unicode Character '" 
                        + ch 
                        + "' cannot be encoded using standard URL encoding.\n" +
				          "(URL encoding only supports 8-bit characters.)\n" +
						  "A space (+) will be substituted." );
				encoded += "+";
			} else {
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	} // for

	return encoded;
};


function getRandomNum(lbound, ubound) {
  return (Math.floor(Math.random() * (ubound - lbound)) + lbound);
}
function getRandomChar(number, lower, upper, other) {
	var numberChars = "0123456789";
	var lowerChars = "abcdefghijklmnopqrstuvwxyz";
	var upperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	var otherChars = "!$%&/()=?+*#-_.:,;";
	var charSet = "";
	if (number == true)
	charSet += numberChars;
	if (lower == true)
	charSet += lowerChars;
	if (upper == true)
	charSet += upperChars;
	if (other == true)
	charSet += otherChars;
	return charSet.charAt(getRandomNum(0, charSet.length));
}
function generatePassword(length, _containNumber, _containLower, _containUpper, _containOther) {
	var rc = "";

	for (var idx = 0; idx < length; ++idx) {
          rc = rc + getRandomChar(_containNumber, _containLower, _containUpper, _containOther);
	}
	return rc;
}

function isFirefoxHigherEquals3() {
	if ( BrowserDetect.browser == 'Firefox' && BrowserDetect.version >= 3) {
		return true;
	} else
		return false;
}

var BrowserDetect = {
		init: function () {
			this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
			this.version = this.searchVersion(navigator.userAgent)
				|| this.searchVersion(navigator.appVersion)
				|| "an unknown version";
			this.OS = this.searchString(this.dataOS) || "an unknown OS";
		},
		searchString: function (data) {
			for (var i=0;i<data.length;i++)	{
				var dataString = data[i].string;
				var dataProp = data[i].prop;
				this.versionSearchString = data[i].versionSearch || data[i].identity;
				if (dataString) {
					if (dataString.indexOf(data[i].subString) != -1)
						return data[i].identity;
				}
				else if (dataProp)
					return data[i].identity;
			}
		},
		searchVersion: function (dataString) {
			var index = dataString.indexOf(this.versionSearchString);
			if (index == -1) return;
			return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
		},
		dataBrowser: [
			{
				string: navigator.userAgent,
				subString: "Chrome",
				identity: "Chrome"
			},
			{ 	string: navigator.userAgent,
				subString: "OmniWeb",
				versionSearch: "OmniWeb/",
				identity: "OmniWeb"
			},
			{
				string: navigator.vendor,
				subString: "Apple",
				identity: "Safari",
				versionSearch: "Version"
			},
			{
				prop: window.opera,
				identity: "Opera"
			},
			{
				string: navigator.vendor,
				subString: "iCab",
				identity: "iCab"
			},
			{
				string: navigator.vendor,
				subString: "KDE",
				identity: "Konqueror"
			},
			{
				string: navigator.userAgent,
				subString: "Firefox",
				identity: "Firefox"
			},
			{
				string: navigator.vendor,
				subString: "Camino",
				identity: "Camino"
			},
			{		// for newer Netscapes (6+)
				string: navigator.userAgent,
				subString: "Netscape",
				identity: "Netscape"
			},
			{
				string: navigator.userAgent,
				subString: "MSIE",
				identity: "Explorer",
				versionSearch: "MSIE"
			},
			{
				string: navigator.userAgent,
				subString: "Gecko",
				identity: "Mozilla",
				versionSearch: "rv"
			},
			{ 		// for older Netscapes (4-)
				string: navigator.userAgent,
				subString: "Mozilla",
				identity: "Netscape",
				versionSearch: "Mozilla"
			}
		],
		dataOS : [
			{
				string: navigator.platform,
				subString: "Win",
				identity: "Windows"
			},
			{
				string: navigator.platform,
				subString: "Mac",
				identity: "Mac"
			},
			{
				string: navigator.platform,
				subString: "Linux",
				identity: "Linux"
			}
		]

	};
	BrowserDetect.init();

