/**
 * Project: JavaScript Hauptklasse
 * Author: Christian Boehnke & Paul Meyer Klickadeeler Mediendesign GbR <info [AT] klickadeeler [DOT] de>
 * Date: April 2nd, 2009
 * File: helper_yc.js
 * Version: 1.0
 */
 
// REMOVE
var tip = null;
var graphSWIFF = null;

var tipContent = {
	'1': [{'name': 'Operation an der Halsschlagader', 'link' : '?a=' + application + '&c=101&m=' + mode + '&b=' + branded + ''}],
	'2': [{'name': 'Entfernung der Gallenblase', 'link' : '?a=' + application + '&c=106&m=' + mode + '&b=' + branded + ''}],
	'3': [{'name': 'Gyn&auml;kologische Operationen', 'link' : '?a=' + application + '&c=107&m=' + mode + '&b=' + branded + ''}/*, {'name': 'Geburtshilfe', 'link' : '?a=' + application + '&c=108&m=' + mode + '&b=' + branded + ''}*/],
	'4': [{'name': 'H&uuml;ftgelenkersatz', 'link' : '?a=' + application + '&c=109&m=' + mode + '&b=' + branded + ''}],
	'5': [{'name': 'Kniegelenkersatz', 'link' : '?a=' + application + '&c=110&m=' + mode + '&b=' + branded + ''}],
	'6': [{'name': 'Brustkrebsoperationen', 'link' : '?a=' + application + '&c=105&m=' + mode + '&b=' + branded + ''}],
	'7': [{'name': 'Einsatz Herzschrittmacher', 'link' : '?a=' + application + '&c=102&m=' + mode + '&b=' + branded + ''}/*, {'name': 'Herzkatheteranwendungen', 'link' : '?a=' + application + '&c=103&m=' + mode + '&b=' + branded + ''}*/],
	'8': [{'name': 'Lungenentz&uuml;ndung', 'link' : '?a=' + application + '&c=111&m=' + mode + '&b=' + branded + ''}],
	'9': [{'name': 'Oberschenkelhalsbruch', 'link' : '?a=' + application + '&c=112&m=' + mode + '&b=' + branded + ''}],
};

function asEvent(swiffId, eventId, param) {
	$try(function() {
		var json = param ? JSON.decode(param) : new Object();
		var swiffContainer = $(swiffId);
		var swiff = swiffContainer.retrieve('swiff');
		var swiffElement = swiff.toElement();
		var swiffContainerPos = swiffContainer.getPosition();
		
		switch(eventId) {
			case 'chartShowTip':
				tip.open(swiffElement, json.text, swiffContainerPos.x + json.x, swiffContainerPos.y + json.y);
				break;
			
			case 'chartHideTip':
				tip.close(300);
				break;
			
			case 'graphShowTip':
				tip.open(swiffElement, tipContent[json.id], swiffContainerPos.x + json.x + 22, swiffContainerPos.y + json.y + 7);
				break;
			
			case 'graphCollapseTip':
				tip.close(300);
				break;
			
			case 'resize':
				swiffElement.height = json.height;
				break;
		}
	});
}

function highlightBodyGraph(what) {
	Swiff.remote(tip._swiffElement, 'jsEvent', 'highlight', what); 
}

/////////////////////////////////////////////////////////////////////////////////////////////////
var modalDragger = null;

