$(function() {
	Activa.init();
	flash_messages();
	tuneForms();
	refreshBasketSummaryIfNeeded();
	$("a.popup").click(function(){
		var f = Math.random() * 100000;
		var win = window.open($(this).attr('href'),'activa_popup_'+f,'width=800,height=600,scrollbars=yes,resizable');
		return false;
	});
	$("#add_item_form input.product, #fast_order_form input.product, #fast_order_form td.product_amount input").focus(function() {
		miniInfo.updateRequest($(this),1);
	}).keyup(function() {
		miniInfo.updateRequest($(this),0);
	}).change(function() {
		miniInfo.updateRequest($(this),0);
	});
	$('#ajax_navigation div.submenus li').live('click', function(e) {
		if ($(e.target).is('li')) {
			window.location = $(e.target).find('a').attr('href');
		}
	});
});

var Activa = {};

Activa.init = function() {
	Activa.Breadcrumbs.init();
	Activa.Forms.init();
}

Activa.sslSwitch = function() {
	var $ssl = $('#login_ssl').attr('disabled','');
	var $login = $('#login');
	var $register = $('#registration_link');

	var login_ssl_url = $('meta[name="login_ssl_url"]').attr('content');
	var registration_ssl_url = $('meta[name="registration_ssl_url"]').attr('content');
	var login_nonssl_url = $('meta[name="login_nonssl_url"]').attr('content');
	var registration_nonssl_url = $('meta[name="registration_nonssl_url"]').attr('content');

	$ssl.click(function() {
		if ($ssl.is(':checked')) {
			$login.attr('action', login_ssl_url);
			$register.attr('href', registration_ssl_url);
		} else {
			$login.attr('action', login_nonssl_url);
			$register.attr('href', registration_nonssl_url);
		}
	});
}

Activa.Breadcrumbs = {
	init: function() {
		$('.overlay').live('click', function() {
			Activa.Breadcrumbs.clean();
			$('.overlay').hide().remove();
			$('body.has_overlay').removeClass('has_overlay');
		});
		$('.breadcrumbs > li').click(function(e) {
			if ($(this).is('.active') && $(e.target).hasClass('remote_link')) {
				Activa.Breadcrumbs.clean();
				return false;
			}
		});
	},
	clean: function($link) {
		this.hideNavigation();

		var $active_crumb = $('ul.breadcrumbs > li.active').removeClass('active');
		var $wrap = $active_crumb.children('div.wrap');
		var $wrap_content = $wrap.html();
		$wrap.remove();
		$active_crumb.html($wrap_content);
	},
	makeActive: function() {
		$('div.cat_list',this.$item).prepend('<div class="top"></div>').append('<div class="bottom"></div>').addClass('decor');
		this.$item.not('.active').wrapInner('<div class="wrap"></div>').addClass('active');

		$('body').addClass('has_overlay').prepend('<div class="overlay"></div>');
	},
	showNavigation: function($link, source, cache) {
		this.$item = $link.parents('li');

		if (!cache) {
			$.data(this.$item.get(0), 'cache', source);
		}

		if (this.$item.is('.active')) {
			this.hideNavigation();
		} else {
			this.clean();
		}

		this.$item.append(source);
		this.makeActive(this.$item);
	},
	hideNavigation: function() {
		$("#ajax_navigation").remove();
	},
	showLoader: function($link, source) {
		this.$item = $link.parents('li');

		this.clean();
		this.$item.append(source);
		this.makeActive();
	}
}

Activa.Favourites = {
	CONTAINER_ID: 'favourite_list',
	submitting: false,

	init: function() {
		this.$list = $('#'+this.CONTAINER_ID);
		this.$forms = this.$list.find('form');

		this.$forms.submit(this.handleSubmit);
		this.handleSorting();
	},

	handleSubmit: function(e) {
		if (!Activa.Favourites.submitting) {
			Activa.Favourites.submitting = true;
			var $form = $(e.target);
			var $forms = Activa.Favourites.$forms.not($form);

			$forms.filter(function() {
				return parseInt($(this).find(':text').val());
			}).submit();

			Activa.Favourites.submitting = false;
		}
	},

	handleSorting: function() {
		$('div.top', this.$list).css('padding-left','0').prepend('<div class="handle"></div>');

		this.$list.sortable({
			axis: 'y',
			handle: 'div.handle',
			update: function(e, ui) {
				var $sorted = $('#'+ui.item.attr('id'));
				var $sibling_upper = $sorted.prev('li');
				var $sibling_lower = $sorted.next('li');

				$('#move_form input[name=id]').val($sorted.attr('id'));
				$('#move_form input[name=sibling_upper]').val($sibling_upper.attr('id'));
				$('#move_form input[name=sibling_lower]').val($sibling_lower.attr('id'));
				$('#move_form').submit();
			}
		});
	}
}

