/*
** This file was created by Cuesta Systems Inc, May 2004
** It contains global variables for the MapServer application.
 */
 //sets the browser related variables
var theBrowser = navigator.appName;
var theBrowserVersion = navigator.appVersion;
var theBrowserVersionNum = parseFloat(theBrowserVersion);
var fullDHTML = false;
//alert(theBrowser + " - " + theBrowserVersionNum + " - " + theBrowserVersion);
//sets if dhtml can be used
if ((theBrowserVersion.indexOf("MSIE 5")!=-1) || (theBrowserVersion.indexOf("MSIE 6")!=-1) || (theBrowser=="Netscape") || (theBrowserVersionNum>=5)) fullDHTML = true;
// test for Microsoft Internet Explorer
var isIE = (navigator.appName.indexOf("Internet Explorer")>=0);
var isIE4 = false;
// test for Netscape
var isNav = (navigator.appName.indexOf("Netscape")>=0);
var isNav4 = false;
var is5up = true;
//it is other browser
var isOtherBrowser = false;
//********************************************************************************
 // variable that sets if the application is for Intranet or Internet use
// depending on this variable some functionality will be turned on/off
// if the value = true then the application is used in an Intranet environment
// if the value= false then the application is used in an Internet environment
var isInternal = false;

////Cuesta URL and paths
 // application url
var appDir = "";
//jsp url
var hostName = document.location.host;
var jspAppDir = "http://" + hostName;
//var jspAppDir = "http://" + hostName;
var cuestaURL = "/";
var cuestaJspURL = "/";
var cuestaPath = "C:\\Inetpub\\GoMap\\";
var cuestaTmpPath = "C:/Inetpub/wwwroot/tmp/";

//  for gateway URL
var serverHostGateway=  "gateway.nwtgeoscience.ca";
// var gatewayURL="http://"+ hostName+"/gateway";
var gatewayURL="http://"+ serverHostGateway;
//var gmetaReportURL="http://" + hostName +"/geoinacript/";
var gmetaReportURL="/geoinacript/";

var gatewayLogin="";
//end of hua added

var mapProjection="";
var mapProjectionName="";
var mapProjectionOld=""; 
var mapScaleOld ="";
var projOrig = ""; 
var mapTempProjection="";
//********************************************************************************
  
//Map size
var mapWidth = -1;
var mapHeight = -1;
//Map Image
var mapImage = "";
//Map Extents
var mapExtent = new Array(); 
//********************************************************************************

 //OV Map
var isOVMapVisible = true;
//OV Map Image and size
var ovWidth = 164;
var ovHeight = 124;
var ovImage = "";

// zoom to scale factor
var ZoomToScale = 50000;
//********************************************************************************
// flag to see if the map is re-loaded or it is initialized
var isReloaded = false;
//********************************************************************************
//  Cuesta Quick Printing
//Cuesta Quick Printing
var PrintTitle="Cuesta Systems Inc";
var PrintSubTitle="";
var MapNotes = "";//Cuesta Quick Printing
//****************************************
//the layers arrays
//filled in on app initialization
var LayerID = new Array();
//var LayerAlias = new Array();
var LayerName = new Array();
var LayerVisible = new Array();
var LayerFieldList = new Array();
var LayerFieldAliasList = new Array();
var LayerMinScale = new Array();
var LayerMaxScale = new Array();
var LayerClassMinScale = new Array();
var LayerClassMaxScale = new Array();
var LayerClassStatus = new Array();
var LayerType = new Array();
// Layer types values are:
// "point" = MS_LAYER_POINT;
// "line" = MS_LAYER_LINE;
// "polygon" = MS_LAYER_POLYGON:
// "raster" = MS_LAYER_RASTER;
// "annotation" = MS_LAYER_ANNOTATION;
// "query" = MS_LAYER_QUERY;
// "circle" = MS_LAYER_CIRCLE;
// "tileindex" = MS_LAYER_TILEINDEX;
var LayerIsFeature = new Array();
var LayerExtent = new Array();
var LayerDataSet = new Array();
var LayerConnType = new Array();
// Connection types values are:
// "inline" = MS_INLINE;
// "shapefile" = MS_SHAPEFILE;
// "tiledshapefile" = MS_TILED_SHAPEFILE:
// "sde" = MS_SDE;
// "ogr_dgn" = MS_OGR ('DGN' type);
// "ogr_other" = MS_OGR (any other type);
// "tiledogr" = MS_TILED_OGR;
// "postgis" = MS_POSTGIS;
// "wms" = MS_WMS;
// "oraclespatial" = MS_ORACLESPATIAL;
// "wfs" = MS_WFS;
// "graticule" = MS_GRATICULE;
// "mygis" = MS_MYGIS;
var LayerFieldTypeList = new Array();
var LayerConnectionName = new Array();
var LayerConnectionTable = new Array();	
var LayerHyperLinkField = new Array();
var LayerHyperLinkPrefix = new Array();
var LayerHyperLinkSuffix = new Array();

