var COLORS = [["red", "#ff0000"], ["orange", "#ff8800"], ["green","#008000"], ["blue", "#000080"], ["purple", "#800080"]];
var options = {};
var shapeCounter_ = 0;
var colorIndex_ = 0;
var featureTable_;
var drawMode = false;
var areaList = new Array();
var parentLayer = 'areaItemHolder';
var layerIDs = 0;
var polyMax = 5;
var PColor = '#800080';
var OverColor = '#ff0000';
var unsaved = new Array();
var saveWarning = null;
var interval = 500;

function select(buttonId) 
{	
	document.getElementById("drawButton").className="unselected";	
	document.getElementById(buttonId).className="selected";
}

function stopEditing() 
{
	$("drawButton").className = "";
	drawMode = false;
}

function getColor(named) 
{
	return COLORS[(colorIndex_++) % COLORS.length][named ? 0 : 1];
}

function getIcon(color) 
{
	var icon = new GIcon();
	icon.image = "http://google.com/mapfiles/ms/micons/" + color + ".png";
	icon.iconSize = new GSize(32, 32);
	icon.iconAnchor = new GPoint(15, 32);
	return icon;
}

function startShape() 
{	
	if(!drawMode) return;
	var color = '#800080';	
	var polygon = new GPolygon([], color, 2, 0.7, color, 0.2);	
	polygon.getLayerId = ++layerIDs;
	startDrawing(polygon, color);
}

function startDrawing(poly, color) 
{	
	if(!drawMode)
	{
		poly.disableEditing(); 
		return;
	}
	//layerIDs++;
	map.addOverlay(poly);
	poly.enableDrawing(options);
	poly.enableEditing({onEvent: "mouseover"});
	poly.disableEditing({onEvent: "mouseout"});	
	GEvent.addListener(poly, "endline", function(){			
		stopEditing();
		GEvent.addListener(poly, "click", function(latlng, index){
		 if (typeof index == "number") 
		 {
			poly.deleteVertex(index);
		 }
		 else 
		 {					
			poly.setStrokeStyle({color: PColor, weight: 4});			
		 }
		});			

		var name = '';	
		$('promptbox').style.display = 'block';
		messageLightbox.show([$('promptbox'),260,160]);		
		$('promptOk').onclick = function()
		{	
			if(($('prompt_name').value).length > 20 )
			{
				alert($lang('polygon.name.tooLong'));
			}
			else if(($('prompt_name').value) == '' )
			{
				alert($lang('polygon.noName'));
			}
			else
			{
				name = $('prompt_name').value;
				if(logged != 'Y') 
				{
					alert($lang('polygon.saveLogged.firstWarning'));
				}
			    createListItem(name, layerIDs, false);

				areaList.push(poly);
				unsaved.push(poly.getLayerId);
				$('saveBlinker').style.visibility = 'visible';
				if(!saveWarning)
				{
					saveWarning = setTimeout('saveBlinker()',interval);
				}	
				messageLightbox.hide();
				$('promptbox').style.display = 'none';			
			}
		}
		$('promptCancel').onclick = function()
		{	
			messageLightbox.hide();
			$('promptbox').style.display = 'none';		
			setTimeout(function(){map.removeOverlay(poly)},1);
		}		 		
	});
}

function setAreaList()
{
	var name = '';	
	$('promptbox').style.display = 'block';
	messageLightbox.show([$('promptbox'),260,160]);		
	$('promptOk').onclick = function()
	{	
		if(($('prompt_name').value).length > 20 )
		{
			alert($lang('polygon.name.tooLong'));
		}
		else if(($('prompt_name').value) == '' )
		{
			alert($lang('polygon.noName'));
		}
		else
		{
			messageLightbox.hide();
			name = $('prompt_name').value;
			if(logged != 'Y') 
			{
				alert($lang('polygon.saveLogged.firstWarning'));
			}
		    createListItem(name, layerIDs, false);
			return true;
		}
	}	
/*
	if(name != 'undefined' || !name)
	{				
		if(logged != 'Y') alert($lang('polygon.saveLogged.firstWarning'));
	    createListItem(name, layerIDs, false);
		return true;
	}
	else
	{		
		return false;
	}
	*/
}

