
function displayPath(data) {

 if (app.options.path) {
   for (var prop in data.path) {
      var o = data.path[prop];
      var min = 8;
      var max = 11;      
      if ($('onlyShowResults') && $('onlyShowResults').checked && !in_results('path',o.location_id)) continue; 
      if (!app.markers.path[o.location_id] && !(o.loc_x == 0 && o.loc_y == 0)) {
         if (map.getZoom() >= min && map.getZoom() <= max) {
            
         var pointsTextArry = o.poly_geo.split('|');
         
         var points = new Array();
         for (var i1 = 0; i1 < pointsTextArry.length; i1++) {
            var latlng = pointsTextArry[i1].split(',');
            var lat = latlng[0];
            var lng = latlng[1];
            points.push(new GLatLng(lat,lng));
         }
         var polyline = new GPolyline(points, "#ff0000", 5);
         map.addOverlay(polyline);
         
            var icon = app.icons.path;
            var p = coordsToLatLng(o.loc_x, o.loc_y); 
           
            var m = new GMarker(p,{'icon': icon});
            GEvent.addListener(m,"mouseover", function() {showTooltip(this)});
            GEvent.addListener(m,"mouseout", function() {tooltip.style.visibility="hidden"}); 
            m.data = o;
            m.type_id = o.location_id;
            m.detailType = 'Path';
            m.title = jsonToText(o.title);
            m.isMarker = true;
            m.polyline = polyline;
            app.markers.path[o.location_id] = m;
      
            map.addOverlay(app.markers.path[o.location_id]);         
         }
      } else if (app.markers.path[o.location_id]) {
         if (map.getZoom() < min || map.getZoom() > max) {
            map.removeOverlay(app.markers.path[o.location_id].polyline);
            map.removeOverlay(app.markers.path[o.location_id]);
            delete(app.markers.path[o.location_id]);
         }
      }
      if (map.getZoom() >= min && map.getZoom() <= max) {
            var pcoords = coordsToText(String(o.loc_x),String(o.loc_y));
            var ptext = pcoords[1].replace('.','p')+pcoords[0].replace('.','p');           
            if (!app.markerCoords[ptext]) app.markerCoords[ptext] = new Array();
            app.markerCoords[ptext].push(app.markers.path[o.location_id]);         
      }
   }   
 } else {
 	 hideMarkers('path');
 	}
}