var LayerFieldWidthList = new Array();  
var LayerNotConnectedList = new Array();  
var LayerOnLegend = new Array();  
var LayerFieldVisibleList = new Array(); 

//dynamic data
var LayerisDynamic = new Array();
var LayerDataPath = new Array();
//joins
var LayerJNameList = new Array();
var LayerJConnectionList = new Array();
var LayerJSourceFieldList = new Array();
var LayerJSourceFieldTypeWidth = new Array();  
var LayerJTargetFieldTypeList = new Array();
var LayerJFieldList = new Array();
var LayerJFieldAliasList = new Array();
var LayerJClauseList = new Array();
var LayerJTabList = new Array();
var LayerJTargetTableList = new Array();
var LayerJTargetFieldList = new Array();
var LayerJFieldTypeList = new Array();
var LayerJHyperLinkField = new Array();
var LayerJHyperLinkPrefix = new Array();
var LayerJHyperLinkSuffix = new Array();
var LayerSJFieldList = new Array();
var LayerSJFieldTypeList = new Array();
var LayerSJFieldAliasList = new Array();
var LayerSJHyperLinkField = new Array();
var LayerSJHyperLinkPrefix = new Array();
var LayerSJHyperLinkSuffix = new Array();
var LayerJFieldList_FINAL = new Array();//Contains all Joins and Subjoins selfields
var LayerJFieldAliasList_FINAL = new Array();
var LayerJFieldTypeList_FINAL = new Array();
var LayerJHyperLinkField_FINAL = new Array();//Contains all Joins and Subjoins selfields
var LayerJHyperLinkPrefix_FINAL = new Array();
var LayerJHyperLinkSuffix_FINAL = new Array();
var LayerJFieldVisibleList = new Array();  
var LayerSJFieldVisibleList = new Array();  
//--------------------------------------------------------
var LayerIdentifyFields = new Array();  
var LayerIdentifyFieldsHeader = new Array();  
var identifyMode = 2; //means regular identify
//--------------------------------------------------------
var defaultJTabName = "General";
//********************************************************************************
 //dynamic layers
var useDynamicLayers = false;
//for mapserver communication
var dynamicDataString = "";

//for keeping track on the original number of layers
var mapLayersNumber = -1;
//LEGEND
//legend icons string
var LayerLegendArray = new Array();
//legend class names string
var LayerLegendNameArray = new Array();
//active layer variables
var layerCount = 0;
var loadedLayers = new Array();
 // need to add another collection to keep track of layers visibility on Manage Layers page
var arrVisibleLayers = new Array();
// because we reload the Manage Layers page each time user collapses or expands the groups, need to add another
// collection to keep track of layers checked off.
var arrTempCheckedLayers = new Array();
//var ActiveLayerID ="WWR";
//var ActiveLayerID="Property Parcels";
var ActiveLayerID="Geological Provinces";
var ActiveLayerName="";
var ActiveLayerFields="";
var ActiveLayerType="";
var ActiveLayerJoinFields = "";
 //variables for layer reordering
var reorderWin = "";
var useLayerReorder = false;
//these 2 are driven from php
var LayerOrderInitialPHP = new Array();
var LayerOrderCurrentPHP = new Array();
//javascript
var CurrentLayerOrder = new Array();
var CurrentLayerOrderName = new Array();
var selLayerOrder = -1;
var reorderCaller = "usual"; // used for reorder with dynamic layers, to know the start point
//****************************************
//  new variables for Zooming with rubber band
var rubberBandExtent = new Array();
 //********************************************************************************
 //field names, values and extents returned from a query
