var $j = jQuery.noConflict();

$j(function()
{
	
	//**********************
	// Estimator 2nd page
	//**********************
/*
	var tooltip = true;
	var cur = 0;

    $j("#slider").each(
		function()
		{
			$j(this).slider(
				{
					animate: true,
					value : 25,
					min : 25,
					max : 1000,
					step : 25,

					start : function()
					{
						if(tooltip)
						{
							$j("div.tooltip").fadeOut();
							tooltip = false;
						}
					},
					change : changing,
					slide : sliding

				}
			);
		}
	);

	var grid_piece = $j("ul#grid li.grid_piece").clone();

	function changing()
	{
		cur = value;
		show_slider_value($j('#slider').slider('value'));
	}

	function sliding()
	{
		var val = $j('#slider').slider('value');
		if(val > cur)
			show_slider_value(val);
		else
			show_slider_value(val);
	}

	function show_slider_value(value)
	{
		$j("ul#grid").empty();
		var amount = Math.floor(value/25);
		if(amount < 1)
			amount = 1;
		
		for(var a =0; a < amount; a++)
			$j("ul#grid").append(grid_piece.clone());
		
		$j("#slider p.slider_sqft").html(value+" sq ft");
		$j("#slider p.slider_price").html("&pound;"+(amount*5)+".00 pw");
		

	}
*/

	$j("#slider_container, #grid, div.tooltip, .grid_image").show();
	$j("body.estimator #content div.pagination p.set_knob").addClass("fix");

	if($j("body.estimator.two").length)
	{

		var tooltip = true;

		var slider = $j("#slider").slider(
			{
				animate: true,
				value : 25,
				min : 25,
				max : 1000,
				step : 25,

				slide: function(event, ui)
				{
					var includeLeft = event.keyCode != $j.ui.keyCode.RIGHT;
					var includeRight = event.keyCode != $j.ui.keyCode.LEFT;
					var nearest = findNearest(includeLeft, includeRight, ui.value);
					slider.slider('option', 'value', nearest);

					$j("#set_knob").val(nearest);
					change_grid_image(nearest);

					update_slider_text(nearest);

					return false;
				},

				start : function()
				{
					remove_tooltip();
				}
//				change : changing,
//				slide : sliding

			}
		);


		function findNearest(includeLeft, includeRight, value)
		{

			var nearest = null;
			var diff = null;

			for(var i in slider_values)
			{

                if((includeLeft && i <= value) || (includeRight && i >= value))
				{
                    var newDiff = Math.abs(value - i);
                    if(diff == null || newDiff < diff)
					{
                        nearest = i;
                        diff = newDiff;
                    }
                }
			}

			return nearest;

		}


		function remove_tooltip()
		{
			if(tooltip)
			{
				$j("div.tooltip").fadeOut();
				tooltip = false;
			}
		}

		function change_grid_image(val)
		{
			$j("img.grid_image").attr("src", "media/images/estimator/grid/"+parseInt(val/25)+".png");
		}


		function update_slider_text(val)
		{
			slider.find('a').html(val + " sq ft<br />" + "&pound;" + sprintf("%01.2f", slider_values[val]) + " pw");
		}


		$j('#set_knob').change(
			function()
			{
				var value = $j(this).val();
				slider.slider('option', 'value', value);
				change_grid_image(value);
				remove_tooltip();
				update_slider_text(value);
			}
		);

		update_slider_text(25);

		$j("#datepicker").datepicker(
			{
				changeMonth: true,
				changeYear: true,
				altField: '#storage_date',
				altFormat: '@',
//				minDate: '+1'
				minDate: '0'
			}
		);


/*
		var SliderObject = new Slider(
			'slider',
			'knob',
			{
				range: [1, 40],
				snap: false,
				steps: 40,
				offset: 53,
				wheel: true,
				mode: 'horizontal',
				onChange: function(value)
				{
					// Everytime the value changes, we update its value
					var price = parseInt(value * 0.80);
					document.getElementById('knob').innerHTML = (value * 25) + " sq ft<br />" + "&pound;" + (price * 5) + ".00 pw";
					document.getElementById('set_knob').selectedIndex = value - 1;
					$j("form input[name=size]").attr("value", value*25);
					$j("img.grid_image").attr("src", "media/images/estimator/grid/"+value+".png");
				},
				onComplete: function(value)
				{
					if(tooltip == 1)
					{
						$j("div.tooltip").fadeOut();
					}
					tooltip++;
				}
			}
		).set(1);
	
		$j('#set_knob').change(
			function()
			{ 
				var new_pos = this.selectedIndex;
				SliderObject.set(new_pos+1);
			}
		);
*/

	}


	//**********************
	// Contact locations in the sidebar
	//**********************
	$j("div#sidebar ul.locations li a.title").click(
		function()
		{
			$j(this).toggleClass("on");
			$j(this).parent().find("dl").slideToggle("fast");
			return false;
		}
	);

	$j("div#sidebar ul.locations li dl").hide();


	//**********************
	// Contact & First estimator page page
	//**********************
	var map_markers = [];

	var new_icon = new GIcon()
	new_icon.image = "http://www.apexselfstorage.co.uk/media/images/icon_map_marker.png"
	new_icon.size = new GSize(46,41)
	new_icon.iconAnchor = new GPoint(23,20)
	new_icon.infoWindowAnchor = new GPoint(23,20)

	function createMarker(point,html)
	{
		var opt = {};
		opt.icon = new_icon;
		opt.draggable = false;
		opt.clickable = true;
		opt.dragCrossMove = true;

		var marker = new GMarker(point, opt);
		GEvent.addListener(marker, "click", function(){
			marker.openInfoWindowHtml(html);
		});
		return marker;
	}

	if($j('body.contact #single_contact_map').size())
	{

		if(GBrowserIsCompatible())
		{

			var map = new GMap2(document.getElementById("single_contact_map"));
			map.setCenter(new GLatLng(single_contact_lat, single_contact_long), 11); 
				
			map.addControl(new GSmallMapControl());

			var marker_loc = new GLatLng(single_contact_lat, single_contact_long);
			var marker = createMarker(marker_loc)
			map.addOverlay(marker);
				
		}

	}
	else
	{

		$j("body.contact, body.home, body.estimator.one").each(function(){
			if(GBrowserIsCompatible())
			{

				var map = new GMap2(document.getElementById("map"));
				map.setCenter(new GLatLng(53.39479, -2.18353), 9); 
				
				map.addControl(new GSmallMapControl());
								
				// Set up markers with info windows
				var central_manc = new GLatLng(53.47042, -2.21572);
				var marker_central_manc = createMarker(central_manc,'<div style="width:140px;height:115px;"><strong>Central Manchester</strong><p>Apex House<br /> 2 Devonshire Street North<br />Ardwick, Manchester<br /> M12 6JQ</p><p><strong>Tel:</strong> 0161 273 4433</p></div>')
				map.addOverlay(marker_central_manc);
				map_markers[1] = marker_central_manc;

				var eastlands = new GLatLng(53.49085, -2.19169);
				var marker_eastlands = createMarker(eastlands,'<div style="width:140px;height:115px;"><strong>Eastlands (Central Manchester)</strong><p>Riverpark Trading Estate<br /> Riverpark Road<br /> Manchester<br />M40 2XP</p><p><strong>Tel:</strong> 0161 223 1001</p></div>')
				map.addOverlay(marker_eastlands);
				map_markers[5] = marker_eastlands;

				var south_manc = new GLatLng(53.35820, -2.20439);
				var marker_south_manc = createMarker(south_manc,'<div style="width:140px;height:115px;"><strong>South Manchester</strong><p>Apex House<br /> Duke Avenue<br /> Stanley Green Trading Estate<br /> Cheadle SK8 6RX</p><p><strong>Tel:</strong> 0161 486 0220</p></div>')
				map.addOverlay(marker_south_manc);
				map_markers[2] = marker_south_manc;
				
				var north_manc = new GLatLng(53.56221, -2.33528);
				var marker_north_manc = createMarker(north_manc,'<div style="width:130px;height:110px;"><strong>North Manchester</strong><p>Apex House<br /> Bolton Street<br /> Radcliffe, Manchester<br />M26 3SS</p><p><strong>Tel:</strong> 0161 724 0202</p></div>')
				map.addOverlay(marker_north_manc);
				map_markers[3] = marker_north_manc;
				
				var atherton = new GLatLng(53.52602,-2.49411);
				var marker_atherton = createMarker(atherton,'<div style="width:140px;height:115px;"><strong>Atherton (Manchester)</strong><p>Howe Bridge Mill<br /> Gloucester Street<br /> Atherton<br /> M46 0JT</p><p><strong>Tel:</strong> 0800 279 7668</p></div>')
				map.addOverlay(marker_atherton);
				map_markers[8] = marker_atherton;

				var manc_east = new GLatLng(53.46036, -1.98505);
				var marker_manc_east = createMarker(manc_east,'<div style="width:140px;height:115px;"><strong>East Manchester</strong><p>Etherow House<br /> Woolley Bridge Road<br />Hadfield, Glossop<br />SK13 2NS </p><p><strong>Tel:</strong> 01457 857177</p></div>')
				map.addOverlay(marker_manc_east);
				map_markers[4] = marker_manc_east;

				var congleton = new GLatLng(53.16988, -2.20134);
				var marker_congleton = createMarker(congleton,'<div style="width:140px;height:115px;"><strong>Congleton (Cheshire)</strong><p>Havannah Business Centre<br /> Havannah Street<br /> Congleton<br /> CW12 2AG</p><p><strong>Tel:</strong> 01260 272077</p></div>')
				map.addOverlay(marker_congleton);
				map_markers[6] = marker_congleton;
				
				var warrington = new GLatLng(53.39799, -2.59548);
				var marker_warrington = createMarker(warrington,'<div style="width:140px;height:115px;"><strong>Warrington (Cheshire)</strong><p>Owen Street<br /> Warrington<br /> WA2 7PA</p><p><strong>Tel:</strong> 01925 573 449</p></div>')
				map.addOverlay(marker_warrington);
				map_markers[7] = marker_warrington;

				if($j("form input[name=loc_lat]").length && $j("form input[name=loc_long]").length)
				{
					var _lat = $j("form input[name=loc_lat]").val();
					var _long = $j("form input[name=loc_long]").val();
					var current_loc = new GLatLng(_lat, _long);

					var current_icon = new GIcon()
					current_icon.image = "http://www.apexselfstorage.co.uk/media/images/icon_map_marker_user_03.png"
					current_icon.size = new GSize(46,41)
					current_icon.iconAnchor = new GPoint(23,20)
					current_icon.infoWindowAnchor = new GPoint(23,20)

					var opt = {};
					opt.icon = current_icon;
					var marker_current_loc = new GMarker(current_loc, opt);
					map.addOverlay(marker_current_loc);
				}

			}
		});

	}
	
	// When clicked on links
	$j("body.contact a.click_here").click(
		function()
		{
			GEvent.trigger(map_markers[$j(this).attr("rel")], "click");
			return false;
		}
	);

	// Print the page
	$j('a.print').click(function(){window.print();});
	
	// Show / hide own insurance stuff
	var current_ins = 0;
	var price_val 	= parseFloat($j("dd.total span.price").html());
	var deposit   	= parseFloat($j("span.deposit").html());
	var orig_price	= parseFloat($j("span.orig_price").html());
	var insurance	= parseFloat($j("dd.insurance span.price").html());
	var discounted	= 0;	
	
	$j("#own_ins").click(
		function()
		{
			if($j(this).is(':checked'))
			{

				$j("dt.insurance").fadeOut("fast");
				$j("dd.insurance").fadeOut("fast");
				current_ins = $j("div.leftcol form input[name=insurance]").val();
				$j("div.leftcol form input[name=insurance]").val("own");
				$j("div.add_ins").hide();
				$j("div.own_ins").show();

				var ins_val = parseFloat($j("dd.insurance span.price").html());
				var price_val = parseFloat($j("dd.total span.price").html());
				$j("dd.total span.price").html(
					sprintf("%01.2f", price_val - ins_val)
				);

			}
			else
			{

				$j("dt.insurance").fadeIn("fast");
				$j("dd.insurance").fadeIn("fast");
				$j("div.leftcol form input[name=insurance]").val(current_ins);
				$j("div.own_ins").hide();
				$j("div.add_ins").show();

				var ins_val = parseFloat($j("dd.insurance span.price").html());
				var price_val = parseFloat($j("dd.total span.price").html());
				$j("dd.total span.price").html(
					sprintf("%01.2f", price_val + ins_val)
				);

			}
		}
	);
    $j("#update_student").click(    	
        function() {
            if ($j("#student_discount").val() != '' && discounted < 1) {
            	discounted	= 1
                $j("dt.discount").fadeOut("fast");
                $j("dd.discount").fadeOut("fast");
                $j("dt.student_discount").fadeIn("fast");
                $j("dd.student_discount").fadeIn("fast");    
                $j("dd.deposit").html('No Deposit!');            
                // Apply the 20%
                $j("dd.vat span.price").html(
                    sprintf("%01.2f", (orig_price * 0.8) * 0.2)
                    );                
                $j("dd.total span.price").html(
                    sprintf("%01.2f", (orig_price * 0.8) + ((orig_price * 0.8) * 0.2) + insurance)
                    );
                    $j("#student_id").val($j("#student_discount").val());
                    $j("#total").val(sprintf("%01.2f", (orig_price * 0.8) + ((orig_price * 0.8) * 0.2) + insurance));

            } else if ($j("#student_discount").val() == '' && discounted > 0) {
                	$j("dt.discount").fadeIn("fast");
                	$j("dd.discount").fadeIn("fast");
               		$j("dt.student_discount").fadeOut("fast");
               		$j("dd.student_discount").fadeOut("fast");                  	
                    $j("dd.deposit").html('&pound;' + sprintf("%01.2f", orig_price * 0.9));
                    
                    $j("dd.vat span.price").html(
                    	sprintf("%01.2f", (orig_price * 0.9) *0.2)
                    	);                    
             	 	$j("dd.total span.price").html(
                    	sprintf("%01.2f", ((orig_price * 0.9) * 2) + insurance + ((orig_price * 0.9) *0.2))
                    	);
                
                	$j("#student_id").val('');
                        $j("#total").val(sprintf("%01.2f", (sprintf("%01.2f", ((orig_price * 0.9) * 2) + insurance + ((orig_price * 0.9) *0.2)))));
                 discounted = 0;
                 
       		}
        }	 
	)
});

