﻿// JavaScript Document

var TimeCounter = new Class({
														
	 initialize: function(){
		 this.counter = document.id('counter');
		 this.day = this.counter.getElement('.days');
		 this.time = this.counter.getElement('.time');
		 this.end = Date.parse('Dec 24, 2008 18:00:00');
		 this.seconds = 1000;
		 this.minutes = this.seconds * 60;
		 this.hours = this.minutes * 60;
		 this.days = this.hours * 24;
	 
		 this.update.periodical(1000, this);
	 },
	 
	 update: function(){
		 var diff = this.getDiff();
		 this.day.set('text', diff.days);
		 this.time.set('text', diff.time);
	 },
	 
	 getDiff: function(){
		 var current = new Date().getTime();
		 var delta = this.end - current;
		 var days = Math.floor(delta / this.days);
		     delta = delta - days*this.days;
		 var time = new Array();
		 time[0] = Math.floor(delta / this.hours);
		   delta = delta - time[0]*this.hours;
		 time[0] = (time[0] < 10 ? '0'+time[0].toString() : time[0].toString());
		 
		 time[1] = Math.floor(delta / this.minutes);
		   delta = delta - time[1]*this.minutes;
		 time[1] = (time[1] < 10 ? '0'+time[1].toString() : time[1].toString());
		 
		 time[2] = Math.floor(delta / this.seconds);
		 time[2] = (time[2] < 10 ? '0'+time[2].toString() : time[2].toString());
		 var diff = {
			 days: days.toString(),
			 time: time.join(':')
		 };
		 return diff;
	 }
});

var MiniSlideshow = new Class({

  Implements: [Options, Events],
	
	Binds: ['move'],
	
	options: {
		slide: 'img',
		duration: 200,
		interval: 1500,
		transition: 'sine:in:out'
	},
	
	initialize: function(container, options){
		
		this.container = document.id(container);
				
		this.setOptions(options);
		
		this.slides = this.container.getElements(this.options.slide);
		
		this.slideFx = new Array();
		
		this.current = 0;
		this.count = this.slides.length;
		
		this.slides.each(function(slide, index){
		  var fx = new Fx.Tween(slide, { property: 'opacity', duration: this.options.duration, transition: this.options.transition, link: 'cancel' });
			index == this.current ? fx.set(1) : fx.set(0);
			slide.setStyle('position', 'absolute');
			this.slideFx[index] = fx;
		}, this);
		
		this.container.addClass('loaded');
		
		return this;
	},
	
	show: function(){
		this.container.show();
		this.start();
		return this;
	},
	
	hide: function(){
		this.stop();
		this.container.hide();
		return this;
	},
	
	start: function(){
		if (this.count > 1){
  		this.timer = this.move.periodical(this.options.interval);
		}
	},
	
	stop: function(){
		$clear(this.timer);
	},
	
	move: function(){
		var next = ((this.current+1)%this.count);
		this.slideFx[this.current].start(0);
		this.slideFx[next].start(1);
		this.current = next;
	}

});

var Site = {
	  
		init: function(){
			  
        /* target="_blank" replacement for all elements (not only a) */
        $$('._blank').each(function(element){
				    element.addEvent('click', function(event){
						    event.stop();
								window.open(element.get('href'));
						});
				});
				
				/* Giant link */
				$('giant').getElement('img').setStyle('cursor', 'pointer').addEvent('click', function(event){
				    event.stop()
						window.open('http://www.giant.cz');
				});
				
				/* Clickable boxes */
				$$('.clickable').setStyle('cursor', 'pointer');
				$$('.clickable').addEvent('click', function(event){
					event.stop();
					window.location = this.getElement('a').get('href');
				});
				
				//time
				if ($('block-odpocet')) new TimeCounter();

				/* REMOOZ */
				if ($('gallery')){
					$('gallery').getElements('a').each(function(element){
						new ReMooz(element, {
								centered: true, // Zoom the center of the screen
								origin: element.getElement('img'), // Take the image inside as origin for the zooming element
								cutOut: false,
								opacityResize: 0
						});
						
					});
				}

		}
 };

