/*
pravidla:

- input/select/textarea - dostane class typu validate-[string]

typy:
	string
	number
	email
	

*/

var ValidationMessages = {
	
	numberOfErrorsFoundIs : 'Počet chyb: ',

	invalidRequired : 'Tato položka je povinná.',
	invalidNumber : 'Vyplněno musí být číslo.',
	invalidEmail : 'E-mail je v nesprávném formátu.',
	
	customError : 'Musí být zašrtnuta jedna primární položka.',
	
	customError2 : 'Tato položka je povinná.'
}


var NiceFormValidator = {
	
	validateClass : 'validate',
	
	validateRequiredClass : 'validate-required',
	validateNumnerClass : 'validate-number',
	validateEmailClass : 'validate-email',
	
	validateCustomClass : 'validate-custom',
	validateCustomClass2 : 'validate-custom2',
	
	validationErrorClass : 'validation-error',
	
	cssFormItemBorder : '#666 solid 1px',
	
	boxErrorCountClass : 'validation-error-count',
	
	errors : 0,
	
	customCounter : 0,
	
	init : function(formId)
	{
		// pred validaci smazem defaultni hodnoty
		if($('#sh_client_name').val() == 'Jméno a příjmení' || $('#sh_client_name').val() == 'Tato položka je povinná.')
		{
			$('#sh_client_name').val('');
		}
		if($('#sh_client_email').val() == 'jmeno@domena.cz' || $('#sh_client_email').val() == 'Tato položka je povinná.')
		{
			$('#sh_client_email').val('');
		}
		if($('#sh_client_phone').val() == 've formátu 111 222 333' || $('#sh_client_phone').val() == 'Tato položka je povinná.' || $('#sh_client_phone').val() == 'E-mail je v nesprávném formátu.')
		{
			$('#sh_client_phone').val('');
		}
		
		NiceFormValidator.beforeValidation();
		
		$('#' + formId + ' .' + NiceFormValidator.validateClass).each(

			function()
			{				
				NiceFormValidator.validate($(this));
				if(NiceFormValidator.errors == 1)
				{
					$(this).focus();
				}
			}
		);
		
		NiceFormValidator.afterValidation();
		
		if(NiceFormValidator.errors > 0)
		{
			NiceFormValidator.showErrors();
			return false;
		}
		
		return true;
	},
	
	validate : function(formItem)
	{
		// required
		
		if(formItem.hasClass(NiceFormValidator.validateRequiredClass))
		{
			if(NiceFormValidator.validateRequired(formItem) == false)
			{
				NiceFormValidator.appendValidationError(formItem, ValidationMessages.invalidRequired);
				
				return false;
			}
		} 
		
		// email
		
		if(formItem.hasClass(NiceFormValidator.validateEmailClass))
		{
			if(formItem.val() != '')
			{
				if(NiceFormValidator.validateEmail(formItem) == false)
				{
					NiceFormValidator.appendValidationError(formItem, ValidationMessages.invalidEmail);
					
					return false;
				}
			}
		}
		
		// custom
		
		if(formItem.hasClass(NiceFormValidator.validateCustomClass))
		{
			if(NiceFormValidator.validateCustom(formItem) == false)
			{
				NiceFormValidator.appendValidationError(formItem, ValidationMessages.customError);
				
				return false;
			}
		}
		
		// custom 2
		
		if(formItem.hasClass(NiceFormValidator.validateCustomClass2))
		{
			if(NiceFormValidator.validateCustom2(formItem) == false)
			{
				NiceFormValidator.appendValidationError(formItem, ValidationMessages.customError2);
				
				return false;
			}
		}
		
		return true;
	},
	
	/* validation methods */
	
	validateRequired : function(formItem)
	{
		// if form item is checkbox do different way
		if(formItem.attr('type') == 'checkbox')
		{
			if(!formItem.is(':checked'))
			{
				NiceFormValidator.newError();
				return false;
			}
		}
		
		// all others
		
		if(formItem.val() == '')
		{
			NiceFormValidator.newError();
			return false;
		}
		
		return true;
	},
	
	validateEmail : function(formItem)
	{
		var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
		if(reg.test(formItem.val()) == false)
		{
			NiceFormValidator.newError();
			return false;
		}
		
		return true;
	},
	
	validateCustom : function(formItem)
	{		
		checkCount = 0;
		
		$('.validate-custom').each(
			
			function()
			{
				if($(this).is(':checked'))
				{
					checkCount++;
				}
			}
		);
		
		if(checkCount == 0)
		{
			NiceFormValidator.newError();
			return false;
		}
		
		return true;
	},
	
	validateCustom2 : function(formItem)
	{	
		checkCount = 0;
		
		formItem.find('.input-radio').each(
			
			function()
			{
				if($(this).is(':checked'))
				{
					checkCount++;
				}
			}
		)

		if(checkCount == 0)
		{
			NiceFormValidator.newError();
			return false;
		}
		
		return true;
	},
	
	validateStringMin: function(formItem)
	{
		
	},
	
	validateStringMax: function(formItem)
	{
		
	},
	
	/* error handling */
	
	appendValidationError : function(formItem, errorMessage)
	{
		formItem.css('border', 'red solid 1px');
		formItem.css('color', 'red');
		formItem.val(errorMessage);
		formItem.parent().append('<span class="' + NiceFormValidator.validationErrorClass + '"></span>');
	},
	
	showErrors : function()
	{
		$('.' + NiceFormValidator.validationErrorClass).animate(
			{
				'height' : '20px',				
				'opacity' : 1
			},
			800
		);
	},
	
	newError : function()
	{
		NiceFormValidator.errors++;
	},
	
	/* other methods */
	
	beforeValidation : function()
	{
		NiceFormValidator.errors = 0;
		$('.' + NiceFormValidator.validateClass).css('border', NiceFormValidator.cssFormItemBorder);
		$('.' + NiceFormValidator.validateClass).css('color', 'black');
		$('.' + NiceFormValidator.validationErrorClass).remove();
		$('.' + NiceFormValidator.validationErrorCountClass).remove();
	},
	
	afterValidation : function()
	{
		if(NiceFormValidator.errors > 0)
		{
			$('.' + NiceFormValidator.boxErrorCountClass).show()
			.append('<span class="' + NiceFormValidator.validationErrorCountClass + '">' + ValidationMessages.numberOfErrorsFoundIs + NiceFormValidator.errors + '</span>');
		}
		
		$('.' + NiceFormValidator.validationErrorCountClass).animate(
			{
				opacity : 1
			},
			800
		)
		
	}
	
}

