function displayId(element_id){
	var element = document.getElementById(element_id);
		
	if( element  != null ){
		element.className = "kat_show";
		debugPrint("Displaying Element: "+element_id);
	}
	else
		element("Can't get Element: "+element_id);
	
}

function hideId(element_id){
	var element = document.getElementById(element_id);
		
	if( element  != null ){
		element.className = "kat_hide";
		debugPrint("Hiding Element: "+element_id);
	}
	else
		element("Can't get Element: "+element_id);
	
}

function setText(text) {
	var myElement=document.getElementById("teileauswahl");
	
	/* inneren HTML-Text setzen */
	  myElement.innerHTML="Sie haben "+text+" gewählt!";
	  
	  if( text == "Nove" ){
	  	myElement.innerHTML += "<br/>Zu Nove bieten wir folgende Komponenten an:";
	  	myElement.innerHTML += '<br/><input type="radio" name="gabel" value="0" id="select19" checked>Keine Auswahl<br><input type="radio" name="gabel" value="109" id="select19">Kinesis Carbon - (109,00 €) <br></font><font face="Arial, Helvetica, sans-serif" size="2"> <input type="radio" name="gabel" value="199" id="select19">Stiletto Race - (199,00 €) <br><input type="radio" name="gabel" value="399" id="select19">Stiletto Aero - (399,00 €) <br>';
	}
}	

if( gShowPrices == undefined )
 var gShowPrices = false;
 
if( maxKat == undefined )
 var maxKat = 100; // ugly
if( selectedParts == undefined )
 var selectedParts = new Array(maxKat); // ugly
if( preise == undefined ){
 var preise = new Array(maxKat); // ugly
 // init
 for(var i=0;i<preise.length;i++) preise[i] = 0.0;
}

// EINZELPREIS des AKTUELLEN RAHMENS
var vk_preis = 0.0; 
var normal_preis = 0.0;
// anzahl gewählter Teile
var anzahlTeile = 0; 
function aktualisierePreis(kategorie,preis){
	//alert('akt. Preis kat:' + kategorie );
	
	
	preise[parseInt(kategorie)] = parseFloat(preis);
	
	test = getSelectedPartsAsCommaText();		
	// keine teile _bisher_: Einzelpreis f. Rahmen nehmen (kat 1 = rahmen, 14 = lackierung)
	// alert(anzahlTeile);
	
	if ( ( ( test.length == 0 || test == "" ) || ( anzahlTeile == 0 || anzahlTeile == 1) )&& ( kategorie== 1 || kategorie == 14 ) )	{
		preise[1] = parseFloat(vk_preis);
		// alert("nehme vkpreis: " + vk_preis);		
	} else {		
		preise[1] = parseFloat(normal_preis);
		// alert("nehme Paket-Preis: " + normal_preis);		
	}
	
	
	//alert(preise[parseInt(kategorie)]);
	var summe = 0.0;
	// summieren
	
	// wenn kat. = 1 oder kat= lackierung => normalpreis nehmen
	// if (kategorie == 1 ||
	
	for(var i=0;i<preise.length;i++) 
		summe += preise[i];
	
		
		
	var myElement=document.getElementById("preis_summe");

	if( myElement  != null ){
		var text = ""+summe; //.toString()
		
		//text = text.replace(/\./, ",");
		myElement.innerHTML = text+"&nbsp;&euro;";
	}else	alert("null");
}


// ******* new *******
/**
 * Print some text in the Debug-Frame
 */
function debugPrint(text){
	var debugArea = document.getElementById("debug_area");
		
	if( debugArea  != null ){
		if( debugArea.innerHTML.length == 0 )
			debugArea.innerHTML = "<strong>DEBUG:</string><br/>";

		debugArea.innerHTML += text+"<br/>";
		// debugArea.style.visibility = "visible";
	}
}

/**
 * function selectNewFrame
 *
 * einen neuen Rahmen wählen
 * vk_preis ist der Preis wenn NUR der Rahmen gekauft wird
 * preis ist der Paketpreis
 */

