/*
 * <copyright>
 *  Copyright (c) 2009 by IICM, Graz University of Technology, Austria
 * </copyright>
 *
 *  This software is the confidential information of IICM,
 *  Graz University of Technology, Austria. You shall not disclose such
 *  confidential information and shall use it only in accordance with
 *  the IICM.
 *
 *  IICM MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
 *  SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
 *  IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 *  PURPOSE, OR NON-INFRINGEMENT. IICM SHALL NOT BE LIABLE FOR ANY DAMAGES
 *  SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
 *  THIS SOFTWARE OR ITS DERIVATIVES.
 *
 */
 

function getRegions(idAnchor, currentIndex, currentLevel, regionCode, lgKey) {

	regionCode = trim(regionCode);
	DWRUtil.useLoadingMessage('Connecting...');	
	useLoadingImage("resources/appl_images/loading_image43x11.gif","idCatalogRegionsPosition");		
	CatalogRegions.getRegions( currentLevel, regionCode, lgKey,
		{ 	callback:function(RegionsTO) { fillRegionsTable( RegionsTO, idAnchor, currentIndex, currentLevel, regionCode, lgKey ); }, 
			errorHandler:function(message) { errorHandlerCatalogRegions(); }, 
			timeout:0
		} 
	);
}

// Error Handling
function errorHandlerCatalogRegions() {
	alert ("Connection Timeout");
	document.formCatalogSearch.submit(); // Submit Formular	
}