function pathInfo(o,m) {
       var coordsArry = coordsToText(o.data[0].loc_x,o.data[0].loc_y);
       var urlTitle = textToURL(o.data[0].title);  
       var data = o.data[0];     
       app.reportMenuCount++;
   
   var startAt = '';
   var endAt = '';
   for (prop in o.objects) {
      var row = o.objects[prop];
      if (row.value == 'Start') startAt = row.title;
      if (row.value == 'End') endAt = row.title;
   }
   
   for (prop in o.locations) {
      var row = o.locations[prop];
      if (row.value == 'Start') startAt = row.title;
      if (row.value == 'End') endAt = row.title;
   }   
   
   var html = '<div><table width=100%><tbody><tr><td width=65%></td><td width=35% class=aRight>'
       +'<a href=javascript:editPath()>[edit]</a> | <a href="javascript:reportEntryMenu('+app.reportMenuCount+')">[report]</a>'
       +'</td></tr><tr><td></td><td><div class=Dnone id=rm'+app.reportMenuCount+'></div></td></tr></tbody></table></div>'
       +'<table><tr><td class=infoLabel>Area</td><td class=infoField>'+o.parentName+'</td></tr>'
       +'<tr><td class=infoLabel>Name</td><td class=infoField>'+data.title+'</td></tr>'
       +'<tr><td class=infoLabel>Starts at</td><td class=infoField>'+startAt+'</td></tr>'
       +'<tr><td class=infoLabel>Ends At</td><td class=infoField>'+endAt+'</td></tr>'
       +'<tr><td class=infoLabel>Path Type</td><td class=infoField>'+data.loc_type+'</td></tr>'
       +'<tr><td class=infoLabel>Description</td><td class=infoField>'+data.descript+'</td></tr>'
       +'<tr><td class=infoLabel>PermaLink</td><td class=infoField><a href=http://www.arda-online.com/map/?Path:'+urlTitle+'_'+data.location_id+'>Link to this entry</a></td></tr>'       
       +'<tr><td class=infoLabel>Added By</td><td class=infoField><a href=http://www.arda-online.com/user.php?id.'+o.creatorID+'>'+o.creatorName+'</a></td></tr>'
       +'</table>';
       
       $('PathInfo_'+m.type_id).innerHTML = html;
       
       var cc = 0;
       var type_id = 'location_id';
       html = '<table id=c_'+type_id+'_'+m.type_id+' width=100%><tbody>';
       for (prop in o.comments) {
         cc++;
         var comment = o.comments[prop];
         var postDate = new Date(comment.timestamp*1000);
         var dateString = postDate.getMonth()+'.'+postDate.getDate()+'.'+postDate.getFullYear()+' '+(postDate.getHours()+1)+':'+postDate.getMinutes();
         html += '<tr><td class=commentText>'+comment.text+'</td></tr>'
         +'<tr><td class=commentInfo>'+comment.user_name+' - '+dateString+'</td></tr>';
       }
       html += '</tbody></table><br><a href="javascript:addComment(\''+type_id+'\','+m.type_id+')">Add a Comment</a>';
       app.reportMenuCount++;
       
       $('PathComments_'+m.type_id).innerHTML = '<div><table width=100%><tbody><tr><td width=65%></td><td width=35% class=aRight>'
       +'<a href=javascript:editPath()>[edit]</a> | <a href="javascript:reportEntryMenu('+app.reportMenuCount+')">[report]</a>'
       +'</td></tr><tr><td></td><td><div class=Dnone id=rm'+app.reportMenuCount+'></div></td></tr></tbody></table></div>'
       +html;  
      
            
       
}

function addPath() {
   app.addType = 'Path'; 
   if (app.user_id == '0') {
      hideAllMenus();     
      frontAndCenter($(app.addType+'Div'),800,500);
      displayBlock($(app.addType+'Div'));
   } else {  
   app.drawingPath = true;
   app.drawPathHTML = 'Drawing Path... <a href="javascript:acceptPath()">[accept]</a> |'+
   ' <a href="javascript:cancelPath()">[cancel]</a> <img src=help.gif border=0 onmouseover=showHelpi(this) onmouseout=hideHelp() id=drawingPathHelp>';
   app.mapStatus.innerHTML = app.drawPathHTML;
   displayBlock(app.mapStatus);
    hideAllMenus();   
    clearAllOverlays();
    app.currentMarker = null;
   }
}

function acceptPath() {

    app.drawingPath = false;
   app.addType = 'Path';   
   app.addPath = 'addPath.php';
   app.addStart = addPathStart;
   
   var p = map.getCenter();
   
             var d = new Date();

             var pro = map.getCurrentMapType().getProjection();
 
             app.addCoords = '';
             app.addPoint = '';
             var pipe = '';
             var lines = app.control.lines[0];
             for (i in lines.markers) {
                var p = lines.markers[i].getPoint();
                var pnt = pro.fromLatLngToPixel(p,map.getZoom());
                var crd = latLngToCoords(pnt,map.getZoom());
                var coords = coordsToText(String(crd.x),String(crd.y));               
               
                app.addCoords += pipe+coords[1]+','+coords[0];
                app.addPoint += pipe+p.toUrlValue(12);
                pipe = '|';
             }
  if (app.addCoords == '') {
      alert('No Path has been drawn.  Please click the map to draw a path.!');     
      return;       
   }  

            
      app.addStart();
             
             displayNone(app.mapStatus);                
   
}


