var initPos = 29;

var lbi_map = {

	/*
	 * Override this callback to load the map. It will be called when the dom is loaded
	 */
	doc_loaded: function(){
		},


	toggleSteps: function(){
		if ($("#show_steps").attr("checked")) {
			$("#show_steps:visible").parents("li").hide()
			lbi_map.addStep();
		}
		else{
			$("#show_steps").parents("li").show()
		}
		$(".js-addStep, .gm-steps").slideToggle();
	},
	
	addStep: function(){
		tm_viaCount = tm_viaCount + 1;
		var $list = $(".gm-steps"),
		nb = $list.children().length + 1,
		$li = $(document.createElement("li")).addClass("gm-step"),
		$label = $(document.createElement("label")).attr("for", "step_"+nb).text(lbi_copy.steps.label.replace("{nb}", nb)),
		$input = $(document.createElement("input")).attr("type", "text").addClass("textbox").val(lbi_copy.steps.default_value).attr("id", "step_"+nb).attr("name", "step_"+nb),
	
		$a = $(document.createElement("a")).attr("href", "#").addClass("remove").text(" ").bind("click", lbi_map.removeStep);
		
		$li.append($label, "<br />", $input, $a);
		$list.append($li);
		
		if(nb > 1)
		 	{
			$li.hide().slideDown();

			}
		lbi_map.autocomplete($input);
		
	},
	
	removeStep: function(e){
		e.preventDefault();
		tm_viaCount = tm_viaCount - 1;
		var $list = $(".gm-steps"),
		nb = $list.children().size(),
		$ul = $(this).parents("ul");
		
		
		$(this).parents("li").remove();
		
		if(nb == 1){
			$("#show_steps").attr("checked", false);
			lbi_map.toggleSteps()
		}
		else{
			$ul.find("li").each(function(nb, el){
				var $el = $(el);
				nb ++;
				$el.find(".remove").css("top", "2px")
				$el.find("label").attr("for", "step_"+nb).text(lbi_copy.steps.label.replace("{nb}", nb));
				$el.find("input").attr("id", "step_"+nb).attr("name", "step_"+nb);
			})
		}
	},
	
	toggleRoadOpt: function(){
		$(".way_options").slideToggle();
	},
	
	
	computeOptimalMapHeight: function(){
		var wH = $(window).height(),
		//*
		
		lCH = $(".formCol").height();
		
		if(wH > lCH)
			return lCH;
		return wH;
		//*/
		/*
			mT = lbi_map.findPos($(".js-map").get(0)).top,
			sT = $(document).scrollTop();
			
			mSize = mT - sT;
			if(mSize < 0)
				mSize = 0;
			return wH - mSize;
		
		//*/
	},
	
	
	moveMapBanner: function(){
		var wH = $(window).height(),
		mH = $(".js-map").height(),
		mT = lbi_map.findPos($(".js-map").get(0)).top,
		sT = $(document).scrollTop(),
		$mA = $(".mapAdvert"),
		distFromBottom = 8,
		distFromTop = 42,
	
		nP = wH - (mT - sT);
		if(nP > mH)
			nP = mH;	
		nP = mH - nP
		
		nP += distFromBottom
		
		if(nP < distFromBottom)
			nP = distFromBottom;
		
		if(nP + distFromTop + $mA.height() > mH)
			nP = mH - distFromTop - $mA.height();
			
		$mA.css("bottom", nP);
			
	},
	
	
	optimizeViewport: function(viewportWidth){
		$(".header").css({"backgroundPosition" : (viewportWidth-228)+"px top"});
		$("#content").width(viewportWidth);
		$(".contentContainer").width(viewportWidth - 275);
		$("#window").width(viewportWidth - 297);
		$(".windowbottom").width(viewportWidth - 300);
		$(".plan > .menu").width(viewportWidth - 330);
		$(".mapCol, .js-map").width(viewportWidth - 560);
		
		lbi_map.slideMap();
		lbi_map.moveMapBanner();
	},
	
	
	slideMap: function(e){
		
		adjustshadow()
		
		var pos = (lbi_map.findPos($(".gmap_app").get(0))).top,
		sTop = $(document).scrollTop(),
		$jsMap = $(".mapSlider"),
		fCH = $(".formCol").height();
		
		$(".js-map").height(lbi_map.computeOptimalMapHeight())
		
		if(sTop > pos){
			nPos = sTop-pos;
			if(nPos + $jsMap.height() > fCH)
				nPos = fCH - $jsMap.height()
			if(nPos < 0)
				nPos = 0;
			$jsMap.css({top: nPos});
		}
		else if(parseInt($jsMap.css("top")) > 0)
			$jsMap.css({top: 0});
		
			
		lbi_map.moveMapBanner();
		
	},
	
	
	findPos: function(obj) {
		var curleft = curtop = 0;
		if (obj.offsetParent) {
			do {
				curleft += obj.offsetLeft;
				curtop += obj.offsetTop;
			}
			while (obj = obj.offsetParent);
		}
		return {left: curleft , top: curtop};
	},

	
	autocomplete: function($items){
		$items.each(function(){
				var $this = $(this);
				if ($this.val() != "")
					$this.attr("defaultvalue", $this.val()).addClass("default");
			})
			.bind("focus", function(e){
				var $this = $(this);
				if ($this.attr("defaultvalue") == $this.val()) 
					$this.val("").removeClass("default");
			})
			.bind("blur", function(e){
				var $this = $(this);
				if ($this.val() == "") 
					$this.val($this.attr("defaultvalue")).addClass("default");
			})
	}
	
	
	
	
};




