var addthis_config = {
	ui_language		: 'de',
	services_compact: 'facebook, twitter, myspace, misterwong, email'
};



function formvalidator_defaultcontactform(obj) {
	var me = this;
	me.obj = obj;

	me.fields = {
		salutation	: {
			required	: false
/*			forbidden	: {
				string	: [
					''
				]
			}*/
		},
		name		: {
			required	: true,
			allowed		: {
				regex	: [
					/^\s*.*(?:[\w\däöüÄÖÜß]+.*){3,}\s*$/i
				]
			}
		},
		address		: {
			required	: false,
			allowed		: {
				regex	: [
							/^\s*(?:|.*(?:[\w\däöüÄÖÜß\S]+\s*){2,})\s*$/im
						]
			}
		},
		phone		: {
			required	: false,
/*			okif		: {
				anyofok	: [
					'fax', 'email'
				]
			},*/
			allowed		: {
				regex	: [
					/^\s*.*(?:\d+.*){4,}\s*$/,
					/^\s*$/
				]
			}
		},
		fax			: {
			required	: false,
/*			okif		: {
				anyofok	: [
					'phone', 'email'
				]
			},*/
			allowed		: {
				regex	: [
					/^\s*.*(?:\d+.*){4,}\s*$/,
					/^\s*$/
				]
			}
		},
		email		: {
			required	: false,
/*			okif		: {
				anyofok	: [
					'phone', 'fax'
				]
			},*/
			allowed		: {
				regex	: [
					/^\s*(?:[^@]+@[^@]+(?:\.[^@]+)+)\s*$/,
					/^\s*$/
				]
			}
		},
		msg			: {
			required	: false,
			allowed		: {
				/* Bug: regex könnte richtig sein - auch mehr als 10 zeichen werden als unter 10 zeichen gefiltert !*/
				regex	: [
							/^\s*(?:|.*?(?:[\w\däöüÄÖÜß]+?.*?){2,}.*)\s*$/im
						]
			}
		},
		catalogue_complete	: {
			checkable	: true,
			required	: false
		},
		catalogue_1	: {
			checkable	: true,
			required	: false
		},
		catalogue_2	: {
			checkable	: true,
			required	: false
		},
		catalogue_3	: {
			checkable	: true,
			required	: false
		},
		catalogue_4	: {
			checkable	: true,
			required	: false
		}
	};

	me.validateField = function(fieldname) {
		var field = me.fields[fieldname];
		var selector = '[name^='+fieldname+']'; 
		var ok = true;
		if (field.checkable) {
			var value = jQuery(selector).attr('checked');
		} else {
			var value = jQuery(selector).val();
		}

		field.status = {
				value		: value,
				missed		: false,
				allowed		: false,
				forbidden	: false
		};

		if (field.required) {
			if (field.checkable && value == false) {
				field.status.missed = true;
			} else if (!field.checkable && value == '') {
				field.status.missed = true;
			} else {
				//field.status.missed = false;
			}
		} else { 
		//	field.status.missed = false;
		}

		var allowed = false;
		var forbidden = false;

		if (field.allowed) {
			if (!allowed && field.allowed.string) {
				for (var str in field.allowed.string) {
					var string = field.allowed.string[str];
					if (string == value) {
						allowed = true;
						break;
					}
				}
			}
			if (!allowed && field.allowed.regex) {
				for (var reg in field.allowed.regex) {
					var regex = field.allowed.regex[reg];
					if (regex.test(value)) {
						allowed = true;
						break;
					}
				}
			}
		} else {
			allowed = true;
		}

		if (field.forbidden) {
			if (!forbidden && field.forbidden.string) {
				for (var str in field.forbidden.string) {
					var string = field.forbidden.string[str];
					if (string == value) {
						forbidden = true;
						break;
					}
				}
			}
			if (!forbidden && field.forbidden.regex) {
				for (var reg in field.forbidden.regex) {
					var regex = field.forbidden.regex[reg];
					if (regex.test(value)) {
						forbidden = true;
						break;
					}
				}
			}
		} else {
			forbidden = false;
		}

		field.status.allowed = allowed;
		field.status.forbidden = forbidden;

		if (!allowed || forbidden) {
			field.status.ok = false;
		} else {
			field.status.ok = !field.status.missed;
		}

		return field.status.ok;
	}

	me.validateDependingFields = function() {
		var allok = true;
		for (var fieldname in me.fields) {
			var field = me.fields[fieldname];
			if (!field.status.ok) {
				if (field.okif) {
					var imok = false;
					if (field.okif.anyofok) {
						for (var k in field.okif.anyofok) {
							var fname = field.okif.anyofok[k];
							if (me.fields[fname].status.ok) {
								imok = true;
								break;
							}
						}
					}
					if (!imok) {
						allok = false;
						break;
					}
				} else {
					allok = false;
					break;
				}
			}
		}
		return allok;
	}


	me.validateForm = function() {
		var allok = true;
		for (var field in me.fields) {
			if (!me.validateField(field)) allok = false;
		}
		if (!allok) allok = me.validateDependingFields();
		return allok;
	}

	me.updateErrorinfos = function() {
		for (var fieldname in me.fields) {
			var selector = '[name^='+fieldname+']';
			var id = jQuery(selector).attr('id') + '_errorinfo';
			var field = me.fields[fieldname];

			if (!field.status.ok) {
				if (field.status.missed) {
					jQuery('#'+id+' .missed').slideDown('slow','linear');
					jQuery('#'+id+' .forbidden').slideUp('slow','linear');
					jQuery('#'+id+' .unallowed').slideUp('slow','linear');
				} else {
					jQuery('#'+id+' .missed').slideUp('slow','linear');
					if (field.status.forbidden) {
						jQuery('#'+id+' .forbidden').slideDown('slow','linear');
					} else {
						jQuery('#'+id+' .forbidden').slideUp('slow','linear');
					}
					if (!field.status.allowed) {
						jQuery('#'+id+' .unallowed').slideDown('slow','linear');
					} else {
						jQuery('#'+id+' .unallowed').slideUp('slow','linear');
					}
				}
				jQuery('#'+id).slideDown('slow','linear');
			} else {
				jQuery('#'+id+' .missed').slideUp('slow','linear');
				jQuery('#'+id+' .forbidden').slideUp('slow','linear');
				jQuery('#'+id+' .unallowed').slideUp('slow','linear');
				jQuery('#'+id).slideUp('slow','linear');
			}
		}
	}

	me.hideErrorinfos = function() {
		for (var fieldname in me.fields) {
			var selector = '[name^='+fieldname+']';
			var id = jQuery(selector).attr('id') + '_errorinfo';
			 
			jQuery('#'+id).hide();
			jQuery('#'+id+' *').hide();
		}
	}

	me.constructor = function() {
		jQuery(me.obj).submit(function(){
			var formok = me.validateForm();
			if (!formok) {
				me.updateErrorinfos();
			} else {
				me.hideErrorinfos();
			}

			return formok;
		});
	}
	me.constructor();
	me.hideErrorinfos();
}