function acceptEditedPath() {

   app.drawingPath = false;
   app.addType = 'Path';   
   app.addPath = 'addPath.php';
   app.addStart = editPathStart;
   
   var p = map.getCenter();
   
             var d = new Date();

             var pro = map.getCurrentMapType().getProjection();
 
             app.addCoords = '';
             app.addPoint = '';
             var pipe = '';
             var lines = app.control.lines[0];
             for (i in lines.markers) {
                var p = lines.markers[i].getPoint();
                var pnt = pro.fromLatLngToPixel(p,map.getZoom());
                var crd = latLngToCoords(pnt,map.getZoom());
                var coords = coordsToText(String(crd.x),String(crd.y));               
               
                app.addCoords += pipe+coords[1]+','+coords[0];
                app.addPoint += pipe+p.toUrlValue(12);
                pipe = '|';
             }
  if (app.addCoords == '') {
      alert('No Path has been drawn.  Please click the map to draw a path.!');     
      return;       
   }  

             
      app.addStart();
             
             displayNone(app.mapStatus);                
   
}


function addPathStart() {


   var f = document.forms.Path;
      f.PathLocXY.value = app.addCoords;
      f.PathPoint.value = app.addPoint;      
      //f.PathZoom.value = map.getZoom();
      f.PathLocParentText.onkeyup = autoSuggest;
      f.PathLocParentText.onkeypress = autoSuggest;
      f.PathLocParentText.onfocus = autoSuggest;
      
      f.PathStartObjText.onkeyup = autoSuggest;
      f.PathStartObjText.onkeypress = autoSuggest;
      f.PathStartObjText.onfocus = autoSuggest;
      
      f.PathEndObjText.onkeyup = autoSuggest;
      f.PathEndObjText.onkeypress = autoSuggest;
      f.PathEndObjText.onfocus = autoSuggest;      
      resetPathForm();      
      frontAndCenter($(app.addType+'Div'),800,500);
   displayBlock($(app.addType+'Div'));
}

function pathSuggest(q) {
	var d = new Date();
	app.autoSuggest.addAsNew = false;
         app.autoSuggest.u = 'run/getLocation.php?q='+q+'&d='+d.valueOf();
         app.autoSuggest.returnFunc = getLocationReturn;
         app.autoSuggest.loading = $('PathLoading');
         app.autoSuggest.drop = $('PathLocParentDrop');
         app.autoSuggest.idField = document.forms.Path.PathLocParentID;
         app.autoSuggest.span = $('PathLocParentSpan');   
         $('PathLocParentSpan').idField  =  document.forms.Path.PathLocParentID;
         $('PathLocParentSpan').textField = document.forms.Path.PathLocParentText;                
}

function pathStartSuggest(q) {
	var d = new Date();
	app.autoSuggest.addAsNew = false;
         app.autoSuggest.u = 'run/getPathRelation.php?q='+q+'&d='+d.valueOf();
         app.autoSuggest.returnFunc = getPathRelationReturn;
         app.autoSuggest.loading = $('PathStartLoading');
         app.autoSuggest.drop = $('PathStartObjDrop');
         app.autoSuggest.idField = document.forms.Path.PathStartObjID;
         app.autoSuggest.span = $('PathStartObjSpan');  
         $('PathStartObjSpan').idField  =    document.forms.Path.PathStartObjID;
         $('PathStartObjSpan').textField = document.forms.Path.PathStartObjText;              
}

function pathEndSuggest(q) {
	var d = new Date();
	app.autoSuggest.addAsNew = false;
         app.autoSuggest.u = 'run/getPathRelation.php?q='+q+'&d='+d.valueOf();
         app.autoSuggest.returnFunc = getPathRelationReturn;
         app.autoSuggest.loading = $('PathEndLoading');
         app.autoSuggest.drop = $('PathEndObjDrop');
         app.autoSuggest.idField = document.forms.Path.PathEndObjID;
         app.autoSuggest.span = $('PathEndObjSpan');    
         $('PathEndObjSpan').idField  = document.forms.Path.PathEndObjID;
         $('PathEndObjSpan').textField = document.forms.Path.PathEndObjText;
}



