﻿// ************************************************************************************************
//
// Karttricket RWC - Administrative functions
// Copyright Informationsfabriken AB
//
// ************************************************************************************************

KarttricketRWCAdmin.prototype.KarttricketRWC = null;
KarttricketRWCAdmin.prototype.MapCommand = null;
KarttricketRWCAdmin.prototype.UserKey = null;
KarttricketRWCAdmin.prototype.DialogTargetElement = null;
KarttricketRWCAdmin.prototype.ActiveDialog = null;
KarttricketRWCAdmin.prototype.Locale = null;
KarttricketRWCAdmin.prototype.DialogPath = null;

KarttricketRWCAdmin.prototype.OutputTargetElement = null;
KarttricketRWCAdmin.prototype.OutputTimer = null;
KarttricketRWCAdmin.prototype.OutputDelay = null;
KarttricketRWCAdmin.prototype.OnOutputSet = null;
KarttricketRWCAdmin.prototype.OnOutputCleared = null;

KarttricketRWCAdmin.prototype.OnObjectSaved = null;
KarttricketRWCAdmin.prototype.OnLayerSaved = null;
KarttricketRWCAdmin.prototype.OnRouteSaved = null;
KarttricketRWCAdmin.prototype.OnViewSaved = null;


// ************************************************************************************************
// ************************************************************************************************
// State
// ************************************************************************************************
// ************************************************************************************************
KarttricketRWCAdmin.prototype.CreateObjectInProgress = null;
KarttricketRWCAdmin.prototype.FeedbackInProgress = null;
KarttricketRWCAdmin.prototype.LastClickPoint = null;


KarttricketRWCAdmin.prototype.MapClicked = function(point)
{
    if(this.CreateObjectInProgress)
    {
        this.LastClickPoint = point;
        this.ShowSaveObjectDialog();
    }
    else if(this.FeedbackInProgress)
    {
        this.LastClickPoint = point;
        this.ShowFeedbackDialog();
    }
    else
        this.LastClickPoint = null;
}

KarttricketRWCAdmin.prototype.SetFeedback = function()
{
    this.FeedbackInProgress = true;
    this.SetOutput(this.KarttricketRWC.Globalization.Msg_ClickMap);
}

KarttricketRWCAdmin.prototype.SetSaveObject = function()
{
    if(this.KarttricketRWC.SelectedObject != null)
        this.ShowSaveObjectDialog();
    else
    {
        this.CreateObjectInProgress = true;
        this.SetOutput(this.KarttricketRWC.Globalization.Msg_ClickMap);
    }
}



// ************************************************************************************************
// ************************************************************************************************
// Object functions
// ************************************************************************************************
// ************************************************************************************************
KarttricketRWCAdmin.prototype._SaveObject = function(objectId, context)
{
    context.KarttricketRWC.RemoveObject(objectId);
    context.KarttricketRWC.LoadObject(objectId);
    
    context.DialogCancelButtonClicked();
    context.SetDelayedOutput(context.KarttricketRWC.Globalization.Msg_ObjectSaved);
    if(context.OnObjectSaved) context.OnObjectSaved(context.KarttricketRWC.GetObject(objectId));
}
KarttricketRWCAdmin.prototype.SaveObject = function(ktDbObject)
{
    this.MapCommand.SaveObject(this.UserKey, ktDbObject, this._SaveObject, null, this);
}


KarttricketRWCAdmin.prototype._DeleteObject = function(objectId, context)
{
    if(objectId)
        context.KarttricketRWC.RemoveObject(objectId);
}


KarttricketRWCAdmin.prototype.DeleteObject = function(objectId)
{
    this.MapCommand.DeleteObject(this.UserKey, objectId, this._DeleteObject, null, this);
}

