/*
'============================================================================
' NAME: DEALER JAVASCRIPT
' DESCRIPTION:
'   Scripts for Google maps
' UPDATES
'   2010-11-18 Ola Ljungars: fixed bug with CheckOverRides()
'   2010-11-18 Ola Ljungars: Added the markerClick function again for fc override
'   2010-10-25 Ola Ljungars: API 3.0 Version
' TODO
'   - Add a class for print markers (css also), hide them when screen
'   <style type="text/css">
'			@media print{.gmnoprint{display:none}}
'			@media screen{.gmnoscreen{display:none}}
'		</style>
'
'   - Update the markers when zooming / panning only in Firefox, IE hand handle
'			this either by fixing the style opacity or by adding the icon onbefore print
'			
'============================================================================
*/

var geocoder, gmap;
var aDealers = new Array(0);
var blueIcon;
var gLtLgBounds;

// Map boundaries (set in CT)
var mapCenterLat, mapCenterLng;
var mapPosMinLat, mapPosMinLng;
var mapPosMaxLat, mapPosMaxLng;

// Constants that can be overridden in CT code
var zoomVal = 6;
var zoomValOnePointOnly = 6;  // can be overridden from component data
var zoomValDealerPage = 14;   // can be overridden from component data
var bIsDealerPrimaryPage = false; // set by PCT Full_Dealer
var bIsRegularLocationMap = false; // set in GoogleMaps.ascx


var strScaniaIconURL    = "http://toolkitstatic.scania.com/static_images/dealer_locator/marker_scania20x19.png";
var strScaniaIconURLGIF = "http://toolkitstatic.scania.com/static_images/dealer_locator/marker_scania20x19.gif";
var strTestIcon					= "http://www.scania.co.uk/_system/img/template/sisicons/Service_23.gif"
var strGetDealerURL  = "/_inc/GetDealer.aspx"

var objMapDoc;

var bEnableGeoAddressLocationInfo = false;

var g_OverRideLatCenter = null;
var g_OverRideLngCenter = null;
var g_OverRideZoom = null;
var bUseOverRides = false;

var objMarkerImage = null;

function DL_changeCountry(strCountryCode){
  if(strCountryCode!=""){   // in case of .com
    location = "?actionID=showSearchForm&countryCode=" + strCountryCode
  }
}

function getMarkerImage(){
	if(objMarkerImage == null){
	  objMarkerImage = new google.maps.MarkerImage(strScaniaIconURL,
			new google.maps.Size(20, 19),
			new google.maps.Point(0,0),
			new google.maps.Point(10, 10)
		);	    
	}
	return objMarkerImage;
}

function DL_changeQuickSearch(strDealerID, strCountryCode){
  openDealerPopUp(strCountryCode + strDealerID)
}


var GM_JSDEBUG = false;

function debug(dStr){
	
	if(!GM_JSDEBUG) return;
	
	var darea = document.getElementById("darea");
	if(darea == null){
		darea = document.createElement("DIV");
		darea.id = "darea";
		darea.innerHTML = "<textarea rows='40' cols='80'></textarea>";
		document.body.appendChild(darea);
	}
  darea.childNodes[0].value += (dStr + "\n")
}

function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            if (oldonload) {
                oldonload();
            }
            func();
        }
    }
}

function setBoundaries(){
  mapPosMinLat = 3000;
  mapPosMaxLat = -3000;

  mapPosMinLng = 3000;
  mapPosMaxLng = -3000;
      
  var i;
  
  for(i=0;i<aDealers.length;i++){
    if(aDealers[i].lat>mapPosMaxLat) mapPosMaxLat=aDealers[i].lat;
    if(aDealers[i].lat<mapPosMinLat) mapPosMinLat=aDealers[i].lat;

    if(aDealers[i].lng>mapPosMaxLng) mapPosMaxLng=aDealers[i].lng;
    if(aDealers[i].lng<mapPosMinLng) mapPosMinLng=aDealers[i].lng;
  }
  mapCenterLat = (mapPosMaxLat + mapPosMinLat)/2;
  mapCenterLng = (mapPosMaxLng + mapPosMinLng)/2;
}


function CheckOverRides() {
  if (g_OverRideLatCenter != null && g_OverRideLngCenter != null && g_OverRideZoom != null) {
    g_OverRideLatCenter = g_OverRideLatCenter.replace(",", ".");
    g_OverRideLngCenter = g_OverRideLngCenter.replace(",", ".");
    g_OverRideZoom = g_OverRideZoom.replace(",", ".");

    g_OverRideLatCenter = parseFloat(g_OverRideLatCenter);
    g_OverRideLngCenter = parseFloat(g_OverRideLngCenter);
    g_OverRideZoom = parseInt(g_OverRideZoom);
    return true;
  }
	return false;	
}

