
// USER INFO.

function GetUserInfo(uid, accuid) {
       var user_info;

       var params = new SOAPClientParameters();
       params.add("elmtUid", uid);
       params.add("elmtAccuid", accuid);

       var map_info = SheduleManager.add_task("terAuth", "mtdGetUserInfo", TF_RUN_ONCE|TF_FIRE_RUN);
       map_info.setParams(params, false, User_Info_Callback);

       function User_Info_Callback(r)
       {
                if(r.cplxResult.elmtResult == 0) {
                     user_info = r.cplxResult;
                }
       }

       return user_info;
}

function SetUserInfo(uid, accuid, data) {

       var ret = 0;

       var params = new SOAPClientParameters(data);

       params.add("elmtUid", uid);
       params.add("elmtAccuid", accuid);
       
       for(var i in params.arr()) {
       
               GDebugPort.debug( i + " = " + params.arr()[i]);
       }

       var map_info = SheduleManager.add_task("terAuth", "mtdSetUserInfo", TF_RUN_ONCE|TF_FIRE_RUN);
       map_info.setParams(params, false, User_Info_Callback);

       function User_Info_Callback(r)
       {
                //if(r.cplxResult.elmtResult == 0) {
                        ret = r.cplxResult.elmtResult;
                //}
       }
       
       return ret;
}

// MAPS INFO.

function GetMapInfo(flag) {

         var ret = null;

         var params = new SOAPClientParameters();
         params.add("elmtFlag", flag);

         var map_info = SheduleManager.add_task("terCommon", "mtdMapInfo", TF_RUN_ONCE|TF_FIRE_RUN);
         map_info.setParams(params, false, Del_NullMarker_Callback);

         function Del_NullMarker_Callback(r) { ret = r.cplxResult; }
		 if(ret == null)
		 		return [];

		 if(ret.elmtResult == 0)
         		return MapInfo2Array(ret);
		 else
		 		return [];
}

function MapInfo2Array(marker) {

         var split_params = [  "elmtName", "elmtId", "elmtUniqid", "elmtComments", "elmtFlags",
                               "elmtWest", "elmtEast", "elmtNorth", "elmtSouth" ];

         var tmp = new Array;
         for(var i=0; i<split_params.length; i++) {
                 if(marker[split_params[i]] instanceof Object)
                        tmp[split_params[i]] = marker[split_params[i]]["#text"].split('|');
		 else
			tmp[split_params[i]] = marker[split_params[i]].split('|');
                 tmp[split_params[i]].length = tmp[split_params[i]].length-1;
         }


         var arr = [];

         for(var i=0; i<tmp[split_params[0]].length; i++) {

                 var item = {
                         elmtName : { text : tmp["elmtName"][i] },
                         elmtComments : { text : tmp["elmtComments"][i] },
                         elmtFlags : tmp["elmtFlags"][i],
                         elmtId : tmp["elmtId"][i],
                         elmtUniqid : tmp["elmtUniqid"][i],
                         elmtWest : parseFloat(tmp["elmtWest"][i]),
                         elmtEast : parseFloat(tmp["elmtEast"][i]),
                         elmtNorth : parseFloat(tmp["elmtNorth"][i]),
                         elmtSouth : parseFloat(tmp["elmtSouth"][i])
                 };
                 arr.push(item);
                 GDebugPort.debug("name: " + item.elmtName.text);
         }
         return arr;
}

// ICONS.

function GetIcons(flags) {
         var ret;

         var params = new SOAPClientParameters();

         params.add("elmtFlags", flags);

         var map_info = SheduleManager.add_task("terCommon", "mtdGetIcons", TF_RUN_ONCE|TF_FIRE_RUN);
         map_info.setParams(params, false, Get_NullMarker_Callback);

         function Get_NullMarker_Callback(r) {
                  ret = r.cplxResult;
         }
         var arr = ret.elmtName.split('|');
         arr.length = arr.length-1;
         return arr;
}

// MARKER CLASSES.

function GetAllMarkerClass(flags) {
       var ret;

       var params = new SOAPClientParameters();
       params.add("elmtFlags", flags);

       var marker_class = SheduleManager.add_task("terMarker", "mtdGetAllMarkerClass", TF_RUN_ONCE|TF_FIRE_RUN);
       marker_class.setParams(params, false, Marker_Class_Callback);

       function Marker_Class_Callback(r)
       {
                if(r.cplxResult.elmtResult == 0) {
                     ret = r.cplxResult;
                }
       }

       return Class2Array(ret);
}

