
// Array "arrContextData"
var CONTEXT_CONTAINER_ID		=	"ID";
var CONTEXT_PARENT_CONTAINER_ID	=	"CID";
var CONTEXT_ALIAS				=	"MA";
var CONTEXT_PARTIAL_PATH		=	"PP";
var CONTEXT_USER_FOLDER_ID		=	"UFID";
var CONTEXT_USER_ID				=	"UID";
var CONTEXT_USERID				=	"UNM";
var CONTEXT_USER_FIRSTNAME		=	"UFN";
var CONTEXT_USER_LASTNAME		=	"ULN";
var CONTEXT_USER_EMAIL			=   "UEM";
var CONTEXT_STYLE_PATH			=	"SP";
var CONTEXT_POSITION			=	"PS";
var CONTEXT_XGEAR				=	"XG";
var CONTEXT_TOKEN				=   "TK";
var CONTEXT_SERVER_DATE			=   "SD";
var CONTEXT_SERVER_TIME			=   "ST";
var CONTEXT_DOCUMENT_ID			=   "DID";
var CONTEXT_CONTAINER_TITLE		=   "CT";
var CONTEXT_DOCUMENT_TITLE		=   "CDT";
var CONTEXT_DOCUMENT_FSNAME		=   "CDF";
var CONTEXT_QUICKEDIT			=   "QE";
var CONTEXT_LANGUAGE			=   "LG";
var CONTEXT_RETURN				=   "RET";
var CONTEXT_LOGON				=   "LOG";
var CONTEXT_NAVIGATOR			=   "NAV";

var arrContextData = new Array ();
var objContextData = null;

function oPair (szName, szValue, bAdd)
{
	this.bJustAdded = bAdd;
	this.Name = szName;
	szValue.replace ("- -", "--");	
	this.Value = szValue;
}

////////////////////////     FORM Object////////////////////////////////////

function _InternalIsThereItem (szName)
{
	var nLen = this.Item.length;
	for (var i = 0; i < nLen; i++)
		if (this.Item[i].Name == szName)
			return (true);
	return (false);
}

function _InternalGetItem (szName)
{
	var nLen = this.Item.length;
	for (var i = 0; i < nLen; i++)
		if (this.Item[i].Name == szName)
			return (this.Item[i]);
	return (null);
}


function _InternalGetItemPair (ID)
{
	var nLen = this.Item.length;
	for (var i = 0; i < nLen; i++)
		if (this.Item[i].ID == ID)
			return (this.Item[i]);
	return (null);
}

function _Pair (ID, DescriptorID, szValue)
{
	this.ID = ID;
	this.DescriptorID = DescriptorID;
	this.Value = szValue;
}

function _InternalAddPair (ID, DescriptorID, szValue)
{
	var nLen = this.Item.length;
	this.Item[nLen] = new _Pair(ID, DescriptorID, szValue);
	return (this.Item[nLen]); 
}

function _Pairs ()
{
	this.Add = _InternalAddPair;
	this.Get = _InternalGetItemPair;
	this.Item = new Array();
}

////////////////////////////////////////////////////////////////////////////


function _Element (szName)
{
	this.Name = szName;
	this.Pairs = new _Pairs();
}

function _InternalAddElement (szName)
{
	var nLen = this.Item.length;
	this.Item[nLen] = new _Element(szName);
	return (this.Item[nLen]); 
}


function _Elements ()
{
	this.Add = _InternalAddElement;
	this.IsThere = _InternalIsThereItem;
	this.Get = _InternalGetItem;
	this.Item = new Array();
}

////////////////////////////////////////////////////////////////////////////

function _Form (szName)
{
	this.Name = szName;
	this.Elements = new _Elements();
}

function _InternalAddForm (szName)
{
	var nLen = this.Item.length;
	this.Item[nLen] = new _Form(szName);
	return (this.Item[nLen]); 
}

function _Forms ()
{
	this.Add = _InternalAddForm;
	this.IsThere = _InternalIsThereItem;
	this.Get = _InternalGetItem;
	this.Item = new Array();
}

		//////////////////////// CODE FOR DATA OBJECT /////////////////////////////

function _InternalDataIsThereItem (szName)
{
	var nLen = this.arrData.length;
	for (var i = 0; i < nLen; i++)
		if (this.arrData[i].Name == szName)
			return (true);
	return (false);
}

