// hier findet ein Austausch des Produktbildes statt
function changeColor() {
	var index = 0;
	
	// wir prüfen ob das Array mit Farbvarianten gefüllt ist
	if (colors.length != 1 || (colors.length == 1 && colors[index] != '0')) {
		// hier holen wir uns die gewählte Farbe
		var selected = document.getElementById('color_selectbox').value;
		index = getIndex(selected, colorcollection);
	}

	var color_id = -1;
	
	// wenn ein gültiger Index existiert, dann holen wir die Farb-ID aus dem Farb-Array
	if (index != -1) {
		color_id = colors[index];
	}

	var orderimage = document.getElementById('orderimage');
	// existiert eine gültige Farb-ID, dann ändern wir das Produktbild in die entsprechende Farbe
	if (color_id > 0) {
		if (images.length > index && images[index].length > 0) {
			orderimage.src = images[index];
		}
	} else {
		// wird Farbauswahl entfernt wird Standard-Produktbild angezeigt
		orderimage.src = first_image_src;
		// auch standard Saletag anzeigen
		var std_percent = Math.round(100-(product_price*100/product_price2));
		insertSaletag(std_percent);
	}
	
	updateData(0, color_id);
}

// hier überprüfen wir die Größenänderung
function changeSize() {
	var index = 0;

	// wir prüfen ob das Array mit Größenvarianten gefüllt ist
	if (sizes.length != 1) {
		// hier holen wir uns die gewählte Größe
		var selected = document.getElementById('sizes_selectbox').value;
		index = getIndex(selected, sizescollection);
	}

	var size_id = -1;
	
	// wenn ein gültiger Index existiert, dann holen wir die Größen-ID aus dem Größen-Array
	if (index != -1) {
		size_id = sizes[index];
		// falls mehrere Farben vorhanden, werden nicht vorhandene Farben entfernt
		if (colors.length > 1) {
			deleteHiddenOptions(size_id, 2, 'color');
		}
	}

	updateData(size_id, 0);
}	
	
// hier werden alle von der Größe und Farbe abhängigen Daten angepasst
function updateData(size_id, color_id) {

	// wenn eine Größenänderungen gemacht wurde, wird die vorerst initialisiert Größe überschrieben
	if (size_id != 0) {
		gid = size_id;
	}

	// wenn eine Farbänderungen gemacht wurde, wird die vorerst initialisiert Farbe überschrieben
	if (color_id != 0) {
		fid = color_id;
	}

	delivery_id 		= document.getElementById('delivery');
	price_value 		= document.getElementById('price');
	price2_text 		= document.getElementById('price2text');
	price2_value 		= document.getElementById('price2');
	lowest_price_hint 	= document.getElementById('lowest_price_info');
	
	// Anzeigen zunächst zurücksetzen
	delivery_id.innerHTML 		= no_delivery;
	set2day(0);
	// defaultmäßig ersten Preis anzeigen
	price_value.innerHTML 	= changePrice(first_price) + ' &euro;*';
	changeShipping(first_price/100);
	
	// ab-Anzeige defaultmäßig aktivieren, falls vorhanden
	if (show_lowest_price_info == 1) {
		lowest_price_hint.innerHTML = 'ab';
	}
	
	price2_text.value 		= '';
	price2_value.value 		= '';
	price2_text.innerHTML 	= '';
	price2_value.innerHTML 	= '';
	
	// defaultmäßig ersten alten Preis anzeigen
	if (parseInt(first_price2) > parseInt(first_price)) {
		if (product_price < product_price2) {
			price2_text.innerHTML = 'Alter Preis: ';
			price2_value.innerHTML = changePrice(first_price2) + ' &euro;**';
		}
		// wenn keine Variante ausgewählt wieder std. Saletag anzeigen
		if ((gid < 0 || fid < 0) && document.getElementById('saletag_single')) {
			changePercent(Math.round(100-(first_price*100/first_price2)));
		}
	}
		
	// wenn eine gültige Farben und Größen vorliegen, führen wir entsprechende Änderungen durch
	if ((gid >= 0) && (fid >= 0)) {
		// ab-Anzeige deaktivieren
		lowest_price_hint.innerHTML = '&nbsp;';
		
		variant_code = pid.toString() + ':' + gid.toString() + ':' + fid.toString() + ':';
		
		var code_index = -1;
		
		// wir durchlaufen das Array der Codevarianten
		for (var i = 0; i < codes.length; i++) {
			// existiert der Variantencode im Varianten-Array, dann merken wir uns den Index-Wert
			if (variant_code == codes[i]) {
				code_index = i;
			}
		}

		// der Varianten code wurde nicht gefunden
		if (code_index != -1) {
			insertSaletag(percent[code_index]);

			// Lieferbarkeitstext ändern
			delivery_id.innerHTML = status_short[code_index];
			set2day(status_2days[code_index]);
			// Preis anpassen wenn nötig
			price_value.innerHTML = changePrice(price[code_index]) + ' &euro;*';
			
			// Sparpreis überschreiben bei Änderungen, da ja kein Reload stattfindet
			saveprice = price[code_index];
			
			price2_text.value 	= '';
			price2_value.value 	= '';
			
			if (parseInt(price2[code_index]) > parseInt(price[code_index])) {
				price2_text.innerHTML = 'Alter Preis: ';
				price2_value.innerHTML = changePrice(price2[code_index]) + ' &euro;**';
				// reduzierten Prozentsatz entsprechendes Saletag-Bild anzeigen
				if (document.getElementById('saletag_single')) {
					changePercent(percent[code_index]);
				}
			}

			// bei Variantenreduzierung wird der alte Preis ausgeblendet, 
			// da der Preis der nicht reduzierten Varianten identisch (oder kleiner) dem alten Preis ist  
			if (parseInt(price2[code_index]) <= parseInt(price[code_index])) {
				price2_text.style.visibility = 'hidden';
				price2_value.style.visibility = 'hidden';
			} else {
				price2_text.style.visibility = 'visible';
				price2_value.style.visibility = 'visible';
			}

			changeShipping(price[code_index]/100);
		}				
	} else if (gid >= 0 && fid < 0) {
		document.getElementById('color_selectbox').disabled = false;
	} else if (gid < 0 && fid < 0) {
		document.getElementById('color_selectbox').disabled = true;
	}
}
	
