/* start override of dhtmlEdit.js , see "start/end tlm override" below */

Map.prototype.edit_point = function(aDisplay) {
  this.resetMapEventHandlers();
  
  // new feature not allowed
  if (typeof insert_feature_max_num != 'undefined'
      && this.insertedNum >= insert_feature_max_num) {
    var notAllowed = true;
  }
  switch (notAllowed) {
    case true:
      if (this.currentEditFeature == null
          || this.currentEditFeature.vertices != 0) {
        var button = xGetElementById('edit_point');
        if (button != null) {
          xGetElementById('edit_point').disabled = true;
        }
        this.getDisplay(aDisplay).setTool('move');
    
        var button = xGetElementById('edit_move');
        if (button != null) {
          button.checked = true;
        } else {
          setActiveToolButton('edit_move');
        }
        return false;
        break;
      }
    case false:
      var button = xGetElementById('edit_point');
      if (button != null) {
        button.disabled = false;
        button.checked = true;
      } else {
        setActiveToolButton('edit_point');
        xGetElementById('tool').value = 'edit_point';
      }
      break;
  }
  
  this.getDisplay(aDisplay).setTool('draw.point');
  this.onNewFeature = function(aFeature) {
    aFeature.operation = 'insert';
    if (this.currentEditFeature != null &&
      this.currentEditFeature.vertices == 0) {
      aFeature.id = this.currentEditFeature.id;
      setFeatureOperation(aFeature,"update");
    } else {
      this.currentEditFeature = null;
    }
  }
  this.onFeatureInput = function(aFeature) {
    if (this.currentEditFeature != null &&
      this.currentEditFeature.vertices == 0) {
      // feature with attributes but no geometry, update geometry with geometry of newly drawn object
      for (var i = 0; i < this.currentLayer.features.length; i ++) {
        if (this.currentLayer.features[i].id == this.currentEditFeature.id) {
          this.currentLayer.features[i].vertices = aFeature.vertices;
          this.currentLayer.features[i].operation = aFeature.operation;
        }
      }
      this.updateFeaturesCount();
      this.displayFeaturesCount();
      this.currentEditFeature = null;
    } else {
      // new feature
      this.currentLayer.features.push(aFeature);
      this.updateFeaturesCount();
      this.displayFeaturesCount();
      var editLayer = myform['edit_layer'].value;
      var editTable = xGetElementById("edit_table");
      this.editTableAddRow(editTable, aFeature);
      /* start tlm override */
      insertUserData();
      /* end tlm override */
      var editDiv = xGetElementById("edit_div");
      editDiv.style.display = "block";
    }
    // reset the tool
    mainmap.edit_point('map');
//    uncheckFeaturesRadios();
  }
};

/* end override */

function insertUserData() {
  var edit_form = $('edit_table');
  var inputsList = xGetElementsByTagName('input', edit_form);
  var myRe = /^edit_feature_.*\[(.*)\]$/;
  for (var i=0;i < inputsList.length;i++){
      var matches = myRe.exec(inputsList[i].name);
      if (matches && matches.length == 2){
        switch (matches[1]) {
          case 'name':
            inputsList[i].value = user_name;
          break;
          case 'tel':
            inputsList[i].value = user_tel;
          break;
          case 'email':
            inputsList[i].value = user_email;
          break;
        }        
      }
  }
}

function checkProductChoice() {
  var product = $('productToEdit');
  var subproduct = $('subProductToEdit');
  var editlayer = $('edit_layer');
  var toolbar = $('edit_tools');
  if (typeof(product) != 'undefined') {
    if (product.selectedIndex > 0){
      // case product index 1+
      if (typeof(subproduct) != 'undefined' && subproduct !== null) {
        if (subproduct.selectedIndex == 0){
          if (typeof(toolbar) == 'undefined') {
            editlayer.value = '';
            xShow($('loadbarDiv'));
            FormItemSelected();
          } else {
            // deactivate tool
            noSubProductSelected = true;
            setToolOpacity();
            disableEditTool();
          }

        } else {
          xShow($('loadbarDiv'));
          setEditLayer();
          FormItemSelected();        
        }
      } else {
        xShow($('loadbarDiv'));
        FormItemSelected();
      }
    } else {
      // case product index 0
      if (typeof(toolbar) != 'undefined') {
        // case edit layer active
        editlayer.value = '';
        xShow($('loadbarDiv'));
        FormItemSelected();
      }
    }
  }
}

