/**************************************/
// scripts_schmoe.js
// for STS WLV by SwissTravelCenter
// (NOT STC WLV)
// 
// September 2006
// 
// Schoelzel, Moehring GmbH
// info[at]schmoe[dot]de
// 
// Sebastian Patino-Lang
// patino[at]schmoe[dot]de
//
// 2006-12-12: SPL: added function clearAndResetFields(formID)
// 
/**************************************/

/*//////////////////////////
// Configuration Data
///////////////////////////*/

// Booking configuration Data:
//var currency 		= "CHF "; 	// including whitespace to value
 

var waehrungs_zeichen = 'CHF '		// including whitespace to value
var price_empty		= "&nbsp;"; 	// sign to display if there is no price yet
var discount 		= 15; 			// just integer (numbers)! without percentage sign
var discount_sign 	= "%"; 			// percentage sign
var discount_empty 	= "&nbsp;"; 	// sign to display if there is no discount
var error_color		= "#FFCCCC"		// Highlightfarbe fuer Fehlermeldungen/ Felder 

var curr_is = 'chf';
/*var curr_data = {
	euro: {exchange: 0.6281, sign: '&euro;'},
	chf: {exchange: 1.5920, sign: 'CHF'}
}*/

// Checkout configuration Data:
var porto = 8;
var wechselkurs = 1;
var waehrungszeichen = currency;

// System Data
var fallbackdata = new Array;
var undefined;
var NULL = 'NULL';
var waehrungszeichen = waehrungs_zeichen;
var reset_exclude_fields_regex = /\[age\]/;

// Var Mapping
var currency = (document.getElementById('waehrung')) ? document.getElementById('waehrung').value : waehrungs_zeichen;

/*//////////////////////////
// MM Dreamwaever scripts
///////////////////////////*/

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

/*//////////////////////////////////////
// 3. party helper functions
//////////////////////////////////////*/

function getElementsByClassName(oElm, strTagName, strClassName)
/*
	getElementsByClassName
    Written by Jonathan Snook, http://www.snook.ca/jonathan
    Add-ons by Robert Nyman, http://www.robertnyman.com
*/
{
    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++)
	{
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className))
		{
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}
function kaufm(x) 
// http://www.dcljs.de/faq/antwort.php?Antwort=rechnen_runden
{
	var k = (Math.round(x * 100) / 100).toString();
	k += (k.indexOf('.') == -1)? '.00' : '00';
	var p = k.indexOf('.');
	return k.substring(0, p) + '.' + k.substring(p+1, p+3);
}
function replace(string,text,by) {
// Replaces text with by in string
// http://www.irt.org/script/771.htm
    var strLength = string.length, txtLength = text.length;
    if ((strLength == 0) || (txtLength == 0)) return string;

    var i = string.indexOf(text);
    if ((!i) && (text != string.substring(0,txtLength))) return string;
    if (i == -1) return string;

    var newstr = string.substring(0,i) + by;

    if (i+txtLength < strLength)
        newstr += replace(string.substring(i+txtLength,strLength),text,by);

    return newstr;
}
/*//////////////////////////////////////
// Switch style.display setting scripts
//////////////////////////////////////*/

function MM_SCHMOE_showHideLayers() 
// v6.0 SCHMOE Mod v.1: 
// instead of changing visibility it switches between (display:'block';) and (display:'none';)
// bsp: MM_SCHMOE_showHideLayers('swissmap','','hide') or show;
{ 
	var i, p, v, obj, k;
	var args=MM_SCHMOE_showHideLayers.arguments;
	for (i=0; i<(args.length-2); i+=3) 
	{
		if ((obj=MM_findObj(args[i]))!=null) 
		{ 
			v=args[i+2];
			if (obj.style) 
			{ 
				obj=obj.style; 
				v=(v=='show')?'block':(v=='hide')?'none':v; 
			}
			obj.display=v;
		}
	}
}
function SCHMOE_switchDisplayBlock()
// switches every Arguments 'display' to block
{
	var i, p, v='show', obj, k;
	var args=SCHMOE_switchDisplayBlock.arguments;
	// Block auf block wenn value > 0
	for (i=0; i<(args.length); i++) 
	{
		if ((obj=MM_findObj(args[i]))!=null) 
		{ 
			if (obj.style) 
			{ 
				obj=obj.style; 
				v=(v=='show')?'block':(v=='hide')?'none':v; 
			}
			obj.display=v;
		}
	}
}
function SCHMOE_displayByValue(value,obj)
// value must be 0 or 1
// obj must be DIV ID
// switches obj 'display' to block or none
{
	obj = document.getElementById(obj);
	if (value == 0) { obj.style.display = 'none' }
	if (value == 1) { obj.style.display = 'block' }
}
// v6.0 SCHMOE Mod v.2: 
// switches between (display:'block';) and (display:'none';)
// bsp: MM_SCHMOE_showHideLayers('swissmap');
function SCHMOE_onOffLayers() 
{ 
	var i, p, v, obj, k;
	var args=SCHMOE_onOffLayers.arguments;
	for (i=0; i<(args.length); i++) 
	{
		if ((obj=MM_findObj(args[i]))!=null) 
		{ 
			if (obj.style) 
			{ 
				obj=obj.style; 
				if (obj.display == 'none') { v='block'; }
				if (obj.display == 'block') { v='none'; }
				if (obj.display == '') { v='none'; }
			}
			obj.display=v;
		}
	}
}

/*//////////////////////////////////////
// General purpose scripts
//////////////////////////////////////*/

function push2Value()
// Takes the first argument and pushes it into the value of the second argument
// Hides Layer "swissmap"
{
	var args=push2Value.arguments;
	if ((obj=MM_findObj(args[1])) != null)
	{
		obj.value = args[0];
	}
	MM_SCHMOE_showHideLayers('swissmap','','hide');
}
function clearValue()
{
	var args=clearValue.arguments;
	if ((obj=MM_findObj(args[0])) != null)
	{
		obj.value = '';
	}
}
function changeInnerHtml()
// Changes the innerHTML of the first arg (object ID) into the secong arg (string)
{
	var args=changeInnerHtml.arguments;
	if ((obj=MM_findObj(args[0])) != null)
	{
		obj.innerHTML = args[1];
	}
}
function setSelectListToValue()
// Arguments: 1.:value, 2.:target select (id or name)
{	
	var i, si, v, obj, args; 
	args=setSelectListToValue.arguments;
	
	if ((obj=MM_findObj(args[1])) != null)
	{
		v = args[0]; // value nach dem gesucht wird
		//alert(v);
		for(i=0; i<obj.length; i++)
		{
			// alert(obj.options[i].value+' ist '+i);
			if(obj.options[i].value == v) 
			{
				//alert(i);
				si = i // Wenn Option value = gesuchter value -> selectedindex speichern
			} 
		}
		//alert(obj.length);
		obj.selectedIndex = si;
	}
	// MM_SCHMOE_showHideLayers('swissmap','','hide');
}
function clearSelectList()
{
	var args=clearSelectList.arguments;
	if ((obj=MM_findObj(args[0])) != null)
	{
		obj.selectedIndex = 0;
	}
}
function debug(string)
{
	document.getElementById('debug').innerHTML += '<br />' + string;	
}
function debugClear()
{
	document.getElementById('debug').innerHTML = price_empty;	
}
function inspect(obj)
{
	var temp;
	for (x in obj)
	temp += x + ": " + obj[x] + "<br />";
	// debug(temp);
}
function getChildNodesIESave(node) 
{
	var j=0, i;
	var childrenTypeOne = new Array();
	var children = node.childNodes;
	for(i=0; i < children.length; i++)
	{
			//debug(children[i].nodeName);
			if (children[i].nodeType == 1) 
			{
				//debug(j +' - '+children[i].nodeName);
				childrenTypeOne[j] = children[i];
				j++;
			}
	}
	// debug('---------------');
	return childrenTypeOne;
}
function getFirstUpperElement(node, atrribute, value) 
// Helper
// parses the Tree upwards beginning with node and returns the first element with matching attribute value
// recursive
{
	
	// swicth for class attribute
	var class_switch;
	if(atrribute == 'class') 
	{
		// alert('class');
		class_switch = (node.className == value) ? true : false ;
		// debug(node.tagName + ' attribute ' + atrribute + value + ' NE ' + node.className + ' NE ' + node.id);
	} 
	else 
	{
		// alert('other');
		class_switch = (node.getAttribute(atrribute) == value) ? true : false;
		// debug(node.tagName + ' attribute ' + atrribute + ' NE ' + node.getAttribute(atrribute) + ' ' + node.id);
		
	}
	
	// main function
	if (class_switch == true)	
	{
		var returnVal = node;
		 // debug('retunrVal found! : ' + returnVal.tagName + ' ' + returnVal.getAttribute(atrribute) + ' ' + returnVal.id);
		 // debug('now recursive func return');
		return returnVal;
	} else {
		node = node.parentNode;
		returnVal = getFirstUpperElement(node, atrribute, value);
	}
	 // debug('ende Haupt funktion');
	return returnVal;
}

function percentOff(percent,off)
// Helper
{
	var one_percent = off/100;
	return off - (one_percent * percent);
}
function isPartOfArray(element,arr)
{
	var is_part = false
	for (var i=0; i<arr.length; i++)
	{
		// debug('check ob '+arr[i]+' = '+element); 
		if (arr[i] == element)
		{
			is_part = true	
			// debug('true');
		}
	}
	return is_part;
}
function dateSmalerThenToday(year, month, day)
{
	if(year>0 && month>0 && day>0)
	{
		var date_invalid = false;
		var date_today = new Date();
		var date_reisebeginn = new Date(year, month, day);
		//debug(date_reisebeginn.toString());
		if(date_today > date_reisebeginn) date_invalid = true; //debug(date_reisebeginn + ' ist zu frueh');
		return date_invalid;
	}

}
function cssIsSetTo(id_name, tag_name, class_name, setting, set_to)
{
	var searchSet = getElementsByClassName(document.getElementById(id_name), tag_name, class_name);
	for(var i=0; i< searchSet.length; i++)
	{
		if(searchSet[i].style[setting] == set_to)
		{
			return searchSet[i];
		}
	}
	return false;
}
function removeNode(node) 
{
	try
	{
		node.parentNode.removeChild(node);
		return true;
	}
	catch(err)
	{
		return false;
	}
}

function clearAndResetFields()
{
	var args=clearAndResetFields.arguments;
	var formID = args[0];
	var userdatatype = args[1];
	
	var i, kosten_divs, nameid;
	
	// get form
	var form = document.getElementById(formID);
	
	// iterate through form
	for(i=0; i<form.length; i++)
	{		
		if(form[i].id.search(reset_exclude_fields_regex) == -1) // if id doesn�t contain [age]
		{
			switch(form[i].tagName)
			{
				case "INPUT": 
					form[i].value = "";
					form[i].checked = false
					form[i].disabled = false;
					resetError(form[i]);
					break;
					
				case "SELECT":					
					if(form[i].id != '') clearSelectList(form[i].id);
					form[i].disabled = false;
					resetError(form[i]);
					break;
					
				default: 
					break;
			}				
		}
	}
	
	// iterate and clear kosten (price) divs
	kosten_divs = getElementsByClassName(form, 'div', 'kosten');
	for(i=0; i<kosten_divs.length; i++)
	{
		if(kosten_divs[i].parentNode.className != 'zeilenkopf')
		{
			switch(userdatatype) 
			{
				case 'halffare': ;
					break;
				case 'vignette': 
					setPrice_Vignette(price_vignette);
					break;
				default: 
					kosten_divs[i].innerHTML = price_empty;
					break;
			}
				
		}
	}
	
}

/*//////////////////////////////////////
// Calendar Helper Functions
// for XPCalendar
// http://www.calendarxp.net/
//////////////////////////////////////*/

// Calendar
function calculateDays()
// Calculates the departure day in 'depday' if 'arrday' and 'quantity_nights' is filled
{
	// get Dep/Arrday/Days Values from form
	var valueDepday = document.getElementById('depday').value;
	var valueArrday = document.getElementById('arrday').value;
	var valueDays 	= document.getElementById('qantity_nights').value;

	// BERECHNUNG: Bei offenen depday Feld
	if (valueArrday != '' && valueDays != '')
	{
		var dateArrday = createDateObject(valueArrday,' | ','.'); // ArrDay holen
		var dateDaysSeconds = valueDays*24*60*60*1000; // Tage in milSek umrechnen
		var valueDepday = dateArrday.getTime()+dateDaysSeconds; // ArrDay und Tage addieren
		var dateDepday = new Date(); 
		dateDepday.setTime(valueDepday);
		var weekdayDepday = weekdays[dateDepday.getDay()]; // Wochentag ermitteln
		insertDate(dateDepday,weekdayDepday,'depday'); // in depday schreiben
	}
}
// Helper functions from XPCalendar plugins.js
function createDateObject(dateString,firstSperator,secondSeperator)
{
	var dateValue, temp = dateString.split(firstSperator);
	if (temp.length == 1) dateValue = temp[0].split(secondSeperator);
	else if (temp.length == 2) dateValue = temp[1].split(secondSeperator);
	var dateObject = new Date(dateValue[2], dateValue[1]-1, dateValue[0]); // JS counts months from 0 to 11
	return dateObject;
}
function insertDate(dateObject,weekDay,inputName)
{
	var month = dateObject.getMonth() + 1; // JS counts months from 0 to 11
	document.getElementById(inputName).value = weekDay+' | '+dateObject.getDate()+'.'+month+'.'+dateObject.getFullYear();
}

/*//////////////////////////////////////
// Functions for STV WLV
//////////////////////////////////////*/

// Tab Navigation
function menuClick(aobject,cid) 
{
	var tabActiveID 		= 'active';
	var storeActiveLayer 	= 'store_active_layer'; 	// hidden input element to store the active layer name -> IE 5.0 compatibility
	var args 				= menuClick.arguments;
	var layerDeactivateOrigin, menuDeactivate;
	// Active Button Style
	menuDeactivate = MM_findObj(tabActiveID); 		// get active tab
	menuDeactivate.id = "";		 					// kill active tab
	args[0].id = tabActiveID; 					// set new active tab
	/*
	// Active Layer Visibility
	layerDeactivateOrigin = MM_findObj(storeActiveLayer); 				// get active layer name
	MM_SCHMOE_showHideLayers(layerDeactivateOrigin.value,'','hide'); 	// kill active layer
	MM_SCHMOE_showHideLayers(args[1],'','show');						// show new active
	layerDeactivateOrigin.value = args[1];								// save new active layer name

	document.getElementById('debug').innerHTML += ' layerDeactivateOrigin: '+layerDeactivateOrigin.value+'<br />';
*/
	return expandcontent(cid, aobject);
}
function expandcontent(cid, aobject){
	if (document.getElementById){
	if (previoustab!="")
		document.getElementById(previoustab).style.display="none"
		document.getElementById(cid).style.display="block"
	previoustab=cid
	if (aobject.blur)
		aobject.blur()
	return false
	}
	else
	return true
}
// init Page
function pageInit(activeLayer,activeTab) 
{
	var storeActiveLayer = 'store_active_layer';
	
	// create handler
	var activeTabHandle = MM_findObj(activeTab);
	var storeActiveLayerHandle = MM_findObj(storeActiveLayer);

	// menu + active layer
	activeTabHandle.id = 'active';
	storeActiveLayerHandle.value = activeLayer
	MM_SCHMOE_showHideLayers(activeLayer,'','show'); 
	
	// No No-JavaScript Message
	if(document.getElementById('nojavascript'))	MM_SCHMOE_showHideLayers('nojavascript','','hide');
	// document.getElementById('debug').innerHTML += ' storeActiveLayer: '+storeActiveLayer+'<br />';

	return activeLayer;
}
function switchColor(field) {
	var var1 = document.getElementById(field).firstChild.style.color =  "#FFFFFF";
	var var2 = document.getElementById(field).firstChild.style.textDecoration =  "none";
}
function undoSwitchColor(field) {
	var var1 = document.getElementById(field).firstChild.style.color =  "#000000";
	var var2 = document.getElementById(field).firstChild.style.textDecoration =  "underline";
}
function search_edomizil() {
		document.getElementById("search_simple").checked = "checked";
}