function selectNewFrame(id,img_url,preis, neuer_vk_preis){
	debugPrint("neuer Rahmen gewählt: "+id);
	
	// vorher gewählte Elemente löschen:
	selectedParts = new Array(maxKat);
	preise = new Array(maxKat); // ugly
 	// init
 	for( i=0;i<preise.length;i++) preise[i] = 0.0;
	
	vk_preis = neuer_vk_preis;
	normal_preis = preis;		
	showNewFrameImage(img_url);
		
	aktualisierePreis(1,preis);
				
	debugPrint("Preis: "+preis+" &euro;");
	// Kategorien anzeigen
	xajax_getKategorien();
}

function showNewFrameImage(url){
	// bild ändern
	var myElement=document.getElementById("rahmenbild");
			
	if( myElement != null){
		debugPrint("neues Rahmenbild:"+url);
		myElement.src = url;
	}
}

function displaySelection(kategorie_id,text) {
	var element_id = "div_cat_sel_"+kategorie_id;
	var myElement=document.getElementById(element_id);
	
	if( myElement  != null ){
	/* inneren HTML-Text setzen */
	  //myElement.innerHTML=text;
	  myElement.innerHTML="";
		debugPrint("Setting Element: "+element_id);
	}
	else
		debugPrint("Can't set Element: "+element_id);


	element_id = "div_cat_"+kategorie_id+"_seltext";
	myElement=document.getElementById(element_id);

	if( myElement  != null ){
	/* inneren HTML-Text setzen */
	  //myElement.innerHTML=text;
	  myElement.innerHTML = text;
  	  debugPrint("Setting Element: "+element_id);
	}
	else
		debugPrint("Can't set Element: "+element_id);
}	

function showSelectionText(kategorie_id,show) {
	var element_id = "div_cat_"+kategorie_id+"_seltext";
	var myElement=document.getElementById(element_id);

	if( myElement  != null ){
	  if( show == true )
	  	myElement.style.visibility = "visible";
	  else
	  	myElement.style.visibility = "hidden";
  	  debugPrint("Setting Element "+element_id+" to "+myElement.style.visibility);
	}
	else
		debugPrint("Can't set Element: "+element_id);
}	

/******
 * Kategorie ein oder ausklappen (klick auf [+] oder [-])
 */
function toggleKategorieById(element_id){
	var element = document.getElementById(element_id);
	var icon =  document.getElementById(element_id+"_icon");

	var category_id = element_id.substr("div_cat_".length,element_id.length-"div_cat_".length);

	if( element  != null ){
		// hide category
		if( element.className == "kat_show" ){
			debugPrint("Hiding Element: "+element_id);
			element.className = "kat_hide";
			if( icon != null )
				icon.src = "images/plus.gif";
			else
				debugPrint("Can't switch icon: "+element_id+"_icon");

			showSelectionText(category_id,true);

		// show category
		}else if( element.className == "kat_hide") {
			// displaySelection(category_id,"");
			showSelectionText(category_id,false);

			debugPrint("Updating Element: "+element_id);
			element.innerHTML = "Auswahl wird aktualisiert ...";
			// formular aufbauen
	
			// get selected_frame_id
			var selectedFrame = getSelectedFrameId();

		
			var selected_parts;
      
			// Workaround: Montagegruppe ohne abh.Pürfung zu Kurbeln
			if( false && category_id == 3 /* Montagegruppe */ ){
				debugPrint("Montagegruppe komplett anzeigen");
				var catKurbeln = ""+7;
				var alte_kurbel = selectedParts[catKurbeln]; // Alte Kurbel merken

				selectedParts[catKurbeln] = ""; // Kurbel abwählen 
				selected_parts = getSelectedPartsAsCommaText();
				selectedParts[catKurbeln] = alte_kurbel; // gemerkte Kurbel wählen 
			}			
			else
				selected_parts = getSelectedPartsAsCommaText();

			debugPrint("xajax_getTeileFuerRahmenUndKategorie("+selectedFrame+", "+category_id
				+", \""+selected_parts+"\""
				+")");

		  	xajax_getTeileFuerRahmenUndKategorie(selectedFrame, category_id, selected_parts );

			
			debugPrint("Displaying Element: "+element_id);
			element.className = "kat_show";
			if( icon != null )
				icon.src = "images/minus.gif";
			else
				debugPrint("Can't switch icon: "+element_id+"_icon");
		}
	}
	else
		debugPrint("Can't get Element: "+element_id);	
}