function Class2Array(classes) {

         var split_params = [  "elmtCuid", "elmtFlags", "elmtName", "elmtComments" ];

         var tmp = new Array;
         for(var i=0; i<split_params.length; i++) {
                 if(classes[split_params[i]] instanceof Object)
                        tmp[split_params[i]] = classes[split_params[i]]["#text"].split('|');
		 else
			tmp[split_params[i]] = classes[split_params[i]].split('|');
                 tmp[split_params[i]].length = tmp[split_params[i]].length-1;
         }

         var arr = [];
         arr.__indices = [];

         for(var i=0; i<tmp[split_params[0]].length; i++) {

                 var item = {
                         elmtName : { text : tmp["elmtName"][i] },
                         elmtComments : { text : tmp["elmtComments"][i] },
                         elmtFlags : tmp["elmtFlags"][i],
                         elmtCuid : tmp["elmtCuid"][i],
                         elmtColor : i
                 };
//                 arr.__indices.push(item.elmtCuid + "");
                 arr[item.elmtCuid] = item;
                 GDebugPort.debug("name: " + item.elmtName.text + " | comments: " + item.elmtComments.text);
         }
         return arr;
}

// GROUP.

function SetMarkerGroup(data) {
       var ret;

       var params = new SOAPClientParameters(data);

       var marker_class = SheduleManager.add_task("terMarker", "mtdSetMarkerGroup", TF_RUN_ONCE|TF_FIRE_RUN);
       marker_class.setParams(params, false, Marker_Class_Callback);

       function Marker_Class_Callback(r)
       {
                ret = r.cplxResult;
       }

       return ret;
}

function DelMarkerGroup(accuid, gid) {
       var ret;

       var params = new SOAPClientParameters();
       params.add("elmtAccuid", accuid);
       params.add("elmtGid", gid);

       var marker_class = SheduleManager.add_task("terMarker", "mtdDelMarkerGroup", TF_RUN_ONCE|TF_FIRE_RUN);
       marker_class.setParams(params, false, Marker_Class_Callback);

       function Marker_Class_Callback(r)
       {
                ret = r.cplxResult;
       }

       return ret;
}

function GetAllMarkerGroup(map_uid, uid, gclass, flags) {
       var ret;

       var params = new SOAPClientParameters();
       params.add("elmtMapUid", map_uid);
       params.add("elmtUid", uid);
       params.add("elmtClass", gclass);
       params.add("elmtFlags", flags);

       var marker_class = SheduleManager.add_task("terMarker", "mtdGetAllMarkerGroup", TF_RUN_ONCE|TF_FIRE_RUN);
       marker_class.setParams(params, false, Marker_Class_Callback);

       function Marker_Class_Callback(r)
       {
                if(r.cplxResult.elmtResult == 0) {
                     ret = r.cplxResult;
                }
       }

       return Group2Array(ret);
}

function Group2Array(groups) {

         var split_params = [  "elmtGid", "elmtClass", "elmtModerator", "elmtFlags",
                               "elmtIcon", "elmtMapUid", "elmtUid", "elmtName", "elmtComments" ];                              

         var tmp = new Array;
         for(var i=0; i<split_params.length; i++) {
                 if(groups[split_params[i]] instanceof Object)
                        tmp[split_params[i]] = groups[split_params[i]]["#text"].split('|');
		 else
			tmp[split_params[i]] = groups[split_params[i]].split('|');
                 tmp[split_params[i]].length = tmp[split_params[i]].length-1;
         }

         var arr = [];

         for(var i=0; i<tmp[split_params[0]].length; i++) {

                 var item = {
                         elmtName : tmp["elmtName"][i],
                         elmtComments : tmp["elmtComments"][i],
                         elmtFlags : tmp["elmtFlags"][i],
                         elmtGid : tmp["elmtGid"][i],
                         elmtClass : tmp["elmtClass"][i],
                         elmtModerator : tmp["elmtModerator"][i],
                         elmtIcon : tmp["elmtIcon"][i],
                         elmtUid : parseInt(tmp["elmtUid"][i])
                 };
                 arr.push(item);
                 GDebugPort.debug("name: " + item.elmtName + " | comments: " + item.elmtComments);
         }
         return arr;
}