// ************************************************************************************************
// ************************************************************************************************
// Start settings functions
// ************************************************************************************************
// ************************************************************************************************
KarttricketRWCAdmin.prototype.__SaveStartSettings = function(ret, context)
{
    context.KarttricketRWC.StartSettings.MapId = context.KarttricketRWC.MapId;
    context.KarttricketRWC.StartSettings.VirtualMapId = context.KarttricketRWC.MapId >= 10000 ? context.KarttricketRWC.MapId : 0;
    context.KarttricketRWC.StartSettings.StartX = context.KarttricketRWC.RWC.getMapCenter().y;
    context.KarttricketRWC.StartSettings.StartY = context.KarttricketRWC.RWC.getMapCenter().x;
    context.KarttricketRWC.StartSettings.StartScale = context.KarttricketRWC.RWC.getScale();
    context.SetDelayedOutput(context.KarttricketRWC.Globalization.Msg_HomePositionSaved);
}
KarttricketRWCAdmin.prototype._SaveStartSettings = function(ktDbStartSettings, context)
{
    ktDbStartSettings.MapId = context.KarttricketRWC.MapId;
    ktDbStartSettings.RT90X = context.KarttricketRWC.RWC.getMapCenter().y;
    ktDbStartSettings.RT90Y = context.KarttricketRWC.RWC.getMapCenter().x;
    ktDbStartSettings.Scale = context.KarttricketRWC.RWC.getScale();
    context.MapCommand.SaveStartSettings(context.UserKey, ktDbStartSettings, context.__SaveStartSettings, null, context);
}
KarttricketRWCAdmin.prototype.SaveStartSettings = function()
{
    this.MapCommand.GetEmptyDbStartSettings(this._SaveStartSettings, null, this);
}

// ************************************************************************************************
// ************************************************************************************************
// Layer functions
// ************************************************************************************************
// ************************************************************************************************
KarttricketRWCAdmin.prototype._SaveLayer = function(layerId, context)
{
    context.KarttricketRWC.RemoveLayer(layerId);
    context.KarttricketRWC.LoadLayer(layerId);
    context.DialogCancelButtonClicked();
    context.SetDelayedOutput(context.KarttricketRWC.Globalization.Msg_LayerSaved);
    if(context.OnLayerSaved) context.OnLayerSaved(context.KarttricketRWC.GetLayer(layerId));
}


KarttricketRWCAdmin.prototype.SaveLayer = function(ktDbLayer)
{
    this.MapCommand.SaveLayer(this.UserKey, ktDbLayer, this._SaveLayer, null, this);
}


// ************************************************************************************************
// ************************************************************************************************
// Route functions
// ************************************************************************************************
// ************************************************************************************************
KarttricketRWCAdmin.prototype._SaveRoute = function(routeId, context)
{
    if(context.KarttricketRWC.CurrentTool == 'measureDistance')
        context.KarttricketRWC.RWC.clickTool.cancel();
    context.KarttricketRWC.RemoveRoute(routeId);
    context.KarttricketRWC.UnselectRoute();
    context.KarttricketRWC.SetRoute(routeId);
    context.DialogCancelButtonClicked();
    context.SetDelayedOutput(context.KarttricketRWC.Globalization.Msg_RouteSaved);
    if(context.OnRouteSaved) context.OnRouteSaved(context.KarttricketRWC.GetRoute(routeId));
}
KarttricketRWCAdmin.prototype.SaveRoute = function(ktDbRoute)
{
    ktDbRoute.Distance = this.KarttricketRWC.RWC.clickTool.totalDistance;
    this.MapCommand.SaveRoute(this.UserKey, ktDbRoute, this._SaveRoute, null, this);
}


// ************************************************************************************************
// ************************************************************************************************
// View functions
// ************************************************************************************************
// ************************************************************************************************
KarttricketRWCAdmin.prototype._SaveView = function(viewId, context)
{
    context.KarttricketRWC.RemoveView(viewId);
    context.KarttricketRWC.LoadView(viewId);
    context.DialogCancelButtonClicked();
    context.SetDelayedOutput(context.KarttricketRWC.Globalization.Msg_ViewSaved);
    if(context.OnViewSaved) context.OnViewSaved(context.KarttricketRWC.GetView(viewId));
}

KarttricketRWCAdmin.prototype.SaveView = function(ktDbView)
{
    this.MapCommand.SaveView(this.UserKey, ktDbView, this._SaveView, null, this);
}


