

var user_api = new Class({

    initialize: function(api_url){
	    this.api_url 		= api_url;
	    this.nextCount		= new Array();
	},
	
	getHtmlContent: function(replace_id, action){
		
		var loaderRequest = new Request.HTML({
			url: this.api_url,
			evalResponse: true,
			
			// evalScripts: true,
			update: (replace_id),
		
			onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
				// $(replace_id).set('load', {evalScripts: true});
				// $(replace_id).adopt(responseTree);
				$exec(responseJavaScript);
			},

			onFailure: function() {
				$(replace_id).set('html', '<div class="error">Es trat ein Fehler auf.</div>');
			}

		});

		loaderRequest.post({'action' : action});
		loaderRequest.send();
    },
    
    submitForm: function(form_id, replace_id) {
    	this.replace_id = replace_id;
    	
    	$(form_id).set('send', {onComplete: function(response) { 
			$(replace_id).set('html', response);
		}});
    	
    	$(form_id).send();
    },
    
    
    initInject:function(injectInto_id, count) {
    	this.nextCount[injectInto_id] = count;
    },

    injectElement:function(injectInto_id, action) {
    	
    	this.nextCount[injectInto_id]++;
    	
    	var nextCount = this.nextCount[injectInto_id];
    	
		var loaderRequest = new Request.HTML({
			url: this.api_url,
			// evalResponse: true,
			
			onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {

				var newElementId 	= 'myInjectElement' + nextCount;
				var injectElement 	= new Element('div', {'id' : newElementId});
				
				$(injectInto_id).adopt(injectElement);
				var newHtml = injectElement.get('html') + responseHTML;
				$(newElementId).set('html', newHtml);

				myMooEdit[nextCount] = new MooEditable(
					'content_imagecaption_'+nextCount, { 
						actions : mooEditToolbarOptions, 
						rootElement : false 
					}
				);
				
				sm.attach();
			},

			onFailure: function() {
				$(replace_id).set('html', '<div class="error">Es trat ein Fehler auf.</div>');
			}

		});

		loaderRequest.post({'action' : action, 'count' : this.nextCount[injectInto_id]});
		loaderRequest.send();
		
    }
 
 });



