window.addEvent('domready', function(){
	
	$$('a').each(function(link){
		link.addEvent('focus', function(){
			link.blur();
		});
	});
	
	$$('.dealer-import-resultset').each(function(resultset){
		resultset.getElements('fieldset').each(function(fieldset){
			var legend = fieldset.getFirst('legend');
			var list = fieldset.getFirst('ul');
			var dealers = list.getElements('li');
			if (!legend.hasClass('open')) {
				list.setStyle('display', 'none');
			}
			legend.addEvent('click', function(e){
				var currentStyle = list.getStyle('display');
				list.setStyle('display', currentStyle == 'block' ? 'none' : 'block');
				legend.toggleClass('open');
			});
			dealers.each(function(dealer){
				var verbose = dealer.getFirst('pre');
				if (!verbose) return;
				if (!dealer.hasClass('open')) {
					verbose.setStyle('display', 'none');
				}
				dealer.addEvent('click', function(e){
					var currentStyle = verbose.getStyle('display');
					verbose.setStyle('display', currentStyle == 'block' ? 'none' : 'block');
					dealer.toggleClass('open');
				});
			});
		});
	});
	
});

var S2 = new Class({
	
	getWindowSize: function(){
		var width = 0, height = 0;
		if( typeof( window.innerWidth ) == 'number' ) {
			//Non-IE
			width = window.innerWidth;
			height = window.innerHeight;
		} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
			//IE 6+ in 'standards compliant mode'
			width = document.documentElement.clientWidth;
			height = document.documentElement.clientHeight;
		} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
			//IE 4 compatible
			width = document.body.clientWidth;
			height = document.body.clientHeight;
		}
		return {
			'x': width,
			'y': height
		};
	},
	
	getWindowScroll: function() {
		var scrollX = 0, scrollY = 0;
	
		if( typeof( window.pageYOffset ) == 'number' ) {
			//Netscape compliant
			scrollY = window.pageYOffset;
			scrollX = window.pageXOffset;
		} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
			//DOM compliant
			scrollY = document.body.scrollTop;
			scrollX = document.body.scrollLeft;
		} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
			//IE6 standards compliant mode
			scrollY = document.documentElement.scrollTop;
			scrollX = document.documentElement.scrollLeft;
		}
		return {
			'x': scrollX,
			'y': scrollY
		};
	},

	//@source: http://www.alexandre-gomes.com/?p=115
	getScrollBarWidth: function() {
		var inner = document.createElement('p');
		inner.style.width = '100%';
		inner.style.height = '200px';
		
		var outer = document.createElement('div');
		outer.style.position = 'absolute';
		outer.style.top = '0px';
		outer.style.left = '0px';
		outer.style.visibility = 'hidden';
		outer.style.width = '200px';
		outer.style.height = '150px';
		outer.style.overflow = 'hidden';
		outer.appendChild (inner);
		
		document.body.appendChild (outer);
		var w1 = inner.offsetWidth;
		outer.style.overflow = 'scroll';
		var w2 = inner.offsetWidth;
		if (w1 == w2) w2 = outer.clientWidth;
		
		document.body.removeChild (outer);
		
		return (w1 - w2);
	},
	
	//@todo
	windowHasScrollBars: function(){
		var body = document.getElementsByTagName('body')[0];
		var scrollY = body.clientHeight < body.scrollHeight ? true : false;
		var scrollX = body.clientWidth < body.scrollWidth ? true : false;
		alert('Y: '+body.clientHeight+'-'+body.scrollHeight+'          X: '+body.clientWidth+'-'+body.scrollWidth);
		return {
			'x' : scrollX,
			'y' : scrollY
		}
	}
	
});

S2.Widgets = new Class({
	Extends: S2
});

