var iTypologyList_PrevSelIndex = 0;

function CheckTypology (theMainForm, theTypologyForm)
{
	var theObjList = theMainForm.TypologyList;
	var szEmpty = theMainForm.name == "UpdateDoc" ? "" : szNoChange;

	if (theTypologyForm.HasBeenFilled.value == '1')  {
		if (!confirm (szDocProf_ProfileChanged)) {
			//I restore the old index value of the select list.
			theObjList.selectedIndex = iTypologyList_PrevSelIndex;
			return;
		}
		else {
			//I clean all the variables that contain the documents profiling values.
			theMainForm.Numbers.value = "";
			theMainForm.Texts.value = "";
			theMainForm.Blobs.value = "";
			theMainForm.Dates.value = "";
			theTypologyForm.Numbers.value = szEmpty;
			theTypologyForm.Texts.value = szEmpty;
			theTypologyForm.Blobs.value = szEmpty;
			theTypologyForm.Dates.value = szEmpty;
			theTypologyForm.HasBeenFilled.value = '0';
		}
	}
	//I save the current selected index.
	iTypologyList_PrevSelIndex = theObjList.selectedIndex;
}

function CheckTypologyRequired (theMainForm, theTypologyForm)
{
	var theTypologyListObj = theMainForm.TypologyList;
	var szValue = theTypologyListObj.options[theTypologyListObj.selectedIndex].value;
	var theParseObj = new ParseObj (null, N_PARSE_DOCTYP, szValue);
	theParseObj = parseString (theParseObj);
	if (theParseObj.List[DOCTYP_REQUIRED] == '1') {
		if (theTypologyForm.HasBeenFilled.value == '0')
			return (true);
	}
	return (false);
}

function GetTypologyID (theMainForm, bTestExistField)
{
	var theTypologyListObj = theMainForm.TypologyList;
	var szValue = theTypologyListObj.options[theTypologyListObj.selectedIndex].value;
	var theParseObj = new ParseObj (null, N_PARSE_DOCTYP, szValue);
	theParseObj = parseString (theParseObj);
	if (bTestExistField) {
		if (theParseObj.List[DOCTYP_EXISTFIELD] == '1')
			return (theParseObj.List[DOCTYP_ID]);
		else
			return (0);
	}
	else
		return (theParseObj.List[DOCTYP_ID]);
}

function SelectTypologyIndex (theMainForm, theTypologyForm)
{
	var i;
	var szValue;

	var theTypologyListObj = theMainForm.TypologyList;
	for (i = 0; i < theTypologyListObj.options.length; i++) {
		szValue = theTypologyListObj.options[i].value;
		var theParseObj = new ParseObj (null, N_PARSE_DOCTYP, szValue);
		theParseObj = parseString (theParseObj);
	
		if (theMainForm.TypologyID.value == theParseObj.List[DOCTYP_ID]) {
			theTypologyListObj.selectedIndex = i;
			iTypologyList_PrevSelIndex = i;
			return;
		}
	}
}

function SetHasBeenFilled (theMainForm, theTypologyForm)
{
	var theTypologyListObj = theMainForm.TypologyList;
	var iSelected = theTypologyListObj.selectedIndex;
	var szValue = theTypologyListObj.options[iSelected].value;
	var theParseObj = new ParseObj (null, N_PARSE_DOCTYP, szValue);
	theParseObj = parseString (theParseObj);
	if (theParseObj.List[DOCTYP_REQUIRED] == '1')
		theTypologyForm.HasBeenFilled.value = '1';
	else {
		if (theParseObj.List[DOCTYP_EXISTFIELD] == '1')
			theTypologyForm.HasBeenFilled.value = '1';
		else
			//Case of STANDARD Typology
			theTypologyForm.HasBeenFilled.value = '0';
	}	
}

function GetTypologyID1 (theTypologyListObj, bTestExistField, oClasses)
{
	var szValue = theTypologyListObj.options[theTypologyListObj.selectedIndex].value;
	var oIdx = GetOrderIndex (oClasses.ItemsList, "ID", szValue);
	
	if (oIdx.bExist) {
		if (bTestExistField) {
			if (oClasses.ItemsList[oIdx.i].bExist == '1')
				return (oClasses.ItemsList[oIdx.i].ID);
			else
				return (0);
		}
		else
			return (oClasses.ItemsList[oIdx.i].ID);
	}
	return (0);
}

