/*	gia | template.js */

/*
// MT compatibility mode:
$('id') ... document.id('id'); / document.getElement('#id')
$$('.class') ... document.getElements('.class');

*/
window.onload = function() {
	// select country redir
};

//	find #anchor
function findSection() {
	var theSection = 0;
	var theAddress = decodeURI(window.location);
	var thePound = theAddress.indexOf("#");
	if (thePound >= 0) theSection = theAddress.substring(thePound + 1);
	return theSection;
};
	
// compatibility mode: (function($,$$) { 
if ( Math.round(window.MooTools.version.substr(0, 3)*10)/10 > 1.1 )
window.addEvent('domready',function() {	
	

	var classes = ['slideGallery', 'URI', 'HtmlTable'];
	var options = { path: URLS.js + 'classes/{class}.js' };
	LazyClass.prepare(classes, options);
	// var slideGallery = new LazyClass('slideGallery', { path: jsPath + 'classes/{class}.js' });
	
	
	// SLIDEGALLERY
	document.getElements('ul.sig-container').each(function(sig) { // if ($$('ul.sig-container')) {
		
		sig.getElement('li.sig-clr').destroy(); // destroy li.sig-clr
		// sig.setStyles({ width: '30000px' }); // transform
		
		// wrap
		var wrapHolder = new Element ('div', {
			'class':	'galleryHolder'
		}).wraps(sig);
		var wrapGallery = new Element ('div', {
			'class': 	'gallery'
		}).wraps(wrapHolder);
		
		// buttons prev next
		var btnPrev = new Element ('a', {
			// 'title':	'<', // &laquo; «
			'class':	'prev',
			'events': {
				'mouseover': 	function(){
					// this.fireEvent('click', this, 750);
					// gallery.options.autoplay = true;
					// gallery.options.autoplayOpposite = true;
					// gallery.rotate();
				},
				'mouseleave':	function(){
					// gallery.options.autoplay = false;
				}
			}
		}).inject(wrapGallery, 'inside');
		
		var btnNext = new Element ('a', {
			// 'title': 	'>', // &raquo; »
			'class':	'next',
			'events': {
				'mouseover':	function(){
					// this.fireEvent('click', this, 750);
					// gallery.options.autoplay = true;
					// gallery.options.autoplayOpposite = false;
					// gallery.rotate();
				},
				'mouseleave':	function(){
					// gallery.options.autoplay = false;
				}
			}
		}).inject(wrapGallery, 'inside');
		
		// mousewheel
		wrapGallery.addEvents({
			'mousewheel':	function(e) {
				e.stop();
				e.wheel > 0 ? btnPrev.fireEvent('click') : btnNext.fireEvent('click');
			}
		});
	
		// slideGallery
		var gallery = new slideGallery(
			wrapGallery, {
			steps: 1,
			speed: 250,
			paging: false,
			// mode: 'callback',
			mode: "line",
			transition: "sine:in:out",
			duration: 500,
			holder: ".galleryHolder",
			elementsParent: "ul",
			elements: "li"
		});
		
		// console.log(gallery.options);
	});

	
	//	DOUBLE HOVER
	if (document.getElement('body.tree')) {
	
		$$thumbs 	= document.getElements('#content span.tree');
		$$menus 	= document.getElements('#left li.active ul li');
		
		$$thumbs.each(function($thumb, i){
			$$menus.each(function($menu, i){
				if (
					$thumb.getElement('a').get('href') == $menu.getElement('a').get('href')			// same link
					|| $thumb.get('text').clean().toLowerCase() == $menu.get('text').clean().toLowerCase()  // same text
				) {
					$menu.addEvents({
						'mouseenter' : function() { $thumb.toggleClass('active'); },
						'mouseleave' : function() { $thumb.toggleClass('active'); }
					});
					
					$thumb.addEvents({
						'mouseenter' : function() {	$menu.toggleClass('active'); },
						'mouseleave' : function() { $menu.toggleClass('active'); }
					});
					
					// console.log( $thumb.get('text').clean() + ' matches: ' + $menu.get('text').clean());
				};
			});
		});
	};
	
	
	//	ACCORDION
	//	req: fx.accordion
	
	// settings
	accordionToggler 	= 'accordion';
	accordionContent 	= 'accordion-holder';
	// accordionSeparators	= 'H2';
	accordionSeparators	= [ 'H2', 'H3' ];

	accordionTogglers 	= document.getElements('.' + accordionToggler);	
	// check
	if (accordionTogglers != '') {
		
		// encapsulate contents
		accordionTogglers.each(function(at, i) {
		// $each(accordionTogglers, function(at, i) {
		
			// if (at.getNext('[class!='+accordionContent+']'))
			// if (at.getNext(':not(.'+accordionContent+')'))
			
			// no need to create wrapper
			
			if (at.getNext('.'+ accordionContent)) {
				// console.log('bingo!');
			}
			
			// create wrapper
			else
			{
				// contents = at.getAllNext(':not(.accordion)');
				var holder = new Element('div', { 'class': accordionContent });
				var atContent = [];
				
				// grab content
				at.getAllNext().some(function(el) {
					
					if (
						el.hasClass(accordionToggler) || 
						accordionSeparators.contains(el.tagName)
						// el.tagName == accordionSeparators
					) {
						return atContent;
					} else {
						atContent.include(el);
						return false;
					};
				});
				
				// wrap into holder
				if (atContent) {
					holder.inject(at, 'after');
					holder.adopt(atContent);
				};
			}
			
		});
		
		// page scrolling
		var myScroll = new Fx.Scroll(
			document.body, {
			duration: 1500,
			wait: true,
			transition: "sine:in:out"
		});
		
		// beautify scrollers
		accordionTogglers.each(function(el, i){
			
			// add id's
			if (!el.get('id')) {
				
				// replace spaces and non-ascii chars
				newId = el.getText(el).replace(/ù/, "u").replace(/ /g, "_").replace(/[^\x20-\x7E]/g, "");
				if (newId == '') newId = accordionToggler; // NEW
				
				if (document.id(newId))
				{	el.set('id', newId + '-' + i ); }
				else
				{ el.set('id', newId ); }
			}
			
			el.retrieve('position', i);
			
			// create [+] spans
			var toggler = new Element('span', {
				'text': '[+]',
				'class': 'toggler'
			//	'title': 'unfold',
			//	'events': { 'click' : function () { alert ('clicked'); } }
			});
			toggler.inject(el);
		});
		
	
		// create accordion
		var myAccordion 	= new Fx.Accordion(accordionTogglers, '.' + accordionContent, {
			alwaysHide:	true,
			opacity: (Browser.Engine.trident) ? false : true,
			alwaysHide:	false,
			
			// display: (findSection() == 0) ? 0 : $$('.accordion').indexOf($(findSection())), // working def
			// display: (document.location.hash == '') ? 0 : $$('.accordion').indexOf($$(document.location.hash)), // ??
			// display: (document.location.hash == '') ? 0 : accordionTogglers.indexOf($(findSection())), // working
			display: (document.location.hash == '') ? 0 : document.getElement(document.location.hash).retrieve('position'), // test
			
			
			onActive: function(toggler, element) {
				toggler.addClass('active');
				toggler.getElement('.toggler').setText('[-]');
				
				// hash anchor
				// ref: http://stackoverflow.com/questions/1489624/modifying-document-location-hash-without-page-scrolling
				// if (findSection() != 0) {
				// if (document.location.hash) {
					togglerId = toggler.get('id');
					toggler.set('id', '');
						document.location.hash = togglerId;
					toggler.set('id', togglerId);
				// };
				// myScroll.toElement(el);
			},
			
			onComplete: function(el) {
			},
			
			onBackground: function(toggler, element) {
				// editor foolproof
				if (toggler) {
				
					if (toggler.hasClass('active')) { toggler.removeClass('active'); }
					toggler.addEvents({
						'mouseenter' : function() { if (!this.hasClass('active')) this.addClass('over'); },
						'mouseleave' : function() { this.removeClass('over') }
					});
					toggler.getElement('.toggler').setText('[+]');
				}
			}
			
		});
		
		// accordion openers
		document.getElements('#page a[href^=#]').each(function(el) {
			if (document.getElement(el.get('href'))) {
				el.addEvent( 'click', function(e) {
					// open accordion
					myAccordion.display(document.getElement(el.get('href')).retrieve('position'));
					// scroll
					myScroll.toElement(document.getElement(el.get('href')));
					// prevent default
					// e.stop();
					e.preventDefault(); 
				});
			};
		});
	};
	
	/*
	document.getElement('form#country select').addEvent('change', function() {
		if (this.value) window.open(this.value, '_blank', '');
	});
	*/
	
	/* USER EXPERIENCE */
	
	// remove outline
	document.getElements('a').addEvents({
	// $$('a img').getParent().addEvents({
		'mousedown': function(e) {
			// this.setStyles({ 'outline': "0" });
			this.addClass("no-outline");
		}
	});
	
	// external links
	document.getElements('a[href^="http://"]').filter(function(a, i) {
		return a.hostname && a.hostname != window.location.hostname;
	}).set('target', "_blank");
	
	// pdfs
	document.getElements('a[href$=".pdf"]').each(function(el, i){
		// adds class: download-[extension]
		el.addClass('download-' + el.get('href').match(/\.(.+)$/)[1]); // (/\.(.+)$/.exec(el.get('href'))[1])
		el.set('target', "_blank");
	});
	

	
	//  MODAL
	//	$$('#admin a span:contains("Login2")').each(function(el ,i) {
	//	link = el.getParent('a'); */
	var modalHrefs = []; // $$('#loginButton')]; // $$('#admin li.item59 a'), 
	
	// add modal links to modalHrefs
	if (typeof modalLinks != 'undefined') {
		var modalLinks_array = modalLinks.split(',');
		modalLinks_array.each(function(modalLink, i) {
			if (document.getElement(modalLink)) {
				modalHrefs.include(document.getElement( modalLink ));
			}
		});
	}
	
	// add modal menus to modalHrefs
	if (modalMenus != '') {
		var menuItems = modalMenus.split(',');
		menuItems.each(function(menuItem, i) {
			if (document.getElement('li.item' +menuItem+ ' a')) {
				modalHrefs.include(document.getElement('li.item' +menuItem+ ' a'));
			}
		});
	}
	
	// modalize all hrefs
	modalHrefs.each(function(link, i) {
		
		// ref: http://www.neilberget.com/2009/08/mootools-adding-query-parameter-to-all-links-on-page/
		var linkURI = new URI (link.getProperty('href'));
		linkURI.setData({'tmpl': "component"}, true);
		link.setProperty('href', linkURI.toString());
		
		
		if (link.onclick != null) {
			onclickz = link.getProperty('onclick');
			
			/*
			alert(	link.onclick	);	// function onclick(event) {...}
			alert(	link.getAttribute('onclick') );	// string //f
			alert(	link.getProperty('onclick')	);	// string //f
			alert(	link.get('onclick') );	// string //f
			
			alert( typeof onclickz ); // FF: string/ IE: function
			*/
			
			onclickz = String(link.onclick);
			
			// x = onclick.match(/width=(\d+)/i)[1] || 360;
			// y = onclick.match(/height=(\d+)/i))[1] || 220;
			
			/*
			if (onclick.test(/width=(\d+)/i)) {
				x = onclick.match(/width=(\d+)/i)[1];
			} else {
				x = 360;
			}
			
			if (onclick.test(/height=(\d+)/i)) {
				y = onclick.match(/height=(\d+)/i)[1];
			} else {
				y = 220;
			}
			*/
			/*
			if (onclickz.test(/width=\d+/i)) {
				x = onclickz.match(/width=(\d+)/i)[1] } else { x = 360; }
			if (onclickz.test(/height=\d+/i)) {
				y = onclickz.match(/height=(\d+)/i)[1] } else { y = 220; }
			*/
			/* */
			x = onclickz.match(/width=\d+/i) ? onclickz.match(/width=(\d+)/i)[1] : 360;
			y = onclickz.match(/height=\d+/i) ? onclickz.match(/height=(\d+)/i)[1] : 220;
			/* */
			
			/*
			x = ((xx = onclickz.match(/width=(\d+)/i)) ? xx[1] : 360);
			y = ((yy = onclickz.match(/height=(\d+)/i)) ? yy[1] : 220);
			*/
		
			// link.addEvent('click', function(ev) { ev.stop(); });
			// link.removeEvents('click'); // WIN FF
			// link.removeProperty('onclick');
			link.onclick = null;
		} else {
			x = 360;
			y = 220;
		}
		
		link.setProperties({
			// rel : "lightbox[external-" +linkTitle+ " 360 220]",
			rel: "{handler: 'iframe', size: {x: "+x+", y: "+y+"}} ",
			// title: (link.get('title').empty() ? link.get('text') : link.get('title'))
			title: link.get('title') || link.get('text')
		});
	});
	
	
	// add
	modalHrefs.each(function(el, i) {
		el.addEvent('click',function(ev) {
			ev.stop();
			SqueezeBox.fromElement(el); // +options
		});
	});
	
	// SQUEEZEBOX
	SqueezeBox.initialize({ });
	
	var modalbox = document.getElement('#sbox-window');
	
	// set options
	SqueezeBox.setOptions({
		'fxResizeDuration': 250,
		'fxContentDuration': 150,
		'overlayOpacity': .8,
		'onOpen' : function() { 
			modalbox.makeDraggable({
				modifiers: {x: 'marginLeft', y: 'marginTop'},
				onStart: function(e){ e.addClass('dragging'); },
				onComplete: function(e){ e.removeClass('dragging'); }
			});
			// modalDrag.attach();
		},
		'onClose' : function() {
			// modalDrag.detach();
		}
		// onOpen / onClose / onShow /	onHide
	});
	SqueezeBox.assignOptions();
	
	// hover events
	modalbox.addEvents({
		'mouseenter' : function(e) { this.addClass('draggable'); },
		'mouseleave' : function(e) { this.removeClass('draggable'); }
	});
	
	
	/*
	var modalDrag = new Drag(modalbox, {
		span: 0,
		style: true,
		modifiers: {x: 'marginLeft', y: 'marginTop'},
		
		// onBeforeStart: function(e){ },
		onStart: function(e){
		// onSnap: function(e){
			e.addClass('dragging');
			// e.setStyles({margin : 0 });
		},
		onComplete: function(e){
			e.removeClass('dragging');
		}
	});
	*/

	
	/*
	modalHrefs.each(function(link, i){
		if ($$('#sbox-window')) {
			link.addEvents({
				'click': function(e) {
				//	modalDrag.attach();
				}
			});
			$$('#sbox-window').addClass('draggable');
		};
	});
	*/
});