function lockKategorieById(element_id){
	var element = document.getElementById(element_id+"_head");
	var icon =  document.getElementById(element_id+"_icon");

	if( element  != null ){
			element.onclick = null;
			if( icon != null )
				icon.src = "images/checked.gif";
			else
				debugPrint("Can't switch icon: "+element_id+"_icon");
			debugPrint("disabling Element: "+element_id);
			element.className = "kat_head_disabled";
	}
	else
		debugPrint("Can't get Element: "+element_id);		

}

function arrayIndexOf(value,array){
	for(var i=0;i<array.length;i++){
  		if( array[i] == value )
			return i;
	}
	return -1;
}
function inArray(value, array){
 if( arrayIndexOf(value,array) != -1 ){
   return true;
 }

 return false;
}

function enableOrderButton(enabled){
	
	var element = document.getElementById("button_bestellen");
    var Xsum = document.getElementById("show_summe");
    
    
   	if (Xsum != null) {
    	if (enabled == true) {
    		Xsum.style.visibility = "visible";
    	} else {
 			Xsum.style.visibility = "hidden";
 		}	
    }
    
 	if( element != null ) { 		 		
 		return element.disabled = !enabled;
 		}
}


function checkOrderIsComplete(){
  var required = getRequiredCategoryList();
  var s = "";
  var c=0;
  for(var i=0;i<required.length;i++){
  	if( selectedParts[""+required[i]] != undefined && selectedParts[""+required[i]] != "" ){
    	s += required[i]+"-";	
    	c++;
    }
  }
  
 //  debugPrint(required.join("-") +"-<br/>\n"+s );
  if( c == required.length || c == 1) {
    enableOrderButton(true);
  } else enableOrderButton(false);

    
}


function selectPart(kategorie_id, komb_id, teile_bezeichnung, preis, istInkompatibel){
	selectPartAndUpdate(kategorie_id, komb_id, teile_bezeichnung, preis, istInkompatibel);
	debugPrint("Selected Parts: "+getSelectedPartsAsCommaText());
}

function selectPartMulti(kategorie_id, komb_id, teile_bezeichnung, preis, istInkompatibel){
	// Array anlegen und anhängen
	var arr = new Array();

	if( selectedParts[""+kategorie_id] != null ){
		arr = selectedParts[""+kategorie_id].split(",");
	}
	
	if( !inArray(komb_id,arr) ){
		aktualisierePreis(kategorie_id,preise[parseInt(kategorie_id)]+preis);
		arr.push(komb_id); // teil anfügen
		selectedParts[""+kategorie_id] = arr.join(","); // gewählte Teile merken
	}else{
		aktualisierePreis(kategorie_id,preise[parseInt(kategorie_id)]-preis);
		var idx = arrayIndexOf(komb_id,arr);
		arr.splice(idx,1);  // teil löschen
		selectedParts[""+kategorie_id] = arr.join(","); 
	}

	debugPrint( "Selected:"+getSelectedPartsAsCommaText() );
}
	
function selectPartNoUpdate(kategorie_id, komb_id, teile_bezeichnung, preis, istInkompatibel){
	aktualisierePreis(kategorie_id,preis);
	selectedParts[""+kategorie_id] = komb_id; // gewählte Teile merken
	// displaySelection(kategorie_id,"Gewählt: <i>"+teile_bezeichnung+"</i>");
	
	if( gShowPrices != 0 )
		displaySelection(kategorie_id,teile_bezeichnung+"&nbsp;&nbsp;&nbsp;&nbsp;"+preis+" &euro;");
	else
		displaySelection(kategorie_id,teile_bezeichnung );
		
	toggleKategorieById("div_cat_"+kategorie_id);
//	lockKategorieById("div_cat_"+kategorie_id);

	// Bild wechseln, wenn farbe gewechselt
	if( kategorie_id == 14 )
		setFrameImageForColorKombId( selectedParts[""+14] );

    checkOrderIsComplete();
}

