	storeArray = new Array();
	
	function Left(str, n){
		if (n <= 0)
			return "";
		else if (n > String(str).length)
			return str;
		else
			return String(str).substring(0,n);
	}
	function Right(str, n){
		if (n <= 0)
		   return "";
		else if (n > String(str).length)
		   return str;
		else {
		   var iLen = String(str).length;
		   return String(str).substring(iLen, iLen - n);
		}
	}
	
	function hasNumbers(t)
	{
		return /\d/.test(t);
	}
	
	function buildArray() {
		function setArray(length) { // set an array inside the object
			this.elem=new Array();
			for(i=0;i<length;i++) {
				this.elem[i]=null;
			}
		}
		this.setArray=setArray;
		this.elem=null; // our array
	}
	
	function showObjectArray(text,object,length) {
		console.log(text + ': ');
		for (var i=0; i<length; i++)
			console.log(object[i].elem[0]+' '+object[i].elem[1]);
	}
	
	function myObjectBubbleSort(arrayName,length) {
		for (var i=0; i<(length-1); i++) {
			for (var j=i+1; j<length; j++) {
				if (arrayName[j].elem[0] < arrayName[i].elem[0]) {
					var dummy = arrayName[i].elem[0]
					var dummy1 = arrayName[i].elem[1]
					var dummy2 = arrayName[i].elem[2]
					var dummy3 = arrayName[i].elem[3]
					var dummy4 = arrayName[i].elem[4]
					var dummy5 = arrayName[i].elem[5]
					var dummy6 = arrayName[i].elem[6]
					var dummy7 = arrayName[i].elem[7]
					var dummy8 = arrayName[i].elem[8]
					var dummy9 = arrayName[i].elem[9]
					var dummy10 = arrayName[i].elem[10]
					var dummy11 = arrayName[i].elem[11]
					var dummy12 = arrayName[i].elem[12]
					var dummy13 = arrayName[i].elem[13]
					var dummy14 = arrayName[i].elem[14]
					var dummy15 = arrayName[i].elem[15]
					
					arrayName[i].elem[0] = arrayName[j].elem[0];
					arrayName[i].elem[1] = arrayName[j].elem[1];
					arrayName[i].elem[2] = arrayName[j].elem[2];
					arrayName[i].elem[3] = arrayName[j].elem[3];
					arrayName[i].elem[4] = arrayName[j].elem[4];
					arrayName[i].elem[5] = arrayName[j].elem[5];
					arrayName[i].elem[6] = arrayName[j].elem[6];
					arrayName[i].elem[7] = arrayName[j].elem[7];
					arrayName[i].elem[8] = arrayName[j].elem[8];
					arrayName[i].elem[9] = arrayName[j].elem[9];
					arrayName[i].elem[10] = arrayName[j].elem[10];
					arrayName[i].elem[11] = arrayName[j].elem[11];
					arrayName[i].elem[12] = arrayName[j].elem[12];
					arrayName[i].elem[13] = arrayName[j].elem[13];
					arrayName[i].elem[14] = arrayName[j].elem[14];
					arrayName[i].elem[15] = arrayName[j].elem[15];
					
					arrayName[j].elem[0] = dummy;
					arrayName[j].elem[1] = dummy1;
					arrayName[j].elem[2] = dummy2;
					arrayName[j].elem[3] = dummy3;
					arrayName[j].elem[4] = dummy4;
					arrayName[j].elem[5] = dummy5;	
					arrayName[j].elem[6] = dummy6;
					arrayName[j].elem[7] = dummy7;	
					arrayName[j].elem[8] = dummy8;	
					arrayName[j].elem[9] = dummy9;	
					arrayName[j].elem[10] = dummy10;	
					arrayName[j].elem[11] = dummy11;	
					arrayName[j].elem[12] = dummy12;	
					arrayName[j].elem[13] = dummy13;	
					arrayName[j].elem[14] = dummy14;
					arrayName[j].elem[15] = dummy15;
				}
			}
		}
	}
	
	function formatOpening(opening) {
		var openingTimes = Left(opening,4) + " - " + Right(opening,4)
		return openingTimes
	}
	
	function storeIcons(icons) { 
		icons = icons.split("")
		for(a=0;a<icons.length+0;a++) {
			if(icons[a] ==1) {
				var b = a+1;
				if (b == 9) { displayFood = 1 }
				iconFile = "http://www.wilkinsonplus.com/content/ebiz/wilkinsonplus/page/store/" + b + "_" + icons[a] + ".gif";
				iconBuilder = iconBuilder + '<img src="'+iconFile+'" border="0" />&nbsp;';
			}
		}
	}

	function getNodeValue(node, tagname, tagnumber, default_val) {
		var elems = node.getElementsByTagName(tagname);
		if (elems && elems[tagnumber] && elems[tagnumber].firstChild && elems[tagnumber].firstChild.nodeValue) {
			return elems[tagnumber].firstChild.nodeValue;
		}
		return default_val;
	}
	
	function getXML(url) { 
		var ajaxRequest = new Ajax (url, {
			'method': 'get',
			onComplete: function(responseXML) {
				if (document.implementation.createDocument){ 
					var parser = new DOMParser(); 
					xmlResponse = parser.parseFromString(responseXML, "text/xml"); 
				} else if (window.ActiveXObject){ 
				    xmlResponse = new ActiveXObject("Microsoft.XMLDOM") 
				    xmlResponse.async="false"; 
				    xmlResponse.loadXML(responseXML);   
				}
				
				var wilkoDetails = xmlResponse.getElementsByTagName('item');
				var resultsno = [];
				var resultslat = [];
				var resultslng = [];
				var resultsloc = [];
				var resultsAdd1 = []; 
				var resultsAdd2 = []; 
				var resultsTel = []; 
				
				//TO BE ENABLED WHEN INFORMATION IS COMPLETE!!!
				var resultsMon = []
				var resultsTue = []
				var resultsWed = []
				var resultsThu = []
				var resultsFri = []
				var resultsSat = []
				var resultsSun = []
				var resultsDC = []
				var resultsIco = []
				
				var elCount = 0
				for (a=0;a<wilkoDetails.length;a++) {
					resultsno[a] = getNodeValue(wilkoDetails[a], "BranchNo", 0, "") //Store Name
					resultsloc[a] = getNodeValue(wilkoDetails[a], "FullName", 0, "") //Store Name
					resultsAdd1[a] = getNodeValue(wilkoDetails[a], "address", 0, "") //Address 1
					resultsAdd2[a] = getNodeValue(wilkoDetails[a], "address1", 0, "") //Address 2 - Post Code
					resultsTel[a] = getNodeValue(wilkoDetails[a], "phone", 0, "") //Phone Number
					resultslng[a] = wilkoDetails[a].getElementsByTagName("point")[0].getAttribute("lng") //Longitude
					resultslat[a] = wilkoDetails[a].getElementsByTagName("point")[0].getAttribute("lat") //Latitude

					//TO BE ENABLED WHEN INFORMATION IS COMPLETE!!!
					resultsSun[a] = getNodeValue(wilkoDetails[a], "sunday", 0, "") //Monday Opening Times
					resultsMon[a] = getNodeValue(wilkoDetails[a], "monday", 0, "") //Tuesday Opening Times
					resultsTue[a] = getNodeValue(wilkoDetails[a], "tuesday", 0, "") //Wednesday Opening Times
					resultsWed[a] = getNodeValue(wilkoDetails[a], "wednesday", 0, "") //Thursday Opening Times
					resultsThu[a] = getNodeValue(wilkoDetails[a], "thursday", 0, "") //Friday Opening Times
					resultsFri[a] = getNodeValue(wilkoDetails[a], "friday", 0, "") //Saturday Opening Times
					resultsSat[a] = getNodeValue(wilkoDetails[a], "saturday", 0, "") //Sunday Opening Times
					resultsDC[a] = getNodeValue(wilkoDetails[a], "dc", 0, "") //Distribution Centre
					resultsIco[a] = getNodeValue(wilkoDetails[a], "data", 0, "") //Information Icons
										
					var result = LatLon.distHaversine(startLat.toLat().parseDeg(), startLng.toLon().parseDeg(), resultslat[a].parseDeg(), resultslng[a].parseDeg());
					var result2Miles = result*0.62
					if(result2Miles.round(2)<200) {
						var point = new GLatLng(resultslat[a],resultslng[a]);
						
						storeArray[elCount] = new buildArray();
						storeArray[elCount].setArray(6);
						storeArray[elCount].elem[0] = result2Miles;
						storeArray[elCount].elem[1] = point					
						storeArray[elCount].elem[2] = resultsloc[a];
						storeArray[elCount].elem[3] = resultsAdd1[a];
						storeArray[elCount].elem[4] = resultsAdd2[a];
						storeArray[elCount].elem[5] = resultsTel[a];
						storeArray[elCount].elem[15] = resultsno[a];
						
						//TO BE ENABLED WHEN INFORMATION IS COMPLETE!!!
						storeArray[elCount].elem[6] = resultsSun[a];
						storeArray[elCount].elem[7] = resultsMon[a];
						storeArray[elCount].elem[8] = resultsTue[a];
						storeArray[elCount].elem[9] = resultsWed[a];
						storeArray[elCount].elem[10] = resultsThu[a];
						storeArray[elCount].elem[11] = resultsFri[a];
						storeArray[elCount].elem[12] = resultsSat[a];
						storeArray[elCount].elem[13] = resultsDC[a];
						storeArray[elCount].elem[14] = resultsIco[a];
						
						elCount++
					}
					
				}

				myObjectBubbleSort(storeArray,elCount);
				buildStore("0")
				var nearestStores = ""
				nearestStores = nearestStores + "<h2>Other Nearby Stores</h2><ul class='stores'>"
				for(b=0;b<14;b++) {
					map.addOverlay(createMarker(b, storeArray[b].elem[1], storeArray[b]));
					if(b>0){
						nearestStores = nearestStores + "<li class='store'><a href='?searchbox="+storeArray[b].elem[4]+"'><span class='storeLeft'>"+storeArray[b].elem[2]+"</span><span class='storeRight'>"+storeArray[b].elem[0].toFixed(2)+" miles</span></a></li>"
					}
				}
				nearestStores = nearestStores + "</ul>"
				
				var searchBox = ''
				searchBox = searchBox + '<h2>Search our ' + wilkoDetails.length + ' High Street Stores</h2>'
				searchBox = searchBox + '<div id="searchwrapper">'
				searchBox = searchBox + '<form name="searchStore" id="searchStore" action="" method="get">'
				searchBox = searchBox + '<input type="text" name="searchbox" id="searchbox" autocomplete="off" /> <input type="submit" name="submit" id="submit" value="search" />'
				searchBox = searchBox + '<div id="expected">Not what you expected? try searching for your postcode!</div>'
				searchBox = searchBox + '</form><div id="townList"></div>'
				
				$('otherStores').setHTML(nearestStores);
				$('storeBanner').setHTML(searchBox)
			}
		}).request();
	}
	
	function buildStore(el) {
		storeIcons(storeArray[el].elem[14])
		var StoreDetails = ""	
		StoreDetails = StoreDetails + "<h2>"+storeArray[el].elem[2]+"</h2><span class='smallMiles'>("+storeArray[el].elem[0].toFixed(2)+" miles from "+query+")</span>"
		StoreDetails = StoreDetails + "<div id='address'>"
		StoreDetails = StoreDetails + "<p><strong>Wilkinson</strong></p><p>"+storeArray[el].elem[3]+"</p><p>"+storeArray[el].elem[4]+"</p><br /><p>Telephone: "+storeArray[el].elem[5]+"</p><br /><p>Distribution Centre: "+storeArray[el].elem[13]+"</p>"
		StoreDetails = StoreDetails + "</div>"
		StoreDetails = StoreDetails + "<div id='openingTimes'>"
		StoreDetails = StoreDetails + "<p><strong>Opening times</strong></p><p><span class='storeLeft'>Sunday: </span><span class='storeRight'>"+formatOpening(storeArray[el].elem[6])+"</span></p><p><span class='storeLeft'>Monday: </span><span class='storeRight'>"+formatOpening(storeArray[el].elem[7])+"</span></p><p><span class='storeLeft'>Tuesday: </span><span class='storeRight'>"+formatOpening(storeArray[el].elem[8])+"</span></p><p><span class='storeLeft'>Wednesday: </span><span class='storeRight'>"+formatOpening(storeArray[el].elem[9])+"</span></p><p><span class='storeLeft'>Thursday: </span><span class='storeRight'>"+formatOpening(storeArray[el].elem[10])+"</span></p><p><span class='storeLeft'>Friday: </span><span class='storeRight'>"+formatOpening(storeArray[el].elem[11])+"</span></p><p><span class='storeLeft'>Saturday: </span><span class='storeRight'>"+formatOpening(storeArray[el].elem[12])+"</span></p>"
		StoreDetails = StoreDetails + "</div>"
		StoreDetails = StoreDetails + "<br clear='all' />"
		StoreDetails = StoreDetails + "<div id='openText'>"
		StoreDetails = StoreDetails + "<p>PLEASE NOTE - We always try to keep our opening times as accurate as possible, but recommend you contact the store directly to confirm outside normal opening hours.</p><br /></div>"
		StoreDetails = StoreDetails + "<div id='icons'>"+iconBuilder+"</div>"
		
		$('mainStore').setHTML(StoreDetails);		
	}
	
	/* This function is not used (there is the possibility to draw i circle around the search location with a radius of the search distance */
	function drawCircle(center, radius, nodes, liColor, liWidth, liOpa, fillColor, fillOpa) {
		var myLng = new Number(center.lng());
		var myLat = new Number(center.lat());
		
		var latConv = center.distanceFrom(new GLatLng(myLat+0.1, myLng))/100;
		var lngConv = center.distanceFrom(new GLatLng(myLat, myLng+0.1))/100;
		
		var points = [];
		var step = parseInt(360/nodes)||10;
		for(var i=0; i<=360; i+=step)
		{
			var pint = new GLatLng(myLat + (radius/latConv * Math.cos(i * Math.PI/180)), myLng + (radius/lngConv * Math.sin(i * Math.PI/180)));
			points.push(pint);
			bounds.extend(pint);
		}
		fillColor = fillColor||liColor||"#FF0000";
		liWidth = liWidth||2;
		poly = new GPolygon(points,liColor,liWidth,liOpa,fillColor,fillOpa);
		map.addOverlay(poly);
	}
	
	function place(lat,lng) {
		startLng = lng
		startLat = lat
		var point = new GLatLng(lat,lng);
		map.setCenter(point, 10); 
		getXML("http://www.wilkinsonplus.com/content/ebiz/wilkinsonplus/page/store/data.xml")		
		$('message').setStyle('display', 'none')
		$('message').empty()
	}
	
	function createMarker(ref, point) {
		var marker = new GMarker(point, icon)
		var buildHTML = "";
        GEvent.addListener(marker, 'click', function() {
			buildHTML = ""
			buildHTML = buildHTML + '<strong>' + storeArray[ref].elem[2] + '</strong><br />'
			buildHTML = buildHTML + storeArray[ref].elem[3] + '<br />'
			buildHTML = buildHTML + storeArray[ref].elem[4] + '<br /><br />'
			buildHTML = buildHTML + storeArray[ref].elem[5] + '<br /><br />'
			buildHTML = buildHTML + '<a href="?searchbox=' + storeArray[ref].elem[4] + '" class="abutton">View Details</a><a href="#" onclick="window.clipboardData.setData(\'Text\', \'Branch '+storeArray[ref].elem[15]+' '+storeArray[ref].elem[2]+'\');" class="abutton">Copy Details</a>'
        	marker.openInfoWindowHtml(buildHTML);
        });

        var contentNode = document.createElement('div');
        var titleNode = document.createElement('div');
        return marker;
    }

	function showAddress(location) {
		$('mapwrapper').setStyle('display', 'block')
		if (location==null) {
			var search = $('search').value + ', uk';
		} else {
			var search = location
		}		
		searchLocation = search;
		geo.getLocations(search, function(result){
			map.clearOverlays(); 
			if (result.Status.code == G_GEO_SUCCESS) {
				$('message').empty();
				var p = result.Placemark[0].Point.coordinates;	
				place(p[1],p[0]);
			} else {
				var reason="Code "+result.Status.code;
				if (reasons[result.Status.code]) {
					reason = reasons[result.Status.code]
				} 
			}
		});
	}