var ad_slider = new Class({
	
	Extends: user_api,
	
	setCurrent: function(uid) {
		this.current_record = uid;
	},
	
	
	// Public
	initSlider: function(current_record_uid) {
		this.current_record	= current_record_uid;
		this.idArray		= new Array();
		this.setIdArray();

		this.teaserContent		= Array();
		this.isDoubleSlider		= false;
		this.addSingleElementId	= '';
		this.inMotion			= false;
		this.scrollMotion		= false;
		this.firstClick			= false;
		this.currentItem		= 1;
		
		this.top_position		= $('slider').getPosition().y;
		this.currentYPos		= 0;
		
		this.menu				= $('teaserListInner');
		this.menu_top			= 0;
		this.menu_minTop		= 0 - (this.menu.getSize().y - $('slider').getSize().y);
		this.myMenuFx	 		= new Fx.Tween(this.menu, {duration: 'short'});
		this.menuScrollHeight	= $('sliderMenuItem'+this.idArray[0]).getSize().y;
		this.fadeMenuWidth		= 350;
		this.fadeFinalLeft		= 0;		
		
		this.overlayDiv			= $('activeMenuItem');
		this.myOverlayFx 		= new Fx.Tween(this.overlayDiv, {duration: 'short'});
		
		this.verticalSlider		= $('vertical_slider');
		this.myVSFx 			= new Fx.Tween(this.verticalSlider, {duration: 500});
		
		var startFxElement		= $('bigImage');
		var startFx 			= new Fx.Tween(startFxElement, {duration: 500});
		
		this.mouseIsOnBigImage	= false;
		$('bigImage').addEvents({
		    mouseover: function(){
		    	mySlider.mousePosition(true);
		    },
		    mouseout: function(){
		    	mySlider.mousePosition(false);
		    }
		});

		
	},
	
	mousePosition: function(movedIn) {
		this.mouseIsOnBigImage = movedIn;
	},
	
	
	switchToCurrent: function(uid) {
		if(this.inMotion == true) return false;
		this.inMotion	= true;
		this.fadeMenuOut(uid);
		this.scrollToTeaserElement(uid);
	},
	
	fadeMenuOut: function(uid) {
		this.fadeProductImage('out');
		this.myOverlayFx.start('left', this.fadeFinalLeft, this.fadeMenuWidth);
		window.setTimeout('mySlider.switchToNextElement('+uid+')', 500);
	},
	
	scrollMenuUp: function() {
		if(this.scrollMotion == true) return false;
		this.scrollMotion = true;
		this.scrollMenuBlock(this.menuScrollHeight);
		var nextId = this.getId(-1);
		if(nextId == false) return this.removeLock();
		this.switchToCurrent(nextId);
	},
	
	scrollMenuDown: function() {
		return false;
		if(this.scrollMotion == true) return false;
		this.scrollMotion = true;
		this.scrollMenuBlock(-this.menuScrollHeight);
		var nextId = this.getId(+1);
		if(nextId == false) {
			this.removeLock();
			return false;
		}
		this.switchToCurrent(nextId);
	},

	registerTeaser: function(uid, teaser) {
		this.teaserContent[uid] = teaser;
	},
	
	writeTeaser: function() {
	},
	
	startAnimation: function() {
		if(this.firstClick == true) return false;

		if(this.mouseIsOnBigImage == true) {
			window.setTimeout('mySlider.startAnimation();', 1000);
			return false;
		}
		
		if(this.current_record==0) {
			this.switchToCurrent(this.idArray[0]);
		} else {
			
			if(this.currentItem < 4 && this.idArray.length >= 4) {
				this.switchToCurrent(this.idArray[this.currentItem]);
			} else {
				var res = this.scrollMenuDown();
				if(res == false) {
					this.scrollMenuBlock(-this.menu_minTop);
					this.switchToCurrent(this.idArray[0]);
					this.currentItem = 0;
				}
			}
			this.currentItem++;
		}
		window.setTimeout('mySlider.startAnimation();', 6000);
	},
	
	// Private
	getId: function(direction) {
		for (var i = 0; i < this.idArray.length; ++i) {
			if((i + direction) >= (this.idArray.length)) return false;
			if(this.idArray[i] == this.current_record) {
				if((i + direction) < 0) return false;
				return this.idArray[i + direction];
			}
		}
		return false;
	},
	
	setToIdArray: function(elementId) {
		var i = this.idArray.length;
		this.idArray[i] = elementId;
	},
	
	setIdArray: function() {
		$$('#teaserList div.teaserWrapper').each(function(element) {
			var elementId = element.get('id').replace('sliderMenuItem', '');
			mySlider.setToIdArray(elementId);
		});
	},
	
	scrollToTeaserElement: function(uid) {
		var nextVSYPos	= this.currentYPos - ($('singleElement'+uid+this.addSingleElementId).getPosition().y - this.top_position);
		
		if(this.currentYPos < nextVSYPos) {
			if(this.isDoubleSlider == false) {
				var newHtml 	= '';
				var newBox 		= '<div style="height:'+ (-this.currentYPos)+'px;"></div>';
				
				$$('#vertical_slider .singleElement').each(function(el){
					var id=el.get('id');
					if(id != 'singleElement0') {
						newHtml += '<div id="'+id+'_dub" class="singleElement">'+el.get('html')+'</div>';
					}
				});
				
				this.currentYPos = this.currentYPos + $('singleElement0').getSize().y;
				$('singleElement0').destroy();
				$('vertical_slider').setStyle('top', this.currentYPos);
				
				newHtml = '<div id="verticalSliderCopy">'+newHtml+'</div>';
				$('vertical_slider').set('html', '<div id="vSlideContent">'+$('vertical_slider').get('html')+'</div>'+newHtml);
				
				this.isDoubleSlider = true;
				this.addSingleElementId = '_dub';
			} else {
				if(this.addSingleElementId == '_dub') {
					this.addSingleElementId = '';
					$('vSlideContent').inject($('verticalSliderCopy'), 'after');
					this.currentYPos		= this.currentYPos + $('verticalSliderCopy').getSize().y;
					$('vertical_slider').setStyle('top', this.currentYPos);
					
				} else {
					this.addSingleElementId = '_dub';
					$('verticalSliderCopy').inject($('vSlideContent'), 'after');
					this.currentYPos		= this.currentYPos + $('vSlideContent').getSize().y;
					$('vertical_slider').setStyle('top', this.currentYPos);
				}
			}
			nextVSYPos	= this.currentYPos - ($('singleElement'+uid+this.addSingleElementId).getPosition().y - this.top_position);
		}
		this.myVSFx.start('top', this.currentYPos, nextVSYPos);
		this.currentYPos	= nextVSYPos;
	},
	
	scrollMenuBlock: function(value) {
		if((this.menu_top <= this.menu_minTop && value < 0) || (this.menu_top >= 0 && value > 0)) return false;
		var newTop = this.menu_top + value;
		this.myMenuFx.start('top', this.menu_top, newTop);
		this.menu_top = newTop;
	},

	setElementToMenuOverlay: function(uid) {
		$('activeMenuItem').set('html', this.teaserContent[uid]);
		$('activeMenuContent').set('html', $$('#activeMenuItem #fixme').get('html'));
		$$('#activeMenuItem #fixme').set('html', '');
		$$('#activeMenuContent .teaserImage img')[0].set('opacity', 0);
	},
	
	switchToNextElement: function(uid) {
		
		if(uid == this.idArray[0]) {
			$$('#bigImage .topleft').setStyle('display', 'none');
		} else {
			$$('#bigImage .topleft').setStyle('display', 'block');
		}
		
		if(uid == this.idArray[this.idArray.length-1]) {
			$$('#bigImage .bottomleft').setStyle('display', 'none');
		} else {
			$$('#bigImage .bottomleft').setStyle('display', 'block');
		}
		
		this.nextYPos 	= $('sliderMenuItem'+uid).getPosition().y - this.top_position;
		this.setElementToMenuOverlay(uid);
		
		this.overlayDiv.setStyle('top', this.nextYPos);
		$('activeMenuContent').setStyle('top', this.nextYPos);
		
		// window.setTimeout("mySlider.fadeProductImage('in');", 100);
		this.fadeProductImage('in');
		
		this.myOverlayFx.start('left', this.fadeMenuWidth, this.fadeFinalLeft);
		this.current_record	= uid;
		
		window.setTimeout('mySlider.removeLock()', 700);
	},
	
	
	fadeProductImage: function(inOrOut) {
		
		var activeProductImage	= $$('#activeMenuContent .teaserImage img')[0];
		if(activeProductImage == null) return false;
		
		if(inOrOut == 'in') {
			var fxImage 			= new Fx.Tween(activeProductImage, {duration: 400});
			fxImage.start('opacity', 0, 1);
		} else {
			var fxImage 			= new Fx.Tween(activeProductImage, {duration: 100});
			fxImage.start('opacity', 1, 0);
		}
		
	},
	
	removeLock: function() {
		this.inMotion 		= false;
		this.scrollMotion	= false;
	},
	
	setFirstClick: function() {
		this.firstClick 	= true;
	}
	
});