var dbugCount = 0;


var winstat = ""

function onIconDivPropertyChange(){
	debug("onIconDivPropertyChange");
	if(!checkBounds()) return;
	return;
	
	var el = window.event?window.event.srcElement:this;//
	//debug("onIconDivPropertyChange[i]: " + el.style.left + " " + el.style.top);
	el.linkTo.style.left = el.style.left;
	el.linkTo.style.top = el.style.top;
	//debug(el.linkTo.style.cssText);
}

var tilesIndex = 0;

function checkBounds(){
	var bounds = gmap.getBounds();
	var point =  new google.maps.LatLng(aDealers[0].lat, aDealers[0].lng);
	return bounds.contains(point);
} 


/*
	Add check att den är inom viewport.
*/
function fixPrintMarkers(strMapID){
	var i;
	var mapDiv = document.getElementById(strMapID);
	debug("fixPrintMarkers");
	
	//if(tilesIndex!=0) return;
	
	if(aDealers.length!=1) return;
	
	if(!checkBounds()) {
		//return
	}
	
	if(window.navigator.appName.indexOf("Microsoft")!=-1){
		return;
	}

	var ffHideDiv = mapDiv.childNodes[0].childNodes[0];
	ffHideDiv = ffHideDiv.childNodes[ffHideDiv.childNodes.length-1]
	ffHideDiv.className = "gm_noprint";

	var allDivChilds = (mapDiv.getElementsByTagName("DIV"));;
	
	// Remove old markers
	
	var dstr= "";
	
	//alert(allDivChilds.length);
	
	for(i=0;i<allDivChilds.length;i++){
		if(allDivChilds[i].id.indexOf(strMapID + "_custmarker_")!=-1){
			var obj = allDivChilds[i].parentNode.removeChild(allDivChilds[i]);
			debug("removed existing");
			//alert(obj);
		}
	}
	//alert(dstr);
	allDivChilds = (mapDiv.getElementsByTagName("DIV"));;
	
	for(i=0;i<allDivChilds.length;i++){
		if(allDivChilds[i].style.backgroundImage.indexOf("scania")!=-1){		// Place a new marker / icon
			debug("found a layer["+i+"]" + allDivChilds[i].title);
			var pLayX = allDivChilds[i].offsetLeft || allDivChilds[i].style.left;
			var pLayY = allDivChilds[i].offsetTop ||  allDivChilds[i].style.top; 
				
				var strID = strMapID + "_custmarker_" + i
				var od;
				if(!od){
					od = document.createElement("DIV");
					od.innerHTML = "<img src='"+strScaniaIconURL+"'>";
					od.id = strID;
					od.style.position = "absolute";
					od.style.width = "20px";
					od.style.height = "20px";
					od.style.overflow = "hidden";
					//od.style.zIndex = "100000";
					od.className = "gm_noscreen";
					allDivChilds[i].className = "gm_noprint";
					allDivChilds[i].parentNode.appendChild(od);
					allDivChilds[i].linkTo = od;
					if(allDivChilds[i].addEventListener!=null){
						allDivChilds[i].addEventListener("DOMAttrModified", onIconDivPropertyChange, false); 
					}
				}
				//od.style.display = "inline";
				od.style.left = pLayX + "px";
				od.style.top = pLayY + "px";
				
				debug(mapDiv.id + " " + pLayX + " " + pLayY);
		}
		/*
		if(allDivChilds[i].style.cssText.indexOf("FILTER: alpha(opacity=1);")!=-1){		// IE markers
			if(allDivChilds[i].innerHTML.indexOf("<IMG") == 0){
				//var cssText = allDivChilds[i].style.cssText;
				//allDivChilds[i].style.cssText = cssText.replace("FILTER: alpha(opacity=1);", "");
				//winstat+="IE marker fix ";
			}
		}
		*/
	}
	
	tilesIndex++;
}



