// Console
if (typeof console == "undefined") {
    var console = new function(a){
        this.log = function(a){
            //do nothing
        };
    };
};

var P_BOX = false;
function openPlayerBox(flvSrc, headlineSrc, el){
    // P_BOX wird domready erzeugt
    if(P_BOX){
        P_BOX.openPlayer(flvSrc, headlineSrc, el);
    }
}

/**
 * Deckt kompletten Content mit einem transparenten div
 * 
 */
var Disable = new Class({
    disable: function(){
        if(!this.disableDiv){
            this.disableDiv = new Element('div',{
                'id': 'disableDiv'
            });
            $(document.body).adopt(this.disableDiv);
        };
        var size = window.getScrollSize();
        this.disableDiv.set('styles',{
            'width' : size.x,
            'height' : size.y,
            'display' : 'block'
        });
    },
    enable: function(){
        this.disableDiv.set('styles',{
            'display' : 'none'
        });
        this.isDisabled = false;
    },
    
    //liefert objekt mit Koordinaten, um im Sichtbereich zu zentrieren
    getCenter: function(element){
        var scroll = document.getScroll(),
        documentSize = document.getSize(),
        elementSize = element.getSize(),
        offset,left,top;
        if (elementSize.x < documentSize.x) {
            offset = Math.round((documentSize.x - elementSize.x) / 2);
            left = scroll.x + offset + 'px';
        } else {
            left= scroll.x + 'px';
        }
        if (elementSize.y < documentSize.y) {
            offset = Math.round((documentSize.y - elementSize.y) / 2);
            top = scroll.y + offset + 'px';
        } else {
            top = scroll.y + 'px';
        }
        return {
            x: left,
            y: top
        };
    }
});

var ModalBox = new Class({
	Extends: Disable,
	Implements: Options,
	options:{
		 
	},
	initialize: function(elements, options){
		this.setOptions(options);
		elements.each(function(element){
			element.addEvent('click', function(){
				this.openBox(window.location.href, this.options.headlinePath, element);
			}.bind(this))
			element.style.display='block';
		},this)
	},
	closeBox: function(){
		this.hideBox();
		this.enable();
	},
	hideBox: function(){
		this.lightBox.style.display='none';
		this.innerContent.empty();
		this.boxHeadline.empty();
		if (this.iframe) {
			this.iframe.set({
				'styles': {
					'display': 'none'
				}
			});
		}
	},
	center: function () {
		this.lightBox.style.display = 'block';
		var center = this.getCenter(this.lightBox);
		this.lightBox.set({
			'styles' : {
				'top' : center.y,
				'left' : center.x
			}
		});
		if(this.iframe){
			this.iframe.set({
				'styles' : {
					'top' : center.y,
					'left' : center.x,
					'display': 'block'
				}
			});
		}
	},
	openBox: function(urlPath, headlinePath, el){
		if (!$(el).hasClass('disabled')) {
			this.disable();
			if (!this.lightBox) {
				this.createLightBox();
			};
			this.insertHeadline(headlinePath);
			this.insertContent(urlPath);
			this.center();
			if(!this.drag){
				var handle = new Element('div',{'class': 'handle'}).inject(this.lightBox, 'top');
				this.drag = new Drag(this.lightBox,{'handle': handle});
			}
		}
	},
	createLightBox: function(){
		this.isIE6 = (Browser.Engine.trident && Browser.Engine.version < 5);
		this.boxHeadline = new Element('h3');
		this.boxClose = new Element('span',{
			'id': 'boxClose',
			'events':{
				'click': function(){
					this.closeBox()
				}.bind(this)
			}
		});
		this.innerContent= new Element('div',{
			'id': 'lightBoxContent',
			'class' : this.options.innerContentClass || ''
		});
		this.lightBox = new Element('div',{
			'id': 'lightBoxOuter',
			'class' : this.options.outerBoxClass || ''
		});
		this.lightBox.adopt(this.boxHeadline);
		this.lightBox.adopt(this.boxClose);
		this.lightBox.adopt(this.innerContent);
		$(document.body).adopt(this.lightBox);
		if (this.isIE6) {
			this.iframe = new Element('iframe', {
				'id': 'hideForIE',
				'styles': { left: '-1000px', position: 'absolute', top: '-1000px', zIndex: 105}
			}).injectInside($(document.body));
			this.iframe.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=1)';
		}
	},
	insertHeadline: function(src){
		if(!this.isIE6){
			this.boxHeadline.style.backgroundImage='url('+src+')';
		}else{
			this.boxHeadline.style.background='none';
			this.boxHeadline.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+src+"', sizingMethod='scale')";
		}
	},
	insertContent: function(){
		//
	}
});



