/**
	 * jquery.dump.js
	 * @author Torkild Dyvik Olsen
	 * @version 1.0
	 *
	 * A simple debug function to gather information about an object.
	 * Returns a nested tree with information.
	 *
	 */
(function($) {

	$.fn.dump = function() {
		return $.dump(this);
	}

	$.dump = function(object) {
		var recursion = function(obj, level) {
			if(!level) level = 0;
			var dump = '', p = '';
			for(i = 0; i < level; i++) p += "\t";

			t = type(obj);
			switch(t) {
				case "string":
					return '"' + obj + '"';
					break;
				case "number":
					return obj.toString();
					break;
				case "boolean":
					return obj ? 'true' : 'false';
				case "date":
					return "Date: " + obj.toLocaleString();
				case "array":
					dump += 'Array ( \n';
					$.each(obj, function(k,v) {
						dump += p +'\t' + k + ' => ' + recursion(v, level + 1) + '\n';
					});
					dump += p + ')';
					break;
				case "object":
					dump += 'Object { \n';
					$.each(obj, function(k,v) {
						dump += p + '\t' + k + ': ' + recursion(v, level + 1) + '\n';
					});
					dump += p + '}';
					break;
				case "jquery":
					dump += 'jQuery Object { \n';
					$.each(obj, function(k,v) {
						dump += p + '\t' + k + ' = ' + recursion(v, level + 1) + '\n';
					});
					dump += p + '}';
					break;
				case "regexp":
					return "RegExp: " + obj.toString();
				case "error":
					return obj.toString();
				case "document":
				case "domelement":
					dump += 'DOMElement [ \n'
					+ p + '\tnodeName: ' + obj.nodeName + '\n'
					+ p + '\tnodeValue: ' + obj.nodeValue + '\n'
					+ p + '\tinnerHTML: [ \n';
					$.each(obj.childNodes, function(k,v) {
						if(k < 1) var r = 0;
						if(type(v) == "string") {
							if(v.textContent.match(/[^\s]/)) {
								dump += p + '\t\t' + (k - (r||0)) + ' = String: ' + trim(v.textContent) + '\n';
							} else {
								r--;
							}
						} else {
							dump += p + '\t\t' + (k - (r||0)) + ' = ' + recursion(v, level + 2) + '\n';
						}
					});
					dump += p + '\t]\n'
					+ p + ']';
					break;
				case "function":
					var match = obj.toString().match(/^(.*)\(([^\)]*)\)/im);
					match[1] = trim(match[1].replace(new RegExp("[\\s]+", "g"), " "));
					match[2] = trim(match[2].replace(new RegExp("[\\s]+", "g"), " "));
					return match[1] + "(" + match[2] + ")";
				case "window":
				default:
					dump += 'N/A: ' + t;
					break;
			}

			return dump;
		}

		var type = function(obj) {
			var type = typeof(obj);

			if(type != "object") {
				return type;
			}

			switch(obj) {
				case null:
					return 'null';
				case window:
					return 'window';
				case document:
					return 'document';
				case window.event:
					return 'event';
				default:
					break;
			}

			if(obj.jquery) {
				return 'jquery';
			}

			switch(obj.constructor) {
				case Array:
					return 'array';
				case Boolean:
					return 'boolean';
				case Date:
					return 'date';
				case Object:
					return 'object';
				case RegExp:
					return 'regexp';
				case ReferenceError:
				case Error:
					return 'error';
				case null:
				default:
					break;
			}

			switch(obj.nodeType) {
				case 1:
					return 'domelement';
				case 3:
					return 'string';
				case null:
				default:
					break;
			}

			return 'Unknown';
		}

		return recursion(object);
	}

	function trim(str) {
		return ltrim(rtrim(str));
	}

	function ltrim(str) {
		return str.replace(new RegExp("^[\\s]+", "g"), "");
	}

	function rtrim(str) {
		return str.replace(new RegExp("[\\s]+$", "g"), "");
	}

})(jQuery);