var ad_searchForm = new Class({
	
	// Extends: user_api,
	
	setCurrent: function(uid) {
		this.current_record = uid;
	},
	
	
	// Public
	initSearchForm: function() {
		this.formContainer		= $$('#fixSearchContainer div.searchFormContainer');
		this.formMenu			= $$('#reiter_navi_ul li');
		
		this.formMenu[1].setStyle('display', 'none');
		
		this.formContainer[0].grab($('pharmacySearchForm'));
		this.formContainer[1].grab($('mapSearchContainer'));
		this.formContainer[2].grab($('apotheke_liste'));
		
	},
	
	setActiveElement:function(element) {
		element -= 1;
		
		for (var i = 0; i < this.formMenu.length; ++i) {
			if(element == i) {
				this.formContainer[i].setStyle('display', 'block');
				this.formMenu[i].addClass('active');
				this.formMenu[i].setStyle('display', 'block');
			} else {
				this.formContainer[i].setStyle('display', 'none');
				this.formMenu[i].removeClass('active');
			}
		}
	}
});



var elementActivator = new Class({
	
	// Public
	init: function(elementChooser, updateElement) {
		this.elementContainer	= $$(elementChooser);
		this.updateElement		= $(updateElement);
	},
	
	setActiveElement:function(element) {
		element -= 1;
		
		for (var i = 0; i < this.elementContainer.length; ++i) {
			if(element == i) {
				this.elementContainer[i].addClass('active');
			} else {
				this.elementContainer[i].removeClass('active');
			}
		}
		
		this.updateElement.value = element + 1;
	}
});


