// JavaScript Document

var Taxes =  {
	
	init: function(){
		
// clickable blocks
		$$('.clickable').each(function(item){
		  item.setStyle('cursor', 'pointer');
			var anchor = item.getElement('a');
			if (anchor){
				item.addEvent('click', function(){
				  window.location = anchor.get('href');
				});
				anchor.addEvent('click', function(event){
				  event.stopPropagation();
				});
			}
			
		});
		
		if ($('print'))	{
			document.id('print').getElement('a').addEvent('click', function(){
				print();
			});
		}
		
		if(Browser.Engine.trident && Browser.Engine.version < 5) {
			if ($('menu')) Taxes.Menu.init();
		}
		
	}
};		

Taxes.Menu = {
	
	init: function(){
		this.container = document.id('menu');
		
		this.items = $$('#menu > ul > li');
		
		this.items.each(function(item){
		  var ul = item.getElement('ul');
			if (ul){
				item.addEvents({
				  'mouseenter': function(){
						ul.addClass('block');
					},
					'mouseleave': function(){
						ul.removeClass('block');
					}
				});
			}
		});
	}
};
		
		

var oldIE = (Browser.Engine.trident && Browser.Engine.version < 5);

var PNGFix = new Class({

  initialize: function(img){
		this.img = $(img);
    this.src = this.img.get('src');
		this.img.set('src', '/img/blank.gif');
		this.img.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+this.src+'", sizingMethod="image")';
	}
	
});


var InputValidator = new Class({

  Implements: [Options, Events],
	
  options: {
		required: false,
		tests: []
	},
	
  initialize: function(input, options){
		this.setOptions(options);
		this.input = $(input);
		this.tests = new Array(this.options.tests).flatten();
		this.errors = [];
		this.input.addEvent('blur', function(){
		  this.validate();
		}.bind(this));
		
		this.errorMark = null;
		
		// events
		this.addEvent('error', function(event){
		  this.placeErrors();
		});
		this.addEvent('success', function(){
		  this.removeErrors();
		});
		
		return this;
	},
	
	addTest: function(test, message){
		this.tests.include(test, message);
	},
	
	validate: function(){
		this.errors.empty();
		var value = this.input.value.trim();
		if (value == ''){
			if (this.options.required) this.errors.include('Toto pole je povinné.');
		} else {
			this.tests.each(function(test){
				value.test(test.regexp) ? this.errors.erase(test.message) : this.errors.include(test.message);
			}, this);
		}
		this.errors.length ? this.fireEvent('error') : this.fireEvent('success');
	},
	
	getError: function(){
		return this.errors;
	},
	
	placeErrors: function(){
	  var parent = this.input.getParent('td');
		var message = this.errors.join('<br />');
		if (this.errorMark) this.errorMark.destroy();
		this.errorMark = new Element('span',{
		  'class': 'error-mark',
			'text': message
		}).inject(parent);
		parent.addClass('error');
	},
	
	removeErrors: function(){
	  var parent = this.input.getParent('td');
		parent.removeClass('error');
		if (this.errorMark) this.errorMark.destroy();
	}
	
});

var FormOrder = {
	
	init: function(){

		this.form = $('form-order');
		
		if ($$('.form-inquiry')) {
			this.validatedItems = [
				new InputValidator('form-order-name',    { required: true }),
				new InputValidator('form-order-email',   { required: true, tests: { regexp: /[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}/, message: 'Zadaná emailová adresa je neplatná.' } }),
				new InputValidator('form-order-phone',   { required: true, tests: { regexp: /^[0-9 ]{9,12}$|^[0-9\+ ]{13,16}$/, message: 'Neplatný formát telefonního čísla.' } })
			];
		} else {
			this.validatedItems = [
				new InputValidator('form-order-name',    { required: true }),
				new InputValidator('form-order-surname',    { required: true }),
				new InputValidator('form-order-email',   { required: true, tests: { regexp: /[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}/, message: 'Zadaná emailová adresa je neplatná.' } }),
				new InputValidator('form-order-phone',   { required: true, tests: { regexp: /^[0-9 ]{9,12}$|^[0-9\+ ]{13,16}$/, message: 'Neplatný formát telefonního čísla.' } }),
				new InputValidator('form-order-street',    { required: true }),
				new InputValidator('form-order-city',    { required: true }),
				new InputValidator('form-order-psc',    { required: true })
			];
		}
	
		this.form.addEvent('submit', function(event){
		  event.stop();
		  if (this.isValid()){
				this.form.submit();
			} else {
				alert('Prosím, vyplňte správně všechna požadovaná pole.');
			}
		}.bind(this));
		
		// anti
		this.form.getElement('noscript').destroy();
		new Element('input', {
		  'type': 'hidden',
			'name': 'anti',
			'value': 'taxes'
		}).inject(this.form);

	},
	
	isValid: function(){
		var errors = 0;
		this.validatedItems.each(function(item){
			item.validate();
			errors += item.getError().length;
		});
		return !errors;
	}
	
};




window.addEvent('domready', function(){

  Taxes.init();

	if ($('form-order')) FormOrder.init();


});