/**
 * Mach der Inhalt eines Textfeldes leer
 *
 * @param selbst [this]
 */
function hideMich (selbst) {
	if (selbst.value == selbst.defaultValue) {
		selbst.value = '';
	}
}

/*
* vertical news ticker
* Tadas Juozapaitis ( kasp3rito@gmail.com )
* http://plugins.jquery.com/project/vTicker
*/
(function($){
	jQuery.fn.vTicker = function(options) {

		var defaults = {
			speed: 700,
			pause: 4000,
			showItems: 3,
			animation: '',
			mousePause: true,
			isPaused: false,
			direction: 'up',
			height: 0
		};

		var options = jQuery.extend(defaults, options);

		moveUp = function(obj2, height, options){
			if(options.isPaused)
				return;

			var obj = obj2.children('ul');

			var clone = obj.children('li:first').clone(true);

			if(options.height > 0)
			{
				height = obj.children('li:first').height();
			}

			obj.animate({
				top: '-=' + height + 'px'
			}, options.speed, function() {
				jQuery(this).children('li:first').remove();
				jQuery(this).css('top', '0px');
			});

			if(options.animation == 'fade')
			{
				obj.children('li:first').fadeOut(options.speed);
				if(options.height == 0)
				{
					obj.children('li:eq(' + options.showItems + ')').hide().fadeIn(options.speed);
				}
			}

			clone.appendTo(obj);
		};

		moveDown = function(obj2, height, options){
			if(options.isPaused)
				return;

			var obj = obj2.children('ul');

			var clone = obj.children('li:last').clone(true);

			if(options.height > 0)
			{
				height = obj.children('li:first').height();
			}

			obj.css('top', '-' + height + 'px')
			.prepend(clone);

			obj.animate({
				top: 0
			}, options.speed, function() {
				jQuery(this).children('li:last').remove();
			});

			if(options.animation == 'fade')
			{
				if(options.height == 0)
				{
					obj.children('li:eq(' + options.showItems + ')').fadeOut(options.speed);
				}
				obj.children('li:first').hide().fadeIn(options.speed);
			}
		};

		return this.each(function() {
			var obj = jQuery(this);
			var maxHeight = 0;

			obj.css({
				overflow: 'hidden',
				position: 'relative'
			})
			.children('ul').css({
				position: 'absolute',
				margin: 0,
				padding: 0
			})
			.children('li').css({
				margin: 0,
				padding: 0
			});

			if(options.height == 0)
			{
				obj.children('ul').children('li').each(function(){
					if(jQuery(this).height() > maxHeight)
					{
						maxHeight = jQuery(this).height();
					}
				});

				obj.children('ul').children('li').each(function(){
					jQuery(this).height(maxHeight);
				});

				obj.height(maxHeight * options.showItems);
			}
			else
			{
				obj.height(options.height);
			}

			var interval = setInterval(function(){
				if(options.direction == 'up')
				{
					moveUp(obj, maxHeight, options);
				}
				else
				{
					moveDown(obj, maxHeight, options);
				}
			}, options.pause);

			if(options.mousePause)
			{
				obj.bind("mouseenter",function(){
					options.isPaused = true;
				}).bind("mouseleave",function(){
					options.isPaused = false;
				});
			}
		});
	};
})(jQuery);

if (jQuery) {

	jQuery.fn.etoggle = function () {
		if (jQuery(this).is(':hidden')) {
			jQuery(this).slideDown('fast');
		} else {
			jQuery(this).hide();
		}
	};

	jQuery.fn.eshow = function () {
		jQuery(this).slideDown('fast');
	};
}

/**
 * Zeigt das rosa Feld für Fehlermeldungen
 */
function showErrorField () {
	jQuery('div.form_error_block').eshow();
}

