/********** Wenn alle Elemente geladen wurden und bereit sind **********/
$(function(){
	
	
	// clearfield Ersatz
	$('#search_field, .textfield').not(".readonly").each(function(){
		$(this).data("stdval", "Artikelsuche..."); // Weist jedem Input-Feld den Standardwert zu
	}).focus(function(){ // Wenn in das Feld geklickt wird
		if (this.value==$(this).data("stdval")) {
			this.value = "";
		}
		if (true || !$(this).hasClass("error")) {
			$(this).css("color", "black");
		}
	}).blur(function(){ // Beim Verlassen des Feldes
		if ($.trim(this.value)=="" || this.value==$(this).data("stdval")) {
			this.value = $(this).data("stdval");
			$(this).css("color", "gray");
		}
		else {
			if (!$(this).hasClass("error")) {
				$(this).css("color", "black");
			}
		}
	});

	
	$('#pricefrom, .textfield').not(".readonly").each(function(){
		$(this).data("stdval", this.value); // Weist jedem Input-Feld den Standardwert zu
	}).focus(function(){ // Wenn in das Feld geklickt wird
		if (this.value==$(this).data("stdval")) {
			this.value = "";
		}
		if (true || !$(this).hasClass("error")) {
			$(this).css("color", "black");
		}
	}).blur(function(){ // Beim Verlassen des Feldes
		if ($.trim(this.value)=="" || this.value==$(this).data("stdval")) {
			this.value = $(this).data("stdval");
			$(this).css("color", "gray");
		}
		else {
			if (!$(this).hasClass("error")) {
				$(this).css("color", "black");
			}
		}
	});	
	$('#priceto, .textfield').not(".readonly").each(function(){
		$(this).data("stdval", this.value); // Weist jedem Input-Feld den Standardwert zu
	}).focus(function(){ // Wenn in das Feld geklickt wird
		if (this.value==$(this).data("stdval")) {
			this.value = "";
		}
		if (true || !$(this).hasClass("error")) {
			$(this).css("color", "black");
		}
	}).blur(function(){ // Beim Verlassen des Feldes
		if ($.trim(this.value)=="" || this.value==$(this).data("stdval")) {
			this.value = $(this).data("stdval");
			$(this).css("color", "gray");
		}
		else {
			if (!$(this).hasClass("error")) {
				$(this).css("color", "black");
			}
		}
	});	
	
	/**
	 * FÃ¼gt dem Validator-Plugin die Testmethode "no_stdval" hinzu, welche sprÃ¼ft, ob die Eingabe
	 * in einem Textfeld eine andere ist, als der vorgegebene Wert. 
	 **/
	jQuery.validator.addMethod("no_stdval", function(value, element) {
		var stdval = $(element).data("stdval"); // wurde oben ja schon gesetzt, sonst wÃ¼rde es nicht funktionieren.
		if ($(element).hasClass("required")) return value!=stdval; //this.optional(element) || /^\w+$/i.test(value);
		else return true;
	}, "Bitte tragen Sie etwas in das Feld ein.");  

});