function ArrayBuilder(soap_data, split_data) { // out: array ( key: split_data, value: soap_data)
         var tmp = [];
         for(var i=0; i<split_data.length; i++) {
                 if(groups[split_data[i]] instanceof Object)
                        tmp[split_data[i]] = soap_data[split_data[i]]["#text"].split('|');
		 else
			tmp[split_data[i]] = soap_data[split_data[i]].split('|');
                 tmp[split_data[i]].length = tmp[split_data[i]].length-1;
         }
         var arr = [];
         for(var i=0; i<tmp[split_data[0]].length; i++) {
                 for(j=0; j<split_data.length; j++)
                         item[split_data[j]] = tmp[split_data[j]][i];
                 arr.push(item);
         }
         return arr;
}

// NULL MARKER.

function SetNullMarker(mid, name, lat, lon, comments, type) {

         if(GAuthInfo == null || GAuthInfo == undefined)
                      return;
         if(GAuthInfo.elmtAccuid == undefined)
                      return;

         var ret = null;

         var params = new SOAPClientParameters();

         params.add("elmtAccuid", GAuthInfo.elmtAccuid);
         params.add("elmtMapUid", MapData.map_guid);
         params.add("elmtMid", mid);

         params.add("elmtName", name);
         params.add("elmtLatitude", lat);
         params.add("elmtLongitude", lon);
         params.add("elmtComments", comments);
         params.add("elmtType", type);
         params.add("elmtFlags", "s" + MapData.curr_scale);

         var map_info = SheduleManager.add_task("terMarker", "mtdSetNullMarker", TF_RUN_ONCE|TF_FIRE_RUN);
         map_info.setParams(params, false, Set_NullMarker_Callback);

         function Set_NullMarker_Callback(r)
         {
                //if(r.cplxResult.elmtResult == 0) {
                ret = r.cplxResult;
                //}
         }
         return ret;
}

function DelNullMarker(mid) {

         if(GAuthInfo == null || GAuthInfo == undefined)
                      return;
         if(GAuthInfo.elmtAccuid == undefined)
                      return;

         var ret = null;

         var params = new SOAPClientParameters();

         params.add("elmtAccuid", GAuthInfo.elmtAccuid);
         params.add("elmtMapUid", MapData.map_guid);
         params.add("elmtMid", mid);

         var map_info = SheduleManager.add_task("terMarker", "mtdDelNullMarker", TF_RUN_ONCE|TF_FIRE_RUN);
         map_info.setParams(params, false, Del_NullMarker_Callback);

         function Del_NullMarker_Callback(r)
         {
                ret = r.cplxResult;
         }
         return ret;
}

function GetAllNullMarker(type, async, callback) {

         if(GAuthInfo == null || GAuthInfo == undefined)
                      return;
         if(GAuthInfo.elmtAccuid == undefined)
                      return;

         var ret;

         var params = new SOAPClientParameters();

         params.add("elmtAccuid", GAuthInfo.elmtAccuid);
         params.add("elmtMapUid", MapData.map_guid);

         params.add("elmtType", type);

         var map_info = SheduleManager.add_task("terMarker", "mtdGetAllNullMarker", TF_RUN_ONCE|TF_FIRE_RUN);
         map_info.setParams(params, async, Get_AllNullMarkers_Callback);

         function Get_AllNullMarkers_Callback(r) {
                  ret = r.cplxResult;
                  if(async == true)
                       callback(Marker2Array(ret));
         }
         if(async == false)
              return Marker2Array(ret);
}

function GetNullMarker(name, type, async, callback) {
         var ret;

         var params = new SOAPClientParameters();

         params.add("elmtMapUid", MapData.map_guid);
         params.add("elmtName", name);
         params.add("elmtType", type);

         var map_info = SheduleManager.add_task("terMarker", "mtdGetNullMarker", TF_RUN_ONCE|TF_FIRE_RUN);
         map_info.setParams(params, async, Get_NullMarker_Callback);

         function Get_NullMarker_Callback(r) {
                  ret = r.cplxResult;
                  if(async == true)
                       callback(Marker2Array(ret));
         }
         if(async == false)
              return Marker2Array(ret);
}