function _InternalDataGetItem (szName)
{
	var nLen = this.arrData.length;
	for (var i = 0; i < nLen; i++)
		if (this.arrData[i].Name == szName)
			return (this.arrData[i].Value);
	return (null);
}

function _InternalDataAddItem (szName, szValue)
{
	oItem = new oPair (szName, szValue, true)
	this.arrData.push (oItem);
}

function _InternalDataModifyItem (szName, szNewValue)
{
	var nLen = this.arrData.length;
	for (var i = 0; i < nLen; i++)
		if (this.arrData[i].Name == szName) {
			this.arrData[i].Value = szNewValue;
			return (true);
		}
	return (false);
}

function _InternalCreateQueryString ()
{
	var	nLen = this.arrData.length;
	if (nLen) {
		var szQuery = "?";
		for (var i = 0; i < nLen; i++) {
			if (this.arrData[i].bJustAdded) {
				if (szQuery.length > 1)
					szQuery += "|";
				szQuery += arrAddedItems[i].Name + ":" + arrAddedItems[i].Value;
			}
		}
	}	
}

function _InternalCreateXmlString (szRoot)
{
	var	nLen = this.arrData.length;
	var szXML = "<" + szRoot + ">";
	if (nLen) {
		for (var i = 0; i < nLen; i++) {
			szXML += "<" + this.arrData[i].Name + ">";
			szXML += this.arrData[i].Value;
			szXML += "</" + this.arrData[i].Name + ">";
		}
	}	
	szXML += "</" + szRoot + ">";
	return (szXML);
}


/////////////////////////////////// DATA OBJECT //////////////////////////
	
function DataObject (szArrName)
{
	this.arrData = eval(szArrName);
	this.Exist = _InternalDataIsThereItem;
	this.Get = _InternalDataGetItem;
	this.Add = _InternalDataAddItem;
	this.Modify = _InternalDataModifyItem;
	this.CreateQueryString = _InternalCreateQueryString;
	this.CreateXmlString = _InternalCreateXmlString;
}

//////////////////////////////// FRAMEWORK FUNCTIONS /////////////////////////

var _szEscTmp = "";

function SetSessionData (szName, szValue, szOp)
{
	if (szName == null || szName == undefined || szName == '')
		return;

	var szSessionCookie = ''; 
	var szCookie = "sessiondata=";
	var nStart = document.cookie.indexOf (szCookie);
	var nEnd = 0;
	if (nStart != -1) {
		nStart += szCookie.length;
		if ((nEnd = document.cookie.indexOf ("; ", nStart)) != -1)
			szSessionCookie= document.cookie.substring (nStart, nEnd);
		else 
			szSessionCookie= document.cookie.substr (nStart);
		szSessionCookie = unescape (szSessionCookie);
	}
	if (szSessionCookie == '')
		szSessionCookie = '<root></root>';

	if (document.fSessionData) {
		var szSessionData = '<sessiondata name="' + szName + '" op="' + szOp + '">';
		switch (szOp) {
			case 'add':
				if (szValue == null || szValue == undefined || szValue == '')
					return;
				szSessionData += szValue;
				break;
			case 'mod':
				if (szValue == null || szValue == undefined || szValue == '')
					return;
				szSessionData += szValue;
				break;
			case 'del':
				break;
			default:
				return;
		}
		szSessionData += '</sessiondata>';
		document.fSessionData.hSessionData.value = szSessionData;
		szSessionCookie = szSessionCookie.substring (0, 6) + szSessionData + szSessionCookie.substring (6, szSessionCookie.length);
		document.cookie = szCookie + escape (szSessionCookie) + "; path=/";
	}
}

function GetSessionData (szName)
{
	if (document.fSessionData) {
		var szStartTag = '<' + szName + '>';
		var szEndTag = '</' + szName + '>';
		
		var szSessionData = new String (document.fSessionData.hSessionData.value);
		var iStart = 0;
		var iEnd = 0;
		iStart = szSessionData.toLowerCase().indexOf (szStartTag.toLowerCase());
		if (iStart != -1) {
			iEnd = szSessionData.toLowerCase().indexOf (szEndTag.toLowerCase(), iStart);
			return (szSessionData.substring (iStart, iEnd + szEndTag.length));
		}
	}
	return ("");
}

