$(function() {

/* ELEMENTS */
var travelingControl = $('#travelingControl');
var middle = $('#middle');
var menu = $('#menu');
var sidebar = $('#sidebar');
var sidebar_top;
var section = $('#content .section.control');
var budget_button = $('.control .btn');
var vechiles_radio = $('#budgetVechile input[type=radio]');
var footer = $('#footer');



// Prevent to call sidebar on pages that have no sidebar
if (sidebar.is('div'))
	sidebar_top = sidebar.offset().top - 30;



/* INIT */
// Fix height of middle for a trouble that should occurs when sidebar be fixed.
sidebar.parent().css('min-height', sidebar.height());



/* BEGIN IE FIX */
if ($.browser.msie) {
	if ($.browser.version < 8 && sidebar.is('div')) {
		sidebar.css('left', sidebar.parent().offset().left);
		$(window).resize(function() {
			sidebar.css('left', sidebar.parent().offset().left);
		});
	}
	if (vechiles_radio.is('input')) {
		vechiles_radio.parent().find(':checked').next().addClass('checked');
		vechiles_radio.next().css({zIndex: '1', position: 'relative'});
		vechiles_radio.next().mousedown(function() {
			$(this).parent().find('.checked').removeClass('checked');
			$(this).addClass('checked');
			$(this).prev().trigger('click');
		});
		vechiles_radio.focus(function() {
			$(this).next().trigger('mousedown');
		});
	}
	$(':input').focus(function() {
		$(this).addClass('focus');
		if ($('#orcamento').is('body')) $(this).next().addClass('active');
		if ($('#passageiros').is('body') && $(this).is('select')) $(this).next().addClass('focus');
	}).blur(function() {
		$(this).removeClass('focus');
		if ($('#orcamento').is('body')) $(this).next().removeClass('active');
		if ($('#passageiros').is('body') && $(this).is('select')) $(this).next().removeClass('focus');
	});
	$('button').focus(function() {
		$(this).addClass('active');
	}).blur(function() {
		$(this).removeClass('active');
	});
}
/* END IE FIX */



/* BEGIN TRAVELING */
if (travelingControl.is('div')) {
	// Elements
	var user_active = false;
	var controls = travelingControl.find('a.control');
	var icons = travelingControl.find('li a');
	var current_icon = icons.filter('.current');
	var next;
	var vechiles = $('#vechiles');
	var selector = $('#selector');
	var selector_left = vechiles.position().left - selector.width()/2 + current_icon.width()/2;

	// Init selector
	selector.css({visibility: 'visible', left: selector_left});

	// Init looping
	controlLooping();

	// On resize, fix selector
	$(window).resize(function() {
		selector_left = vechiles.position().left - selector.width()/2 + current_icon.width()/2;
		selector.move(selector_left + current_icon.position().left);
	});

	// Pause the looping when user interact
	travelingControl.hover(function() {
		user_active = true;
	}, function() {
		user_active = false;
	});

	// Trigger mousedown events
	controls.click(function(evt) {
		evt.preventDefault();
	});
	controls.filter('.left').mousedown(function() {
		var index = current_icon.parent().index() - 1;

		if (index >= 0)
			vechiles.children('li:eq('+index+')').find('a').trigger('mousedown');
		else
			vechiles.children('li:last-child').find('a').trigger('mousedown');
	});
	controls.filter('.right').mousedown(function() {
		var length = vechiles.children('li').length;
		var index = current_icon.parent().index() + 1;

		if (index < length)
			vechiles.children('li:eq('+index+')').find('a').trigger('mousedown');
		else
			vechiles.children('li:first-child').find('a').trigger('mousedown');
	});

	// Do the magic
	icons.click(function(evt) {
		evt.preventDefault();
		$(this).trigger('mousedown');
	})
	.mousedown(function() {
		if ($(this).hasClass('current')) return;

		var current = $(current_icon.attr('href'));
		next = $($(this).attr('href'));

		selector.move(selector_left + $(this).position().left);

		current_icon.removeClass('current');
		current.find('.desc').fadeOut(200);
		current.find('.btn').fadeOut(200, function() {
			current.find('img').animate({right: '-50%'}, 350, function() {
				current.find('img').css('right', '150%');
				current.removeClass('current');
			});
		});

		next.find('img').css({right: '150%'});
		next.find('.desc').css({display: 'none'});
		next.find('.btn').css({display: 'none'});

		$(this).addClass('current');
		setTimeout(function() {
			next.addClass('current');
			next.find('img').stop().animate({right:'50%'}, 400, function() {
				next.find('.desc').fadeIn(200);
				next.find('.btn').fadeIn(200);
			})}, 200);

		current_icon = $(this);

	});
}

// Control looping
function controlLooping() {
	if (!user_active) controls.filter('.right').trigger('mousedown');
	setTimeout(controlLooping, 5000);
}
/* END TRAVELING */



/* BEGIN SECTION CONTROL */
if (section.is('div')) {
	section.each(function (i, control) {
		// Elements
		var thumbs = $(control).find('li a');
		var current_thumb = thumbs.filter('.current');
		var current_img = $(control).find('img.current');
		var selector = $(control).find('.selector');
		var selector_left = current_thumb.width()/2 - selector.width()/2;

		// If has no thumbs
		if (!current_thumb.is('a')) return;

		// Init selector
		selector.css({left: current_thumb.position().left + selector_left});

		// On resize, fix selector
		$(window).resize(function() {
			selector.move(current_thumb.position().left + selector_left);
		});

		// Do the magic
		$(thumbs).click(function(evt) {
			evt.preventDefault();
		})
		.mousedown(function() {
			if ($(this).hasClass('current')) return;

			var next_img = $('#'+$(this).attr('rel'));

			current_thumb.removeClass('current');
			$(this).addClass('current');
			current_thumb = $(this);

			current_img.fadeOut(200, function() {
				current_img.removeClass('current');
			});

			next_img.fadeIn(200, function() {
				next_img.addClass('current');
			});

			current_thumb = $(this);
			current_img = next_img;

			selector.move(current_thumb.position().left + selector_left);
		});

	});
}



/* BEGIN BUDGET BUTTON */
if (budget_button.is('div')) {
	var mini_form = $('#miniForm');
	var mini_budget = $('#miniBudget');

	budget_button.click(function(evt) {
		evt.preventDefault();
	})
	.mousedown(function() {
		if (!$(this).hasClass('active')) {
			var params = $(this).find('a').attr('href').split('?');
			params = params[1].split('&');

			for (var i = 0; i < params.length; i++) {
				params[i] = decodeURI(params[i]).replace(/\+/g, ' ').split('=');
				switch (params[i][0]) {
					case 'veiculo':
					$(mini_budget).find('option[selected]').removeAttr('selected');
					$(mini_budget).find('option[value='+params[i][1]+']').attr('selected', 'selected');
					break;
					case 'cidade':
					$(mini_budget).find('input[name=budget_destination_city]').val(params[i][1]);
					break;
					case 'uf':
					$(mini_budget).find('input[name=budget_destination_uf]').val(params[i][1]);
				}
			}

			mini_budget.prependTo($(this).parent());
			budget_button.removeClass('active').parent().removeClass('active');
			$(this).removeClass('inactive').addClass('active').parent().addClass('active');

		} else {
			mini_budget.prependTo(mini_form);
			$(this).addClass('inactive').removeClass('active').parent().removeClass('active');
		}
	});

	$('html').click(function(evt) {
		target = $(evt.target).parents().andSelf();
		if (!$(target).is('.btn') && !$(target).is(mini_budget.getId()) && budget_button.filter('.active').is('div'))
			budget_button.filter('.active').trigger('mousedown');
	});
}
/* END BUDGET BUTTON */



/* BEGIN SIDEBAR */
if (sidebar.is('div')) {

	// Pin Control
	$('a.pin').click(function(evt) {
		evt.preventDefault();

		if (!$(this).hasClass('deactived')) {
			$(this).addClass('deactived');
			$(this).parent().addClass('fixed-disabled');
			if ($(this).parent().hasClass('fixed'))
				$(this).parent().removeClass('fixed');
			$.post($('link[rel=index]').attr('href'), {pin: ' deactived', sidebar: ' fixed-disabled'});
		} else {
			$(this).removeClass('deactived');
			$(this).parent().removeClass('fixed-disabled');
			$.post($('link[rel=index]').attr('href'), {pin: '', sidebar: ''});
		}
	});

	// Throw the scroll on the element referenced by its anchor
	if (menu.is('div')) {
		menu.find('a').click(function(evt) {
			evt.preventDefault();
			var anchor = $(this).attr('href');
			anchorMe(anchor);
		});
	}

	// Fix sidebar when the screen is below it
	$(window).bind('scroll load', function() {
		followElement(sidebar, sidebar_top + sidebar.find('a.pin').outerHeight(true), footer.offset().top - sidebar.outerHeight() - 40);
	});
}

// Follow element
function followElement(element, start_limit, final_limit) {
	if ($(window).scrollTop() >= start_limit && !element.hasClass('fixed-disabled') && element.parent().height() > element.height()) {
		if (!element.hasClass('fixed')) element.addClass('fixed');
		if ($(window).scrollTop() >= final_limit) {
			element.addClass('limit');
			element.parent().css('position', 'relative');
		}
		else if (element.hasClass('limit')) {
			element.removeClass('limit');
			element.parent().css('position', 'static');
		}
	}
	else if (element.hasClass('fixed'))
		element.removeClass('fixed');
}

// Anchor me
function anchorMe(anchor, time) {
	if (time == undefined) time = 100;
	var top = $(anchor).offset().top;

	$('html, body').animate({scrollTop: top}, time);
}
/* END SIDEBAR */



/* BEGIN PASSENGERS */
if ($('#passageiros').is('body')) {
	var del = 'button[name^="pass_del"]';
	var add = 'button[name="pass_add"]';
	var clear = 'button[name="pass_clear"]';
	var last_row = getLastRow();
	var last_row_index = getLastRowIndex();
	var terms_link = $('#passOwner label a');
	var params = new Array();

	// Del Row
	$(del).click(function(evt) {
		evt.preventDefault();
		removeRow($(this).parents('tr'));
		last_row = getLastRow();
		last_row_index = getLastRowIndex();
	});

	// Add Row
	$(add).click(function(evt) {
		evt.preventDefault();
		var quantity = $(this).prev().val();
		for (i = 0; i < quantity; i++) appendRow(last_row, ++last_row_index);
		$(this).trigger('blur');
	});

	// Enter
	$('tbody tr').keydown(function(evt) {
		if (evt.which == 13) {
			evt.preventDefault();
			if (!$(this).next().is('tr'))
				appendRow(last_row, ++last_row_index);

			$(evt.target).trigger('blur');
			$(this).next().find('input').filter('.focus').removeClass('focus');
			$(this).next().find('input').eq(0).trigger('focus');
		}
	})
	.find('input, select').focus(function() {
		if (!$(this).parents('tr').hasClass('focused'))
			$(this).parents('tr').addClass('focused');
	})
	.blur(function(evt) {
		var row = $(this).parents('tr');
		row.removeClass('focused');

		setTimeout(function() {
			if (!row.hasClass('focused')) {
				var param = '';

				for (i = 0; i < row.find('input, select').length; i++) {
					var element = row.find('input, select').eq(i);
					if (i > 0) param += ',';
					param += getName(element)+': {'+getIndex(element)+': \"'+element.val()+'\"}';
				}
							
				if (params[row.index()] != param) {
					params[row.index()] = param;
					eval("param = {"+param+"}");
					row.attr('class', 'loading');

					$.get($('link[rel=canonical]').attr('href'), param, function(result) {
						row.attr('class', $(result).find('tbody tr').attr('class'));
						row.find('input').each(function(i) {
							$(this).attr('class', $(result).find('tbody tr input').eq(i).attr('class'));
						});
					});

				}

			}
		}, 1);
	});

	// Clear Data
	$(clear).click(function(evt) {
		var msg = "Esta ação apagará todos os registros da Lista de Passageiros. Deseja realmente fazer isso?";
		if (!confirm(msg)) evt.preventDefault();
	});

	// Show the terms
	$(terms_link).click(function(evt) {
		evt.preventDefault();
		terms = $(this).parent().next();
		if (terms.css('display') == 'none') {
			$(this).addClass('up');
			terms.css('display', 'block');
		} else {
			$(this).removeClass('up');
			terms.css('display', 'none');
		}
	});

	// Remove invalid when it gets focused
	$('input.invalid').focus(function() {
		$(this).removeClass('invalid');
	});
}

// Get Last Row
function getLastRow() {
	var last_row = $('tbody').children('tr:last');
	return last_row;
}

// Get Last Row Index
function getLastRowIndex() {
	var last_row = getLastRow();
	var last_row_index = parseInt(getIndex(last_row.find('button')));
	return last_row_index;
}

// Append Row
function appendRow(row, index) {
	row = row.clone(true).reset().appendTo('tbody');

	row.find(':input').each(function() {
		$(this).attr('name', $(this).attr('name').replace(/\[\d*\]/, '['+index+']'));
	});
}

// Remove Row
function removeRow(row) {
	var del = $(row).find('button[name^="pass_del"]').eq(0);
	var name = getName(del);
	var index = getIndex(del);

	if (row.parent().children('tr').length > 1) row.remove();
	else row.reset();

	eval("$.post($('link[rel=canonical]').attr('href'), {"+name+": {"+index+": ''}});");
}

// Get Name
function getName(input) {
	var name = $(input).attr('name').replace(/\[.*\]/, '');
	return name;
}

// Get Index
function getIndex(input) {
	var index = $(input).attr('name').replace(/^.*\[(\d*)\]$/, '$1');
	return index;
}
/* END PASSENGERS */



/* BEGIN GENERIC EVENTS */
// Manipulating text inside inputs
$('input[title], textarea[title]').bind('focus blur', function(evt) {
	inputErase($(this), evt.type);
});

// Budget delete confirm
if ($('#orcamento').is('body')) {
	$('button[name$="del"]').click(function(evt) {
		var msg = "Esta ação apagará todos os dados preenchidos nos formulários de Orçamento (todas as etapas). Deseja realmente fazer isso?";
		if (!confirm(msg)) evt.preventDefault();
	});
}

// Date mask
$('input[name*="_date"]').keyup(function() {
	var barra = $(this).val().replace(/[^\/]/g, '').length;
	var length = $(this).val().replace(/[^0-9]/g, '').length;
	if ((length == 2 && !barra) || (length == 4 && barra === 1))
		$(this).val($(this).val() + '/');
});
/* END GENERIC EVENTS */



/* BEGIN GENERIC FUNCTIONS */
// Input erase
function inputErase(element, evt, default_attr) {
	if (default_attr == undefined)
		default_attr = 'title';

	switch (evt) {
		case 'focus':
		if (element.val() == element.attr(default_attr))
			element.val('');
		break;
		case 'blur':
		if (element.val() == '')
			element.val(element.attr(default_attr));
		break;
	}
}

// Reset
$.fn.reset = function(ref) {
	if (ref == undefined && $(this).is(':input')) ref = $(this).attr('title');
	else if (typeof ref == 'string' && $(this).attr(ref))
		ref = $(this).attr(ref);
	else if (typeof ref == 'string' && $(this).is(':input'))
		ref = '';

	if ($(this).is('input')) {
		$(this).val(ref);
		$(this).removeClass('invalid');
	}
	else if($(this).find('input, select').length > 0) {
		$(this).find('input, select').each(function() {
			$(this).reset(ref);
		});
	}

	if ($(this).is('tr')) $(this).removeAttr('class');

	return $(this);
}

// Move
$.fn.move = function(local, time) {
	if (time == undefined) time = 150;
	$(this).animate({left: local}, time);
}

// Get Id
$.fn.getId = function() {
	var id = '#' + $(this).attr('id');
	return id;
}

// Get Class
$.fn.getClass = function() {
	var classe = '.' + $(this).attr('class');
	return classe;
}

});
/* END GENERIC FUNCTIONS */