var formName = 'selectCasa';
var statoListName = 'paese';
var regioneListName = 'regione';
var provinciaListName = 'provincia';

var arrays = new Array();
arrays[0] = states;
arrays[1] = regions_data;
arrays[2] = province_data;


function defineListArray() {
	var lists = new Array();
	var currentForm = document.forms[formName];
	lists[0] = currentForm.elements[statoListName];
	lists[1] = currentForm.elements[regioneListName];
	lists[2] = currentForm.elements[provinciaListName];
	return lists;
}

function appendToTheList(listPos,code) {
	var lists = defineListArray();
	var objList = lists[listPos];
	var arrayData = arrays[listPos];
	objList.length = arrayData.length + 1;
	var settedPos = -1;
	for( i=0 ; i < arrayData.length ; i++ ) {
		var row = arrayData[i].split(';');
		objList.options[i+1].value = row[0];
		objList.options[i+1].text =  row[1];
		if (code != null)
			if ( code[listPos] == row[0] )
				settedPos = (i+1);
	}

	if ( settedPos >= 0 ) {
		objList.selectedIndex =  settedPos;
		populateTheChildList(listPos+1,code);
	}
}

function appendToTheList2(listPosizione,arrayData,code) {
	var lists = defineListArray();
	var objList = lists[listPosizione];
	objList.length = arrayData.length + 1;
	var settedPos = -1;
	for( i=0 ; i < arrayData.length ; i++ ) {
		var row = arrayData[i].split(';');
		objList.options[i+1].value = row[0];
		objList.options[i+1].text =  row[1];
		if (code != null)
			if ( code[listPosizione] == row[0] )
				settedPos = (i+1);
	}
	
	if ( settedPos >= 0 ) {
		objList.selectedIndex =  settedPos;
		// check if there is a child list to populate
		var nextPos = listPosizione+1;
		if ( nextPos <  lists.length)
			populateTheChildList(nextPos,code);
	}
}

function deleteList(listPos) {
	var lists = defineListArray();
	var objList = lists[listPos];
	objList.length = 1;
}

function populateTheChildList(listPos,codeArray) {
	// populate the child list
	var lists = defineListArray();
	var arrayData = arrays[listPos];
	
	if ( listPos == 1 ) {
		startPos = lists[0].selectedIndex;

		if( startPos == 0) {
			unsetChildLists(listPos - 1);
			return;
		}
	}
	else if ( listPos > 1 ) {
		tempArrayPos = arrayData[1];
		for ( i=0; i < ( listPos - 1); i++ ) {
			tempArrayPos = tempArrayPos[ lists[i].selectedIndex -1 ];
		}
		selPos = lists[listPos - 1].selectedIndex;
		if ( selPos == 0 ) {
			unsetChildLists(listPos - 1);
			return;
		}
		startPos = tempArrayPos + selPos;
	}
	
	var extractedString = arrayData[0][startPos-1];
	if ( extractedString.length > 0 ) {
		var childArrayData = arrayData[0][startPos-1].split(',');
		appendToTheList2(listPos,childArrayData,codeArray);
	}
	else
		deleteList(listPos);
}

function unsetChildLists(listPos) {
	var lists = defineListArray();
	for(var i = listPos; i < lists.length; i++) {
		if ( i == listPos ) {
			lists[i].selectedIndex = 0;
		}
		else {
			lists[i].length = 1;
		}
	}
}

// obsolete functions





function resetChildLists(list) {
	var lists = defineListArray();
	var posList = -1;
	for(var i = 0; i < lists.length; i++) {
		if ( posList >= 0 ) {
			if ( ( i - posList ) == 1 ) {
				lists[i].selectedIndex = 0;
			}
			else {
				lists[i].length = 1;
			}
		}
		if ( list == lists[i] ) {
			posList = i;
		}
	}
}

function populateChildList(formPos,formList,arrayData,selectedMenus) {
	if ( selectedMenus.length == 1 ) {
		startPos = selectedMenus[0];
	}
	else if ( selectedMenus.length > 1 ) {
		tempArrayPos = arrayData[1];
		for ( i=0; i < ( selectedMenus.length - 1); i++ ) {
			tempArrayPos = tempArrayPos[ selectedMenus[i] -1 ]
		}
		startPos = tempArrayPos + selectedMenus[selectedMenus.length - 1];
	}		  
	var extractedString = arrayData[0][startPos-1];
	if ( extractedString.length > 0 ) {
		var childArrayData = arrayData[0][startPos-1].split(',');
		appendToList(formPos,formList,childArrayData);
	}
	else
		resetList(formPos,formList);
		
}

function appendToList(formPos,formList,arrayData,code) {
	var objList = document.forms[formPos].elements[formList];
	objList.length = arrayData.length + 1;
	for( i=0 ; i < arrayData.length ; i++ ) {
		var row = arrayData[i].split(';');
		objList.options[i+1].value = row[0];
		objList.options[i+1].text =  row[1];
	}
}

function resetList(formPos,formList) {
	var objList = document.forms[formPos].elements[formList];
	objList.length = 1;
}

function setPosLists(posArray) {
	var lists = defineListArray();
	for (var i=0; i < lists.length; i++ ) {
		switch( i ) {
			case 0:
				break;
			case 1:
				populateChildList('selectCasa','regione',regions_data,[posArray[0]]);
				break;
			case 2:
				populateChildList('selectCasa','provincia',province_data,[posArray[0],posArray[1]]);
		}
		lists[i].selectedIndex = posArray[i];
	}
}