function Marker2Array(marker) {

         var split_params = [  "elmtMid", "elmtName", "elmtType", "elmtLatitude",
                               "elmtLongitude", "elmtFlags", "elmtComments" ];
                               
         var tmp = new Array;
         for(var i=0; i<split_params.length; i++) {
                 if(marker[split_params[i]] instanceof Object)
                        tmp[split_params[i]] = marker[split_params[i]]["#text"].split('|');
		 else
			tmp[split_params[i]] = marker[split_params[i]].split('|');
                 tmp[split_params[i]].length = tmp[split_params[i]].length-1;
         }


         var arr = [];

         for(var i=0; i<tmp[split_params[0]].length; i++) {
                 var lon = tmp["elmtLongitude"][i];
                 var lat = tmp["elmtLatitude"][i];
                 var pxc = MapData.Geo2Px(lon, lat);

                 var item = {
                         icon : { icon : map_marker_url + "lightviolet.png", iconWidth : 16, iconHeight : 16 },
                         elmtName : { text : tmp["elmtName"][i] },
                         elmtComments : { text : tmp["elmtComments"][i] },
                         elmtType : { text : Label_Group_Replacer[ tmp["elmtType"][i] + "" ] }, //Label_Group_Replacer[ tmp["elmtType"][i] + "" ]
                         elmtFlags : tmp["elmtFlags"][i],
                         mX : pxc.aX,
                         mY : pxc.aY,
                         lon : lon,
                         lat : lat,
                         elmtMid : tmp["elmtMid"][i],
                         __null : true
                 };
                 arr.push(item);
                 GDebugPort.debug("name: " + item.elmtName.text + " | type: " + item.elmtType.text);
         }
         return arr;
}

// USER MARKER.

function SetMarker(soap_data) {
         if(GAuthInfo == null || GAuthInfo == undefined)
                      return;
         if(GAuthInfo.elmtAccuid == undefined)
                      return;

         var ret = null;

         var params = new SOAPClientParameters(soap_data);

         params.add("elmtAccuid", GAuthInfo.elmtAccuid);
         params.add("elmtMapUid", MapData.map_guid);

         var map_info = SheduleManager.add_task("terMarker", "mtdSetMarker", TF_RUN_ONCE|TF_FIRE_RUN);
         map_info.setParams(params, false, Set_Marker_Callback);

         function Set_Marker_Callback(r)
         {
                //if(r.cplxResult.elmtResult == 0) {
                ret = r.cplxResult;
                //}
         }
         return ret;
}

function GetMarker(soap_data, async, callback) {

         var ret;

         var params = new SOAPClientParameters(soap_data);

         params.add("elmtMapUid", MapData.map_guid);

         var map_info = SheduleManager.add_task("terMarker", "mtdGetMarker", TF_RUN_ONCE|TF_FIRE_RUN);
         map_info.setParams(params, async, Get_Markers_Callback);

         function Get_Markers_Callback(r) {
                  ret = r.cplxResult;
                  if(async == true)
                       callback(UMarker2Array(ret));
         }
         if(async == false)
              return UMarker2Array(ret);
}

function GetLastAddedMarker(async, callback) {

         var ret;

         var params = new SOAPClientParameters();

         params.add("elmtMapUid", MapData.map_guid);

         var map_info = SheduleManager.add_task("terCommon", "mtdStatAddedMarkersByMap", TF_RUN_ONCE|TF_FIRE_RUN);
         map_info.setParams(params, async, Get_Markers_Callback);

         function Get_Markers_Callback(r) {
                  ret = r.cplxResult;
                  if(async == true)
                       callback(LMarker2Array(ret));
         }
         if(async == false)
              return LMarker2Array(ret);
}