function GMInit30(strMapID, bIsPrintable){
	//debug("GMInit30");
	//alert("GMInit30")
	var mapDiv = document.getElementById(strMapID);
	var mapCenter;
	var mapOptions;
	var bOverideViewPort = CheckOverRides();
	
	if(mapDiv == null) return;
	
	if(!bIsDealerPrimaryPage){
	  setBoundaries(); 
	  /*
	  
	  // When/why is this code executed??
	  // 
    if(bEnableGeoAddressLocationInfo){
      if(document.forms["RequestForm"]){
        var objForm = document.forms["RequestForm"]
        if(objForm["address"]){
          if(objForm["address"].value!=""){
            getLocation(objForm["address"].value, objForm["countryCode"].value);
          }
        }
      }
    }
    */
	  
	  gLtLgBounds = new google.maps.LatLngBounds(new google.maps.LatLng(mapPosMinLat, mapPosMinLng), new google.maps.LatLng(mapPosMaxLat, mapPosMaxLng));
	  mapCenter = new google.maps.LatLng(mapCenterLat, mapCenterLng);

	  if (bOverideViewPort) {
	    zoomVal = g_OverRideZoom;
	    mapCenter = new google.maps.LatLng(g_OverRideLatCenter, g_OverRideLngCenter);
	  }
	  
		mapOptions = {
			zoom: zoomVal, 
			center: mapCenter,
			mapTypeId: google.maps.MapTypeId.ROADMAP,   
			scaleControl: true,
			mapTypeControl: true
		};
		gmap = new google.maps.Map(mapDiv, mapOptions);
		if (!bOverideViewPort) gmap.fitBounds(gLtLgBounds);
		placeLocations30();
		
	}
	else{
		if(aDealers.length == 1){  // only one dealer point on dealer primary/micro dealer page
			mapCenter = new google.maps.LatLng(aDealers[0].lat, aDealers[0].lng);
			mapOptions = {
				zoom: zoomValDealerPage, 
				center: mapCenter,
				mapTypeId: google.maps.MapTypeId.ROADMAP   
			}; 
			
			gmap = new google.maps.Map(mapDiv, mapOptions );
			
			//alert(aDealers[0].name + " (" + aDealers[0].city  + ")");
			
		  var image = getMarkerImage();
		  // alert(image);

	    var scaniaLogoMarker = new google.maps.Marker({
        position: mapCenter,
        map: gmap,
        icon: image,
        //id: "mongodeluxe",
        title: "Scania"
	    });

		  google.maps.event.addListener(gmap, 'tilesloaded', function(event) {
		    fixPrintMarkers(strMapID);
		  });	    
	    
		}
	}
	
	  // restore user panning/zooming
  if(bIsPrintable){
    if(window.opener){
      if(window.opener.gmap){
        gmap.setCenter(window.opener.gmap.getCenter())
        gmap.setZoom(window.opener.gmap.getZoom())
      }
    }
  }
	
  

 	

}

function GMInit(strMapID, bIsPrintable){
	GMInit30(strMapID, bIsPrintable);
	return;
}

function callBackGetLocation(results, status) {

  if (status != google.maps.GeocoderStatus.OK) {
    var objSearchForm = document.forms["dealerSearchForm"]
    alert("Sorry, but that address was not found, please try again (" + status + ")");
    objSearchForm["postalCoordLat"].value = "N/A";
    objSearchForm["postalCoordLng"].value = "N/A";
    objSearchForm.submit();
  }
  else {
    var res;
    if (results.length > 1) {
    }
    res = results[0];

    if (document.forms["dealerSearchForm"]) {
      //alert(res.geometry.location.lat());
      objSearchForm = document.forms["dealerSearchForm"]
      objSearchForm["postalCoordLat"].value = res.geometry.location.lat();
      objSearchForm["postalCoordLng"].value = res.geometry.location.lng();
      objSearchForm.submit();
    }    
  }
}

function getLocation(strPostCodeAndOrCity, strCountryCode){
  geocoder = new google.maps.Geocoder();
  geocoder.geocode({ 'address': strPostCodeAndOrCity + "," + strCountryCode }, callBackGetLocation); 
}

function DealerInfo(id, name, city, lat, lng){
  this.id = id;
  this.name = name;
  this.city = city;
  this.lng = lng;  
  this.lat = lat;
}

function addDealerToList(id, name, city, lat, lng){
  aDealers[aDealers.length] = new DealerInfo(id, name, city, lat, lng)
}

function placeLocations(){
  var i;
  var point;  
  for(i=0;i<aDealers.length;i++){
    var strTitle = aDealers[i].name + " (" + aDealers[i].city  + ")"
    var strID = aDealers[i].id
    var markerOptions = { title:strTitle,icon:blueIcon, id:strID};
    var objMarker = new GMarker(new GLatLng(aDealers[i].lat, aDealers[i].lng), markerOptions);
    GEvent.addListener(objMarker, "click", markerClick);
    gmap.addOverlay(objMarker);
  }
}