function GAmerchCount(cityName)
{
    var city = cityName;
      
	var today = new Date();
	var order_id = today.getFullYear()+'.'+zeroFill(today.getMonth(),2)+'.'+zeroFill(today.getDate(),2)+'-'+zeroFill(today.getHours(),2)+':'+zeroFill(today.getMinutes(),2)+':'+zeroFill(today.getSeconds(),2);

	  _gaq.push(['_trackPageview']);
	  _gaq.push(['_addTrans',
		order_id,                     // order ID - required
		'Ukázková hodina',            // affiliation or store name
		'1',                          // total - required
		'0',                           // tax
		'0',                           // shipping
		city,                         // city
		'',                           // state or province
		''                            // country
	  ]);
	  _gaq.push(['_addItem',
		order_id,                     // order ID - required
		city,                    // SKU/code - required.
		city,                         // product name
		'',                           // category or variation
		'1',                          // unit price - required
		'1'                           // quantity - required
	  ]);

	  _gaq.push(['_trackTrans']); //submits transaction to the Analytics servers
}


$(document).ready(function(){

	
	$('#jq_show-hour-form').submit(function(){

		if(NiceFormValidator.init($(this).attr('id')))
		{
			/*
			var city = $('#jq_slCity').val();
			
			var today = new Date();
			var order_id = today.getFullYear()+'.'+zeroFill(today.getMonth(),2)+'.'+zeroFill(today.getDate(),2)+'-'+zeroFill(today.getHours(),2)+':'+zeroFill(today.getMinutes(),2)+':'+zeroFill(today.getSeconds(),2);
			
			// priprava dat pro GA
			frmOrderId = 1;
			frmThermCode = 1;
			frmCity = $('#jq_slCity').val();
			
			// GA
			var _gaq = _gaq || [];
			_gaq.push(['_setAccount', 'UA-10111170-1']);
			_gaq.push(['_trackPageview']);
			_gaq.push(['_addTrans',
			  frmOrderId,           // order ID - required
			  'Ukazkova hodina',  // affiliation or store name
			  '1',          // total - required
			  '',           // tax
			  '',              // shipping
			  frmCity,       // city
			  '',     // state or province
			  ''             // country
			]);
		  
			 // add item might be called for every item in the shopping cart
			 // where your ecommerce engine loops through each item in the cart and
			 // prints out _addItem for each
			_gaq.push(['_addItem',
			  frmOrderId,           // order ID - required
			  frmThermCode,           // SKU/code - required
			  frmCity,        // product name
			  '',   // category or variation
			  '1',          // unit price - required
			  '1'               // quantity - required
			]);
			_gaq.push(['_trackTrans']); //submits transaction to the Analytics servers
		  
			(function() {
			  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
			  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
			  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
			})();
			
			

			var gaJsHost = (("https:" == document.location.protocol ) ? "https://ssl." : "http://www.");
			document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
		  */
		  try{
			
			// priprava dat pro GA
			frmOrderId = 1;
			var today = new Date();
			frmThermCode = today.getFullYear()+'.'+zeroFill(today.getMonth(),2)+'.'+zeroFill(today.getDate(),2)+'-'+zeroFill(today.getHours(),2)+':'+zeroFill(today.getMinutes(),2)+':'+zeroFill(today.getSeconds(),2);
			
			frmCity = $('#jq_slCity').val();
			
			var pageTracker = _gat._getTracker("UA-10111170-1");
			pageTracker._trackPageview();
			pageTracker._addTrans(
				frmOrderId,           // order ID - required
				'Ukazkova hodina',  // affiliation or store name
				'1',          // total - required
				'',           // tax
				'',              // shipping
				frmCity,       // city
				'',     // state or province
				''             // country
			  );
		  
		  
			 // add item might be called for every item in the shopping cart
			 // where your ecommerce engine loops through each item in the cart and
			 // prints out _addItem for each 
			 pageTracker._addItem(
				frmOrderId,           // order ID - required
				frmThermCode,           // SKU/code - required
				frmCity,        // product name
				'',   // category or variation
				'1',          // unit price - required
				'1'               // quantity - required
			 );
		  
			 pageTracker._trackTrans(); //submits transaction to the Analytics servers
		  } catch(err) {}

			

			return true;
		}
		else
		{
			return false;
		}
	});
})