function LMarker2Array(marker) {

         var split_params = [  "elmtMid", "elmtName", "elmtUid", "elmtGroup", "elmtLatitude",
                               "elmtLongitude", "elmtFlags", "elmtComments", "elmtPreview",
                               "elmtPicsNum", "elmtPicsComments", "elmtMuid" ];

         var tmp = new Array;
         for(var i=0; i<split_params.length; i++) {
                 if(marker[split_params[i]] instanceof Object)
                        tmp[split_params[i]] = marker[split_params[i]]["#text"].split('|');
		 else
			tmp[split_params[i]] = marker[split_params[i]].split('|');
                 tmp[split_params[i]].length = tmp[split_params[i]].length-1;
         }

         var arr = [];

         for(var i=0; i<tmp[split_params[0]].length; i++) {
                 var lon = tmp["elmtLongitude"][i];
                 var lat = tmp["elmtLatitude"][i];
                 var pxc = MapData.Geo2Px(lon, lat);

                 var item = {
                         icon : { icon : map_marker_url + "lightviolet.png", iconWidth : 16, iconHeight : 16 },
                         elmtName : { text : tmp["elmtName"][i] },
                         elmtComments : { text : tmp["elmtComments"][i] },
                         elmtType : { text : "" },
                         elmtUid : tmp["elmtUid"][i],
                         elmtGroup : tmp["elmtGroup"][i],
                         elmtFlags : tmp["elmtFlags"][i],
                         mX : pxc.aX,
                         mY : pxc.aY,
                         lon : lon,
                         lat : lat,
                         elmtMid : tmp["elmtMid"][i],
                         elmtPreview : tmp["elmtPreview"][i],
                         elmtPicsNum : tmp["elmtPicsNum"][i],
                         elmtPicsComments : tmp["elmtPicsComments"][i],
                         elmtPid : tmp["elmtMuid"][i],
                         __null : false,
                         __global : (MapData.checkGroupOnGlobalByGid(tmp["elmtGroup"][i]) == true) ? true : false
                 };
                 arr.push(item);
                 GDebugPort.debug("name: " + item.elmtName.text + " | mid: " + item.elmtMid + " | global: " + item.__global);
         }
         return arr;
}



function UMarker2Array(marker) {

         var split_params = [  "elmtMid", "elmtName", "elmtUid", "elmtGroup", "elmtLatitude",
                               "elmtLongitude", "elmtFlags", "elmtComments", "elmtPreview",
                               "elmtPicsNum", "elmtPicsComments", "elmtPid" ];

         var tmp = new Array;
         for(var i=0; i<split_params.length; i++) {
                 if(marker[split_params[i]] instanceof Object)
                        tmp[split_params[i]] = marker[split_params[i]]["#text"].split('|');
		 else
			tmp[split_params[i]] = marker[split_params[i]].split('|');
                 tmp[split_params[i]].length = tmp[split_params[i]].length-1;
         }

         var arr = [];

         for(var i=0; i<tmp[split_params[0]].length; i++) {
                 var lon = tmp["elmtLongitude"][i];
                 var lat = tmp["elmtLatitude"][i];
                 var pxc = MapData.Geo2Px(lon, lat);

                 var item = {
                         icon : { icon : map_marker_url + "lightviolet.png", iconWidth : 16, iconHeight : 16 },
                         elmtName : { text : tmp["elmtName"][i] },
                         elmtComments : { text : tmp["elmtComments"][i] },
                         elmtType : { text : "" },
                         elmtUid : tmp["elmtUid"][i],
                         elmtGroup : tmp["elmtGroup"][i],
                         elmtFlags : tmp["elmtFlags"][i],
                         mX : pxc.aX,
                         mY : pxc.aY,
                         lon : lon,
                         lat : lat,
                         elmtMid : tmp["elmtMid"][i],
                         elmtPreview : tmp["elmtPreview"][i],
                         elmtPicsNum : tmp["elmtPicsNum"][i],
                         elmtPicsComments : tmp["elmtPicsComments"][i],
                         elmtPid : tmp["elmtPid"][i],
                         __null : false,
                         __global : (MapData.checkGroupOnGlobalByGid(tmp["elmtGroup"][i]) == true) ? true : false
                 };
                 arr.push(item);
                 GDebugPort.debug("name: " + item.elmtName.text + " | mid: " + item.elmtMid + " | global: " + item.__global);
         }
         return arr;
}

function DelMarker(mid) {

         if(GAuthInfo == null || GAuthInfo == undefined)
                      return;
         if(GAuthInfo.elmtAccuid == undefined)
                      return;
         var ret = null;
         var params = new SOAPClientParameters();

         params.add("elmtAccuid", GAuthInfo.elmtAccuid);
         params.add("elmtUid", GAuthInfo.elmtUid);
         params.add("elmtMapUid", MapData.map_guid);
         params.add("elmtMid", mid);

         var map_info = SheduleManager.add_task("terMarker", "mtdDelMarker", TF_RUN_ONCE|TF_FIRE_RUN);
         map_info.setParams(params, false, Del_Marker_Callback);

         function Del_Marker_Callback(r)
         {
                ret = r.cplxResult;
         }
         return ret;
}

