/**
* Javascript
* standard-funktionen
*
* @author heiko pfefferkorn
* @copyright 2006 i-fabrik gmbh
* @version $Id: main.js,v 1.16 2007/05/14 11:54:12 heiko Exp $
*
*/

	/* fixMsIELeaks
	 *
	 * Fix some IE memory leaks.
	 * http://youngpup.net/2005/0221010713
	 */
	function fixMsIELeaks() {
		if (document.all && window.attachEvent) {
			var elProps = [
				"data", "onmouseover", "onmouseout",
				"onmousedown", "onmouseup", "ondblclick",
				"onclick", "onselectstart", "oncontextmenu"
			];
			var all = d.all;
			for (var i = 0, el; el = all[i]; i++) {
				for (var j = 0, elProp; elProp = elProps[j]; j++) {
					el[elProp] = null;
				}
			}
		}
	}

	var SITE = {
		start: function() {
			fixPNG();

			WIDGETS.showTooltips($$('.show_tt'));
			WIDGETS.blurAllLinks([$$('a')]);
			WIDGETS.setMouseOverClass([$$('input.input_button'),$$('button')],'over');
			WIDGETS.rewriteTableTag($$('#con_inhalt table'),0,0,0);

			// Slimbox initialisieren
			Slimbox.init({
				fxResize      : Fx.Transitions.backOut,
				opacityOverlay: 0.8,
				textNavImage  : 'Bild %d von %dd'
			});
		},
		end: function() {
			fixMsIELeaks();
		}
	};

	var WIDGETS = {
		openPopup: function(url,wn,ft,ww,wh,wc) {
			if (window.screen)
				if (wc) {
					var wl = (screen.width-ww)/2;
					var wt = (screen.height-wh)/2;
					ft+=(ft!='')?',':'';
					ft+=',left='+wl+',top='+wt;
				}
			window.open(url,wn,ft+((ft!='')?',':'')+'width='+ww+',height='+wh);
		},
		blurAllLinks: function(o) {
			if (!o) return;
			o.each(function(elm) {
				elm.each(function(item) {
					item.addEvent('click', function(){ this.blur(); });
				});
			});
		},
		setMouseOverClass: function(o,c) {
			if (!o) return;
			o.each(function(elm) {
				elm.each(function(item) {
					item.addEvent('mouseover', function(){ this.addClass(c); });
					item.addEvent('mouseout', function(){ this.removeClass(c); });
				});
			});
		},
		showTooltips: function(o) {
			if (!o) return;

			var siteTips = new Tips(o, {
				maxTitleChars:100,
				onShow: function(tip) {
					new Fx.Style(tip, 'opacity', {
						timeOut  : 10,
						duration : 100
					}).custom(0,0.8)
				}
			});
		},
		rewriteTableTag: function(o,b,cp,cs) {
			if (!o) return;

			o.each(function(tbl) {
				tbl.setProperties({
					border     : b,
					cellpadding: cp,
					cellspacing: cs
				});
			});
		},
		imgOverEvent: function(selector,out,over) {
			$$(selector).each(function(img) {
				var img = $(img);
				if ($type(img.src)) {
					if (img.src.indexOf(out)>0) {
						img.addEvent('mouseover',function() {
							img.src = img.src.replace(out, over);
						}).addEvent('mouseout', function() {
							img.src = img.src.replace(over, out);
						});
					}
				}
			});
		}
	};

	var SITE_ACCORDION = {
		start: function(o_toggler,o_toggler_a,o_stretcher,mode) {
			if ( !((o_toggler.length>0 && o_stretcher.length>0) && (o_toggler.length==o_stretcher.length)) )
				return;

			var t = this;
			this.togglers    = o_toggler;
			this.togglers_a  = o_toggler_a;
			this.stretchers  = o_stretcher;
			this.hide_always = false;

			switch (mode) {
				case 'open':
					t.open();
					break;
				case 'hide_always':
					this.hide_always = true;
				default:
					t.toggle();
					break;
			}
		},
		/* Property: open
		 *
		 * Inaktives komplett geöffnetes 'Accordion'. Mousout- und Mouseoverstatus setzen.
		 */
		open: function() {
			var t = this;
			this.stretchers.each(function(item,i) {
				item.addEvent('mouseover', function() {
					this.addClass('accordion_over');
					t.togglers[i].addClass('h4_ov');
				});
				item.addEvent('mouseout', function() {
					this.removeClass('accordion_over');
					t.togglers[i].removeClass('h4_ov');
				});
			});
		},
		toggle: function() {
			var t     = this;
			var first = true;
			this.stretchers.each(function(item) {
				item.setStyles({
					height  : '0',
					overflow: 'hidden'
				});
			});

			this.togglers.each(function(tog, i) {
				tog.defaultColor = tog.getStyle('background-color');
			});

			this.acc = new Fx.Accordion(t.togglers, t.stretchers, {duration: 350, opacity: false, start: true, alwaysHide:t.hide_always, transition: Fx.Transitions.quadOut,
				onActive: function(tog, i) {
					tog.addClass('h4_cur');
				},
				onBackground: function(tog, i) {
					tog.removeClass('h4_cur');
				}
			});

			if (!t.checkHash(t.togglers_a)) {
				if (first)
					t.acc.showThisHideOpen(0);
			}
		},
		checkHash: function(o) {
			var t     = this;
			var found = false;

			if (o.length>0) {
				o.each(function(link, i) {
					link.addEvent('click', function(){ this.blur(); });
					if (window.location.hash.test(link.hash)) {
						t.acc.showThisHideOpen(i);
						t.togglers[i].addClass('h4_cur');
						found = true;
					}
				});
			}
			return found;
		}
	};

	var THUMBS = {
		start: function(o) {
			if (o.length>0){
		        o.each(function(elm, i) {
		            var id       = elm.getProperty('id').split('_');
		            var nr       = id[1];
		            var sy_zoom  = $('zoomsymbol_'+nr);

		            sy_zoom.setOpacity(0);
		            sy_zoom.setStyle('visibility','visible');

		            elm.addEvent('mouseover', function(){
		                var opacityIn = new Fx.Style(sy_zoom, 'opacity', {duration:200}).custom(0,0.5);
		            }).addEvent('mouseout', function(){
		                var opacityOut = new Fx.Style(sy_zoom, 'opacity', {duration:200}).custom(0.5,0);
		            });
		        });
			}
		}
	};

	var FORMS_VALIDATE = {
		isEmail: function(s) {
			var rx1  = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
			var rx2  = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
			var flag = !rx1.test(s) && rx2.test(s);

			return flag;
		},
		isDate: function(o) {
			var v_parse = parseDate(o.getValue, "d.M.y");

			if (v_parse==null) {
				var prompt_date = new MooPrompt("", "Bitte korrigieren Sie Ihre Datumeingabe!", {
					width       : 260,
					height      : 55,
					buttons     : 1,
					button1     : 'OK',
					buttonClass1: 'input_button',
					onButton1   : function(){
						$(o.id).focus();
						$(o.id).select();
					}
				});
			}
		}
	};

	var FORM_KONTAKT = {
		start: function(ident) {
			var t = this;
			this.ident       = ident;
			this.form        = $('frm_'+ident);
			this.ajax_url    = this.form.getProperty('action');
			this.col_submit  = $(ident+'_submit');
			this.col_wait    = $(ident+'_wait');
			this.col_thanks  = $(ident+'_thanks');
			this.col_notsend = $(ident+'_notsend');

			t.form.onsubmit = function() {
				t.sendForm();
				return false;
			};
		},
		sendForm: function() {
			var t = this;

			t.col_submit.setStyle('display','none');
			t.col_wait.setStyle('display','block');

			var ajax_params = {
				required: 'zuname,vorname',
				zuname  : $('zuname').getValue(),
				vorname : $('vorname').getValue(),
				email   : $('email').getValue(),
				anliegen: $('anliegen').getValue()
			};

			var ajax_contact = new Ajax(t.ajax_url, {
				method    : 'post',
				postBody  : Object.toQueryString(ajax_params),
				onComplete: function(responseText,responseXML) {
					var jO = Json.evaluate(responseText);


					for (var field in jO.fields) {
						if ($(t.ident+'_fehler_'+field)) {
							if (jO.fields[field]==1)
								$(t.ident+'_fehler_'+field).setStyle('display','block');
							else
								$(t.ident+'_fehler_'+field).setStyle('display','none');
						}

						if ($(field))
							if (jO.fields[field]==0)
								$(field).removeClass('fehler');
							else
								$(field).addClass('fehler');
					}

					// error=eingabefehler, notsend=sendenfehler, send=gesendet
					switch (jO.status) {
						case 'error':
							t.col_thanks.setStyle('display','none');
							t.col_notsend.setStyle('display','none');
							t.col_submit.setStyle('display','block');
							t.col_wait.setStyle('display','none');
							break;

						case 'notsend':
							t.col_thanks.setStyle('display','none');
							t.col_notsend.setStyle('display','block');
							t.col_submit.setStyle('display','block');
							t.col_wait.setStyle('display','none');

							break;

						case 'send':
							t.col_thanks.setStyle('display','block');
							t.col_notsend.setStyle('display','none');
							t.col_submit.setStyle('display','block');
							t.col_wait.setStyle('display','none');
							break;
					}
				}
			}).request();
		}
	};

	var FORM_SUCHE = {
		start: function(f) {
			var t         = this;
			this.form     = f;
			this.string   = $('suchbegriff');
			this.btn      = $('btn_suche_submit');

			t.form.onsubmit = function() { return t.validate(); };
			t.string.addEvent('click', function() { this.select(); });
			t.btn.addEvent('click', function() {
				this.blur();
				if (t.validate()) t.form.submit();
			});
		},
		validate: function() {
			var t           = this;
			var flag_return = false;

			if (t.string.getValue().isEmpty() || t.string.getValue().length<3) {
				t.string.addClass('fehler');
				t.string.select();
				t.string.focus();
			} else {
				t.string.removeClass('fehler');
				flag_return = true;
			}

			return flag_return;
		}
	};

	var contentSearch = new Class({
		setOptions: function(options){
			this.options = {
				conResult       : '',
				searchIdent     : '',
				loadStatusIdent : '',
				searchScript    : '',
				turnScript      : ''
			};
			Object.extend(this.options, options || {});
		},
		initialize: function(s_string, options){
			this.setOptions(options);
			this.s_string = encodeURIComponent(s_string);

			var pointer = this;
			var p_ajax  = {suchbegriff: this.s_string, sprache: pointer.options.language.toLowerCase()};
			var s_ajax  = new Ajax(this.options.searchScript, {
				method  : 'post',
				postBody: Object.toQueryString(p_ajax),
				onFailure: function(e) {
					pointer.options.conResult.innerHTML = "an error occured...";
				},
				onComplete: function(responseText,responseXML) {
					pointer.options.conResult.innerHTML = responseText;
					if ($$('h4.toggler').length>1)
						SITE_ACCORDION.start($$('h4.toggler'),$$('h4.toggler a'),$$('div.accordion'),'hide_always');
				}
			}).request();
		},
		turnPage: function(cmd, page) {
			var pointer = this;

			$(pointer.options.searchIdent+cmd).setStyle("display","none");
			$(pointer.options.loadStatusIdent+cmd).setStyle("display","block");

			var p_ajax  = {suchbegriff: pointer.s_string, suche_seite: page, 'cmd': cmd, sprache: pointer.options.language.toLowerCase()};
			var s_ajax  = new Ajax(pointer.options.turnScript, {
				method  : 'post',
				postBody: Object.toQueryString(p_ajax),
				onFailure: function(e) {
					$(pointer.options.loadStatusIdent+cmd).setStyle("display","none");
					$(pointer.options.searchIdent+cmd).innerHTML = "an error occured...";
					$(pointer.options.searchIdent+cmd).setStyle("display","block");

					// Reset Accordionhöhe
					var tmp_size = $(pointer.options.searchIdent+cmd).getCoordinates();
					var tmp_fx   = new Fx.Style('accordion_'+cmd, 'height', {duration: 400});
					tmp_fx.start(tmp_size.height+pointer.options.resetHeightOffset);
				},
				onComplete: function(responseText,responseXML) {
					$(pointer.options.searchIdent+cmd).innerHTML = responseText;
					$(pointer.options.searchIdent+cmd).setStyle("visibility","hidden");
					$(pointer.options.searchIdent+cmd).setStyle("display","block");

					// Reset Accordionhöhe
					var tmp_size = $(pointer.options.searchIdent+cmd).getCoordinates();
					var tmp_fx   = new Fx.Style('accordion_'+cmd, 'height', {onComplete: function(){
						$(pointer.options.loadStatusIdent+cmd).setStyle("display","none");
						$(pointer.options.searchIdent+cmd).setStyle("visibility","visible");
					},duration: 400});
					tmp_fx.start(tmp_size.height+pointer.options.resetHeightOffset);
				}
			}).request();
		}
	});
	contentSearch.implement(new Chain);

	/*window.addEvent('load', function(){
		if( self.parent.frames.length!=0 )
			self.parent.location = self.location;
	});*/
	window.addEvent('domready', SITE.start);