// Fix IE6 transparency
DD_belatedPNG.fix('#logo a, div.offer h3');


function str_repeat(i, m) { for (var o = []; m > 0; o[--m] = i); return(o.join('')); }

function sprintf () {
  var i = 0, a, f = arguments[i++], o = [], m, p, c, x;
  while (f) {
    if (m = /^[^\x25]+/.exec(f)) o.push(m[0]);
    else if (m = /^\x25{2}/.exec(f)) o.push('%');
    else if (m = /^\x25(?:(\d+)\$)?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(f)) {
      if (((a = arguments[m[1] || i++]) == null) || (a == undefined)) throw("Too few arguments.");
      if (/[^s]/.test(m[7]) && (typeof(a) != 'number'))
        throw("Expecting number but found " + typeof(a));
      switch (m[7]) {
        case 'b': a = a.toString(2); break;
        case 'c': a = String.fromCharCode(a); break;
        case 'd': a = parseInt(a); break;
        case 'e': a = m[6] ? a.toExponential(m[6]) : a.toExponential(); break;
        case 'f': a = m[6] ? parseFloat(a).toFixed(m[6]) : parseFloat(a); break;
        case 'o': a = a.toString(8); break;
        case 's': a = ((a = String(a)) && m[6] ? a.substring(0, m[6]) : a); break;
        case 'u': a = Math.abs(a); break;
        case 'x': a = a.toString(16); break;
        case 'X': a = a.toString(16).toUpperCase(); break;
      }
      a = (/[def]/.test(m[7]) && m[2] && a > 0 ? '+' + a : a);
      c = m[3] ? m[3] == '0' ? '0' : m[3].charAt(1) : ' ';
      x = m[5] - String(a).length;
      p = m[5] ? str_repeat(c, x) : '';
      o.push(m[4] ? a + p : p + a);
    }
    else throw ("Huh ?!");
    f = f.substring(m[0].length);
  }
  return o.join('');
}