function getPathRelationReturn(responseText) {
   app.pending.suggest = false;   
   hideMe(app.autoSuggest.loading);
   if (!responseText) return false;
   var o = eval(responseText);
   var html = '';
   for (var prop in o.data) {
      var row = o.data[prop];
      for (var prop1 in row) {
         var row1 = row[prop1];
         html += '<table width=100% onmouseover=highlightMe(this) onmouseout=normalizeMe(this) onclick=clickLocationResult(this) id=row_'+row1.type+':'+row1.id+'><tbody><tr class=autoDropTD><td>'+row1.title
         +'</td><td class=aRight></td></tr></tbody></table>';
      }
   }
   
   app.autoSuggest.drop.innerHTML = html;
   
   displayBlock(app.autoSuggest.drop);
}



function clickPathRelationResult(o) {
   html = '<span>'+o.innerHTML+'</span><img src=cancel.png class=Hand onclick=cancelPathRelation(this) style=\'padding-left: 3\'>';
   
   app.autoSuggest.span.innerHTML = html;
   app.autoSuggest.idField.value = o.id.split('_')[1];
   displayInline(app.autoSuggest.span);
   displayNone(app.autoInput);
   displayNone(o.parentNode);
}

function cancelPathRelation(o) {
   o.parentNode.idField.value = '';
   o.parentNode.textField.value = '';
   displayInline(o.parentNode.textField);   
   displayNone(o.parentNode);


}