/*//////////////////////////////////////
// Helper functions for STS WLV
//////////////////////////////////////*/

// STS WLV:

function getZeileFromInside(node)
// Helper
// Gets the 'zeile' node from any inside node
{
	var target_node_status = false;
	while (target_node_status != true)
	{
		if (node.getAttribute('class') == 'zeile')	
		{
			var zeile = node;
			target_node_status = true;
		} 
		else 
		{
			node = node.parentNode;
		}
	}
	return zeile;
}
function getProductIdFromZeile(node)
// Helper
{
	// Hidden Fields
	var zeile_hidden_fields = node.getElementsByTagName('div')[4];
	var id = zeile_hidden_fields.getElementsByTagName('input')[1].value
	// debug('id gleich '+id);
	return id;
}

/*//////////////////////////////////////
// Creator functions for Swisspass STS WLV
//////////////////////////////////////*/

// Erstellt die Eingabezeilen
function createFields(wo, was, wieviel) {	
	
	// empty vars			
	var i, zeile, tempNode, old, active;
	
	// vars from site
	var tempText = document.createTextNode(dynamicLanguage.forAllAges['forall']);
	var tempText2 = document.createTextNode(dynamicLanguage.forAllAges[wo]);

	// Vorhandene Zeilen zaehlen
    var vorhandeneZeilen = getElementsByClassName(document.getElementById(wo), "div", "zeile");
	var anzahlZeilen = vorhandeneZeilen.length;

	// Zeilen Manipulieren
	if (anzahlZeilen < wieviel)
	{
		// Neue Zeilen erzeugen
		for (i = anzahlZeilen; i < wieviel; i++) 
		{
			// Elemente bauen
			zeile = document.getElementById(was).cloneNode(true); // neue Element erstellen -> MasterElement kopieren
			zeile.id = wo + "_" + i; // Neue Id setzen
			zeile.setAttribute("class","zeile"); // CSS Klasse setzen
			var zeileInhalt = getChildNodesIESave(zeile);		
			
			// Element an Position setzen	
			document.getElementById(wo).appendChild(zeile); 
			
			// Tag Listen erstellen
			var inputTags 		= zeile.getElementsByTagName('input');
			var labelTags 		= zeile.getElementsByTagName('label');
			var aTags 			= zeile.getElementsByTagName('a');
			var selectTags 		= zeile.getElementsByTagName('select');
			var spanTags 		= zeile.getElementsByTagName('span');
			var divTags			= zeile.getElementsByTagName('div');
			
			// Tag references erstellen
			var hidden_fields 	= divTags[4];
			var div_discount	= divTags[2];
			var input_discount_option = div_discount.getElementsByTagName('input')[0];
			var calendar_link	= zeile.getElementsByTagName('a')[0];
			
			// Formular Felder Attribute setzen
			hidden_fields.getElementsByTagName('input')[0].value = wo;
			hidden_fields.getElementsByTagName('input')[0].setAttribute("name",'userdata['+wo+']['+i+'][age]');
			hidden_fields.getElementsByTagName('input')[0].id = 'userdata['+wo+']['+i+'][age]';
			
			hidden_fields.getElementsByTagName('input')[1].setAttribute("name",'userdata['+wo+']['+i+'][id]');
			hidden_fields.getElementsByTagName('input')[1].id = 'userdata['+wo+']['+i+'][id]';
			
			hidden_fields.getElementsByTagName('input')[4].setAttribute("name",'userdata['+wo+']['+i+'][reisebeginn][monat]');
			hidden_fields.getElementsByTagName('input')[4].id = 'userdata['+wo+']['+i+'][reisebeginn][monat]';
			
			hidden_fields.getElementsByTagName('input')[5].setAttribute("name",'userdata['+wo+']['+i+'][reisebeginn][jahr]');
			hidden_fields.getElementsByTagName('input')[5].id = 'userdata['+wo+']['+i+'][reisebeginn][jahr]';
			
			selectTags[0].setAttribute("name",'userdata['+wo+']['+i+'][reisebeginn][tag]');
			selectTags[0].setAttribute("id",'userdata['+wo+']['+i+'][reisebeginn][tag]');
			
			selectTags[1].setAttribute("name",'userdata['+wo+']['+i+'][reisebeginn][jahr-monat]');
			selectTags[1].setAttribute("id",'userdata['+wo+']['+i+'][reisebeginn][jahr-monat]');
			
			selectTags[2].setAttribute("name",'userdata['+wo+']['+i+'][class]');
			selectTags[2].setAttribute("id",'userdata['+wo+']['+i+'][class]');
			
			selectTags[3].setAttribute("name",'userdata['+wo+']['+i+'][reisebeginn][duration]');
			selectTags[3].setAttribute("id",'userdata['+wo+']['+i+'][reisebeginn][duration]');
			
			// Set Calndar Link
		    calendar_link.setAttribute("href",'javascript:NewCalendar("userdata['+wo+']['+i+'][reisebeginn][monat]", "userdata['+wo+']['+i+'][reisebeginn][jahr]", "userdata['+wo+']['+i+'][reisebeginn][tag]", "userdata['+wo+']['+i+'][reisebeginn][jahr-monat]", "depart", "document.dataform.userdata['+wo+']['+i+'][reisebeginn][monat].value", "document.dataform.userdata['+wo+']['+i+'][reisebeginn][jahr].value")');

			if(document.getElementById('adultsalle_date')) var all_adults = document.getElementById('adultsalle_date');
			if(document.getElementById('teenageralle_date')) var all_teenager = document.getElementById('teenageralle_date');
			if(document.getElementById('childrenalle_date')) var all_children = document.getElementById('childrenalle_date');			
			
			// discount option checkbox
			if (wo == 'adults' || wo == 'teenager') 
			{
				removeNode(input_discount_option);
			}
			else if (wo == 'children')
			{
				input_discount_option.setAttribute("name",'userdata['+wo+']['+i+'][familycard]');
				input_discount_option.setAttribute("id",'userdata['+wo+']['+i+'][familycard]');
			}
			
			// hide All Buttons
			spanTags[0].style.display = "none";
			spanTags[1].style.display = "none";
					
			// 'Alle' Felder
			if (i==0)
			{
				switch(wo) 
				{
					case 'adults': 
						if (all_teenager) all_teenager.style.display = 'none';
						if (all_children) all_children.style.display = 'none';
						spanTags[0].id = wo+"alle_date";
						spanTags[1].id = wo+"_alle_klasse_dauer";
						spanTags[0].appendChild(tempText);
						spanTags[1].appendChild(tempText2);
					break;
					
					case 'teenager':
						if (all_adults)
						{
							spanTags[0].style.display = 'none';
							spanTags[0].id = wo+"alle_date";
							spanTags[1].id = wo+"_alle_klasse_dauer";
							spanTags[0].appendChild(tempText);
							spanTags[1].appendChild(tempText2);
							/*
							spanTags[0].parentNode.removeChild(spanTags[0]);
							spanTags[0].id = wo+"_alle_klasse_dauer";
							spanTags[0].appendChild(tempText2);
							*/
						} 
						else
						{
							if(all_children) all_children.style.display = 'none';
							spanTags[0].id = wo+"alle_date";
							spanTags[1].id = wo+"_alle_klasse_dauer";
							spanTags[0].appendChild(tempText);
							spanTags[1].appendChild(tempText2);
						}
					break;
					
					case 'children':
						if(all_adults || all_teenager)
						{
							spanTags[0].style.display = 'none';
							spanTags[0].id = wo+"alle_date";
							spanTags[1].id = wo+"_alle_klasse_dauer";
							spanTags[0].appendChild(tempText);
							spanTags[1].appendChild(tempText2);
						}
						else
						{
							spanTags[0].id = wo+"alle_date";
							spanTags[1].id = wo+"_alle_klasse_dauer";
							spanTags[0].appendChild(tempText);
							spanTags[1].appendChild(tempText2);
						}
					break;
					
					default :
					break;
				}

			}
			
			if (i>0)
			{
				spanTags[0].parentNode.removeChild(spanTags[0]);
				spanTags[0].parentNode.removeChild(spanTags[0]);
				switch(wo) 
				{
					case 'adults':
					document.getElementById(wo+"alle_date").style.display = "block";
					document.getElementById(wo+"_alle_klasse_dauer").style.display = "block";
					break;
					
					case 'teenager':
						if (all_adults)
						{
							document.getElementById(wo+"_alle_klasse_dauer").style.display = "block";
						}
						else
						{
							document.getElementById(wo+"alle_date").style.display = "block";
							document.getElementById(wo+"_alle_klasse_dauer").style.display = "block";
						}
					break;
					
					case 'children':
						if (all_adults || all_teenager)
						{
							document.getElementById(wo+"_alle_klasse_dauer").style.display = "block";
						}
						else
						{
							document.getElementById(wo+"alle_date").style.display = "block";
							document.getElementById(wo+"_alle_klasse_dauer").style.display = "block";
						}
					break;
					
					default :
					break;
				}
				
			}
		}
	} 
	else if (anzahlZeilen > wieviel) 
	{
		// Ueberzaehlige Zeilen loeschen
		for (i = anzahlZeilen; wieviel < i; i--)
		{
			document.getElementById(wo).removeChild(document.getElementById(wo).lastChild);
		}
		
		// first line 'all..' button invisible if just one line
		if (wieviel == 1)
		{
			if(document.getElementById(wo+'alle_date')) 
			{
				document.getElementById(wo+'alle_date').style.display = 'none';
			}
			if(document.getElementById(wo+'_alle_klasse_dauer')) 
			{
				document.getElementById(wo+'_alle_klasse_dauer').style.display = 'none';
			}
		}

	}

	// vars with updated line count and reference to site objects
	if(document.getElementById('adultsalle_date')) var all_adults = document.getElementById('adultsalle_date');
	if(document.getElementById('teenageralle_date')) var all_teenager = document.getElementById('teenageralle_date');
	if(document.getElementById('childrenalle_date')) var all_children = document.getElementById('childrenalle_date');			
	var zeilen_adults = getElementsByClassName(document.getElementById('adults'), 'div', 'zeile');
	var zeilen_teenager = getElementsByClassName(document.getElementById('teenager'), 'div', 'zeile');
	var zeilen_children = getElementsByClassName(document.getElementById('children'), 'div', 'zeile');

	// Sonderfaelle 'Alle'
	if(zeilen_adults.length > 1)
	{
		all_adults.style.display = 'block';
	}
	else if(zeilen_adults.length == 1 && (zeilen_teenager.length > 0 || zeilen_children.length > 0)) 
	{ 
		all_adults.style.display = 'block';
	}
	else if (zeilen_teenager.length > 1)
	{
		all_teenager.style.display = 'block';
	}
	else if(zeilen_teenager.length == 1 && zeilen_children.length > 0) 
	{ 
		all_teenager.style.display = 'block';
	}
	else if(zeilen_children.length > 1) 
	{ 
		all_children.style.display = 'block';
	}
	
	// alert(active);
	
		
	return zeile;

}

function compareIds() 
// returns list of zeilen ids where product ids are equal  
{	
	var i, j, k, m, id_produkt, id_zeile;
	var compare_array = new Array;
	var compare_result = new Array;
	
	// init
	compare_result.length = 0;
	
	// Daten Areas festlegen
	var data = ['data_adults']; // var data = ['data_adults', 'data_teenager', 'data_children'];
	
	// Alle Data Areas durchlaufen
	for (j=0; j<data.length; j++) 
	{
		
		// Alle Zeilen in Data Area holen 
		var zeilen = getElementsByClassName(document.getElementById(data[j]), 'div', 'zeile');
		
		// Alle zeilen durchlaufen, Compare
		for (i=0; i<zeilen.length; i++) 
		{
			// aktuelle IDs ablegen
			compare_array[i] = 
			{ 
				id_zeile: zeilen[i].id, 
				id_produkt: getProductIdFromZeile(zeilen[i]) 
			} 
			
			// get start date
			var zeile = new getSwissPassLine(zeilen[i]);
			var start_date = zeile.day+zeile.month+zeile.year;
			
			
			// Vergleiche akt. Zeile mit allen tieferen
			if ((k=i+1) <= zeilen.length && compare_array[i].id_produkt > 0) // nur wenn ProduktID gesetzt
			{
				for(k; k<zeilen.length; k++)
				{
					// get start date for zeile k
					var zeile_k = new getSwissPassLine(zeilen[k]);
					var start_date_k = zeile_k.day+zeile_k.month+zeile_k.year;
					// alert(start_date_k);
					
					// Vergleiche
					if(compare_array[i].id_produkt == getProductIdFromZeile(zeilen[k])) var comp_id = true;
					if(zeile.cl>0 && zeile.duration>0 && zeile_k.cl>0 && zeile_k.duration>0) var comp_idfill = true;
					// alert(zeile.cl+' - '+zeile.duration+' - '+zeile_k.cl+' - '+zeile_k.duration);
					if(start_date == start_date_k) var comp_date = true;
					if(start_date > 0 && start_date_k > 0) var comp_datefill = true;
					
					if (comp_id == true && comp_date == true && comp_datefill == true && comp_idfill == true)
					{
						
						// Check ob ZeilenIds im Array bereits exisitieren
						var exist_flag_akt = false;
						var exist_flag_vergl = false;
						for (m=0; m<compare_result.length; m++)
						{
							// aktuelle Zeile
							if (compare_array[i].id_zeile == compare_result[m])
							{
								exist_flag_akt = true;	
								// debug('exist_flag_akt wurde auf true gesetzt');
							}
							// verglichene Zeile
							if (zeilen[k].id == compare_result[m])
							{
								exist_flag_vergl = true;	
							}
						}
						
						// ZeilenIds ins Array legen
						if (exist_flag_akt == false) 
						{
							// Akt Zeile in Array legen
							compare_result.push(compare_array[i].id_zeile);
						}
						if (exist_flag_vergl == false) 
						{
							// Verglichene Zeile in Array legen
							compare_result.push(zeilen[k].id);
						}
						
					} else {

					}
					
					// clear
					comp_id = false;
					comp_idfill = false;
					comp_date = false;
					comp_datefill = false;
					
				}
			}
		}	
	}
	return compare_result;
}