function showModalWindow(url) {
	try {
		var modalWin = new Element('DIV', { 
			'class': 'modalContainer',
			'html': '<div class="modalNW">&nbsp;</div>' + 
					'<div class="modalN"><a href="' + document.location.href + '" onclick="closeModalWindow(); return false;" title="schlie&szlig;en">x</a></div>' + 
					'<div class="modalNE">&nbsp;</div>' + 
					'<div class="modalWE"></div>' + 
					'<div class="modalSW">&nbsp;</div>' + 
					'<div class="modalS">&nbsp;</div>' + 
					'<div class="modalSE">&nbsp;</div>' + 
					'<br class="clear" />'
		});
		
		var modalMatte = new Element('DIV', {
			'class': 'modalMatte',
			'opacity': .75
		});
		
		// add
		$$('BODY').adopt(modalMatte, modalWin);
		
		// set position
		var windowSize = window.getSize();
		var windowScrollOffset = window.getScroll();
		var windowScrollSize = window.getScrollSize();
		
		modalMatte.setStyle('width', windowScrollSize.x);
		modalMatte.setStyle('height', windowScrollSize.y);
	
		// load the content
		new Request({
			'url': url,
			'method': 'get',
			onSuccess: function(responseText) {
				// set html
				var responseTextLower = responseText.toLowerCase();
				var indexBodyOpen = responseTextLower.indexOf('<body>');
				var indexBodyClose = responseTextLower.indexOf('</body>');
				var bodyText = responseText.substring(indexBodyOpen + 6, indexBodyClose);
				
				$$('[class=modalWE]"').each(function(item, index) {
					item.set('html', bodyText);
				});
				
				// place window
				var modalWinWidth = modalWin.getWidth();
				var modalWinHeight = modalWin.getHeight();
				var posX = windowScrollOffset.x + ((windowSize.x - modalWinWidth) / 2);
				var posY = windowScrollOffset.y + ((windowSize.y - modalWinHeight) / 2);
				
				modalWin.setStyle('top', (posY > 0 ? posY : 0));
				
				// animate
				var tween = new Fx.Tween(modalWin, {
					'transition': Fx.Transitions.Cubic.easeInOut,
					'duration': 600
				});
				
				// make draggable
				modalDragger = new Drag(modalWin, {
					'snap': 24,
					'limit': {
						'x': [0, ((windowSize.x + windowScrollOffset.x) - modalWinWidth) - 40],
						'y': [0, ((windowSize.y + windowScrollOffset.y) - modalWinHeight) - 20]
					}
				}).detach();
				
				tween.addEvent('complete', function() {
						// dragger
						$$('[class=modalNW]').each(function(item, index) {
							item.addEvent('mousedown', function() {
								if (modalDragger) modalDragger.attach();
							});
							
							item.addEvent('mouseup', function() {
								if (modalDragger) modalDragger.detach();
							});
						});
						
						$$('[class=modalN]').each(function(item, index) {
							item.addEvent('mousedown', function() {
								if (modalDragger) modalDragger.attach();
							});
							
							item.addEvent('mouseup', function() {
								if (modalDragger) modalDragger.detach();
							});
						});
				});
				
				tween.start('left', (modalWinWidth * -1), (posX > 0 ? posX : 0));
			},
			onFailure: function(xhr) {
				if (xhr.readyState == 4) this.fireEvent("success", xhr.responseText).callChain();
			}
		}).send();
	}
	catch(err) {
	}
}

function closeModalWindow() {
	$$('[class=modalContainer]"').each(function(item, index) {
		item.destroy();
	});
	
	$$('[class=modalMatte]"').each(function(item, index) {
		item.destroy();
	});
}

var menuTimer = null;

function showMenu() {
	var el = $('compactNavigationWrapper');
	if (el) el.setStyle('display', 'block');
	
	if (el = $('compactMenuToggle')) {
		el.setStyles({
			'backgroundImage': 'url(' + appPath + 'images/icon_compact_menu_hi.gif)',
			'color': '#ededed'
		});
	}
}

function hideMenu() {
	var el = $('compactNavigationWrapper');
	if (el) el.setStyle('display', 'none');
	
	if (el = $('compactMenuToggle')) {
		el.setStyles({
			'backgroundImage': 'url(' + appPath + 'images/icon_compact_menu_lo.gif)',
			'color': '#fff'
		});
	}
}

function keepMenu() {
	if (menuTimer) {
		menuTimer = $clear(menuTimer);
	}
}

function collapseMenu() {
	if (!menuTimer) {
		menuTimer = hideMenu.delay(250);
	}
}

/////////////////////////////////////////////////////////////////////////////////////////////////


// slider schalter einstellungen
var sliderTogglerClassOpened = 'sliderCollapse';
var sliderTogglerClassClosed = 'sliderExpand';
var sliderTogglerTextOpened = 'weitere Informationen ausblenden';
var sliderTogglerTextClosed = 'weitere Informationen einblenden';