function flash_messages() {
	var $heading = $('#content h2:first');

	if ($heading.length) {
		var $msg = $('div.flash','#header').insertAfter($heading).removeClass('flash').addClass('message').show();
	} else {
		return false;
	}
}

function mini_overviewHover() {
	var $mo = $('div.mini_overview');
	var $list = $mo.find('ul');
	var $items = $list.find('li');

	$items.each(function() {
		var $item = $(this);
		var $img = $item.find('img').insertBefore($list);
		$item.data('img',$img);

		if ($item.is('.active')) { $img.show(); }

		$item.mouseenter(function() {
			$mo.find('img').hide();
			$item.siblings().removeClass('active');
			$item.addClass('active').data('img').show();
		}).click(function() {
			window.location = $('a', $item).attr('href');
			return false;
		}).css('cursor','pointer');
	});
}

function changeContext() {
	var $inactive_contexts = $('#inactive_contexts');

	if ($inactive_contexts.length) {
		var $trigger = $('#context_switcher');

		$trigger.toggle(
			function() {
				$inactive_contexts.show();
			},
			function() {
				$inactive_contexts.hide();
			}
		);
	}
}

Activa.Forms = (function() {
	return {
		init: function() {
			Activa.Forms.makeNiceLegends();
		},
		makeNiceLegends: function() {
			$('fieldset.nice_legend').each(function() {
				var $fieldset = $(this);
				var heading = $fieldset.find('legend').remove().text();
				$('<h3>').text(heading).prependTo($fieldset);
			});
			$('fieldset.no_legend legend').hide();
		}
	};
})();

function prepareTableHoverMagic() {
	var $rows = $('table.hover_magic tbody tr');

	$rows.find('td:first-child').addClass('first-child');
	$rows.addClass('hidden').hover(
		function() {
			$(this).removeClass('hidden').addClass('active');
		},
		function() {
			$(this).removeClass('active').addClass('hidden');
		}
	);
}

function tuneForms() {
	// multiselect
	$("#unselect_all_menu, #unselect_all_brand").click(function(){
		var $options = $(this).next('select').children('option');
		$options.attr('selected','');
		return false;
	});
	// tooltips
	$('fieldset > div:has(.help)').addClass('has_help').each(function() {
		var $container = $(this);

		if (!$container.find('.fixed').length) {
			var $input = $('input:text',$container);

			if($input.length) {
				var top = $input.position()['top']-7;
				var left = $input.position()['left'] + $input.outerWidth() + 4;
				var $help = $('div.help',$container).css({
					position: 'absolute',
					top: top+'px',
					left: left+'px'
				});
			}

			$input.focus(function() {
				$help.fadeIn();
			}).blur(function() {
				$help.fadeOut();
			});
		}
	});
	// required fields
	var required_flag = '*';
	$('div.required label span, p.legend span').text(required_flag);
	// custom selectboxes
	$('#id_search_menu').selectbox();
	$('#id_change_identity_to, #id_search_accessories_kind, #id_search_accessories_device, #id_search_accessories_brand, #id_select_template_id, #id_order_customer_id, #id_favourite_menu, #id_claim_subject').selectbox();
	// custom file input
	if ($('#order_attachment').length) {
		$('#order_attachment').filestyle({
			imageheight : 28,
			imagewidth : 86,
			width : 244
		});
	}
	// hide the basket update button
	$('#basket_summary_form div.submit input:first').hide();
	// text fields focus handling
	$(':text').each(function() {
		var $input = $(this);
		var init_val = $input.get(0).getAttribute('value');
		var init_val_search;

		if($input.attr('id')=='id_search_q') {
			init_val_search = $input.prev('label').text();
		}

		if(init_val == "0" || (($input.attr('id') == "id_extended_search_q") && (!getQueryParamVal('extended_search_q'))) || (init_val_search && (init_val_search == init_val))) {
			$input.focus(function() {
				if($input.val() == init_val) {
					$input.val('');
				};
			}).blur(function() {
				if($input.val() == '') {
					$input.val(init_val);
				};
			});
		};
	});
	// focus and select search input on the search result page
	if (getQueryParamVal('search_q') || getQueryParamVal('extended_search_q')) {
		$('#id_search_q, #id_extended_search_q').focus().select();
	};
	// showhide the create_order_template_form
	var $create_order_template_form = $('#create_order_template_form').hide();
	$('#widget_create_order_template p:first-child a').click(function() {
		$create_order_template_form.toggle();
		return false;
	});
	// showhide the return_order form
	var $return_order_field = $('#return_order_field').hide();
	$('a[href="#return_order_field"]').click(function() {
		if($return_order_field.is(':visible')) {
			$return_order_field.fadeOut();
		} else {
			$return_order_field.fadeIn(function() {
				$(this).find('textarea').focus();
			});
		}
		return false;
	});
}