//Override adjustShadows because it block scrolling in IE8
function adjustshadow(){
    // Adjust leftColum - mainColumn
	
	var oSize = document.getElementById("masterContent").offsetHeight + "px";
	
    if (document.getElementById("fade")) {
        var toadd = document.getElementById("fade").offsetHeight;
        var leftColumn = document.getElementById("leftColumn").offsetHeight;
        var mainColumn = document.getElementById("mainColumn").offsetHeight;
        if (mainColumn >= leftColumn) {
            document.getElementById("fade").style.height = (mainColumn - (leftColumn - toadd)) + "px"
        }
    }
    
    if (document.getElementById("shadow_left")) {
        document.getElementById("shadow_left").style.height = oSize;
        
        if (document.getElementById("shadow_right")) 
            document.getElementById("shadow_right").style.height = oSize;
        if (document.documentElement.offsetWidth >= 945) {
            document.documentElement.style.overflowX = "hidden";
        }
        else {
            document.documentElement.style.overflowX = "auto";
        }
    }
	
	document.getElementById("content").style.height  = oSize;
}




(function($){
	
	
	$(function(){
		
		
		if($.browser.msie)
			$.fx.off = true;
			
			
		var viewportWidth = $(document).width();
		if(viewportWidth >  ($("#content").width() + 68))
			lbi_map.optimizeViewport(viewportWidth - 68);
		
		if($("#show_steps:checked").length > 0)
			lbi_map.toggleSteps();
		if($("#show_way:checked").length > 0)
			lbi_map.toggleRoadOpt();
		

		if($.browser.msie)
			$("#show_steps").bind("click", lbi_map.toggleSteps);
		else
			$("#show_steps").bind("change", lbi_map.toggleSteps);
			
			
		if($.browser.msie)
			$("#show_way").bind("click", lbi_map.toggleRoadOpt);
		else
			$("#show_way").bind("change", lbi_map.toggleRoadOpt);
		
		$(".js-addStep").bind("click", function(e){
			e.preventDefault();
			lbi_map.addStep();
		});
			
		//For the inputs with a default value
		lbi_map.autocomplete($("input:text[value]"));
			
		lbi_map.doc_loaded();
		
		$("#txtfieldquestion").focus();
		
		$("li h1").each(function(){
			$(this).children("object, embed").remove();
			$(this).attr("style", "")
		})
		
		$('#no_highways').click(function() {
			 if($(this).attr("checked")) {
				tm_avoidhighway = true; 
			 } else {
			   tm_avoidhighway = false; 
			 }
		});     

		$('#Gmap_transport').change(function() {
			 if($(this).attr("value") == 1) {
     			CURRENT_TRAVEL_MODE = G_TRAVEL_MODE_DRIVING;
			 } else {
				CURRENT_TRAVEL_MODE = G_TRAVEL_MODE_WALKING;
			   ; 
			 }
		}); 
		

		$('#Gmap_setDirection').click(function() {
			 {
     			tm_setDirections();
			 }
		}); 
		
		$('#Gmap_printMap').click(function() {
			 {
     			tm_printGMap();
				// set back to false
				tm_printmap = false;
			 }
		}); 
		

      $('.gmap_app').keyup(function(e) {
    	  if(e.keyCode == 13) {
			 tm_setDirections();
	      }
      });

	
	})
	
	$(window)
		.bind("resize", function(e){
			lbi_map.optimizeViewport(960);
			var viewportWidth = $(document).width();
			if(viewportWidth >  ($("#content").width() + 68))
				lbi_map.optimizeViewport(viewportWidth - 68);
		})
		.bind("scroll", lbi_map.slideMap);
})(jQuery);