function saveAreaName(name)
{	
	$('promptbox').style.display = 'block';
	messageLightbox.show([$('promptbox'),260,160]);		
	$('promptOk').onclick = function()
	{	
		return $('prompt_name').value;
	}
	$('promptCancel').onclick = function()
	{
		return null;
	}
}

function createListItem(name, id, fromServer)
{
	var div, span1, span2, span3, span4;
	div = document.createElement('div');
	div.className = 'listItem';
	span1 = document.createElement('span');
	span1.className = 'item';
	span1.innerHTML = name;
	span1.onmouseover = blinkPolygon;
	span1.onmouseout = blinkPolygon;
	span1.onclick = setPolygon
	span1.id = 'blinkArea_' + id;
	if(!fromServer)
	{		
		span2 = document.createElement('span');
		span2.className = 'save';	
		span2.id = 'saveArea_' + id;
		span2.title = $lang('polygon.save');
		span2.onclick = saveArea;
	}	
	span3 = document.createElement('span');
	span3.className = 'delete';
	span3.id = 'deleteArea_' + id;
	span3.onclick = deleteArea;
	span3.title = $lang('polygon.delete');
	span4 = document.createElement('span');
	span4.className = 'clear';		
	div.appendChild(span1);
	div.appendChild(span3);
	if(!fromServer)
	{
		div.appendChild(span2);		
	}
	div.appendChild(span4);		
	$(parentLayer).appendChild(div);	
}

function blinkPolygon()
{
	var id = this.id.split('_')[1];
	var poly;
	for(var i=0; i<areaList.length; i++)
	{		
		if(areaList[i].getLayerId == (parseInt(id)))
		{
			poly = areaList[i];
			break;
		}
	}
	if(this.className.match('over'))
	{
		this.className = this.className.replace(' over','');
		poly.setStrokeStyle({color: PColor, weight: 2});
		poly.setFillStyle({color: PColor});
	}
	else
	{
		this.className += ' over';
		poly.setStrokeStyle({color: OverColor, weight: 2});
		poly.setFillStyle({color: OverColor})
	}
}

function setPolygon()
{
	var id = this.id.split('_')[1];
	var poly;
	for(var i=0; i<areaList.length; i++)
	{		
		if(areaList[i].getLayerId == (parseInt(id)))
		{
			poly = areaList[i];
			break;
		}
	}
	var bounds = poly.getBounds();	
	var zoom = map.getBoundsZoomLevel(bounds);
	var center = poly.getBounds().getCenter() ;
	map.setCenter(center, zoom);
}

function saveBlinker()
{
	if($('saveBlinker').style.display == 'block')
	{
		setTimeout(function(){$('saveBlinker').style.display = 'none';},interval);
		$('saveBlinker').style.display == 'block';			
	}
	else
	{
		setTimeout(function(){$('saveBlinker').style.display = 'block';},interval);
		$('saveBlinker').style.display == 'none';			
	}
	setTimeout('saveBlinker()',interval);
}