// ************************************************************************************************
// ************************************************************************************************
// Feedback functions
// ************************************************************************************************
// ************************************************************************************************
KarttricketRWCAdmin.prototype._SaveFeedback = function(feedbackId, context)
{
    context.DialogCancelButtonClicked();
    context.SetDelayedOutput(context.KarttricketRWC.Globalization.Msg_FeedbackSaved);
}
KarttricketRWCAdmin.prototype.SaveFeedback = function(ktDbFeedback)
{
    this.MapCommand.SaveFeedback(this.UserKey, ktDbFeedback, this._SaveFeedback, null, this);
}

// ************************************************************************************************
// ************************************************************************************************
// UI functions
// ************************************************************************************************
// ************************************************************************************************
KarttricketRWCAdmin.prototype.SetDelayedOutput = function(text)
{
    this.SetOutput(text);
    this.ClearOutput = associateObjWithCallback(this, this.ClearOutput);
    this.OutputTimer = window.setTimeout(this.ClearOutput, this.OutputDelay);
}
KarttricketRWCAdmin.prototype.SetOutput = function(text)
{
    if(this.OutputTargetElement) this.OutputTargetElement.innerHTML = text;
    if(this.OnOutputSet) this.OnOutputSet(text);
}
KarttricketRWCAdmin.prototype.ClearOutput = function()
{
    if(this.OutputTargetElement) this.OutputTargetElement.innerHTML = '';
    window.clearTimeout(this.OutputTimer);
    if(this.OnOutputCleared) this.OnOutputCleared();
}


KarttricketRWCAdmin.prototype._CreateKtObjectFromDialog = function(obj, context)
{
    if(context.ValidateSaveObjectDialog())
    {
        if(context.KarttricketRWC.SelectedObject != null) obj.ObjectId = context.KarttricketRWC.SelectedObject.Id;
        obj.CategoryId = parseInt(document.getElementById('ktObjectCategoryList').value);
        obj.SymbolId = parseInt(document.getElementById('ktObjectSymbolList').value);
        obj.MapId = context.KarttricketRWC.MapId;
        obj.UserKey = context.UserKey;
        if(document.getElementById('ktRouteRadio').checked) obj.RouteId = context.KarttricketRWC.SelectedRoute.Id;
        if(document.getElementById('ktLayerRadio').checked) obj.LayerId = context.KarttricketRWC.SelectedLayer.Id;
        obj.Title = document.getElementById('ktObjectTitleText').value;
        obj.Description = document.getElementById('ktObjectDescriptionText').value;
        obj.NumberedDescription = document.getElementById('ktObjectNumberedCheck').checked;
        obj.ExternalId = document.getElementById('ktExternalIdText').value;
        obj.RT90X = context.KarttricketRWC.SelectedObject == null ? context.LastClickPoint.y : context.KarttricketRWC.SelectedObject.RWCObject.point.y;
        obj.RT90Y = context.KarttricketRWC.SelectedObject == null ? context.LastClickPoint.x : context.KarttricketRWC.SelectedObject.RWCObject.point.x;
        obj.Scale = context.KarttricketRWC.RWC.getScale();
        obj.Link = document.getElementById('ktObjectLinkText').value;
        obj.LinkTitle = document.getElementById('ktObjectLinkTitleText').value;
        
        context.SaveObject(obj);
    }
}
KarttricketRWCAdmin.prototype.CreateKtObjectFromDialog = function()
{
    this.MapCommand.GetEmptyDbObject(this._CreateKtObjectFromDialog, null, this);
}


KarttricketRWCAdmin.prototype.ValidateSaveObjectDialog = function()
{
    if(document.getElementById('ktObjectTitleText').value == null || document.getElementById('ktObjectTitleText').value.length == 0)
    {
        alert(this.KarttricketRWC.Globalization.Msg_MissingObjectTitle);
        return false;
    }
    return true;
}


KarttricketRWCAdmin.prototype.ValidateSaveLayerDialog = function()
{
    if(document.getElementById('ktLayerNameText').value == null || document.getElementById('ktLayerNameText').value.length == 0)
    {
        alert(this.KarttricketRWC.Globalization.Msg_MissingLayerName);
        return false;
    }
    return true;
}