function CheckTypologyRequired1 (theMainForm)
{
	var bFlag = false;
	
	var theSelectedClasses = theMainForm.SelectedClasses;
	for (i = 0; i < theSelectedClasses.options.length; i++) {
		var szValue = theSelectedClasses.options[i].value;
		var oIdx = GetOrderIndex (oClasses.ItemsList, "ID", szValue);
		
		if (oIdx.bExist) {
			if (oClasses.ItemsList[oIdx.i].bReq == '1') {
				if (oClasses.ItemsList[oIdx.i].HasBeenFilled == '1')
					continue;
				else {
					alert (Sprintf (szDocProf_FieldsIncomplete, 
								oClasses.ItemsList[oIdx.i].szDescr));
					return (true);
				}
			}
		}
		else 
			return (true);
	}
	
	return (false);
}

function SetHasBeenFilled1 (bReq, bExist)
{
	if (bReq == '1')
		return('1');
	else {
		if (bExist == '1')
			return('1');
		else
			return('0');//Case of STANDARD Typology
	}	
}

function TestTypology (TheForm)
{
	TheForm.TypologyID.value = "";
	TheForm.Numbers.value = "";
	TheForm.Texts.value = "";
	TheForm.Dates.value = "";
	TheForm.Blobs.value = "";
			
	for (var i=0; i< oClasses.ItemsList.length; i++) {
		var oItem = oClasses.ItemsList[i];
		if (oItem.bChange) {
			if (TheForm.TypologyID.value.length)
				TheForm.TypologyID.value += "|";
			TheForm.TypologyID.value += oItem.ID;
			
			if (TheForm.Numbers.value.length)
				TheForm.Numbers.value += "|";
			TheForm.Numbers.value += "ID=";
			TheForm.Numbers.value += oItem.ID;
			TheForm.Numbers.value += "|";
			if (!oItem.bNumbersChange)
				TheForm.Numbers.value += szNoChange;
			else 
				TheForm.Numbers.value += oItem.Numbers;
				
			if (TheForm.Texts.value.length)
				TheForm.Texts.value += "|";
			TheForm.Texts.value += "ID=";
			TheForm.Texts.value += oItem.ID;
			TheForm.Texts.value += "|";
			if (!oItem.bTextsChange)
				TheForm.Texts.value += szNoChange;
			else 
				TheForm.Texts.value += oItem.Texts;
				
			if (TheForm.Dates.value.length)
				TheForm.Dates.value += "|";
			TheForm.Dates.value += "ID=";
			TheForm.Dates.value += oItem.ID;
			TheForm.Dates.value += "|";
			if (!oItem.bDatesChange)
				TheForm.Dates.value += szNoChange;
			else 
				TheForm.Dates.value += oItem.Dates;
				
			if (TheForm.Blobs.value.length)
				TheForm.Blobs.value += "|";
			TheForm.Blobs.value += "ID=";
			TheForm.Blobs.value += oItem.ID;
			TheForm.Blobs.value += "|";
			if (!oItem.bBlobsChange)
				TheForm.Blobs.value += szNoChange;
			else 
				TheForm.Blobs.value += oItem.Blobs;
		}
	}
}

// Classes Object ****************************************************

