function initDestinationMenu(){
	mostPopularArea = new GeoArea("",villageFinderLabels.getRessources("MOST_POPULAR").title , new SmartImage("/static/images/MapMostPopular.jpg",true));

	var destinationMenuDomRef = new DestinationMenuDomRef();
	destinationMenuDomRef.byPleasure = document.getElementById("cmThemeListScroller");
	destinationMenuDomRef.byGeoArea = document.getElementById("cmRegionListScroller");
	destinationMenuDomRef.allVillages = document.getElementById("cmAllVillagesListScroller");
	destinationMenuDomRef.themeVillageList = document.getElementById("cmThemeVillagesListScroller");
	destinationMenuDomRef.regionVillageList = document.getElementById("cmRegionVillagesListScroller");

	var iDestinationMenu = new IDestinationMenu(destinationMenuDomRef, Villages);
	iDestinationMenu.render();

	document.getElementById('cmRegionListSmartScroller').scroller = SmartManualScroller;
	document.getElementById('cmRegionListSmartScroller').scroller();

	document.getElementById('cmAllVillagesListSmartScroller').scroller = SmartManualScroller;
	document.getElementById('cmAllVillagesListSmartScroller').scroller();

	document.getElementById('cmThemeVillagesListSmartScroller').scroller = SmartManualScroller;
	document.getElementById('cmThemeVillagesListSmartScroller').scroller();

	document.getElementById('cmRegionVillagesListSmartScroller').scroller = SmartManualScroller;
	document.getElementById('cmRegionVillagesListSmartScroller').scroller();


	/*****************************************************************************
	    Dynamic hoookup to the "villages/villagefinder" menu items
	*/

	(document.getElementById('cmDestSMVF')).onmouseover = cmDestSMVFonMouseOver;
	function cmDestSMVFonMouseOver() {
		closeAllVillageList2();
		closeRegionList2();
		closeThemeList2();
	};
}




/***************************/
/*    DESTIANTION MENU     */
/***************************/

function DestinationMenuDomRef() {
	this.domRef =  new function(){
		this.byPleasure = null;
		this.byGeoArea = null;
		this.allVillages = null;
		this.themeVillageList = null;
		this.regionVillageList = null;
	}
}

//var menutimeout = null;
var destinationTimeout = null;
var themeTimeout = null;
var regionTimeout = null;
var allVillagesTimeout = null;
var villagelistTimeout = null;
var CloseDelay = 100;

function IDestinationMenu(domRef, villages){
	var iVillages = new IVillages(villages);
	var Me = this;
	this.generateByPleasure = _IDestinationMenu_generateByPleasure;
	this.generateByGeoArea = _IDestinationMenu_generateByGeoArea;
	this.generateAllVillages = _IDestinationMenu_generateAllVillages;

	this.populateVillageList = _IDestinationMenu_populateVillageList;

	this.render = _IDestinationMenu_render;

	function _IDestinationMenu_render(){
		this.generateByPleasure();
		this.generateByGeoArea();
		this.generateAllVillages();
	}

	function _IDestinationMenu_generateByPleasure(){
		var ul = domRef.byPleasure.getElementsByTagName("ul")[0];
			for (var key in Pleasures.hashtable){
			li = ul.appendChild(generateLI(Pleasures.get(key),"#"));
			li.key = key;
			li.onmouseover = function(){
				allVillagesTimeout = stopSingleTimeout(allVillagesTimeout);
				document.getElementById("cmThemeVillagesListScroller").style.display = "block";
				var pleasureVillages = new IVillages(iVillages.getByPleasure(this.key));
				Me.populateVillageList(pleasureVillages.getUniqueVillages(sessionTravelingMonth),domRef.themeVillageList.getElementsByTagName("ul")[0]);
		  }
		}
	}

	function _IDestinationMenu_generateByGeoArea(){
		var ul = domRef.byGeoArea.getElementsByTagName("ul")[0];

		var mostPopularVillages = new IVillages(iVillages.getByMostPopular());
		li = ul.appendChild(generateLI(mostPopularArea), "#");
        li.onmouseover = function(){
                allVillagesTimeout = stopSingleTimeout(allVillagesTimeout);
                document.getElementById("cmRegionVillagesListScroller").style.display = "block";
                var mostPopVillages = new IVillages(iVillages.getByMostPopular());
                Me.populateVillageList(mostPopVillages.getUniqueVillages(sessionTravelingMonth),domRef.regionVillageList.getElementsByTagName("ul")[0]);
            }

		for (var key in GeoAreas.hashtable){
        	var geoAreaVillages = new IVillages(iVillages.getByGeoArea(GeoAreas.get(key)));
            li = ul.appendChild(generateLI(GeoAreas.get(key)), "#");
            li.key = key;
            li.onmouseover = function(){
                allVillagesTimeout = stopSingleTimeout(allVillagesTimeout);
                document.getElementById("cmRegionVillagesListScroller").style.display = "block";
                var geoAreaVillages = new IVillages(iVillages.getByGeoArea(GeoAreas.get(this.key)));
                Me.populateVillageList(geoAreaVillages.getUniqueVillages(sessionTravelingMonth),domRef.regionVillageList.getElementsByTagName("ul")[0]);
            }
		}
	}

    function _IDestinationMenu_generateAllVillages(){
        var ul = domRef.allVillages.getElementsByTagName("ul")[0];
		var iUniqueVillages = new IVillages(Villages);
		var uniqueVillages = iUniqueVillages.getUniqueVillages(sessionTravelingMonth);

        for (var key in uniqueVillages.hashtable){
			ul.appendChild(generateLI(iUniqueVillages.getVillage(key), villageWelcomeUrl + iUniqueVillages.getVillage(key).id));
		}
	}

    function _IDestinationMenu_populateVillageList(villageList, ul){
        ul.removeAllChildNodes = _removeAllChildNodes;
        ul.removeAllChildNodes();
        var iVillageList = new IVillages(villageList);
        for (var key in villageList.hashtable){
            ul.appendChild(generateLI(iVillageList.getVillage(key), villageWelcomeUrl + iVillageList.getVillage(key).id));
		}
    }

    /**** Private Functions ****/
    function generateLI(value, url){
		var li = document.createElement("li");
		a =  document.createElement("a");
		a.href = (url+"" != "undefined")? url : "#";

		a.innerHTML = value.name
		if (new String(value.location) != "undefined"){
            if (value.location.length > 0)
                a.innerHTML = a.innerHTML.concat(", ", value.location);
		}

		li.appendChild(a);
		return li;
	}
}

