﻿function print()
{
    var theMap = getMap();
    var theMapPgSetup = theMap.getPageSetup();
                
    //collapse Utility grouped layers (this is so everything fits on the printed page)
    collapseLayerGroup(theMap, "Utilities - Water");
    collapseLayerGroup(theMap, "Utilities - Sanitary");
    collapseLayerGroup(theMap, "Utilities - Storm");
                
    //enabling printing events means onBeginLayout and onEndLayout functions run
	theMap.enablePrintingEvents();
            	
	//set the defaults for the print layout
	theMapPgSetup.setTitle("City of Grande Prairie");
	theMapPgSetup.setInclude("mg_legend", true);
	theMapPgSetup.setInclude("mg_northarrow", false);
	theMapPgSetup.setInclude("mg_scalebar", false);
	theMapPgSetup.setInclude("mg_title", false);
	theMapPgSetup.setInclude("mg_timestamp", false);
	theMapPgSetup.setInclude("mg_url", false);

	//call the dialog boxes
	theMap.pageSetupDlg();		
	theMap.printDlg();
            	
	theMap.disablePrintingEvents();
}

function onBeginLayout(pgSetup, printInfo)
{
    pgSetup.setPageMargins(0,0,0,0);
}

function onEndLayout(layout, printInfo)
{
    //define variables
	//define extents, height, and width of all page elements
	var myMap = getMap();
	var PageSetup = myMap.getPageSetup();
	var thePageExtent = printInfo.getPageExtent();
	var thePageResolution = (thePageExtent.getMaxY() - thePageExtent.getMinY()) * 0.1;
	var pageHeight = (thePageExtent.getMaxY() - thePageExtent.getMinY());
	var pageWidth = (thePageExtent.getMaxX() - thePageExtent.getMinX());
            	
	var mapElement = layout.getPageElement("mg_map");
	var mapExtent = mapElement.getExtent();
	var mapHeight = (mapExtent.getMaxY() - mapExtent.getMinY());
	var mapWidth = (mapExtent.getMaxX() - mapExtent.getMinX());
            	
	var titleElement = layout.getPageElement("mg_title");
	var titleExtent = titleElement.getExtent();
	var titleHeight = (titleExtent.getMaxY() - titleExtent.getMinY());
	var titleWidth = (titleExtent.getMaxX() - titleExtent.getMinX());
            	
	var legendElement = layout.getPageElement("mg_legend");
	var legendExtent = legendElement.getExtent();
	var legendHeight = (legendExtent.getMaxY() - legendExtent.getMinY());
	var legendWidth = (legendExtent.getMaxX() - legendExtent.getMinX());
            	
	var scaleElement = layout.getPageElement("mg_scalebar");
	var scaleExtent = scaleElement.getExtent();
	var scaleHeight = (scaleExtent.getMaxY() - scaleExtent.getMinY());
	var scaleWidth = (scaleExtent.getMaxX() - scaleExtent.getMinX());
            	
	var northElement = layout.getPageElement("mg_northarrow");
	var northExtent = northElement.getExtent();
	var northHeight = (northExtent.getMaxY() - northExtent.getMinY());
	var northWidth = (northExtent.getMaxX() - northExtent.getMinX());
            	
	var urlElement = layout.getPageElement("mg_url");
	var urlExtent = urlElement.getExtent();
	var urlHeight = (urlExtent.getMaxY() - urlExtent.getMinY());
	var urlWidth = (urlExtent.getMaxX() - urlExtent.getMinX());
            	
	var dateElement = layout.getPageElement("mg_timestamp");
	var dateExtent = dateElement.getExtent();
	var dateHeight = (dateExtent.getMaxY() - dateExtent.getMinY());
	var dateWidth = (dateExtent.getMaxX() - dateExtent.getMinX());
            	
	//check if a utility layer is turned on
	//if there is, add the custom utility legend symbol to print layout
	//the symbol must be in the API Symbols in the MWF
	var layerGroup = myMap.getMapLayerGroup("Utilities - Water");
	if (layerGroup != null)
	{
	    var layerGroupVisible = layerGroup.getVisibility();
		if (layerGroupVisible == true)
		{
		    var utilLegendElement = layout.addSymbol("UtilLegend");
		}
		else
		{
		    layerGroup = myMap.getMapLayerGroup("Utilities - Sanitary");
			if (layerGroup != null)
			{
			    var layerGroupVisible = layerGroup.getVisibility();
				if (layerGroupVisible == true)
				{
				    var utilLegendElement = layout.addSymbol("UtilLegend");
				}
				else
				{
				    layerGroup = myMap.getMapLayerGroup("Utilities - Storm");
					if (layerGroup != null)
					{
					    var layerGroupVisible = layerGroup.getVisibility();
						if (layerGroupVisible == true)
						{
						    var utilLegendElement = layout.addSymbol("UtilLegend");
						}
					}
				}
			}
		}
    }
            	
	if (utilLegendElement != null)
	{	
	    var utilLegendExtent = utilLegendElement.getExtent();
		var utilLegendWidth = (utilLegendExtent.getMaxX() - utilLegendExtent.getMinX());
		var utilLegendHeight = (utilLegendExtent.getMaxY() - utilLegendExtent.getMinY());
            		
		if (utilLegendWidth > legendWidth)
		{
		    legendWidth = utilLegendWidth;
		}
            		
		if (utilLegendHeight > legendHeight)
		{
		    legendHeight = utilLegendHeight;
		}
    }

    //set the location of all page elements	
    titleExtent.set(thePageExtent.getMinX() + 0.3 * pageWidth, thePageExtent.getMinY(), thePageExtent.getMaxX() - 0.3 * pageWidth, thePageExtent.getMinY() + titleHeight);
    titleElement.setExtent(titleExtent);
    titleElement.setPrintPriority(90);
            	
    mapExtent.set(thePageExtent.getMinX() + legendWidth + pageWidth * 0.01, thePageExtent.getMinY() + titleHeight + pageHeight * 0.03, thePageExtent.getMinX() + legendWidth + mapWidth + pageWidth * 0.01, thePageExtent.getMinY() + titleHeight + mapHeight + pageHeight * 0.03);
    mapElement.setExtent(mapExtent);
    mapElement.setPrintPriority(1);
            	
    legendExtent.set(thePageExtent.getMinX(), thePageExtent.getMinY() + titleHeight + pageHeight * 0.03, thePageExtent.getMinX() + legendWidth, thePageExtent.getMinY() + titleHeight + legendHeight + pageHeight * 0.03);
    legendElement.setExtent(legendExtent);
    legendElement.setPrintPriority(80);
            	
    dateExtent.set(thePageExtent.getMaxX() - dateWidth - urlWidth, thePageExtent.getMaxY() - dateHeight - urlHeight, thePageExtent.getMaxX() - urlHeight, thePageExtent.getMaxY() - urlHeight);
    dateElement.setExtent(dateExtent);
    dateElement.setPrintPriority(70);
            	
    urlExtent.set(thePageExtent.getMaxX() - urlWidth, thePageExtent.getMaxY() - urlHeight, thePageExtent.getMaxX(), thePageExtent.getMaxY());
    urlElement.setExtent(urlExtent);
    urlElement.setPrintPriority(60);
            	
    scaleExtent.set(thePageExtent.getMinX() + legendWidth + pageWidth * 0.02, thePageExtent.getMaxY() - dateHeight - urlHeight - scaleHeight - pageHeight * 0.01, thePageExtent.getMinX() + legendWidth + urlWidth + pageWidth * 0.02, thePageExtent.getMaxY() - dateHeight - urlHeight - pageHeight * 0.01);
    scaleElement.setExtent(scaleExtent);
    scaleElement.setPrintPriority(50);
            	
    northExtent.set(thePageExtent.getMaxX() - northWidth, thePageExtent.getMaxY() - urlHeight - dateHeight - northHeight - pageHeight * 0.01, thePageExtent.getMaxX(), thePageExtent.getMaxY() - urlHeight - dateHeight - pageHeight * 0.01);
    northElement.setExtent(northExtent);
    northElement.setPrintPriority(40);
            	
    if (utilLegendElement != null)
	{	
	    utilLegendElement.setBackmode(0);
		utilLegendElement.setPrintPriority(100);
		//you can't use the utilLegendWidth or Height to set the location and size of the symbol, just doesn't show up
		utilLegendExtent.set(thePageExtent.getMinX(), legendExtent.getMaxY(), mapExtent.getMinX() - pageWidth * 0.01, thePageExtent.getMaxY());
		utilLegendElement.setExtent(utilLegendExtent);
    }
}