S2.Widgets.Overlay = new Class({
	
	Extends: S2.Widgets,
	
	initialize: function(content, options){
		this.options = options;
		this.content = content;
		this.spawnWrapper();
		this.spawnShade();
		this.spawnContentBox();
		this.maximizeOverlay();
		this.positionOverlay();
		window.addEvent('resize', this.maximizeOverlay.bind(this));
		window.addEvent('scroll', this.positionOverlay.bind(this));
	},
	
	spawnWrapper: function(){
		if(!$('s2-widgets-overlay-wrapper')){
			wrapper = new Element('div', {
				'id' : 's2-widgets-overlay-wrapper',
				'styles' : {
					'position' : 'absolute',
					'top' : '0',
					'left' : '0',
					'z-index' : '9999',
					'display' : 'none',
					'text-align' : 'center',
					'overflow' : 'hidden'
				}
			});
			wrapper.inject(document.getElementsByTagName('body')[0]);
			wrapperMorph = new Fx.Morph('s2-widgets-overlay-wrapper', this.options);
			return true;
		}
		return false;
	},
	
	positionOverlay: function(){
		//this.windowHasScrollBars();
		wrapper.setStyles({
			'top' : this.getWindowScroll().y,
			'left' : this.getWindowScroll().x - this.getScrollBarWidth()
		});
		/*shade.setStyles({
			'top' : this.getWindowScroll().y,
			'left' : this.getWindowScroll().x
		});*/
	},
	
	maximizeOverlay: function(){
		wrapper.setStyles({
			'height' : this.getWindowSize().y,
			'width' : this.getWindowSize().x
		});
		shade.setStyles({
			'height' : this.getWindowSize().y,
			'width' : this.getWindowSize().x
		});
	},
	
	spawnShade: function(){
		if(!$('s2-widgets-overlay-shade')){
			shade = new Element('div', {
				'id' : 's2-widgets-overlay-shade',
				'styles' : {
					'opacity' : '0',
					'background-color' : '#000000',
					'position' : 'absolute',
					'top' : '0px',
					'left' : '0px'
				},
				'events' : {
					'click' : function(){
						this.fade('out');
					}.bind(this)
				}
			});
			shade.inject(wrapper);
			shadeMorph = new Fx.Morph('s2-widgets-overlay-shade', this.options);
			return true;
		}
		return false;
	},
	
	spawnContentBox: function(){
		if(!$('s2-widgets-overlay-content')){
			contentBox = new Element('div', {
				'id' : 's2-widgets-overlay-content',
				'html' : this.content,
				'styles' : {
					'z-index' : '99999',
					'position' : 'relative'
				}
			}).inject(wrapper, 'bottom');
			return true;
		}
		return false;
	},
	
	userCloseBox: function(e){
		e = new Event(e);
		if(e.code == 27){
			this.fade('out');
			window.removeEvents('keyup', 'userCloseBox');
		}
	},
	
	fade: function(mode){
		switch(mode){
			case 'in':
				wrapperMorph.set({
					'display': 'block'
				});
				shadeMorph.start({
					'opacity' : '0.75'
				});
				window.addEvent('keyup', this.userCloseBox.bind(this));
				break;
			case 'out':
				shadeMorph.start({
					'opacity' : '0'
				}).chain(function(){
					wrapperMorph.set({
						'display': 'none'
					})
				}.bind(this));
				break;
		}
	},
	
	show: function(){
		wrapperMorph.set({
			'display' : 'block',
			'opacity' : '1'
		});
	},
	
	hide: function(){
		wrapperMorph.set({
			'display' : 'none',
			'opacity' : '0'
		});
	},
	
	set: function(what, args){
		setFunc = ('set-'+what).camelCase();
		if(typeof this[setFunc] == 'function') {
			this[setFunc](args);
		}
	},
	
	setContent: function(content){
		this.content = content;
		this.updateContentBox();
	},
	
	updateContentBox: function(){
		contentBox.set('html', this.content);
	}
	
});