function MarkAddNewKey (TheForm)
{
	var i;
		
	for (var i = TheForm.TypologyList.options.selectedIndex; i != -1 && i < TheForm.TypologyList.options.length; i++) {
		if (!TheForm.TypologyList.options[i].selected)
			continue;
		var szTypologyID = TheForm.TypologyList.options[i].value;
		var oIdx = GetOrderIndex (TheForm.SelectedClasses.options, "text", TheForm.TypologyList.options[i].text);
		if (oIdx.bExist)
			continue;
		oIdx = GetOrderIndex (oClasses.ItemsList, "ID", szTypologyID);
		
		if (oIdx.bExist) {
			oClass = oClasses.ItemsList[oIdx.i];
			oClass.bChange = true;
			oClass.bInUse = false;
			oClass.Numbers = "";
		 	oClass.Texts = "";
		 	oClass.Dates = "";
		 	oClass.Blobs = "";
		 	oClass.Descr_ML_SS = ""
		 	oClass.Descr_ML_MS = ""
		 	oClass.HasBeenFilled = '0';
		 	oClass.bNumbersChange = false;
		 	oClass.bTextsChange = false;
		 	oClass.bDatesChange = false;
		 	oClass.bBlobsChange = false;
		}
	}
	
	AddNewKey (TheForm.TypologyList, 
				TheForm.SelectedClasses, 
				TheForm.AddKeys);
	
	if (TheForm.OK)
		TheForm.OK.disabled = false;
}

function MarkRemoveNewKey (TheForm)
{
	var szID = TheForm.SelectedClasses.value;
	RemoveNewKey(TheForm.SelectedClasses);
	var oIdx = GetOrderIndex (oClasses.ItemsList, "ID", szID);
		
	if (oIdx.bExist) {
		oClass = oClasses.ItemsList[oIdx.i];
		oClass.bChange = false;
		oClass.bInUse = true;
		oClass.Numbers = "";
	 	oClass.Texts = "";
	 	oClass.Dates = "";
	 	oClass.Blobs = "";
	 	oClass.Descr_ML_SS = ""
	 	oClass.Descr_ML_MS = ""
	 	oClass.HasBeenFilled = '0';
	 	oClass.bNumbersChange = false;
	 	oClass.bTextsChange = false;
	 	oClass.bDatesChange = false;
	 	oClass.bBlobsChange = false;
	}
	if (TheForm.OK)
		TheForm.OK.disabled = false;
}

function Classes ()
{
	this.ItemsList = new Array ();
	this.Add = AddItem;
}

function ClassItem (ID, szDescr, bInUse, bReq, bExist, Numbers, Texts, Dates, Blobs, Descr_ML_SS, Descr_ML_MS, HasBeenFilled)
{
	this.ID = ID;
	this.szDescr = szDescr;
	this.bInUse = bInUse;
	this.bChange = false;
	this.bReq = bReq;
	this.bExist = bExist;
	this.Numbers = Numbers;
 	this.Texts = Texts;
 	this.Dates = Dates;
 	this.Blobs = Blobs;
 	this.Descr_ML_SS = Descr_ML_SS
 	this.Descr_ML_MS = Descr_ML_MS
 	this.HasBeenFilled = HasBeenFilled;
 	this.bNumbersChange = false;
 	this.bTextsChange = false;
 	this.bDatesChange = false;
 	this.bBlobsChange = false;
}

function AddItem (ID, szDescr, bInUse, bReq, bExist, Numbers, Texts, Dates, Blobs, Descr_ML_SS, Descr_ML_MS, HasBeenFilled)
{
	var oIdx = GetOrderIndex (this.ItemsList, "ID", ID);
	
	if (oIdx.bExist)
		return (-1);

    InserIntoArray (this.ItemsList, oIdx.i, new ClassItem (ID, szDescr, bInUse, bReq, bExist, "", "", "", "", "", "", HasBeenFilled));
}

// End Classes Object ****************************************************