function setProduktIdAndPrice(node)
// Sets the product price and id 
{
	var passid = document.getElementById('passid').value;
	
	// Gets the parent 'zeile' Element
	var zeile = getZeileFromInside(node);
	
	// Gets element lists
	var zeile_select_list = zeile.getElementsByTagName('select');
	var zeile_input_list = zeile.getElementsByTagName('input');
	var zeile_div_list = zeile.getElementsByTagName('div');
	
	// Hidden Fields
	var zeile_hidden_fields = zeile.getElementsByTagName('div')[4];

	// Get Class, Days & Age
	var zeile_class = zeile_select_list[2].value;
	var zeile_days = zeile_select_list[3].value;
	var zeile_age = zeile_hidden_fields.getElementsByTagName('input')[0].value;
	
	// ID wenn class und duration gesetzt sind
	if (zeile_class>0 && zeile_days>0)
	{
		//alert('days: ' +zeile_days + ' age: ' + zeile_age);
		// Zeilen ID holen und setzen
		zeile_hidden_fields.getElementsByTagName('input')[1].value = prices[zeile_days][zeile_age][zeile_class].id;
	}
	
	// ID und Preis und Rabatt loeschen wenn class oder duration nicht gesetzt sind
	if (zeile_class==NULL || zeile_days==NULL)
	{
		zeile_hidden_fields.getElementsByTagName('input')[1].value = price_empty;
		zeile_div_list[3].innerHTML = price_empty;
		if(zeile_age != 'children') zeile_div_list[2].innerHTML = price_empty;
	}
	
	// IDs Vergleichen
	var rabatt_zeilen = compareIds();
	
	// Rabatt:
	// debug('Rabattzeilen: ')
	for (var i=0; i<rabatt_zeilen.length; i++)
	{
		// debug(rabatt_zeilen[i]);
	}
	
	// Alle Zeilen holen
	var zeilen = getElementsByClassName(document.getElementById('inputfields'), 'div', 'zeile');
	// debug('es sind insgesamt: ' + zeilen.length);
	// debug('ZeilenVergleich:')
	// debug('es werden verglichen: ' + zeilen.length + 'Zeilen');
	
	// ueber alle Zeilen laufen
	for (var h=0; h<zeilen.length; h++)
	{
		var zeile = zeilen[h];
		var temp_zeile = zeile
		// debug('es wird verglichen: ' + zeile.id+' mit einem array der laenge '+rabatt_zeilen.length);
		
		// checken ob Zeile Teil von rabatt_zeilen ist
		if(isPartOfArray(zeile.id,rabatt_zeilen) && passid != "16")
		{
			 //alert(zeile.id + ' ist Teile von rabatt_zeilen');
			
			// Rabatt
			// debug (temp_zeile.tagName + temp_zeile.id)
			var temp_discount = temp_zeile.getElementsByTagName('div')[2];
			temp_discount.innerHTML = discount + discount_sign; // Rabatt setzen
			
			// Preis
			var temp_zeile_id = getProductIdFromZeile(temp_zeile);
			 // debug('temp_zeile_id is: '+temp_zeile_id);
			var temp_preis = id2price[temp_zeile_id];
			 // debug('temp_preis is: '+temp_preis);
			// var temp_preis = temp_zeile.getElementsByTagName('div')[4].innerHTM
			// temp_preis = temp_preis.replace(currency, ''); // Waehrung rausnehmen
			 // debug('preis ist: '+temp_preis);
			temp_preis = kaufm(percentOff(discount,temp_preis)); // Rabatt Berechnung
			 // debug('preis ist jetzt: '+temp_preis);
			temp_zeile.getElementsByTagName('div')[3].innerHTML = currency + temp_preis; // Preis setzen
			
		} 
		else 
		{
			 //alert(zeile.id + ' ist KEIN Teile von rabatt_zeilen');
			 
			 if(getProductIdFromZeile(temp_zeile)>0)
			 {
			 	// Elements
			 	var zeile_elements = new elementsOfZeile_SwissCard(temp_zeile);
			 	
				// Rabatt
				if(zeile_elements.form_age.value == 'adults')
				{
					var temp_discount = temp_zeile.getElementsByTagName('div')[2];
					temp_discount.innerHTML = discount_empty; // Rabatt setzen
				}
				
				//Preis
				var temp_zeile_id = getProductIdFromZeile(temp_zeile);
				var temp_preis = kaufm(id2price[temp_zeile_id]);
				
				// Preis Special: Familycard
				if(zeile_elements.form_age.value == 'children')
				{
					// debug(zeile_elements.zeile.id +' - '+ zeile_elements.input_discount_option.checked)
					if(zeile_elements.input_discount_option)
					{
						if(zeile_elements.input_discount_option.checked == true)
						{
							temp_preis = kaufm(prices.familycard[zeile_elements.form_age.value][1].price)
							zeile_elements.form_id.value = prices.familycard[zeile_elements.form_age.value][1].id;
						}
					}
				}
				temp_zeile.getElementsByTagName('div')[3].innerHTML = currency + temp_preis;
			 }
		}
	}
	
}


function setProduktIdAndPrice2(node)
// Sets the product price and id 
{
	// Gets the parent 'zeile' Element
	var zeile = getZeileFromInside(node);
	var zeile_elements = new elementsOfZeile_SwissCard(node);
	
	// Gets element lists
	var zeile_select_list = zeile.getElementsByTagName('select');
	var zeile_input_list = zeile.getElementsByTagName('input');
	var zeile_div_list = zeile.getElementsByTagName('div');
	
	// Hidden Fields
	var zeile_hidden_fields = zeile.getElementsByTagName('div')[4];
	
	
	
	// Price & ID wenn class und duration gesetzt sind
	if (zeile_select_list[2].value>0 && zeile_select_list[3].value>0)
	{
		// Get Class, Days & Age
		var zeile_class = zeile_select_list[2].value;
		var zeile_days = zeile_select_list[3].value;
		var zeile_age = zeile_hidden_fields.getElementsByTagName('input')[0].value;
		
		// Zeilen ID holen und setzen
		zeile_hidden_fields.getElementsByTagName('input')[1].value = prices[zeile_days][zeile_age][zeile_class].id;
	
		// IDs Vergleichen
		var rabatt_zeilen = compareIds();
		
		// Alle Zeilen holen
		var zeilen = getElementsByClassName(document.getElementById('inputfields'), 'div', 'zeile');
		
		// ueber alle Zeilen laufen
		for (var h=0; h<zeilen.length; h++)
		{
			var zeile = zeilen[h];
			var temp_zeile = zeile
			
			// checken ob Zeile Teil von rabatt_zeilen ist
			if(isPartOfArray(zeile.id,rabatt_zeilen))
			{
				// Rabatt
				var temp_discount = temp_zeile.getElementsByTagName('div')[2];
				temp_discount.innerHTML = discount + discount_sign; // Rabatt setzen
				
				// Preis
				var temp_zeile_id = getProductIdFromZeile(temp_zeile);
				var temp_preis = id2price[temp_zeile_id];
				temp_preis = kaufm(percentOff(discount,temp_preis)); // Rabatt Berechnung
				temp_zeile.getElementsByTagName('div')[3].innerHTML = currency + temp_preis; // Preis setzen	
			} 
			else 
			{
				 if(getProductIdFromZeile(temp_zeile)>0)
				 {
				 	var zeile_elements = new elementsOfZeile_SwissPass(temp_zeile);
				 	
				 	// discount only with adults
				 	if(zeile_elements.age == 'adults')
				 	{
						var temp_discount = temp_zeile.getElementsByTagName('div')[2];
						temp_discount.innerHTML = discount_empty; // Rabatt setzen
				 	}
				 	
					// Preis
					var temp_zeile_id = getProductIdFromZeile(temp_zeile);
					var temp_preis = kaufm(id2price[temp_zeile_id]);
					
					// Preis Special: Familycard
					if(zeile_elements.form_age.value == 'children')
					{
						if(zeile_elements.input_discount_option.checked == true)
						{
							temp_preis = kaufm(prices.familycard[zeile_elements.form_age.value][1].price)
							zeile_elements.form_id.value = prices.familycard[zeile_elements.form_age.value][1].id;
						}
					}
					
					// set price
					temp_zeile.getElementsByTagName('div')[3].innerHTML = currency + temp_preis;
				 }
			}
		}
	}
}

function setSwissPassLine(zeileNode,dataObject, allMode)
{
	/* demo dataObject:
	var test_line_object = new Object;
	test_line_object.day = 12;
	test_line_object.month = 4;
	test_line_object.year = 2006;
	test_line_object.cl = 1;
	test_line_object.duration = 8;
	test_line_object.id = 1;
	*/
	
	// for(x in dataObject) debug(x+' = '+dataObject[x]+'<br />')
	
	
	var zeile = new elementsOfZeile_SwissPass(zeileNode)
	
	if(allMode == undefined) allMode = false;
	
	// get Form Ids for setSelectListToValue
	var form_day 	= zeile.form_day.id;
	var form_month 	= zeile.form_month.id;
	var form_year 	= zeile.form_year.id;
	var form_class 	= zeile.form_class.id;
	var form_duration 	= zeile.form_duration.id;
	var form_year_month	= zeile.form_year_month.id;
    
    // Set hidden month
	zeile.form_month.value = dataObject.month;
	// Set hidden year
	zeile.form_year.value = dataObject.year;
	
	// allMode settings
	if (allMode == true)
	{ 
		if(dataObject.day > 0) 
		{
			setSelectListToValue(dataObject.day,form_day);
		}
		
		// set year - month
		if(dataObject.year > 0 && dataObject.month > 0) 
		{
			setSelectListToValue(dataObject.year_month,form_year_month);
		} 
	} else
	// fallback settings
	if(allMode == false)
	{
		// set day
		var date_invalid = dateSmalerThenToday(dataObject.year, dataObject.month-1, dataObject.day);
		if(dataObject.day > 0 && date_invalid == false) 
		{
			setSelectListToValue(dataObject.day,form_day);
		} 
		else if(dataObject.day > 0 && date_invalid == true)
		{
			setSelectListToValue(dataObject.day,form_day);
			zeile.form_day.style.backgroundColor = error_color ;
		}
		else
		{	
			zeile.form_day.style.backgroundColor = error_color ;
		}
		
		// set year - month
		if(dataObject.year > 0 && dataObject.month > 0) 
		{
			setSelectListToValue(dataObject.year_month,form_year_month);
		} else {
			zeile.form_year_month.style.backgroundColor = error_color ;
		}
		
		// Set hidden fields
		zeile.form_id.value = dataObject.id;
		zeile.form_age.value = dataObject.age;
		zeile.form_month.value = dataObject.month;
		zeile.form_year.value = dataObject.year;
		
		// set option
		if(dataObject.age == 'children')
		{
			if(dataObject.familycard == 'true') 
			{
				zeile.input_discount_option.checked = true;
				setSwissPassFamilyCard(zeile.input_discount_option);
			}
		} 
		
		// set class
		if(dataObject.cl > 0)
		{
			setSelectListToValue(dataObject.cl,form_class);
		} else if (dataObject.familycard != 'true') {
			zeile.form_class.style.backgroundColor = error_color;
		}
		
		// set duration
		if(dataObject.duration > 0)
		{
			setSelectListToValue(dataObject.duration,form_duration);
		} else if (dataObject.familycard != 'true') {
			zeile.form_duration.style.backgroundColor = error_color;
		}
		
	} else 
	if(allMode == 'class_n_duration')
	{	
		
		// set option
		if(zeile.form_age.value == 'children')
		{
			/* old:
			if(dataObject.familycard.checked == true) 
			{
				zeile.input_discount_option.checked = true;
				setSwissPassFamilyCard(zeile.input_discount_option);
			} else if(dataObject.familycard.checked == false) {
				zeile.input_discount_option.checked = false;
				setSwissPassFamilyCard(zeile.input_discount_option);
			}*/
			
			zeile.input_discount_option.checked = dataObject.familycard.checked;
			setSwissPassFamilyCard(zeile.input_discount_option);
		}
		
		// set class
		if(dataObject.cl > 0)
		{
			setSelectListToValue(dataObject.cl,form_class);
		}
		
		// set duration
		if(dataObject.duration > 0)
		{
			setSelectListToValue(dataObject.duration,form_duration);
		}
		
		setProduktIdAndPrice(zeileNode);
	}
	setProduktIdAndPrice(zeileNode)
}

function setSwissPassFamilyCard(checkbox)
{
	var zeile_elements = new elementsOfZeile_SwissPass(checkbox);
	
	if(checkbox.checked == 1)
	{
		zeile_elements.form_class.disabled=true;
		zeile_elements.form_duration.disabled=true;
		zeile_elements.form_class.style.backgroundColor = '#cccccc';
		zeile_elements.form_duration.style.backgroundColor = '#cccccc';
		zeile_elements.div_price.innerHTML = currency + kaufm(prices.familycard[zeile_elements.form_age.value][1].price);
		
		
		/*
		// debug(isNaN(prices.familycard[zeile_elements.form_age.value][1].price));
		zeile_elements.div_price.innerHTML = waehrungs_zeichen + kaufm(prices.familycard[zeile_elements.form_age.value][1].price);
		zeile_elements.form_id.value = prices.familycard[zeile_elements.form_age.value][1].id;
		*/
	}
	else if (checkbox.checked == 0)
	{
		zeile_elements.form_class.disabled=false;
		zeile_elements.form_duration.disabled=false;
		zeile_elements.form_class.style.backgroundColor = '';
		zeile_elements.form_duration.style.backgroundColor = '';
		zeile_elements.div_price.innerHTML = price_empty;
		
		/*
		zeile_elements.div_price.innerHTML = price_empty;
		if (zeile_elements.form_duration.value>0 && zeile_elements.form_class.value>0)
		{
			debug(kaufm(prices[zeile_elements.form_duration.value][zeile_elements.form_age.value][zeile_elements.form_class.value].price));
			zeile_elements.div_price.innerHTML = waehrungs_zeichen + kaufm(prices[zeile_elements.form_duration.value][zeile_elements.form_age.value][zeile_elements.form_class.value].price);
			zeile_elements.form_id.value = prices[zeile_elements.form_duration.value][zeile_elements.form_age.value][zeile_elements.form_class.value].id;
		}
		* */
		
	}
	setProduktIdAndPrice(checkbox);
}

function setAll_SwissPass(sourceNode) 
{
	// Daten der ersten Zeile holen
	var source_zeile_data = new getSwissPassLine(sourceNode);	
	
	// Fieldset Node holen
	var fieldsetNode = getFirstUpperElement(sourceNode, 'id', 'inputfields') 
	
	// alle class="zeile" Elemente aus fieldset holen
	var zeilen = getElementsByClassName(document.getElementById(fieldsetNode.id), 'div', 'zeile');
	
	// Alle zeilen Elemente mit DAten aus erster zeile fuellen
	for (var i=0; i<zeilen.length; i++)
	{
	    setSwissPassLine(zeilen[i],source_zeile_data, true);
	}
	
	// Preis und Rabatt vergeben
	setProduktIdAndPrice(sourceNode);
}

function setAllClassDuration_SwissPass(sourceNode) 
{
	// Daten der ersten Zeile holen
	var source_zeile_data = new getSwissPassLine(sourceNode);	
	
	// Fieldset Node holen
	var fieldsetNode = getFirstUpperElement(sourceNode, 'class', 'reisedaten') 
	
	// alle class="zeile" Elemente aus fieldset holen
	var zeilen = getElementsByClassName(document.getElementById(fieldsetNode.id), 'div', 'zeile');
	
	// Alle zeilen Elemente mit DAten aus erster zeile fuellen
	for (var i=0; i<zeilen.length; i++)
	{
	    setSwissPassLine(zeilen[i],source_zeile_data, 'class_n_duration');
	}
	
	// Preis und Rabatt vergeben
	setProduktIdAndPrice(sourceNode);
}

function setYearAndMonth(node)
{
    var zeile_elements = new elementsOfZeile_SwissPass(node);
     // alert(zeile_elements.form_year_month.value);
    var zeile_jahr_monat = zeile_elements.form_year_month.value.split('-');
     // alert(zeile_jahr_monat.length);
    zeile_elements.form_year.value = zeile_jahr_monat[0];
    zeile_elements.form_month.value = zeile_jahr_monat[1];
}


function elementsOfZeile_SwissPass(node)
// Helper
// Object with all DOM positions of the important zeile elements
{
	// Zeile identifizieren
	var zeile = getFirstUpperElement(node, 'class', 'zeile');
	
	// Tag Listen erstellen
	this.zeile 		= zeile;
	this.inputTags	= zeile.getElementsByTagName('input');
	this.labelTags 	= zeile.getElementsByTagName('label');
	this.aTags 		= zeile.getElementsByTagName('a');
	this.selectTags = zeile.getElementsByTagName('select');
	this.divTags 	= zeile.getElementsByTagName('div');
	
	// Tag references erstellen
	this.hidden_fields 	= this.divTags[4];
	this.div_discount 	= this.divTags[2];
	this.div_class_duration = this.divTags[1];
	this.div_price	 	= this.divTags[3];
	
	// Individual Field References
	// if(this.div_discount.getElementsByTagName('input')[0])
	this.input_discount_option = this.div_discount.getElementsByTagName('input')[0];
	
	// if(this.input_discount_option) alert('yahoo!');
	
	this.calendar_link	= zeile.getElementsByTagName('a')[0];
	
	this.form_id 		= this.hidden_fields.getElementsByTagName('input')[1];
	this.form_age 		= this.hidden_fields.getElementsByTagName('input')[0];	
	
	this.form_day 		= this.selectTags[0];
	this.form_year_month = this.selectTags[1];
	this.form_month 	= this.hidden_fields.getElementsByTagName('input')[4];
	this.form_year 		= this.hidden_fields.getElementsByTagName('input')[5];
	this.form_class 	= this.selectTags[2];
	this.form_duration	= this.selectTags[3];
}

function getSwissPassLine(zeileNode)
// object to store all data from zeile elements
{
	var zeile = new elementsOfZeile_SwissPass(zeileNode);
	
	this.day 		= zeile.form_day.value;
	this.month 		= zeile.form_month.value;
	this.year 		= zeile.form_year.value;
	this.cl 		= zeile.form_class.value;
	this.duration 	= zeile.form_duration.value;
	this.id 		= zeile.form_id.value;
	this.year_month	= zeile.form_year_month.value;
	this.age		= zeile.form_age.value;
	this.familycard = zeile.input_discount_option;
	// alert(this.familycard.checked);
	// conditionall stuff
	// if(zeile.input_discount_option)	this.familycard = zeile.input_discount_option.checked;
}