// hier passen wir den Preis bei einer Farb- bzw. Größenänderung
function changePrice(new_price) {
	var euro = parseInt(new_price / 100);
	var cent = parseInt(new_price % 100);
	if (String(cent).length == 1) {
		cent = '0' + cent;
	}
	view_price = euro+','+cent;
	return view_price;
}

// hier ändern wir die Versandtext (Versandkosten)
function changeShipping(new_price) {

	var shipping = document.getElementById('shipping');

	shipping.innerHTML = shipping_text;
	shipping.style.fontWeight = 'normal';
	new_price = parseInt(new_price);
	if (new_price >= limit) {
		shipping.innerHTML = no_shipping_text;
		shipping.style.fontWeight = 'bold';
	}
}

// hier zeigen wir die Lieferzeiten an	
function set2day(number){
	// Lieferungstag überschreiben bei Änderungen, da ja kein Reload stattfindet
	shipping2day = number;
	
	delivery_id 		= document.getElementById('delivery');
	delivery_text_id 	= document.getElementById('delivery_text');

	delivery_id.style.fontWeight = 'bold';
	delivery_text_id.style.visibility = 'visible';

	switch (number) {
		case '1':
			delivery_text_id.innerHTML = 'Versand heute noch möglich!';
		break;
		case '2':
			delivery_text_id.innerHTML = 'Versand morgen möglich!';
		break;
		case '3':
			delivery_text_id.innerHTML = 'Versand am Montag möglich!';
		break;
		case '4':
			delivery_text_id.innerHTML = 'Versand am Dienstag möglich!';
		break;
		case '5':
			delivery_text_id.innerHTML = 'Versand am Mittwoch möglich!';
		break;
		case '6':
			delivery_text_id.innerHTML = 'Versand am Donnerstag möglich!';
		break;
		case '7':
			delivery_text_id.innerHTML = 'Versand am Freitag möglich!';
		break;
		case '0':
		default:
			delivery_id.style.fontWeight = 'normal';
			delivery_text_id.innerHTML = '';
			delivery_text_id.style.visibility = 'hidden';
		break;
	}
}

// hier wird das POPUP-Showroom geöffnet und angezeigt
function showroom(image){
	var screenx = (screen.width-pwidth)/2;
	var screeny = (screen.height-pheight)/4;
	var showroom_popup = window.open('index.php?id=' + page_showroom + '&tt_products=' + pid + '&image='+image,'showroom' + pid,'dependent=1,width='+pwidth+',height='+pheight+',scrollbars=yes,resizable=yes,left='+screenx+',top='+screeny+',location=0,status=0');

	if (showroom_popup) {
		showroom_popup.focus();
		return false;
	} else {
		return true;
	}
}

// POPUP für die Lieferung
function ship2day() {
	var screenx = (screen.width-shipping_popup_width)/2;
	var screeny = (screen.height-shipping_popup_height)/4;
	var popup_ship2day = window.open('index.php?id=' + page_ship2day + '&delivery_type=' + shipping2day, 'ship2day', 'dependent=1,width=' + shipping_popup_width + ',height='+shipping_popup_height+',scrollbars=no,resizable=no,left='+screenx+',top='+screeny+',location=0,status=0');
	popup_ship2day.focus();
}