var qryLayerFields = new Array();
var qryLayerValues = new Array();
var qryLayerShapeIndex = new Array();
var qryLayerJoinValues = "";
var qryLayerJoinIndex = -1; 
//Cuesta icon for Query Windows
var qryIcon = "tools_images/find.gif";
//********************************************************************************
var LayerRenderString = new Array();
var LayerShapeField = new Array();
var LayerIDField = new Array();
var LayerFieldTypeList = new Array();
var LayerFieldSizeList = new Array();
var LayerFieldPrecisionList = new Array();
var LayerFields = new Array();
var LayerFieldCount=0;
var layerLeft = 0;
var layerRight = 0;
var layerTop = 0;
var layerBottom = 0;
var fieldIndex = 0;
var FeatureLayerCount = 0;
//********************************************************************************
 // variable that stores the legend url
var legImgURL = "";
//********************************************************************************
 //mouse position variables
var xDistance = 0;
var yDistance = 0;
var hspc = 18;
var vspc = 18;
//********************************************************************************
 //Mode Frame, the mode
// by default is set to Zoom In
var modeName = "Zoom In";
var toolMode = "zoomin";
var toolName =""; //To be used for selection and Spatial Queryes or any tools that share the Mode Name
//********************************************************************************
 //dots per inch; used in scale calculations
//MapServer uses as default 72 dpi
//ArcIMS uses as default 96 dpi
var iScreenDPI = 72;
//********************************************************************************
 //Arrays holding data for Admin Boundary layers 
//used in Zoom To Boundary
var AdminBoundLayers = new Array();
AdminBoundLayers[0] = "";
var BoundLayerField = new Array();
BoundLayerField[0]= "";
//to store the field name for selected layer
//var cuesta_sqfield=""
//********************************************************************************

//********************************************************************************
 //Quick find variables
var qfcaller = "owner";
var qffirstField = "";
var qfsecondField = "";
var qfStreetIntersectLayerName = "Intersection Names";
var qfStreetIntersectResult = "";
var qfStreetIntFirstFieldName = "";
var qfStreetIntSecFieldName = "";
var isIntersection = false;
	
var addrSearched = "";
var isGeocode = false;

var qfcallerArray = new Array();
qfcallerArray[0] = "owner";
qfcallerArray[1] = "address";
qfcallerArray[2] = "roll";
qfcallerArray[3] = "streetname";
qfcallerArray[4] = "intersection";
qfcallerArray[5] = "lot";

var qflayerArray = new Array();
qflayerArray[0] = "";
qflayerArray[1] = "";
qflayerArray[2] = "";
qflayerArray[3] = "";
qflayerArray[4] = "";
qflayerArray[5] = "";

var qfclauseArray = new Array();
qfclauseArray[0] = "";
qfclauseArray[1] = "";
qfclauseArray[2] = "";
qfclauseArray[3] = "";
qfclauseArray[4] = "";
qfclauseArray[5] = "";

 //variables used in find to set what queries to be displayed
var isFindOwner = true;
var isFindAddress = true;
var isFindRoll = true;
var isFindStreet = true;
var isFindIntersection = true;
var isFindLot = true;
//********************************************************************************
 //variables used in Notification List
var PropertyLayerName = "";
var PropertyPKName ="";
var PropertySelectedFeatures = new Array();//buffer results
var qryNotificationResults = new Array();//used only when selected target layer is PropertyLayerName
var NotificationPrintSize = "";
var NotificationPrintLayout = "";
var useNotification = false;
var legWidth = 150;
var legHeight = 150;
//********************************************************************************
 //Measure distance & set units variables
var isMeasDistLayerOn = false;// flag to see if the map need to display measure distance layer
var numDecimals = 2;
var clickCount = 0;
var clickMapPointX = new Array();
var clickMapPointY = new Array();
var MapUnits = "Meters";
var ScaleBarUnits = "Kilometres";
var unitList = new Array();
	unitList[0] = "DEGREES";
	unitList[1] = "FEET";
	unitList[2] = "MILES";
	unitList[3] = "METERS";
	unitList[4] = "KILOMETRES";