var Flash = {
	
	  init: function(flashParams){
			
			  var flashOptions = {
					  id: 'top-flash',
						width: 596,
						height: 265,
						container: 'flash',
						params: {
								wmode: 'transparent'
						}
				};
				
				var path = '/flash/flash.swf';
				
				// hidding flash bg
				if ($('flash-bg')) $('flash-bg').destroy();
				
				if (flashParams) path += '?'+flashParams;
				
				if ($('page-co-od-nas-dostanete')) {
					$extend(flashOptions, { width: 800,	height: 280});
					path = '/flash/zxmas2.swf';
				}
				if ($('page-april')) {
					$extend(flashOptions, { width: 800,	height: 280});
					path = '/flash/zxmas2.swf';
				}
				
			  if ($('flash')) var flash = new Swiff(path, flashOptions);
		}
 };

var OrderForm = {
	  init: function(){
			  
				if (!Browser.Engine.trident4){
					// Order form effect
					var blockOrderFx = new Fx.Slide('block-order', { duration: 500, wait: false });
					blockOrderFx.hide();
					
					// Insert fake button
					var fakeButton = new Element('p', {
							'class' : 'center',
							'html'  : '<img src="/img/button-fill-order.png" width="210" height="46" alt="Objednat zážitek" />'
					});
					fakeButton.inject($('block-order').getParent('div'), 'before');
					
					fakeButton = fakeButton.getElement('img');
					fakeButtonFx = new Fx.Tween(fakeButton, { property: 'opacity', duration: 300 });
					
					fakeButton.setStyle('cursor', 'pointer');
					fakeButton.addEvent('click', function(){
							fakeButtonFx.start(0);
							blockOrderFx.slideIn().chain(function(){
								var newPos = $('block-order').getPosition();
								document.id('block-order').getParent('div').setStyle('height', 'auto');
								// temporary solution
								//document.body.scrollTo(newPos.x, newPos.y);
	
							});
					});
					
					$('block-general-info').getElement('a[class=button-order]').addEvent('click', function(event){
						event.stop();
						blockOrderFx.show();
						fakeButtonFx.set(0);
						var newPos = $('block-order').getPosition();
								
						// temporary solution
						document.body.scrollTo(newPos.x, newPos.y);
					});
				}
				
				// Form client validation
				var form = $('block-order').getElement('form');
				form.addEvent('submit', function(event){
				    event.stop();
						OrderForm.validate(form);
				});
				
				// notice
				this.notice = form.getElement('div.notice');
				if (this.notice){
					this.notice.setStyle('cursor', 'pointer');
				  var noticeAnchor = this.notice.getElement('a');
					noticeAnchor.addEvent('click', function(event){
					  event.preventDefault();
					});
					this.notice.addEvent('click', function(event){
					  window.open(noticeAnchor.href);
					});
				}
				
				// Certificate block events
				var rpCertificate = $('radiopack-certificate');
				var rpCertificateWrapper = new Element('div', { 'id' : 'radiopack-certificate-wrapper' });
				    rpCertificateWrapper.wraps(rpCertificate);
				rpCertificateWrapper.setStyles({ 'position' : 'relative', 'overflow' : 'hidden' });
				rpCertificate.setStyle('position', 'relative');
				
				// Extra payment block events
				var rpExtraPayment = $('radiopack-extra-payment');
				var rpExtraPaymentWrapper = new Element('div', {'id' : 'radiopack-extra-payment-wrapper' });
				    rpExtraPaymentWrapper.wraps(rpExtraPayment);
			  rpExtraPaymentWrapper.setStyles({ 'position' : 'relative', 'overflow' : 'hidden' });
				rpExtraPayment.setStyle('position', 'relative');
				
				var rpPaymentType = $('radiopack-payment-type');
				
				if (rpPaymentType){
					rpPaymentTypeInputs = rpPaymentType.getElements('input');
					
					if (Browser.Engine.trident4){
						rpPaymentTypeInputs.each(function(element){
							element.addEvent('click', function(event){
								if (rpPaymentType.getElement('input').checked || rpPaymentType.getElementById('unicert-field').getElement('input').checked){
									rpCertificate.setStyle('display', 'block');
								} else {
									rpCertificate.setStyle('display', 'none');
								}
								if (rpPaymentType.getElementById('unicert-field').getElement('input').checked){
									rpExtraPayment.setStyle('display', 'block');
								} else {
									rpExtraPayment.setStyle('display', 'none');
								}
							});
						});
					} else {
						var rpCertificateFx = new Fx.Slide(rpCertificateWrapper, { duration: 400, link: 'cancel' });
						var rpExtraPaymentFx = new Fx.Slide(rpExtraPaymentWrapper, { duration: 400, link: 'cancel' }).hide();
						rpPaymentType.addEvent('click', function(event){
							if (rpPaymentType.getElement('input').checked || rpPaymentType.getElementById('unicert-field').getElement('input').checked){
								rpCertificateFx.slideIn();
							} else {
								rpCertificateFx.slideOut();
							}
							
							if (rpPaymentType.getElementById('unicert-field').getElement('input').checked){
								rpExtraPaymentFx.slideIn();
							} else {
								rpExtraPaymentFx.slideOut();
							}
						});
					}
				}
				
				if (rpExtraPayment){
					rpExtraPaymentInputs = rpExtraPayment.getElements('input');
					
					if (Browser.Engine.trident4){
						rpExtraPaymentInputs.each(function(element){
							element.addEvent('click', function(event){
								if (rpExtraPayment.getElement('input').checked){
									rpCertificate.setStyle('display', 'block');
								} else {
									rpCertificate.setStyle('display', 'none');
								}
							});
						});
					} else {
						if (!rpCertificateFx) { var rpCertificateFx = new Fx.Slide(rpCertificateWrapper, { duration: 400, link: 'cancel' }); }
						rpExtraPayment.addEvent('click', function(event){
							if (rpExtraPayment.getElement('input').checked){
								rpCertificateFx.slideIn();
							} else {
								rpCertificateFx.slideOut();
							}
						});
					}
				}
		},
	
		validate: function(form){
			var err = new Array();
			var fields = new Array();
			
			// contact information
			var contactFields = ['name', 'surname', 'street', 'city', 'zip', 'phone', 'email'];
			contactFields.each(function(value){
			    if ($('form-order-'+value).value == ''){
					    fields.include(form.getElement('label[for=form-order-' + value + ']').get('text').replace(':','')); 
			  	}
			});
			
			if (fields.length > 0){
					err.include('Je nutné vyplnit i následující položky:\n' + fields.join(', '));
			}
			
			
			// email address
			if ($('form-order-email').value){
					var mail = $('form-order-email').value;
					mail = mail.replace(/^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)+/, 'valid');
					if (mail != 'valid'){
						  err.include('Zadaná emailová adresa je neplatná. Prosím, zkontrolujte její zadání.');
					}
			}
			
			// zip code
			if ($('form-order-zip').value){
				  var zip = $('form-order-zip').value;
				  zip = zip.replace(' ', '').replace(/[0-9]{5}/, 'valid');
				  if (zip != 'valid'){
				 	    err.include('PSČ je neplatné. Prosím, zadejte pouze čísla (5 číslic), případně mezeru.');
				  }
			}
			
			// phone
			if ($('form-order-phone').value){
				  var phone = $('form-order-phone').value;
			    phone = phone.replace(/\+?([0-9 ]{9,20})/, 'valid');
					if (phone != 'valid'){
					    err.include('Telefonní číslo je neplatné. Prosím zadejte pouze čísla (min. 9 znaků), případně mezeru a znaménko +.');
					}
			}
			
			// company
			if ($('form-order-company').value){
					// ico
					var ico = $('form-order-ico').value;
					ico = ico.replace(/[0-9]{8}/, 'valid');
					if (ico != 'valid'){
						  err.include('IČO je neplatné. Prosím zadejte pouze čísla (právě 8 znaků) bez mezer.');
					}
					
					var dic = $('form-order-dic').value;
					dic = dic.replace(/[a-zA-Z]{2}[0-9]{8,10}/, 'valid');
					if (dic != 'valid'){
						  err.include('DIČ je neplatné. DIČ sestává z dvou písmen a 8 až 10 číslic.');
					}
			}
			
			// radiobutton sections
			var radioInputs = form.getElements('input[name=adventure]');
			if (radioInputs.length){
				var radioErr = true;
				radioInputs.each(function(element){
					if (element.checked) radioErr = false;
				});
				
				if (radioErr){
						err.include('V sekci "Výběr zážitku" je nutné zvolit jednu z nabízených možností.');
				}
			}
			
			radioInputs = form.getElements('input[name=place]');
			if (radioInputs.length){
				radioErr = true;
				radioInputs.each(function(element){
					if (element.checked) radioErr = false;
				});
				
				if (radioErr){
						err.include('V sekci "Lokalita" je nutné zvolit jednu z nabízených možností.');
				}
			}
			
			if ($('radiopack-certificate')){
				radioInputs = form.getElements('input[name=package]');
				radioErr = true;
				radioInputs.each(function(element){
				  if (element.checked) radioErr = false;
				});
				
				if (radioErr){
					err.include('Musíte zvolit jeden ze způsobů doručení certifikátu');
				}
			}
			
			
			// univerzalni certifikat
			if ($('unicert-field') && $('unicert-field').getElement('input.radio').checked){
				var unicert = $('form-order-unicert').value;
				if (unicert == ''){
					err.include('Musíte zadat číslo certifikátu, který chcete čerpat.');
				} else {
					unicert = unicert.replace(/[a-zA-Z0-9]{8}/, 'valid');
					if (unicert != 'valid'){
						err.include('ID certifikátu je neplatné. Zadat můžete právě 8 alfanumerických znaků.');
					}
				}
			}
			
			// souhlas
			if (!form.getElement('input[name=agreement]').checked){
				  err.include('Před odesláním formuláře musíte souhlasit se Všeobecnými obchodními podmínkami.');
			}
			
			// vyhodnoceni
			if (err.length){
			  	alert(err.join('\n\n'));
			} else {
			  	form.submit();
			}

			
		}
 };

