var ZS = new Class({

  initialize : function()
  {
		$$('.no_js').dispose();

		this.add_form_element_classes();
    this.css_colorize_tables();
    this.css_fix_auto_clear();
    this.add_pseudo_classes();

		this.init_overlay_label();
		this.parseLinks();
	},

	init_overlay_label : function( class_name )
	{
		/* Overlaying label-elements*/

		$$('label.overlay-label').each( function( el_label )
		{
			var el_input = $(el_label.getProperty("for"));

			if ( $defined( el_input ) ) {
				if ( "" === el_input.value ) el_label.addClass("apply");
				if ( "" !== el_input.value ) el_label.addClass("hidden");
				el_label.el_input = el_input;
				el_input.el_label = el_label;

				el_label.addEvents({
					'mouseenter': function(event) { this.el_input.addClass("hover"); },
					'mouseleave': function(event) { this.el_input.removeClass("hover"); }
				}); //addEvents

				el_input.addEvents({
					'focus': function(event) { this.el_label.addClass("hidden"); },
					'keydown': function(event) { this.el_label.addClass("hidden"); },
					'blur': function(event) { if ( "" === this.value ) this.el_label.removeClass("hidden"); }
				}); //addEvents

			}; //endif
		}); //each
	},

	parseLinks : function()
	{
		var links = [];
		var parsedURI = this._parseURI();
		var host = parsedURI.scheme+"://"+parsedURI.domain;

		var outlinks = $$('a[href^=http://]').filter(function(link){ return ! link.get('href').match(host.escapeRegExp()); }).addClass('outlink');
		var pdf_files = $$('a[href$=.pdf]').addClass('pdf');
		var downloads = $$('a.pdf');

		links.combine(outlinks);
		links.combine(pdf_files);
		links.combine(downloads);

		links.each(function(link){
			link.removeEvents('click').addEvent('click', function(event) {
				event.stop();
				window.open(this.get('href'));
				return false;
			});
		});
	},

	css_fix_auto_clear : function( class_name )
	{
		if ( true === Browser.Engine.trident ) {
			$$('div.autoclear').each( function( el_floating )
			{
				new Element('div', {'class': "zero"}).inject(el_floating, 'bottom');
				new Element('div', {'class': "clear"}).inject(el_floating, 'bottom');
			}); //each
		}; //endif
	},

	css_colorize_tables : function( class_name )
	{
		if ( false === $defined(class_name) ) class_name = "js_color";

		$$('table.' + class_name).each( function(table)
		{
			var tbody = table.getChildren('tbody')[0];
			if ( false === $defined(tbody) ) tbody = table;

			tbody.getElements('tr').removeClass('equal');
			tbody.getElements('tr:nth-child(2n+1)').addClass('equal');
		});
	},

	add_pseudo_classes : function()
	{
		if ( Browser.Engine.trident ) {
			$$('input.text','textarea', 'li').addEvents({
				'mouseenter': function(event) { this.addClass("hover"); },
				'mouseleave': function(event) { this.removeClass("hover"); }
			}); //addEvents
			$$(':first-child').addClass('fc');
			$$(':last-child').addClass('lc');
		}; // endif
	},

	add_form_element_classes : function()
	{
		$$('input').each( function(el_input) {
			switch ( el_input.getAttribute("type") ) {
				case "reset":
				case "button":
				case "checkbox":
				case "radio":
				case "file":
				case "password":
				case "hidden":
					el_input.addClass(el_input.getAttribute("type"));
					break;
				case "submit":
					el_input.addClass("button");
					break;
				case "text" :
				default :
					el_input.addClass("text");
					break;
			}; //switch
		}); //each
	},

	/* http://forum.mootools.net/viewtopic.php?pid=21481#post-21513 */
	_parseURI : function( uri )
	{
		var bits = (window.location.href||uri).match(/^(?:([^:\/?#.]+):)?(?:\/\/)?(([^:\/?#]*)(?::(\d*))?)((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[\?#]|$)))*\/?)?([^?#\/]*))?(?:\?([^#]*))?(?:#(.*))?/);
		return (bits)
			? bits.associate(['uri', 'scheme', 'authority', 'domain', 'port', 'path', 'directory', 'file', 'query', 'fragment'])
			: null;
	}

});

window.addEvent('domready', function() { ZS = new ZS() } );