function saveArea()
{
	if(logged != 'Y')
	{
		alert($lang('polygon.saveLogged.secondWarning'));
		return;
	}
	var id = this.id.split('_')[1];
	var points = '';
	var that = this;
	var name = this.parentNode.getElementsByTagName('span')[0].innerHTML;	
	for(var i=0; i<areaList.length; i++)
	{		
		if(areaList[i].getLayerId == (parseInt(id)))
		{
			for(var j=0; j<areaList[i].getVertexCount(); j++)
			{				
				points += areaList[i].getVertex(j).lat() + ' ' + areaList[i].getVertex(j).lng() + ',';
			}
			points = points.substring(0,points.length-1);
			var oXML = new FCKXml();
			oXML.PostUrl(Utils.ROOT + '/map.php', 'todo=insert&name=' + name + '&points=' + points,function(xml){
				var errors = xml.SelectNodes('doc/error');
				if(errors.length)
				{
					alert($lang('polygon.' + errors[0].firstChild.nodeValue));
				}
				else
				{
					alert($lang('polygon.insertOk'));					
					areaList[i].disableEditing({onEvent: "mouseover"});	
					that.style.display = 'none';						
					//if(unsaved.indexOf(areaList[i].getLayerId) != -1)
					//{						
						//unsavedIndex = unsaved.indexOf(areaList[i].getLayerId);										
						unsaved.pop();						
						if(unsaved.length == 0){							
							$('saveBlinker').style.visibility = 'hidden';							
						}
					//}					
				}
			})
			break;
		}		
	}
}

function listAreas()
{
	var oXML = new FCKXml();
	oXML.LoadUrl(Utils.ROOT + '/map.php?todo=list' ,function(xml){
		var fields = xml.SelectNodes('doc/field');		
		for(var i=0; i<fields.length; i++)
		{
			var points_arr = fields[i].getElementsByTagName('point_text')[0].firstChild.nodeValue.split(',');
			var lat, point, latlng = new Array();
			for(var j=0; j<points_arr.length; j++)
			{
				point = points_arr[j].split(' ');
				lat = new GLatLng(point[0],point[1], true);
				latlng.push(lat);				
			}
			var poly = new GPolygon(latlng, PColor, 2, 0.7, PColor, 0.2);
			poly.getLayerId = fields[i].getElementsByTagName('id')[0].firstChild.nodeValue;
			map.addOverlay(poly);
			areaList.push(poly)
			createListItem(fields[i].getElementsByTagName('name')[0].firstChild.nodeValue, fields[i].getElementsByTagName('id')[0].firstChild.nodeValue, true)			
		}
		layerIDs = parseInt(xml.SelectSingleNode('doc/maxid').firstChild.nodeValue);
	})
}

function deleteArea()
{
	if(!confirm($lang('polygon.deleteWarning'))) return;
	var id = this.id.split('_')[1];
	var that = this;
	this.parentNode.parentNode.removeChild(this.parentNode);
	for(var i=0; i<areaList.length; i++)
	{				
		if(areaList[i].getLayerId == (parseInt(id)))
		{
			var oXML = new FCKXml();
			oXML.LoadUrl(Utils.ROOT + '/map.php?todo=delete&id=' + id ,function(xml){
				areaList[i].hide();
				setTimeout(function(){map.removeOverlay(areaList[i]),areaList.splice(i,1)},1);
				var errors = xml.SelectNodes('doc/error');
				if(errors.length)
				{
					alert($lang('polygon.' + errors[0].firstChild.nodeValue));
				}
				else 
				{
					alert($lang('polygon.deleteOk'));
					that.style.display = 'none';
				}				
			})				
			break;
		}
	}
}

function initPolygon()
{
	$('drawButton').onclick = function()
	{
		if(areaList.length >= polyMax)
		{
			alert($lang('polygon.tooMuch'));
			return;
		}
		drawMode = false;		
		if(this.className.match('selected'))
		{
			stopEditing();
		}
		else
		{						
			if(map.getZoom() >= 13)
			{
				this.className = 'selected';
				drawMode = true;				
				startShape();
			}
			else
			{
				var zoom = (map.getZoom()-13);
				map.setZoom(map.getZoom() + Math.abs(map.getZoom()-13));	
				this.className = 'selected';
				drawMode = true;				
				startShape();				
			}
		}				
	}	
}

