var mediatype = { "image": 1, "youtube": 2, "streetview": 3, "html": 4, "url": 5 };

function spcMedialist()
{
	this.types = []; // 1=image, 2=youtube
	this.items = [];
	this.nexttempid = -1;
}

spcMedialist.prototype.loadall = function spcMedialist_loadall(forcereload)
{
	var self = this;

	console.log('Medialist / Getting complete list of media of all cities');
	
	requestdoc({ url:				product.url.api
				, method:			'GET'
				, params:			{ "class":	'media'
									, "method":	'getmedia'
									, 'random': Math.floor(Math.random()*10000) // force reload
									}
				, callback:			function()
					{
						self.items = parseResponse(this.req.responseText);

						gImages = self.items;
						
						if (self.onmedialistloaded)
							self.onmedialistloaded();
					}
				, callbackError:	function()
					{
						alert('failed to get medialist from server');
					}
				}
			);
	
}

spcMedialist.prototype.load = function(filename, forcereload)
{
	this.loadall(forcereload);
}

spcMedialist.prototype.save = function()
{
	requestdoc({ url:				product.url.api+'?class=media&method=savemedia'
				, method:			'POSTJSON'
				, params:			gImages /*{ "class":	'map'
									, "method":	'savemap'
									, "mapdata": mapdata //getMapDataJSON()
									}*/
				, callback:			function()
					{
						var response = parseResponse(this.req.responseText);
						console.log(response);
						//if (response[0].success)
							//wndJSON.body.innerHTML = dbg(test[0], '<br />');
					}
				, callbackError:	function()
					{
						alert('Failed to save mediadata.');
					}
				}
			);
}










spcMedialist.prototype.getMediaIdByAlias = function spcMedialist_getMediaIdByAlias(alias)
{
	if (medialist.items.length == 0)
	{
	  console.error('Medialist / No media data available.');
	  return;
	}	 

	for(var tel=0; tel<this.items.length; tel++)
	{
		if(this.items[tel].alias == alias)
			return this.items[tel].id;
	}
	
	return -1;
}

spcMedialist.prototype.getMediaItemsById = function spcMedialist_getMediaItemsById(idlist)
{
	var mediaitems = [];
	//console.log(idlist);

	for(var tel=0; tel<idlist.length; tel++)
	{
		for(var mediatel=0; mediatel<this.items.length; mediatel++)
		{
			var found = false;
			if(this.items[mediatel].id==idlist[tel])
			{
				found = true;
				mediaitems.push(this.items[mediatel]);
				break;
			}
		}
		if (!found)
			console.warn('getMediaItemsById failed to find media with id '+idlist[tel]);
	}
	
	return mediaitems;
}

/*
spcMedialist.prototype.querymediaitems = function()
{
	if (this.items.length == 0)
	{
	  console.error('No media data available.');
	  return;
	}
}
*/



spcMedialist.prototype.getItemPosById = function(itemid)
{
	//console.log('looking up itemid #'+itemid);
	
	// find item with the given id
	for (var i=0; i < this.items.length; i++)
	{
		if (this.items[i].id == itemid)
			return i;
	}
	
	console.log('Medialist / itemid #'+itemid+' could not be found.');
	console.log(this.items);
	
	return -1;
}

spcMedialist.prototype.getItemById = function(itemid)
{
	//var itempos = getItemPosById(itemid);
	//return this.items[ itempos ];

	return this.items[ this.getItemPosById(itemid) ];
}

spcMedialist.prototype.getTempId = function()
{
	return this.nexttempid--;
}

spcMedialist.prototype.addItem = function(itemdata)
{
	if (!itemdata.id)
	{
		var newid = this.getTempId();
		itemdata.id = newid;
	}

	this.items.push(itemdata);

	console.log('Medialist / Added mediaitem with id #'+itemdata.id);
	
	return newid;
}
/*
spcMedialist.prototype.storeItem = function(item, callback, callbackerror)
{
	var params = { "class":		"medialist"
				, "method":		"updatemediaitem"
				, itemdata:		item
				};

	//if (item.id =< 0)
	//	params.method = "createmediaitem";

	requestdoc({ url:				product.url.api
				, method:			'POST'
				, params:			params
				, callback:			function()
									{
										var response = parseResponse(this.req.responseText);
										if (callback)
											callback(response);
									}
				, callbackError:	function()
									{
										alert('Communication failure.');
									}
				}
			);
}
*/



spcMedialist.prototype.addToMapPoint = function(mediaitemid, mappointid)
{
	requestdoc({ url:				product.url.api+'?class=media&method=addtomappoint'
				, method:			'POST'
				, params:			{ pointid: mappointid
									, mediaid: mediaitemid
									}
				, callback:			function()
									{
										var response = parseResponse(this.req.responseText);
										console.log(response);
									}
				, callbackError:	function()
									{
										alert('Failed to add media to mappoint.');
									}
				}
			);
}

spcMedialist.prototype.removeFromMapPoint = function(mediaitemid, mappointid)
{
	requestdoc({ url:				product.url.api+'?class=media&method=removefrommappoint'
				, method:			'POST'
				, params:			{ pointid: mappointid
									, mediaid: mediaitemid
									}
				, callback:			function()
									{
										var response = parseResponse(this.req.responseText);
										console.log(response);
									}
				, callbackError:	function()
									{
										alert('Failed to remove media from mappoint.');
									}
				}
			);
}

spcMedialist.prototype.saveMediaItem = function(item, callback)
{
	requestdoc({ url:			product.url.api+'?class=media&method=updatemediaitem'
			   , method:        'POSTJSON'
				, params:		{itemdata: item}
				, callback:          function()
					{
						var mapitem = parseResponse(this.req.responseText);

						if (!mapitem.success)
						{
							console.error('Medialist / saveMediaItem call responded with an error');
							if (callback)
								callback(false);
						}
						else
						{
							if (callback)
								callback(true, mapitem.itemid);
						}
					}
			   , callbackError:     function()
					{
						console.error('Medialist / saveMediaItem call to server failed');
						if (callback)
							callback(false);
					}
			   });
}