var MakeSlides = {
	
	  init: function(){
			  
				if ($$('.toggler') && $$('.slide')) {
					  
						var togglers = $$('.toggler');
						var slides = $$('.slide');
					  var slideFx = [];
						
						slides.each(function(element, index){
						   slideFx[index] = new Fx.Slide(element, { duration: 700, wait: false, transition: Fx.Transitions.Cubic.easeOut });
							 slideFx[index].hide();
					  });
						
						togglers.setStyles({ 'text-decoration' : 'underline', 'cursor' : 'pointer' });
						
						togglers.each(function(element, index){
							 element.addEvent('click', function(event){
							     event.stop();
									 slideFx[index].toggle();
							 });
						});
				}
		}
 };

var Newsletter = {
	  
		init: function(){
		   
			 var input = $('block-zazitky-mailem').getElement('input[name=email]');
			 
			 input.addEvent('focus', function(){
				  if (this.value==this.defaultValue){this.value='';}
			 });
			 
			 input.addEvent('blur', function(){
					if (this.value==''){this.value=this.defaultValue;}
			 });
		}
		
 };

var Boxes = {
	  
		init: function(){
			  
				var box = $$('.item');
				if (box) {
					  box.setStyle('cursor', 'pointer');
					  box.each(function(element){
						    element.addEvent('click', function(event){
								    event.stop();
										window.location = element.getElement('a').getProperty('href');
								});
						});
				}
		}
 };