function GetSessionDataValue (szName)
{
	var szXmlData = GetSessionData (szName);
	if (szXmlData.length)
		return szXmlData.substring (szXmlData.indexOf ('>') + 1, szXmlData.lastIndexOf ('<'));
	return ("");
}

function SetApplicationData (szValue)
{
	if (szValue == null || szValue == undefined)
		szValue = "";
	document.cookie = "appdata=" + escape (szValue) + "; path=/";
}

function GetApplicationData ()
{
	var szName = "appdata=";
	var szApplicationData = "";
	
	var nStart = document.cookie.indexOf (szName);
	var nEnd = 0;
	if (nStart != -1) {
		nStart += szName.length;
		if ((nEnd = document.cookie.indexOf ("; ", nStart)) != -1)
			szApplicationData = document.cookie.substring (nStart, nEnd);
		else 
			szApplicationData = document.cookie.substr (nStart);
	}
	return (unescape (szApplicationData));
}

function _FCIsThereItem (szName)
{
	var nLen = this.Items.length;
	for (var i = 0; i < nLen; i++)
		if (this.Items[i].Name == szName)
			return (true);
	return (false);
}

function _FCGetItem (szClass, szName)
{
	var nLen = this.Items.length;
	for (var i = 0; i < nLen; i++)
		if (this.Items[i].Class == szClass && this.Items[i].Name == szName)
			return (this.Items[i]);
	return (null);
}

function _FCAddItem (SpecObject)
{
	var nItem = this.Items.length;
	this.Items[nItem] = SpecObject;
	return (SpecObject);
}

function _FrameworkClass ()
{
	this.Add = _FCAddItem;
	this.Get = _FCGetItem;
	this.IsThere = _FCIsThereItem;
	this.Items = new Array();
}

var _objFramework = new _FrameworkClass();

var WorkaroundTimeout = null; //for IE5.0
function WindowOnLoad ()
{
	if (WorkaroundTimeout) {
		window.clearTimeout (WorkaroundTimeout);
		if (bDoLogin)
			DoLogin();
		for (var i = 0; i < _objFramework.Items.length; i++) {
			if (_objFramework.Items[i].Init)
				_objFramework.Items[i].Init();
		}
		for (var i = 0; i < document.images.length; i++) {
			if (!document.images[i].complete) {
				var szImg = document.images[i].src;
				document.images[i].src = szImg;
			}
		}
	}
	else
		WorkaroundTimeout = window.setTimeout(WindowOnLoad, 100);
	
}

function WindowOnUnload ()
{
	for (var i = 0; i < _objFramework.Items.length; i++) {
		if (_objFramework.Items[i].End)
			_objFramework.Items[i].End();
	}
}

function DoLogin()
{
	var szUserLoggedOn = objContextData.Get(CONTEXT_USER_FOLDER_ID);
	if (!szUserLoggedOn.length) {
		var szAlias = objContextData.Get(CONTEXT_ALIAS);
		var szPath = objContextData.Get(CONTEXT_PARTIAL_PATH);
		var szDocId = objContextData.Get(CONTEXT_DOCUMENT_ID);
		var szLang = objContextData.Get(CONTEXT_LANGUAGE);
		var szReturn = objContextData.Get(CONTEXT_RETURN);

		var szUrl = szAlias + szPath + "default.aspx?transform=" + szLang + "/Membership/login.xsl";
		if (szDocId)
			szUrl += "&id=" + szDocId;
		try {
			if (szLoginError.length)
				szUrl += "&error=" + szLoginError;
		}
		catch (e) {
		}
		szUrl += "&return=" + MyEscape(szReturn);
		remote = window.open (szUrl, "LoginWindow", WINDOW_SMALL);
		remote.focus();	
	}
}

function MyEscape (szString)
{	
	//Questa funzione permette di fare l'escape sia dei caratteri XML sia dei caratteri speciali (es à, è, ecc.).
	//E' utile soprattutto nel caso di form inputs di tipo r2b_...
	
	var szEscapedString = "";
	for (var i = 0; i < szString.length; i++) {
		var cChar = szString.charAt (i);
		switch (cChar) {
			case '&':
			case '<':
			case '>':
				szEscapedString += escape(cChar);
				break;
			default:
				szEscapedString += encodeURI (cChar);
		}
	}
	return szEscapedString;
}