var sUnitList = new Array();
	sUnitList[0] = "DEGREES";
	sUnitList[1] = "FEET";
	sUnitList[2] = "MILES";
	sUnitList[3] = "METERS";
	sUnitList[4] = "KILOMETRES";
var totalMeasure=0;
var currentArea = 0;
//********************************************************************************
 //Add annotation text variables
var isAddTextLayerOn = false;// flag to see if the map need to display annotation layers
var annotationType = 0 //can be 0='none',1='pin',2='point',3='line',4='rectangle' or 5='shape'
var annotationAction = "";
var annoteWithText = true //for symbol annotation only
var annotationStr = new Array();
var annotationPinStr = new Array();
var annotationPointStr = new Array();
var pointDetails = new Array();
var annotationLineStr = new Array();
var lineDetails = new Array();
var lineStrCount = -1;
var isNewLine = true;
var annotationRectStr = new Array();
var rectStrCount = -1;
var rectDetails = new Array();
var isNewRect = true;
var annotationShapeStr = new Array();
var shapeStrCount = -1;
var shapeDetails = new Array();
var isNewShape = true;
var mapTextX = 0;
var mapTextY = 0;
var classType = new Array; //to populate annotation pulldown list
var classList = new Array;
var classColor = new Array;
var annotListStr = "";
var pinSelected = new Array();
	pinSelected = [0,0,0,0,0];
var isPopUpWindow = true;

//for pointLayer DHTML layer
var prevClickMapXY = new Array;
var isDrawPointLayer = false;
//********************************************************************************
 //Add selection variables
var isSelectionLayerOn = false;// flag to see if the map need to display selection layers
var isAddSelection = false;
var isDelSelection = false;
var selectionPointStr = new Array();
var selpointCount = 0;
var selectionShapeStr = new Array();
var selshapeCount = 0;
var selectionLineStr = new Array();
var sellineCount = 0;
var selectionType = "";
var qryResults = "";
var sqryShpResults = "";
var sqryLayerName = "";
//********************************************************************************
 //buffer variables
var isBuffer = false;
var bufferTargetLayer = "";
var bufferDistance = "";
var bufferShapeIndexes = "";
//********************************************************************************
 //Store Geo Portal font variables
var fontList = new Array();// GeoPortal font names
//********************************************************************************
 //bookmarks variables
var cookieExpiryDays = 60;
//********************************************************************************
 //save/load settings variables
//allows to customize if you'd like the active layer to be loaded or not
var loadActiveLayer = true;
//********************************************************************************
 //set the initial window displayed into the TextFrame
	//layer list 		0
	//quick find		1	
	//zoom to boundary	2
	//annotation 		3
	//selection		4
	//notification list	5 
	//measure		6
	//extract		7
	//quick print		8
	//custom print		9
	//save image		10
	//custom query		11
	//set units		12
	//end AD July 14, 2005
	//SEE FUNCTION csy_populateTextFrame() in csy_Commons TO ADD MORE
var initialTextFrameWin = 0;
//********************************************************************************
//variables used in layer customization
var useLayerCustomization = false;
var tempCustomString = "";
//keeps customization
var CustomLayer = new Array(); //it matches with LayerID
var CustomLayerIndex = 0;
var CustomLayerString = new Array();
var CustomType = new Array();
var showPopUp =true;
//Cuesta - var for range colouring
var useRangeCustomization = false;
var useUniqueCustomization = false;
//Cuesta to keep track of the current customization
// layers from the map file
var KTCustomLayerString = new Array();
var KTCustomLabelString = new Array();
var KTDefaultLayerString = new Array();
var KTDefaultLabelString = new Array();
var KTCustomType = new Array();
var KTDefaultType = new Array();
var KTType = new Array();
var KTTypeDef = new Array();
var KTDataset = new Array();
var KTCustomized = new Array();//for layer restaure default
var KTSymbologyCustomized = new Array();
//********************************************************************************
var qfQueryFilter = "";
//********************************************************************************
//variables used in Standard Reports
var stdnReportTitle = "";
var stdnReportSubtitle = "";
var stdnReportHeading = "";
var stdnReportFields = "";
var stdnReportParam = "";
var hasQueryResults = "";