var websiteBuilder = new Class({
	
	Extends: user_api,
	
	// Public
	initWebsiteBuilder: function() {
	},
	
	deletePage: function(uid, replace_id) {
		var deleteConfirmation = confirm("Wollen Sie den Menüpunkt wirklich löschen?");
		
		if(deleteConfirmation == false) return false;
		
		var loaderRequest = new Request.HTML({
			url: this.api_url,
			evalResponse: false,
			update: (replace_id)
		});

		loaderRequest.post({'action' : 'deletePage', 'uid' : uid});
		loaderRequest.send();
		$('editContentContainer').set('html', '<div style="border:1px solid #DDDDDD;padding:10px;" id="delMessage">Der Menüpunkt wurde gelöscht!</div>');
		window.setTimeout("$('delMessage').destroy();", 3000);
	},
	
	editPage: function(uid, replace_id) {
		var loaderRequest = new Request.HTML({
			url: this.api_url,
			evalResponse: false,
			update: (replace_id)
		});

		loaderRequest.post({'action' : 'editPageTitle', 'uid' : uid});
		loaderRequest.send();
	},
	
	loadContent: function(pid, replace_id) {
		var loaderRequest = new Request.HTML({
			url: this.api_url,
			evalResponse: false,
			update: (replace_id),
			onSuccess: function() {
				makeSortableContent();
			}
		});

		loaderRequest.post({'action' : 'getContentOnPid', 'pid' : pid});
		loaderRequest.send();
		
		var websiteLink = $('viewWebsiteLink').get('title');
		$('viewWebsiteLink').set('href', websiteLink += '/?id='+pid);
	},
	
	deleteContent: function(uid, replace_id) {
		var deleteConfirmation = confirm("Bitte bestätigen Sie das Löschen des Inhaltselements.");
		
		if(deleteConfirmation == false) return false;
		
		var loaderRequest = new Request.HTML({
			url: this.api_url,
			evalResponse: false,
			update: (replace_id)
		});

		loaderRequest.post({'action' : 'deleteContent', 'uid' : uid});
		loaderRequest.send();
	}
	
});



//JavaScript Document
var apx_accordion = new Class ({
	
    initialize: function(){
		this.status = {
			'true': 'open',
			'false': 'close'
		};
		
		this.slider 		= [];
		this.sliderCookies	= [];
	},
	
	handleCookie : function(sliderElement, clickElement) {
		this.sliderCookies[sliderElement] = Cookie.read(sliderElement);
		if(this.sliderCookies[sliderElement] == 'close') {  
			this.slider[sliderElement].hide();
		} else {
			$(clickElement).addClass('active');
		}
	},
	
	addSlider : function(sliderElement, clickElement) {
		this.slider[sliderElement] = new Fx.Slide(sliderElement, {duration: 700, transition: Fx.Transitions.Sine.easeOut});

		$(clickElement).addEvent('click', function(e){
			e.stop();
			accordion.slider[sliderElement].toggle();
		});
		
		this.slider[sliderElement].addEvent('complete', function() {
			var myCookie = Cookie.write(sliderElement, status[accordion.slider[sliderElement].open], {duration: 500});
			if(accordion.status[accordion.slider[sliderElement].open] == 'open') {
				$(clickElement).addClass('active');
			} else {
				$(clickElement).removeClass('active');
			}
		});
		
		this.handleCookie(sliderElement, clickElement);
	}
	
});