if ( Math.round(window.MooTools.version.substr(0, 3)*10)/10 > 1.1 )
window.addEvent('domready',function() {
	// SYSTEM
	
	// JError
	/** 
	 * based on JError
	 *
	 * @version		$Id: error.js 09
	 * @package		Joomla.JSFramework
	 * @subpackage	Error
	 * @copyright	Copyright (C) 2009-2011 Piotr Konieczny. All rights reserved
	 * @licence		GPL3
	 *
	 * @link		http://docs.joomla.org/API15:JError
	 * @example		libraries/joomla/error/error.php
	 *
	 * Emulates following functions:
	 * raise
	 * raiseError
	 * raiseNotice
	 * raiseWarning
	 */
	var JErrorHelper = new Class({
		// implements
		Implements: [Options, Events, Chain],
		
		// options
		options: {
			container: document.getElement('#system-message'),
			position: 'bottom',
			UI: {
				close: true,
				draggable: false,
				autoclose: false
			},
			ani: {
				duration: 200,
				transition: "sine:out",
				link: "chain"
			},
			aniHide: {
				opacity: 0,
				height: 0,
				marginTop: 0
			},
			structure: [
				document.getElement('#system-message'), // {a}
				'dt.{type}', 				// {b}
				'dd.{type}.message.fade', 	// {c}
				'li' 						// {d}
			],
			onShow: function() {},
			onHide: function() {}
		},
		
		/*
		structure:
			dl#system-message 	{a}
			  dt.[type] [Type] 	{b}
			  dd.message.fade.[type] {c}
			    ul
				  li [msg] 		{d}
				  
			div#admin 			{a}
			  div.moduletable 	{c}
			    h3 [type] 		{b}
				ul.menu
				  li [msg] 		{d}
		*/
		
		initialize: function(container, options) {
			
			// set options
			this.setOptions(options);
			
			this.container = 
				this.options.container
				|| new Element('dl', {'id': "system-message"}).inject(document.body, "bottom");
			
			this.items = [];
			this.container.getElements('dd.message.fade').each(function(el, i) {
				this.items.push(el);
				this.upgradeFX(el);
			}, this);
		},
		
		raise: function(type, $msg) {
			if (!this.container || $msg == '') {
				return false;
			};
			
			
			// create messages contaner
			if (wrapper = this.container.getElement('dd.' + type + ' ul')) {
				new Element('li', {'html': $msg }).inject(wrapper);
			} else {
				
				aniShow = {};
				aniShow[this.options.position] = -9999;
				
				// msg body
				this.upgradeFX(
					
					b = new Element( 
						'dd', {
						'class': type +' message fade',
						'html': '<ul><li>' + $msg + '</li></ul>',
						'styles': aniShow
					}).inject(this.container, "top")
				);
			
				// msg header
				if ( typeof Joomla != "undefined" && JText in Joomla ) {
					new Element (
						'dt', { 
						'class': type,
						'html': Joomla.JText._(type, type)
					}).inject(this.container, "top");
				}
			}
			return;
		},
		
		upgradeFX: function(el) {
			hide = this.hide;
			// el.set('morph', this.options.ani);
			
			var fx = new Fx.Morph(el, this.options.ani);
			el.store('fx', fx);
			fx.addEvent('complete', function(){
				el.set('style', "");
				this.fireEvent('onShow', el);
			}.bind(this));
			
			aniShow = {};
			aniShow[this.options.position] = [- this.container.getSize().y, 0];
			fx.start( aniShow );
			
			/*
			fx.start({ 'bottom', [- this.container.getSize().y, 0] });
			*/

			el.store('type', el.get('class').replace(/message fade/i, "").trim());
			
			// add close button
			if (this.options.UI.close){
				new Element ('a', {
					'class':	"closebox",
				//	'title': 	"[x]",
					'html':		"&nbsp;",
					'events': {
						'click': function(ev){
							ev.stop();
							this.hide(ev.target.getParent());
						}.bind(this)
					}
				}).inject(el, "inside");
			}
			
			if (this.options.UI.draggable){			
				this.draggable(el);
			}
			
			if (this.options.UI.autoclose != false){
				this.hide.delay(this.options.UI.autoclose, this, el);
			}
			
			el.addClass('upgraded');
			
			return;
		},
		
		hide: function(el) {
			// or nix. // 
			
			var fx = el.retrieve('fx');
			if (!fx) return;
			fx.addEvent('complete', function(){
				el.destroy();
				if (el.getPrevious('dt')){
					el.getPrevious('dt').destroy();
				}
				this.fireEvent('onHide', el);
			});
			fx.start(this.options.aniHide);
			
			// return this.fireEvent('onHide', [el, this.items.length].callChain(el);
		},
		
		draggable: function(el){
			// ref: http://mootools.net/docs/more/Drag/Drag
			// var myDrag = new Drag(el, {
			el.makeDraggable({
				snap: 0,
				style: true,
				
				onSnap: function(ele){
					/*
					ele.setStyles({
						'position': "absolute",
						'width': ele.getSize().x
					}); */
					ele.addClass("dragging");
					ele.store('interacted', true);
				},
				onComplete: function(ele){
					ele.removeClass("dragging");
				}
			});
			el.addClass("draggable");
		}
	});
	
	var JError = new JErrorHelper();
	JError.raiseNotice = function($msg){ JError.raise('notice', $msg); 	}
	JError.raiseWarning = function($msg){ JError.raise('warning', $msg); }
	JError.raiseError = function($msg){ JError.raise('error', $msg); }
	
	/* */
	if (window.location.href.test(/newsletter.html/i)) {
		document.getElement('#footer').addEvent('click', function(){
				JError.raiseNotice("Notice");
				JError.raiseWarning("folder empty");
				JError.raiseError("<strong>folder test</strong>");
			});
	} else {
	}
	/* */
	
	
	/* var AdminPanel = new JErrorHelper({
		document.getElement('#admin'), {
		}
	});
	*/
	
	// admin panel
	// close button
	document.getElements('#admin div.moduletable').each(function(el, i) {
		el.set('morph', { 
			duration: "short", 
			transition: "sine:out", 
			link: "chain"
		});
		var closeBtn = new Element ('a', {
			'class':	"closebox",
//			'title': 	"[x]",
			'events': {	
				'click': function(){
					el.setStyles({ zIndex: 0 });
					el.morph({
						opacity: 0,
						marginTop: - el.getSize().y,
						marginBottom: 0
					});
					el.morph({
						display: "none"
					});
				}
			}
		}).inject(el, "inside");
	});
	
	
	// MANAGER
	if (formEditor = document.getElement('form.editor')) {
		
		// dummy
		// new Element('button', { 'text': "Preview", 'type': "button"}).inject(formEditor.getElement('fieldset div.save'), "inside");
		
		
		UI = {
			resize: {x: .5, y: 1.5}
		}
		
		if (false) {
			formEditor.addEvent('mouseenter', function() {
				if (formEditor.hasClass('upgraded')) return;
			
				// resize 
				formEditor.getElements('textarea').each(function(el, i) {
					
					elX = el.getSize().x || el.getStyle('width').toInt();
					elY = el.getSize().y || el.getStyle('height').toInt();
					
					el = el.getNext('.mceEditor') || el;
					resizer = new Element(
						'hr', {
						'class': "resizer"
					}).inject(el, "after");
					
					if (el.getElement('.mceLayout')) el.getElement('.mceLayout').setStyle('height', "100%");
					
					elW = el.getElement('iframe#text_ifr') || el;
					elW.makeResizable({
						// grid: 10,
						modifiers: {x: null, y: "height"},
						handle: resizer,
						limit: {
							x: [ elX, elX ],
							y: [ elY * UI.resize.x, elY * UI.resize.y ]
						},
						unit: "px",
						preventDefault: true,
						onSnap: function() { this.element.addClass("resizing"); },
						onComplete: function() {this.element.removeClass("resizing"); }
					});
					
					// formEditor.addClass('upgraded');
				});
			});
		}
		
		formEditor.addClass('upgraded');
		var JEditor = new Hash.Cookie('JEditor', {});
		
		//	fieldsets show/hide
		JEditor.fieldsets = JEditor.get('fieldsets') || { 'hidden': [] };
		
		document.getElements('form.editor([name="adminForm"]) fieldset').each(function($el, i) {
			// el.store('hidden', false);
			// el.store('height', el.getSize().y);
			
			$el.inject(
				wrapper = new Element(
					'div', {
					'class': 	"wrapper wrapper-" + i
				}).inject(formEditor)
			);			
			
			// if (JEditor.get({'fieldsets':i}) == false && !el.hasClass('hidden')) {
			if (
				JEditor.fieldsets.hidden.contains(i)
				&& !$el.hasClass('hide')
			) {
				$el.addClass('hide');
				// $el.slide('hide');
			} else {
				// $el.slide('show');
			}
			// -> move to php
			
			$el.getElement('legend').addEvent('click', function(ev) {
				
				if (!JEditor.fieldsets.hidden.contains(i)) {
				// if (el.retrieve('hidden') != true) {
				// is opened -> close
					// $el.slide('in');
					$el.store('hidden', true);
					JEditor.fieldsets.hidden.include(i);
				} else {
				// is closed -> open
					// $el.slide('out');
					$el.store('hidden', false);
					JEditor.fieldsets.hidden.erase(i);
				}
				$el.toggleClass('hide');
				
				JEditor.set('fieldsets', { 'hidden': JEditor.fieldsets.hidden });
			});
		});
	}
});
// compatibility mode: })(document.id, document.search);