KarttricketRWCAdmin.prototype.ValidateSaveRouteDialog = function()
{
    if(document.getElementById('ktRouteNameText').value == null || document.getElementById('ktRouteNameText').value.length == 0)
    {
        alert(this.KarttricketRWC.Globalization.Msg_MissingRouteName);
        return false;
    }
    return true;
}

KarttricketRWCAdmin.prototype.ValidateSaveViewDialog = function()
{
    if(document.getElementById('ktViewNameText').value == null || document.getElementById('ktViewNameText').value.length == 0)
    {
        alert(this.KarttricketRWC.Globalization.Msg_MissingViewName);
        return false;
    }
    return true;
}


KarttricketRWCAdmin.prototype._CreateKtLayerFromDialog = function(obj, context)
{
    if(context.ValidateSaveLayerDialog())
    {
        if(document.getElementById('ktOverwriteCheck').checked)
            obj.LayerId = context.KarttricketRWC.SelectedLayer.Id;
        obj.Name = document.getElementById('ktLayerNameText').value;
        obj.Description = document.getElementById('ktLayerDescriptionText').value;
        obj.MapId = context.KarttricketRWC.MapId;
        context.SaveLayer(obj);
    }
}

KarttricketRWCAdmin.prototype.CreateKtLayerFromDialog = function()
{
    this.MapCommand.GetEmptyDbLayer(this._CreateKtLayerFromDialog, null, this);
}


KarttricketRWCAdmin.prototype._CreateKtRouteFromDialog = function(obj, context)
{
    if(context.ValidateSaveRouteDialog())
    {
        if(document.getElementById('ktOverwriteCheck').checked)
            obj.RouteId = context.KarttricketRWC.SelectedRoute.Id;
        obj.MapId = context.KarttricketRWC.MapId;
        obj.Name = document.getElementById('ktRouteNameText').value;
        obj.Description = document.getElementById('ktRouteDescriptionText').value;
        if(context.KarttricketRWC.SelectedRoute)
            obj.Distance = context.KarttricketRWC.SelectedRoute.KtRWCRoute.Distance;
        else
            obj.Distance = context.KarttricketRWC.RWC.clickTool.totalDistance;
        obj.Color = document.getElementById('ktRouteLineColorList').value;
        obj.Width = parseInt(document.getElementById('ktRouteLineWeightList').value);
        obj.Style = document.getElementById('ktRouteLineStyleList').value;
        
        if(context.KarttricketRWC.CurrentTool == 'measureDistance')
        {
            
            var CoordsString = new String();
            for(var i = 0; i < context.KarttricketRWC.RWC.clickTool.pointArray.length; i++)
            {
                CoordsString += Math.floor(context.KarttricketRWC.RWC.clickTool.pointArray[i].point.y).toString() + ',';
                CoordsString += Math.floor(context.KarttricketRWC.RWC.clickTool.pointArray[i].point.x).toString() + ',';
            }
            
            obj.RT90Coordinates = CoordsString.substring(0, CoordsString.length - 1);
        }
        else if(context.KarttricketRWC.SelectedRoute)
        {
            obj.RT90Coordinates = context.KarttricketRWC.SelectedRoute.KtRWCRoute.RT90Coordinates;
        }
        
        context.SaveRoute(obj);
    }
}
KarttricketRWCAdmin.prototype.CreateKtRouteFromDialog = function()
{
    this.MapCommand.GetEmptyDbRoute(this._CreateKtRouteFromDialog, null, this);
}

KarttricketRWCAdmin.prototype._CreateKtViewFromDialog = function(obj, context)
{
    if(context.ValidateSaveViewDialog())
    {
        if(document.getElementById('ktOverwriteCheck').checked)
            obj.ViewId = context.KarttricketRWC.SelectedView.Id;
        obj.MapId = context.KarttricketRWC.MapId;
        obj.Name = document.getElementById('ktViewNameText').value;
        obj.Description = document.getElementById('ktViewDescriptionText').value;
        obj.StartRT90X = context.KarttricketRWC.RWC.getMapCenter().y;
        obj.StartRT90Y = context.KarttricketRWC.RWC.getMapCenter().x;
        obj.StartScale = context.KarttricketRWC.RWC.getScale();

        obj.ObjectIds = context.KarttricketRWC.GetVisibleObjectIds();
        obj.RouteIds = context.KarttricketRWC.GetVisibleRouteIds();

        context.SaveView(obj);
    }
}