// added new variable for joins
var stdnReportHeader = "";
var stdnReportHeaderAlias = "";
var stdnReportJNameList = "";
var stdnReportJConnectionList = "";
var stdnReportJSourceFieldList = "";
var stdnReportJTargetFieldTypeList = "";
var stdnReportJFieldList = "";
var stdnReportJFieldAliasList = "";
var stdnReportJClauseList = "";
var stdnReportJSectionList = "";
var stdnReportFieldTypeList = "";
var stdnReportFieldVisibleList = "";
var stdnReportJTargetTableList = "";
var stdnReportJTargetFieldList = "";
var stdnReportJFieldTypeList = "";
var stdnReportJFieldVisibleList = "";
var stdnReportHyperLinkField = "";
var stdnReportHyperLinkPrefix = "";
var stdnReportHyperLinkSuffix = "";
var stdnReportJHyperLinkField = "";
var stdnReportJHyperLinkPrefix = "";
var stdnReportJHyperLinkSuffix = "";
var stdnReportSJFieldList = "";
var stdnReportSJFieldTypeList = "";
var stdnReportSJFieldVisibleList = "";
var stdnReportSJFieldAliasList = "";
var stdnReportSJHyperLinkField = "";
var stdnReportSJHyperLinkPrefix = "";
var stdnReportSJHyperLinkSuffix = "";
var stdnReportJFieldList_FINAL = "";
var stdnReportJFieldAliasList_FINAL = "";
var stdnReportJFieldTypeList_FINAL = "";
var stdnReportJFieldVisibleList_FINAL = "";
var stdnReportJHyperLinkField_FINAL = "";
var stdnReportJHyperLinkPrefix_FINAL = "";
var stdnReportJHyperLinkSuffix_FINAL = "";

 var useStandardReport=false;
 var stdnIncludeMap=false;
var stdnMapPosition=""; 
//********************************************************************************
//variables used in Layer MetaData
var metaPrefix = "";
var metaSuffix = ".shp";
var metaDataPath = "http://"+hostName+"/GoMapMeta/Layer";
var metaLayerName="";
var metaLayerIndex=-1;
var UseGroupMeta = "true";
var GroupMetaPath = "http://"+hostName+"/GoMapMeta/Group";
var mblnIsGroupClicked = false;
var outputFileFormat = "";

///  sending email in Save or Email Map images
var mailServer = "mhk-ex1.ad.dpra.com";
var fromEmailAddress = "MSGeoPortal@dpra.com";
var UseEmail = "false";

var exportImgString = "";

//********************************************************************************
//variables used in Layer MetaData
var saveImgString="";
var saveMapImage = "";
var saveOVMapImage = "";
var finalControl = false;
//********************************************************************************
var hyperlinkWindowWidth=800;
var hyperlinkWindowHeight=600;
//********************************************************************************
 //Cuesta Custom Printing
var PrintTitle="Cuesta Systems Inc";
var PrintSubTitle="";
var CustomPrintSize="";
var CustomPrintLayout="";
var CustomPrintDocName="";
var CustomPrintMapImageName="";
var CustomPrintLegendImageName="";
var CustomPrintOVImageName="";
//********************************************************************************
 //variables used in Capture X,Y
var mapCaptureX = "";
var mapCaptureY = "";
//********************************************************************************
// variable 'useTextFrame' is currently called in csyOpen.js and csyCustomizeLayer.js
//but not declared anywhere
var useTextFrame=true;

// raster layer data
var LayerisRaster = new Array(); 
var RasterDataString = "";