function setEditLayer() {
    $('edit_layer').value = 'revision';
}

/* set feature title element */
function addEditElmTitle(idval, titleval) {
  editFeaturesTitlesKey.push(idval);
  editFeaturesTitlesValues.push(titleval.substr(0, 10));
}

function resetEditFeaturesTitles() {
  editFeaturesTitlesKey = new Array();
  editFeaturesTitlesValues = new Array();
}

function setEditFeaturesTitles() {
  if (typeof(editFeaturesTitlesKey) != 'undefined' && editFeaturesTitlesKey.length > 0) {
    for (var i=0; i < editFeaturesTitlesKey.length; i++) {
      var eid = 'map_'+editFeaturesTitlesKey[i];
      $(eid).title = editFeaturesTitlesValues[i];
      var cl = $(eid).childNodes;
      for (var j=0;j<cl.length;j++){
        if (cl[j].nodeName.toLowerCase() == 'div'){
          cl[j].title = editFeaturesTitlesValues[i];
        }
      }
    }
  }
}

var editFeaturesTitlesKey;
var editFeaturesTitlesValues;
var noSubProductSelected = false;

Event.observe(window, 'load', setEditFeaturesTitles, false);
Event.observe(window, 'load', setToolOpacity, false);

function checkEditForm() {
  myform['edit_validate_all'].value = '1';
  // check input content
  var err = false;
  var err2 = false;
  var err3 = false;
  var errMsg = '';
  // get all input contained in the edit form
  var edit_form = $('edit_table');
  var inputsList = xGetElementsByTagName('input', edit_form);
  var myRe = /^edit_feature_.*\[(.*)\]$/;
  for (var i=0;i < inputsList.length;i++){
      var matches = myRe.exec(inputsList[i].name);
      if (matches && matches.length == 2){
        switch (matches[1]) {
          case 'name':
            var content = inputsList[i].value;
            if (content.length < 3) {
              err = true;
              errMsg = errorrev1;
            }
          break;
          case 'tel':
            var content = inputsList[i].value;
            if (content.length < 3) {
              err2 = true;
            }            
          break;
          case 'email':
            var content = inputsList[i].value;
            if (content.length < 3) {
              err3 = true;
              break;
            }  
            var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	          if (!filter.test(content)) {
              err = true;
              errMsg = errorrev2;
            }
          break;
        }        
      }
  }
  var txtAr = xGetElementsByTagName('textarea', edit_form);
  //handle textarea min characters
  if (txtAr[0].value.length < 3) {
    err = true;
    errMsg = errorrev3;
  }
  //handle textarea max characters
   if (txtAr[0].value.length > 200) {
    err = true;
    errMsg = errorrev5;
  }
  // handle email or tel
  if (err2 && err3) {
    err = true;
    errMsg = errorrev4;
  }

  if (err) {
    alert(errMsg);
  } else {
    myform['edit_validate_all'].value = '1';
    if (storeFeatures()) doSubmit();      
  }
}

/* 
 * replaced default onclick actions in the toolbar for tool edit_point
 */
function editPointActivate() {
  if (edit_layer_selected && !noSubProductSelected) {
    mainmap.edit_point('map');
    setActiveToolButton('edit_point');
  } else {
    // do nothing
  }
}

/* 
 * change appearance of tool if the user can use it
 */
function setToolOpacity() {
  if (edit_layer_selected && !noSubProductSelected) {
    $('edit_point_icon').style.opacity = 1;
    $('edit_point_icon').style.filter = 'alpha(opacity=100)';
  } else {
    $('edit_point_icon').style.opacity = 0.5;
    $('edit_point_icon').style.filter = 'alpha(opacity=50)';
  }
}

function disableEditTool() {
    var button = xGetElementById('edit_point_icon');
    if (button != null) {
      xGetElementById('edit_point_icon').disabled = true;
    }
    mainmap.getDisplay('map').setTool('move');

    var button = xGetElementById('edit_move_icon');
    if (button != null) {
      button.checked = true;
    } else {
      setActiveToolButton('edit_move');
    }
    return false;
}