// POPUP für den Spartipp
function savehint() {
	var screenx = (screen.width-save_hint_width)/2;
	var screeny = (screen.height-save_hint_height)/4;
	var popup_spartipp = window.open('index.php?id=' + page_savehint + '&limit=' + limit + '&wert='+(saveprice/100),'popup_spartipp','dependent=1,width=' + save_hint_width + ',height=' + save_hint_height + ',scrollbars=no,resizable=no,left='+screenx+',top='+screeny+',location=no,status=no');
	popup_spartipp.focus();
}

// Überprüfung bevor man zum Warenkorb gelangen kann
function cart(){

	if (colors.length >= 1) {
		changeColor();
	}
	
	if (sizes.length >= 1) {
		changeSize();
	}

	variant_code = pid.toString() + ':' + gid.toString() + ':' + fid.toString() + ':';

	var code_index = -1;

	// wir durchlaufen das Array der Codevarianten
	for (var i = 0; i < codes.length; i++) {

		// existiert der Variantencode im Varianten-Array, dann merken wir uns den Index-Wert
		if (variant_code == codes[i]) {
			code_index = i;
		}
	}
	
	// wenn keine Farbe gewählt wurde
	if (gid == -1) {
		alert('Bitte erst eine Größe auswählen.');
	// wenn keine Größe gewählt wurde
	} else if (fid == -1) {
		alert('Bitte erst eine Farbe auswählen.');
	} else {

		if (status[code_index] == 'soldout') {
			alert(status_long[code_index]+'\n\nBitte wählen Sie eine andere Farbe oder eine andere Größe.\n\n');
			buy = false;
		} else if (status[code_index]=='later') {
			if (sell_deliverable_products == 1) {
				buy = confirm(status_long[code_index]+'\n\nWollen Sie den Artikel solange vorbestellen, dann klicken Sie bitte [OK].\nAndernfalls klicken Sie [Abbrechen], um eine andere Farbe oder Größe auszuwählen.\n\n');
			} else {
				alert(status_long[code_index]+'\n\nSie können gern zu diesem späteren Zeitpunkt die Verfügbarkeit noch einmal abrufen oder Sie wählen eine andere Farb- oder Größenvariante.\n\n');
				buy = false;
			}
		} else {
			buy = true;
		}
		
		// wenn der Kauf möglich ist
		if (buy == true) {

			if (cookiecheck() == 1) {
				if (fid == 0) {
					fid = '';
				}
				
				if (gid == 0) {
					gid = '';
				} 
				var txt = 'recs[tt_products][' + pid + ':' + fid + ':' + gid + ']';
				document.order.elements[0].name = txt;
				document.order.elements[0].value = 1;

				document.order.submit();
			}
		}
	}
}

function cookiecheck(){
	var index = document.cookie.indexOf("fe_typo_user=");
	
	if (index == -1) {
		alert('Um eine Bestellung aufgeben zu können, müssen Sie die Verwendung von Cookies aktivieren.\n\nBitte passen Sie Ihre Browser-Einstellungen an.\n\nAlternativ können Sie Ihre Bestellung auch per Fax oder E-Mail aufgeben.');
		return 0;
	} else {
		return 1;
	}
}

function notepad() {
	if (colors.length >= 1) {
		changeColor();
	}
	
	if (sizes.length >= 1) {
		changeSize();
	}
	
	variant_code = pid.toString() + ':' + gid.toString() + ':' + fid.toString();
	codeN = variant_code + '=1';
	
	var txt = 'recs[tt_products][notepad]';
	var val = notepad_list;
	
	if (val != '') {
		val = val + ',' + codeN;
	} else {
		alert('Sie haben soeben einen Artikel zu Ihrem Merkzettel hinzugefügt.\n\nIhr Merkzettel erscheint links in der Navigation unterhalb des Hauptmenüs. Um einen Artikel auf dem Merkzettel anzusehen, klicken sie einfach auf den Namen, Sie gelangen dann direkt dorthin. Wenn Sie einen Artikel wieder vom Merkzettel löschen wollen, klicken Sie einfach das X-Symbol.\n\nZur Speicherung der Artikel auf dem Merkzettel muss Ihr Browser die Annahme von Cookies akzeptieren. Ihre persönliche Browser-Einstellung bestimmt dabei die Dauer der Speicherung. Sofern Sie die Speicherung der Cookies nicht auf die Dauer der Sitzung eingeschränkt haben, werden die Artikel automatisch 30 Tage lang auf der Merkliste gespeichert.');
		val = codeN;
	}
	
	// Ablaufdatum
	var expire = new Date();
	
	expire.setTime(expire.getTime() + (30 * 24 * 60 * 60 * 1000));
	
	document.cookie = 'notepad=' + val + '; expires=' + expire.toGMTString();
	document.notepadform.action = request_uri + '&tt_products_size=' + gid + '&tt_products_color=' + fid;
	document.notepadform.elements[0].name = txt;
	document.notepadform.elements[0].value = val;
	document.notepadform.submit();
	location.replace(request_uri + '&tt_products_size=' + gid + '&tt_products_color=' + fid);
}

