// 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 = $('#color_selectbox').val();
		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];
	}

	// 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').attr('src', images[index]);
		}
	} else {
		// wird Farbauswahl entfernt wird Standard-Produktbild angezeigt
		$('#orderimage').attr('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 = $('#sizes_selectbox').val();
		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;
	}

	var delivery_id = $('#delivery');
	var lowest_price_info_id = $('#lowest_price_info');
	var price_id = $('#price');
	var price2_id = $('#price2');
	var price2_text_id = $('#price2text');
	var price2_hint_id = $('#price2hint');
	var saletag_single_length = $('#saletag_single').length;

	// Anzeigen zunächst zurücksetzen
	delivery_id.html(no_delivery);
	set2day(0);
	// defaultmäßig ersten Preis anzeigen
	price_id.html(changePrice(first_price) + ' &euro;');
	changeShipping(first_price/100);
	
	// ab-Anzeige defaultmäßig aktivieren, falls vorhanden
	if (show_lowest_price_info == 1) {
		lowest_price_info_id.html('ab');
	}
	
	price2_text_id.val('').html('');
	price2_id.val('').html('');
	
	// defaultmäßig ersten alten Preis anzeigen
	if (parseInt(first_price2) > parseInt(first_price)) {
		if (product_price < product_price2) {
			price2_text_id.html('Alter Preis: ');
			price2_id.html(changePrice(first_price2) + ' &euro;');
			
			price2_text_id.css('visibility','visible');
			price2_id.css('visibility','visible');
			price2_hint_id.css('visibility','visible');			
		}
		// wenn keine Variante ausgewählt wieder std. Saletag anzeigen
		if ((gid < 0 || fid < 0) && saletag_single_length > 0) {
			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_info_id.html('&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.html(status_short[code_index]);
			set2day(status_2days[code_index]);
			// Preis anpassen wenn nötig
			price_id.html(changePrice(price[code_index]) + ' &euro;');
			
			// Sparpreis überschreiben bei Änderungen, da ja kein Reload stattfindet
			saveprice = price[code_index];
			
			price2_text_id.val('');
			price2_id.val('');
			
			if (parseInt(price2[code_index]) > parseInt(price[code_index])) {
				price2_text_id.html('Alter Preis: ');
				price2_id.html(changePrice(price2[code_index]) + ' &euro;');
				// reduzierten Prozentsatz entsprechendes Saletag-Bild anzeigen
				if (saletag_single_length > 0) {
					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_id.css('visibility','hidden');
				price2_id.css('visibility','hidden');
				price2_hint_id.css('visibility','hidden');
			} else {
				price2_text_id.css('visibility','visible');
				price2_id.css('visibility','visible');
				price2_hint_id.css('visibility','visible');
			}

			changeShipping(price[code_index]/100);
		}				
	} else if (gid >= 0 && fid < 0) {
		$('#color_selectbox').attr('disabled',false);
	} else if (gid < 0 && fid < 0) {
		$('#color_selectbox').attr('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 = $('#shipping');
	shipping.html(shipping_text).css('fontWeight','normal');
	new_price = parseInt(new_price);
	if (new_price >= limit) {
		shipping.html(no_shipping_text).css('fontWeight','bold');
	}
}

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

	delivery_id.css('fontWeight', 'bold');
	delivery_text_id.show();

	switch (number) {
		case '1':
			delivery_text_id.html('Versand heute noch m&ouml;glich!');
		break;
		case '2':
			delivery_text_id.html('Versand morgen m&ouml;glich!');
		break;
		case '3':
			delivery_text_id.html('Versand am Montag m&ouml;glich!');
		break;
		case '4':
			delivery_text_id.html('Versand am Dienstag m&ouml;glich!');
		break;
		case '5':
			delivery_text_id.html('Versand am Mittwoch m&ouml;glich!');
		break;
		case '6':
			delivery_text_id.html('Versand am Donnerstag m&ouml;glich!');
		break;
		case '7':
			delivery_text_id.html('Versand am Freitag m&ouml;glich!');
		break;
		case '0':
		default:
			delivery_id.css('fontWeight', 'normal');
			delivery_text_id.html('').hide();
		break;
	}
}

// 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(base_url+'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(base_url+'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 = '0';
				}

				if (gid == 0) {
					gid = '0';
				}

				var txt = 'basket[positions][products][' + pid + ':' + gid + ':' + fid + ']';
				$('#basket_product').attr('name', txt).val(1);
				$('#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;
	}
	
	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();
	
	// ProduktUrl setzen
	var product_url = base_url;
	if (!use_real_url) {
		product_url = request_uri;	
	}
	product_url += getProductUrl();
	
	expire.setTime(expire.getTime() + (30 * 24 * 60 * 60 * 1000));
	document.cookie = 'notepad=' + val + '; expires=' + expire.toGMTString() + '; path=/';
	document.notepadform.action = product_url;	
	document.notepadform.elements[0].name = txt;
	document.notepadform.elements[0].value = val;
	document.notepadform.submit();
	location.replace(product_url);
}

// Liefert die Url für die neu aufzurufende ProduktUrl.
// @return	string	ProduktUrl.
function getProductUrl() {

	if (!use_real_url) {
		return '&tt_products_size=' + gid + '&tt_products_color=' + fid;
	}	
	
	var word_separator = url_word_separator ? url_word_separator : '-';
	var param_separator = url_param_separator ?  url_param_separator : '.';
	
	var add_variants = '';

	if (gid > 0 || fid > 0) {
		var size_id		= (gid > 0) ? gid : 0;
		var color_id	= (fid > 0) ? fid : 0;
		
		add_variants = param_separator + size_id + param_separator + color_id;
	}

	var expression = "^.*((?:article|image|showroom)\/.*\\"+word_separator+")([1-9][0-9]*)(\\"+param_separator+"[1-9][0-9]*)\.html((?:&(?:[\w]+)=(?:[\w]+))*)";
	exp = new RegExp(expression);
	if (exp.exec(request_uri)) {
		return RegExp.$1 + RegExp.$2 + RegExp.$3 + add_variants + '.html';		
	}

	var expression2 = "^.*((?:article|image|showroom)\/.*\\"+word_separator+")([1-9][0-9]*)(\\"+param_separator+"[1-9][0-9]*)(\\"+param_separator+"[0-9]*)(\\"+param_separator+"[0-9]*)\.html((?:&(?:[\w]+)=(?:[\w]+))*)";
	exp2 = new RegExp(expression2);
	if (exp2.exec(request_uri)) {
		return RegExp.$1 + RegExp.$2 + RegExp.$3 + add_variants + '.html';
	}
	
	// fallback
	return 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	= base_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	= $('#color_selectbox');

		if (select_box.length > 0) {
			index		= select_box.attr('selectedIndex');
			popup_url	+= '&tt_products_color='+select_box.val();
		}
	}

	// entweder den Showroom oder das ImagePopup anzeigen
	if (showroom_active) {
		if (0 == index) {
			return showroom(standard_color, pid);
		} else {
			return showroom('color_' + (index-1), pid);
		}
	} 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 = $('#saletag');

	if (div.length > 0) {
		var saletag_single_length = $('#saletag_single').length;
		if (saletag_single_length == 0 && (value > 0 && value < 100)) {
			var img = $('<img>').attr('id', 'saletag_single');
			div.append(img);
			changePercent(value);
		} else if (saletag_single_length > 0 && value <= 0) {
			$('#saletag_single').remove();
		}
	}
}

// Zeigt die prozentuale Reduzierungsmarkierung an
function changePercent(value) {
	if (value > 0 && value < 100) {
		var sale_title = 'Sonderangebot - um '+ value +'% reduziert';
		$('#saletag_single').attr({
			'src': saletag_path +'saletag_'+ value +'.png',
			'alt': sale_title,
			'title': sale_title
		});
	}
}

// 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;

	// einfügen sichtbarer Optionen in das Dropdown
	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;
}
