$(document).ready(function(){

  if ($.browser.msie) {
    // Don't break on browsers without console.log();
    try { console.assert(1); } catch(e) { console = { log: function() {}, assert: function() {} } }
  }

  $('#help').hide();
  $('#qlabel').hide();
  
  if($('#q').attr('value')=='') {
    $('#q').addClass('defaultlabel').attr('value', $('#qlabel').text());
	}
	$('#q').bind('focus', function() {
		if($('#q').attr('value')==$('#qlabel').text()) {
   		$('#q').removeClass('defaultlabel').attr('value', '');
		}
	});
	$('#q').bind('blur', function() {
		if($('#q').attr('value')=='') {
      $('#q').addClass('defaultlabel').attr('value', $('#qlabel').text());
		}
  });

  // initialize the map
  $('#map1').jmap('init', {
    'mapCenter':[52.09, 5.10],
    'mapZoom': 7,
    'mapControl': 'large',
    'mapShowjMapsIcon': false,
    'mapEnableScrollZoom': true,
    'mapEnableSmoothZoom': true,
    'mapEnableType': true,
    'mapEnableGoogleBar': false,
    'language': 'nl'
  });

  // chrome and firefox fuckup the top left corner of the map
  if (!$.browser.msie) {
    $('#map1').css('height','494px');
    $('#map1').css('width','590px');
    $('#map1').jmap('CheckResize');
    $('#map1').jmap('MoveTo', {
      'mapCenter':[52.09, 6.10],
      'mapZoom': 7
    });
    $('#map1').css('height','496px');
    $('#map1').css('width','593px');
    $('#map1').jmap('CheckResize');
  }


  /*
  Start Show all items
  */
  // send request  to server for stored results


  $.post('search.php?q=random', {'query': '', 'lat': 6.10, 'lon': 52.09}, function(xml) {
    var hereIcon = Mapifies.createIcon({
			'iconImage': './images/markeryellow.png'
		});
    var webstoreIcon = Mapifies.createIcon({
			'iconImage': './images/temp_marker.png'
		});
    var foundIcon = Mapifies.createIcon({
			'iconImage': './images/marker.png'
		});
    // zoom in on location
    // format and output result
    $("#resultitems").append('<ul class="initial"></ul>');
    //console.log($("items", xml));
    var itemnodes = $("items", xml).children();
    for (i=0; i < itemnodes.length; i++) {
      //console.log(itemnodes[i]);
      var itemwebstore = $(itemnodes[i]).children('webdealer').text();
      var itemtitle = $(itemnodes[i]).children('itemtitle').text();
      var itemlink = $(itemnodes[i]).children('link').text();
      if (itemlink && itemwebstore=='ja') {
        itemlinktitle = '<h3><a href="http://www.vandyckshop.nl'+itemlink+'">'+itemtitle+'</a></h3>';
      } else {
        itemlinktitle = '<h3>'+itemtitle+'</h3>';
      }
      var itemlogo = $(itemnodes[i]).children('logo');
      var iteminfo = $(itemnodes[i]).children('infowindow');
      var itemlat = $(itemnodes[i]).children('latitude');
      var itemlon = $(itemnodes[i]).children('longitude');
      var itemdist = $(itemnodes[i]).children('distance');
      if (itemwebstore=='ja') {
      	if(itemdist.text()>0) {
          itemdist.text("<span class='distance'>afstand van gezochte locatie: "+ itemdist.text() +" km</span></li>");
        }
        $("#resultitems ul").append('<li><img class="inlinemarker" src="./images/temp_marker.png" align="left" /> '+ itemlinktitle + $(iteminfo).text() + itemdist.text());
      } else if (itemdist.text()>0 && itemwebstore!='ja') {
        $("#resultitems ul").append('<li><img class="inlinemarker" src="./images/marker.png" align="left" /> '+ itemlinktitle + $(iteminfo).text() + "<span class='distance'>afstand: "+ itemdist.text() +" km</span></li>");
      } else if (itemdist.text()==0) {
        $("#resultitems ul").append('<li><img class="inlinemarker"  src="./images/marker.png" align="left" /> '+ itemlinktitle + $(iteminfo).text() + "</li>");
      }
      if (itemdist.text()>0 && itemwebstore=='ja') {
        $("#resultitems li").highlightFade();
        $('#map1').jmap('AddMarker',{
          'pointLatLng':[$(itemlat).text(), $(itemlon).text()],
          'pointIcon' : webstoreIcon,
          'pointHTML': itemlinktitle + $(iteminfo).text()
        });
      } else {
        $('#map1').jmap('AddMarker',{
          'pointLatLng':[$(itemlat).text(), $(itemlon).text()],
          'pointIcon' : foundIcon,
          'pointHTML': itemlinktitle + $(iteminfo).text()
        });
      }
    }
  });

  /*
  End Show all items
  */

  // add markup to container and apply click handlers to anchors
  $('#locationsearch').submit(function(e){
    // stop normal link click
    e.preventDefault();
    
    if($('input#q').val()) {
        var pcreg = /^[1-9][0-9]{3}(\s)?([a-zA-Z]{2})?$/;
        if($('input#q').val().match(pcreg)) {
          $('input#q').val($('input#q').val() + ", nl");
        }
    }

    // search location in google maps
    $('#map1').jmap('ClearMap');
    $('#map1').jmap('SearchAddress', {
        'query': $('input#q').val(),
        'returnType': 'getLocations'
      }, function(result, options) {

      var valid = Mapifies.SearchCode(result.Status.code);

      var hereIcon = Mapifies.createIcon({
  			'iconImage': './images/markeryellow.png'
  		});
      var webstoreIcon = Mapifies.createIcon({
  			'iconImage': './images/temp_marker.png'
  		});
      var foundIcon = Mapifies.createIcon({
  			'iconImage': './images/marker.png'
  		});

      if (valid.success && result.Placemark) {
        //console.log(result.Placemark[0], valid, result, options);
		if(result.Placemark.length == 1) {
			point = result.Placemark[0];
		} else {
		    accurracy = 0;
			for(i=0; i<result.Placemark.length; i++) {
			    // get the first result with the highest accuracy,
				if(result.Placemark[i].AddressDetails.Accuracy >= accurracy && typeof(result.Placemark[i].AddressDetails.Country)!="undefined") {
				    //console.log('new:',result.Placemark[i].AddressDetails.Accuracy, 'start:', accurracy);
					accurracy = result.Placemark[i].AddressDetails.Accuracy;
					point = result.Placemark[i];
				}
			}
		}
        
        $('#map1').jmap('AddMarker',{
          'pointLatLng': [point.Point.coordinates[1], point.Point.coordinates[0]],
          'pointIcon': hereIcon,
          'pointHTML': point.address
        });

        // send request  to server for stored results
        var address = {
          'q': point.address,
          'query': $('input#q').val(),
          'lat': point.Point.coordinates[1],
          'lon': point.Point.coordinates[0],
          'accuracy': point.AddressDetails.Accuracy
        };
        
        // should the address info not be there.. ignore it
        if(typeof(point.AddressDetails.Country)!="undefined") {
	        if (point.AddressDetails.Accuracy >= 1) {
	          address.country = point.AddressDetails.Country.CountryName;
	        }
	        if (point.AddressDetails.Accuracy > 3 && point.AddressDetails.Country.AdministrativeArea.Locality) {
	          address.city = point.AddressDetails.Country.AdministrativeArea.Locality.LocalityName;
	        } else if (point.AddressDetails.Accuracy > 3 && point.AddressDetails.Country.AdministrativeArea.Locality && point.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName) {
	          address.province = point.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
	          address.city = point.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;
	        }
	        if (point.AddressDetails.Accuracy > 6) {
	          address.street = point.AddressDetails.Country.AdministrativeArea.Locality.DependentLocality.Thoroughfare.ThoroughfareName;
	          address.postcode = point.AddressDetails.Country.AdministrativeArea.Locality.DependentLocality.PostalCode.PostalCodeNumber;
	        }
		}

        $.post('search.php', address, function(xml) {
          // zoom in on location
          $('#map1').jmap('MoveTo', {
            'mapCenter':[point.Point.coordinates[1], point.Point.coordinates[0]],
            'mapZoom': 9
          });
          // format and output result
          $("#resultitems").html(
            '<p><img class="inlinemarker" src="./images/markeryellow.png" align="left" /> Uw zoekopdracht is herkend als:<br />' + $("querystring", xml).text() + "</p>"
          );
          $("#resultitems").append("<ul></ul>");
          //console.log($("items", xml));
          var itemnodes = $("items", xml).children();
          for (i=0; i < itemnodes.length; i++) {
            //console.log(itemnodes[i]);
            var itemwebstore = $(itemnodes[i]).children('webdealer').text();
            var itemtitle = $(itemnodes[i]).children('itemtitle').text();
            var itemlink = $(itemnodes[i]).children('link').text();
            if (itemlink && itemwebstore=='ja') {
              itemlinktitle = '<h3><a href="http://www.vandyckshop.nl'+itemlink+'">'+itemtitle+'</a></h3>';
            } else {
              itemlinktitle = '<h3>'+itemtitle+'</h3>';
            }
            var itemlogo = $(itemnodes[i]).children('logo');
            var iteminfo = $(itemnodes[i]).children('infowindow');
            var itemlat = $(itemnodes[i]).children('latitude');
            var itemlon = $(itemnodes[i]).children('longitude');
            var itemdist = $(itemnodes[i]).children('distance');
            if (itemwebstore=='ja') {
            	if(itemdist.text()>0) {
                  itemdist.text("<span class='distance'>afstand: "+ itemdist.text() +" km</span></li>");
		}
              $("#resultitems ul").append('<li><img class="inlinemarker" src="./images/temp_marker.png" align="left" /> '+ itemlinktitle + $(iteminfo).text() + itemdist.text());
            } else if (itemdist.text()>0) {
              $("#resultitems ul").append('<li><img class="inlinemarker" src="./images/marker.png" align="left" /> '+ itemlinktitle + $(iteminfo).text() + "<span class='distance'>afstand: "+ itemdist.text() +" km</span></li>");
            } else {
              $("#resultitems ul").append('<li><img class="inlinemarker"  src="./images/marker.png" align="left" /> '+ itemlinktitle + $(iteminfo).text() + "</li>");
            }
            if (itemdist.text()>0 && itemwebstore=='ja') {
              $("#resultitems li").highlightFade();
              $('#map1').jmap('AddMarker',{
                'pointLatLng':[$(itemlat).text(), $(itemlon).text()],
                'pointIcon' : webstoreIcon,
                'pointHTML': itemlinktitle + $(iteminfo).text()
              });
            } else {
              $('#map1').jmap('AddMarker',{
                'pointLatLng':[$(itemlat).text(), $(itemlon).text()],
                'pointIcon' : foundIcon,
                'pointHTML': itemlinktitle + $(iteminfo).text()
              });
            }
            /* -- */
            $("#resultitems li").each(function () {
              //var origColor = $(this).css("backgroundColor");
              //$(this).css({backgroundColor: '#ff0'});
              //$(this).animate({backgroundColor: origColor}, 1000);
              $(this).highlightFade({
                start: [255,255,128],
	              interval: 100,
	              speed: 2000,
                attr: 'backgroundColor'});
            });
            /* -- */
          }
        });
      } else {
        //$('div#message').text(valid.message);
        // format and output result
        /*
        $("#resultitems").html(
          '<p>Het adres dat u zocht werd niet goed herkend, voer aub. een postcode of een straatnaam en een plaats in.</p>' +
          '<p class="warning">Het systeem gaf het volgende bericht:<br /><em>' + valid.message + '</em></p>'
        );
        */
        $("#resultitems").html(
          '<p>Het adres dat u zocht werd niet goed herkend, voer aub. een postcode of een straatnaam en een plaats in.</p>' +
          '<p>Er zijn geen locaties in de buurt gevonden, er kunnen meerdere oorzaken zijn.</p><p>Misschien is er geen vandyck store in dit het opgegeven land, of de dichtstbijzijnde winkel ligt buiten de zoekstraal.</p>' +
          '<p>U kunt zoeken op:</p>' +
          '<p><em>straatnaam, plaatsnaam, land</em> of<br /><em>plaatsnaam, land</em> of<br /><em>postcode, land</em></p>' +
          '<p>Voor het land kunt u ook de tweeletterige afkorting <em>(nl, be, lu, es etc.)</em> gebruiken.</p>' +
          '<p>U kunt ook in de <a href="./dealers.php">complete Vandyck dealerlijst</a> kijken.</p>'
        );
      }
    });


  });
});