function formvalidator_defaultrequestform(obj) {
	var me = this;
	me.obj = obj;

	me.fields = {
		salutation	: {
			required	: false
/*			forbidden	: {
				string	: [
					''
				]
			}*/
		},
		name		: {
			required	: true,
			allowed		: {
				regex	: [
					/^\s*.*(?:[\w\däöüÄÖÜß]+.*){3,}\s*$/i
				]
			}
		},
		address		: {
			required	: false,
			allowed		: {
				regex	: [
							/^\s*(?:|.*(?:[\w\däöüÄÖÜß\S]+\s*){2,})\s*$/im
						]
			}
		},
		phone		: {
			required	: false,
/*			okif		: {
				anyofok	: [
					'fax', 'email'
				]
			},*/
			allowed		: {
				regex	: [
					/^\s*.*(?:\d+.*){4,}\s*$/,
					/^\s*$/
				]
			}
		},
		fax			: {
			required	: false,
/*			okif		: {
				anyofok	: [
					'phone', 'email'
				]
			},*/
			allowed		: {
				regex	: [
					/^\s*.*(?:\d+.*){4,}\s*$/,
					/^\s*$/
				]
			}
		},
		email		: {
			required	: false,
/*			okif		: {
				anyofok	: [
					'phone', 'fax'
				]
			},*/
			allowed		: {
				regex	: [
					/^\s*(?:[^@]+@[^@]+(?:\.[^@]+)+)\s*$/,
					/^\s*$/
				]
			}
		},
		msg			: {
			required	: false,
			allowed		: {
				/* Bug: regex könnte richtig sein - auch mehr als 10 zeichen werden als unter 10 zeichen gefiltert ! */
				regex	: [
							/^\s*(?:|.*?(?:[\w\däöüÄÖÜß]+?.*?){2,}.*)\s*$/im
						]
			}
		},
		eventtype	: {
			required	: true,
			okif		: {
				anyofok	: [
					'eventtype_etc'
				]
			},
			allowed		: {
				regex	: [
					/^\s*.*(?:[\w\däöüÄÖÜß]+.*){3,}\s*$/i
				]
			},
			forbidden	: {
				string	: [
				   'etc'
				]
			}
		},
		eventtype_etc	: {
			required	: false,
			allowed		: {
				regex	: [
					/^\s*.*(?:|(?:[\w\däöüÄÖÜß]+.*){3,})\s*$/i
				]
			}
		},
		date_from		: {
			required	: true,
			allowed		: {
				regex	: [
					/^\s*(?:\d{1,2}\D(?:\d{1,2}|[\D\wäöüÄÖÜß]+)\D(?:\d{2}|\d{4})?)\s*$/
				]
			}
		},
		date_to		: {
			required	: false,
			allowed		: {
				regex	: [
					/^\s*(?:|(?:\d{1,2}\D(?:\d{1,2}|[\D\wäöüÄÖÜß]+)\D(?:\d{2}|\d{4})?))\s*$/
				]
			}
		},
		time_from		: {
			required	: false,
			allowed		: {
				regex	: [
					/^\s*(?:|(?:\d{1,2}(?:\D\d{2})?\D*))\s*$/
				]
			}
		},
		time_to		: {
			required	: false,
			allowed		: {
				regex	: [
					/^\s*(?:|(?:\d{1,2}(?:\D\d{2})?\D*))\s*$/
				]
			}
		},
		people		: {
			required	: true,
			allowed		: {
				regex	: [
					/^\s*[\D\wäöüÄÖÜß]*(?:\d+[\D\wäöüÄÖÜß]*){1,2}\s*$/
				]
			}
		},
		payment		: {
			required	: false,
			forbidden	: {
				string	: [
					''
				]
			}
		},
		roomcat_count_1	: {
			required	: false,
			allowed		: {
				regex	: [
					/^\s*(?:|\d{0,2})\s*$/
				]
			}
		},
		roomcat_count_2	: {
			required	: false,
			allowed		: {
				regex	: [
					/^\s*(?:|\d{0,2})\s*$/
				]
			}
		},
		roomcat_count_3	: {
			required	: false,
			allowed		: {
				regex	: [
					/^\s*(?:|\d{0,2})\s*$/
				]
			}
		},
		roomcat_count_4	: {
			required	: false,
			allowed		: {
				regex	: [
					/^\s*(?:|\d{0,2})\s*$/
				]
			}
		},
		roomcat_count_5	: {
			required	: false,
			allowed		: {
				regex	: [
					/^\s*(?:|\d{0,2})\s*$/
				]
			}
		},
		roomcat_count_6	: {
			required	: false,
			allowed		: {
				regex	: [
					/^\s*(?:|\d{0,2})\s*$/
				]
			}
		},
		roomcat_count_7	: {
			required	: false,
			allowed		: {
				regex	: [
					/^\s*(?:|\d{0,2})\s*$/
				]
			}
		},
		roomcat_count_8	: {
			required	: false,
			allowed		: {
				regex	: [
					/^\s*(?:|\d{0,2})\s*$/
				]
			}
		},
		roomcat_count_9	: {
			required	: false,
			allowed		: {
				regex	: [
					/^\s*(?:|\d{0,2})\s*$/
				]
			}
		}
	};

	me.validateField = function(fieldname) {
		var field = me.fields[fieldname];
		var selector = '[name^='+fieldname+']'; 
		var ok = true;
		if (field.checkable) {
			var value = jQuery(selector).attr('checked');
		} else {
			var value = jQuery(selector).val();
		}
		if (value == undefined) value = '';

		field.status = {
				value		: value,
				missed		: false,
				allowed		: false,
				forbidden	: false
		};

		if (field.required) {
			if (field.checkable && value == false) {
				field.status.missed = true;
			} else if (!field.checkable && value == '') {
				field.status.missed = true;
			} else {
				//field.status.missed = false;
			}
		} else { 
			field.status.missed = false;
		}

		var allowed = false;
		var forbidden = false;

		if (field.allowed) {
			if (!allowed && field.allowed.string) {
				for (var str in field.allowed.string) {
					var string = field.allowed.string[str];
					if (string == value) {
						allowed = true;
						break;
					}
				}
			}
			if (!allowed && field.allowed.regex) {
				for (var reg in field.allowed.regex) {
					var regex = field.allowed.regex[reg];
					if (regex.test(value)) {
						allowed = true;
						break;
					}
				}
			}
		} else {
			allowed = true;
		}

		if (field.forbidden) {
			if (!forbidden && field.forbidden.string) {
				for (var str in field.forbidden.string) {
					var string = field.forbidden.string[str];
					if (string == value) {
						forbidden = true;
						break;
					}
				}
			}
			if (!forbidden && field.forbidden.regex) {
				for (var reg in field.forbidden.regex) {
					var regex = field.forbidden.regex[reg];
					if (regex.test(value)) {
						forbidden = true;
						break;
					}
				}
			}
		} else {
			forbidden = false;
		}

		field.status.allowed = allowed;
		field.status.forbidden = forbidden;

		if (!allowed || forbidden) {
			field.status.ok = false;
		} else {
			field.status.ok = !field.status.missed;
		}

		return field.status.ok;
	}

	me.validateDependingFields = function() {
		var allok = true;
		for (var fieldname in me.fields) {
			var field = me.fields[fieldname];
			if (!field.status.ok) {
				if (field.okif) {
					var imok = false;
					if (field.okif.anyofok) {
						for (var k in field.okif.anyofok) {
							var fname = field.okif.anyofok[k];
							if (me.fields[fname].status.ok) {
								imok = true;
								break;
							}
						}
					}
					if (!imok) {
						allok = false;
						break;
					}
				} else {
					allok = false;
					break;
				}
			}
		}
		return allok;
	}


	me.validateForm = function() {
		var allok = true;
		for (var field in me.fields) {
			if (!me.validateField(field)) allok = false;
		}
		if (!allok) allok = me.validateDependingFields();
		return allok;
	}

	me.updateErrorinfos = function() {
		for (var fieldname in me.fields) {
			var selector = '[name^='+fieldname+']';
			var id = jQuery(selector).attr('id') + '_errorinfo';
			var field = me.fields[fieldname];

			if (!field.status.ok) {
				if (field.status.missed) {
					jQuery('#'+id+' .missed').slideDown('slow','linear');
					jQuery('#'+id+' .forbidden').slideUp('slow','linear');
					jQuery('#'+id+' .unallowed').slideUp('slow','linear');
				} else {
					jQuery('#'+id+' .missed').slideUp('slow','linear');
					if (field.status.forbidden) {
						jQuery('#'+id+' .forbidden').slideDown('slow','linear');
					} else {
						jQuery('#'+id+' .forbidden').slideUp('slow','linear');
					}
					if (!field.status.allowed) {
						jQuery('#'+id+' .unallowed').slideDown('slow','linear');
					} else {
						jQuery('#'+id+' .unallowed').slideUp('slow','linear');
					}
				}
				jQuery('#'+id).slideDown('slow','linear');
			} else {
				jQuery('#'+id+' .missed').slideUp('slow','linear');
				jQuery('#'+id+' .forbidden').slideUp('slow','linear');
				jQuery('#'+id+' .unallowed').slideUp('slow','linear');
				jQuery('#'+id).slideUp('slow','linear');
			}
		}
	}

	me.hideErrorinfos = function() {
		for (var fieldname in me.fields) {
			var selector = '[name^='+fieldname+']';
			var id = jQuery(selector).attr('id') + '_errorinfo';
			 
			jQuery('#'+id).hide();
			jQuery('#'+id+' *').hide();
		}
	}

	me.constructor = function() {
		jQuery(me.obj).submit(function(){
			var formok = me.validateForm();
			if (!formok) {
				me.updateErrorinfos();
			} else {
				me.hideErrorinfos();
			}

			return formok;
		});
	}
	me.constructor();
	me.hideErrorinfos();
}