/**
 * Zeigt das Popup für das Hauptbild an.
 * Wenn der Showroom aktiv ist wird der Showroom mit der jeweiligen gewählten Farbe geöffnet,
 * sonst wird das ImagePopup angezeigt.
 *
 * @return	bool	false wenn es keine Fehler gab sonst true
 */
function productimage_popup() {
	var popup_url	= 'index.php?id='+popup_pid+'&tt_products='+pid
	var index		= 0;
	
	// wenn wir Farben haben prüfen wir ob eine davon gewählt ist
	if (colors.length != 1) {
		var select_box	= document.getElementById('color_selectbox');

		if (select_box) {
			index		= select_box.selectedIndex;
			popup_url	+= '&tt_products_color='+select_box[index].value;
		}
	}

	// entweder den Showroom oder das ImagePopup anzeigen
	if (showroom_active) {
		if (0 == index) {
			return showroom(standard_color);
		} else {
			return showroom('color_' + (index-1));
		}
	} else {
		return openResizingPopup(popup_url, encodeURI(popup_url));
	}
	
}

function init() {
	changeColor();
	changeSize();
}

/**
 * Erzeugt das Saletag-Bild bei Variantenreduzierung

 * @param value
 */
function insertSaletag(value) {
	var div = document.getElementById('saletag');
	
	if (div) {
		if (!document.getElementById('saletag_single') && (value > 0 && value < 100)) {
			var img = document.createElement('img');
			img.id = 'saletag_single';
			div.appendChild(img);
			changePercent(value);
		} else if (document.getElementById('saletag_single') && value <= 0) {
			div.removeChild(document.getElementById('saletag_single'));
		}
	}
}
/**
 * Zeigt die prozentuale Reduzierungsmarkierung an
 */
function changePercent(value) {
	if (value > 0 && value < 100) {
		var image = document.getElementById('saletag_single');
		image.src = saletag_path+'saletag_'+value+'.png';
		image.alt = 'Sonderangebot - um '+value+'% reduziert';
		image.title = image.alt;
	}
}


/**
 * füllt die Dropdown-Menüs für Größe und Farbe dynamisch
 * 
 * @param string   attributeValue      gewählte Farbe oder Größe
 * @param number   codePosition        Position des zu ändernden Attributs im Varianten-Code
 * @param string   modifiedAttribute   die dynamisch zu füllende Selectbox
 */
function deleteHiddenOptions(attributeValue, codePosition, modifiedAttribute) {
	// Array mit sichtbaren Optionen
	var visible 		= new Array("-1");
	var selectElement 	= document.getElementById(modifiedAttribute+'_selectbox');

	for (var j = selectElement.options.length-1; j > 0; j--) {
		// Select Element leeren
		selectElement.options[j] = null;
	}
	
	// sichtbare Optionen anhand der Variantencodes ermitteln
	for (var i = 0; i < codes.length; i++) {
		var tmp = codes[i].split(":");

		if (tmp[1] == attributeValue) {
			visible.push(tmp[codePosition]);
		}
	}
	
	var data = eval(modifiedAttribute+'collection');
	var selected = false;

	// sichtbare Optionen in Dropdown einfügen
	for (var k = 0; k < data.length; k++) {
		var names = data[k].split("|");
		if (isElementOf(visible, names[1])) {
			// wenn eine gewählte Farbe vorhanden ist bleibt diese ausgewählt
			if (names[1] == fid) {
				selected = true;
			} else {
				selected = false;
			}

			var opt = selectElement.options;		
			opt[opt.length] = new Option(names[2], names[1], false, selected);
		}
	}
	
	changeColor();
}

/**
 * ermittelt den tatsächlichen index der gewählten Größe/Farbe im Farb-/Größen-Array
 * 
 * @param   string  selected     Id der gewählten Farbe/ Größe
 * @param   array   collection   Indizes, Ids und Namen der Produktfarben/-größen
 * @return  number
 */
function getIndex(selected, collection) {
	var index = -1;

	for (var i = 0; i < collection.length; i++) {
		var data = collection[i].split("|");
		if (data[1] == selected) {
			index = parseInt(data[0]);
		}
	}

	return index;
}