S2.Widgets.Overlay.Ajax = new Class({
	
	Extends: S2.Widgets.Overlay,
	
	//Implements: S2.Widgets.Overlay,
	
	initialize: function(url, options){
		//this.parent('', options);
		this.overlay = new S2.Widgets.Overlay;
		this.url = url;
		this.options = options;
		//this.set('content', url);
	},
	
	setContent: function(url){
		var ajax = new Request.HTML({
			url: url,
			onRequest: function(){
				shade.addClass('s2-widgets-overlay-ajax-loading');
			},
			onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript){
				shade.removeClass('s2-widgets-overlay-ajax-loading');
				this.overlay.set('content', responseHTML);
				eval(responseJavaScript);
			}.bind(this),
			onFailure: function(){
				shade.removeClass('s2-widgets-overlay-ajax-loading');
			},
			evalScripts: false
		}).send();
	}
	
});

/*
var S2 = new Object();
S2.Widgets = new Object();
S2.Widgets.Overlay = function(content, options){
	
	var options = options;
	var that = this;
	
	function spawnShade(){
		if(!$('s2-widgets-overlay-shade')){
			shade = new Element('div', {
				'id' : 's2-widgets-overlay-shade',
				'styles' : {
					'opacity' : '0',
					'background-color' : '#000000',
					'position' : 'absolute',
					'top' : '0',
					'left' : '0',
					'height' : '100%',
					'width' : '100%',
					'z-index' : '99999',
					'display' : 'none',
					'text-align' : 'center'
				}
			});
			shade.inject(document.getElementsByTagName('body')[0]);
			shadeMorph = new Fx.Morph('s2-widgets-overlay-shade', options);
		}
		return true;
	}
	
	function removeShade(){
		if($('s2-widgets-overlay-shade')) {
			$('s2-widgets-overlay-shade').destroy();
			return true;
		}
		return false;
	}
	
	function spawnContenBox(){
		contentBox = new Element('div', {
			'id' : 's2-widgets-overlay-content',
			'html' : content
		}).inject(shade, 'top');
	}
	
	this.fade = function(mode){

		switch(mode){
			case 'in':
				shadeMorph.set({
					'display': 'block'
				});
				shadeMorph.start({
					'opacity' : '0.85'
				});
				window.addEvent('keyup', function(e){
					e = new Event(e);
					if(e.code == 27){
						that.fade('out');
					}
				})
				break;
			case 'out':
				shadeMorph.start({
					'opacity' : '0'
				}).chain(function(){
					this.set({
						'display': 'none'
					})
				});
				break;
		}
		
	}
	
	this.show = function(){
		shadeMorph.set({
			'display' : 'block',
			'opacity' : '0.85'
		});
	}
	
	this.hide = function(){
		shadeMorph.set({
			'display' : 'none',
			'opacity' : '0'
		});
	}
	
	this.set = function(what, args){
		switch(what){
			case 'content':
				content = args;
				break;
			default:
				return false;
		}
		return true;
	}
	
	this.initialize = function(){
		spawnShade();
		spawnContenBox();
	}
	
	this.initialize();
	
};
*/


/*
S2.Widgets.Overlay.Ajax.prototype = new S2.Widgets.Overlay('');
S2.Widgets.Overlay.Ajax.prototype.constructor = S2.Widgets.Overlay.Ajax;
S2.Widgets.Overlay.Ajax = function(url, options){
	
	var options = options;
	var that = this;
	
	function request(){
		var resp = new Request({
			url: url,
			onRequest: function(){
				container.addClass('loading');
			},
			onSuccess: function(txt, xml){
				container.removeClass('loading');
				handleMoResponse(xml);
			},
			onFailure: function(){
				container.removeClass('loading');
				injectMessage('Connection error', 'error');
			}
		}).send();
	}
	
	this.initialize = function(){
		alert('asd');
	}
	
	this.initialize();
	
}*/

window.addEvent('domready', function(){
	geoOverlay = new S2.Widgets.Overlay.Ajax('http://projekte.s2/mmk/00_www/siemens_dealerlocator/users/login');
})