function createAccordion(elementId){
	jQuery(".a_accordion", elementId).click(function(){
		jQuery(".div_accordion", elementId).slideUp();
		jQuery(".a_accordion", elementId).removeClass("ui-state-active");
		jQuery(".acc-icon", elementId).attr("src", "/ccds_tpl_img/akk-arr-closed.png");
		
		if(jQuery(this, elementId).next(".div_accordion").css("display")=="none"){
			jQuery(this, elementId).next(".div_accordion").slideDown();
			jQuery(this).addClass("ui-state-active");
			jQuery(".acc-icon", this).attr("src", "/ccds_tpl_img/akk-arr-opened.png");
		} else if(jQuery(this, elementId).next(".div_accordion").css("display")=="block"){
			jQuery(this, elementId).next(".div_accordion").slideUp();
		}
	});
}

jQuery(document).ready(function() {
	
	if (navigator.userAgent.indexOf("Firefox") != -1 || navigator.userAgent.indexOf("Chrome") != -1) {
		jQuery('.ghostshell').each(function() {
			var r = Math.random() * 150;
			var a = Math.random() * Math.PI * 2;
			var t = Math.round(r*Math.cos(a));
			var l = Math.round(r*Math.sin(a));
			var tm = Math.round(Math.random(2000)+500);
			jQuery(this).css({
				marginTop:t+'px',
				marginLeft:l+'px',
				opacity:0
			});
			jQuery(this).animate({
				marginTop:'0px',
				marginLeft:'0px',
				opacity:1
			},tm);
			
		});
	}
	
	jQuery(".div_galerie a[rel^='prettyPhoto'], .absatz a[rel^='prettyPhoto']").prettyPhoto({theme:'light_rounded', overlay_gallery:false, showTitle:false});
	jQuery(".div_thumbbar a").click(function(){
		jQuery(".a_fullsize").fadeOut("fast");
		var activeId = jQuery(this).attr("rel");
		jQuery("#"+activeId).fadeIn("slow");
	});
	
	jQuery(".div_thumb_float_left a[rel^='prettyPhoto']").prettyPhoto({theme:'light_rounded', overlay_gallery:false, showTitle:false});
	jQuery(".div_thumb_float_right a[rel^='prettyPhoto']").prettyPhoto({theme:'light_rounded', overlay_gallery:false, showTitle:false});
	jQuery(".div_video a[rel^='prettyPhoto']").prettyPhoto({theme:'light_rounded', overlay_gallery:false, showTitle:false});
	

	jQuery('.defaultcontactform').each(function() {
		var form = new formvalidator_defaultcontactform(this);
	});

	
	var popupcode = '';
	// dislay inline Content als Lightbox - hier Anfrageformular
	jQuery(".div_anfrageform_container a[rel^='prettyPhoto']").prettyPhoto({
		theme:'light_rounded'
		,overlay_gallery:false
		,showTitle:false
		,default_width:888
		,changepicturecallback:function() {
			popupcode = jQuery('.div_anfrageform_popup').html();
			jQuery('.div_anfrageform_popup').html('');
			
			jQuery('.defaultrequestform').each(function() {
				var form = new formvalidator_defaultrequestform(this);
			});
			
		}
		,callback:function() {
			jQuery('.div_anfrageform_popup').html(popupcode);
		}
	});
	
	jQuery('.defaultrequestform').each(function() {
		var form = new formvalidator_defaultrequestform(this);
		jQuery(".submit").click(function(){
			location.href = "#top";
		});
	});
	
	jQuery(".pp_close").click(function(){
		jQuery(".div_prettyphoto_tmpheight").show();
	});
	
	jQuery("#a_gaestebuch_eintrag_switch").click(function(){
		jQuery("#eintragverfassen").toggle();
	});
	
});