var PlayerBox = new Class({
    Extends: ModalBox,
    Implements: Options,
    options:{
		innerContentClass: 'playerContent',
		outerBoxClass: 'playerBox',
        minVersion: 8
    },
    initialize: function(elements, pathToPlayer, options){
        this.setOptions(options);
        this.playerPath = pathToPlayer;
		this.openPlayer = this.openBox;
        if (Browser.Plugins.Flash.version >= this.options.minVersion) {
            elements.each(function(el){
                el.store('movieTitle', el.title);
                el.erase('title');
                el.removeClass('disabled');
            }, this)
        }else if(this.options.noFlashTxt){
            var c = $$('.missingFlashNotice');
            c.each(function(cont){
                cont.removeClass('hide');
                cont.set('html', this.options.noFlashTxt);
            },this);
        }
    },
	insertContent: function(moviePath){
        this.player = new Swiff(this.playerPath,{
            id: 'flvPlayer',
            width: 482,
            height: 394,
            container: this.innerContent,
            params: {
                wMode: 'opaque'
            },
            vars: {
                file: moviePath,
                volume: '60'
            }
        });        
    }
});

var TellerBox = new Class({
	Extends: ModalBox,
	Implements: Options,
	options:{
		innerContentClass: 'tellerContent',
		outerBoxClass: 'tellerBox'
	},
	initialize: function(elements, options){
		this.setOptions(options);
		this.parent(elements, this.options);
	},
	insertHeadline: function(src){
		var img= new Element('img',{
			alt: '',
			src: src
		}).inject(this.boxHeadline);
	},
	insertContent: function(urlPath){
		this.isIE6 = (Browser.Engine.trident && Browser.Engine.version < 5);
		this.innerContent.set('html', 
			'<form id="tellerForm" method="post" action="/owx_erweiterungen/tell_a_friend/">' +
			'<fieldset>' +
			'<input type="hidden" name="url" value="' + urlPath + '" />' +
			'<input type="hidden" name="gesendet" value="1" />' + 
			'<p>' +
			'Um diese Seite weiterzuempfehlen, füllen Sie bitte die folgenden ' +
			'Felder aus. Der von Ihnen eingetragene Empfänger erhält dann eine ' +
			'E-Mail mit einem Link zu dieser Seite.' +
			'<div style="font-size:80%;">Zum Datenschutz: Ihre E-Mail-Adresse und die E-Mail-Adresse des ' +
   			'Empfängers werden ausschließlich dazu verwendet, den Adressaten über den ' +
   			'Absender zu informieren.</div>' +
			'<div class="inner">' +
			'<p><label>Name des Senders:<\/label><input type="text" name="vonName" id="vonName" value="" class="required standard" /><\/p>' +
			'<p><label>Sender-E-Mail:<\/label><input type="text" name="vonEmail" id="vonEmail" value="" class="required email standard" /><\/p>' +
			'<p><label>Name des Empfängers:<\/label><input type="text" name="anName" id="anName" value="" class="required standard" /><\/p>' +
			'<p><label>Empfänger-E-Mail:<\/label><input type="text" name="anEmail" id="anEmail" value="" class="required email standard" /><\/p>' +
			'<\/div><\/fieldset>' +
			'<p><input type="submit" value="absenden" class="send" /><\/p>' +
			'<\/form>'
			);		
		// validieren...
		var myFormValidation = new Validate('tellerForm',{});
		myFormValidation.boxObject = this;
		this.form = $('tellerForm');		
		this.fieldset = this.form.getElement('fieldset');
		this.boxHeadline.inject(this.fieldset, 'top')
		this.submit = this.form.getElement('input[type=submit]');
		this.submit.addEvent('click', this.hideMsgBox)
		this.senderName = $('vonName');
		this.senderEmail = $('vonEmail');
		this.empfaengerName = $('anName');
		this.empfaengerEmail = $('anEmail');
		this.getSenderInfo();
		this.form.set('send', {
			onRequest: function(){
				 this.saveSenderInfo();
				 this.setLoading();
			}.bind(this),
			onFailure: function(){
				console.log('fehler, ey');
				this.showError();
				this.removeLoading();
			}.bind(this),
			onSuccess: function(response){
				if(response == 'OK'){
					this.showSuccess()
				}else{
					this.showError();
				}
				this.removeLoading();
			}.bind(this)
		});
	},
	showError: function(){
		if(!this.msgBox){
			this.createMsgBox()
		}
		this.msgBox.set({
			'class' : 'error msgBox',
			'html': 'Es ist ein Fehler aufgetreten.'
		}).highlight('#e00')
	},
	showSuccess: function(){
		if(!this.msgBox){
			this.createMsgBox()
		}
		this.msgBox.set({
			'class' : 'success msgBox',
			'html': 'Ihre Nachricht wurde erfolgreich an ' + this.empfaengerName.value + ' ('+this.empfaengerEmail.value + ') ' + 'versendet.'
		}).highlight('#8FFF49');
		$('anName').value = $('anEmail').value = '';
	},
	setLoading: function (){
		this.fieldset.set('styles',{
			'opacity': .7
		});
		this.submit.set('styles',{
			'opacity': .7
		});
		this.submit.disabled = true;
		this.fieldset.getElements('input').set('readonly', true)
	},
	removeLoading: function(){
		this.fieldset.set('styles',{
			'opacity': 1
		});
		this.submit.set('styles',{
			'opacity': 1
		});
		this.submit.disabled = false;
		this.fieldset.getElements('input').set('readonly', false)
	},
	saveSenderInfo: function(){
		if(!this.senderCookie){
			this.senderCookie = new Hash.Cookie('tellafriendsender', {duration: 360});
			this.senderCookie.extend({
			    'senderName': this.senderName.value,
			    'senderEmail': this.senderEmail.value
			});
		}
		this.senderCookie.set('senderName', this.senderName.value);
		this.senderCookie.set('senderEmail', this.senderEmail.value);
		this.senderCookie.save();
	},
	getSenderInfo: function(){		
		this.senderCookie = new Hash.Cookie('tellafriendsender', {duration: 360});
		this.senderCookie.load()
		var sender = this.senderCookie.get('senderName'),
			senderMail = this.senderCookie.get('senderEmail');
		if(sender && senderMail){
			this.senderName.value = sender;
			this.senderEmail.value = senderMail;
		}
	},
	createMsgBox: function(){
		this.msgBox = new Element('p', {
		}).inject(this.fieldset.getElement('.inner'), 'before');
	},
	hideMsgBox: function(){
		if (this.msgBox) {
			this.msgBox.addClass('hide');
		}
	}
});