function fillRegionsTable( RegionsTO, idAnchor, currentIndex, currentLevel, regionCode, lgKey ) {
	var regionsObj = RegionsTO;
	var messages = regionsObj.lgKeys;				
	var tableElem,tbodyElem,buttonElem,inputElem,textElem,trElem,tdElem,hrElem,innerTableElem,innerTbodyElem,innerTdElem,innerTrElem;
	var regionCode = trim(regionCode);
	
	// Create Regions-Table
	if (regionCode == "") { // If no previous selection create entire table
		if ( document.getElementById( idAnchor ) != null) {
			removeAllChildNodes(idAnchor);
		}
		tableElem = document.createElement("table");
		tableElem.className="regions";
		tbodyElem = document.createElement("tbody");
		// First Row (Header)
		trElem = document.createElement("tr");			
		tdElem = document.createElement("td");
		tdElem.className="regions_topLeft";
		tdElem.colSpan="3";
		textElem = document.createTextNode(messages['regions']);
		tdElem.appendChild(textElem);
		trElem.appendChild(tdElem);				
		tdElem = document.createElement("td");	
		tdElem.className="regions_topRight";
		tdElem.colSpan="1";
		buttonElem = document.createElement("input");	
		buttonElem.setAttribute("type","button");	
		buttonElem.setAttribute("value","X");
		buttonElem.className = "regions_topRight";
		buttonElem.onclick = new Function("javascript:removeAllChildNodes('"+idAnchor+"');");
		tdElem.appendChild(buttonElem);
		trElem.appendChild(tdElem);	
		tbodyElem.appendChild(trElem);	
		// Second Row (Users Selection)	
		trElem = document.createElement("tr");	
		tdElem = document.createElement("td");
		tdElem.className="regions_middle";		
		tdElem.colSpan="4";
		innerTableElem=document.createElement("table");
		setStyle(innerTdElem,"width:100%;");				
		innerTableElem.className="regions";		
		innerTbodyElem=document.createElement("tbody");
		innerTrElem=document.createElement("tr");
		innerTdElem=document.createElement("td");
		setStyle(innerTdElem,"white-space:nowrap;width:10%;");		
		innerTdElem.className="regions_middle";
		textElem = document.createTextNode(messages['yourSelection']+" ");							
		innerTdElem.appendChild(textElem);
		inputElem = document.createElement("input"); // Hidden field used to store Users Selection
		inputElem.id="idTextRegionsSelected";
		inputElem.type="hidden";
		innerTdElem.appendChild(inputElem);
		innerTrElem.appendChild(innerTdElem);
		innerTdElem=document.createElement("td");
		setStyle(innerTdElem,"width:80%;");						
		innerTdElem.className="regions_middle";
		inputElem = document.createElement("textarea");
		inputElem.setAttribute("rows","2");
		inputElem.readOnly="true";
		inputElem.className="regions_middle";
		inputElem.id="idDisplayedTextRegionsSelected";	
		innerTdElem.appendChild(inputElem);
		innerTrElem.appendChild(innerTdElem);	
		innerTdElem = document.createElement("td");
		setStyle(innerTdElem,"width:10%;");								
		innerTdElem.className="regions_middle";	
		setStyle(innerTdElem,"vertical-align:middle");		
		buttonElem = document.createElement("input");
		buttonElem.id="idRegionAcceptButton";	
		buttonElem.setAttribute("type","button");	
		buttonElem.setAttribute("value",messages['accept']);
		buttonElem.setAttribute("disabled","true");
		buttonElem.className = "regions_middle_accept";
		buttonElem.onclick = new Function("acceptRegionCode('"+regionCode+"','"+idAnchor+"','"+currentIndex+"');");
		innerTdElem.appendChild(buttonElem);
		innerTrElem.appendChild(innerTdElem);
		innerTbodyElem.appendChild(innerTrElem);
		innerTableElem.appendChild(innerTbodyElem);
		tdElem.appendChild(innerTableElem);
		trElem.appendChild(tdElem);			
		tbodyElem.appendChild(trElem);
		// Third Row (hr)
		trElem = document.createElement("tr");	
		tdElem = document.createElement("td");
		tdElem.colSpan="4";
		tdElem.className="regions_middle";
		hrElem = document.createElement("hr");							
		tdElem.appendChild(hrElem);
		trElem.appendChild(tdElem);
		tbodyElem.appendChild(trElem);
		//  Fourth Row (InnerTable containig selects)
		trElem = document.createElement("tr");	
		trElem.id = idAnchor+"_rangeSelections"; // Anchor for inserting Regions-Selects
		tbodyElem.appendChild(trElem);
		// Fifth row (Message doubleclick)
		trElem = document.createElement("tr");	
		tdElem = document.createElement("td");
		tdElem.colSpan="4";
		tdElem.className="regions_bottom";
		textElem = document.createTextNode(messages['click']);							
		tdElem.appendChild(textElem);
		trElem.appendChild(tdElem);
		tbodyElem.appendChild(trElem);
		tableElem.appendChild(tbodyElem);	
		// Append table to Anchor
	  	document.getElementById( idAnchor ).appendChild(tableElem);
	}
	else { // If previous selection delete Selectboxes only
		if ( document.getElementById( idAnchor+"_rangeSelections" ) != null) {
			removeAllChildNodes( idAnchor+"_rangeSelections" );
		}		
	}
	
	// Insert Regions-Select-Boxes in DOM-Tree
	trElem = document.getElementById(idAnchor+"_rangeSelections");
	for (level=0; level<=3; level++) {	
		tdElem = document.createElement("td");
		tdElem.className="regions_middle";		
		innerTableElem = getRegionSelects( RegionsTO, idAnchor, currentIndex, currentLevel, regionCode, lgKey, level); // Get Select Boxes  nuts0-nuts3
		tdElem.appendChild(innerTableElem);	
		trElem.appendChild(tdElem);	
	}	
	
	// Set onClick-Event of Accept-Button if region selected
	buttonElem = document.getElementById("idRegionAcceptButton");
	buttonElem.onclick = new Function("acceptRegionCode('"+regionCode+"','"+idAnchor+"','"+currentIndex+"');");	
}



