﻿var currentUser;
var loadedUser;

GetParam = function( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
};

IsNumeric = function (strString)	
{
   var strValidChars = "0123456789.-";
   var strChar;
   var blnResult = true;

   if (strString.length == 0) return false;

   //  test strString consists of valid characters listed above
   for (i = 0; i < strString.length && blnResult == true; i++)
      {
      strChar = strString.charAt(i);
      if (strValidChars.indexOf(strChar) == -1)
         {
         blnResult = false;
         }
      }
   return blnResult;
};

NewUser = function() {
    
    currentUser = new User();
    currentUser.UserId =null;
    currentUser.Name = "";
    currentUser.Email = "";
    currentUser.Phone = "";
    currentUser.Relationship = "";
    currentUser.IsManager = false;
};

CheckCurrentUser = function() {
     CommonService.CheckCurrentUser(CheckCurrentUserCallback);   
};

CheckCurrentUserCallback = function(result) {
    if(result)
    {
        currentUser = result;  
        showMessage("Loaded user data.");
    }
    else
    {    
        NewUser();
    }
};

LoadCurrentUserPolygons = function() {
    if (!currentUser.IsManager && currentUser.Polygons)
    {
        LoadPolygons(currentUser.Polygons);
        showMessage("Loaded field data.");
    }
};

HighlightManagementListRow = function(index) {
    var mt = $get("manageTable");
    var row = true;
    if(mt)
    {
        for(var i = 0; i<mt.rows.length; i++)
        {
            if(row) mt.rows[i].className = "row1" 
            else mt.rows[i].className = "row2";
            
            if(i == index) mt.rows[i].className = "selrow";
            row = !row;
        }
    }
};

HighlightFlagFieldsListRow = function (index) {
    var mt = $get("flagFieldsTable");
    var row = true;
    if (mt) {
        for (var i = 0; i < mt.rows.length; i++) {
            if (row) mt.rows[i].className = "row1"
            else mt.rows[i].className = "row2";

            if (i == index) mt.rows[i].className = "selrow";
            row = !row;
        }
    }
};

LoadDigitiseData = function(user, rowIndex) {    
    CommonService.LoadDigitiseData(user,LoadDigitiseDataCallback);
    if(rowIndex) HighlightManagementListRow(rowIndex);
};

LoadDigitiseDataCallback = function(result) {
    loadedUser = result;
    LoadPolygons(loadedUser.Polygons);
    showMessage("Loaded data.");
};

ReloadDigitiseData = function() {
    if(loadedUser && loadedUser.UserId != -1) LoadDigitiseData(loadedUser.Email);    
};

ChangeDataStatus = function(command) {   
    if(loadedUser)
    { 
        loadedUser.Polygons = GetAllPolygons();
        if(loadedUser.Polygons.length > 0) 
        {
            CommonService.ChangeDataStatus(command,loadedUser,ChangeDataStatusCallback);
        }
    }
};

ChangeDataStatusCallback = function(result) {
    if(result)
    {    
        ClearPolygons();
        updateOverlay();
        showManageTools();
        showMessage("Changed data status.");        
    }
};

LoadManagementTable = function() {
    CommonService.LoadManagementTable(LoadManagementTableCallback);
    showMessage("Loading management table...");
};

LoadManagementTableCallback = function(html) {
    var manageTableDiv = $get("manageTableDiv");    
    if (manageTableDiv) manageTableDiv.innerHTML = html;
    HighlightManagementListRow(-1);    
    ClearPolygons();
    showMessage("Management table loaded.");
    
};

LoadFlagFieldsTable = function () {
    CommonService.LoadFlagFieldsTable(LoadFlagFieldsTableCallback);
    showMessage("Loading flagged fields table...");
};

LoadFlagFieldsTableCallback = function (html) {
    var flaggedFieldsTableDiv = $get("flaggedFieldsTableDiv");
    if (flaggedFieldsTableDiv) flaggedFieldsTableDiv.innerHTML = html;
    HighlightFlagFieldsListRow(-1);
    FlagModeOff();
    showMessage("Flagged fields table loaded.");
};