function DelImage(mid, num) {

         if(GAuthInfo == null || GAuthInfo == undefined)
                      return;
         if(GAuthInfo.elmtAccuid == undefined)
                      return;
         var ret = null;
         var params = new SOAPClientParameters();

         params.add("elmtAccuid", GAuthInfo.elmtAccuid);
         params.add("elmtMapUid", MapData.map_guid);
         params.add("elmtMid", mid);
         params.add("elmtPicNum", num);

         var map_info = SheduleManager.add_task("terMarker", "mtdDelImage", TF_RUN_ONCE|TF_FIRE_RUN);
         map_info.setParams(params, false, Del_Image_Callback);

         function Del_Image_Callback(r)
         {
                ret = r.cplxResult;
         }
         return ret;
}

function RefreshCacheMap(xpos, ypos, scale, async, callback) {

         if(GAuthInfo == null || GAuthInfo == undefined)
                      return;
         if(GAuthInfo.elmtAccuid == undefined)
                      return;
         var ret = null;
         var params = new SOAPClientParameters();

         params.add("elmtAccuid", GAuthInfo.elmtAccuid);
         params.add("elmtMapUid", MapData.map_guid);
         params.add("elmtXpos", xpos);
         params.add("elmtYpos", ypos);
         params.add("elmtScale", scale);
         params.add("elmtFlags", "");

         var map_info = SheduleManager.add_task("terGeoMap", "mtdGenerateCache", TF_RUN_ONCE|TF_FIRE_RUN);
         map_info.setParams(params, async, MapRefresh_Callback);

         function MapRefresh_Callback(r)
         {
                ret = r.cplxResult;
                if(async == true)
                     callback(ret);
         }
         if(async == false)
               return ret;
}

function GetAllUserInfo(soap_data, async, callback) {

         var ret;

         var params = new SOAPClientParameters(soap_data);

         var map_info = SheduleManager.add_task("terAuth", "mtdGetAllUserInfo", TF_RUN_ONCE|TF_FIRE_RUN);
         map_info.setParams(params, async, Get_AllUser_Callback);

         function Get_AllUser_Callback(r) {
                  ret = r.cplxResult;
                  if(async == true)
                       callback(User2Array(ret));
         }
         if(async == false)
              return User2Array(ret);
}

function User2Array(marker) {

         var split_params = [  "elmtUid", "elmtLogin", "elmtAname", "elmtLname",
                               "elmtFname", "elmtAvatar", "elmtMyWords", "elmtInterests" ];

         var tmp = new Array;
         for(var i=0; i<split_params.length; i++) {
                 if(marker[split_params[i]] instanceof Object)
                        tmp[split_params[i]] = marker[split_params[i]]["#text"].split('|');
		 else
			tmp[split_params[i]] = marker[split_params[i]].split('|');
                 tmp[split_params[i]].length = tmp[split_params[i]].length-1;
         }

         var arr = [];
         var item = [];

         for(var i=0; i<tmp[split_params[0]].length; i++) {
                 for(j=0; j<split_params.length; j++)
                         item[split_params[j]] = tmp[split_params[j]][i];
                 arr.push(item);
         }
         return arr;
}

function GetUserProfile(soap_data) {
       var user_profile;

       var params = new SOAPClientParameters(soap_data);
       var map_info = SheduleManager.add_task("terAuth", "mtdGetUserProfile", TF_RUN_ONCE|TF_FIRE_RUN);
       map_info.setParams(params, false, User_Profile_Callback);

       function User_Profile_Callback(r)
       {
                if(r.cplxResult.elmtResult == 0) {
                     user_profile = r.cplxResult;
//                     user_profile.elmtFavorite = user_profile.elmtFavorite.split('|');
//                     user_profile.elmtFavorite.length = user_profile.elmtFavorite.length - 1;
                }
       }

       return user_profile;
}

/*        	elmtGroupList: string
        	elmtMapServer: string
        	elmtUIconf: string
        	elmtMapUid: string
        	elmtScale: string
        	elmtLatitude: string
        	elmtLongitude: string
        	elmtFavorite: string
        	elmtLanguage: string
        	elmtDefGroup: string
        	elmtDefGroupComments: string
        	elmtDefClass: string
*/