function selectPartAndUpdate(kategorie_id, komb_id, teile_bezeichnung, preis, istInkompatibel){
	debugPrint("selectPartAndUpdate("+kategorie_id+",..)");
	aktualisierePreis(kategorie_id,preis);

	selectedParts[""+kategorie_id] = komb_id; // gewählte Teile merken

	if( istInkompatibel ){ // Anmerkung entfernen
		var str = teile_bezeichnung;
		debugPrint("<verbatim>"+str+"</verbatim>");
		if( str.indexOf("<i>") != -1 )
			str = str.substring(	str.indexOf("<i>")+"<i>".length,str.length -1);
		debugPrint("<verbatim>"+str+"</verbatim>");

		if( str.indexOf("</i>") != -1 )
			str = str.substring(	0,str.indexOf("</i>") );
		debugPrint("<verbatim>"+str+"</verbatim>");
			
		lAnmerkungInkompatibel = "(ungeeignet zu einer bereits gewählten Komponente)";
		
		if( str.indexOf(lAnmerkungInkompatibel) != -1 )
			str = str.substring( 0,str.indexOf(lAnmerkungInkompatibel) );

		if( str.indexOf(" &nbsp;") != -1 )
			str = str.substring(	0,str.indexOf(" &nbsp;") );

		debugPrint("<verbatim>"+str+"</verbatim>");
			
		if( gShowPrices != 0 )
			displaySelection(kategorie_id,str+"&nbsp;&nbsp;&nbsp;&nbsp;"+preis+" &euro;");
		else
			displaySelection(kategorie_id,str );
   }
	else{
		if( gShowPrices != 0 )
			displaySelection(kategorie_id,teile_bezeichnung+"&nbsp;&nbsp;&nbsp;&nbsp;"+preis+" &euro;");
		else
			displaySelection(kategorie_id,teile_bezeichnung );
	}
	toggleKategorieById("div_cat_"+kategorie_id);
	
	// Andere offene, zu prüfende Updaten?
	var kategorien = getRequiredCategoryList();
	var str="";
	var current_element;

	for(var i=0;i<kategorien.length;i++){
		current_element = document.getElementById("div_cat_"+kategorien[i]+"_head");
	    
		if( current_element != null ){
			var current_element_img = document.getElementById("div_cat_"+kategorien[i]+"_icon");

		  // A) alle anderen aktualisieren, die potentiell inkomp. sein könnten
		  // if( kategorien[i] != kategorie_id
			// B) Wenn Montagegruppe, dann aktualisiere nur Kurbeln.


			if( current_element.className == "kat_head_check" 
					&& current_element_img != null
					&& current_element_img.src.lastIndexOf("images/minus.gif") != -1 )
			{			
				// Montagegruppen (3) und Kurbeln (7)
				if( kategorie_id != 7 && kategorien[i] != 3 ||
							 kategorie_id == 3 && istInkompatibel == 1  && kategorien[i] == 7 ) 
				{
					 updateOpenCategory( kategorien[i] );
				} // wozu dann oben nicht?
				else if(kategorie_id == 7 && kategorien[i] == 3)
					 updateOpenCategory( kategorien[i] );
	
	
				debugPrint("kategorie_id = "+kategorie_id+", kategorien[i] = "+kategorien[i]+", istInkompatibel = "+istInkompatibel);
//				if( istInkompatibel == 1 ) 
				{
					// Laufräder (5), Reifen (13) und Schläuche (6)
	
					// Schlauch geklickt -> Reifen und Laufräder nachladen	
					if( kategorie_id == 6 && ( kategorien[i] == 5 || kategorien[i] == 13) )
						 updateOpenCategory( kategorien[i] );
	
					// reifen geklickt -> Schlauch und Laufräder nachladen	
					if( kategorie_id == 13 && ( kategorien[i] == 6 || kategorien[i] == 5) )
						 updateOpenCategory( kategorien[i] );
	
					// Laufräder geklickt -> Reifen und Schläuche nachladen	
					if( kategorie_id == 5 && ( kategorien[i] == 6 || kategorien[i] == 13) )
						 updateOpenCategory( kategorien[i] );
				}
			}
		}
	}

	// Montagegruppe überschreibt Kurbel
	if( kategorie_id == 3 ){
		 // nach auswahl deaktivieren
//  	debugPrint("Montagegruppen nach Auswahl deaktivieren: "+kategorie_id);
//		lockKategorieById("div_cat_"+kategorie_id);
		
		if( istInkompatibel == 1 ) {
			debugPrint("inkompatible Montagegruppe gewählt -> Kurbeln zurücksetzen"); 
		   	selectedParts[""+7] = ""; // Kurbel abwählen 
		   	displaySelection(7,"");
			
			debugPrint("xajax_getTeileFuerRahmenUndKategorie("+getSelectedFrameId()+", "+7
				+", \""+getSelectedPartsAsCommaText()+"\""
				+")");

		   	// update all with kat check
		   	updateOpenCategory( 7 );
		   	displayId("div_cat_"+7);
		}
	}

	// Laufradsatz (5) überschreibt Reifen (13) und Schlauch (6)
	if( kategorie_id == 5 ){
		 // nach auswahl deaktivieren
//  	debugPrint("Montagegruppen nach Auswahl deaktivieren: "+kategorie_id);
//		lockKategorieById("div_cat_"+kategorie_id);
		
		if( istInkompatibel == 1 ) {
			debugPrint("inkompatibler Laufradsatz gewählt -> Reifen und Schlauch zurücksetzen"); 
		   	
		   	// Reifen abwählen 
		   	selectedParts[""+13] = ""; 
		   	displaySelection(13,"");

			debugPrint("xajax_getTeileFuerRahmenUndKategorie("+getSelectedFrameId()+", "+13
				+", \""+getSelectedPartsAsCommaText()+"\""
				+")");

		   	updateOpenCategory( 13 ); // update all with kat check
		   	displayId("div_cat_"+13);

		   	// Schlauch abwählen 
		   	selectedParts[""+6] = ""; 
		   	displaySelection(6,"");
			
			debugPrint("xajax_getTeileFuerRahmenUndKategorie("+getSelectedFrameId()+", "+6
				+", \""+getSelectedPartsAsCommaText()+"\""
				+")");

		   	updateOpenCategory( 6 ); // update all with kat check
		   	displayId("div_cat_"+6);
		}
	}
	
	// Bild wechseln, wenn farbe gewechselt
	if( kategorie_id == 14 )
		setFrameImageForColorKombId( selectedParts[""+14] );

  checkOrderIsComplete();
}