function placeLocations30(){
  var i;
  var point;  
  
  var image = getMarkerImage();

  for (i = 0; i < aDealers.length; i++) {
    var strTitle = aDealers[i].name + " (" + aDealers[i].city  + ")"
    var strID = aDealers[i].id;
    var position = new google.maps.LatLng(aDealers[i].lat, aDealers[i].lng) ;
	  var scaniaLogoMarker = new google.maps.Marker({
	      position: position,
	      map: gmap,
	      title: strTitle,
	      id: strID,
	      icon: image
	  });
    google.maps.event.addListener(scaniaLogoMarker, 'click', markerClick);
  }
}

/*
	Will be overridden in "finance companies"
*/
function markerClick(){
	location.href = strGetDealerURL + "?actionID=GetDealer&CountryDealerID=" + this.id;
}



function GM_submitSearchForm(objForm){
  var bReturn;

  objForm["GEOErrorMessage"].value = "";
  objForm["postalCoordLat"].value = "";
  objForm["postalCoordLng"].value = "";
  //alert(objForm["countryCode"].value);
  objForm["countryName"].value = objForm["countryCode"].options[objForm["countryCode"].options.selectedIndex].text;
  
  // GM Geo Support is enabled
  if(!objForm["city"]!= ""){
    var objAddress = objForm["address"];
    var objDistance = objForm["distance"];
    
    if(objAddress.value !=""){
      var objErrNumericDiv = document.getElementById("errNumericValue");
      var objDistanceInput = document.getElementById("distance");
      var objDistanceLabel = document.getElementById("lblDistance");
    
      if(isNaN(objDistance.value) || objDistance.value == ""){
        objErrNumericDiv.style.display = "block";
        objDistanceLabel.className = "error";
        objDistanceInput.className = "text error";
        return false;
      }
      else{
        if(objErrNumericDiv!=null) objErrNumericDiv.style.display = "none";
        objDistanceLabel.className = "";
        objDistanceInput.className = "text";
      }
      getLocation(objForm.address.value, objForm.countryCode.value); // form is submitted in callback function
    }
    else{
      objForm.submit();
      return true;
    }
  }
  else{
    objForm.submit();
    return true;
  }
}

function submitOnEnter(e, objForm){
  var evt = e || event;
  if(event.keyCode == "13") GM_submitSearchForm(objForm);
}

/*
  This function is here to avoid js errors 
  (since it is called on every page for some unknown reason), 
*/
function CMap24RenderMap(mid,sid,imgid){
  ; // do Nothing
}

function toggleDealerServicesTable(){
  var objTable = document.getElementById("dealerServicesTable")
  if(objTable.style.display=="none"){
    objTable.style.display = "block"
  }
  else{
    objTable.style.display = "none"
  }
}

/******************************************************************************
  NAME:
    expandInfo(strDivName)
  DESCRIPTION:
    Shows/hides the div (used vehicles details)
******************************************************************************/
function expandInfo(strDivName, strArrowDown, strArrowRight){
  var iLayerIndex = strDivName.substr(strDivName.length-1, strDivName.length);
  var objDiv = document.getElementById(strDivName)
  var objExpanderImg = document.getElementById("expander" + iLayerIndex )

  if(objDiv.style.display == "block"){
    objDiv.style.display = "none"
    objExpanderImg.src = strArrowRight;
  }
  else{
    objDiv.style.display = "block"
    objExpanderImg.src = strArrowDown;
  }
}

/*
  Submit and optional to change a value in the form
  strFieldName is the name of the value to change, strFieldValue is.. go figure..
*/
function submitForm(strFormName, strFieldName, strFieldValue){
  //alert(strFormName + " " + strFieldName + " " + strFieldValue);
  if(strFieldName!="") {
    document.forms[strFormName][strFieldName].value = strFieldValue;
  }
  document.forms[strFormName].submit();
}

function submitMapOfAll(strFormName){
  var objForm = document.forms[strFormName];
  if(objForm["searchresoption"]) objForm["searchresoption"].value="map";
  if(objForm["postalCoordLat"]) objForm["postalCoordLat"].value="";
  if(objForm["postalCoordLng"]) objForm["postalCoordLng"].value="";
  if(objForm["service"]) objForm["service"].value="";
  if(objForm["dealername"]) objForm["dealername"].value="";
  if(objForm["city"]) objForm["city"].value="";
  if(objForm["address"]) objForm["address"].value="";
  
  objForm.submit();
}