function submitPath() {
   var f = document.forms['Path'];
   if (!f.PathLocParentID.value.match(/[1-9][0-9]*/gi)) {
      alert('Please select a parent area!');
      f.PathLocParentText.focus();
      return false;
   }
   var v = f.PathTitle.value;
   if (v == '' || v.match(/[^a-z0-9 '-]/gi)) {
      alert('Please enter a Title. It may only contain letters, numbers, spaces, and the apostrophe.');
      f.PathTitle.focus();
      return false;
   }
   var postText = preparePost(f);
   var url = 'run/addPath.php?action=add';
   addPostMessage('Path Submitted!');
   disableMe(f.PathButton);
   app.editButton = f.PathButton;
   getRequest(url,'POST',postText,submitPathReturn);
}

function submitPathReturn(responseText) {
   enableMe(app.editButton);
   if (!responseText) return false;
   var o = eval(responseText);
   if (o.status) {
      app.gettingPath = false;  
      app.adding = false;  
      addPostMessage('OK');
      var id = (app.currentMarker) ? app.currentMarker.type_id : o.new_id;
      if (app.currentMarker && app.markerDetails[app.currentMarker.detailType][app.currentMarker.type_id]) {
      	   delete(app.markerDetails[app.currentMarker.detailType][app.currentMarker.type_id]);
      }
      if (app.currentMarker && app.markers.path[app.currentMarker.type_id]) {
         map.removeOverlay(app.markers.path[app.currentMarker.type_id]);
         delete(app.markers.path[app.currentMarker.type_id]);
      }
      app.currentMarker = null;

      app.options.path = true;
      resetPathForm();
      app.markerDetails.Quest = new Object();
      $('f8').firstChild.src = 'on.png';
      app.resultToShow = id;
      app.showResult = true;  
      app.typeToShow = 'path';    
      closeAddWindow($("PathDiv"),true);
   } else {
     addPostMessage('Failed! '+o.error);
   }
}



function editPath() {
    app.addType = 'Path';

             var m = app.currentMarker;
             var o = eval(app.markerDetails['Path'][m.type_id]);
             app.addCoords = o.data[0].poly;   
             app.addPoint = o.data[0].poly_geo; 
            
   editPathStart();
             
             displayNone(app.mapStatus);                
   
}


//({'status': 1, 'creatorID': '2', 'creatorName': 'jshanman', 'parentName': 'City of Bree', 'data': {'0'

//: {'location_id': '1554','location_id_parent': '21','type': 'path','title': 'Path to Shade','descript'

//: '','loc_x': '-51.3','loc_y': '-31.1','lat': '0','lng': '0','zoom': '0','radius': '0','poly_geo': '43
//.508605957031,-6.676940917969|43.426895141602,-6.529998779297|43.412475585938,-6.469573974609|43.38020324707
//,-6.450347900391|43.361663818359,-6.505279541016|43.375396728516,-6.612396240234','poly': '31.1S,51.3W
//|31.6S,50.9W|31.7S,50.7W|31.9S,50.6W|32S,50.8W|31.9S,51.1W','display_type': '0','start_type': 'object'
//,'end_type': 'object','auto_insert': '0'}}, 'quests': '', 'npc': {}, 'enemy': '', 'object': '', 'locations'
//: {}, 'objects': {'0': {'object_rel_id': '42','object_id': '30','object_title': '','type': 'location_id'
//,'type_id': '1554','quantity': '','value': 'Start','location_id': '0','location_title': '','comment'
//: '','type1': 'npc','type2': 'Man','type3': 'Male','type4': '','title': 'Mayor Graeme Tenderlarch','descript'
//: 'Mayor of Bree','race': '','class': '','dye': '','range': '','worth': '','cost': '','lvl': '0','hp'
//: '0','armour': '','dps': '','damage_min': '','damage_max': '','speed': '','binding': '','storage': ''
//},'1': {'object_rel_id': '43','object_id': '18','object_title': '','type': 'location_id','type_id': '1554'
//,'quantity': '','value': 'End','location_id': '0','location_title': '','comment': '','type1': 'npc','type2'
//: 'Man','type3': 'Male','type4': '','title': 'Lost Shade','descript': 'A ghostly figure in Bree','race'
//: '','class': '','dye': '','range': '','worth': '','cost': '','lvl': '0','hp': '0','armour': '','dps'
//: '','damage_min': '','damage_max': '','speed': '','binding': '','storage': ''}} , 'comments': {} })

function editPathStart() {

      var f = document.forms.Path;
      var m = app.currentMarker;
      var o = eval(app.markerDetails['Path'][m.type_id]);
      f.PathPoint.value = app.addPoint;    
      f.PathLocXY.value = app.addCoords;       
      
      f.PathLocParentText.onkeyup = autoSuggest;
      f.PathLocParentText.onkeypress = autoSuggest;
      f.PathLocParentText.onfocus = autoSuggest;
      
         $('PathLocParentSpan').idField  =  f.PathLocParentID;
         $('PathLocParentSpan').textField = f.PathLocParentText;   
         displayInline($('PathLocParentSpan'));       
         
         f.PathStartObjText.onkeyup = autoSuggest;
         f.PathStartObjText.onkeypress = autoSuggest;
         f.PathStartObjText.onfocus = autoSuggest;
         $('PathStartObjSpan').idField  =    f.PathStartObjID;
         $('PathStartObjSpan').textField = f.PathStartObjText;  

         
         f.PathEndObjText.onkeyup = autoSuggest;
         f.PathEndObjText.onkeypress = autoSuggest;
         f.PathEndObjText.onfocus = autoSuggest;
         $('PathEndObjSpan').idField  =    f.PathEndObjID;
         $('PathEndObjSpan').textField = f.PathEndObjText;                    

         
      f.PathUpdateID.value = o.data[0].location_id;
      f.PathUpdating.value = 1;
      f.PathButton.value = 'Update Path';
      f.PathLocParentID.value = o.data[0].location_id_parent;
      displayNone(f.PathLocParentText);
      app.autoInput = f.PathLocParentText;
      $('PathLocParentSpan').innerHTML = '<span>'+o.parentName+'</span><img src=cancel.png class=Hand onclick=cancelLocation(this) style=\'padding-left: 3px\'>';
      f.PathTitle.value = o.data[0].title;
      f.PathDescript.value = o.data[0].descript;
      
      if (o.data[0].start_type != '') {
         for (prop in o.objects) {
            var obj = o.objects[prop];
            if (obj.value == 'Start') break;
         }
         if (obj) {
            f.PathStartObjID.value = 'object:'+obj.object_id;
            $('PathStartObjSpan').innerHTML = '<span>'+obj.title+'</span><img class="Hand" style="padding-left: 3px;" onclick="cancelLocation(this)" src="cancel.png"/>';
            displayInline($('PathStartObjSpan'));
            displayNone(f.PathStartObjText);
         }
      }
       if (o.data[0].end_type != '') {
         for (prop in o.objects) {
            var obj = o.objects[prop];
            if (obj.value == 'End') break;
         }
         if (obj) {
            f.PathEndObjID.value = 'object:'+obj.object_id;
            $('PathEndObjSpan').innerHTML = '<span>'+obj.title+'</span><img class="Hand" style="padding-left: 3px;" onclick="cancelLocation(this)" src="cancel.png"/>';
            displayInline($('PathEndObjSpan'));
            displayNone(f.PathEndObjText);
         }
      }
   f.PathType.value = o.data[0].loc_type;
   frontAndCenter($(app.addType+'Div'),800,500);
   displayBlock($(app.addType+'Div'));

}

function getPathForEdit() {
   var f = document.forms.Path;
   app.drawingPath = true;
   app.drawPathHTML = 'Drawing Path... <a href="javascript:acceptEditedPath()">[accept]</a> | <a href="javascript:cancelPath()">[cancel]</a>'
   +'<img src=help.gif border=0 onmouseover=showHelpi(this) onmouseout=hideHelp() id=drawingPathHelp>';
   app.mapStatus.innerHTML = app.drawPathHTML;
   displayBlock(app.mapStatus);
   map.clearOverlays();
   
   delete(app.control.lines);
   app.control.lines = new Object();
   app.control.lineCount = 0;
   app.control.selected = 0;
   app.control.lines[0] = app.control.LineSeries({title: 'line 1'});    
   
   var lines = f.PathPoint.value.split('|');
   for (var i = 0; i < lines.length; i++) {
      var lat = lines[i].split(',')[0];
      var lng = lines[i].split(',')[1];
      app.control.p = new GLatLng(lat,lng);
      app.control.clickMapDelayed();
   }
   displayNone($('PathDiv'));

}



function resetPathForm() {
    var f = document.forms.Path;
    resetForm['Path'];  
    var name = 'Path';
    if (f['PathStartObjText']) {
      $(name+'StartObjSpan').innerHTML = '';
      displayNone($(name+'StartObjSpan'));
      f[name+'StartObjText'].value = '';
      displayInline(f[name+'StartObjText']);
   }      
    if (f['PathEndObjText']) {
      $(name+'EndObjSpan').innerHTML = '';
      displayNone($(name+'EndObjSpan'));
      f[name+'EndObjText'].value = '';
      displayInline(f[name+'EndObjText']);
   }   
   cancelPath();
}




function cancelPath() {
   app.drawingPath = false;
   map.clearOverlays();
   delete(app.control.lines);
   app.control.lines = new Object();
   app.control.lineCount = 0;
   app.control.selected = 0;
   app.control.lines[0] = app.control.LineSeries({title: 'line 1'});   
   app.mapStatus.innerHTML = '';
   displayNone(app.mapStatus);
}

function pathTool() {
   var prop;
   this.selected = 0;
   this.lines = new Object();
   this.lineCount = 0;
   this.map = map;
   this.showLinesWhileDragging = true;


   this.defaults = {
      iconId: 0,
      lat: 0,
      long: 0
   }
   this.icons = {
      0: {}
    }
   this.LineSeries = function(d) {
      var o = new Object();
      o.nextPos = 0;
      o.title = d.title;
      o.polylines = new Array();
      o.markers = new Array();
      this.lineCount++;
      return o;
   }
   this.lines[this.lineCount] = this.LineSeries({title: 'line 1'});
   this.Point = function(d) {
      var point = new Object();
      point.iconId = (typeof d.iconId == "undefined") ? this.defaults.iconId : d.iconId;
      point.lat = (typeof d.lat == "undefined") ? this.defaults.lat : d.lat;
      point.long = (typeof d.long == "undefined") ? this.defaults.long : d.long;
      point.pos = (typeof d.pos == "undefined") ? this.lines[this.selected].nextPos : d.pos;
      point.line = this.selected;
      point.title = (typeof d.title == "undefined") ? "Line "+(this.selected+1)+", Point "+(point.pos+1) : d.title;
      point.Icon = this.Icon(point.iconId);
      point.Marker = this.Marker(point);
      return point;
   }

   this.addPoint = function(point) {
      this.map.addOverlay(point.Marker);
      this.lines[this.selected].nextPos++;
      point.Marker.enableDragging();
      GEvent.bind(point.Marker,"click", point.Marker,this.clickMarker);
      GEvent.bind(point.Marker,"dblclick", point.Marker, this.dblclickMarker);
      GEvent.bind(point.Marker,"dragstart", point.Marker, this.dragstartMarker);      
      GEvent.bind(point.Marker,"drag", point.Marker, this.dragMarker);
      GEvent.bind(point.Marker,"dragend", point.Marker, this.dragendMarker);
      this.lines[this.selected].markers[point.pos] = point.Marker;
      
      if (!this.map.getBounds().contains(point.Marker.getPoint())) this.map.setCenter(point.Marker.getPoint());
   
      return point.Marker;
   }

   this.addSegment = function(m1,m2) {
      if (typeof m1 == "undefined") m1 = this.m1;
      if (typeof m2 == "undefined") m2 = this.m2;
      var p1 = new GLatLng(m1.getPoint().lat(), m1.getPoint().lng());
      var p2 = new GLatLng(m2.getPoint().lat(), m2.getPoint().lng());
      var polyline = new GPolyline([p1,p2], "#ff0000", 5);
      this.map.addOverlay(polyline);
      this.lines[this.selected].markers[m1.point.pos].polyline = polyline;
      //calc distance
      return polyline;
   }

   this.delPoint = function(m) {
      this.map.removeOverlay(m);
      if (typeof m.polyline != "undefined") {
         this.map.removeOverlay(m.polyline);
         delete(m.polyline);
      }
      if (typeof this.lines[m.point.line].markers[m.point.pos-1] != "undefined") {
         this.map.removeOverlay(this.lines[m.point.line].markers[m.point.pos-1].polyline);
         delete(this.lines[m.point.line].markers[m.point.pos-1].polyline);
      }
      delete(this.lines[m.point.line].markers[m.point.pos]);
      var c = 0;
      for (mk in this.lines[m.point.line].markers) {
         this.lines[m.point.line].markers[mk].point.pos = c;
         this.lines[m.point.line].markers[c] = this.lines[m.point.line].markers[mk];
         if (c != mk) delete(this.lines[m.point.line].markers[mk]);
         c++;
      }
     this.lines[m.point.line].nextPos--;
     if (this.lines[m.point.line].nextPos > 1 && typeof(this.lines[m.point.line].markers[m.point.pos]) != "undefined") { 
        this.addSegment(this.lines[m.point.line].markers[m.point.pos-1],this.lines[m.point.line].markers[m.point.pos]);
     } else if (this.lines[m.point.line].nextPos > 1) {
        //get distance
     } else {
        //remove distance
     }
     delete(m);
   }

   this.clickMarker = function() {

   }
   this.dblclickMarker = function() {
      //l('dblclick');
      this.control.delPoint(this);

      //this.control.calcDistance();
   }
   this.dragstartMarker = function() {
      //l('dragstart');
   }
   this.dragMarker = function() {
      var m = this;
      m.moved = true;
      var c = this.control;
      if (c.showLinesWhileDragging) {
         c.lines[m.point.line].markers[m.point.pos] = m;
         if (typeof m.polyline != "undefined") {
            c.map.removeOverlay(m.polyline);
            delete(m.polyline);
        }
         if (typeof c.lines[m.point.line].markers[m.point.pos-1] != "undefined" && typeof c.lines[m.point.line].markers[m.point.pos-1].polyline != "undefined") {
            c.map.removeOverlay(c.lines[m.point.line].markers[m.point.pos-1].polyline);
            delete(c.lines[m.point.line].markers[m.point.pos-1].polyline);
         }
        if (typeof c.lines[m.point.line].markers[m.point.pos-1] != "undefined") c.addSegment(c.lines[m.point.line].markers[m.point.pos-1],m);
        if (typeof c.lines[m.point.line].markers[m.point.pos+1] != "undefined") c.addSegment(m,c.lines[m.point.line].markers[m.point.pos+1]);
      }
   }
   this.dragendMarker = function() {
      var m = this;
      var c = this.control;
      if (m.moved) {
         c.lines[m.point.line].markers[m.point.pos] = m;
         if (typeof m.polyline != "undefined") {
            c.map.removeOverlay(m.polyline);
            delete(m.polyline);
         }
         if (typeof c.lines[m.point.line].markers[m.point.pos-1] != "undefined" && typeof c.lines[m.point.line].markers[m.point.pos-1].polyline != "undefined") {
            c.map.removeOverlay(c.lines[m.point.line].markers[m.point.pos-1].polyline);
            delete(c.lines[m.point.line].markers[m.point.pos-1].polyline);
         }
        if (typeof c.lines[m.point.line].markers[m.point.pos-1] != "undefined") c.addSegment(c.lines[m.point.line].markers[m.point.pos-1],m);
        if (typeof c.lines[m.point.line].markers[m.point.pos+1] != "undefined") c.addSegment(m,c.lines[m.point.line].markers[m.point.pos+1]);
        c.lines[m.point.line].markers[m.point.pos].moved = false;
     }
     

   }
   this.clickMap = function(o,p) {
      if (app.drawingPath) {
         this.p = p;
         app.control = this;
         this.dblclickMap();
         this.delayTimer = window.setTimeout("app.control.clickMapDelayed()",200);
      }
   }

   this.clickMapDelayed = function() {
      var p = this.p;
      if (typeof p != "undefined") {
         var newPoint = app.control.Point({lat: p.lat(), long: p.lng()});
         var m = app.control.addPoint(newPoint);
         if (newPoint.pos > 0) {
            this.addSegment(this.lines[this.selected].markers[newPoint.pos-1],m);
         }
      }
   }

   this.dblclickMap = function() {
      if (typeof this.delayTimer != "undefined") {
         window.clearTimeout(this.delayTimer);
      }
   }

   this.calcDistance = function() {
      //var out = "";
      //var totalMiles = 0;
      //var totalKm = 0;
      //if (this.lines[this.selected].nextPos > 1) {
      //for (var i = 0; i < this.lines[this.selected].markers.length; i++) {
     //    if (typeof this.lines[this.selected].markers[i+1] != "undefined") {
//
  //          var d = this.lines[this.selected].markers[i].getPoint().distanceFrom(this.lines[this.selected].markers[i+1].getPoint())/1000;
    //         
      //      var miles = d*0.621371192;
        //    totalMiles+=miles;
          //  totalKm+=d;
            //out += "Segment "+(i+1)+": "+miles+"mi | Total: "+total+"mi<br/>";
            
  //       }
  //    }
     // }
      //document.getElementById("distanceMiles").value = Math.round(totalMiles*100)/100;
      //return totalMiles;
      return 1;
   }
   this.Icon = function(iconId) {
      var gIcon = new GIcon();
      for (prop in this.icons[iconId]) {
         gIcon[prop] = this.icons[iconId][prop];
      }
      return gIcon;
   }

   this.Marker = function(d) {
      var marker = new GMarker(new GLatLng(d.lat,d.long),{icon:d.icon,clickable: true,title: d.title,draggable: true});
      marker.point = d;
      marker.control = this;
      marker.moved = false;
      return marker;
   }





   GEvent.bind(this.map,"click",this,this.clickMap);
   GEvent.bind(this.map,"dblclick",this,this.dblclickMap);

}