function updateOpenCategory(category_id){
   debugPrint("Updating open Category: "+category_id);

   var current_element_clientArea = document.getElementById("div_cat_"+category_id);
   
   if( current_element_clientArea != null ){
	   current_element_clientArea.innerHTML = "Auswahl wird aktualisiert ...";
	}

	debugPrint("xajax_getTeileFuerRahmenUndKategorie("+getSelectedFrameId()+", "+category_id
		+", \""+getSelectedPartsAsCommaText()+"\""
		+")");

   // update all with kat check
   xajax_getTeileFuerRahmenUndKategorie(getSelectedFrameId(), category_id, getSelectedPartsAsCommaText() );
}

function getSelectedFrameId(){
	// get selected_frame_id
	var myElement=document.configForm.Rahmen;
	var selectedFrame =0 ;
	if( myElement != null){
		for(i=0;i<myElement.length;i++){
			if( myElement[i].checked ){
				return myElement[i].value;
				break;
			}
		}
	}
	return 0;
}

function isArray(obj) {
   if (obj.constructor.toString().indexOf("Array") == -1)
      return false;
   else
      return true;
}

function getSelectedPartsAsCommaText(){
	var i;
	var str = "";
	anzahlTeile = 0; 	
	
	for(i=0;i<selectedParts.length;i++){

	  if( selectedParts[""+i] != undefined && selectedParts[""+i] != null && selectedParts[""+i] != "" && selectedParts[""+i] != 0){
	  	anzahlTeile++ ;
		if( isNaN(selectedParts[""+i])  )
			str += selectedParts[""+i]+",";
		else
	    	str += selectedParts[""+i]+",";
	  }
	}
	str = str.substring(0,str.length-1);
	
	return str;
}

function getRequiredCategoryList(){
 	var element = document.getElementById("required_categories");
    
 	if( element != null )
 		return element.innerHTML.split(",");
	else
		return new Array();
}

function setFrameImageForColorKombId(color_id){
	xajax_setFrameImageForColorKombId(color_id);
}
