

function MyMarkers() {}

MyMarkers.isInit = false;

MyMarkers.type_combo = null;
MyMarkers.get_marker_button = null;

MyMarkers.marker_list = null;
MyMarkers.marker_data = null; // Marker data for list widget.

MyMarkers.marker_dialog = null;

MyMarkers.marker_action = 0;

function FillComboBoxGroup(combobox) {
        for(var i=0; i<MapData.groups.__indices.length; i++) {
                var uidgid = MapData.groups.__indices[i];
                if(MapData.checkGroupOnGlobal(MapData.groups[uidgid]) == true) { // Check on global.
                        var item = new qx.ui.form.ListItem(MapData.groups[uidgid].elmtName);
	                 var color = MapData.classes[MapData.groups[uidgid].elmtClass].elmtColor;
                        item.setIcon(IconMarkerPath(MapData.groups[uidgid].elmtIcon, 16, color));
                        item.setValue(MapData.groups[uidgid].elmtGid + "");
                        combobox.add(item);
                }
        }
}

MyMarkers.setGroupCombo = function(item) {
        if(MyMarkers.marker_dialog == null) return;
        var id = MyMarkers.marker_data.indexOf(item);
        if(id == -1) return;
        var marker = MapData.markers[MapData.USER_MARKERS][id];
        if(MapData.checkGroupOnGlobalByGid(marker.elmtGroup) == true) {
                if(MyMarkers.marker_dialog._check_global.getChecked() == true) return;
                MyMarkers.marker_dialog._check_global.setChecked(true);
                MyMarkers.marker_dialog._data_widgets["elmtGroup"].getList().removeAll();
                FillComboBoxGroup(MyMarkers.marker_dialog._data_widgets["elmtGroup"]);
        } else {
                if(MyMarkers.marker_dialog._check_global.getChecked() == false) return;
                MyMarkers.marker_dialog._check_global.setChecked(false);
               	var group_items = [ { elmtName : Label_Group_Replacer["all"], elmtGid : -1 } ];
                MyMarkers.marker_dialog._data_widgets["elmtGroup"].getList().removeAll();
                for(var i=0; i<group_items.length; i++) {
                             var item = new qx.ui.form.ListItem(group_items[i].elmtName);
                             item.setValue(group_items[i].elmtGid + "");
                             MyMarkers.marker_dialog._data_widgets["elmtGroup"].add(item);
                }
        }
};

MyMarkers.checkAdvert = function(item) {
    var id = MyMarkers.marker_data.indexOf(item);
    if(id == -1) return;
    var marker = MapData.markers[MapData.USER_MARKERS][id];
    var reg = /:adv/gi;
    MyMarkers.marker_dialog._check_advert.setChecked(reg.test(marker.elmtFlags));
};

MyMarkers.setMarker = function() {
	if(GCurrMarkers != MapData.USER_MARKERS) {
		GCurrMarkers = MapData.USER_MARKERS;
		RedrawLabels();
	}

    GMapAction = MAP_SET_LABEL;
    SetMapCursor("crosshair");
};

MyMarkers.editMarker = function() {
    if(MyMarkers.marker_dialog == null) {
        MyMarkers.marker_dialog = InitMarkerDialog();						 
        var item = MyMarkers.marker_list.getPane().getSelectedItem();
        MyMarkers.setGroupCombo(item);
        var id = MapData.markers[MapData.USER_MARKERS].indexOf(item);
		WidgetSeter(MyMarkers.marker_dialog._data_widgets, MapData.markers[MapData.USER_MARKERS][id]);
    }
    MyMarkers.marker_action = 2;
    MyMarkers.marker_dialog.open();	
};

MyMarkers.delMarker = function() {
    var item = MyMarkers.marker_list.getPane().getSelectedItem();
    var mid = item.elmtMid;              
    var lid = MyMarkers.marker_data.indexOf(item);
    if(lid==-1) return;
    MyMarkers.marker_data.splice(lid, 1);
    MyMarkers.marker_list.update();
    var lid = MapData.markers[MapData.USER_MARKERS].indexOf(item);
    //MapData.markers[MapData.USER_MARKERS].splice(lid, 1);

    if(MapData.checkGroupOnGlobal(item.elmtGroup) == true) {
           var fid = MapData.findMarkerByMid(MapData.markers[MapData.FAVORITE_MARKERS], mid);
           if(fid != -1)
                  MapData.markers[MapData.FAVORITE_MARKERS].splice(fid, 1);
    }

    DelMarker(mid); // SOAP mtdDelMarker.
    if(GCurrMarkers == MapData.USER_MARKERS)
    	RemoveLabelByIndex(lid);
    	
    // Clear gallery.
    Gallery.visibilityBtns(false);
    Gallery.clear();
};