function TestTypologyModify (TheForm)
{
	TheForm.TypologyID.value = "";
	TheForm.Numbers.value = "";
	TheForm.Texts.value = "";
	TheForm.Dates.value = "";
	TheForm.Blobs.value = "";
		
	for (var i=0; i< oClasses.ItemsList.length; i++) {
		var oItem = oClasses.ItemsList[i];
		if (!oItem.bInUse) {
			if (TheForm.TypologyID.value.length)
				TheForm.TypologyID.value += "|";
			TheForm.TypologyID.value += oItem.ID;
		
			if (oItem.bChange) {
				if (TheForm.Numbers.value.length)
					TheForm.Numbers.value += "|";
				TheForm.Numbers.value += "ID=";
				TheForm.Numbers.value += oItem.ID;
				TheForm.Numbers.value += "|";
				if (!oItem.bNumbersChange)
					TheForm.Numbers.value += szNoChange;
				else 
					TheForm.Numbers.value += oItem.Numbers;
					
				if (TheForm.Texts.value.length)
					TheForm.Texts.value += "|";
				TheForm.Texts.value += "ID=";
				TheForm.Texts.value += oItem.ID;
				TheForm.Texts.value += "|";
				if (!oItem.bTextsChange)
					TheForm.Texts.value += szNoChange;
				else 
					TheForm.Texts.value += oItem.Texts;
					
				if (TheForm.Dates.value.length)
					TheForm.Dates.value += "|";
				TheForm.Dates.value += "ID=";
				TheForm.Dates.value += oItem.ID;
				TheForm.Dates.value += "|";
				if (!oItem.bDatesChange)
					TheForm.Dates.value += szNoChange;
				else 
					TheForm.Dates.value += oItem.Dates;
					
				if (TheForm.Blobs.value.length)
					TheForm.Blobs.value += "|";
				TheForm.Blobs.value += "ID=";
				TheForm.Blobs.value += oItem.ID;
				TheForm.Blobs.value += "|";
				if (!oItem.bBlobsChange)
					TheForm.Blobs.value += szNoChange;
				else 
					TheForm.Blobs.value += oItem.Blobs;
			}
		}
		else {
			if (oItem.bOldClass) {
				if (TheForm.TypIDRemove.value.length)
						TheForm.TypIDRemove.value += "|";
					TheForm.TypIDRemove.value += oItem.ID;
			}
		}
	}
}

function FillHiddenClasses (TheForm)
{
	TheForm.TypologyID.value = "";
	TheForm.Numbers.value = "";
	TheForm.Texts.value = "";
	TheForm.Dates.value = "";
	TheForm.Blobs.value = "";
	
	var TheSelectField = TheForm.SelectedClasses;
	
	for (var i = 0; i < TheSelectField.options.length; i++) {
		var szTypologyID = TheSelectField.options[i].value;
		var oIdx = GetOrderIndex (oClasses.ItemsList, "ID", szTypologyID);
		if (!oIdx.bExist)
			continue;
		var oItem = oClasses.ItemsList[oIdx.i];
		if (oItem.HasBeenFilled != '1') {						
			if (TheForm.TypologyID.value.length)
				TheForm.TypologyID.value += ',';
			TheForm.TypologyID.value += TheSelectField.options[i].value;
			TheSelectField.options[i].selected = false;
		}
		else {
			if (oItem.bChange) {
				if (TheForm.Numbers.value.length)
					TheForm.Numbers.value += "|";
				TheForm.Numbers.value += "ID=";
				TheForm.Numbers.value += oItem.ID;
				TheForm.Numbers.value += "|";
				if (!oItem.bNumbersChange)
					TheForm.Numbers.value += szNoChange;
				else 
					TheForm.Numbers.value += oItem.Numbers;
					
				if (TheForm.Texts.value.length)
					TheForm.Texts.value += "|";
				TheForm.Texts.value += "ID=";
				TheForm.Texts.value += oItem.ID;
				TheForm.Texts.value += "|";
				if (!oItem.bTextsChange)
					TheForm.Texts.value += szNoChange;
				else 
					TheForm.Texts.value += oItem.Texts;
					
				if (TheForm.Dates.value.length)
					TheForm.Dates.value += "|";
				TheForm.Dates.value += "ID=";
				TheForm.Dates.value += oItem.ID;
				TheForm.Dates.value += "|";
				if (!oItem.bDatesChange)
					TheForm.Dates.value += szNoChange;
				else 
					TheForm.Dates.value += oItem.Dates;
					
				if (TheForm.Blobs.value.length)
					TheForm.Blobs.value += "|";
				TheForm.Blobs.value += "ID=";
				TheForm.Blobs.value += oItem.ID;
				TheForm.Blobs.value += "|";
				if (!oItem.bBlobsChange)
					TheForm.Blobs.value += szNoChange;
				else 
					TheForm.Blobs.value += oItem.Blobs;
			}
			
		}
	}			
}