function fallback_SwissPass(dataobject)
{
    if (dataobject.length>0)
    {
        var anzahl_adults=0;
        var anzahl_teenager=0;
        var anzahl_children=0;
        
        // get lines from fallbackobject
        for(line in dataobject)
        {
 
            // Monat und Jahr zusammensetzen
            dataobject[line].year_month = dataobject[line].year+'-'+dataobject[line].month;
            
            // alert(dataobject[line].age);
            
            if(dataobject[line].age == 'adults') 
            {
            	// alert('adults');
                // counter erhoehen
                anzahl_adults++;
                
                // Bloecke sichtbar schalten
                SCHMOE_switchDisplayBlock('inputfields','data_adults');			
			    SCHMOE_displayByValue(1,'data_adults');
    			
			    // Zeile erzeugen
			    var zeile = createFields('adults','master_swisspass',anzahl_adults);
    			
			    // Zeile fuellen
			    setSwissPassLine(zeile,dataobject[line]);
    			
			    // letzte Adult Zeile setzen
			    var last_line = zeile;
            }
            if(dataobject[line].age == 'teenager') // same as adults
            {
            	// alert('teenager');
                anzahl_teenager++;
                SCHMOE_switchDisplayBlock('inputfields','data_teenager');			
			    SCHMOE_displayByValue(1,'data_teenager');
			    var zeile = createFields('teenager','master_swisspass',anzahl_teenager);
			    setSwissPassLine(zeile,dataobject[line]);
			    var last_line = zeile;
            }
            if(dataobject[line].age == 'children') // same as adults
            {
            	// alert('children');
                anzahl_children++;
                SCHMOE_switchDisplayBlock('inputfields','data_children');			
			    SCHMOE_displayByValue(1,'data_children');
			    var zeile = createFields('children','master_swisspass',anzahl_children);
			    setSwissPassLine(zeile,dataobject[line]);
			    var last_line = zeile;
            }
            
            // set price and id
            setProduktIdAndPrice(last_line);
        }
        
         // Selects mit Anzahl setzen
        setSelectListToValue(anzahl_adults,'paesse[adults]');
        setSelectListToValue(anzahl_teenager,'paesse[teenager]');
        setSelectListToValue(anzahl_children,'paesse[children]');
        
        return true;
    } 
    else 
    {
        return false;
    }
}

/*//////////////////////////////////////
// Creator functions for Half Fare Card STS WLV
//////////////////////////////////////*/

function createHalfFareFields(wo, was, wieviel) {
	
	var i, zeile, tempNodeName;
	
	// Vorhandene Zeilen zaehlen
    var vorhandeneZeilen = getElementsByClassName(document.getElementById(wo), "div", "zeile");
	var anzahlZeilen = vorhandeneZeilen.length;

	// Zeilen Manipulieren
	if (anzahlZeilen < wieviel)
	{
		// Neue Zeilen erzeugen
		for (i = anzahlZeilen; i < wieviel; i++) 
		{
			// Elemente bauen
			zeile = document.getElementById(was).cloneNode(true); // neue Element erstellen -> MasterElement kopieren
			zeile.id = "zeile" + "_" + was + "_" + i; // Neue Id setzen
			zeile.setAttribute("class","zeile"); // CSS Klasse setzen
			var zeileInhalt = getChildNodesIESave(zeile);			
			document.getElementById(wo).appendChild(zeile); 
			
			// Tag Listen erstellen
			var spanTags 	= zeile.getElementsByTagName('span');
			var inputTags 	= zeile.getElementsByTagName('input');
			var labelTags 	= zeile.getElementsByTagName('label');
			var aTags 		= zeile.getElementsByTagName('a');
			var selectTags 	= zeile.getElementsByTagName('select');
			var calendar_link = aTags[0]
			var hidden_fields = zeile.getElementsByTagName('div')[4];
			
			// Formular Felder Attribute setzen			
			hidden_fields.getElementsByTagName('input')[0].setAttribute("name",'userdata['+i+'][reisebeginn][monat]');
			hidden_fields.getElementsByTagName('input')[0].id = 'userdata['+i+'][reisebeginn][monat]';
			
			hidden_fields.getElementsByTagName('input')[1].setAttribute("name",'userdata['+i+'][reisebeginn][jahr]');
			hidden_fields.getElementsByTagName('input')[1].id = 'userdata['+i+'][reisebeginn][jahr]';
			
			inputTags[0].setAttribute("name",'userdata['+i+'][nachname]');
			inputTags[0].id = 'userdata['+i+'][nachname]';
			// inputTags[0].onchange = resetError;
			
			inputTags[1].setAttribute("name",'userdata['+i+'][vorname]');
			inputTags[1].id = 'userdata['+i+'][vorname]';
			// inputTags[1].onchange = resetError;
			
			inputTags[2].setAttribute("name",'userdata['+i+'][reisebeginn][monat]');
			inputTags[2].id = 'userdata['+i+'][vorname]';
			
			inputTags[3].setAttribute("name",'userdata['+i+'][reisebeginn][jahr]');
			inputTags[3].id = 'userdata['+i+'][monat]';
			
			selectTags[0].setAttribute("name",'userdata['+i+'][reisebeginn][tag]');
			selectTags[0].id = 'userdata['+i+'][reisebeginn][tag]';
			
			selectTags[1].setAttribute("name",'userdata['+i+'][reisebeginn][jahr-monat]');
			selectTags[1].id = 'userdata['+i+'][reisebeginn][jahr-monat]';
        
	        calendar_link.setAttribute("href",'javascript:NewCalendar("userdata['+i+'][reisebeginn][monat]", "userdata['+i+'][reisebeginn][jahr]", "userdata['+i+'][reisebeginn][tag]", "userdata['+i+'][reisebeginn][jahr-monat]", "depart", "document.dataform.userdata['+i+'][reisebeginn][monat].value", "document.dataform.userdata['+i+'][reisebeginn][jahr].value")');
        
			// Bestimmte Elemente enfernen
			// Nach 1. Zeile
			// if(i>0) labelTags[3].parentNode.removeChild(labelTags[3]); // 'Alle' Checkbox entfernen nach erster Zeile, oder bei kids/teenager
			
			// debug('+++++++++++++++++++')
			
			// hide All Buttons
			spanTags[0].style.display = "none";
			
			// 'Alle' Felder
			if (i==0)
			{
				spanTags[0].id = "alle_date";
			}
			
			if (i>0)
			{
				spanTags[0].parentNode.removeChild(spanTags[0]);
				document.getElementById("alle_date").style.display = "block";
			}
			
		}
	} 
	else if (anzahlZeilen > wieviel) 
	{
		// Ueberzaehlige Zeilen loeschen
		for (i = anzahlZeilen; wieviel < i; i--)
		{
			document.getElementById(wo).removeChild(document.getElementById(wo).lastChild);
		}
		
		// first line 'all..' button invisible if just one line
		if (wieviel == 1)
		{
			if(document.getElementById('alle_date')) 
			{
				document.getElementById('alle_date').style.display = 'none';
			}
		}
	}
	
	return zeile;
	
}

function setHalfFareLine(zeileNode,dataObject,allMode)
{	
	var zeile = new elementsOfZeile_HalfFare(zeileNode)
	if(allMode == undefined) allMode = false;
	
	// get Form Ids for setSelectListToValue
	var form_day 	= zeile.form_day.id;
	var form_month 	= zeile.form_month.id;
	var form_year 	= zeile.form_year.id;
	var form_year_month	= zeile.form_year_month.id;	
	
	// Set hidden month
	zeile.form_month.value = dataObject.month;
	// Set hidden year
	zeile.form_year.value = dataObject.year;
	
	// allMode = true;
	
	// allMode settings
	if (allMode == true)
	{ 
		if(dataObject.day > 0) 
		{
			setSelectListToValue(dataObject.day,form_day);
		} 
		
		// set year - month
		if(dataObject.year > 0 && dataObject.month > 0) 
		{
			setSelectListToValue(dataObject.year_month,form_year_month);
		} 
	} else
	// fallback settings
	if(allMode == false)
	{
		// set day
		var date_invalid = dateSmalerThenToday(dataObject.year, dataObject.month-1, dataObject.day);
		if(dataObject.day > 0 && date_invalid == false) 
		{
			setSelectListToValue(dataObject.day,form_day);
		} 
		else if(dataObject.day > 0 && date_invalid == true)
		{
			setSelectListToValue(dataObject.day,form_day);
			zeile.form_day.style.backgroundColor = error_color ;
		}
		else
		{	
			zeile.form_day.style.backgroundColor = error_color ;
		}
		
		// set year - month
		if(dataObject.year > 0 && dataObject.month > 0) 
		{
			setSelectListToValue(dataObject.year_month,form_year_month);
		} else {
			zeile.form_year_month.style.backgroundColor = error_color ;
		}
		
		// set surename
		if(dataObject.surename != '') 
		{
			zeile.form_surename.value = dataObject.surename;
		} else {
			zeile.form_surename.style.backgroundColor = error_color;
		}
		
		// set givenname
		if(dataObject.givenname != '') 
		{
			zeile.form_givenname.value = dataObject.givenname;
		} else {
			zeile.form_givenname.style.backgroundColor = error_color;
		}
	}
}

function setAll_HalfFare(sourceNode) 
{
	// Daten der ersten Zeile holen
	var source_zeile_data = new getHalfFareLine(sourceNode);	
	
	// Fieldset Node holen
	var fieldsetNode = getFirstUpperElement(sourceNode, 'id', 'halffarecard') 
	
	// alle class="zeile" Elemente aus fieldset holen
	var zeilen = getElementsByClassName(document.getElementById(fieldsetNode.id), 'div', 'zeile');
	
	
	
	// Alle zeilen Elemente mit DAten aus erster zeile fuellen
	for (var i=0; i<zeilen.length; i++)
	{
	    setHalfFareLine(zeilen[i],source_zeile_data,true);
	}
	
	// Preis und Rabatt vergeben
	// setProduktIdAndPrice(sourceNode);
}

function setYearAndMonthHalfFare(node)
{
    var zeile_elements = new elementsOfZeile_HalfFare(node);
     // alert(zeile_elements.form_year_month.value);
    var zeile_jahr_monat = zeile_elements.form_year_month.value.split('-');
     // alert(zeile_jahr_monat.length);
    zeile_elements.form_year.value = zeile_jahr_monat[0];
    zeile_elements.form_month.value = zeile_jahr_monat[1];
}

function elementsOfZeile_HalfFare(node)
// Helper
// Object with all DOM positions of the important zeile elements
{

	// Zeile identifizieren
	var zeile = getFirstUpperElement(node, 'class', 'zeile');
	
	// Tag Listen erstellen
	this.zeile 		= zeile;
	this.inputTags	= zeile.getElementsByTagName('input');
	this.labelTags 	= zeile.getElementsByTagName('label');
	this.aTags 		= zeile.getElementsByTagName('a');
	this.selectTags = zeile.getElementsByTagName('select');
	this.hidden_fields = zeile.getElementsByTagName('div')[4];
	
	// Individual Field References
	this.calendar_link	= zeile.getElementsByTagName('a')[0];

	this.form_givenname	= this.inputTags[1];
	this.form_surename	= this.inputTags[0];
	
	this.form_day 		= this.selectTags[0];
	this.form_year_month = this.selectTags[1];
	this.form_month 	= this.hidden_fields.getElementsByTagName('input')[0];
	this.form_year 		= this.hidden_fields.getElementsByTagName('input')[1];

}

function getHalfFareLine(zeileNode)
// object to store all data from zeile elements
{
	var zeile = new elementsOfZeile_HalfFare(zeileNode);
	
	this.day 	= zeile.form_day.value;
	this.month 	= zeile.form_month.value;
	this.year 	= zeile.form_year.value;
	this.year_month	= zeile.form_year_month.value;
	
	// init name variables with with empty string
	// if(zeile.form_surename == undefined) this.surename = '';
	// if(zeile.form_givenname == undefined ) this.givenname = '';
}

function fallback_HalfFare(dataobject)
{
    if (dataobject.length>0)
    {
        // counter
        var anzahl = 0;
        
        // get lines from fallbackobject
        for(line in dataobject)
        {
            // Monat und Jahr zusammensetzen
            if(dataobject[line].year > 0 && dataobject[line].month > 0)
            {
            	dataobject[line].year_month = dataobject[line].year+'-'+dataobject[line].month;
            }

            // counter erhoehen
            anzahl++;
            
            // Bloecke sichtbar schalten
            SCHMOE_switchDisplayBlock('inputfields','data_halffare');
			SCHMOE_displayByValue(1,'data_halffare');
			
		    // Zeile erzeugen
		    var zeile = createHalfFareFields('halffarecard','master_halffarecard',anzahl);
			
		    // Zeile fuellen
		    setHalfFareLine(zeile,dataobject[line]);
                
        }
        
        // Select mit Anzahl setzen
        setSelectListToValue(anzahl,'paesse_erwachsene');
        
        return true;
    } 
    else 
    {
        return false;
    }
}

/*//////////////////////////////////////
// Creator functions for UEFA Card STS WLV
//////////////////////////////////////*/

/********************************
* Funktion: createUefaCardFields(wo, was, wieviel)
********************************* 
* 
* Erzeugt Zeilen zum Eintragen von Bestellungen 
* basiert auf createHalfFareFields(wo, was, wieviel)
* 
* Zaehlt vorhandene Zeilen in 'wo'
* Loescht/ Ergaenzt nach 'wieviel'
* 
*********************************/

function createUefaCardFields(wo, was, wieviel) {
	
	var i, zeile, tempNodeName;
	
	// Vorhandene Zeilen zaehlen
    var vorhandeneZeilen = getElementsByClassName(document.getElementById(wo), "div", "zeile");
	var anzahlZeilen = vorhandeneZeilen.length;

	// Zeilen Manipulieren
	if (anzahlZeilen < wieviel)
	{
		// Neue Zeilen erzeugen
		for (i = anzahlZeilen; i < wieviel; i++) 
		{
			// Zeile bauen
			zeile = document.getElementById(was).cloneNode(true); // neue Zeile erstellen -> MasterElement kopieren
			zeile.id = "zeile" + "_" + was + "_" + i; // Neue Id setzen
			zeile.setAttribute("class","zeile"); // CSS Klasse setzen		
			document.getElementById(wo).appendChild(zeile); // neue Zeile einsetzen
			
			// Tag Listen erstellen
			var spanTags 	= zeile.getElementsByTagName('span');
			var inputTags 	= zeile.getElementsByTagName('input');
			var labelTags 	= zeile.getElementsByTagName('label');
			var aTags 		= zeile.getElementsByTagName('a');
			var selectTags 	= zeile.getElementsByTagName('select');
			var calendar_link = aTags[0]
			
			// versteckt nicht benoetigte Elemente
			selectTags[0].style.display = "none"; // Tag
			selectTags[1].style.display = "none"; // Monat
			calendar_link.style.display = "none"; // Kalender Button
			
			// 'Alle' Felder ausblenden
			if (i==0) 
			{	
				spanTags[0].id = "alle_date"; 
			} 
			else if (i>0) 
			{
				spanTags[0].parentNode.removeChild(spanTags[0]);
				document.getElementById("alle_date").style.display = "block";
			}
			
			// Neue Tags erstellen
			var klasseLabelTag = document.createElement("label");
			var klasseSelectTag = document.createElement("select");
			klasseLabelTag.appendChild(klasseSelectTag);
			klasseSelectTag.onchange = setUefaCardPrice
			for(var j=0; j<3; j++)
			{
				tempNodeName = document.createElement("option");
				tempNodeName.setAttribute("value",(j==0) ? '' : j);
				tempNodeName.appendChild(document.createTextNode((j==0) ? "-" : j+"."))
				klasseSelectTag.appendChild(tempNodeName);
			}
			
			// Neue Tags hinzufuegen
			labelTags[3].parentNode.insertBefore(klasseLabelTag, labelTags[3]);
			
			// Formular Felder Attribute setzen			
			inputTags[0].setAttribute("name",'userdata['+i+'][nachname]');
			inputTags[0].id = 'userdata['+i+'][nachname]';
			inputTags[1].setAttribute("name",'userdata['+i+'][vorname]');
			inputTags[1].id = 'userdata['+i+'][vorname]';
			klasseSelectTag.setAttribute("name", 'userdata['+i+'][klasse]');
			klasseSelectTag.id = 'userdata['+i+'][klasse]';
		}
	} 
	else if (anzahlZeilen > wieviel) 
	{
		// Ueberzaehlige Zeilen loeschen
		for (i = anzahlZeilen; wieviel < i; i--)
		{
			document.getElementById(wo).removeChild(document.getElementById(wo).lastChild);
		}
		
		// first line 'all..' button invisible if just one line
		if (wieviel == 1)
		{
			if(document.getElementById('alle_date')) 
			{
				document.getElementById('alle_date').style.display = 'none';
			}
		}
	}
	return zeile;
}