MyMarkers.resetTypeComboBox = function() {
    this.type_combo.getList().removeAll();
    var type_items = [ { text : Combobox_GetMarker_User, value : "user" } ];
    for(var i=0; i<type_items.length; i++) {
            var item = new qx.ui.form.ListItem(type_items[i].text);
            item.setValue(type_items[i].value);
            this.type_combo.add(item);
    }
};

MyMarkers.init = function(parent) {

    if(this.isInit == true) return;

    this.type_combo = new qx.ui.form.ComboBox;
    this.type_combo.set({ top: 5, left: 10, width: 250 });
    this.type_combo.setBorder(new qx.renderer.border.Border(1, "solid", "#B0B0B0"));

    this.resetTypeComboBox();

    this.type_combo.setSelected(this.type_combo.getList().getFirstChild());
    parent.add(this.type_combo);

    var setlabelBtn = new qx.ui.toolbar.Button(null, "icon/22/actions/edit-add.png"); //new qx.ui.basic.Atom(Atom_UserPanel_RemoveLabel);
    with(setlabelBtn) {
             setRight(2);
             setTop(32);
             setPadding(4, 4);
             setWidth(28);
             setHeight(28);
             setBorder(new qx.renderer.border.Border(1, "solid", "#B0B0B0"));
             setToolTip(new qx.ui.popup.ToolTip(Tooltip_UserMarker_New));
             addEventListener("execute", function() { MyMarkers.setMarker(); });
    }

    var editlabelBtn = new qx.ui.toolbar.Button(null, "icon/22/actions/edit.png"); //new qx.ui.basic.Atom(Atom_UserPanel_RemoveLabel);
    with(editlabelBtn) {
             //setLocation(2, 170);
             setRight(32);
             setTop(32);
             setPadding(4, 4);
             setWidth(28);
             setHeight(28);
             setBorder(new qx.renderer.border.Border(1, "solid", "#B0B0B0"));
             setToolTip(new qx.ui.popup.ToolTip(Tooltip_UserMarker_Edit));
             addEventListener("execute", function() { MyMarkers.editMarker(); });
    }

    var removeBtn = new qx.ui.toolbar.Button(null, "icon/22/actions/edit-delete.png"); //new qx.ui.basic.Atom(Atom_UserPanel_RemoveLabel);
    with(removeBtn) {
             setLocation(2, 32);
             setPadding(4, 4);
             setWidth(28);
             setHeight(28);
             setBorder(new qx.renderer.border.Border(1, "solid", "#B0B0B0"));
             setToolTip(new qx.ui.popup.ToolTip(Tooltip_UserMarker_Delete));
             addEventListener("execute", function() { MyMarkers.delMarker(); });
    };

    var getBtn = new qx.ui.toolbar.Button(Tooltip_UserMarker_Get); //new qx.ui.basic.Atom(Atom_UserPanel_RemoveLabel);
    with(getBtn) {
             setHorizontalChildrenAlign("center");
             //setLocation(32, 32);
             setTop(32);
             setRight(62);
             setPadding(4, 4);
             setWidth(100);
             setHeight(28);
             setToolTip(new qx.ui.popup.ToolTip(Tooltip_UserMarker_Get));
             setBorder(new qx.renderer.border.Border(1, "solid", "#B0B0B0"));
             addEventListener("execute", function() {
             
                    if(GAuthInfo == undefined || GAuthInfo == null)
                         return;

                    getBtn.setEnabled(false);
                    
                    var soap_data = [];
                    //soap_data["elmtUid"] = "0"; //GAuthInfo.elmtUid;
                    soap_data["elmtLogicFlag"] = "strong";
                    soap_data["elmtName"] = "*";
                    soap_data["elmtGroup"] = "*";
                    soap_data["elmtComments"] = "*";
                    soap_data["elmtPicsComments"] = "*";

                    switch(MyMarkers.type_combo.getSelected().getValue() + "") {
                    case "all": // All.
                    soap_data["elmtUid"] = "*"
                    break;
                    case "global": // Global.
                    soap_data["elmtUid"] = "0"
                    break;
                    case "user": // User.
                    soap_data["elmtUid"] = GAuthInfo.elmtUid;
                    break;
                    case "separator":
                    break;
                    default:
                    soap_data["elmtUid"] = "*";
                    soap_data["elmtGroup"] = MyMarkers.type_combo.getSelected().getValue();
                    break;
                    }

		    GetMarker(soap_data, true, function(arr) {
                          MapData.markers[MapData.USER_MARKERS].length = 0;
                          MyMarkers.marker_data.length = 0;
                          for(var i=0; i<arr.length; i++) {
                                  arr[i] = SetIconGroup(arr[i]);
                                  arr[i] = SetTextGroup(arr[i]);
                                  MapData.markers[MapData.USER_MARKERS].push(arr[i]);
                                  MyMarkers.marker_data.push(arr[i]);
                          }
                          MyMarkers.marker_list.update();
                          // Redraw markers.
                          if(GCurrMarkers == MapData.USER_MARKERS)
                                  RedrawLabels();
                          getBtn.setEnabled(true);
                    });

             });
    };

    parent.add(setlabelBtn, editlabelBtn, removeBtn, getBtn);

    // <--

    this.marker_data = [];

    var header =
    {
        icon            : { label : "", width: 24, type : "iconHtml" },
        elmtName        : { label : ListView_MyLabels_Name, width : 80, type : "text", sortable : true, sortProp : "text" },
        elmtComments    : { label : ListView_MyLabels_Comment, width : 100, type : "text", sortable : true, sortProp : "text" },
        elmtType        : { label : ListView_MyLabels_Group, width : 100, type : "text", sortable : true, sortProp : "text" }
    };

    this.marker_list = new qx.ui.listview.ListView(this.marker_data, header);
    this.marker_list.set({ top : 62, left: 2, bottom: 10, right: 2 });
    this.marker_list.setBorder(new qx.renderer.border.Border(1, "solid", "#B0B0B0"));
    parent.add(this.marker_list);

	this.marker_list.getPane().getManager().addEventListener("changeSelection", function(e) {

           	var item = e.getData()[0];
           	
                Gallery.tab.connect();
                Gallery.fill(item);
                Gallery.visibilityBtns(true);

           	var id = MapData.markers[MapData.USER_MARKERS].indexOf(item);
                MyMarkers.setGroupCombo(item);
                MyMarkers.checkAdvert(item);
		if(MyMarkers.marker_dialog != null)
		          WidgetSeter(MyMarkers.marker_dialog._data_widgets, MapData.markers[MapData.USER_MARKERS][id]);

	        for(var i=0; i<GMapCells.length; i++) {
                 for(j=0; j<GMapCells[i]._freeLabels.length; j++) {
                          var label = GMapCells[i]._freeLabels[j];
                          label.setBorder(qx.renderer.border.BorderPresets.getInstance().none);
                          if(label.getVisibility() == true && label._id == id) {
                                label.setBorder(qx.renderer.border.BorderPresets.getInstance().black);
                          }
                 }
                }
         });

         this.marker_list.getPane().getManager().handleDblClick = function(item, e) {
               var mX = MapData.markers[MapData.USER_MARKERS][MapData.markers[MapData.USER_MARKERS].indexOf(item)].mX;
               var mY = MapData.markers[MapData.USER_MARKERS][MapData.markers[MapData.USER_MARKERS].indexOf(item)].mY;
               GAbsX = -mX+GPortWidth/2; GAbsY = -mY+GPortHeight/2;
               SetMapPosition(-GAbsX, -GAbsY, 1);
         }

    return { "type_combo" : this.type_combo, "marker_list" : this.marker_list };
};

MyMarkers.addMarker2List = function(marker) {
	this.marker_data.push(marker);
    this.marker_list.update();
};

MyMarkers.setMarker2List = function(marker) {
	var item = this.marker_list.getPane().getSelectedItem();
    item.elmtName.text = marker.elmtName;
    item.elmtComments.text = marker.elmtComments;
    item.elmtType.text = marker.elmtGroup;	
	this.marker_list.update();
};

MyMarkers.clearMyMarkers = function() {
    this.marker_data.length = 0;
    this.marker_list.update();
};

function checkOnSelected(list) {
     var item = list.getPane().getSelectedItem();
     if(item == undefined || item == null || item == -1) return false;
     return true;
}

