// JavaScript Document	
$(function() {	
	
	function emailValidation(val){
		var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
		var address = val;
		 if(reg.test(address) == false) { 
		 	return false;
		 }
		 return true;
	}
	
	function validateDateAndTime(){
		// TO DO
	}

	function validateForm(){
		var error = false;
		
		$('form .required').each(function(){
			var $this = $(this);
			var $parent = $this.parent('.fieldsWrap');
			
			if( $this.is(':checkbox') ){
				if( $this.is(':checked') ){
					$this.next('label').removeClass('error');					
				} else {
					$this.next('label').addClass('error');
					error = true;	
				}
			} 
			if( $this.is(':text') && $this.is(':visible') ){
				if( $this.val() == '' ){
					$parent.removeClass('fieldCorrect').addClass('fieldError');
					error = true;	
				}	else {
					$parent.removeClass('fieldError').addClass('fieldCorrect');
				}									
			} 
			if( $this.is('select') && $this.is(':visible') ){
				if( $this.val() == '' ){
					$parent.removeClass('fieldCorrect').addClass('fieldError');
					error = true;		
				} else {
					$parent.removeClass('fieldError').addClass('fieldCorrect');			
				}
			}
			if( $this.attr('id') == 'email' ){
				var status = emailValidation($this.val());
				if( status == true ){
					$this.parent().removeClass('fieldError').addClass('fieldCorrect');
				} else {
					$this.parent().removeClass('fieldCorrect').addClass('fieldError');
					error = true;
				}
			}
			if( $this.attr('id') == 'cemail' ){
				if( $('#email').val() != $this.val() || $this.val() == '' ){
					$this.parent().removeClass('fieldCorrect').addClass('fieldError');
					error = true;
				} else {
					$this.parent().removeClass('fieldError').addClass('fieldCorrect');
				}
			}			
		});

		if( error == true ){
			alert('An error has occurred. Check out the form and try again.');
			return false;
		} else {
			return true;
		}
	}
	
	$('form .required').bind('click keyup focusout change', function(e){	
			var $this = $(this);
			
			if( e.type === 'focusout' || e.type === 'keyup' || e.type == 'change' ){
				if( $this.val() == '' || $this.is(':text') && $this.val().length < 3 ){
					$this.parent().removeClass('fieldCorrect').addClass('fieldError');
				}	else {
					$this.parent().removeClass('fieldError').addClass('fieldCorrect');
				}						
				if( $this.attr('id') == 'email' ){
					var status = emailValidation($this.val());
					if( status == true ){
						$this.parent().removeClass('fieldError').addClass('fieldCorrect');
					} else {
						$this.parent().removeClass('fieldCorrect').addClass('fieldError');
					}
				}
				if( $this.attr('id') == 'cemail' ){
					if( $('#email').val() != $this.val() || $this.val() == '' ){
						$this.parent().removeClass('fieldCorrect').addClass('fieldError');
					} else {
						$this.parent().removeClass('fieldError').addClass('fieldCorrect');
					}
				}
			} else if( e.type == 'click' && $this.is(':checkbox') ){
				if( $this.attr('checked') == '' ){
					$this.next('label').addClass('error');
				} else {
					$this.next('label').removeClass('error');
				}			
			}

	});
	
	$('#submitStep2').bind('click', validateForm );
	
/* DATE & TIME SELECT */
// set default date
	$('.mkdata').each(function(){
		var $this = $(this);
		var date = $this.attr('data-current');
		if( $(this).val() == '' && typeof(date) !== 'undefined' ){
			$this.val(date);
		}
		$this.attr('readonly','readonly');
	});

	// set time (hours und minutes)
	$('.timeWrap').bind('change', function(){
		setNewTime($(this));
	});
	
	function setNewTime(that){
		var $this = that;
		var $date = $this.find('input');
		var hours = $this.find('select.timeHours').val();
		var minutes = $this.find('select.timeMinutes').val();
		
		$date.val( hours + ':' + minutes + ':00');	
	}
	
	if( $('body').hasClass('step2') ){
		setNewTime( $('#homeTimeUpdater') );
	}
	
	function updateTime(service_id){
		var $time = $('#service'+service_id+'-time');
		var new_time = '';
		var hours, minutes;
		
		if( $time.val() == '' ){
			hours = $('#service'+service_id+'-time-hours option:selected').val();		
			minutes = $('#service'+service_id+'-time-minutes option:selected').val();
			new_time = hours+':'+minutes+':00';
			$time.val(new_time);
		}
	}
	
// FLOATER
	var msie6 = $.browser == 'msie' && $.browser.version < 7;
	var $wrap = ( $('#mki-price').length != 0 ) ? $('#mki-price') : 'null'
	if ( !msie6 && $wrap != 'null' ) {
		var top = $wrap.offset().top;
		
		$(window).scroll(function () {
			var y = $(window).scrollTop();
			
			if (y >= top) {
			    $('#mki-price').addClass('fixed');
			} else {
			    $('#mki-price').removeClass('fixed');
			}
		});
	}

	$.datepicker.setDefaults($.datepicker.regional["pl"]);
	$(".mkdata").datepicker({
		minDate: "+0D",
		maxDate: "+1Y",
		dateFormat: "yy-m-d",
		//defaultDate: $.datepicker.parseDate("d m y", "31 8 2009"),
		//selectDefaultDate: true,
		show: 'both',
		buttonImage: '/images/cal.png',
		firstDay: 1
		
	});
	
	$("a.fancy").fancybox({
		'overlayColor' : '#000',
		'overlayOpacity' : 0.7
	});

/* stepper */
	$('.stepperWrap input').attr('readonly', 'readonly');
	$('.stepperUp, .stepperDown').bind('click', function(e){
		var $this = $(this);		
		var $input = $this.parent().prev();
		var min_value = $input.attr('data-min');
		var current_val = parseInt( $input.val() );
		
		if( $this.hasClass('stepperUp') ){
			// increment
		 if( typeof( parseInt( $input.val() ) ) === typeof(1) && !isNaN( parseInt( $input.val() ) ) ){
		 	$input.val(current_val + 1);
		 } else {
		 	$input.val('1');
		 }
		} else {
			// decrement
			if( parseInt( $input.val() ) > min_value ) {			
				$input.val(current_val - 1);
			} else {
				$input.val(min_value);
			}
		}
		
		if( $this.hasClass('added') ){
			var id = $this.attr('id');
			var service_id = id.split('-')[1];
			updateAddedPrice(service_id, $input.attr('id'));
		} else if( !$this.hasClass('dontUpdatePrice') ){
			updatePrice(main_service, $input.attr('id'));
		}
	});

// show additional services inputs
	$('#additional').delegate('input[type=checkbox]', 'click', function(e){
		var $this = $(this);
		var $target = $this.parent().next();
		
		getServicePricesArray($this.val());
		
		if( $target.hasClass('hidden') ){
			$target.removeClass('hidden');
			addServiceToList(this.id, $(this).next().text());
			
			var id = $this.attr('id');
			var service_id = id.split('-')[1];			
			updateAddedPrice(service_id, 'person-'+service_id);
			onloadUpdateSelect('type_destination-'+service_id);
			updateTime(service_id);
		} else {
			$target.addClass('hidden');
			removeServiceFormList(this.id);
			totalPriceUpdate();
		}
	});
	
	$('#additional input[type=checkbox]').each(function(){
		var $this = $(this);
		var $target = $this.parent().next();
		
		getServicePricesArray($this.val());
		
		if( $this.is(':checked') ){
			$target.removeClass('hidden');
			addServiceToList(this.id, $(this).next().text());
			
			var id = $this.attr('id');
			var service_id = id.split('-')[1];			
			updateAddedPrice(service_id, 'person-'+service_id);
			//type_destination-22
			onloadUpdateSelect('type_destination-'+service_id);
		} else {
			$target.addClass('hidden');
			removeServiceFormList(this.id);
			totalPriceUpdate();
		}		
	});
	
// add to price list	
	function addServiceToList(id, service_name){
		var wrap = '<li id="'+id+'-wrap"><strong>'+service_name+'</strong><div class="priceWrap"><span id="'+id+'-price">0</span> PLN</div></li>';
		$('#serviceListPrice').append(wrap);
	}
	
// remove form price list
	function removeServiceFormList(id){
		var element = '#'+id+'-wrap';
		$(element).remove();
	}	
	
	function showElement(element){
		if( element.hasClass('hidden') ) element.removeClass('hidden');
	}	
	
	function hideElement(element){
		if( !element.hasClass('hidden') ) element.addClass('hidden');	
	}
	
// destination type
	$('.selectTypeDestination').bind('change', function(e){
		var $this = $(this);
		var selected = parseInt( $this.find('option:selected').val() );

		var arr = [];
		var $addAddress = $this.parents('fieldset:eq(0)').siblings('fieldset.addAddress');
		var $destinationAddress = $('#'+$this.attr('data-id'));
		var $backup = $('#'+$this.attr('data-id-backup'));
		
		if( isNaN(selected) ){

			hideElement($destinationAddress);
			hideElement($addAddress);
			
		} else if( selected == -1 ){
			
			hideElement($destinationAddress);
			showElement($addAddress);
			$addAddress.removeClass('right').addClass('left');
			
			// set "other" as selected becouse is reqiured
			$destinationAddress.find('.showOtherAddres').append('<option value="-1" selected="selected">Other</option>');
			
		} else {
			hideElement($addAddress);
			for( service_id in destination2type ){
				if( destination2type[service_id] == selected ){
					arr.push( service_id );
				}
			}
			
			showElement($destinationAddress);
			return updateDestinationSelect(arr, $backup);
		}
	});	
	
	function onloadUpdateSelect(id){
		var $this = $('#'+id);
		var selected = parseInt( $this.find('option:selected').val() );

		var arr = [];
		var $addAddress = $this.parents('fieldset:eq(0)').siblings('fieldset.addAddress');
		var $destinationAddress = $('#'+$this.attr('data-id'));
		var $backup = $('#'+$this.attr('data-id-backup'));
		
		if( isNaN(selected) ){

			hideElement($destinationAddress);
			hideElement($addAddress);
			
		} else if( selected == -1 ){
			
			hideElement($destinationAddress);
			showElement($addAddress);
			$addAddress.removeClass('right').addClass('left');
			
			// set "other" as selected becouse is reqiured
			$destinationAddress.find('.showOtherAddres').append('<option value="-1" selected="selected">Other</option>');
			
		} else {
		
			hideElement($addAddress);
			
			for( service_id in destination2type ){
				if( destination2type[service_id] == selected ){
					arr.push( service_id );
				}
			}
			
			showElement($destinationAddress);
			return updateDestinationSelect(arr, $backup);
		}
	}
	
	onloadUpdateSelect('type_destination');
	
	function updateDestinationSelect(services, backup){
		var arr = [];
		backup.find('option').each(function(i, v){
			for( var s in services ){
				if( $(this).val() == services[s] ){
					arr.push(v);
				}
			}		
		});		
		return appendToCopy(arr, backup);
	}
	
	function appendToCopy(elements, backup){
		var default_element = '<option value="">-- Please select --</option>';
		var other_element = '<option value="-1">Other</option>';		
		var $new_select = $('#'+backup.attr('data-id'));
		$new_select.find('option').remove();
		
		$new_select.append(default_element);
		for( var e in elements ){
			$(elements[e]).clone().appendTo($new_select);
		}	
		$new_select.append(other_element);		
	}
	
	$('.showOtherAddres').bind('change', function(e){
		var $wrap = $(this).parents('fieldset:eq(0)').siblings('fieldset.addAddress');
		if( $(this, ':selected').val() == '-1' ){
			$wrap.removeClass('hidden').addClass('right');
		} else {
			$wrap.addClass('hidden').removeClass('right');			
		}
	});
	
/*
	function test(){
		$('.showOtherAddres:visible').each(function(){
			var $wrap = $(this).parents('fieldset:eq(0)').siblings('fieldset.addAddress');
			if( $(this, ':selected').val() == '-1' ){
				$wrap.removeClass('hidden').addClass('right');
			} else {
				$wrap.addClass('hidden').removeClass('right');			
			}			
		});
	}
	test();
*/

}); /* end of dom-ready */