KarttricketRWCAdmin.prototype.CreateKtViewFromDialog = function()
{
    this.MapCommand.GetEmptyDbView(this._CreateKtViewFromDialog, null, this);
}


KarttricketRWCAdmin.prototype._CreateKtFeedbackFromDialog = function(obj, context)
{
    obj.MapId = context.KarttricketRWC.MapId;
    obj.Description = document.getElementById('ktFeedbackText').value;
    obj.RT90X = context.KarttricketRWC.RWC.getMapCenter().y;
    obj.RT90Y = context.KarttricketRWC.RWC.getMapCenter().x;
    obj.Scale = context.KarttricketRWC.RWC.getScale();
    context.SaveFeedback(obj);
}

KarttricketRWCAdmin.prototype.CreateKtFeedbackFromDialog = function()
{
    this.MapCommand.GetEmptyDbFeedback(this._CreateKtFeedbackFromDialog, null, this);
}


KarttricketRWCAdmin.prototype.DialogCancelButtonClicked = function()
{
    this.DialogTargetElement.removeChild(this.ActiveDialog);
    this.ActiveDialog = null;
}

KarttricketRWCAdmin.prototype.DialogOkButtonClicked = function()
{
    switch(this.ActiveDialog.id)
    {
        case 'ktSaveObjectDialog':
        {
            this.CreateKtObjectFromDialog();
            break;
        }
        case 'ktSaveRouteDialog':
        {
            this.CreateKtRouteFromDialog();
            break;
        }
        case 'ktSaveViewDialog':
        {
            this.CreateKtViewFromDialog();
            break;
        }
        case 'ktSaveLayerDialog':
        {
            this.CreateKtLayerFromDialog();
            break;
        }
        case 'ktFeedbackDialog':
        {
            this.CreateKtFeedbackFromDialog();
            break;
        }
        case 'ktHelpDialog':
        {
            break;
        }
        default:
        {
            this.DialogCancelButtonClicked();
            break;
        }
    }
}