function getRegionSelects( RegionsTO, idAnchor, currentIndex, currentLevel, regionCode, lgKey, level) {
	var regionsObj = RegionsTO;
	var messages = regionsObj.lgKeys;	
	var regions;			
	var numberOfEntries=0;
	var tableElem,tbodyElem,trElem,tdElem,selectElem;

	// Enable Accept-Button if regionCode available
	if (trim(regionCode) != '') {
		document.getElementById("idRegionAcceptButton").disabled=false;
	}
	// Set Table for displaying regions using level
	if (level == 0) {regions = regionsObj.nuts0; }
	if (level == 1) {regions = regionsObj.nuts1; }
	if (level == 2) {regions = regionsObj.nuts2; }
	if (level == 3) {regions = regionsObj.nuts3; }
	if ( regions != null ) {numberOfEntries = regions.length;}
	
	// Create Table including select-box
	tableElem = document.createElement("table");
	tableElem.className="regionsContent";
	tbodyElem = document.createElement("tbody");
	// First Row (Header)
	trElem = document.createElement("tr");			
	tdElem = document.createElement("td");
	tdElem.className="regionsContent_headline";
	var keyMsgHeadline="nut"+level;
	textElem = document.createTextNode(messages[keyMsgHeadline]);
	tdElem.appendChild(textElem);
	trElem.appendChild(tdElem);	
	tbodyElem.appendChild(trElem);	
	// Second Row (Selectbox)
	trElem = document.createElement("tr");		
	tdElem = document.createElement("td");
	tdElem.className="regionsContent";			
	var selectElem = document.createElement('select');
  	selectElem.name = 'regionSelect'+level.toString();
  	selectElem.id = 'idRegionSelect'+level.toString();  	
  	selectElem.size=20;
   	selectElem.className="regionsContent";	 
   	var nextLevel = level+1;
    selectElem.onclick= new Function( "getSelection('idRegionSelect','"+idAnchor+"','"+currentIndex+"',"+nextLevel+",'"+regionCode+"','"+lgKey+"');");
   	//selectElem.ondblclick= new Function("acceptRegionCode('"+regionCode+"','"+idAnchor+"','"+currentIndex+"');");
  	for (var i=0; i < numberOfEntries; i++){
		var optionElem = document.createElement('option');	
		optionElem.value = regions[i].regionCode;			
		optionElem.innerHTML = regions[i].name;
		selectElem.appendChild(optionElem);
		currentLen = regions[i].regionCode.length;
		if (regionCode != '' && regionCode.length >=currentLen ) {			
			if (regionCode.substring(0,currentLen) == regions[i].regionCode) { 
				optionElem.selected = 'selected';
			}
		}
	}		
	tdElem.appendChild(selectElem);
	trElem.appendChild(tdElem);
	tbodyElem.appendChild(trElem);
	tableElem.appendChild(tbodyElem);
	return tableElem;	
}



function getSelection(idRegionSelectBox,idAnchor,currentIndex,nextLevel,selectedRegionCode,lgKey) {

 	var currentLevel = nextLevel-1;	
	var idSelectBox = "";
	var textUsersSelection = "";
	var textNut = "";
	var regionCode = "";


	if (!document.getElementById) {return; }
	idSelectBox = idRegionSelectBox+(currentLevel);
	try {
		regionCode = document.getElementById(idSelectBox).options[document.getElementById(idSelectBox).selectedIndex].value;
		textNut = document.getElementById(idSelectBox).options[document.getElementById(idSelectBox).selectedIndex].text;		
	}
	catch (e) {
		regionCode = selectedRegionCode;
		textNut = "";
	}	
	// Get Text for displaying current Selection
	var currentTextUsersSelection = document.getElementById('idTextRegionsSelected').value;
	splittedText = currentTextUsersSelection.split("|||");
	var ct=0;
	while (ct<splittedText.length && ct<currentLevel) {	
		if (ct==0) {
			textUsersSelection = splittedText[ct];
		}
		else {	
			textUsersSelection += "|||"+splittedText[ct];	
		}
		ct++;
	}
	if (currentLevel > 0) {	
		textUsersSelection += "|||"+textNut;				
	}
	else {
		textUsersSelection = textNut;
	}
	document.getElementById('idTextRegionsSelected').value = textUsersSelection;
	textUsersSelection = textUsersSelection.replace(/\|\|\|/g, " >> ");
	document.getElementById('idDisplayedTextRegionsSelected').value = textUsersSelection;		
			
	// Get next Level
	//if (nextLevel<=3) {
		//waitOnAccept = window.setTimeout("getRegions('"+idAnchor+"','"+nextLevel+"','"+regionCode+"','"+lgKey+"');",200);
		getRegions(idAnchor,currentIndex,nextLevel,regionCode,lgKey);
	//}
	//else {
	//	return false;
	//}	
}


function acceptRegionCode(regionCode,idAnchor, currentIndex) {
	//clearTimeout(waitOnAccept);
	if (!document.getElementById) {return; }
//alert("Accept Selection( RegionCode = '"+regionCode+"' ) CurrentIndex="+currentIndex);
	// Set regionCode in addSearchTerm
	document.getElementById("idaddSearchTerm"+currentIndex).value=regionCode;
	// Set corresponding region as text in searchTerm
	var currentTextUsersSelection = document.getElementById('idTextRegionsSelected').value;
	var textToSetInSearchTerm =	"";	
	if (currentTextUsersSelection != "") {
		splittedText = currentTextUsersSelection.split("|||");
		textToSetInSearchTerm = splittedText[splittedText.length-1];
	}
	document.getElementById("idsearchTerm"+currentIndex).value=textToSetInSearchTerm;
	// Clear entire Table
	if ( document.getElementById( idAnchor ) != null) {
		removeAllChildNodes(idAnchor);
	}
	
	
}