CloseFlagMessage = function (item) {
    CommonService.CloseFlagMessage(item, CloseFlagMessageCallback);
};

CloseFlagMessageCallback = function (result) {
    if (result) {
        LoadFlagFieldsTable();
    }
};

SaveDigitiseData = function() {  
    
    if(currentUser.Polygons.length > 0){           
        CommonService.SaveDigitiseData(currentUser, SaveDigitiseDataCallback);  
    }else {
        return false;
    }
};

SaveDigitiseDataCallback = function (status) {
    if (status == "Ok") {
        HideDigitisePopup(false);
        if (manageDiv.style.display != "block")
            hideDigitiseTools();
        showMessage("Successfully Saved Data");
        showSaveData();
    }
    else {
        var emailSaveError = $get("emailSaveError");
        emailSaveError.style.display = "";
        emailSaveError.innerHTML = status;
    }
};


CheckSaveLink = function () {
    var sLink = $get("saveDataLink");
    var gLink = $get("addGroupLink");
    var featureHdr = $get("featureHdr");
    var featureMsg = $get("featureMsg");

    if (ValidPolygonCount() > 0) {
        if (!currentUser.IsManager) {
            sLink.style.display = "";
            gLink.style.display = "";
        }
        featureHdr.style.display = "";
        featureMsg.style.display = "none";
    }
    else {
        sLink.style.display = "none";
        gLink.style.display = "none";
        featureHdr.style.display = "none";
        if (!currentUser.IsManager) featureMsg.style.display = "";
    }
};

CheckManageLinks = function() {
    var rLink = $get("revertDataLink");
    var aLink = $get("approveDataLink");
    var dLink = $get("denyDataLink");
        
    if(manageDiv.style.display == "block")
    {        
        rLink.style.display = "";
        aLink.style.display = "";
        dLink.style.display = "";
    }
    else
    {
        rLink.style.display = "none"; 
        aLink.style.display = "none";  
        dLink.style.display = "none";     
    }    
};

/******************************
* Modal Popup
******************************/
ShowDigitisePopup = function () {
    var nameInput = $get("nameInput");
    var emailInput = $get("emailInput");
    var phoneInput = $get("phoneInput");
    var relationshipInput = $get("relationshipInput");
    var emailSaveError = $get("emailSaveError");
    var saveDigitiseData = $get("saveDigitiseData"); 
    var cancelDigitiseData = $get("cancelDigitiseData");     
    var popupBehavior = $find('userInfoBehaviour');
    
    emailSaveError.style.display = "none";
    emailSaveError.InnerHTML = "";
    
    if(currentUser.UserId != null)
    {        
        nameInput.value = currentUser.Name;
        emailInput.value = currentUser.Email;
        emailInput.readOnly = true;
        emailInput.disabled = true;
        phoneInput.value = currentUser.Phone;
        relationshipInput.value = currentUser.Relationship;
    }
    else
    {        
        nameInput.value = "";
        emailInput.value = "";  
        emailInput.readOnly = false;  
        emailInput.disabled = false;
        phoneInput.value = "";
        relationshipInput.selectedindex= 0;
    }
    
    $clearHandlers(saveDigitiseData);
    $clearHandlers(cancelDigitiseData);
    
    $addHandler(saveDigitiseData, 'click', function(){HideDigitisePopup(true)}); 
    $addHandler(cancelDigitiseData, 'click', function(){HideDigitisePopup(false)});    
    
    popupBehavior.show(); 
};