KarttricketRWCAdmin.prototype._ShowSaveObjectDialog = function(dialogObject, context)
{
    context.ClearOutput();
    if(context.ActiveDialog) context.DialogCancelButtonClicked();
    
    context.ActiveDialog = document.createElement('div');
    context.ActiveDialog.id = 'ktSaveObjectDialog';
    
    context.ActiveDialog.innerHTML = dialogObject.DialogHtml;
    context.DialogTargetElement.appendChild(context.ActiveDialog);
    
    context.DialogCancelButtonClicked = associateObjWithCallback(context, context.DialogCancelButtonClicked);
    context.DialogOkButtonClicked = associateObjWithCallback(context, context.DialogOkButtonClicked);
    
    var okBtn = document.getElementById('ktCancelButton');
    if(okBtn) okBtn.onclick = context.DialogCancelButtonClicked;
    var cancelBtn = document.getElementById('ktOkButton');
    if(cancelBtn) cancelBtn.onclick = context.DialogOkButtonClicked;

    var SymbolList = document.getElementById('ktObjectSymbolList');
    var CategoryList = document.getElementById('ktObjectCategoryList');
    
    context.AddOptionToSelect(SymbolList, '0', 'Välj symbol');
    context.AddOptionToSelect(CategoryList, '0', 'Välj kategori');
    if(dialogObject.Symbols)
        for(var i = 0; i < dialogObject.Symbols.length; i++)
            context.AddOptionToSelect(SymbolList, dialogObject.Symbols[i].SymbolId.toString(), dialogObject.Symbols[i].Name);
    if(dialogObject.Categories)
        for(i = 0; i < dialogObject.Categories.length; i++)
            context.AddOptionToSelect(CategoryList, dialogObject.Categories[i].CategoryId.toString(), dialogObject.Categories[i].Name);

    if(context.KarttricketRWC.SelectedLayer != null)
        document.getElementById('ktLayerRadio').disabled = false;
    if(context.KarttricketRWC.SelectedRoute != null)
        document.getElementById('ktRouteRadio').disabled = false;
        
    context.CreateObjectInProgress = false;

    if(context.KarttricketRWC.SelectedObject)
    {
        var KtRWCObj = context.KarttricketRWC.SelectedObject.KtRWCObject;
        
        if(KtRWCObj.ObjectCategoryId > 0)
            document.getElementById('ktObjectCategoryList').value = KtRWCObj.ObjectCategoryId.toString();
        document.getElementById('ktObjectSymbolList').value = KtRWCObj.SymbolId.toString();
        
        if(KtRWCObj.LayerId > 0 && context.KarttricketRWC.SelectedLayer && context.KarttricketRWC.SelectedLayer.Id == KtRWCObj.LayerId) 
            document.getElementById('ktLayerRadio').checked = true;
        else if(KtRWCObj.RouteId > 0 && context.KarttricketRWC.SelectedRoute && context.KarttricketRWC.SelectedRoute.Id == KtRWCObj.RouteId)
            document.getElementById('ktRouteRadio').checked = true;
        else 
            document.getElementById('ktMapRadio').checked = true;
            
        document.getElementById('ktObjectTitleText').value = KtRWCObj.Title == null ? '' : KtRWCObj.Title;
        document.getElementById('ktObjectDescriptionText').value = KtRWCObj.Description == null ? '' : KtRWCObj.Description;
        document.getElementById('ktObjectNumberedCheck').checked = KtRWCObj.NumberedDescriptions;
        document.getElementById('ktExternalIdText').value = KtRWCObj.ExternalId == null ? '' : KtRWCObj.ExternalId;
        document.getElementById('ktObjectLinkText').value = KtRWCObj.LinkUrl == null ? '' : KtRWCObj.LinkUrl;
        document.getElementById('ktObjectLinkTitleText').value = KtRWCObj.LinkTitle == null ? '' : KtRWCObj.LinkTitle;
    }
}
KarttricketRWCAdmin.prototype.ShowSaveObjectDialog = function()
{
    this.MapCommand.GetSaveObjectDialog(this.UserKey, this.DialogPath, this.Locale, this._ShowSaveObjectDialog, null, this);
}


KarttricketRWCAdmin.prototype._ShowSaveLayerDialog = function(dialogObject, context)
{
    context.ClearOutput();
    if(context.ActiveDialog) context.DialogCancelButtonClicked();
    
    context.ActiveDialog = document.createElement('div');
    context.ActiveDialog.id = 'ktSaveLayerDialog';
    
    context.ActiveDialog.innerHTML = dialogObject.DialogHtml;
    context.DialogTargetElement.appendChild(context.ActiveDialog);
    
    context.DialogCancelButtonClicked = associateObjWithCallback(context, context.DialogCancelButtonClicked);
    context.DialogOkButtonClicked = associateObjWithCallback(context, context.DialogOkButtonClicked);
    
    var okBtn = document.getElementById('ktCancelButton');
    if(okBtn) okBtn.onclick = context.DialogCancelButtonClicked;
    var cancelBtn = document.getElementById('ktOkButton');
    if(cancelBtn) cancelBtn.onclick = context.DialogOkButtonClicked;

    if(context.KarttricketRWC.SelectedLayer)
    {
        var KtRWCLayer = context.KarttricketRWC.SelectedLayer.KtRWCLayer;
        document.getElementById('ktLayerNameText').value = KtRWCLayer.Name == null ? '' : KtRWCLayer.Name;
        document.getElementById('ktLayerDescriptionText').value = KtRWCLayer.Description == null ? '' : KtRWCLayer.Description;
        document.getElementById('ktOverwriteCheck').checked = true;   
        document.getElementById('ktOverwriteCheck').disabled = false;
    }
    else
        document.getElementById('ktOverwriteCheck').disabled = true;
}
KarttricketRWCAdmin.prototype.ShowSaveLayerDialog = function()
{
    this.MapCommand.GetSaveLayerDialog(this.UserKey, this.DialogPath, this.Locale, this._ShowSaveLayerDialog, null, this);
}