// domready event registrieren
addEvent('domready', function() {
	$try(function() {
		var el = null;
		
		/////// TO BE REMOVED IN FINAL VERSION
		tip = new kd.Tip();
		
		// entferne den drucken link, falls der browser dieses
		// feature nicht unterstuetzt
		if ((el = $('actionPrint')) && !window.print) el.getParent('li').destroy();
		
		// falls dieses fenster nicht von einer externen quelle 
		// geoeffnet wurde, entferne den fenster schliessen link
		if ((el = $('footerLinkClose')) && !$defined(window.opener)) el.getParent('li').destroy();
		
		// fuege allen anchor-tags ein lightbox feature hinzu,
		// falls direkt auf ein bild, einen film oder eine ton-datei
		// gelinkt wird
		addLightBoxes();
		
		// fuege allen slider containern das sliding feature durch einen 
		// entsprechden link-schalter hinzu
		addSliders();
		
		// alle alternativen flash inhalte sollten durch 
		// das flash equivalent ersetzt werden
		replaceAlternateFlashContainers();
		
		// compact mode
		if (mode == 1) {
			// Hintergrundfarbe des Bodies
			$$('BODY').setStyles({
				'marginTop': 0,
				'backgroundColor': '#fff',
				'backgroundImage': 'none',
				'backgroundRepeat': 'repeat'
			});
			
			// Fenster schliessen verstecken
			if ((el = $('compactMetaNavigationClose')) && !$defined(window.opener)) el.getParent('li').destroy();
			
			// Zeige den Flyout Button und definiere ein Event für das klicken
			if (el = $('compactMenuToggle')) {
				el.setStyle('display', 'block');
				
				// event
				el.addEvent('mouseover', function() {
					showMenu();
					keepMenu();
			    });
				
				el.addEvent('mouseout', function() {
					collapseMenu();
			    });
				
				// events auf den wrapper setzen
				if (wrapper = $('compactNavigationWrapper')) {
					wrapper.addEvent('mouseover', function() {
						keepMenu();
					});
					wrapper.addEvent('mouseout', function() {
						collapseMenu();
					});
				}
				
				// events auf jeden menüpunkt setzen
				$$('[class^=compactNavigationItem]').each(function(item, index) {
					item.addEvent('mouseover', function() {
						keepMenu();
					});
					item.addEvent('mouseout', function() {
						collapseMenu();
					});
				});
				
				// scrolling resizing
				var evntFunc = function(event) {
					var windowScrollOffset = window.getScroll();
					var headerBar = $('compactHeaderBar');
					var navigationWrapper = $('compactNavigationWrapper');
					
					if (headerBar && navigationWrapper) {
						headerBar.setStyle('top', windowScrollOffset.y);
						navigationWrapper.setStyle('top', windowScrollOffset.y + headerBar.getHeight());
					}
				};
				
				window.addEvent('scroll', evntFunc);
				window.addEvent('resize', evntFunc);
			}
		}
		
		// modal mode
		if (mode == 2) {
			$$('BODY').setStyles({
				marginTop: 0,
				backgroundColor: '#fff',
				backgroundImage: 'none',
				backgroundRepeat: 'repeat'
			});
		}
		
		// fuege das smoothscrolling feature auf alle
		// sprungmarke ein
		new Fx.SmoothScroll({
		    'wheelStops': true
		}, Window);
	});
});

/**
 * ============================================================================
 * fuege allen anchor-tags ein lightbox feature hinzu
 * ============================================================================
 * @param none
 * ============================================================================
 * @return void
 * ============================================================================
 */
function addLightBoxes() {
	$$('A').each(function(item, index) {
		var href = item.get('href');
		
		if (href && href.test('.png|.gif|.jpg|.jpeg|.mov|.avi|.flv|.mp3|.swf', 'i')) {
			item.addEvent('click', function() {
				//showLightBox(href);
				return false;
			});
		}
	});
}

/**
 * ============================================================================
 * fuege allen slider containern das sliding feature durch einen 
 * entsprechden link-schalter hinzu
 * ============================================================================
 * @param none
 * ============================================================================
 * @return void
 * ============================================================================
 */