var miniInfo = {
	url: '',
	request: 0,
	element: '',

	updateRequest: function($elm,focus) {
		var focus = focus ? focus : 0;
		this.element = $elm;

		if(this.request==1 && !focus) {
			return;
		}

		this.update();
	},

	 update: function() {
		var $elm = this.element;
 		var catalog_id = $elm.parents('tr').find('td.product_catalog_id input').val();
		var amount = $elm.parents('tr').find('td.product_amount input').val();

		if(catalog_id.length>=10) {
			var that = this;
			this.request = 1;
			$.getJSON(miniInfo.url, { catalog_id: catalog_id, amount: amount }, function(data) {
				$("#ajax_mini_info_box").remove();
				$elm.parents('form').after('<div id="ajax_mini_info_box">' + data.source + '</div>');
				$elm.parents("tr").find("td.product_price").html(data.price);
				$elm.parents("tr").find("td.product_total_price").html(data.total_price);
				$elm.parents("tr").find("td.product_availability").html(data.availability);
				that.request = 0;
				if (($elm.parents('tr').find('td.product_catalog_id input').val() != catalog_id) || ($elm.parents('tr').find('td.product_amount input').val() != amount)) {
					that.update();
				}
			});
		}
	}
};

function raiseIdByOne(old_id,separator) {
	var split_by = separator || '_';

	var arr = old_id.split(split_by);
	arr[arr.length-1] = parseInt(arr[arr.length - 1],10) + 1;

	var new_id = arr.join(split_by);

	return new_id;
}

function showOverlay(bgcolor) {
	var $overlay = $('#overlay').length ? $('#overlay') : $('<div id="overlay"></div>').appendTo('body').click(hideOverlay);

	var page_height = $(document).height();
	var page_width = $(document).width();

	$overlay.css({
		width: page_width,
		height: page_height,
		backgroundColor: bgcolor || '#000',
		opacity: 0.5
	}).fadeIn();
}
function hideOverlay() {
	$('#overlay').fadeOut();
}

function getQueryParamVal(name) {
	var query = location.search.split('#')[0].split('?')[1];
	var param_value;

	if (query) {
		var params = query.split('&');

		$.each(params, function() {
			var param = this.split('=');
			var param_name = param[0];

			if (param_name == name) {
				param_value = param[1];
				return false;
			};
		});
	};

	return param_value;
}

function refreshBasketSummaryIfNeeded(){
	var document_chsum = $("meta[name='x-basket-checksum']").attr("content");
	var cookie_chsum = $.cookie("basket_checksum");
	if(document_chsum && document_chsum!=cookie_chsum){
		var uri = $("meta[name='x-root']").attr("content") + $("meta[name='x-lang']").attr("content") + "/utils/refresh_user_info_box/";
		$.ajax({
			cache: false,
			type: 'GET',
			url: uri,
			dataType: 'script'
		});
	}
}