KarttricketRWCAdmin.prototype._ShowSaveRouteDialog = function(dialogObject, context)
{
    context.ClearOutput();
    if(context.ActiveDialog) context.DialogCancelButtonClicked();
    
    context.ActiveDialog = document.createElement('div');
    context.ActiveDialog.id = 'ktSaveRouteDialog';
    
    context.ActiveDialog.innerHTML = dialogObject.DialogHtml;
    context.DialogTargetElement.appendChild(context.ActiveDialog);
    
    context.DialogCancelButtonClicked = associateObjWithCallback(context, context.DialogCancelButtonClicked);
    context.DialogOkButtonClicked = associateObjWithCallback(context, context.DialogOkButtonClicked);
    
    var okBtn = document.getElementById('ktCancelButton');
    if(okBtn) okBtn.onclick = context.DialogCancelButtonClicked;
    var cancelBtn = document.getElementById('ktOkButton');
    if(cancelBtn) cancelBtn.onclick = context.DialogOkButtonClicked;

    if(context.KarttricketRWC.SelectedRoute)
    {
        var KtRWCRoute = context.KarttricketRWC.SelectedRoute.KtRWCRoute;
        
        document.getElementById('ktRouteNameText').value = KtRWCRoute.Name == null ? '' : KtRWCRoute.Name;
        document.getElementById('ktRouteDescriptionText').value = KtRWCRoute.Description == null ? '' : KtRWCRoute.Description;
        if(KtRWCRoute.Color) document.getElementById('ktRouteLineColorList').value = KtRWCRoute.Color;
        if(KtRWCRoute.Width) document.getElementById('ktRouteLineWeightList').value = KtRWCRoute.Width.toString();
        if(KtRWCRoute.Style) document.getElementById('ktRouteLineStyleList').value = KtRWCRoute.Style;
        document.getElementById('ktOverwriteCheck').checked = true;   
        document.getElementById('ktOverwriteCheck').disabled = false;
    }
    else
        document.getElementById('ktOverwriteCheck').disabled = true;
}
KarttricketRWCAdmin.prototype.ShowSaveRouteDialog = function()
{
    var NoPoints = false;
    if((this.KarttricketRWC.RWC.clickTool && this.KarttricketRWC.RWC.clickTool.pointArray &&
        this.KarttricketRWC.RWC.clickTool.pointArray.length > 1) || this.KarttricketRWC.SelectedRoute)
    {
        this.MapCommand.GetSaveRouteDialog(this.UserKey, this.DialogPath, this.Locale, this._ShowSaveRouteDialog, null, this);
    }
    else
        NoPoints = true;

    if(NoPoints)
        this.SetDelayedOutput(this.KarttricketRWC.Globalization.Msg_MissingPoints);
}


KarttricketRWCAdmin.prototype._ShowSaveViewDialog = function(dialogObject, context)
{
    context.ClearOutput();
    if(context.ActiveDialog) context.DialogCancelButtonClicked();
    
    context.ActiveDialog = document.createElement('div');
    context.ActiveDialog.id = 'ktSaveViewDialog';
    
    context.ActiveDialog.innerHTML = dialogObject.DialogHtml;
    context.DialogTargetElement.appendChild(context.ActiveDialog);
    
    context.DialogCancelButtonClicked = associateObjWithCallback(context, context.DialogCancelButtonClicked);
    context.DialogOkButtonClicked = associateObjWithCallback(context, context.DialogOkButtonClicked);
    
    var okBtn = document.getElementById('ktCancelButton');
    if(okBtn) okBtn.onclick = context.DialogCancelButtonClicked;
    var cancelBtn = document.getElementById('ktOkButton');
    if(cancelBtn) cancelBtn.onclick = context.DialogOkButtonClicked;

    if(context.KarttricketRWC.SelectedView)
    {
        var KtRWCView = context.KarttricketRWC.SelectedView.KtRWCView;
        
        document.getElementById('ktViewNameText').value = KtRWCView.Name == null ? '' : KtRWCView.Name;
        document.getElementById('ktViewDescriptionText').value = KtRWCView.Description == null ? '' : KtRWCView.Description;
        document.getElementById('ktOverwriteCheck').checked = true;   
        document.getElementById('ktOverwriteCheck').disabled = false;
    }
    else
        document.getElementById('ktOverwriteCheck').disabled = true;
}