var accordion	= new apx_accordion();

function startAccordion() {
	
	var myElements = $$('div.attribute');
	myElements.each(function(item){
		var header 	= item.getElement('div.attributeHeader').get('id');
		var content	= item.getElement('div.attributeText').get('id');
		accordion.addSlider(content, header);
		accordion.slider[content].hide();
		$(header).removeClass('active');
	});
};	

function startAccordionSearchMap() {
	
	var myElements2 = $$('.areaElement');
	myElements2.each(function(item){
		var header 	= item.getElement('.areaLink').get('id');
		var content	= item.getElement('.results').get('id');
		accordion.addSlider(content, header);
		accordion.slider[content].hide();
		$(header).removeClass('active');
	});
};



var apothecary_search = new Class({

    initialize: function(defaultText){
	    this.api_url 		= '/rest/rp_search_result_sf.php';
	    this.nextCount		= new Array();
	    this.staticHeight	= 0;
	    this.defaultText	= defaultText; 
	    this.elementContent = '';
	},
	
	search: function(){
		var replace_id		= 'dynamicContent';
		var static_id		= 'areaListWrapper';
		
		var place			= $('adFormRadialSearch').get('value');
		var radius			= $('adFormRadialSearchRadius').get('value');
		var static_y		= $(static_id).getSize().y;
		
		if(place == '' || place == this.defaultText) {
			if(static_y < 1 && this.staticHeight) {
				this.reset();
			}
			return true;
		}
		
		if(static_y > 0) {
			this.staticHeight = static_y;
			$('showAllApothecary').setStyle('display', 'block');
		}
		
		var loaderRequest = new Request({
			url: this.api_url,
			onSuccess: function(responseText, responseXML) {
				var pipePos = responseText.indexOf("|");
				if(pipePos < 1) {
					if(responseText != '') {
						search_api.showBlingBlingError(responseText);
					} else {
						search_api.showBlingBlingError('Es trat ein Fehler auf.');
					}
					return false;
				}
				
				responseArray	= responseText.split('|');
				setZoomLevelByKmRadius(radius);
				setCenterMarkerPoint(responseArray[0], responseArray[1]);
				
				$(replace_id).set('html', responseArray[2]);
				search_api.showDynamicContent();
				
			},
			onFailure: function() {
				search_api.showBlingBlingError('Es trat ein Fehler auf.');
			}

		});

		loaderRequest.post({'theme':'rp', 'rp_search_ort' : place,'rp_search_radius': radius});
		loaderRequest.send();
    },
    
    
    showBlingBlingError: function(message) {
    	$('dynamicContent').set('html', '<div id="jsErrorPosY"><div id="jsErrorPosX"><div id="jsErrorMessage"><span class="topleft"></span><span class="topright"></span><span class="bottomleft"></span><span class="bottomright"></span>' + message + '</div></div></div>');
    	this.showDynamicContent();
    	window.setTimeout('search_api.reset();', 5000);
    },

    
    showDynamicContent: function() {
    	
		var static_y		= $('areaListWrapper').getSize().y;
		if(static_y > 1) {
			var myFx1 			= new Fx.Tween($('areaListWrapper'),  {duration: 500});
			this.staticHeight	= static_y;
			$('areaListWrapper').setStyle('overflow', 'hidden');
			myFx1.start('height', static_y, 0);
		}
		
		var myFx2 			= new Fx.Tween($('dynamicContentWrapper'),  {duration: 500});
		myFx2.start('height', $('dynamicContentWrapper').getSize().y, $('dynamicContent').getSize().y);
		
    },
    
	reset: function () {
		
		$('adFormRadialSearch').set('value', this.defaultText);
		
		var myFx1 			= new Fx.Tween($('areaListWrapper'),  {duration: 500});
		myFx1.start('height', 0, this.staticHeight);
		window.setTimeout("$('areaListWrapper').setStyle('height', 'auto');", 550);
		
		var myFx2 			= new Fx.Tween($('dynamicContentWrapper'),  {duration: 500});
		myFx2.start('height', $('dynamicContentWrapper').getSize().y, 0);
		
		$('dynamicContent').set('html', '');
		$('showAllApothecary').setStyle('display', 'none');
		setDefaultMapCenter(true);
	},
	
	makeMySelectBoxBlingBling: function(selectValue) {
		
		$('myBlingBlingSelect').setStyle('display','block');
		$$('#adFormRadialSearchRadius option').each(function(el){
			if(el.get('value') == selectValue) {
				$('myBlingBlingSelect').set('text',el.get('text'));
				$('adFormRadialSearchRadius').set('value',el.get('value'));
			};
			
			search_api.elementContent += "<span onclick=\"javascript:$('adFormRadialSearchRadius').set('value', '"+el.get('value')+"');$('myBlingBlingSelect').set('text','"+el.get('text')+"');\">"+el.get('text')+"</span>";
		});
		
		$('myBlingBlingDropDown').set('html', '<div id="blingWrapper">'+this.elementContent+'</div>');
		$('adFormRadialSearchRadius').setStyle('display','none');
		
		$('myBlingBlingSelect').addEvent('click', function(event){
			var mFx		= new Fx.Tween($('myBlingBlingDropDown'),  {duration: 500});
			var mFxY	= $('myBlingBlingDropDown').getSize().y;
			if(mFxY > 0) {
				mFx.start('height', mFxY, 0);
			} else {
				mFx.start('height', 0, $('blingWrapper').getSize().y);
			}
		});
		
		$$('#myBlingBlingDropDown span').addEvent('click', function(event){
			var mFx	= new Fx.Tween($('myBlingBlingDropDown'),  {duration: 500});
			mFx.start('height', $('myBlingBlingDropDown').getSize().y, 0);
		});
		
	}
	
});