var UniCertForm = {
	  init: function(){
			  
				// Form client validation
				var form = $('form-unicert');
				form.addEvent('submit', function(event){
				    event.stop();
						UniCertForm.validate(form);
				});
				
				// Certificate block events
				var rpCertificate = $('radiopack-certificate');
				var rpCertificateWrapper = new Element('div', { 'id' : 'radiopack-certificate-wrapper' });
				    rpCertificateWrapper.wraps(rpCertificate);
				rpCertificateWrapper.setStyles({ 'position' : 'relative', 'overflow' : 'hidden' });
				rpCertificate.setStyle('position', 'relative');
				
				var rpPaymentType = $('radiopack-payment-type');
				
			  rpPaymentTypeInputs = rpPaymentType.getElements('input');
				
				if (Browser.Engine.trident4){
				  rpPaymentTypeInputs.each(function(element){
					  element.addEvent('click', function(event){
							if (rpPaymentType.getElement('input').checked){
								rpCertificate.setStyle('display', 'block');
							} else {
								rpCertificate.setStyle('display', 'none');
							}
						});
					});
				} else {
					var rpCertificateFx = new Fx.Slide(rpCertificateWrapper, { duration: 400, link: 'cancel' });

					rpPaymentType.addEvent('click', function(event){
						if (rpPaymentType.getElement('input').checked){
							rpCertificateFx.slideIn();
						} else {
							rpCertificateFx.slideOut();
						}
					});
				}
				
		},
	
		validate: function(form){
			var err = new Array();
			var fields = new Array();
			
			// contact information
			var contactFields = ['name', 'surname', 'street', 'city', 'zip', 'phone', 'email'];
			contactFields.each(function(value){
			    if ($('form-unicert-'+value).value == ''){
					    fields.include(form.getElement('label[for=form-unicert-' + value + ']').get('text').replace(':','')); 
			  	}
			});
			
			if (fields.length > 0){
					err.include('Je nutné vyplnit i následující položky:\n' + fields.join(', '));
			}
			
			
			// email address
			if ($('form-unicert-email').value){
					var mail = $('form-unicert-email').value;
					mail = mail.replace(/^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)+/, 'valid');
					if (mail != 'valid'){
						  err.include('Zadaná emailová adresa je neplatná. Prosím, zkontrolujte její zadání.');
					}
			}
			
			// zip code
			if ($('form-unicert-zip').value){
				  var zip = $('form-unicert-zip').value;
				  zip = zip.replace(' ', '').replace(/[0-9]{5}/, 'valid');
				  if (zip != 'valid'){
				 	    err.include('PSČ je neplatné. Prosím, zadejte pouze čísla (5 číslic), případně mezeru.');
				  }
			}
			
			// phone
			if ($('form-unicert-phone').value){
				  var phone = $('form-unicert-phone').value;
			    phone = phone.replace(/\+?([0-9 ]{9,20})/, 'valid');
					if (phone != 'valid'){
					    err.include('Telefonní číslo je neplatné. Prosím zadejte pouze čísla (min. 9 znaků), případně mezeru a znaménko +.');
					}
			}
			
			// company
			if ($('form-unicert-company').value){
					// ico
					var ico = $('form-unicert-ico').value;
					ico = ico.replace(/[0-9]{8}/, 'valid');
					if (ico != 'valid'){
						  err.include('IČO je neplatné. Prosím zadejte pouze čísla (právě 8 znaků) bez mezer.');
					}
					
					var dic = $('form-unicert-dic').value;
					dic = dic.replace(/[a-zA-Z]{2}[0-9]{8,10}/, 'valid');
					if (dic != 'valid'){
						  err.include('DIČ je neplatné. DIČ sestává z dvou písmen a 8 až 10 číslic.');
					}
			}
			
			// hodnota cetifikatu
			if ($('form-unicert-value').value == ''){
				err.include('Musíte zvolit hodnotu certifikátu.');
			}
			
			
			// souhlas
			if (!form.getElement('input[name=agreement]').checked){
				  err.include('Před odesláním formuláře musíte souhlasit se Všeobecnými obchodními podmínkami.');
			}
			
			// vyhodnoceni
			if (err.length){
			  	alert(err.join('\n\n'));
			} else {
			  	form.submit();
			}

			
		}
 };