KarttricketRWCAdmin.prototype.ShowSaveViewDialog = function()
{
    this.MapCommand.GetSaveViewDialog(this.UserKey, this.DialogPath, this.Locale, this._ShowSaveViewDialog, null, this);
}

KarttricketRWCAdmin.prototype._ShowFeedbackDialog = function(dialogObject, context)
{
    context.ClearOutput();
    if(context.ActiveDialog) context.DialogCancelButtonClicked();
    
    context.ActiveDialog = document.createElement('div');
    context.ActiveDialog.id = 'ktFeedbackDialog';
    
    context.ActiveDialog.innerHTML = dialogObject.DialogHtml;
    context.DialogTargetElement.appendChild(context.ActiveDialog);
    
    context.DialogCancelButtonClicked = associateObjWithCallback(context, context.DialogCancelButtonClicked);
    context.DialogOkButtonClicked = associateObjWithCallback(context, context.DialogOkButtonClicked);
    
    context.FeedbackInProgress = false;
    
    var okBtn = document.getElementById('ktCancelButton');
    if(okBtn) okBtn.onclick = context.DialogCancelButtonClicked;
    var cancelBtn = document.getElementById('ktOkButton');
    if(cancelBtn) cancelBtn.onclick = context.DialogOkButtonClicked;
}

KarttricketRWCAdmin.prototype.ShowFeedbackDialog = function()
{
    this.MapCommand.GetFeedbackDialog(this.UserKey, this.DialogPath, this.Locale, this._ShowFeedbackDialog, null, this);
}


KarttricketRWCAdmin.prototype._ShowHelpDialog = function(dialogObject, context)
{
    context.ClearOutput();
    if(context.ActiveDialog) context.DialogCancelButtonClicked();
    
    context.ActiveDialog = document.createElement('div');
    context.ActiveDialog.id = 'ktHelpDialog';
    
    context.ActiveDialog.innerHTML = dialogObject.DialogHtml;
    context.DialogTargetElement.appendChild(context.ActiveDialog);
    
    context.DialogCancelButtonClicked = associateObjWithCallback(context, context.DialogCancelButtonClicked);
    context.DialogOkButtonClicked = associateObjWithCallback(context, context.DialogOkButtonClicked);
    
    var okBtn = document.getElementById('ktCancelButton');
    if(okBtn) okBtn.onclick = context.DialogCancelButtonClicked;
    var cancelBtn = document.getElementById('ktOkButton');
    if(cancelBtn) cancelBtn.onclick = context.DialogOkButtonClicked;
}



KarttricketRWCAdmin.prototype.ShowHelpDialog = function()
{
    this.MapCommand.GetHelpDialog(this.UserKey, this.DialogPath, this.Locale, this._ShowHelpDialog, null, this);
}



KarttricketRWCAdmin.prototype.AddOptionToSelect = function(selectElm, value, text)
{
    if(isIe7 ||isIe6)
        selectElm.add(new Option(text, value));
    else
        selectElm.options[selectElm.options.length] = createOptionElement(value, text);
}



// ************************************************************************************************
// ************************************************************************************************
// Constructor
// ************************************************************************************************
// ************************************************************************************************
function KarttricketRWCAdmin(karttricketRWC, dialogTargetElement, outputTargetElement, dialogPath, locale)
{
    this.KarttricketRWC = karttricketRWC;
    this.MapCommand = this.KarttricketRWC.MapCommand;
    this.UserKey = this.KarttricketRWC.UserKey;
    this.DialogTargetElement = dialogTargetElement;
    this.CreateObjectInProgress = false;
    this.OutputTargetElement = outputTargetElement;
    this.Locale = locale == null ? 'se' : locale;
    this.DialogPath = dialogPath;

    this.OutputDelay = 2000;
    this.CreateObjectInProgress = false;
    this.FeedbackInProgress = false;
    
    this.MapClicked = associateObjWithCallback(this, this.MapClicked);
    this.KarttricketRWC.OnMapClicked = this.MapClicked;
}