jQuery(function(){

	// Form-Error-Block anzeigen. Hilfreich für PHP-Fehlermeldungen
	if (jQuery.trim(jQuery('#form_error').text()) != '') {
		jQuery('div.form_error_block').css('background-color','#FFCCCC');
		jQuery('div.form_error_block').css('border-color','rgb(128,0,0)');
		showErrorField();
	} else if (jQuery.trim(jQuery('#form_confirm').text()) != '') {
		jQuery('div.form_error_block').css('background-color','rgb(207,255,204)');
		jQuery('div.form_error_block').css('border-color','rgb(0,128,0)');
		showErrorField();
	}

	// Hinweis-Block anzeigen
	if (jQuery.trim(jQuery('#hinweis_no').text()) != '') {
		jQuery('div.hinweis').css('border','2px dashed rgb(255,0,0)');
		jQuery('div#hinweis').eshow();
	} else if (jQuery.trim(jQuery('#hinweis_yes').text()) != '') {
		jQuery('div.hinweis').css('border','2px dashed rgb(0,128,0)');
		jQuery('div#hinweis').eshow();
	}
});

function validate(sender, myarray, err_hd) {

	//var err_msg = !err_hd ? new Array('Folgende Fehler sind aufgetreten:\n') : new Array(err_hd + '\n');
	var err_msg = !err_hd ? new Array() : new Array(err_hd + '\n');

	var error = false;

	for (i = 0; i < myarray.length; i++) {

		if (typeof sender == 'string' ) {
			field = document.forms[sender].elements[myarray[i][0]];
		} else {
			field = document.forms[sender.name].elements[myarray[i][0]];
		}

		/* Block -6 einfach eine Meldung */
		if (myarray[i][0].indexOf('meldung') > -1) {
			error = true;
			err_msg.push(myarray[i][1]);
		}
		else
		/* Block -5 überprüft minimale Länge */
		if (myarray[i][1].indexOf('lmin') > -1) {
			if (field.value) {
				if (field.value.length < myarray[i][3]) {
					error = true;
					err_msg.push(myarray[i][2] + ' Mind. ' + myarray[i][3] + ' Zeichen.');
				}
			}
		}
		/* Block -4 überprüft maximale Länge */
		else
		if (myarray[i][1].indexOf('lmax') > -1) {
			if (field.value) {
				if (field.value.length > myarray[i][3]) {
					error = true;
					err_msg.push(myarray[i][2] + ' Max. ' + myarray[i][3] + ' Zeichen.');
				}
			}
		}
		/* Block -3 überprüft Uhrzeit */
		else
		if (myarray[i][1].indexOf('u') > -1) {
			if (field.value) {
				var regex = /^(2[0-3]|[01][0-9]):[0-5][0-9]$/;
				var myrxp = new RegExp(regex);
				var check = (myrxp.test(field.value));
				if (check != true) {
					error = true;
					err_msg.push(field.value + " " + myarray[i][2]);
				}
			}
		}
		/* Block -2 überprüft Checkboxen */
		else
		if (myarray[i][1].indexOf('b') > -1) {
			// Wenn mehrere Checkboxen - Array
			var checkbox_anzahl = field.length;
			if ( checkbox_anzahl > 1 ) {
				var auswahl = false;
				for (var j = 0; j < checkbox_anzahl; j++) {
					if (field[j].checked) {
						auswahl = true;
						break;
					}
				}
			// Wenn nur ein Checkbox existiert
			} else {
				if ( field.checked ) {
					auswahl = true;
				} else {
					//		                        	deb();
					auswahl = false;
				}
			}
			// Wenn Fehler gefunden
			if (auswahl == false) {
				error = true;
				err_msg.push(myarray[i][2]);
			}
		}

		/* Block -1 überprüft Radiobuttons */
		else
		if (myarray[i][1].indexOf('d') > -1) {

			var radio_test = false;

			var radio_anzahl = field.length;

			// Wenn mehrere Radiobuttons
			if ( radio_anzahl > 0 ) {
				for (var m = 0; m < field.length; m++) {
					if (field[m].checked == true) {
						radio_test = true;
						break;
					}
				}
			} else {
				if ( field.checked) {
					radio_test = true;
				} else {
					radio_test = false;
				}
			}

			// Wenn Fehler gefunden
			if (radio_test == false) {
				error = true;
				err_msg.push(myarray[i][2]);
			}

		}

		/* Block 0 überprüft Select-Felder, die ausgewählt sein müssen */
		else
		if (myarray[i][1].indexOf('s') > -1) {
			if ((field.options.selectedIndex == 0 && field.value == 'fehlt') || field.value == 'fehlt' || !field.value) {
				error = true;
				err_msg.push(myarray[i][2]);
			}
		}

		/* Block 1 überprüft Felder, die ausgefüllt sein müssen */
		else
		if (myarray[i][1].indexOf('e') > -1) {
			if (!jQuery.trim(field.value)) {
				error = true;
				err_msg.push(myarray[i][2]);
			}
		}

		/* Block 2 überprüft, ob die Emailadresse formal richtig ist */
		else
		if (myarray[i][1].indexOf('m') > -1) {
			if (field.value) {
				var usr = "([a-zA-Z0-9][a-zA-Z0-9_.-]*|\"([^\\\\\x80-\xff\015\012\"]|\\\\[^\x80-\xff])+\")";
				var domain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}";
				var regex = "^" + usr + "\@" + domain + "$";
				var myrxp = new RegExp(regex);
				var check = (myrxp.test(field.value));
				if (check != true) {
					error = true;
					err_msg.push(field.value + " " + myarray[i][2]);
				}
			}
		}

		/* Block 2.5 überprüft, ob die Telefonnummer formal richtig ist */
		else
		if (myarray[i][1].indexOf('t') > -1) {
			if (field.value) {
				//var regex = /^(\(?\+?[0-9]*\)?)?[0-9_\- \(\)\/]*$/i;
				var regex = /^(\+[0-9]{2,3}|0+[0-9]{2,5}).+[\d \s \/ \( \) -]/;
				var myrxp = new RegExp(regex);
				var check = (myrxp.test(field.value));
				if (check != true) {
					error = true;
					err_msg.push(field.value + " " + myarray[i][2]);
				}
			}
		}


		/* Block 3 überprüft Felder, deren Wert eine Zahl sein muss */
		else
		if (myarray[i][1].indexOf('n') > -1) {
			var num_error = false;
			if (field.value) {
				var myvalue = field.value;
				var num = myvalue.match(/[^0-9,\.]/gi);
				var dot = myvalue.match(/\./g);
				var com = myvalue.match(/,/g);
				if (num != null) {
					num_error = true;
				}
				else
				if ((dot != null) && (dot.length > 1)) {
					num_error = true;
				}
				else
				if ((com != null) && (com.length > 1)) {
					num_error = true;
				}
				else
				if ((com != null) && (dot != null)) {
					num_error = true;
				}
			}
			if (num_error == true) {
				error = true;
				err_msg.push(myvalue + " " + myarray[i][2]);
			}
		}

		/* Block 4 überprüft Wert anhand eines regulären Audrucks auf bestimmte Muster */
		else
		if (myarray[i][1].indexOf('r') > -1) {
			var regexp = myarray[i][3];
			if (field.value) {
				if (!regexp.test(field.value)) {
					error = true;
					err_msg.push(field.value + " " + myarray[i][2]);
				}
			}
		}

		/* Block 5 überprüft Felder, die als Preis formatiert sein müssen, ändert die Formatierung eventuell */
		else
		if (myarray[i][1].indexOf('p') > -1) {
			var myvalue = field.value;
			var reg = /,-{1,}|\.-{1,}/;
			var nantest_value = myvalue.replace(reg, "");
			var num = nantest_value.match(/[^0-9,\.]/gi);
			sep = myarray[i][1].substr(1, 1) ? myarray[i][1].substr(1, 1) : ',';
			if (field.value) {
				var myvalue = field.value.replace(/\./, ',');
				if (myvalue.indexOf(',') == -1) {
					field.value = myvalue + sep + '00';
				}
				else
				if (myvalue.indexOf(",--") > -1) {
					field.value = myvalue.replace(/,--/, sep + '00');
				}
				else
				if (myvalue.indexOf(",-") > -1) {
					field.value = myvalue.replace(/,-/, sep + '00');
				}
				else
				if (!myvalue.substring(myvalue.indexOf(',') + 2)) {
					error = true;
					err_msg.push(field.value + " " + myarray[i][2]);
				}
				else
				if (myvalue.substring(myvalue.indexOf(',') + 3) != '') {
					error = true;
					err_msg.push(field.value + " " + myarray[i][2]);
				}
				else
				if (num != null) {
					error = true;
					err_msg.push(field.value + " " + myarray[i][2]);
				}
			}
		}

		/* Block 6 überprüft Namensfelder, und korrigiert evtl. die Groß-/Kleinschreibung */
		else
		if (myarray[i][1].indexOf('c') > -1) {
			var noble = new Array("de", "von", "van", "der", "d", "la", "da", "of");
			var newvalue = '';
			var myvalue = field.value.split(/\b/);
			for (k = 0; k < myvalue.length; k++) {
				newvalue += myvalue[k].substr(0, 1).toUpperCase() + myvalue[k].substring(1);
			}
			for (k = 0; k < noble.length; k++) {
				var reg = new RegExp("\\b" + noble[k] + "\\b", "gi");
				newvalue = newvalue.replace(reg, noble[k]);
			}
			field.value = newvalue;
		}
	}


	/* im Fehlerfall werden hier die gesammelten Fehlermeldungen verarbeitet und angezeigt. Wenn das
     Formular ohne Beanstandung ist, wird es übertragen */
	if (error) {
		showErrorMessage(err_msg);
		return false;
	} else {
		return true;
	}
}