// get price form JSON obj
function getPrice(service_arr, id){
	var people = parseInt( document.getElementById(id).value );
	
	for( var v in service_arr ){
		var start = v.split("_")[0];
		var stop = v.split("_")[1];
		if( start <= people && people <= stop ){
			
			return service_arr[v];
		}
	}	
}

// update main price
function updatePrice(main_service, id){
	var price = getPrice(main_service, id);
	if( typeof price === 'undefined' ) price = 0;
	document.getElementById('maincost').innerHTML = price;	
	
	totalPriceUpdate();
}

// update added prices
function updateAddedPrice(service_id, id){	
	var added_service = service_prices[service_id];
	var price = getPrice(added_service, id);
	if( typeof price === 'undefined' ) price = 0;
	document.getElementById('serv-'+service_id+'-price').innerHTML = price;
	
	totalPriceUpdate();
}

// update summary price
function totalPriceUpdate(){
	var total_price = 0;
	var prices = document.getElementById('serviceListPrice').getElementsByTagName('span');
	
	var price = []
	for( var i=0; i<prices.length; i++ ){
		price.push( parseInt( prices[i].innerHTML ) );
	}
	
	for( var i in price ){
		total_price = total_price + price[i];
	}
	
	document.getElementById('totalcost').innerHTML = total_price;
}

function getServicePricesArray(id){
	//console.log(id, service_prices[id]);
	return service_prices[id];
}

// update price on load
(function(){
	var body = document.getElementsByTagName('body')[0];
	if( body.className == 'step2' ){
		updatePrice(main_service, 'person');
	}
})();