function setMapMode(MapMode){
  gmap.setMapType(MapMode);

  if(MapMode == G_HYBRID_MAP){
    document.getElementById("mapModeNormal").style.display = "none"
    document.getElementById("mapModeSatelite").style.display = "block"
  }
  else{
    document.getElementById("mapModeNormal").style.display = "block"
    document.getElementById("mapModeSatelite").style.display = "none"
  }
}

function pan(){
  gmap.panBy(new GSize(0, 10));
}


function printMapResults(strURL){
  window.open(strURL,"mapprintversion","width=700,height=550,scrollbars=yes");
}

function toggleSearchForm(objHref, isMaximized){
  
  var objShowSearchForm = document.getElementById("dealerShowSearchForm");
  var objSearchFormLI = document.getElementById("dealerSearchFormLI");
  
  if(isMaximized){
    objShowSearchForm.className = objShowSearchForm.className.replace("hidden", "visible_block");
    objSearchFormLI.className = objSearchFormLI.className.replace("visible_block", "hidden");
  }
  else{
    objShowSearchForm.className = objShowSearchForm.className.replace("visible_block", "hidden");
    objSearchFormLI.className = objSearchFormLI.className.replace("hidden", "visible_block");
  }
}


function findChildNode(objParent, strChildClassName){
	for(i=0;i<objParent.childNodes.length;i++){
		if(objParent.childNodes[i].className == strChildClassName) return objParent.childNodes[i];
	}
	return null;
}

function makeStatic(){
	//Sätt dessa redan vid largeMap och sedan tillbaka
	document.getElementById("root").className = "gm_noprint";

	var mapDiv = document.getElementById("GoogleMapLarge")
	
	var mapDiv = document.getElementById("GoogleMapLarge");
	var w = mapDiv.style.width + "";
	var h = mapDiv.style.height + "";
	w = w.replace("px", "");
	h = h.replace("px", "");
	
	mapDiv.className += " gm_noprint";

	var pDiv = 	document.createElement("DIV");
	pDiv.className = "gm_noscreen";
	mapDiv.parentNode.insertBefore(pDiv,mapDiv);  
	
	var center = gmap.getCenter();
	var strIMGSRC = ""
	strIMGSRC+="http://maps.google.com/maps/api/staticmap?";
	strIMGSRC+="center="+center.lat() +","+center.lng();
	strIMGSRC+="&zoom="+gmap.getZoom();
	strIMGSRC+="&size="+w+"x"+h;
	strIMGSRC+="&markers=icon:" + "http://toolkitstatic.scania.com/static_images/dealer_locator/marker_scania20x19.png"; 
	strIMGSRC+="|"+center.lat()+","+center.lng()+"";
	strIMGSRC+="&sensor=false";
	pDiv.innerHTML = "<img src='"+strIMGSRC+"' onLoad='window.print()'>"
}

function largeMap(){
	showL("downloadImages");
	var objDownloadImages = document.getElementById("downloadImages");
	var objIFrameHolder = findChildNode(objDownloadImages, "iframholder");
	var strPrintLayer = "<div id=\"layer-print\"><a href=\"#\" onclick=\"makeStatic();return false;\"><span class=\"icon-print\"></span>"+document.getElementById("ctl00_ctl05_lblPrint").innerHTML.toLocaleUpperCase()+"</a></div>";
	objIFrameHolder.innerHTML = strPrintLayer + objIFrameHolder.innerHTML;

	var objDownloadImages2 = findChildNode(objIFrameHolder, "downloadImages");
	objDownloadImages2.innerHTML = "";
	var objDivDisclaimer = document.getElementById("divDisclaimer");
	objDivDisclaimer.innerHTML = "";
	
	objDownloadImages2.id = "GoogleMapLarge";
	
	objDownloadImages2.style.width = "580px";	
	objDownloadImages2.style.height = "700px";
	objDownloadImages2.style.top="33px";
	
	objIFrameHolder.style.width="580px";				
	objIFrameHolder.style.height="763px";				

	objDownloadImages.style.paddingTop = 0;
	objIFrameHolder.style.top = "40px"
	
	GMInit("GoogleMapLarge", false);
	window.scrollTo(0,0);
}

/*
	DealerLocator.js
*/

function setNewRegion(objForm){
	location.href="?actionID=showSearchForm&countryCode=" + objForm["countryCode"].value + "&region=" + objForm["region"].value;
}
