	/**
 	 * Überprüft, ob die Produktvarianten ausgewählt sind
 	 */
	function checkProductForm(pForm, values){
		if(values && values.length>0){
			for(var i=0; i<values.length; i++){
				option_value = pForm.elements[values[i]].value;
				//alert(option_value);
				if( !(option_value>0)){
					alert("Bitte wählen Sie Produktoptionen aus!");
					return false;
				}
			}
		}
		
		return true;
	}
	
	/*var Variants = Array(
		Array("dunkelblau", "S"),
		Array("dunkelblau", "M"),
		Array("dunkelblau", "L"),
		Array("dunkelblau", "XL"),
		Array("grau", "S"),
		Array("grau", "M"),
		Array("grau", "L"),
		Array("grau", "XL"),
		Array("blau", "S"),
		Array("blau", "M"),
		Array("blau", "L"),
		Array("blau", "XL"),
		Array("schwarz", "S"),
		Array("schwarz", "M"),
		Array("schwarz", "L"),
		Array("schwarz", "XL")
	);	
	res = getNextElements(Variants, 0, "grau");
	alert(res);
	*/
	
	function evalJSON(jsonData){
    	var jsonObject = eval('(' + jsonData + ');');
    	//alert(jsonObject);
    	return jsonObject;
	}
	
	//
	function createFirstPullDown(id, index, pVariantNames, pVariantKeys){
		var objSel = document.getElementById(id);
		//alert(objSel);
		
		var options_names = getElements(pVariantNames, index);
		var options_keys  = getElements(pVariantKeys, index);
		//alert(options_names);
		
		clearOptions(objSel);
		for(var i=0; i < options_names.length; i++){
			pName  = options_names[i];
			pValue = options_keys[i];
			
			addOption(objSel, pName,pValue);
		}
	}
	
	//
	function createNextPullDown(current_id, next_id, current_index, pVariantNames, pVariantKeys){
		var objSelCurrent = document.getElementById(current_id);
		var objSelNext = document.getElementById(next_id);
		
		if(!objSelNext){
			return ;
		}
		
		//alert(objSelNext);
		var value = objSelCurrent.options[objSelCurrent.selectedIndex].text;
		var key   = objSelCurrent.options[objSelCurrent.selectedIndex].value;
		//alert(value);
		
		var options_names = getNextElements(pVariantNames, current_index, value);
		var options_keys  = getNextElements(pVariantKeys, current_index, key);
		//alert(options_names);
		
		clearOptions(objSelNext);
		for(var i=0; i < options_names.length; i++){
			pName  = options_names[i];
			pValue = options_keys[i];
						
			addOption(objSelNext, pName,pValue);
		}
	}	
	
	/**
 	 *
 	 */
	function getElements(pVariantNames, index){
		var stack = Array();
		
		for(var i=0; i < pVariantNames.length; i++){
			current = pVariantNames[i][index];
			
			// doppelte ausfiltern
			if(!inArray(stack, current)){
				stack.push(current);		
			}	
		}
		
		return stack;
	}	
	
	/**
 	 *
 	 */
	function getNextElements(pVariantNames, index, value){
		var stack = Array();
		
		// bsp.: prüft ob die Variantkombination, hier als pVariantNames[0]=Array(0=>"Farbe", ..., index+1=>"Größe", ...), eine Größe hat.
		//var nextVariantTypeExist = (!pVariantNames[0][index+1] ? false : true); // geht auch
		var nextVariantTypeExist = ((index > pVariantNames[0].lenght)? false : true);
		if(!nextVariantTypeExist){
			return stack;
		}
		
		for(var i=0; i < pVariantNames.length; i++){
			current = pVariantNames[i][index];
			//next = (!pVariantNames[i][index+1] ? false : true);			
			
			if(current==value){// && next){
				nextElement = pVariantNames[i][index+1];
				
				// doppelte ausfiltern
				if(!inArray(stack, nextElement)){								
					stack.push(nextElement);
				}
			}
		}
		
		return stack;
	}
	

/**
 * adds option to select object
 *
 * @param pTarget - select object
 * @param pName - name of option element
 * @param pValue - value of option element
 */
function addOption(pTarget,pName,pValue){
	var vOption = new Option(pName,pValue,false,false);
	pTarget.options[pTarget.options.length] = vOption;
}

/**
 * delete all options elements from select object
 *
 * @param pTarget - target select object
 */
function clearOptions(pTarget){
	for(var i=pTarget.options.length-1; i>=0; i--){
		pTarget.options[i]=null;
	}
	
	// add first item
	addOption(pTarget, "...", -1);
	pTarget.selectedIndex = 0;
}

/**
 * found element in an array object
 * 
 * @param pArray - array object
 * @param pElement - scalar element
 */ 
function inArray(pArray,pElement){
	ElementFound = false;
	for(var i=0; i<pArray.length; i++){
		if(pArray[i]==pElement){
			ElementFound = true;
			break;
		}
	}
	
	return ElementFound;
}