/********************************
* Funktion: setUefaCardPrice()
********************************* 
* 
* Wird direkt an SELECT Boxen als onchange gehaengt
* Aendert den Preis entsprechend der gewaehlten Klasse
* 
* benoetigt ein prices Objekt:
* 
* var prices = {
* 			1: 199.00,
* 			2: 99.00
* }
* 
*********************************/
function setUefaCardPrice()
{
	var zeile = new elementsOfZeile_UefaCard(this);
	var waehrung = document.getElementById('waehrung').value;
	zeile.field_price.innerHTML = (this.value != 0) ? waehrung+' '+kaufm(prices[this.value]) : '-';
}

function setAll_UefaCard(sourceNode) 
// Sets all lines to the values ob the triggering one
{
	// Daten der ersten Zeile holen
	var source_zeile_data = new elementsOfZeile_UefaCard(sourceNode);	
	
	// Fieldset Node holen
	var fieldsetNode = getFirstUpperElement(sourceNode, 'id', 'halffarecard') 
	
	// alle class="zeile" Elemente aus fieldset holen
	var zeilen = getElementsByClassName(document.getElementById(fieldsetNode.id), 'div', 'zeile');
	
	// Alle zeilen Elemente mit Daten aus erster zeile fuellen
	for (var i=0; i<zeilen.length; i++)
	{ 
	    setUefaCardLine(zeilen[i],source_zeile_data,true);
	}
}

function elementsOfZeile_UefaCard(node)
// Helper
// Object gets all DOM positions of the important zeile elements
{
	// Zeile identifizieren
	var zeile = getFirstUpperElement(node, 'class', 'zeile');
	
	// Tag Listen erstellen
	this.zeile 		= zeile;
	this.divTags	= zeile.getElementsByTagName('div');
	this.inputTags	= zeile.getElementsByTagName('input');
	this.labelTags 	= zeile.getElementsByTagName('label');
	this.aTags 		= zeile.getElementsByTagName('a');
	this.selectTags = zeile.getElementsByTagName('select');
	
	// Individual Field References
	this.form_givenname	= this.inputTags[1];
	this.form_surename	= this.inputTags[0];
	this.form_class		= this.selectTags[1];
	this.field_price	= this.divTags[3];
}

function setUefaCardLine(zeileNode,dataObject,allMode)
// Helper
// Sets all DOM positions of the important zeile elements to the values of 'DataObject'
{	
	var zeile = new elementsOfZeile_UefaCard(zeileNode)
	if(allMode == undefined) allMode = false;
		
	// allMode settings
	if (allMode == true)
	{ 
		// set class
		if(dataObject.form_class.value != '') 		{
			
			setSelectListToValue(dataObject.form_class.value, zeile.form_class.id); 
			zeile.form_class.onchange();
		} else {
			zeile.form_class.style.backgroundColor = error_color;
		}
		
	} else
	
	// fallback settings
	if(allMode == false)
	{		
		// set surename
		if(dataObject.surename != '') 
		{
			zeile.form_surename.value = dataObject.surename;
		} else {
			zeile.form_surename.style.backgroundColor = error_color;
		}
		
		// set givenname
		if(dataObject.givenname != '') 
		{
			zeile.form_givenname.value = dataObject.givenname;
		} else {
			zeile.form_givenname.style.backgroundColor = error_color;
		}
		
		// set class
		if(dataObject.klasse != '' && dataObject.klasse != '0') 
		{
			setSelectListToValue(dataObject.klasse, zeile.form_class.id);
			zeile.form_class.onchange();
		} else {
			zeile.form_class.style.backgroundColor = error_color;
		}
	}
}

function fallback_UefaCard(dataobject)
{
    if (dataobject.length>0)
    {
        // counter
        var anzahl = 0;
        
        // get lines from fallbackobject
        for(line in dataobject)
        {	
			// counter erhoehen
            anzahl++;
			/*
            // Monat und Jahr zusammensetzen
            if(dataobject[line].year > 0 && dataobject[line].month > 0)
            {
            	dataobject[line].year_month = dataobject[line].year+'-'+dataobject[line].month;
            }
			*/
            
            
            // Bloecke sichtbar schalten
            SCHMOE_switchDisplayBlock('inputfields','data_halffare');
			SCHMOE_displayByValue(1,'data_halffare');
			
		    // Zeile erzeugen
		    var zeile = createUefaCardFields('halffarecard','master_halffarecard',anzahl);
			
		    // Zeile fuellen
		    setUefaCardLine(zeile,dataobject[line]);
                
        }
        
        // Select mit Anzahl setzen
        setSelectListToValue(anzahl,'paesse_erwachsene');
        
        return true;
    } 
    else 
    {
        return false;
    }
}

/*//////////////////////////////////////
// Creator functions for Ausfluege STS WLV
//////////////////////////////////////*/

function createAusfluegeFields(wo, was, wieviel) {
	
	var i, zeile, tempNodeName;
	
	// Vorhandene Zeilen zaehlen
    var vorhandeneZeilen = getElementsByClassName(document.getElementById(wo), "div", "zeile");
	var anzahlZeilen = vorhandeneZeilen.length;

	// Zeilen Manipulieren
	if (anzahlZeilen < wieviel)
	{
		// Neue Zeilen erzeugen
		for (i = anzahlZeilen; i < wieviel; i++) 
		{
			// Elemente bauen
			zeile = document.getElementById(was).cloneNode(true); // neue Element erstellen -> MasterElement kopieren
			zeile.id = "zeile" + "_" + was + "_" + i; // Neue Id setzen
			zeile.setAttribute("class","zeile"); // CSS Klasse setzen
			var zeileInhalt = getChildNodesIESave(zeile);			
			document.getElementById(wo).appendChild(zeile); 
			
			// Tag Listen erstellen
			var inputTags = zeile.getElementsByTagName('input');
			var labelTags = zeile.getElementsByTagName('label');
			var spanTags = zeile.getElementsByTagName('span');
			var aTags = zeile.getElementsByTagName('a');
			var selectTags = zeile.getElementsByTagName('select');
			var span_all_date = spanTags[0];
			
			selectTags[0].setAttribute("name",'userdata['+i+'][ausflugid]');
			selectTags[0].id = 'userdata['+i+'][ausflugid]';

			// hide All Buttons
			span_all_date.style.display = "none";
			
			// All Buttons
			if (i==0)
			{
				span_all_date.id = "alle_date";
				// alert(span_all_date.id);
			}
			if (i>0)
			{
				span_all_date.parentNode.removeChild(span_all_date);
				document.getElementById("alle_date").style.display = "block";
			}
			
		}
	} 
	else if (anzahlZeilen > wieviel) 
	{
		// Ueberzaehlige Zeilen loeschen
		for (i = anzahlZeilen; wieviel < i; i--)
		{
			document.getElementById(wo).removeChild(document.getElementById(wo).lastChild);
		}
		
		// first line 'all..' button invisible if just one line
		if (wieviel == 1)
		{
			if(document.getElementById('alle_date')) 
			{
				document.getElementById('alle_date').style.display = 'none';
			}
		}
	}
	
	return zeile;
	
}

function createAusfluegeFieldsWithDate(wo, was, wieviel) {
	
	var i, zeile, tempNodeName;
	
	// count existing elements
    var vorhandeneZeilen = getElementsByClassName(document.getElementById(wo), "div", "zeile");
	var anzahlZeilen = vorhandeneZeilen.length;

	// edit elements
	if (anzahlZeilen < wieviel)
	{
		// create new element
		for (i = anzahlZeilen; i < wieviel; i++) 
		{
			// build element
			zeile = document.getElementById(was).cloneNode(true); // neue Element erstellen -> MasterElement kopieren
			zeile.id = "zeile" + "_" + was + "_" + i; // Neue Id setzen
			zeile.setAttribute("class","zeile"); // CSS Klasse setzen
			var zeileInhalt = getChildNodesIESave(zeile);			
			document.getElementById(wo).appendChild(zeile); 
			var zeile_new = document.getElementById(zeile.id);
			
			// alert(zeile_new.id);
			
			// get element field data
			var zeile_data = new elementsOfZeile_AusfluegeWithDate(zeile_new);
			
			// set data
			zeile_data.form_ausflug.setAttribute("name",'userdata['+i+'][ausflugid]');
			zeile_data.form_ausflug.id = 'userdata['+i+'][ausflugid]';
			
			zeile_data.form_day.setAttribute("name",'userdata['+i+'][reisebeginn][tag]');
			zeile_data.form_day.setAttribute("id",'userdata['+i+'][reisebeginn][tag]');

			zeile_data.form_month.setAttribute("name",'userdata['+i+'][reisebeginn][monat]');
			zeile_data.form_month.setAttribute("id",'userdata['+i+'][reisebeginn][monat]');
			
			zeile_data.form_year.setAttribute("name",'userdata['+i+'][reisebeginn][jahr]');
			zeile_data.form_year.setAttribute("id",'userdata['+i+'][reisebeginn][jahr]');
			
			zeile_data.form_year_month.setAttribute("name",'userdata['+i+'][reisebeginn][jahr-monat]');
			zeile_data.form_year_month.setAttribute("id",'userdata['+i+'][reisebeginn][jahr-monat]');

		    zeile_data.link_calendar.setAttribute("href",'javascript:NewCalendar("userdata['+i+'][reisebeginn][monat]", "userdata['+i+'][reisebeginn][jahr]", "userdata['+i+'][reisebeginn][tag]", "userdata['+i+'][reisebeginn][jahr-monat]", "depart", "document.dataform.userdata['+i+'][reisebeginn][monat].value", "document.dataform.userdata['+i+'][reisebeginn][jahr].value")');
			
			// hide All Buttons
			zeile_data.span_all_option.style.display = "none";
			zeile_data.span_all_date.style.display = "none";
			
			// 'Alle' Felder
			if (i==0)
			{
				// var tempText = document.createTextNode(dynamicLanguage.forAllAges[wo]);
				// var tempText2 = document.createTextNode(dynamicLanguage.forAllAges[wo]);
				zeile_data.span_all_option.id = "alle_option";
				zeile_data.span_all_date.id = "alle_date";
				// spanTags[0].appendChild(tempText);
				// spanTags[1].appendChild(tempText2);
			}

			
			if (i>0)
			{
				zeile_data.span_all_date.parentNode.removeChild(zeile_data.span_all_date);
				zeile_data.span_all_option.parentNode.removeChild(zeile_data.span_all_option);
				document.getElementById("alle_option").style.display = "block";
				document.getElementById("alle_date").style.display = "block";
			}/*
			*/
		}
	} 
	else if (anzahlZeilen > wieviel) 
	{
		// Ueberzaehlige Zeilen loeschen
		for (i = anzahlZeilen; wieviel < i; i--)
		{
			document.getElementById(wo).removeChild(document.getElementById(wo).lastChild);
		}
		
		// first line 'all..' button invisible if just one line
		if (wieviel == 1)
		{
			if(document.getElementById('alle_option')) 
			{
				document.getElementById('alle_option').style.display = 'none';
			}
			if(document.getElementById('alle_date')) 
			{
				document.getElementById('alle_date').style.display = 'none';
			}
		}
	}
	
	return zeile;
	
}

function setAusfluegeLine(zeileNode,dataObject)
{	
	var zeile = new elementsOfZeile_Ausfluege(zeileNode)

	// get Form Ids for setSelectListToValue
	var ausflug 	= zeile.form_ausflug.id;

	// set Selectlists
	(dataObject.ausflug > 0) ? setSelectListToValue(dataObject.ausflug,ausflug) :  zeile.form_ausflug.className = "error";	
	
	// Preis
	if (dataObject.price > 0)
	{
		zeile.div_price.innerHTML = dataObject.price;
	} else {
		setPrice_Ausfluege(zeileNode);
	}
}

function setAusfluegeLineWithDate(zeileNode,dataObject,allMode)
{	
	var zeile = new elementsOfZeile_AusfluegeWithDate(zeileNode)

	// get Form Ids for setSelectListToValue
	var ausflug 		= zeile.form_ausflug.id;
	var form_day		= zeile.form_day.id;
	var form_year_month	= zeile.form_year_month.id;


    // Set hidden month
	zeile.form_month.value = dataObject.month;
	// Set hidden year
	zeile.form_year.value = dataObject.year;
	
	// date settings
	if (allMode == 'date')
	{ 
		if(dataObject.day > 0) 
		{
			setSelectListToValue(dataObject.day,form_day);
		}
		
		// set year - month
		if(dataObject.year > 0 && dataObject.month > 0) 
		{
			setSelectListToValue(dataObject.year_month,form_year_month);
		} 
	} else
	
	// option settings
	if (allMode == 'option')
	{ 
		if (dataObject.ausflug > 0) 
		{
			setSelectListToValue(dataObject.ausflug,ausflug);	
		} else {
			zeile.form_ausflug.className = "error";
		}
		// Preis
		if (dataObject.price > 0)
		{
			zeile.div_price.innerHTML = dataObject.price;
		} else {
			setPrice_AusfluegeWithDate(zeileNode);
		}
	} else
	
	// fallback settings
	if(allMode == 'fallback')
	{
		// set option
		if (dataObject.ausflug > 0) 
		{
			setSelectListToValue(dataObject.ausflug,ausflug);	
		} else {
			zeile.form_ausflug.className = "error";
		}
		
		// set day
		var date_invalid = dateSmalerThenToday(dataObject.year, dataObject.month-1, dataObject.day);
		if(dataObject.day > 0 && date_invalid == false) 
		{
			debug(dataObject.day+' - '+form_day);
			setSelectListToValue(dataObject.day,form_day);
		} 
		else if(dataObject.day > 0 && date_invalid == true)
		{
			setSelectListToValue(dataObject.day,form_day);
			zeile.form_day.style.backgroundColor = error_color ;
		}
		else
		{	
			zeile.form_day.style.backgroundColor = error_color ;
		}
		
		// set year - month
		if(dataObject.year > 0 && dataObject.month > 0) 
		{
			dataObject.year_month = dataObject.year+'-'+dataObject.month;
			setSelectListToValue(dataObject.year_month,form_year_month);
		} else {
			zeile.form_year_month.style.backgroundColor = error_color ;
		}
		
		// Preis
		if (dataObject.price > 0)
		{
			zeile.div_price.innerHTML = dataObject.price;
		} else {
			setPrice_AusfluegeWithDate(zeileNode);
		}
	} 

}

function setAll_Ausfluege(sourceNode) 
{
	// Daten der ersten Zeile holen
	var source_zeile_data = new getAusfluegeLine(sourceNode);	
	
	// Fieldset Node holen
	var fieldsetNode = getFirstUpperElement(sourceNode, 'id', 'ausfluege') 
	
	// alle class="zeile" Elemente aus fieldset holen
	var zeilen = getElementsByClassName(document.getElementById(fieldsetNode.id), 'div', 'zeile');
	
	// Alle zeilen Elemente mit DAten aus erster zeile fuellen
	for (var i=0; i<zeilen.length; i++)
	{
	    setAusfluegeLine(zeilen[i],source_zeile_data);
	}
	
	// Preis und Rabatt vergeben
	// setProduktIdAndPrice(sourceNode);
}