// persist layer data
var persistLayerName="";
var LayerisPersist = new Array(); // 0/1
var PersistLayerDataPath = new Array();  //contain the name of the shapefile that build the persist layer
var PersistLayerSource = new Array(); //contain the name of the layer source of persiting layer
var PersistLayerQry = new Array(); //contain the name of the layer source of persiting layer
var persistDataString = "";
var PersistLayerType  = new Array(); //contain the field and datatype of the layer 
var PersistLayerWidth  = new Array(); //contain the field and width of the layer 
var persistLayerType  = ""; //contain the field and datatype of the source layer 
var persistLayerWidth  = ""; //contain the field and width of the source layer 
var qryUniqueIDList="";//contains the values of the selected ids of a layer in following format: fieldname~val1~val2~...
// Export variables
var strExportLayers = "";
var strJoinedLayers = "";
var strExportFileSize = "";
var strAllowedFileSize = "";
var strDisclaimer = "";
var strExportDisclaimer = "";
var DistributableLayers = new Array();
var strExportReports = "";
var strExportKMLs = "";

 var hightlightShapeResults = "";
var highlightLayer = "";
var selectedReferencesCustom = "";

 var previewImageFiles_RootFolder = "D:\\Gomap_data\\publication_previews";

// need to store the returned GML when using identify tool on the WMS layers
var strGML = "";

 var groupLegendCheckedStatus = new Array();

var lstOutsideLayers = 'x|y';
var MAX_DBRECORDS_US = 150;//for customize by unique symbology

var arrCollapsedGroups = new Array();

var submittime = ""; 
var sLyLoaded = "";
var sLyOrder = "";
var sLyVisible = "";
var sTheCommand = "" ;
var nMapWidth = 100;
var nMapHeight = 100;
var mapDExtent = new Array();
var mapCurExtent = new Array();

var maxRecordsJoins=700;
var maxMessage="Your query has resulted in more than " + maxRecordsJoins + " feature with geometry being selected. Only the first " + maxRecordsJoins+" will be displayed on the map and in the tabular result window; in addition, results having no geometry will be shown in the tabular results window only. You may wish to refine your query to further restrict the selection set. Click OK to continue or Cancel to redefine your query.";
var nrSelectedRec = 0;
var arrOracleSpatial=['Showings, by Commodity','Showings, by Dev. Stage','References','G-Meta','Diamond Mineral Data'];
var lstOS_extent="'Showings, by Commodity'~-963000.35,8144705.41,537723.39,9752356.95|'Showings, by Dev. Stage'~-963000.35,8144705.41,537723.39,9752356.95|'References'~-1823030.6295,7433747.5693,3336724.6588,11095798.8569|'G-Meta'~-1734486.7559,17781.4164, 561336.3966, 9247904.7531|'Diamond Mineral Data'~-982682.71,8137727.5,904989.124,10312688.9";

//SP Aug 2006
var qrySaveName = ""; // used to store the file name of the saved query .
var alertFeatureNo=500;
var alertFeatureNoMessage="More than "+alertFeatureNo+" records selected, it will take few seconds to load the page!";

var alertManyFeatureMessage="More than "+alertFeatureNo+" records selected, it will take few seconds to draw and select this selection! \n Click OK to continue or Cancel to redefine your query.";
var tempODBC = "TempPathODBC";

var refIdList = "";
var tmpRasterExtent = ""; //will keep the extent for the preview images

var ShowingLayerName="Showings, by Commodity";
var ShowingLayerID="C_SHOW_ID";
var GmetaLayerName="G-Meta";
var GmetaLayerID="SURVEYID";
var RefLayerName="References";
var RefLayerID="REF_ID";
var DiamondLayerName ="Diamond Mineral Data";
var DiamondLayerID="PK_KIDD";


//AD June 2007, to store selected dyn. group name, and tool type (dynamic or standard)
var toolDynGroupName = "";
var selectedToolType = "";

var flagISBroken = 0; 

var ResetConnectionString = "";
var ResetConnectionData = "";
var refSourceData = "";

var ShowingConnectionString = "";
var ShowingConnectionData = "";
var ShowingSourceData = "";

var GmetaConnectionString = "";
var GmetaConnectionData = "";
var GmetaSourceData = "";

var DiamondConnectionString = "";
var DiamondConnectionData = "";
var DiamondSourceData = "";


var GomapDyn = ""; 
var sdeLayers ="";
var sdoLayers ="Showings, by Commodity~Showings, by Dev. Stage~References~G-Meta~Diamond Mineral Data|Canadian Geochron Database WMS";
var LgdCheckBox = false ; //SP March 2008