function SetUserProfile(soap_data) {
       var user_profile;

       var params = new SOAPClientParameters(soap_data);
       var map_info = SheduleManager.add_task("terAuth", "mtdSetUserProfile", TF_RUN_ONCE|TF_FIRE_RUN);
       map_info.setParams(params, false, User_Profile_Callback);

       function User_Profile_Callback(r)
       {
                if(r.cplxResult.elmtResult == 0) {
                     user_profile = r.cplxResult;
                }
       }

       return user_profile;
}

function GetSettlement(soap_data, async, callback) {

         var ret;

         var params = new SOAPClientParameters(soap_data);

         var map_info = SheduleManager.add_task("terMarker", "mtdSearchSettlement", TF_RUN_ONCE|TF_FIRE_RUN);
         map_info.setParams(params, async, Get_Markers_Callback);

         function Get_Markers_Callback(r) {
                  ret = r.cplxResult;
                  if(async == true)
                       callback(GlobalMarker2Array(ret));
         }
         if(async == false)
              return GlobalMarker2Array(ret);
}

function GlobalMarker2Array(marker) {

         var split_params = [  "elmtMapUid", "elmtMid", "elmtName", "elmtComments", "elmtLatitude", "elmtLongitude", "elmtFlags" ];

         var tmp = new Array;
         for(var i=0; i<split_params.length; i++) {
                 if(marker[split_params[i]] instanceof Object)
                        tmp[split_params[i]] = marker[split_params[i]]["#text"].split('|');
		 else
			tmp[split_params[i]] = marker[split_params[i]].split('|');
                 tmp[split_params[i]].length = tmp[split_params[i]].length-1;
         }

         var arr = [];

         for(var i=0; i<tmp[split_params[0]].length; i++) {
                 var lon = tmp["elmtLongitude"][i];
                 var lat = tmp["elmtLatitude"][i];
//                 var pxc = MapData.Geo2Px(lon, lat);

                 var item = {
                         icon : { icon : map_marker_url + "lightgreen.png", iconWidth : 16, iconHeight : 16 },
                         elmtMapUid : tmp["elmtMapUid"][i],
                         elmtMid : tmp["elmtMid"][i],
                         elmtName : { text : tmp["elmtName"][i] },
                         elmtComments : { text : tmp["elmtComments"][i] },
                         elmtType : { text : "" }, //Label_Group_Replacer[ "settlement" ] },
                         elmtFlags : tmp["elmtFlags"][i],
//                         mX : pxc.aX,
//                         mY : pxc.aY,
                         lon : lon,
                         lat : lat
                 };
                 arr.push(item);
                 GDebugPort.debug("name: " + item.elmtName.text + " | mid: " + item.elmtMid);
         }
         return arr;
}

function GetRoute(soap_data, async, callback) {

         var ret;

         var params = new SOAPClientParameters(soap_data);

         var map_info = SheduleManager.add_task("terRoute", "mtdGetRoute", TF_RUN_ONCE|TF_FIRE_RUN);
         map_info.setParams(params, async, Get_Route_Callback);

         function Get_Route_Callback(r) {
                  ret = r.cplxResult;
                  if(async == true)
                       callback(Route2Array(ret));
         }
         if(async == false)
              return Route2Array(ret);
}

function Route2Array(marker) {

         var split_params = [  "elmtFlags", "elmtCoords", "elmtType", "elmtGroup", "elmtName", "elmtDescr", "elmtColor" ];

         var tmp = new Array;
         for(var i=0; i<split_params.length; i++) {
                 if(marker[split_params[i]] instanceof Object)
                        tmp[split_params[i]] = marker[split_params[i]]["#text"].split('|');
		 else
			tmp[split_params[i]] = marker[split_params[i]].split('|');
                 tmp[split_params[i]].length = tmp[split_params[i]].length-1;
         }

         var arr = [];

         for(var i=0; i<tmp[split_params[0]].length; i++) {

                 var coords_str = tmp["elmtCoords"][i].split(',');
                 var coords = [];

                 for(var j=0; j<coords_str.length; j+=2) {
                         var pxc = MapData.Geo2Px(coords_str[j+1], coords_str[j]);
                         coords.push(pxc.aX);
                         coords.push(pxc.aY);
//                         GDebugPort.debug("coords x: " + coords_str[j+1] + "  " + coords_str[j]);
                 }

                 var item = { color : tmp["elmtColor"][i], "coords" : coords };
                 arr.push(item);
         }

         return arr;
}