function setAll_AusfluegeWithDate(sourceNode, allMode) 
{
	// Daten der ersten Zeile holen
	var source_zeile_data = new elementsOfZeile_AusfluegeWithDate(sourceNode);
	
	// Fieldset Node holen
	var fieldsetNode = getFirstUpperElement(sourceNode, 'id', 'ausfluege') 
	
	// alle class="zeile" Elemente aus fieldset holen
	var zeilen = getElementsByClassName(document.getElementById(fieldsetNode.id), 'div', 'zeile');
	
	// Alle zeilen Elemente mit DAten aus erster zeile fuellen
	for (var i=0; i<zeilen.length; i++)
	{
	    setAusfluegeLineWithDate(zeilen[i],source_zeile_data, allMode);
	}
	
	// Preis und Rabatt vergeben
	// setProduktIdAndPrice(sourceNode);
}

function elementsOfZeile_Ausfluege(node)
// Helper
// Object with all DOM positions of the important zeile elements
{
	// Zeile identifizieren
	var zeile = getFirstUpperElement(node, 'class', 'zeile');
	
	// Tag Listen erstellen
	this.zeile 		= zeile;
	this.inputTags	= zeile.getElementsByTagName('input');
	this.selectTags = zeile.getElementsByTagName('select');
	this.divTags    = zeile.getElementsByTagName('div');
	
    // Individual Field References
	this.form_ausflug	= this.selectTags[0];
	this.div_price  	= this.divTags[1];
	
}

function elementsOfZeile_AusfluegeWithDate(node)
// Helper
// Object with all DOM positions of the important zeile elements
{
	// Zeile identifizieren
	var zeile = getFirstUpperElement(node, 'class', 'zeile');
	
	// Tag Listen
	this.zeile 			= zeile;
	this.inputTags		= zeile.getElementsByTagName('input');
	this.spanTags		= zeile.getElementsByTagName('span');
	this.labelTags		= zeile.getElementsByTagName('label');
	this.selectTags 	= zeile.getElementsByTagName('select');
	this.divTags    	= zeile.getElementsByTagName('div');
	this.aTags    		= zeile.getElementsByTagName('a');
	this.hidden_fields	= this.divTags[3].getElementsByTagName('input');;

    // Field References
	this.form_ausflug		= this.selectTags[0];
	this.div_price  		= this.divTags[2];
	this.form_day			= this.selectTags[1];
	this.form_year_month	= this.selectTags[2];
	this.form_month			= this.hidden_fields[0];
	this.form_year			= this.hidden_fields[1];
	this.link_calendar		= this.aTags[0];
	this.span_all_option	= this.spanTags[0];
	this.span_all_date		= this.spanTags[1];
	
	// Value References
	this.ausflug		= this.form_ausflug.value;
	this.price			= this.div_price.innerHTML;
	this.day			= this.form_day.value;
	this.month			= this.form_month.value;
	this.year			= this.form_year.value;
	this.year_month		= this.form_year_month.value;
}

function getAusfluegeLine(zeileNode)
// object to store all data from zeile elements
{
	var zeile = new elementsOfZeile_Ausfluege(zeileNode);
	
	this.ausflug    = zeile.form_ausflug.value;
	this.price 	    = zeile.div_price.innerHTML;
}

function fallback_Ausfluege(dataobject)
{

        // counter init
        var anzahl = 0;
        // alert('ok');
        
        // get lines from fallbackobject
        for(line in dataobject)
        {
            // counter erhoehen
            anzahl++;

            SCHMOE_switchDisplayBlock('inputfields','data');			
		    SCHMOE_displayByValue(1,'data');
			
		    // Zeile erzeugen
		    var zeile = createAusfluegeFields('ausfluege','master_ausfluege', anzahl);
			
		    // Zeile fuellen
		    setAusfluegeLine(zeile,dataobject[line]);
        }
        
         // Select mit Anzahl setzen
        setSelectListToValue(anzahl,'erwachsene');

}

function fallback_AusfluegeWithDate(dataobject)
{
        // counter init
        var anzahl = 0;
        // alert('ok');
        
        // get lines from fallbackobject
        for(line in dataobject)
        {
            // counter erhoehen
            anzahl++;

            SCHMOE_switchDisplayBlock('inputfields','data');			
		    SCHMOE_displayByValue(1,'data');
			
		    // Zeile erzeugen
		    var zeile = createAusfluegeFieldsWithDate('ausfluege','master_ausfluege', anzahl);
			
		    // Zeile fuellen
		    setAusfluegeLineWithDate(zeile,dataobject[line], 'fallback');
        }
        
         // Select mit Anzahl setzen
        setSelectListToValue(anzahl,'erwachsene');
}

function setPrice_Ausfluege(node)
{
	var zeile = new elementsOfZeile_Ausfluege(node);
	var usergroup_id = zeile.form_ausflug.value;
	if (usergroup_id > 0)
	{
		var price = kaufm(id2price[usergroup_id]);
		zeile.div_price.innerHTML = currency + price;
	}
}

function setPrice_AusfluegeWithDate(node)
{
	var zeile = new elementsOfZeile_AusfluegeWithDate(node);
	var usergroup_id = zeile.form_ausflug.value;
	if (usergroup_id > 0)
	{
		var price = kaufm(id2price[usergroup_id]);
		zeile.div_price.innerHTML = currency + price;
	}
}

function setYearAndMonth_Ausfluege(node)
{
    var zeile_elements = new elementsOfZeile_AusfluegeWithDate(node);
    var zeile_jahr_monat = zeile_elements.form_year_month.value.split('-');
    zeile_elements.form_year.value = zeile_jahr_monat[0];
    zeile_elements.form_month.value = zeile_jahr_monat[1];
}

/*//////////////////////////////////////
// Creator functions for SwissCard STS WLV
//////////////////////////////////////*/

// Erstellt die Eingabezeilen
function createFields_SwissCard(wo, was, wieviel) {
	
	var i, zeile, tempNode;

	// vars from site
	var tempText = document.createTextNode(dynamicLanguage.forAllAges['forall']);
	var tempText2 = document.createTextNode(dynamicLanguage.forAllAges[wo]);
				
	// Vorhandene Zeilen zaehlen
    var vorhandeneZeilen = getElementsByClassName(document.getElementById(wo), "div", "zeile");
	var anzahlZeilen = vorhandeneZeilen.length;

	// Zeilen Manipulieren
	if (anzahlZeilen < wieviel)
	{	
		// Neue Zeilen erzeugen
		for (i = anzahlZeilen; i < wieviel; i++) 
		{
			//debug(i);
			// Elemente bauen
			zeile = document.getElementById(was).cloneNode(true); // neue Element erstellen -> MasterElement kopieren
			zeile.id = wo + "_" + i; // Neue Id setzen
			zeile.setAttribute("class","zeile"); // CSS Klasse setzen		
						
			// Element an Position setzen	
			document.getElementById(wo).appendChild(zeile); 
			
			// Element Handler erstellen
			var elements = new elementsOfZeile_SwissCard(zeile);
				
			// Elemente modifizieren
			elements.form_month.setAttribute("name",'userdata['+wo+']['+i+'][reisebeginn][monat]');
			elements.form_month.id = 'userdata['+wo+']['+i+'][reisebeginn][monat]';
			
			elements.form_year.setAttribute("name",'userdata['+wo+']['+i+'][reisebeginn][jahr]');
			elements.form_year.id = 'userdata['+wo+']['+i+'][reisebeginn][jahr]';
			
			elements.form_day.setAttribute("name",'userdata['+wo+']['+i+'][reisebeginn][tag]');
			elements.form_day.id = 'userdata['+wo+']['+i+'][reisebeginn][tag]';
			// elements.form_day.onchange = resetError;
			
			elements.form_year_month.setAttribute("name",'userdata['+wo+']['+i+'][reisebeginn][jahr-monat]');
			elements.form_year_month.id = 'userdata['+wo+']['+i+'][reisebeginn][jahr-monat]';
			// elements.form_year_month.onchange = resetError;
			
			elements.form_class.setAttribute("name",'userdata['+wo+']['+i+'][class]');
			elements.form_class.id = 'userdata['+wo+']['+i+'][class]';
			// elements.form_class.onchange = resetError;
			
			elements.form_id.setAttribute("name",'userdata['+wo+']['+i+'][id]');
			elements.form_id.id = 'userdata['+wo+']['+i+'][id]';
			
			elements.form_age.setAttribute("name",'userdata['+wo+']['+i+'][age]');
			elements.form_age.id = 'userdata['+wo+']['+i+'][age]';
			elements.form_age.value = wo;

			elements.calendar_link.setAttribute("href",'javascript:NewCalendar("userdata['+wo+']['+i+'][reisebeginn][monat]", "userdata['+wo+']['+i+'][reisebeginn][jahr]", "userdata['+wo+']['+i+'][reisebeginn][tag]", "userdata['+wo+']['+i+'][reisebeginn][jahr-monat]", "depart", "document.dataform.userdata['+wo+']['+i+'][reisebeginn][monat].value", "document.dataform.userdata['+wo+']['+i+'][reisebeginn][jahr].value")');
						
			// discount option checkbox
			if (wo == 'adults') 
			{
				removeNode(elements.input_discount_option);
			}
			else if (wo == 'children')
			{
				elements.input_discount_option.setAttribute("name",'userdata['+wo+']['+i+'][familycard]');
				elements.input_discount_option.setAttribute("id",'userdata['+wo+']['+i+'][familycard]');
			}
			
			// All Buttons
			if(document.getElementById('adultsalle_date')) 
			{
				var all_adults = document.getElementById('adultsalle_date');
			}
			if(document.getElementById('childrenalle_date')) 
			{
				var all_children = document.getElementById('childrenalle_date');			
			}
			
			// hide All Buttons
			elements.span_option.style.display = "none";
			elements.span_date.style.display = "none";
			
		
			// 'Alle' Felder
			if (i==0)
			{
				switch(wo) 
				{
					case 'adults':
						if (all_children) 
						{
							all_children.style.display = 'none';
						}
						elements.span_date.id = wo+"alle_date";
						elements.span_option.id = wo+"_alle_klasse_dauer";
						elements.span_date.appendChild(tempText);
						elements.span_option.appendChild(tempText2);
					break;
					
					case 'children':
						elements.span_date.id = wo+"alle_date";
						elements.span_option.id = wo+"_alle_klasse_dauer";
						elements.span_date.appendChild(tempText);
						elements.span_option.appendChild(tempText2);
						if (all_adults)
						{
							 elements.span_date.style.display = 'none';

						}
					break;
					
					default :
					break;
				}

			}

			if (i>0)
			{
				elements.span_option.parentNode.removeChild(elements.span_option);
				elements.span_date.parentNode.removeChild(elements.span_date);
				switch(wo) 
				{
					case 'adults':
					document.getElementById(wo+"alle_date").style.display = "block";
					document.getElementById(wo+"_alle_klasse_dauer").style.display = "block";
					break;
					
					case 'children':
						if (all_adults)
						{
							document.getElementById(wo+"_alle_klasse_dauer").style.display = "block";
						}
						else 
						{
							document.getElementById(wo+"alle_date").style.display = "block";
							document.getElementById(wo+"_alle_klasse_dauer").style.display = "block";
						}
					break;
					
					default :
					break;
				}
				
			}
			
			
		}
	} 
	else if (anzahlZeilen > wieviel) 
	{
		// Ueberzaehlige Zeilen loeschen
		for (i = anzahlZeilen; wieviel < i; i--)
		{
			document.getElementById(wo).removeChild(document.getElementById(wo).lastChild);
		}
		// first line 'all..' button invisible if just one line
		if (wieviel == 1)
		{
			if(document.getElementById(wo+'alle_date')) 
			{
				document.getElementById(wo+'alle_date').style.display = 'none';
			}
			if(document.getElementById(wo+'_alle_klasse_dauer')) 
			{
				document.getElementById(wo+'_alle_klasse_dauer').style.display = 'none';
			}
		}

	}

	// vars with updated line count and reference to site objects
	if(document.getElementById('adultsalle_date')) var all_adults = document.getElementById('adultsalle_date');
	if(document.getElementById('childrenalle_date')) var all_children = document.getElementById('childrenalle_date');			
	var zeilen_adults = getElementsByClassName(document.getElementById('adults'), 'div', 'zeile');
	var zeilen_children = getElementsByClassName(document.getElementById('children'), 'div', 'zeile');

	// Sonderfaelle 'Alle'
	if(zeilen_adults.length > 1)
	{
		all_adults.style.display = 'block';
		// debug('1');
	}
	else if(zeilen_adults.length == 1 && zeilen_children.length > 0) 
	{ 
		all_adults.style.display = 'block';
		// debug('2');
	}
	else if(zeilen_children.length > 1) 
	{ 
		all_children.style.display = 'block';
		// debug('5');
	}
	
	return zeile;

}

function setProduktIdAndPrice_SwissCard(node)
{
	var elements = new elementsOfZeile_SwissCard(node);
	
	var cl = elements.form_class.value;
	var age = elements.form_age.value;

	// ID und Preis und Rabatt loeschen wenn class oder duration nicht gesetzt sind
	if (cl == NULL)
	{
		elements.div_price.innerHTML = price_empty;
	}
		
	if (cl > 0)
	{
		var price = kaufm(prices[age][cl].price);
		var product_id = kaufm(prices[age][cl].id);
	
		// Preis Special: Familycard
		if(elements.form_age.value == 'children')
		{
			debug(elements.zeile.id +' - '+ elements.input_discount_option.checked)
			if(elements.input_discount_option)
			{
				if(elements.input_discount_option.checked == true)
				{
					price = kaufm(prices.familycard.price)
					product_id = prices.familycard.id;
				}
			}
		}
					
		elements.div_price.innerHTML = currency + price;
		elements.form_id.value = product_id;
	}
}

function setYearAndMonth_SwissCard(node)
{
    var zeile_elements = new elementsOfZeile_SwissCard(node);
     // alert(zeile_elements.form_year_month.value);
    var zeile_jahr_monat = zeile_elements.form_year_month.value.split('-');
     // alert(zeile_jahr_monat.length);
    zeile_elements.form_year.value = zeile_jahr_monat[0];
    zeile_elements.form_month.value = zeile_jahr_monat[1];
}

function getSwissCardLine(zeileNode)
// object to store all data from zeile elements
{
	var zeile = new elementsOfZeile_SwissCard(zeileNode);
	
	this.day 	= zeile.form_day.value;
	this.month 	= zeile.form_month.value;
	this.year 	= zeile.form_year.value;
	this.cl 	= zeile.form_class.value;
	this.id 	= zeile.form_id.value;
	this.year_month	= zeile.form_year_month.value;
	this.age	= zeile.form_age.value;
	this.price	= zeile.div_price.innerHTML;
	this.familycard = zeile.input_discount_option;
}

function setSwissCardLine(zeileNode,dataObject, allMode)
{	
	var zeile = new elementsOfZeile_SwissCard(zeileNode)
	if(allMode == undefined) allMode = false;

	// get Form Ids for setSelectListToValue
	var form_day 	= zeile.form_day.id;
	var form_month 	= zeile.form_month.id;
	var form_year 	= zeile.form_year.id;
	var form_year_month	= zeile.form_year_month.id;
	var form_class	= zeile.form_class.id;
	
	// Set hidden month
	zeile.form_month.value = dataObject.month;
	// Set hidden year
	zeile.form_year.value = dataObject.year;
	
	// allMode settings
	if (allMode == 'date')
	{ 
		if(dataObject.day > 0) 
		{
			setSelectListToValue(dataObject.day,form_day);
		} 
		
		// set year - month
		if(dataObject.year > 0 && dataObject.month > 0) 
		{
			setSelectListToValue(dataObject.year_month,form_year_month);
		} 
	} else
	if (allMode == 'option')
	{ 
		
		// set option
		if(zeile.form_age.value == 'children')
		{
			// debug('familycard: '+dataObject.familycard.checked);
			if(dataObject.familycard.checked == true) 
			{
				zeile.input_discount_option.checked = true;
				setSwissCardFamilyCard(zeile.input_discount_option);
			}
		}
		
		// set class
		if(dataObject.cl > 0)
		{
			setSelectListToValue(dataObject.cl,form_class);
		} else {
			zeile.form_class.style.backgroundColor = error_color;
		}
		
	} else
	// fallback settings
	if(allMode == false)
	{
		// set day
		var date_invalid = dateSmalerThenToday(dataObject.year, dataObject.month-1, dataObject.day);
		if(dataObject.day > 0 && date_invalid == false) 
		{
			setSelectListToValue(dataObject.day,form_day);
		} 
		else if(dataObject.day > 0 && date_invalid == true)
		{
			setSelectListToValue(dataObject.day,form_day);
			zeile.form_day.style.backgroundColor = error_color ;
		}
		else
		{	
			zeile.form_day.style.backgroundColor = error_color ;
		}
		
		// set year - month
		if(dataObject.year > 0 && dataObject.month > 0) 
		{
			setSelectListToValue(dataObject.year_month,form_year_month);
		} else {
			zeile.form_year_month.style.backgroundColor = error_color ;
		}
		
		// set option
		if(dataObject.age == 'children')
		{
			if(dataObject.familycard == 'true') zeile.input_discount_option.checked = true;
			setSwissCardFamilyCard(zeile.input_discount_option);
		} 
			
		// set class
		if(dataObject.cl > 0)
		{
			setSelectListToValue(dataObject.cl,form_class);
		} else {
			zeile.form_class.style.backgroundColor = error_color;
		}

	}
	
	setProduktIdAndPrice_SwissCard(zeileNode);
}