/********** Funktionen ***********/
	
	function check_searchform_submit(form,gstr) {
		
		var loc = gstr;
		
		
		if ( $('#searchin', form).val() ) {
			loc += "searchin/" + $('#searchin', form).val() + '/';
		}
		if ( $('#orderby', form).val() ) {
			loc += "orderby/" + $('#orderby', form).val() + '/';
		}
		if ( $('#search_field', form).val() && $('#search_field', form).val() != "Artikelsuche..." ) {
			loc += "search/" + encode64 ( $('#search_field', form).val() ) + '/';
		}
		if ( $('#pricefrom', form).val() && $('#pricefrom', form).val() != "Preis von" ) {
			loc += "pricefrom/" + encode64 ( $('#pricefrom', form).val() ) + '/';
		}
		if ( $('#priceto', form).val() && $('#priceto', form).val() != "Preis bis" ) {
			loc += "priceto/" + encode64 ( $('#priceto', form).val() ) + '/';
		}
		
		window.location.href = loc + "search.html"; 
		
		return false;
		
		if ($('#search_field', form).val()=="Artikelsuche...") {
	//		$('#search_field', form).val("");
		}
	}

	/*
	function search ( charCode ) {					
		if ( ( charCode == 13 ) && $("#search" ).val() && $("#search" ).val() != "Artikelsuche..." ) {
			var url = base_url+"?"+queryString+"&search=" + $("#search" ).val() + "&orderby=" + $("#orderby" ).val() + "&searchin=" + $("#searchin" ).val();
			
			window.location.href = url;
		}
	}
	
	function order() {
		window.location.href = base_url+"?"+queryString + ( ( document.getElementById( "search" ).value != "Artikelsuche..." && document.getElementById( "search" ).value != "" ) ? "&search=" + document.getElementById( "search" ).value : "" ) + "&orderby=" + document.getElementById( "orderby" ).value + ( ( document.getElementById( "searchin" ).value ) ? "&searchin=" + document.getElementById( "searchin" ).value : "" );
	}
	*/
	
	
	
	var req;
	
	function add2basket ( aid, units ) {
		var url = base_url+"basket.php?action=add&rnd="+randomNr+"&uid="+sessionID+"&article_aid=" + aid + "&units=" + units;
		if ( window.XMLHttpRequest ) {
			req = new XMLHttpRequest();
			req.onreadystatechange = responseHandler;
			req.open ( "GET", url, true );
			req.send ( null );
		} else if ( window.ActiveXObject ) {
			req = new ActiveXObject ( "Microsoft.XMLHTTP" );
			if ( req ) {
				req.onreadystatechange = responseHandler;
				req.open ( "GET", url, true );
				req.send();
			}
		}
	}
	
	// Setzt die Anzahl fÃ¼r die Artikel auf "units", fÃ¼r das Produkt "ean"
	function changeUnits ( aid, units ) {
		
		var units = prompt("Geben Sie hier die neue Menge ein.", units);
		if (typeof(units)!="string") return false;
		
		var url = base_url+"basket.php?action=update&rnd="+randomNr+"&uid="+sessionID+"&article_aid=" + aid + "&units=" + units;
		$.ajax({
			url: url,
			data: "",
			success: function(msg) {
				location.href = msg;
			}
		});
	}
	
	
	
	function removefrombasket ( aid ) {
		var url = base_url+"basket.php?action=remove&rnd="+randomNr+"&uid="+sessionID+"&article_aid=" + aid;
		if ( window.XMLHttpRequest ) {
			req = new XMLHttpRequest();
			req.onreadystatechange = responseHandler;
			req.open ( "GET", url, true );
			req.send ( null );
		} else if ( window.ActiveXObject ) {
			req = new ActiveXObject ( "Microsoft.XMLHTTP" );
			if ( req ) {
				req.onreadystatechange = responseHandler;
				req.open ( "GET", url, true );
				req.send();
			}
		}
	}
	
	function responseHandler() {
		if ( req.readyState == 4 ) {
			if ( req.status == 200 ) {
				var xx = req.responseText;
				eval ( xx );
			} else{
				alert( "Problem mit Empfang der XML-Daten" );
			}
		}
	}
	
	function showhide ( elementid ) {
		if ( document.getElementById ( elementid ).style.display == "none" ) {
			document.getElementById ( elementid ).style.display = "block";
			document.getElementById ( elementid ).style.visibility = "visible";
		} else {
			document.getElementById ( elementid ).style.display = "none";
			document.getElementById ( elementid ).style.visibility = "hidden";
		}
	}
	
	function clearfield ( fieldid, stdval ) {
		return;
		// Wurde ersetzt durch die Funktion ganz oben.
	}
	
	
	
	function number_format ( number, decimals, dec_point, thousands_sep ) {
		var n = number, prec = decimals;
		var toFixedFix = function (n,prec) {
			var k = Math.pow(10,prec);
			return (Math.round(n*k)/k).toString();
		};
		n = !isFinite(+n) ? 0 : +n;
		prec = !isFinite(+prec) ? 0 : Math.abs(prec);
		var sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;
		var dec = (typeof dec_point === 'undefined') ? '.' : dec_point;
		var s = (prec > 0) ? toFixedFix(n, prec) : toFixedFix(Math.round(n), prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;
		var abs = toFixedFix(Math.abs(n), prec);
		var _, i;
		if (abs >= 1000) {
			_ = abs.split(/\D/);
			i = _[0].length % 3 || 3;
			_[0] = s.slice(0,i + (n < 0)) +
			_[0].slice(i).replace(/(\d{3})/g, sep+'$1');
			s = _.join(dec);
		} else {
			s = s.replace('.', dec);
		}
		var decPos = s.indexOf(dec);
		if (prec >= 1 && decPos !== -1 && (s.length-decPos-1) < prec) {
			s += new Array(prec-(s.length-decPos-1)).join(0)+'0';
		}else if (prec >= 1 && decPos === -1) {
			s += dec+new Array(prec).join(0)+'0';
		}
		return s;
	}
	
	



/********* WARENKORB **********/
	
	
	function set_prices ( addon, shipping, articles ) {
		document.getElementById('p3').innerHTML = number_format ( addon, 2, ",", "" );
		document.getElementById('p2').innerHTML = number_format ( shipping, 2, ",", "" );
		document.getElementById('p4').innerHTML = number_format ( shipping + addon + articles, 2, ",", "" );
		document.getElementsByName('Versandkosten')[0].value = shipping;
		document.getElementsByName('Gebuehren')[0].value = addon;
		document.getElementsByName('Gesamtpreis')[0].value = shipping + addon + articles;
	}	
	
	
	function change_salutation4billingaddress ( val ) {
	
		$("#ba_title" ).hide();
		$("#ba_companyname" ).hide().removeClass("required");
		$("#ba_familyname" ).hide().removeClass("required");
		$("#ba_addon" ).hide();
		$("#ba_surname" ).hide().removeClass("required");
		$("#ba_forename" ).hide().removeClass("required");
		$("#misc_vat" ).hide();
		
		$( "#ba_salutation" ).css("color", "silver");
			
		if ( val == "Frau" || val == "Herr" || !val ) {
		
			$("#ba_title" ).show();
			$("#ba_forename" ).show().addClass("required");
			$("#ba_surname" ).show().addClass("required");
			if ( val ) $("#ba_salutation" ).css("color" , "black");
			
		} else if ( val == "Familie" ) {
		
			$("#ba_familyname" ).show().addClass("required");
			$("#ba_salutation" ).css("color", "black");
			
		} else if ( val == "Firma" ) {
		
			$("#ba_companyname" ).show().addClass("required");
			$("#ba_addon" ).show();
			$("#ba_salutation" ).css("color", "black");
			$("#misc_vat" ).show();
		}
	}
	
	
	
	function change_salutation4shippingaddress ( val ) {
	
		$("#sa_title").hide();
		$("#sa_companyname").hide().removeClass("required");
		$("#sa_familyname").hide().removeClass("required");
		$("#sa_addon").hide();
		$("#sa_surname").hide().removeClass("required");
		$("#sa_forename").hide().removeClass("required");
		
		
		$("#sa_salutation").css("color", "silver");
			
		if ( val == "Frau" || val == "Herr" || !val) {
		
			$("#sa_title").show();
			$("#sa_forename").show().addClass("required");
			$("#sa_surname").show().addClass("required");
			if ( val)
				$("#sa_salutation").css("color", "black");
			
		} else if ( val == "Familie") {
		
			$("#sa_familyname").show().addClass("required");
			$("#sa_salutation").css("color", "black");
			
		} else if ( val == "Firma") {
		
			$("#sa_companyname").show().addClass("required");
			$("#sa_addon").show();
			$("#sa_salutation").css("color", "black");
			
		}
	}
	
	
	
	
	/**
	 * Validierung des Formulars
	 **/
	function submit_shoppingcart(form) {
		// Adressfeld: Alle Felder, die die Klasse "required" haben, mÃ¼ssen ausgefÃ¼llt sein.
		var found_errors = false;
		
		
		// Keine Zahlungsart markiert?
		if ($("input:radio[name=paymentmethod]:checked").length<=0) {
			found_errors = true;
			$('.payment_method_container').css("border-left", "2px solid red");
		}
		else {
			$('.payment_method_container').css("border-left", "0px solid red");
		}
		
		
		// Alle Felder, die benötigt werden (also die Klasse "required" haben), aber nicht im div mit der Lieferadresse liegen.
		$('input.required').not("#div2hide input.required").each(function(){
			if (_val_form_field_value(this)) found_errors = true;
			if (found_errors) $(this).bind("focus", function(){
				$(this).removeClass("error");
			});
		});

		
		$('#div2hide input.required').removeClass("error"); // initial erstmal die Klasse entfernen, falls sie noch da ist.
		
		// Wenn shippingaddress_checkbox == checked, dann müssen auch deren Feldwerte ausgefüllt werden
		if ($("#shippingaddress_checkbox").attr("checked") == true ) {
			$('#div2hide input.required').each(function(){
				if (_val_form_field_value(this)) found_errors = true;
				if (found_errors) $(this).bind("focus", function(){
					$(this).removeClass("error");
				});
			});
		}

		// Wenn eine Emailadresse eingegeben wurde, diese auf korrektheit prÃ¼fen
		if (_val_form_field_email($('#misc_email'))) found_errors = true;
		if (found_errors) $('#misc_email').bind("focus", function(){
				$(this).removeClass("error");
			});
		
		// Wenn Fehler gefunden, diese anzeigen, bzw Meldung ausgeben
		if (found_errors) {
			alert("Bitte korrigieren Sie die markierten Felder.");
			return false;
		}
		else return true;
	}
	
	
	
	function _val_form_field_email(elem) {
		var found_errors = false;
		
		// Diese Abfrage kann auch entfallen, wenn Bestellungen ohne Emailadresse mÃ¶glich sein sollen
		if ($(elem).val()==$(elem).data("stdval")) {
			found_errors = true;
		}
		else {
			var value = $(elem).val();
			var is_email = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
			
			if (!is_email) {
				alert("Email-Adresse hat falsches Format");
				found_errors = true;
			}
		}
		
		
		if (found_errors) {
			$(elem).addClass("error");
		}
		else {
			$(elem).removeClass("error");
		}
		
		return found_errors;
	}
	
	
	
	
	function _val_form_field_value(elem) {
		var found_errors = false;
		// alert($(elem).val()+"\n#"+$(elem).attr("id")+"\n."+$(elem).attr("class"));
		if ($(elem).hasClass("no_stdval")) { // Diese Felder dÃ¼rfen nicht mit ihrem Std-Wert belegt sein
			// alert("no_stdVal");
			if ($(elem).val()==$(elem).data("stdval")) {
				found_errors = true;
				$(elem).addClass("error");
			}
			else $(elem).removeClass("error");
		}
		else {
			// alert("! no_stdVal");
			if ($(elem).val()=="") {
				found_errors = true;
				$(elem).addClass("error");
			}
		}
		
		return found_errors;
	}
	
	
	
	
/****** Artikel Details / Beschreibung *****/

		var ua = navigator.userAgent.toLowerCase();
		if (ua.indexOf(" chrome/") >= 0 || ua.indexOf(" firefox/") >= 0 || ua.indexOf(' gecko/') >= 0) {
			var StringMaker = function () {
				this.str = "";
				this.length = 0;
				this.append = function (s) {
					this.str += s;
					this.length += s.length;
				}
				this.prepend = function (s) {
					this.str = s + this.str;
					this.length += s.length;
				}
				this.toString = function () {
					return this.str;
				}
			}
		} else {
			var StringMaker = function () {
				this.parts = [];
				this.length = 0;
				this.append = function (s) {
					this.parts.push(s);
					this.length += s.length;
				}
				this.prepend = function (s) {
					this.parts.unshift(s);
					this.length += s.length;
				}
				this.toString = function () {
					return this.parts.join('');
				}
			}
		}
		
		var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
		
function encode64(input) {
	var output = new StringMaker();
	var chr1, chr2, chr3;
	var enc1, enc2, enc3, enc4;
	var i = 0;

	while (i < input.length) {
		chr1 = input.charCodeAt(i++);
		chr2 = input.charCodeAt(i++);
		chr3 = input.charCodeAt(i++);

		enc1 = chr1 >> 2;
		enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
		enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
		enc4 = chr3 & 63;

		if (isNaN(chr2)) {
			enc3 = enc4 = 64;
		} else if (isNaN(chr3)) {
			enc4 = 64;
		}

		output.append(keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4));
   }
   
   return output.toString();
}

		
		function decode64(input) {
			var output = new StringMaker();
			var chr1, chr2, chr3;
			var enc1, enc2, enc3, enc4;
			var i = 0;
		
			// remove all characters that are not A-Z, a-z, 0-9, +, /, or =
			input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
		
			while (i < input.length) {
				enc1 = keyStr.indexOf(input.charAt(i++));
				enc2 = keyStr.indexOf(input.charAt(i++));
				enc3 = keyStr.indexOf(input.charAt(i++));
				enc4 = keyStr.indexOf(input.charAt(i++));
		
				chr1 = (enc1 << 2) | (enc2 >> 4);
				chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
				chr3 = ((enc3 & 3) << 6) | enc4;
		
				output.append(String.fromCharCode(chr1));
		
				if (enc3 != 64) {
					output.append(String.fromCharCode(chr2));
				}
				if (enc4 != 64) {
					output.append(String.fromCharCode(chr3));
				}
			}
		
			return output.toString();
		}