var CertificateForm = {
	  init: function(){
			  
				// Form client validation
				var form = $('form-certificate');
				form.addEvent('submit', function(event){
				    event.stop();
						CertificateForm.validate(form);
				});
				
		},
	
		validate: function(form){
			var err = new Array();
			var fields = new Array();
			
			// contact information
			var contactFields = ['name', 'surname', 'phone', 'email', 'code', 'date'];
			contactFields.each(function(value){
			    if ($('form-certificate-'+value).value == ''){
					    fields.include(form.getElement('label[for=form-certificate-' + value + ']').get('text').replace(':','')); 
			  	}
			});
			
			if (fields.length > 0){
					err.include('Je nutné vyplnit i následující položky:\n' + fields.join(', '));
			}
			
			
			// email address
			if ($('form-certificate-email').value){
					var mail = $('form-certificate-email').value;
					mail = mail.replace(/^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)+/, 'valid');
					if (mail != 'valid'){
						  err.include('Zadaná emailová adresa je neplatná. Prosím, zkontrolujte její zadání.');
					}
			}
			
			// zip code
			/*if ($('form-certificate-zip').value){
				  var zip = $('form-certificate-zip').value;
				  zip = zip.replace(' ', '').replace(/[0-9]{5}/, 'valid');
				  if (zip != 'valid'){
				 	    err.include('PSČ je neplatné. Prosím, zadejte pouze čísla (5 číslic), případně mezeru.');
				  }
			}*/
			
			// phone
			if ($('form-certificate-phone').value){
				  var phone = $('form-certificate-phone').value;
			    phone = phone.replace(/\+?([0-9 ]{9,20})/, 'valid');
					if (phone != 'valid'){
					    err.include('Telefonní číslo je neplatné. Prosím zadejte pouze čísla (min. 9 znaků), případně mezeru a znaménko +.');
					}
			}
			
			// code
			if ($('form-certificate-code').value){
				var code = $('form-certificate-code').value;
				code = code.replace(/([a-zA-Z][0-9]{4}){2}/, 'valid');
				if (code != 'valid'){
					err.include('Kód certifikátu je neplatný. Prosím, zkontrolujte zadání.');
				}
										
			}
			
			// souhlas
			if (!form.getElement('input[name=agreement]').checked /*&& !form.getElement('input[name=agreement-personal]').checked*/){
				  err.include('Před odesláním formuláře musíte souhlasit se Všeobecnými obchodními podmínkami a se zpracováním osobních údajů.');
			} else {
				if (!form.getElement('input[name=agreement]').checked) err.include('Před odesláním formuláře musíte souhlasit se Všeobecnými obchodními podmínkami.');
				/*if (!form.getElement('input[name=agreement-personal]').checked) err.include('Před odesláním formuláře musíte souhlasit se zpracováním vašich osobních údajů.');*/
			}
			
			// vyhodnoceni
			if (err.length){
			  	alert(err.join('\n\n'));
			} else {
			  	form.submit();
			}

		}
 };



window.addEvent('domready', function(){

  Site.init();

  if ($('flash') && !$('page-homepage')) Flash.init(flashParams);
	
	MakeSlides.init();
	
	Boxes.init();
	
	if ($('block-order')) {	OrderForm.init();	}
	
	if ($('form-unicert')) { UniCertForm.init(); }
	
	if ($('form-certificate')) { CertificateForm.init(); }
	
	$$('.remooz').each(function(element){
	  new ReMooz(element, {
			resizeOptions : {
				duration: 400,
				transition: Fx.Transitions.Quart.easeOut
			},
			opacityResize: 0,
			cutOut: false,
			centered: true
		});
	});
	
	if ($('sidebar-payment')) new MiniSlideshow('sidebar-payment').start();

});