HideDigitisePopup = function (save) {
    var nameInput = $get("nameInput");
    var emailInput = $get("emailInput");
    var confirmEmailInput = $get("confirmEmailInput");
    var phoneInput = $get("phoneInput");
    var relationshipInput = $get("relationshipInput");
    var nameInputError = $get("nameInputError");
    var emailInputError = $get("emailInputError");
    var confirmemailInputError = $get("confirmemailInputError");
    var phoneInputError = $get("phoneInputError");
    var relationshipInputError = $get("relationshipInputError");
    var popupBehavior = $find('userInfoBehaviour');   
    
    nameInputError.style.display = "none";
    emailInputError.style.display = "none";
    confirmemailInputError.style.display = "none";
    phoneInputError.style.display = "none";
    relationshipInputError.style.display = "none";
           
    if(save) 
    {   
         //check required fields
        if (nameInput.value == "") nameInputError.style.display = "inline";
        if (emailInput.value == "") emailInputError.style.display = "inline";
        if (emailInput.value != confirmEmailInput.value) confirmemailInputError.style.display = "inline";
        if (phoneInput.value == "") phoneInputError.style.display = "inline";
        if (relationshipInput.value == "") relationshipInputError.style.display = "inline";
        
        //quit function if values incorrect
        if ((nameInput.value == "") || (emailInput.value == "") || (phoneInput.value == "") || (emailInput.value != confirmEmailInput.value) || (relationshipInput.value == "")) return;        
        
        currentUser.Name = nameInput.value;
        currentUser.Email = emailInput.value;   
        currentUser.Phone = phoneInput.value; 
        currentUser.Relationship = relationshipInput.value;      
        currentUser.Polygons = GetAllPolygons();
    
        SaveDigitiseData();
    }
    else
    {        
        popupBehavior.hide();
    }
};

ShowMsgPopup = function (msg,cmd) {
    var msgPopupText = $get("msgPopupText");
    var msgPopupOk = $get("msgPopupOk"); 
    var msgPopupCancel = $get("msgPopupCancel");     
    var popupBehavior = $find('msgPopupBehaviour');
    
    msgPopupText.value = msg;
    
    $clearHandlers(msgPopupOk);
    $clearHandlers(msgPopupCancel);
    
    $addHandler(msgPopupOk, 'click', function(){cmd; HideMsgPopup()}); 
    $addHandler(msgPopupCancel, 'click', function(){HideMsgPopup()});   
    
    popupBehavior.show(); 
};

HideMsgPopup = function () {   
    var popupBehavior = $find('msgPopupBehaviour');
    popupBehavior.hide();
};


/************Geocoding search functions********************/    
showAddress = function () {  
  hideMessage();    
  geocoder = new GClientGeocoder(); 
  if (geocoder) {
    tmpAddress = document.getElementById('address').value;
    geocoder.getLocations(tmpAddress,geoReturn);
  }
};  
    
geoReturn = function (response) {
    if (!response || response.Status.code != 200) {
      showMessage(tmpAddress + " not found. Please try again.",2);
    } else {           
      var place = response.Placemark[0];
      var point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);  
      var zoom = (2 + Math.round(2 * place.AddressDetails.Accuracy));
      map.setCenter(point, zoom);
      map.savePosition();      
     /* map.openInfoWindowHtml(point, place.address + '<br>' + 
        '<b>Country code:</b> ' + place.AddressDetails.Country.CountryNameCode);*/
    }
};  

gotoLocation = function () {    
    var lat = document.getElementById('latitude').value;
    var lon = document.getElementById('longitude').value;

    if ((IsNumeric(lat)) && (IsNumeric(lon))) {
        var point = new GLatLng(lat, lon); 
        map.setCenter(point, 6);
        document.getElementById('latitude').value = "";
        document.getElementById('longitude').value = "";            
    } else {    
        alert("Latitude / longitude must be numbers!");              
    }    
};

gotoStoredLocation = function (ddl) {
    var coords;
    var bounds = new GLatLngBounds(); 
    
    if(ddl.value != -1)
    {
        coords = ddl.value.split(",");
        bounds.extend(new GLatLng(coords[0], coords[1]));
        bounds.extend(new GLatLng(coords[2], coords[3]));
        
        map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter()); 
    }
};
/***********************************************************/


