$(document).ready(function() {
		
		
	var images_folder = 'http://www.toyota-forklifts.it/SiteCollectionDocuments/DealerLocator_T/images/';
	var xml_path = 'http://www.toyota-forklifts.it/SiteCollectionDocuments/DealerLocator_T/assets/xml/dealer_locator.xml';
	
	var country_id = 1;
	var selected_region = 0;
	var map_to_reset = true;
	var maps_holder = $('#maps');
	var map_heading = $('#map_name');
	var district_heading = $('#district');
	var loadTXT = 'Loading data';
	var activemap_selector = false;
	var back_button = false;
	var districtmode = 'tooltip';
	var district_selector = $('#district_selector');
	maps_holder.hide();
	
	$('#dealer_locator').show();
	$('#dealer_locator_title').html('&nbsp');
	$('#dealer_locator_title').after('<div id="loading"><p>' + loadTXT + ' - starting</p></div>');
	var loading = $('#loading');
	var loading_txt = loading.find('p');
	$.ajax({
		url:		xml_path,
		dataType:	'xml',
		beforeSend: function(XMLHttpRequest) {

		},
		success: function(xml) {
			loading_txt.html(loadTXT + ' - done');
			loading_txt.append('<br/>Initializing application');
			
			var country = $(xml).find('#country_' + country_id);
			var default_map_image = images_folder + 'transparent.gif';
			var map_width = country.attr('width');
			var map_height = country.attr('height');
			var contacts = $('#contacts');
			var maps = $(xml).find('#country_' + country_id + ', district:has(region)');
			
			// Init maps
			maps.each(function() {
				var map_node   = $(this);
				var map_id     = map_node.attr('id');
				var map_sprite = map_node.attr('background_image');
				var map_holder = $('<div id="map_' + map_id + '" class="map"><map class="dealer_map"></map></div>');
				maps_holder.append(map_holder);
				
				var map      = $('#map_' + map_id);
				var imagemap = $('.dealer_map', map);
				
				map.css('background-image', 'url(' + images_folder + map_sprite + ')');
				map.append('<img id="map_' + map_id + '_image" src="' + default_map_image + '" usemap="#map_map_' + map_id + '" width="' + map_width + '" height="' + map_height + '"/>');
				var map_image = $('#map_' + map_id);
				
				imagemap.attr('name', 'map_map_' + map_id)
						.attr('id', 'map_map_' + map_id);
				
				if($('regions', map_node).length > 0) {
					var regions = $('regions', map_node);
				} else {
					var regions = map_node;
				}
				
				regions.children('region').each(function() {
					var region_node  = $(this);
					var region_id    = region_node.attr('id');
					var region_title = region_node.attr('name');
					
					// AREAS
					var area = document.createElement('area');
					area.setAttribute('shape', 'poly');
					area.setAttribute('id', region_id);
					area.setAttribute('alt', region_title);
					area.setAttribute('coords', region_node.children('coordinates').text());
					imagemap.append(area);
					$('area#' + region_id)
						.click(function(e) {
							$('.districts').hide();
							if(districtmode == 'tooltip') {
								var offset = map_image.offset();
								var padding = map_image.position();
								region_list.css('top', e.pageY - offset.top-10).css('left', e.pageX - offset.left+20).show();
							} else if (districtmode == 'select') {
								district_selector.empty();
								var district_selector_options = '<option value="0">' + country.attr('select_district') + '</option>';
								$('li', region_list).each(function() {
									district_list_item = $(this);
									district_selector_options += '<option value="' + district_list_item.attr('id') + '">' + district_list_item.find('span').html() + '</option>';
								});
								selected_region = region_id;
								map_to_reset = true;
								district_selector.append(district_selector_options);
								district_selector.show();
								district_selector.trigger('change');
															}
						})
						.mouseenter(function() {
							regionmap(map,region_id);
						})
						.mouseleave(function() {
							resetmap(map);
						});
						
					// DISTRICT LISTS
					map.append('<ul class="districts" id="list_' + region_id + '"></ul>');
					var region_list = $('#list_' + region_id);
					region_list
						.mouseenter(function() {
							regionmap(map,region_id);
						})
						.mouseleave(function() {
							$(this).hide();
							resetmap(map);
						});
					region_node.children('districts').children('district').each(function() {
						var district_node = $(this);
						var district_title = district_node.attr('name');
						var district_id = district_node.attr('id');
						var district_hassub = district_node.find('region').length > 0;
						
						region_list.append('<li id="' + district_id + '"><span>' + district_title + '</span></li>');
						
						$('#' + district_id)
						.click(function() {
							if(district_hassub) {
								activatemap('#map_' + district_id, district_title, district_id);
								back_button.fadeIn('fast');
							} else {
								if(district_heading.html() !== '') {
									district_heading.fadeOut('fast', function() {$(this).html(district_title).fadeIn('fast');});
								} else {
									district_heading.hide().html(district_title).fadeIn('fast');
								}
								var open_list = $('.company_list:visible');
								if(open_list.length > 0) {
									open_list.fadeOut('fast', function() {$('#contact_list_' + district_id).fadeIn('fast');});
								} else {
									$('#contact_list_' + district_id).fadeIn('fast');
								}
								
								selected_region = region_id;
								map_to_reset = true;
							}
						});
						
						// DISTRICT CONTACT LISTS
						contacts.append('<div class="company_list" id="contact_list_' + district_id + '"></div>');
					});
				});
			});
			
			// COMPANIES
			var fax_txt = country.attr('fax');
			var tel_txt = country.attr('tel');
			var email_txt = country.attr('email');
			var web_txt = country.attr('web');
			
			$('company', country).each(function() {
				var company_node = $(this);
				var company_name = company_node.children('company_name').text();
				var email        = company_node.children('company_email').text();
				var web          = company_node.children('company_web').text();
				var fax          = company_node.children('company_fax').text();
				var image        = company_node.children('company_logo').text();
				var default_company_info = company_node.children('company_info').text();
				
				var company_html = '<div class="company">';
				image_html = image.length > 0 ? ('<img alt="' + company_name + '" src="' + images_folder + 'logo/' + image + '" />') : '';
				company_html += web.length > 0 ? ('<a title="' + company_name + '" href="' + web + '" target="_blank">' + image_html + '</a>') : image_html;
				company_html += '<h3>' + company_name + '</h3><address>';
				company_html += company_node.children('company_address').text() + '<br/>';
				company_html += company_node.children('company_zip').text() + ' ' + company_node.children('company_city').text() + '<br/>';
				company_html += tel_txt + ': ' + company_node.children('company_tel').text() + '<br/>';
				company_html += fax.length > 0 ? (fax_txt + ': ' + fax + '<br/>') : '';
				company_html += email.length > 0 ? (email_txt + ': <a href="mailto:' + email + '">' + email + '</a><br/>') : '';
				company_html += web.length > 0 ? (web_txt + ': <a title="' + company_name + '" href="' + web + '" target="_blank">' + web + '</a></address>') : '';
				company_html += '<p class="company_info">' + company_node.children('company_info').text() + '</p></div>';
				
				$('location', company_node).each(function() {
					var location_node           = $(this);
					var additional_company_info = $('location_info',location_node).text();
					if(additional_company_info.length > 0) {
						var company = company_html.replace(default_company_info, additional_company_info);
					} else {
						var company = company_html;
					}
					$('#contact_list_district_' + location_node.attr('district_id')).append(company);
				});
				
			});
			
			
			maps_holder.append('<p style ="color:#C00F23;cursor:hand" id="back">' + country.attr('back') + '</p>');
			//maps_holder.append('<button id="back">' + country.attr('back') + '</button>');
			back_button = $('#back');
			back_button.click(function() {
				activatemap('#map_country_' + country_id, false, 'country_' + country_id);
			});
			
			district_selector.change(function() {
				var district_id = $(this).val();
				var district_node = $('#' + selected_region, xml);
				var district_title = district_node.length > 0 ? district_node.attr('name') : '';
				if(district_heading.html() !== '') {
					if(district_title !== district_heading.html()) {
						district_heading.fadeOut('fast', function() {$(this).html(district_title).fadeIn('fast');});
					}
				} else {
					district_heading.hide().html(district_title).fadeIn('fast');
				}
			
				var open_list = $('.company_list:visible');
				if(open_list.length > 0) {
					open_list.fadeOut('fast', function() {$('#contact_list_' + district_id).fadeIn('fast');});
				} else {
					$('#contact_list_' + district_id).fadeIn('fast');
				}
			});
			
			function resetmap(map) {
				map_to_reset = true;
				if(selected_region !== 0) {
					var id_num = selected_region.split('_')[1];
					window.setTimeout(function() {
							map.css('background-position', function() {
								if(map_to_reset == true) {
									return '-' + id_num * map_width + 'px -' + map_height + 'px';
								} else {
									return map.css('background-position');
								}
							})
						}, 200);
				} else {
					map.css('background-position', '0 0');
				}
			}
			
			function regionmap(map, region_id)
			{
				map_to_reset = false;
				var id_num = region_id.split('_')[1];
				map.css('background-position', '-' + id_num * map_width + 'px 0');
			}
			
			function activatemap(map_selector, map_title, map_node_id) {
				
				
				if(activemap_selector) {
					$(activemap_selector).fadeOut('fast', function() {$(map_selector).fadeIn('fast');});
				} else {
					$('.map').hide();
					$(map_selector).fadeIn('fast');
				}
				if(map_title) {
					map_heading.hide().html(map_title).fadeIn('fast');
				} else {
					map_heading.css('display', 'none');
					back_button.hide();
				}
				
				selected_region    = 0;
				$('.company_list:visible').fadeOut('fast');
				district_heading.fadeOut('fast');
				activemap_selector = map_selector;
				districtmode = $('#' + map_node_id, xml).attr('districtmode').length > 0 ? $('#' + map_node_id, xml).attr('districtmode') : 'tooltip';
				district_selector.hide();
				
				
				if(districtmode == 'select')				
				$('#dealer_locator_title').hide().html(country.attr('dealer_locator_title_select')).fadeIn('fast');
				else
				$('#dealer_locator_title').hide().html(country.attr('dealer_locator_title')).fadeIn('fast');

				//alert(map_node_id + '  ' + districtmode);
			}
			
			$('#loading').fadeOut('fast', function() {

					activatemap('#map_country_' + country_id, false, 'country_' + country_id);
					maps_holder.fadeIn('fast');
					$('#dealer_locator_title').hide().html(country.attr('dealer_locator_title')).fadeIn('fast');
			});
		}
	});
});