function setAll_SwissCard(sourceNode, allMode) 
{
	// Daten der ersten Zeile holen
	var source_zeile_data = new getSwissCardLine(sourceNode);	
	
	// Fieldset Node holen
	var fieldsetNode = getFirstUpperElement(sourceNode, 'id', 'inputfields') 
	
	// alle class="zeile" Elemente aus fieldset holen
	var zeilen = getElementsByClassName(document.getElementById(fieldsetNode.id), 'div', 'zeile');
	
	// Alle zeilen Elemente mit DAten aus erster zeile fuellen
	for (var i=0; i<zeilen.length; i++)
	{
	    setSwissCardLine(zeilen[i], source_zeile_data, allMode );
	}
}

function setAll_SwissCardOptions(sourceNode, allMode) 
{
	// Daten der ersten Zeile holen
	var source_zeile_data = new getSwissCardLine(sourceNode);	
	
	// Fieldset Node holen
	var fieldsetNode = getFirstUpperElement(sourceNode, 'class', 'reisedaten') 
	
	// alle class="zeile" Elemente aus fieldset holen
	var zeilen = getElementsByClassName(document.getElementById(fieldsetNode.id), 'div', 'zeile');
	
	// Alle zeilen Elemente mit DAten aus erster zeile fuellen
	for (var i=0; i<zeilen.length; i++)
	{
	    setSwissCardLine(zeilen[i], source_zeile_data, allMode );
	}
}

function elementsOfZeile_SwissCard(node)
// Helper
// Object with all DOM positions of the important zeile elements
{
	// Zeile identifizieren
	var zeile = getFirstUpperElement(node, 'class', 'zeile');
	
	// Tag Listen erstellen
	this.zeile 		= zeile;
	this.inputTags	= zeile.getElementsByTagName('input');
	this.labelTags 	= zeile.getElementsByTagName('label');
	this.spanTags 	= zeile.getElementsByTagName('span');
	this.aTags 		= zeile.getElementsByTagName('a');
	this.selectTags = zeile.getElementsByTagName('select');
	this.divTags 	= zeile.getElementsByTagName('div');
	
	// TagGroup references erstellen
	this.hidden_fields 	= this.divTags[4];
	this.div_discount	= this.divTags[2];
	this.div_price		= this.divTags[3];
	
	// Individual Field References
	this.button_all		= this.spanTags[0];
	this.calendar_link	= this.aTags[0];
	this.input_discount_option = this.div_discount.getElementsByTagName('input')[0];
	
	// Form Field References
	this.form_day 		= this.selectTags[0];
	this.form_year_month = this.selectTags[1];
	this.form_class 	= this.selectTags[2];
	this.form_id 		= this.hidden_fields.getElementsByTagName('input')[1];
	this.form_age 		= this.hidden_fields.getElementsByTagName('input')[0];
	this.form_month 	= this.hidden_fields.getElementsByTagName('input')[4];
	this.form_year 		= this.hidden_fields.getElementsByTagName('input')[5];
	this.form_age 		= this.hidden_fields.getElementsByTagName('input')[0];
	this.span_option 	= this.spanTags[1];
	this.span_date 		= this.spanTags[0];
	
}

function fallback_SwissCard(dataobject)
{
    if (dataobject.length>0)
    {
    	// counter
        var anzahl_adults=0;
        var anzahl_children=0;
        
        // get lines from fallbackobject
        for(line in dataobject)
        { 
            // Monat und Jahr zusammensetzen
            dataobject[line].year_month = dataobject[line].year+'-'+dataobject[line].month;
            
            if(dataobject[line].age == 'adults') 
            {  	 
                // counter erhoehen
                anzahl_adults++;
                
                // Bloecke sichtbar schalten
                SCHMOE_switchDisplayBlock('inputfields','data_adults');			
			    SCHMOE_displayByValue(1,'data_adults');
    			
			    // Zeile erzeugen
			    var zeile = createFields_SwissCard('adults','master_swisscard',anzahl_adults);
    			
			    // Zeile fuellen
			    setSwissCardLine(zeile,dataobject[line]);
            }
            if(dataobject[line].age == 'children') // same as adults
            {      
            	var passid = document.getElementById('passid').value;
            			
            	anzahl_children++;            	
            	if(passid == '15') {                  		
                		SCHMOE_switchDisplayBlock('inputfields','data_children');		
			SCHMOE_displayByValue(1,'data_children');	
			var zeile = createFields_SwissCard('children','master_uefacard','1');
			setSwissCardLine(zeile,dataobject[line]);            		
            	} else {
                		SCHMOE_switchDisplayBlock('inputfields','data_children');			
			SCHMOE_displayByValue(1,'data_children');
			var zeile = createFields_SwissCard('children','master_swisscard',anzahl_children);
			setSwissCardLine(zeile,dataobject[line]);
            	}            	
            } 
        }
        
         // Selects mit Anzahl setzen
 	setSelectListToValue(anzahl_adults,'paesse[adults]');
 	setSelectListToValue(anzahl_children,'paesse[children]');
        
        return true;
    } 
    else 
    {
        return false;
    }
    
}

function setSwissCardFamilyCard(checkbox)
{
	var zeile_elements = new elementsOfZeile_SwissCard(checkbox);
	
	if(checkbox.checked == 1)
	{
		zeile_elements.form_class.disabled=true;
		zeile_elements.form_class.style.backgroundColor = '#cccccc';
		zeile_elements.div_price.innerHTML = waehrungs_zeichen + kaufm(prices.familycard.price);
	}
	else if (checkbox.checked == 0)
	{
		zeile_elements.form_class.disabled=false;
		zeile_elements.form_class.style.backgroundColor = '';
		zeile_elements.div_price.innerHTML = price_empty;
	}
	setProduktIdAndPrice_SwissCard(checkbox);
}

/*//////////////////////////////////////
// Checkout functions for STS WLV (Kasse)
//////////////////////////////////////*/
var kasseValues = {
	chf: {porto: new Array, prefinal: new Array, subtotal: new Array},
	euro: {porto: new Array, prefinal: new Array, subtotal: new Array},
	gbp: {porto: new Array, prefinal: new Array, subtotal: new Array}
}

function getMoneyValues()
{
	var temp_value, i;
	
	// Areas
	var porto_prices = getElementsByClassName(document.getElementById('delivery_data') , 'div', 'price');
	var prefinal_prices = getElementsByClassName(document.getElementById('overview') , 'td', 'col_price_fix');
	var subtotal_prices = getElementsByClassName(document.getElementById('subtotal') , 'div', 'subtotal_value');
	
	for(i=0; i<prefinal_prices.length; i++)
	{
		temp_value = new String(prefinal_prices[i].innerHTML);
		temp_value = temp_value.replace(/[^\.0-9]*/, '');
		
		kasseValues.chf.prefinal[i] = temp_value;
		kasseValues.euro.prefinal[i] = temp_value * curr_data.euro.exchange;
		kasseValues.gbp.prefinal[i] = temp_value * curr_data.gbp.exchange;
		
		// debug(i +' '+ kasseValues.euro.prefinal[i]);
	}
	
	for(i=0; i<porto_prices.length; i++)
	{
		temp_value = new String(porto_prices[i].innerHTML);
		temp_value = temp_value.replace(/[^\.0-9]*/, '');
		
		kasseValues.chf.porto[i] = temp_value;
		kasseValues.euro.porto[i] = temp_value * curr_data.euro.exchange;
		kasseValues.gbp.porto[i] = temp_value * curr_data.gbp.exchange;
		
		// debug(i +' '+ kasseValues.euro.porto[i]);
	}
	
	for(i=0; i<subtotal_prices.length; i++)
	{
		temp_value = new String(subtotal_prices[i].innerHTML);
		temp_value = temp_value.replace(/[^\.0-9]*/, '');
		
		kasseValues.chf.subtotal[i] = temp_value;
		kasseValues.euro.subtotal[i] = temp_value * curr_data.euro.exchange;
		kasseValues.gbp.subtotal[i] = temp_value * curr_data.gbp.exchange;
		
		// debug(i +' '+ kasseValues.euro.porto[i]);
	}
}
function putMoneyValues(currency)
{
	// Areas
	var porto_prices = getElementsByClassName(document.getElementById('delivery_data') , 'div', 'price');
	var prefinal_prices = getElementsByClassName(document.getElementById('overview') , 'td', 'col_price_fix');
	var subtotal_prices = getElementsByClassName(document.getElementById('subtotal') , 'div', 'subtotal_value');

	// prefinal values
	for(i=0; i<prefinal_prices.length; i++)
	{	
		prefinal_prices[i].innerHTML = curr_data[curr_is].sign +' '+ kaufm(kasseValues[currency].prefinal[i]);
		// debug(prefinal_prices[i].innerHTML +' = '+kasseValues[currency].prefinal[i]);
	}
	
	// porto values
	for(i=0; i<porto_prices.length; i++)
	{		
		porto_prices[i].innerHTML = curr_data[curr_is].sign +' '+ kaufm(kasseValues[currency].porto[i]);
	}
	
	// subtotal values
	for(i=0; i<subtotal_prices.length; i++)
	{		
		subtotal_prices[i].innerHTML = curr_data[curr_is].sign +' '+ kaufm(kasseValues[currency].subtotal[i]);
	}

}


// Bugfix: bei Währungsanzeige EURO und Wechsel Lieferland wird Preis in WK immer kleiner => hängt mit Fkt. getMoneyValues/putMoneyValues zusammen
function getMoneyValues_Delivery()
{
	var temp_value, i;
	
	// Areas
	var porto_prices = getElementsByClassName(document.getElementById('delivery_data') , 'div', 'price');
	var prefinal_prices = getElementsByClassName(document.getElementById('overview') , 'td', 'col_price_fix');
	var subtotal_prices = getElementsByClassName(document.getElementById('subtotal') , 'div', 'subtotal_value');
	
	for(i=0; i<prefinal_prices.length; i++)
	{
		temp_value = new String(prefinal_prices[i].innerHTML);
		temp_value = temp_value.replace(/[^\.0-9]*/, '');
		
		//kasseValues.chf.prefinal[i] = temp_value;
		//kasseValues.euro.prefinal[i] = temp_value * curr_data.euro.exchange;
		//kasseValues.gbp.prefinal[i] = temp_value * curr_data.gbp.exchange;
		
		// debug(i +' '+ kasseValues.euro.prefinal[i]);
	}
	
	for(i=0; i<porto_prices.length; i++)
	{
		temp_value = new String(porto_prices[i].innerHTML);
		temp_value = temp_value.replace(/[^\.0-9]*/, '');
		
		kasseValues.chf.porto[i] = temp_value;
		kasseValues.euro.porto[i] = temp_value * curr_data.euro.exchange;
		kasseValues.gbp.porto[i] = temp_value * curr_data.gbp.exchange;
		
		// debug(i +' '+ kasseValues.euro.porto[i]);
	}
	
	for(i=0; i<subtotal_prices.length; i++)
	{
		temp_value = new String(subtotal_prices[i].innerHTML);
		temp_value = temp_value.replace(/[^\.0-9]*/, '');
		
		//kasseValues.chf.subtotal[i] = temp_value;
		//kasseValues.euro.subtotal[i] = temp_value * curr_data.euro.exchange;
		//kasseValues.gbp.subtotal[i] = temp_value * curr_data.gbp.exchange;
		
		// debug(i +' '+ kasseValues.euro.porto[i]);
	}
}

function putMoneyValues_Delivery(currency)
{
	// Areas
	var porto_prices = getElementsByClassName(document.getElementById('delivery_data') , 'div', 'price');
	var prefinal_prices = getElementsByClassName(document.getElementById('overview') , 'td', 'col_price_fix');
	var subtotal_prices = getElementsByClassName(document.getElementById('subtotal') , 'div', 'subtotal_value');
	
	// prefinal values
	for(i=0; i<prefinal_prices.length; i++)
	{
		//prefinal_prices[i].innerHTML = curr_data[curr_is].sign +' '+ kaufm(kasseValues[currency].prefinal[i]);
		// debug(prefinal_prices[i].innerHTML +' = '+kasseValues[currency].prefinal[i]);
	}
	
	// porto values
	for(i=0; i<porto_prices.length; i++)
	{		
		porto_prices[i].innerHTML = curr_data[curr_is].sign +' '+ kaufm(kasseValues[currency].porto[i]);
	}
	
	// subtotal values
	for(i=0; i<subtotal_prices.length; i++)
	{		
		//subtotal_prices[i].innerHTML = curr_data[curr_is].sign +' '+ kaufm(kasseValues[currency].subtotal[i]);
	}

}


function setWechselkurs(kurs, zeichen, currency) 
{
	curr_is = currency;
	wechselkurs = kurs;
	waehrungszeichen = zeichen;
	putMoneyValues(currency)
	endsumme();
}


function setPorto(portoWert)
{
	porto = portoWert;
	endsumme();
}

function setCcNo(value) 
{
	ccNo = value;
	endsumme();
}

function endsumme(first)
{	
    if(!isNaN(zwischensumme)) zwischensumme = parseFloat(zwischensumme);
    if(!isNaN(porto)) porto = parseFloat(porto);
    
	if (curr_is == 'euro') wechselkurs = curr_data[curr_is].exchange;
	
	// summ for cc calculation
	var temp_summe = zwischensumme + porto;
	
	// Credit Card Discount
    if (cc_discount[ccNo].type == 'P')
	{
		cc_fees = zwischensumme * (cc_discount[ccNo].value/100);	
	} 
	else if(cc_discount[ccNo].type == 'B')
	{
		cc_fees = cc_discount[ccNo].value;
	}
	
    // Final price
    temp_summe = temp_summe + cc_fees + bookingfee;
    
   	// set HTML values
    document.getElementById('subtotal_value').innerHTML 	= kaufm(zwischensumme * wechselkurs);
    document.getElementById('sendingfees_value').innerHTML 	= kaufm(porto * wechselkurs);
   document.getElementById('ccfees_value').innerHTML 		= kaufm(cc_fees * wechselkurs);
   document.getElementById('bookingfee_value').innerHTML 		= kaufm(bookingfee * wechselkurs);
    document.getElementById('total').innerHTML 				= kaufm(temp_summe * wechselkurs);
    document.getElementById('ccfees_display_value').innerHTML = kaufm(cc_fees * wechselkurs);			
    
    // set HTML signs
    var col_currency = getElementsByClassName(document.getElementById('final_price') , 'td', 'col_currency');
	for(i in col_currency)
	{
		col_currency[i].innerHTML = waehrungszeichen;
	}
	    document.getElementById('ccfees_display_sign').innerHTML = waehrungszeichen;			
}

function showHideObjectBySelectValue(select_field, trigger_string, object_id)
{	
	var obj = document.getElementById(object_id);	
	var obj_style = obj.style;
	
	//alert(obj_style);
	
	//alert("wird aufgerufen");
	
	if(select_field == trigger_string  || select_field == '') 
	{
		obj_style.display = 'none';
		//alert('fieldval: '+ select_field + ' and triggerval: ' + trigger_string);
	} else {
		obj_style.display = 'block';
		// alert('you suck');
	}	
}