function addSliders() {
	$$('[class^=sliderContent]').each(function(item, index) {
		var config = item.get('class');
		var json = { 
			'visible': false
		};
		
		if (config) {
			var index = config.indexOf(':');
			
			if (index != -1) {
				json = JSON.decode(config.substr(index + 1));
			}
		}
		
		var toggler = new Element('a', {
			'href': 'javascript:$empty();',
			'class': (json['visible'] ? sliderTogglerClassOpened : sliderTogglerClassClosed),
			'html': (json['visible'] ? sliderTogglerTextOpened : sliderTogglerTextClosed)
		});
		
		item.grab(toggler, 'after');
		
		toggler.store('slider', (json['visible'] ? new Fx.Slide(item) : new Fx.Slide(item).hide()));
		toggler.addEvent('click', function() {
			var slider = this.retrieve('slider');
			
			if (slider.open) {
				this.set('class', sliderTogglerClassClosed);
				this.set('html', sliderTogglerTextClosed);
				slider.slideOut();
			}
			else {
				this.set('class', sliderTogglerClassOpened);
				this.set('html', sliderTogglerTextOpened);
				slider.slideIn();
			}
		});
	});
}

/**
 * ============================================================================
 * alle alternativen flash inhalte sollten durch das flash equivalent 
 * ersetzt werden
 * ============================================================================
 * @param none
 * ============================================================================
 * @return void
 * ============================================================================
 */
function replaceAlternateFlashContainers() {
	$$('[class^=flashAlternate]').each(function(item, index) {
		var config = item.get('class');
		
		if (config) {
			var i = config.indexOf(':');
			
			if (i != -1) {
				var json = JSON.decode(config.substr(i + 1));
				
				if (json['src'] && Browser.Plugins.Flash.version >= json['version']) {
					var swiffId = (json['id'] ? json['id'] : new URI(json['src']).get('file') + '_' + String(index));
					var container = json['container'] ? $(json['container']) : new Element('DIV');
					
					if (!container.id) {
						container.id = 'container_' + swiffId;
					}
					
					if (container) {
						var swiff = new Swiff(json['src'], {
							'id': swiffId,
							'container': container,
							'width': (json['width'] ? json['width'] : '100%'),
							'height': (json['height'] ? json['height'] : '100%'),
							'params': {
								'play': (json['play'] ? json['play'] : 'true'),
								'loop': (json['loop'] ? json['loop'] : 'true'),
								'menu': (json['menu'] ? json['menu'] : 'false'),
								'quality': (json['quality'] ? json['quality'] : 'high'),
								'scale': (json['scale'] ? json['scale'] : 'noscale'),
								'salign': (json['salign'] ? json['salign'] : 'tl'),
								'wmode': (json['wmode'] ? json['wmode'] : 'window'), 
								'bgcolor': (json['bgcolor'] ? json['bgcolor'] : '#ffffff'),
								'base': (json['base'] ? json['base'] : ''),
								'swliveconnect': (json['swliveconnect'] ? json['swliveconnect'] : 'true'),
								'allowscriptaccess': (json['allowscriptaccess'] ? json['allowscriptaccess'] : 'samedomain'),
								'devicefont': (json['devicefont'] ? json['devicefont'] : 'true'),
								'seamlesstabbing': (json['seamlesstabbing'] ? json['seamlesstabbing'] : 'true'),
								'allowfullscreen': (json['allowfullscreen'] ? json['allowfullscreen'] : 'true'),
								'allownetworking': (json['allownetworking'] ? json['allownetworking'] : 'all')
							},
							'vars': (json['vars'] ? $extend(json['vars'], { 'swiffId' : container.id })  : { 'swiffId' : container.id })
						});
						
						if (swiff) {
							container.store('item', item);
							container.store('swiff', swiff);
							
							item.store('swiff', swiff);
							item.grab(container, 'before');
							item.hide();
							
							if (!Browser.Engine.trident) swiff.toElement().setStyle('outline', 'none');
						}
					}
				}
			}
		}
	});
}