var isElAction = [];
function resetAction(id) {
	isElAction[id] = false;
}

function changed(e) {

	if(e.attrName != 'style' || isElAction[$(this).get('id')] == true) return false;
	
	if((e.prevValue == 'display:none' || e.prevValue == 'display: none;' || e.prevValue == 'display:none;') && (e.newValue == '' || e.newValue == 'display:block' || e.newValue == 'display: block;')) {
		isElAction[$(this).get('id')] = true;
		$(this).set('style','display: none;');
		
		//alert('Werte alt/neu:' + e.prevValue + ' / ' + e.newValue);
		
		$(this).reveal();
		window.setTimeout('resetAction(\''+$(this).get('id')+'\')', 1500);
	} else if ((e.prevValue == '' || e.prevValue == 'display:block' || e.prevValue == 'display: block;') && (e.newValue == 'display:none' || e.newValue == 'display: none;')) {
		isElAction[$(this).get('id')] = true;
		$(this).set('style', '');
		$(this).dissolve();
		window.setTimeout('resetAction(\''+$(this).get('id')+'\')', 1500);
	}
}

window.addEvent('domready', function() {
	$$('.keq_unit').each(function(el) {
		var id = $(el).get('id');
		
		$(el).set('reveal', {duration: 'long', transition: 'quad:in:out'});
		
		if(document.addEventListener){
			document.getElementById(id).addEventListener("DOMAttrModified", changed, false);
		}
		else {
			document.getElementById(id).attachEvent('onpropertychange', changed); 
		}
	});
});
    

