/**
 * All search related JavaScript
 */
// when DOM is ready
$(function(){

	/* Main menu */
	function getMainMenu() {
		var href = makeHrefUnique('/ajax/getMainMenu/?lang=' + getLangFromUrl() + '&c_route=' + getRoute());
		$.get(href, {} , refreshMainMenu);
	}
	
	function getRoute() {
		return escape(document.location.pathname);
	}
	
	function getLangFromUrl() {
		var url = document.location.href;
		if (url.indexOf('lang=') > -1 ) {
			var lang = url.match(/lang=((.)*)/);
			lang = lang[1].split('&');
			return lang[0];
		}
		url = document.location.pathname;
		var lang = url.match(/^\/(est|eng|rus|lat|lit|fin)/)
		if (lang  && lang[1]) {
			return lang[1];
		}
		else {
			return 'est';
		}
	}

	function refreshMainMenu(data)  {

		$('#mainmenu').replaceWith(data);
	}
	/* !Main menu */

	/* Toolbar */
	function getToolbar() {
		var href = makeHrefUnique($('#main-toolbar').attr('src'));
		if (href) {
			$.get(href, {} , refreshMainToolBar);
		}
	}

	function refreshMainToolBar(data) {
		$('#main-toolbar').replaceWith(data);	
	}
	/* !Toolbar */

	/* Comparison */
	$('#search-results table .tools .add-to-comparisons').click( function() { 
		var href = parseHref($(this).attr('href'));			
		$.get(href, {} , addToComparison);
		return false;
	});
	
	function addToComparison(data) {	
		data = parseXMLRepsonse(data);
		$('#search-results table .tools #add-to-comparisons'+data['vehicle_id']).hide();
		if (data['action'] == 'added') {
			//alert(data['response']);
		}
		getComparisonBox()
	}	

	function getComparisonBox() {
		var href = makeHrefUnique($('#comparison-box').attr('src'));
		if (href) {
			$.get(href, {} , refreshComparisonBox);
		}
	}

	function refreshComparisonBox(data) {
		$('#comparison-box').replaceWith(data);	
		addComparisonDeleteListeners();
		getToolbar();
	}

	function addComparisonDeleteListeners() {
		$("#comparison-box .remove_link").click(function() { 
			removeComparison(this);
			return false;
		});
	}

	function removeComparison(item) {
		var href = makeHrefUnique(parseHref(item.href));
		$.get(href, {} , getComparisonBox);
		return false;
	}

	/* !Comparison */
	
	/* Save search */
	$("#search-results .toolbar .save-search #savesearch-submit").click( function() { 
		saveSearch();
	});
	$("#search-results .toolbar .save-search #save_search_name").keyup( function(e) {
		var keyCode = e.keyCode;
		if (keyCode == 13) {
			return saveSearch();
		}
	});

	function addSaveSearchDeleteListeners() {
		$("#saved-searches .remove_link").click(function() { 
			removeSavedSearch(this);
			return false;
		});
	}

	function saveSearch() {
		$("#search-results .toolbar .save-search a").hide();
		$("#search-results .toolbar .save-search span").show();
		var text = $("#search-results .toolbar .save-search #save_search_name").attr('value');
		if (!text) {
			alert(gettext("Enter name please"));
			return false;
		}
		var href =  $("#search-results .toolbar .save-search a").attr('href') + '&save_search_name='+text;
		href = parseHref(href);
		$.get(href, {} , searchIsSaved);
		return false;
	}

	function searchIsSaved(data) {

		data = parseXMLRepsonse(data);

		if (data['action'] != 'added'){
			alert(data['response']);
			return;
		}
		$("#search-results .toolbar .save-search span").text(data['response']);
		
		getSavedSearchesBox();
		getToolbar();
	}

	function getSavedSearchesBox() {
		var href = makeHrefUnique($('#saved-searches').attr('src'));
		if (href) {
			$.get(href, {} , refreshSavedSearchBox);
		}
	}

	function refreshSavedSearchBox(data) {
		$('#saved-searches').replaceWith(data);	
		addSaveSearchDeleteListeners();
		hideHiddenSavedSearches();
		setSavedSearchToggle();
	}

	function removeSavedSearch(item) {
		var href = parseHref(item.href);
		
		$.get(href, {} , removeSavedSearchItem);
		return false;
	}

	function removeSavedSearchItem(data) {
		data = parseXMLRepsonse(data);

		if (data['action'] == 'deleted' ) {
			$('#savedsearch_row_'+data['id']).hide();

			var domEl = $("#saved-searches .hide").get(0);
			if (!domEl) {
				return;
			}
			try	{			
				domEl.style.display = 'table-row'; // @TODO need to find solution for this for IE
				domEl.style.opacity = 100;
			}
			catch (e){
				$(domEl).show();
			}
			domEl.className = domEl.className.replace('hide', '');
		}
	}
	/* !Save search */

	/* Favourites */
	$('#search-results table .tools .add-to-favorites').click( function() { 
		var href = parseHref($(this).attr('href'));	
		$.get(href, {} , addToFavourites);
		return false;
	});

	function addFavoriteDeleteListeners() {
		$("#favorites .remove_link").click(function() { 
			removeFavourite(this);
			return false;
		});
	}

	function removeFavourite(item) {
		var href = makeHrefUnique(parseHref(item.href));
		
		$.get(href, {} , addToFavourites);
		return false;
	}

	function addToFavourites(data) {

		data = parseXMLRepsonse(data);
		
		$('#search-results table .tools #add-to-favorites'+data['vehicle_id']).hide();
		if (data['action'] == 'added') {
			//alert(data['response']);
		}


		getFavouriteBox();

		if (data['action'] == 'remove') {
			$('#search-results table tbody#vehiclerow_'+data['vehicle_id']).hide();
		}
	}

	function getFavouriteBox() {
		var href = makeHrefUnique($('#favorites').attr('src'));
		if (href) {
			$.get(href, {} , refreshFavouriteBox);
		}
	}

	function refreshFavouriteBox(data) {
		$('#favorites').replaceWith(data);	
		addFavoriteDeleteListeners();
		getToolbar();
	}
	/*! Favourites */

	/* IF calculator*/
	function getIfCalculator() {
		var href = makeHrefUnique($('#If-calculator').attr('src'));
		if (href) {
			$.get(href, {} , refreshIfCalculator);
		}
	}

	function refreshIfCalculator(data) {
		$('#If-calculator').replaceWith(data);
		bindIfCalculator();
	}

	function bindIfCalculator() {
		$('#if-calculator-box #form_type').change(function() {
			$('#if-calculator-box span.fop').addClass('hide');
			$('#if-calculator-box #fop_' + $(this).val()).removeClass('hide');
		});
		var options = { 
			success: refreshIfCalculator
		};
		$('#if-calculator-box form').submit(function() {
			$('#if-calculator-box form #if_calc_submit').attr('disabled', true);
			$('#if-calculator-box .if_calc_loading').show();
			$(this).ajaxSubmit(options); 
			return false; 
		}); 
	}
	/*! IF calculator*/
	
	function bindIfOCTAcalc() {
		$('#octa-ajax-form').submit(function() {
			var url = $('#IfOCTA-calculator #form_ajax_url').val();
			if (!url) {
				return true;
			}
			$(this).attr('action', url);
			var options = { 
				success: refreshIfOCTACalculator
			};
			$(this).ajaxSubmit(options); 
			return false;
		});
	}

	function refreshIfOCTACalculator(data) {
		$('#IfOCTA-calculator').replaceWith(data);
		bindIfOCTAcalc();
	}


	function parseHref(href) {	
		if (!href){
			return null;
		}	
		href = href.split('?');
		href = href[0] + (href[0].lastIndexOf('/') != href[0].length-1 ? '/' : '') + 'ajax/?' + href[1];
		href = makeHrefUnique(href);
		return href;
	}

	function makeHrefUnique(href) {// We add a current time to make URL unique, so it won't be taken from cache
		if (!href){
			return null;
		}
		var currentTime = new Date(); 
		href += (href.indexOf('?') == -1 ? '?' : '&') +  + currentTime.getTime() ;
		return href;
	}

	function parseXMLRepsonse(data) {

		var ret = new Array();
		var values = new Array('action', 'vehicle_id', 'id', 'response');

		if (navigator.userAgent.toLowerCase().indexOf('msie') == -1) {	// Not IE
			var response_xml = $(data);
			for(var i = 0; i < values.length; i++) {
				ret[values[i]] = response_xml.find(values[i]).text();
			}
		}
		else { // For IE. jQuery has some IE bug with text() on XML
			xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
			xmlDoc.loadXML(data); 

			for(var i = 0; i < values.length; i++) {
				if ( xmlDoc.getElementsByTagName(values[i])(0)) {
					ret[values[i]] = xmlDoc.getElementsByTagName(values[i])(0).childNodes[0].nodeValue;
				}
			}

		}
		return ret;
	}

	addFavoriteDeleteListeners();
	addSaveSearchDeleteListeners();
	addComparisonDeleteListeners();

	/* Onload box refreshes */
	getSavedSearchesBox();
	getFavouriteBox();
	getComparisonBox();
	getToolbar();
	getMainMenu();
	getIfCalculator();
	bindIfOCTAcalc();
	/* !Onload box refreshes */
});