function open_nume0_SM(){
    destinationTimeout = stopSingleTimeout(destinationTimeout);
    document.getElementById("nume0_2").className = "Selected";
    document.getElementById("nume0_SM").style.display = "block";

    close_div("nume1_SM2()");
    close_div("nume2_SM2()");
    
    close_nume3_0_TM();
	close_nume3_1_TM();
    /*
    close_nume1_SM();
    close_nume2_SM();
	close_nume3_SM();	
	close_nume4_SM();	
	close_nume5_SM();	
	close_nume6_SM();
	*/	
}

function open_nume1_SM(){
    destinationTimeout = stopSingleTimeout(destinationTimeout);
    document.getElementById("nume1_2").className = "Selected";
    document.getElementById("nume1_SM").style.display = "block";
	
    close_nume0_SM();	
    close_nume2_SM();	
	close_nume3_SM();	
	close_nume4_SM();	
	close_nume5_SM();	
	close_nume6_SM();	
	
	close_nume3_0_TM();
	close_nume3_1_TM();
}
function open_nume2_SM(){
    destinationTimeout = stopSingleTimeout(destinationTimeout);
    document.getElementById("nume2_2").className = "Selected";
    document.getElementById("nume2_SM").style.display = "block";
    
    close_nume0_SM();
	close_nume1_SM();	
	close_nume3_SM();	
	close_nume4_SM();	
	close_nume5_SM();	
	close_nume6_SM();		
	
	close_nume3_0_TM();
	close_nume3_1_TM();
}
function open_nume3_SM(){
    destinationTimeout = stopSingleTimeout(destinationTimeout);
    document.getElementById("nume3_2").className = "Selected";
    document.getElementById("nume3_SM").style.display = "block";
    document.getElementById("nume3_0_SMVF").className = "";
    document.getElementById("nume3_1_SMVF").className = "";
    
    close_nume0_SM();
	close_nume1_SM();	
	close_nume2_SM();	
	close_nume4_SM();	
	close_nume5_SM();	
	close_nume6_SM();

	close_nume3_0_TM();
	close_nume3_1_TM();
}
function open_nume4_SM(){
    destinationTimeout = stopSingleTimeout(destinationTimeout);
    document.getElementById("nume4_2").className = "Selected";
    document.getElementById("nume4_SM").style.display = "block";
    
    close_nume0_SM();
	close_nume1_SM();	
	close_nume2_SM();	
	close_nume3_SM();	
	close_nume5_SM();	
	close_nume6_SM();		
	
	close_nume3_0_TM();
	close_nume3_1_TM();
}
function open_nume5_SM(){
    destinationTimeout = stopSingleTimeout(destinationTimeout);
    document.getElementById("nume5_2").className = "Selected";
    document.getElementById("nume5_SM").style.display = "block";

    close_nume0_SM();
	close_nume1_SM();	
	close_nume2_SM();	
	close_nume3_SM();	
	close_nume4_SM();	
	close_nume6_SM();		
	
	close_nume3_0_TM();
	close_nume3_1_TM();
}
function open_nume6_SM(){
    destinationTimeout = stopSingleTimeout(destinationTimeout);
    document.getElementById("nume6_2").className = "Selected";
    document.getElementById("nume6_SM").style.display = "block";
    
    close_nume0_SM();
	close_nume1_SM();	
	close_nume2_SM();	
	close_nume3_SM();	
	close_nume4_SM();	
	close_nume5_SM();		
	
	close_nume3_0_TM();
	close_nume3_1_TM();
}