function showHideObjectBySelectValue1(select_field, trigger_string, object_id)
{	
	var obj = document.getElementById(object_id);	
	var obj_style = obj.style;
	
	//alert(obj_style);
	
	//alert("wird aufgerufen");
	
	if(select_field == trigger_string) 
	{
		obj_style.display = 'block';
		//alert('fieldval: '+ select_field + ' and triggerval: ' + trigger_string);
	} else if(select_field == '' )  {
		obj_style.display = 'none';
		// alert('you suck');
	} else {
		obj_style.display = 'block';
		// alert('you suck');
	}	
}

/********************************
*
* Funktion: showHideDeliveryOptions(countrycode, destination)
* 
********************************* 
*
* in countrycode: Laendercode fuer dataobject deliveryoption
* in destination: id des Zielelements - Inhalt wird geloescht
* 
* out: div Struktur mit Inhalten fuer Deliveryoptions Liste und entsprechenden Attributen
*
* Ablauf: 
* -- LOOP fuer alle Werte aus 'deliveryoption':
* - Baut Div Struktur fuer ein Listenelement
* - Fuellet Struktur mit Werten aus Datenobjekten
* - Fuegt Struktur in destination ein
* -- END Loop fuer alle Werte aus 'deliveryoption'
* - Holt Geldwerte aus Seitenhtml
* - Setzt Geldwerte in korrekter Waehrung
* 
* benoetigt: Dataobject 'deliveryoption' mit Deliveryoptions und Werten
* benoetigt: Dataobject 'deliverytypes' mit Texten fuer 'deliveryoption'
* benoetigt: var 'curr_is' mit aktuell gueltiger Waehrung
* benoetigt: Funktionen und Vars aus scripts_schmoe.js 'Checkout functions for STS WLV (Kasse)' 
* 
* Beispiele Datenobjekte: 
* 
* var deliveryoption = {
* 	DE : { 	1 : {porto:"9.0", type:1, code:"zustellung_101"},
* 			2 : {porto:"8.0", type:2, code:"zustellung_102"},
* 			3 : {porto:"7.0", type:3, code:"zustellung_103"} 
* 		},
* 	BE : { 	1 : {porto:"5.0", type:1, code:"zustellung_104"},
* 			2 : {porto:"4.0", type:2, code:"zustellung_105"},
* 			3 : {porto:"3.0", type:3, code:"zustellung_106"} 
* 		},
* 	DK : { 	1 : {porto:"2.0", type:1, code:"zustellung_107"},
* 			2 : {porto:"1.0", type:2, code:"zustellung_108"},
* 			3 : {porto:"0.0", type:3, code:"zustellung_109"}, 
* 			4 : {porto:"20.0", type:3, code:"zustellung_1011"}, 
* 			5 : {porto:"30.0", type:3, code:"zustellung_1012"} 
* 		}
* }
* var deliverytypes = {
* 	1 : "Post 3-15 Tage",
* 	2 : "DHL Express Zonen 1 bis 3",
* 	3 : "DHL Express Zone 4",
* 	4 : "DHL Express Zonen 5 und 6",
* 	5 : "DHL Express Zonen 7 und 8"
* }
* 
*********************************/

function showHideDeliveryOptions(countrycode, destination, deliverycode)
{
	var dest;
	var div_outer;
	var div_radio;
	var div_label;
	var div_price;
	var input_price;
	var first_element = true;
	var checked_element_extra;
	
	// init
	dest = document.getElementById(destination);
	MM_SCHMOE_showHideLayers(destination,'','show')
	
	// clear
	dest.innerHTML = "";
	
	// create new nodes
	for(option in deliveryoption[countrycode])
	{
		// create elements	
		div_outer = document.createElement("div");
		div_radio = document.createElement("div");
		div_label = document.createElement("div");
		div_price = document.createElement("div");
		input_price = document.createElement("input");
		
		// element attributes
		// className hack: http://www.quirksmode.org/bugreports/archives/2005/03/setAttribute_does_not_work_in_IE_when_used_with_th.html
		div_outer.setAttribute("id",countrycode+"_"+deliveryoption[countrycode][option].code);
		div_radio.setAttribute("class", "radio");
		div_radio.setAttribute("className", "radio");
		div_label.setAttribute("class", "label");
		div_label.setAttribute("className", "label");
		div_price.setAttribute("class", "price");
		div_price.setAttribute("className", "price");
		checked_element_extra = '';
		
		// element values/ innerHTML (IE has Problems with setAttribute name and class)
		// checked element
		if(first_element == true && deliverycode == '')
		{
			checked_element_extra = "checked='checked'";
			setPorto(deliveryoption[countrycode][option].porto);
		} 
		else if(deliverycode == deliveryoption[countrycode][option].code)
		{
			checked_element_extra = "checked='checked'";
			setPorto(deliveryoption[countrycode][option].porto);
		}
		
		// render element
		div_radio.innerHTML = '<input type="radio" class="checkbox" classname="checkbox" name="kasse[versand][versandart]" value="'+deliveryoption[countrycode][option].code+'" onclick="setPorto('+deliveryoption[countrycode][option].porto+')" '+checked_element_extra+' />';
		//div_label.appendChild(document.createTextNode(deliverytypes[deliveryoption[countrycode][option].type]));
		// createTextNode can't handle HTML Code
		div_label.innerHTML = deliverytypes[deliveryoption[countrycode][option].type];
		div_price.appendChild(document.createTextNode('CHF '+deliveryoption[countrycode][option].porto));
		
		// insert elements
		div_outer.appendChild(div_radio);
		div_outer.appendChild(div_label);
		div_outer.appendChild(div_price);	
		dest.appendChild(div_outer);
		
		// set parameters
		first_element = false;
	}
	// Gets new values from page HTML
	getMoneyValues_Delivery();
	// Sets money values in correct currency
	putMoneyValues_Delivery(curr_is);
}


/*//////////////////////////
// Vignetten
///////////////////////////*/

function elementsOfZeile_Vignette(node)
// Helper
// Object with all DOM positions of the important zeile elements
{	
	// Zeile identifizieren
	var zeile = getFirstUpperElement(node, 'class', 'zeile');
	
	// Tag Listen erstellen
	this.zeile 		= zeile;
	this.inputTags	= zeile.getElementsByTagName('input');
	this.selectTags = zeile.getElementsByTagName('select');

	// tag references erstellen
	this.form_day 			= this.selectTags[0];
	this.form_year_month 	= this.selectTags[1];
	this.form_month 		= this.inputTags[0];
	this.form_year 			= this.inputTags[1];
	this.form_hidden_year	= this.inputTags[1];
	this.form_hidden_month	= this.inputTags[0];
	
	// direkt value mapping
	this.day			= this.form_day.value;
	this.year_month		= this.form_year_month.value;
	this.month			= this.form_month.value;
	this.year			= this.form_year.value;
}

function setYearAndMonth_Vignette(node)
{
    var zeile_elements = new elementsOfZeile_Vignette(node);
    var zeile_jahr_monat = zeile_elements.form_year_month.value.split('-');
    zeile_elements.form_year.value = zeile_jahr_monat[0];
    zeile_elements.form_month.value = zeile_jahr_monat[1];
}

function setPrice_Vignette(price)
{	
	var amount = document.getElementById('amount').value;
	var total = kaufm(price*amount);
	document.getElementById('price').innerHTML = currency + total;
}

/*//////////////////////////
// Vignetten With Date
///////////////////////////*/

function createVignetteFieldsWithDate(wo, was, wieviel) {
	
	var i, zeile, tempNodeName;
	
	// count existing elements
    var vorhandeneZeilen = getElementsByClassName(document.getElementById(wo), "div", "zeile");
	var anzahlZeilen = vorhandeneZeilen.length;

	// edit elements
	if (anzahlZeilen < wieviel)
	{
		// create new element
		for (i = anzahlZeilen; i < wieviel; i++) 
		{
			// build element
			zeile = document.getElementById(was).cloneNode(true); // neue Element erstellen -> MasterElement kopieren
			zeile.id = "zeile" + "_" + was + "_" + i; // Neue Id setzen
			zeile.setAttribute("class","zeile"); // CSS Klasse setzen
			var zeileInhalt = getChildNodesIESave(zeile);			
			document.getElementById(wo).appendChild(zeile); 
			var zeile_new = document.getElementById(zeile.id);
			
			// alert(zeile_new.id);
			
			// get element field data
			var zeile_data = new elementsOfZeile_VignetteWithDate(zeile_new);
			
			// set data			
			zeile_data.form_day.setAttribute("name",'userdata['+i+'][reisebeginn][tag]');
			zeile_data.form_day.id = 'userdata['+i+'][reisebeginn][tag]';

			zeile_data.form_month.setAttribute("name",'userdata['+i+'][reisebeginn][monat]');
			zeile_data.form_month.id = 'userdata['+i+'][reisebeginn][monat]';
			
			zeile_data.form_year.setAttribute("name",'userdata['+i+'][reisebeginn][jahr]');
			zeile_data.form_year.id = 'userdata['+i+'][reisebeginn][jahr]';
			
			zeile_data.form_year_month.setAttribute("name",'userdata['+i+'][reisebeginn][jahr-monat]');
			zeile_data.form_year_month.id = 'userdata['+i+'][reisebeginn][jahr-monat]';

		    zeile_data.link_calendar.setAttribute("href",'javascript:NewCalendar("userdata['+i+'][reisebeginn][monat]", "userdata['+i+'][reisebeginn][jahr]", "userdata['+i+'][reisebeginn][tag]", "userdata['+i+'][reisebeginn][jahr-monat]", "depart", "document.dataform.userdata['+i+'][reisebeginn][monat].value", "document.dataform.userdata['+i+'][reisebeginn][jahr].value")');
			
			// hide All Buttons
			zeile_data.span_all_date.style.display = "none";
			
			// 'Alle' Fields
			if (i==0)
			{
				zeile_data.span_all_date.id = "alle_date";
			}

			if (i>0)
			{
				zeile_data.span_all_date.parentNode.removeChild(zeile_data.span_all_date);
				document.getElementById("alle_date").style.display = "block";
			}
			
		}
	} 
	else if (anzahlZeilen > wieviel) 
	{
		// Ueberzaehlige Zeilen loeschen
		for (i = anzahlZeilen; wieviel < i; i--)
		{
			document.getElementById(wo).removeChild(document.getElementById(wo).lastChild);
		}
		
		// first line 'all..' button invisible if just one line
		if (wieviel == 1)
		{
			if(document.getElementById('alle_date')) 
			{
				document.getElementById('alle_date').style.display = 'none';
			}
		}
	}
	
	return zeile;
	
}

function elementsOfZeile_VignetteWithDate(node)
// Helper
// Object with all DOM positions of the important zeile elements
{
	// Zeile identifizieren
	var zeile = getFirstUpperElement(node, 'class', 'zeile');
	
	// Tag Listen
	this.zeile 			= zeile;
	this.inputTags		= zeile.getElementsByTagName('input');
	this.spanTags		= zeile.getElementsByTagName('span');
	this.labelTags		= zeile.getElementsByTagName('label');
	this.selectTags 	= zeile.getElementsByTagName('select');
	this.divTags    	= zeile.getElementsByTagName('div');
	this.aTags    		= zeile.getElementsByTagName('a');
	this.hidden_fields	= this.divTags[2].getElementsByTagName('input');;

    // Field References
	this.div_price  		= this.divTags[1];
	this.form_day			= this.selectTags[0];
	this.form_year_month	= this.selectTags[1];
	this.form_month			= this.hidden_fields[0];
	this.form_year			= this.hidden_fields[1];
	this.link_calendar		= this.aTags[0];
	this.span_all_date		= this.spanTags[0];
	
	// Value References
	this.price			= this.div_price.innerHTML;
	this.day			= this.form_day.value;
	this.month			= this.form_month.value;
	this.year			= this.form_year.value;
	this.year_month		= this.form_year_month.value;
}

function setAll_VignetteWithDate(sourceNode, allMode) 
{
	// Daten der ersten Zeile holen
	var source_zeile_data = new elementsOfZeile_VignetteWithDate(sourceNode);
	
	// Fieldset Node holen
	var fieldsetNode = getFirstUpperElement(sourceNode, 'id', 'vignette') 
	
	// alle class="zeile" Elemente aus fieldset holen
	var zeilen = getElementsByClassName(document.getElementById(fieldsetNode.id), 'div', 'zeile');
	
	
	
	// Alle zeilen Elemente mit DAten aus erster zeile fuellen
	for (var i=0; i<zeilen.length; i++)
	{
	    setVignetteLineWithDate(zeilen[i],source_zeile_data, allMode);
	    // debug(source_zeile_data.id);
	}
	
	// Preis und Rabatt vergeben
	// setProduktIdAndPrice(sourceNode);
}

function setVignetteLineWithDate(zeileNode,dataObject,allMode)
{	
	var zeile = new elementsOfZeile_VignetteWithDate(zeileNode)

	// get Form Ids for setSelectListToValue
	var form_day		= zeile.form_day.id;
	var form_year_month	= zeile.form_year_month.id;


    // Set hidden month
	zeile.form_month.value = dataObject.month;
	// Set hidden year
	zeile.form_year.value = dataObject.year;
	
	// date settings
	if (allMode == 'date')
	{ 
		
		
		if(dataObject.day > 0) 
		{
			setSelectListToValue(dataObject.day,form_day);
		}
		
		// set year - month
		if(dataObject.year > 0 && dataObject.month > 0) 
		{
			setSelectListToValue(dataObject.year_month,form_year_month);
		} 
		 
	} else
	
	// fallback settings
	if(allMode == 'fallback')
	{
		// set day
		var date_invalid = dateSmalerThenToday(dataObject.year, dataObject.month-1, dataObject.day);
		if(dataObject.day > 0 && date_invalid == false) 
		{
			// debug(dataObject.day+' - '+form_day);
			setSelectListToValue(dataObject.day,form_day);
		} 
		else if(dataObject.day > 0 && date_invalid == true)
		{
			setSelectListToValue(dataObject.day,form_day);
			zeile.form_day.style.backgroundColor = error_color ;
		}
		else
		{	
			zeile.form_day.style.backgroundColor = error_color ;
		}
		
		// set year - month
		if(dataObject.year > 0 && dataObject.month > 0) 
		{
			dataObject.year_month = dataObject.year+'-'+dataObject.month;
			setSelectListToValue(dataObject.year_month,form_year_month);
		} else {
			zeile.form_year_month.style.backgroundColor = error_color ;
		}
	} 
}

function fallback_VignetteWithDate(dataobject)
{
        // counter init
        var anzahl = 0;
        
        // get lines from fallbackobject
        for(line in dataobject)
        {
            // counter erhoehen
            anzahl++;

            SCHMOE_switchDisplayBlock('inputfields','vignette');			
		    SCHMOE_displayByValue(1,'vignette');
			
		    // Zeile erzeugen
		    var zeile = createVignetteFieldsWithDate('vignette','master_vignette', anzahl);
			
		    // Zeile fuellen
		    setVignetteLineWithDate(zeile,dataobject[line], 'fallback');
        }
        
         // Select mit Anzahl setzen
        setSelectListToValue(anzahl,'erwachsene');
}


//  Zustimmungserklärung anzeigen/ausblenden, dass kein fester Wohnsitz in Schweiz, wenn Lieferland == Schweiz
function checkLieferland(land, flag) {
	
	if(land == "CH") {
		document.getElementById('statement_'+flag).style.display = 'block';
	} else {
		document.getElementById('statement_'+flag).style.display = 'none';	
	}

}


//Anzeige Produkt-Wizard
function showWizard(value) {
	if(value =="1") {
		document.getElementById('suggestions').style.display = "block";
		document.getElementById('question').style.display = "none";
	}
	else {
		document.getElementById('suggestions').style.display = "none";
		document.getElementById('question').style.display = "block";
	}
}


/*//////////////////////////
// Event Handler Global
///////////////////////////*/

// change input trigger to white
function resetError(element)
{
	element.style.backgroundColor = '#ffffff';
}

/*//////////////////////////
// Hacks
///////////////////////////*/