function showErrorMessage (err_msg) {

	// Alte Fehlermeldungen ausblenden
	jQuery('#form_error').text('');
	jQuery('#form_confirm').text('');

	// Wenn Fehlermeldungen in einem Array gesammelt werden
	if (typeof err_msg != 'string') {
		err_msg = err_msg.join('\<br \/\>');
	}

	// Hintergrundfarbe
	jQuery('div.form_error_block').css('background-color','#FFCCCC');
	jQuery('div.form_error_block').css('border-color','rgb(255,0,0)');

	jQuery('#form_error').html(err_msg);

	// Zum Seitenanfang springen
	window.scrollTo(0,0);

	// Das rosa Fehler-Feld anzeigen
	showErrorField();
}

/**
 * Validierung von Formularen
	jQuery('#bestell_form').submit(function(){

		var rules = {
			unternehmen : 'input',
			name : 'input',
			adresse : 'input',
			ort : 'input',
			plz : 'input',
			email : 'input',
			telefon : 'input',
			zweck : 'checkbox',
			confirm : 'radio'
		};

		return jValidate(rules);
	});
 */
var jValidate = function (rules) {

	var formValid = true;
	var elemValid = true;

	for (elem in rules) {

		elemValid = check(elem, rules[elem]);

		if (formValid === true) {
			formValid = elemValid;
		}
	}

	return formValid;

	function check (element, option) {

		var el = null;
		var elVal = null;

		if (option == 'input') {
			el = jQuery('[name="'+element+'"]');
		} else if (option == 'radio') {
			el = jQuery('[name="'+element+'"]:checked');
		} else if (option == 'checkbox') {
			el = jQuery('[name="'+element+'[]"]:checked');
		}

		elVal = el.val();

		if (jQuery.trim(elVal) == '' || elVal == 'undefined') {
			el.addClass('iRequired');
			jQuery('label[for="'+element+'"]').addClass('lRequired');
			return false;

		} else {
			el.removeClass('iRequired');
			jQuery('label[for="'+element+'"]').removeClass('lRequired');
			return true;
		}

	}
};