function close_div(code){
    destinationTimeout = startSingleTimeout(destinationTimeout, code, CloseDelay);
}

function close_nume0_SM(){
    destinationTimeout = startSingleTimeout(destinationTimeout, "nume0_SM2()", CloseDelay);
}
function close_nume1_SM(){
    destinationTimeout = startSingleTimeout(destinationTimeout, "nume1_SM2()", CloseDelay);
}
function close_nume2_SM(){
    destinationTimeout = startSingleTimeout(destinationTimeout, "nume2_SM2()", CloseDelay);
}
function close_nume3_SM(){
    destinationTimeout = startSingleTimeout(destinationTimeout, "nume3_SM2()", CloseDelay);
}
function close_nume4_SM(){
    destinationTimeout = startSingleTimeout(destinationTimeout, "nume4_SM2()", CloseDelay);
}
function close_nume5_SM(){
    destinationTimeout = startSingleTimeout(destinationTimeout, "nume5_SM2()", CloseDelay);
}
function close_nume6_SM(){
    destinationTimeout = startSingleTimeout(destinationTimeout, "nume6_SM2()", CloseDelay);
}


function nume0_SM2(){
	document.getElementById("nume0_2").className = "";
	document.getElementById('nume0_SM').style.display = 'none'
}
function nume1_SM2(){
	document.getElementById("nume1_2").className = "";
	document.getElementById('nume1_SM').style.display = 'none'
}
function nume2_SM2(){
	document.getElementById("nume2_2").className = "";
	document.getElementById('nume2_SM').style.display = 'none'
}
function nume3_SM2(){
	document.getElementById("nume3_2").className = "";
	document.getElementById('nume3_SM').style.display = 'none'
	document.getElementById('nume3_0_TM').style.display = 'none';
	document.getElementById('nume3_1_TM').style.display = 'none';
}
function nume4_SM2(){
	document.getElementById("nume4_2").className = "";
	document.getElementById('nume4_SM').style.display = 'none'
}
function nume5_SM2(){
	document.getElementById("nume5_2").className = "";
	document.getElementById('nume5_SM').style.display = 'none'
}
function nume6_SM2(){
	document.getElementById("nume6_2").className = "";
	document.getElementById('nume6_SM').style.display = 'none'
}

/// 1 ///

function open_nume3_0_TM(){
    destinationTimeout = stopSingleTimeout(destinationTimeout);
    document.getElementById("nume3_0_SMVF").className = "Selected";
    document.getElementById("nume3_0_TM").style.display = "block";
    document.getElementById('nume3_1_TM').style.display = 'none'
    
    //close_nume1_2_TM();
}
function close_nume3_0_TM(){
    destinationTimeout = startSingleTimeout(destinationTimeout, "nume3_0_TM2()", CloseDelay);
}

function nume3_0_TM2(){
	document.getElementById("nume3_1").className = "";
	//document.getElementById("nume3_0_SMVF").style.display = 'none';
	document.getElementById('nume3_0_TM').style.display = 'none';
	//document.getElementById('nume1_2_TM').style.display = 'none';
}

/// 2 ///

function open_nume3_1_TM(){
    destinationTimeout = stopSingleTimeout(destinationTimeout);
    document.getElementById("nume3_1_SMVF").className = "Selected";
    document.getElementById("nume3_1_TM").style.display = "block";
    document.getElementById('nume3_0_TM').style.display = 'none'
    
    //close_nume1_1_TM();
}
function close_nume3_1_TM(){
    destinationTimeout = startSingleTimeout(destinationTimeout, "nume3_1_TM2()", CloseDelay);
}

function nume3_1_TM2(){
	document.getElementById("nume3_0").className = "";
	document.getElementById('nume3_1_TM').style.display = 'none'
	//document.getElementById('nume1_1_TM').style.display = 'none';
}

/*****************************************************************************
	Timeout handling functions which prevents the multiple trigerring of
	globally controlled events
*/

/*
function startSingleTimeout(TimeoutId, code, CloseDelay) {
	if (TimeoutId == null) {
		return setTimeout(code, CloseDelay);
	}
	return TimeoutId;
}
*/
function startSingleTimeout(TimeoutId, code, CloseDelay) {
		return setTimeout(code, CloseDelay);

}

function stopSingleTimeout(TimeoutId) {
	if (TimeoutId != null) {
		clearTimeout(TimeoutId);
		return null;
	}
	return TimeoutId;
}