function initStateBox()
{
	try
	{
		$('observingBox').onclick = function()
		{
			var that = this;
			var oXML = new FCKXml();
			var active = (this.checked)? 'A' : 'P';
			oXML.LoadUrl(Utils.ROOT + '/user.php?todo=observing&state=' + active ,function(xml){
				var state = xml.SelectSingleNode('doc/state').firstChild.nodeValue;
				var observer = xml.SelectSingleNode('doc/observer').firstChild.nodeValue;
				if(state == 'Y')
				{					
					alert($lang('user.setObservingOk'))
				}
				else
				{
					alert($lang('user.setObservingError'))
				}				
			})
		}
	}
	catch(e){}
}

function setSettings()
{
	try
	{
		$('settingsBox__').onclick = function()
		{					
			$('settingsbox').style.display = 'block';			
			messageLightbox.show([$('settingsbox'),300,200]);						
		}
	}
	catch(e){}

	try
	{
		$('saveSettings').onclick = function()
		{
			var that = this;
			$('settings_form_loader').style.visibility = 'visible';
			var post = '';
			post += 'todo=update&';

			post += '&el=';
			post += ($('settings_el').checked)? 'Y':'N';

			post += '&kl=';
			post += ($('settings_kl').checked)? 'Y':'N';

			post += '&eh=';
			post += ($('settings_eh').checked)? 'Y':'N';

			post += '&te=';
			post += ($('settings_te').checked)? 'Y':'N';
			
			post += '&priceFromM=';
			post += ($('priceFromM_settings').value == '')? '' : $('priceFromM_settings').value;

			post += '&priceToM=';
			post += ($('priceToM_settings').value == '')? '' : $('priceToM_settings').value;

			post += '&priceFromE=';
			post += ($('priceFromE_settings').value == '')? '' : $('priceFromE_settings').value;

			post += '&priceToE=';
			post += ($('priceToE_settings').value == '')? '' : $('priceToE_settings').value;

			post += '&sizeFrom=';
			post += ($('nmFrom_settings').value == '')? '' : $('nmFrom_settings').value;
		
			post += '&sizeTo=';
			post += ($('nmTo_settings').value == '')? '' : $('nmTo_settings').value;

			var oXML = new FCKXml();
			oXML.PostUrl(Utils.ROOT + '/settings.php?', post, function(xml){
				$('settings_form_loader').style.visibility = 'hidden';
				var errors = xml.SelectNodes('doc/error');
				if(errors.length)
				{
					alert($lang('settingsbox.error.' + errors[0].firstChild.nodeValue));
				}
				else
				{
					alert($lang('settingsbox.ok'));
					$('settingsbox').style.display = 'none';								
					messageLightbox.hide();
				}
			})
		}
	}
	catch(e){}

	try
	{
		$('cancelSettings').onclick = function()
		{
			$('settingsbox').style.display = 'none';
			messageLightbox.hide();
		}
	}
	catch(e){}

	try
	{
		var boxes = $('settingsbox').getElementsByTagName('input');
		for(var i=0; i<boxes.length; i++)
		{
			if(boxes[i].type == 'checkbox')
			{
				boxes[i].onclick = function()
				{
					if(this.id.match('kl') && this.checked)
					{
						$('settings_el').checked = false;
						$('settings_eh').checked = false;
						$('settings_te').checked = false;
						$('priceFromM_settings').value = '';
						$('priceToM_settings').value = '';
					}
					if(!this.id.match('kl') && this.checked)
					{
						$('settings_kl').checked = false;
						$('priceFromE_settings').value = '';
						$('priceToE_settings').value = '';
					}
				}
			}
		}
	}
	catch(e){}
}

function setSettingboxInputs()
{
	try
	{
		$('priceFromM_settings').onkeypress = setKeyUp;
		$('priceToM_settings').onkeypress = setKeyUp;
		$('priceFromE_settings').onkeypress = setKeyUp;
		$('priceToE_settings').onkeypress = setKeyUp;
		$('nmFrom_settings').onkeypress = setKeyUp;
		$('nmTo_settings').onkeypress = setKeyUp;
	}
	catch(e){}
}