// Validate Skript leicht angepasst
// * deutsche Fehlermeldungen
// * weniger Spezialfelder, weil nur Name und Email gebraucht
// * inkompatible Methodenaufrufe von mootools 1.1 auf mootools 1.2 geaendert (setText, remove)
// * die Logik der Hinweise leicht geaendert

/**************************************************************

	Script		: Validate
	URL			: http://www.phatfusion.net/validate/
	Version		: 2.1
	Authors		: Samuel Birch
	Desc		: Form validation
	Licence		: Open Source MIT Licence

**************************************************************/

var Validate = new Class({
	Implements: Options,
	options: {
			validateOnBlur: true,
			errorClass: 'error',
			errorMsgClass: 'errorMessage',
			dateFormat: 'dd/MM/yy',
			onFail: $empty,
			onSuccess: false,
			showErrorsInline: true,
			label: 'Bitte warten...'
	},

	initialize: function(form, options){
		this.setOptions(options);
		
		this.form = $(form);
		this.elements = this.form.getElements('.required');
		
		this.list = [];
		
		this.elements.each(function(el,i){
			if(this.options.validateOnBlur){
				el.addEvent('blur', this.validate.bind(this, el));
			}
		}.bind(this));
		
		this.form.addEvent('submit', function(e){
			var event = new Event(e).stop();
			var doSubmit = true;
			this.elements.each(function(el,i){
				if(! this.validate(el)){
					doSubmit = false
					this.list.include(el);
				}else{
					this.list.erase(el);
				}
			}.bind(this));
			
			if(doSubmit){
				if(this.options.onSuccess){
					this.options.onSuccess(this.form);
				}else{
					//this.form.getElement('input[type=submit]').setProperty('value',this.options.label);
					this.form.send();
				}
			}else{
				this.options.onFail(this.getList());
			}
		}.bind(this));
		
	},
	
	getList: function(){
		var list = new Element('ul');
		this.list.each(function(el,i){
			if(el.title != ''){
			var li = new Element('li').injectInside(list);
			new Element('label').setProperty('for', el.id).set('text',el.title).injectInside(li);
			}
		});
		return list;
	},
	
	validate: function(el){
		var valid = true;
		this.clearMsg(el);
		
		if(this.boxObject){
			this.boxObject.hideMsgBox();
		}
		
		switch(el.type){
			case 'text':
			case 'textarea':
			case 'select-one':
				//if(el.value != ''){
					if(el.hasClass('email')){
						var regEmail = /^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/;
						if(el.value.toUpperCase().match(regEmail)){
							valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'Bitte geben Sie eine gültige E-Mail-Adresse ein');
						}
					} else if(el.hasClass('number')){
						var regNum = /[-+]?[0-9]*\.?[0-9]+/;
						if(el.value.match(regNum)){
							valid = true;
						}else{
							valid = false;
							this.setMsg(el, 'Bitte Zahl eingeben');
						}
					} else if(el.value == '') {
						valid = false;
						this.setMsg(el, 'Bitte geben Sie einen Namen ein');
					}
					
				//}else{
				//	valid = false;
				//	this.setMsg(el, 'Bitte Namen eingeben');
				//}
				break;
		}
		return valid;
	},
	
	setMsg: function(el, msg){
		if(msg == undefined){
			msg = el.title;
		}
		if(this.options.showErrorsInline){
			if(el.error == undefined){
				el.error = new Element('span').addClass(this.options.errorMsgClass).set('text',msg).injectAfter(el);
			}else{
				el.error.set('text',msg);
			}
			el.addClass(this.options.errorClass);
			el.getPrevious('label').addClass('error');
		}
	},
	
	clearMsg: function(el){
		el.removeClass(this.options.errorClass);
		el.getPrevious('label').removeClass('error');
		if(el.error != undefined){
			el.error.dispose();
			el.error = undefined;
		}
	}	
});

/*************************************************************/

var SelectStatus = new Class({
    Implements: Options,
    initialize: function(elements, options){
        this.setOptions(options);
        this.className=this.options.className;
        elements.each(function(item){
            item.addEvent('blur', function(e){
                 this.checkSelectStatus($(new Event(e).target));
            }.bind(this));
            item.addEvent('mousedown', function(){
                 item.removeClass(this.className);
            }.bind(this));
            this.checkSelectStatus(item);
       },this)
    },
    checkSelectStatus: function(el){
        if(el.selectedIndex == this.options.index){
            el.addClass(this.className);
        }
    }
});