///////////////////////////////////
//////////////////////////////////
// All rights reserved to Amadot(ZBN) Ltd. (c) 
// Google Maps handling version 2.0
// markers handling
// last update -  12/12/11
/////////////////////////////////
MAPS.Markers = {};

MAPS.Markers.tempPoint = null;  //holds the temporary point the user clicked
MAPS.Markers.editableMarkerNum = null; //holds a temp markerObj - usually when editing marker's attributes
////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////  MARKER OBJECT //////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
/************
add-ons to Google's marker
************/
google.maps.Marker.prototype.markerObjRef = null;
/************

Constructor
************/
MAPS.Markers.arr = new Array(); //the array which holds all the markers
MAPS.Markers.markerObj = function(point,id, type,comment,name,markUrl,address1,address2,telephone,openings,rating,ratingSource, numLat, numLng, days, importance)
{
	////// VARIABLES /////
	//MAPS.Log.add("starting create marker " + MAPS.Markers.arr.length);
	this.dbId = id;
	this.type = type || 'Nightlife'; //the type of the marker (to control the icon)
	this.name = name || '';
	this.comment = comment || '';
	this.markUrl = markUrl || '';
	this.address1 = address1 || '';
	this.address2 = address2 || '';
	this.telephone = telephone || '';
	this.openings = openings || '';
	this.rating = rating || 0;
	this.ratingSource = ratingSource || '';
	this.num = MAPS.Markers.arr.length;
	this.point = point || null;
	this.lat = point.lat();
	this.lng = point.lng();
	this.numLat = numLat || "null";
	this.numLng = numLng || "null";
	this.importance = parseInt(importance);
	
	///////////// opening days///////
	this.sun = days.sun || 0;
	this.mon = days.mon || 0;
	this.tue = days.tue || 0;
	this.wed = days.wed || 0;
	this.thr = days.thr || 0;
	this.fri = days.fri || 0;
	this.sat = days.sat || 0;
	this.isMarkerGray = false;
	
	
	//MAPS.Log.add("checking marker " + MAPS.Markers.arr.length + " params - finished");
	
	if (!point) return;
	
	//MAPS.Log.add("creating marker " + MAPS.Markers.arr.length + " google object");	
	///// Google marker Obj ///////////
	this.createMarker();
	//MAPS.Log.add("creating marker " + MAPS.Markers.arr.length + " google object - finished");	
		
	////////// Polygon /////////
	//MAPS.Log.add("creating marker " + MAPS.Markers.arr.length + " google polygon");	
	this.polygon = MAPS.Overlays.Polygon.tempObj;
	MAPS.Overlays.Polygon.tempObj = null; //resetting the global var which holded this marker's polygon
	//MAPS.Log.add("creating marker " + MAPS.Markers.arr.length + " google polygon - finished");	
	
	////////// tabs /////////
	this.tabsArr = new Array();
	
	////////// inserting this object into the array /////////
	MAPS.Markers.arr[this.num] = this; //putting the marker in the array
	
	////////// showing the marker on the map /////////
	//MAPS.Log.add("creating marker " + MAPS.Markers.arr.length + " on map");
	//if (this.importance >= 4) this.createOnMap();
	//MAPS.Log.add("creating marker " + MAPS.Markers.arr.length + " on map - finished");	
	
	//MAPS.Log.add("creating marker " + MAPS.Markers.arr.length + " HTML");	
	this.generateHTML();
	//MAPS.Log.add("creating marker " + MAPS.Markers.arr.length + " HTML - finished");	
	
	//generating the maximized html content
	//MAPS.Markers.generateBigHTML(this); // is built by AJAX
	
	////// initiating the event listeners ///////
	//MAPS.Log.add("creating marker " + MAPS.Markers.arr.length + " events");	
	this.events_init();
	//MAPS.Log.add("creating marker " + MAPS.Markers.arr.length + " events - finished");	
	
	//MAPS.Log.add("marker " + this.num + " was created");
	
}

/************
HTML component
************/
MAPS.Markers.markerObj.prototype.type;
MAPS.Markers.markerObj.prototype.name;
MAPS.Markers.markerObj.prototype.comment;
MAPS.Markers.markerObj.prototype.markUrl;
MAPS.Markers.markerObj.prototype.address1;
MAPS.Markers.markerObj.prototype.address2;
MAPS.Markers.markerObj.prototype.telephone;
MAPS.Markers.markerObj.prototype.openings;
MAPS.Markers.markerObj.prototype.rating;
MAPS.Markers.markerObj.prototype.ratingSource;
MAPS.Markers.markerObj.prototype.HTML = '';
MAPS.Markers.markerObj.prototype.bigHTML = '';
MAPS.Markers.markerObj.prototype.tabsArr;
MAPS.Markers.markerObj.prototype.importance;
MAPS.Markers.markerObj.prototype.markerShow = true;
MAPS.Markers.markerObj.prototype.importanceShow = false;
MAPS.Markers.markerObj.prototype.isCreatedOnMap = false;

/************
Ploygon
************/
MAPS.Markers.markerObj.prototype.polygon;
MAPS.Markers.markerObj.prototype.deletePoly = function()
{
	MAPS.Forms.InputForm.hide();
	MAPS.Overlays.add(this.polygon);
	var answer = confirm("Are you sure you want to delete this polygon?!");
	if (answer)
	{
		MAPS.Overlays.remove(this.polygon);
		this.polygon = null;
		MAPS.Overlays.Polygon.tempObj = null;
		this.events_reInit(); //re-initiating the event listeners of the marker (w/o the polygon)
	}
	MAPS.Forms.InputForm.show();
}

/************
Point
************/
//MAPS.Markers.markerObj.prototype.point;
MAPS.Markers.markerObj.prototype.lat;
MAPS.Markers.markerObj.prototype.lng;

/************
identifyers
************/
MAPS.Markers.markerObj.prototype.num;
MAPS.Markers.markerObj.prototype.dbId;

/************
Google Marker
************/
MAPS.Markers.markerObj.prototype.isMarkerGray;
MAPS.Markers.markerObj.prototype.marker = null;
MAPS.Markers.markerObj.prototype.createMarker = function()
{
	var options = {
		icon: MAPS.Icons.arr[this.type].mapIcon, //setting the icon for the marker
		title:this.name, //setting the "tooltip"
		draggable: true	
	}
	this.marker = new google.maps.Marker(this.point,options); //google marker object
	this.marker.disableDragging(); //disabling the dragging
	this.marker.markerObjRef = this;
}
MAPS.Markers.markerObj.prototype.createMarker_gray = function()
{
	var iconSplit = MAPS.Icons.arr[this.type].pngSrc.split(".");
	var iconSrc = iconSplit[0] + "-gray." + iconSplit[1];
	var _icon = new MAPS.Icons.helpIcon(iconSrc);
	var options = {
		icon: _icon.mapIcon, //setting the icon for the marker
		title:this.name, //setting the "tooltip"
		draggable: true	
	}
	this.marker = new google.maps.Marker(this.point,options); //google marker object
	this.marker.disableDragging(); //disabling the dragging
	this.marker.markerObjRef = this;
}

/*************
HTML
*************/
MAPS.Markers.markerObj.prototype.reSetVars = function(type,comment,name,markUrl,address1,address2,telephone,openings,rating,ratingSource, days, importance)
{
	
	this.type = type || this.type;
	//this.name = name || this.name;
	this.comment = comment != null ?  comment : this.comment;
	this.markUrl = markUrl != null ?  markUrl : this.markUrl;
	this.address1 = address1 != null ?  address1 : this.address1;
	this.address2 = address2 != null ?  address2 : this.address2;
	this.telephone = telephone != null ?  telephone : this.telephone;
	this.openings = openings != null ?  openings : this.openings;
	this.rating = rating != null ?  rating : this.rating;
	this.ratingSource = ratingSource != null ?  ratingSource : this.ratingSource;
	this.polygon = MAPS.Overlays.Polygon.tempObj;
	MAPS.Overlays.Polygon.tempObj = null; //resetting the global var which holded this marker's polygon
	
	this.generateHTML();
	
	///////////// opening days///////
	this.sun = days.sun || 0;
	this.mon = days.mon || 0;
	this.tue = days.tue || 0;
	this.wed = days.wed || 0;
	this.thr = days.thr || 0;
	this.fri = days.fri || 0;
	this.sat = days.sat || 0;
	
	/////////// importance
	this.importance = importance || 0;
	
	
	//repositioning the marker
	this.point = new google.maps.LatLng(this.lat,this.lng);
	//this.hide();
	this.deleteFromMap();
	this.createMarker();
	this.createOnMap();
	//this.show();
	
	this.events_reInit();
}

MAPS.Markers.markerObj.prototype.generateHTML = function()
{
	//first part
	var gif = MAPS.Icons.arr[this.type].gifSrc;
	var HTMLa = new Array();
	HTMLa.push("<div class='infoWindow'>");
	HTMLa.push("<table cellpadding='0' cellspacing='0' border='0' id='infoTable'>");
		//image
		HTMLa.push("<tr>");
			HTMLa.push("<td align='left' valign='bottom'><img src='"+gif+"'>&nbsp;&nbsp;&nbsp;"+this.type+"<\/td>");
			//HTMLa.push("<td align='right' valign='bottom'><font class='infoMore'>More Info<\/font><\/td>");
			HTMLa.push("<td align='right' valign='bottom'>&nbsp;<\/td>");
		HTMLa.push("<\/tr>");
		//space
		HTMLa.push("<tr><td height='5px' colspan='2'><\/td><\/tr>");
		//title
		if (this.markUrl != '')
			var nameFixed = "<a href='"+this.markUrl+"' target='_blank' class='infoWindowNameA'>"+this.name+"<\/a>";
		else
			var nameFixed = "<font class='infoWindowName'>"+this.name+"<\/font>";
			
		HTMLa.push("<tr>");
			HTMLa.push("<td align='left' colspan='2'>"+nameFixed+"<\/td>");
		HTMLa.push("<\/tr>");
		
		//address1
		HTMLa.push("<tr>");
			HTMLa.push("<td align='left' colspan='2'>"+this.address1+"<\/td>");
		HTMLa.push("<\/tr>");
		
		//address2
		HTMLa.push("<tr>");
			HTMLa.push("<td align='left' colspan='2'>"+this.address2+"<\/td>");
		HTMLa.push("<\/tr>");
		
		//telephone
		HTMLa.push("<tr>");
			HTMLa.push("<td align='left' colspan='2'>"+this.telephone+"<\/td>");
		HTMLa.push("<\/tr>");
		
		//openings
		HTMLa.push("<tr>");
			HTMLa.push("<td align='left' colspan='2'>"+this.openings+"<\/td>");
		HTMLa.push("<\/tr>");
		
		//comment
		if (this.comment != '')
		{
			HTMLa.push("<tr>");
				HTMLa.push("<td align='left' colspan='2'><font class='infoComment'>" + this.comment + "</font><\/td>");
			HTMLa.push("<\/tr>");
		}
		
		//Rating
		if (this.rating > 0)
		{
			//HR
			HTMLa.push("<tr><td height='5px' colspan='2'><\/td><\/tr>");
			HTMLa.push("<tr><td class='infoHR' colspan='2'><\/td><\/tr>");
			HTMLa.push("<tr><td height='5px' colspan='2'><\/td><\/tr>");
			
			//rating part
			var ratingStr = MAPS.Parse.buildRating(this.rating);
			HTMLa.push("<tr>");
				HTMLa.push("<td align='left' colspan='2'>" + ratingStr + "<\/td>");
			HTMLa.push("<\/tr>");
			HTMLa.push("<tr>");
				HTMLa.push("<td align='left' colspan='2'>Rating by: " + this.ratingSource + "<\/td>");
			HTMLa.push("<\/tr>");
		}
	HTMLa.push("<\/table>");
	HTMLa.push("</div>");
	
	
	if (this.HTML !== '')
	{
		this.HTML = HTMLa.join("");
		this.events_reInit();	
	}
	else
	{
		this.HTML = HTMLa.join("");
	}
	
}

/************
MAP integration
************/
MAPS.Markers.markerObj.prototype.createOnMap = function()
{
	if (this.isCreatedOnMap) return;
	MAPS.mapObj.addOverlay(this.marker);
	this.isCreatedOnMap = true;
}
MAPS.Markers.markerObj.prototype.deleteFromMap = function()
{
	if (!this.isCreatedOnMap) return;
	this.isCreatedOnMap = false;
	MAPS.mapObj.removeOverlay(this.marker);	
}
MAPS.Markers.markerObj.prototype.show = function()
{
	if (!this.isCreatedOnMap)
		this.createOnMap();
	else
		this.marker.show();
}

MAPS.Markers.markerObj.prototype.hide = function()
{
	if (!this.isCreatedOnMap) return;
	this.marker.hide();
}
MAPS.Markers.markerObj.prototype.showInfo = function()
{
	this.show();
	google.maps.Event.trigger(this.marker,"click");	
}

/************
Events
*************/
MAPS.Markers.markerObj.prototype.events_click = null;
MAPS.Markers.markerObj.prototype.events_drag = null;
MAPS.Markers.markerObj.prototype.events_polyOver = null;
MAPS.Markers.markerObj.prototype.events_polyOut = null;
MAPS.Markers.markerObj.prototype.events_self = null;
MAPS.Markers.markerObj.prototype.events_setSelf = function()
{
	MAPS.Markers.markerObj.prototype.events_self = this;
}
MAPS.Markers.markerObj.prototype.events_init = function()
{
	MAPS.Markers.markerObj.prototype.events_setSelf();
	//adding Google's event listener when clicking a marker
	this.events_click = google.maps.Event.addListener(this.marker,"click",function(){
		this.markerObjRef.events_onClick(); 
	});
	
	//adding Google's event listener when it has been stopped dragging
	this.events_drag = google.maps.Event.addListener(this.marker,"dragend",function()
	{
		var newPoint = this.getLatLng();
		var ndx = MAPS.Markers.arr[this.markerObjRef.num].dbId;
		try
		{
			MAPS.Parse.updateLocation(ndx,newPoint);
			this.markerObjRef.lat = newPoint.lat();
			this.markerObjRef.lng = newPoint.lng();
		}
		catch(e)
		{
			alert("error update location:  " + e);	
		}	
	});
	
	//adding Google's event listener when mouse is over and out of the marker (to show the POLYGON)
	if ((this.polygon != null) && (this.polygon))
	{
		this.events_polyOver = google.maps.Event.addListener(this.marker,"mouseover",function(){
				try
				{
					var _self = this;
					MAPS.timeOutObj = setTimeout(function()
					{
						MAPS.Overlays.add(_self.markerObjRef.polygon);
					},300);
				}
				catch(e)
				{return;}
			});
		this.events_polyOut = google.maps.Event.addListener(this.marker,"mouseout",function(){
				try
				{
					MAPS.Overlays.remove(this.markerObjRef.polygon);
					clearTimeout(MAPS.timeOutObj);
				}
				catch(e)
				{return;}
			});
	}
}

MAPS.Markers.markerObj.prototype.events_reInit = function()
{
	google.maps.Event.clearInstanceListeners(this.marker);
	this.events_init();			
}
	
MAPS.Markers.markerObj.prototype.events_onClick = function()
{
	if (MAPS.UserEvents.isCtrl) //editing the marker if the user press on ctrl
		{
			MAPS.Forms.InputForm.reset();
			MAPS.Markers.editableMarkerNum = this.num;
			MAPS.Forms.InputForm.editMarker(this.num);
		}
		else //showing the marker
		{
			//getting the tabs from the DB (when the user clicks on the marker)
			if (this.tabsArr.length === 0)
				MAPS.Parse.getTabs(this.num,this.dbId);
				
			//
			var iOptions = {};
			if (this.bigHTML !== "" || username != "")
			{
				iOptions = {
					maxContent:this.bigHTML,
					maxTitle: "<b>"+this.name+"</b>"
				}
			}
			this.marker.openInfoWindowHtml(this.HTML,iOptions);	
			
			//setTimeout(function(){document.getElementById('infoTable').style.width='100%'},1000);
			
		}	
}	

////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////


//TABS
MAPS.Markers.timeOutTab = null;
MAPS.Markers.tab = function(markerObj,tabNdx, title,content)
{
	this.index = tabNdx;
	this.title = title || "no title";
	this.content = content || "no content";
	
	markerObj.tabsArr.push(this);
}
MAPS.Markers.generateBigHTML = function(markerObj)
{
	markerObj.bigHTML = "";
	
	// no tabs: no need to enlarge bubble
	if (markerObj.tabsArr.length == 0 && username == "") return;
	
	var bigHTML = new Array();
	bigHTML.push(markerObj.HTML);
	
	bigHTML.push("<br/><br/>");
	bigHTML.push("<div id='tabsContainer'>");
	if (markerObj.tabsArr.length != 0)
	{
		bigHTML.push("<div id='tabTable'>");
			bigHTML.push(MAPS.Markers.buildTabs(markerObj));
		bigHTML.push("</div>");
		bigHTML.push("<div id='tabContent'>");
			bigHTML.push("<div>" + markerObj.tabsArr[0].content + "</div>");
		bigHTML.push("</div>");
	}
	bigHTML.push("</div>");
	bigHTML.push("<div id='tabActions'>");
	bigHTML.push(MAPS.Markers.TabFooter(markerObj,0));
	bigHTML.push("</div>");
	
	markerObj.bigHTML = bigHTML.join("");
}

MAPS.Markers.changeTab = function(markerNum,tabNum)
{
	tabNum = tabNum || 0;
	var markerObj = MAPS.Markers.arr[markerNum];
	document.getElementById('tabTable').innerHTML = MAPS.Markers.buildTabs(markerObj,tabNum);
	document.getElementById('tabContent').innerHTML = "<div>" + markerObj.tabsArr[tabNum].content + "</div>"
	document.getElementById('tabActions').innerHTML = MAPS.Markers.TabFooter(markerObj,tabNum);
}

MAPS.Markers.TabFooter = function(markerObj,tabNum)
{
	// nothing to show if not editor
	if (username === "") return;
	
	var html = new Array();
	html.push("<br/>");
	html.push("<div>");
	
	html.push("<a href='javascript:MAPS.Markers.addTab("+markerObj.num+")'>Add a new tab</a>");
	if (markerObj.tabsArr.length !== 0)
	{
		html.push("&nbsp;&nbsp;<a href='javascript:MAPS.Markers.editTabContent("+markerObj.num+","+tabNum+")'>Edit tab content</a>");
		html.push("&nbsp;&nbsp;<a href='javascript:MAPS.Markers.deleteTab("+markerObj.num+","+tabNum+")'>Delete this tab</a>");
		html.push("&nbsp;&nbsp;<a href='javascript:MAPS.Markers.changeTabName("+markerObj.num+","+tabNum+")'>Change tab name</a>");
		html.push("&nbsp;&nbsp;<a href='javascript:MAPS.Markers.saveTabContent("+markerObj.num+","+tabNum+")'>Save all</a>");
	}
	html.push("</div>");
	return html.join("");
}

MAPS.Markers.deleteTab = function(markerNum,tabNum)
{
	var markerObj = MAPS.Markers.arr[markerNum];
	var answer = confirm("are you sure you want to delete this tab?");
	if (!answer) return;
	
	var tabObject = markerObj.tabsArr[tabNum];
	
	// server update
	MAPS.Parse.deleteTab(tabObject);
	
	// local update
	markerObj.tabsArr.splice(tabNum,1);
	MAPS.Markers.generateBigHTML(markerObj); 
	
	//visual update
	if (markerObj.tabsArr.length !== 0)
	{
		tabNum = markerObj.tabsArr[tabNum] ? tabNum : tabNum-1;
		MAPS.Markers.changeTab(markerObj.num,tabNum)
	}
	else
	{
		document.getElementById('tabsContainer').innerHTML = "";
		document.getElementById('tabActions').innerHTML = MAPS.Markers.TabFooter(markerObj);
	}
}
	
MAPS.Markers.buildTabs = function(markerObj,tabNum)
{
	tabNum = tabNum || 0;
	var len = markerObj.tabsArr.length
	var strA = new Array();
	strA.push("<table cellspacing='0' border='0' cellpadding='0' width='100%'>");
		strA.push("<tr>");
			strA.push("<td class='unpickedTab' width='10px'></td>");
			for (var i=0;i<len;i++)
			{
				if (i == tabNum)
					strA.push("<td class='pickedTab tabPadding' align='center' width='1px'>"+markerObj.tabsArr[i].title+"</td>");		
				else
					strA.push("<td class='unpickedTab tabPadding' align='center' width='1px'><a href='javascript:MAPS.Markers.changeTab("+markerObj.num+","+i+")'>"+markerObj.tabsArr[i].title+"</a></td>");	
			}
			strA.push("<td class='unpickedTab'>&nbsp;</td>");
		strA.push("</tr>");
	strA.push("</table>");
	return strA.join("");
}

MAPS.Markers.addTab = function(markerNum)
{
	var markerObj = MAPS.Markers.arr[markerNum];

	var newName = prompt("Enter new tab name:",'');
	if (!newName && newName !== "") return;
	
	newName = MAPS.Parse.trim(newName);
	if (newName == '')
	{
		alert("How about giving a name to this tab?!");
		return;
	}
	
	// local update
	var tabObject = new MAPS.Markers.tab(markerObj,0, newName);
	var tabNum = markerObj.tabsArr.length-1; 
	
	// updating html
	if (markerObj.tabsArr.length === 1)
	{
		var html = new Array();
		html.push("<div id='tabTable'>");
		html.push(MAPS.Markers.buildTabs(markerObj));
		html.push("</div>");
		html.push("<div id='tabContent'>");
			html.push("<div>" + markerObj.tabsArr[tabNum].content + "</div>");
		html.push("</div>");
		
		document.getElementById('tabsContainer').innerHTML = html.join('');
	}
	else
	{
		document.getElementById('tabTable').innerHTML = MAPS.Markers.buildTabs(markerObj,tabNum);
	}
	
	// updating html
	MAPS.Markers.generateBigHTML(markerObj);
	document.getElementById('tabActions').innerHTML = MAPS.Markers.TabFooter(markerObj, markerObj.tabsArr.length-1);
	
	// enabling edit of tab content
	MAPS.Markers.editTabContent(markerNum,tabNum);
	
	// server update
	MAPS.Parse.insertTab(markerObj, tabObject);
}
	
MAPS.Markers.editTabContent = function(markerNum,tabNum)
{
	var markerObj = MAPS.Markers.arr[markerNum];
	var html = new Array();
	html.push("<iframe style='border:1px solid black' src='ep.htm' name='tf' id='tf' onload=\"javascript:MAPS.Markers.tabOnload("+markerNum+","+tabNum+")\"></iframe>");
	html.push("<br/><br/><br/>");
	document.getElementById('tabContent').innerHTML = html.join("");
}
MAPS.Markers.iFrame = null;
MAPS.Markers.tabOnload = function(markerNum,tabNum)
{
	var markerObj = MAPS.Markers.arr[markerNum];
	var tabContent = markerObj.tabsArr[tabNum].content;
	
	tabContent = tabContent.replace(/\</g, "&lt;");
	tabContent = tabContent.replace(/\>/g, "&gt;");
	
		
	if (General.browser != 'ie') //gechko, mozilla, safari
	{
		MAPS.Markers.iFrame = document.getElementById('tf');
		MAPS.Markers.iFrame.contentWindow.document.designMode = "on";
		MAPS.Markers.iFrame.contentWindow.document.body.innerHTML = tabContent;
	}
	else //ie
	{
		MAPS.Markers.iFrame = General.$frame('tf');	
		MAPS.Markers.iFrame = MAPS.Markers.iFrame.window.document;
		MAPS.Markers.iFrame.designMode = "On";	
		MAPS.Markers.iFrame.body.contentEditable='true' ;
		MAPS.Markers.iFrame.body.innerHTML = tabContent;
	
	}
}

MAPS.Markers.changeTabName = function(markerNum,tabNum)
{
	var markerObj = MAPS.Markers.arr[markerNum];
	var oldName = markerObj.tabsArr[tabNum].title;
	var newName = prompt("Enter new tab name:",oldName);
	if (newName != null)
	{
		newName = MAPS.Parse.trim(newName);
		oldName = MAPS.Parse.trim(oldName);
		if (newName != oldName)
		{
			var answer = confirm("are you sure you want to change the name to:"+newName+"?");
			if (answer)
			{
				var markerName = markerObj.name;
				markerObj.tabsArr[tabNum].title = newName; //local update
				MAPS.Markers.generateBigHTML(markerObj); //local update
				document.getElementById('tabTable').innerHTML = MAPS.Markers.buildTabs(markerObj,tabNum); //visual update
				
				// server update
				MAPS.Parse.updateTab(markerObj.tabsArr[tabNum]);
			}
		}
	}
}

MAPS.Markers.saveTabContent = function(markerNum,tabNum)
{
	var content = '';
	
	if (General.browser != 'ie') //gechko, mozilla, safari
		content = MAPS.Markers.iFrame.contentWindow.document.body.innerHTML;
	else //ie
		content = MAPS.Markers.iFrame.body.innerHTML;

	//content = content.replace(/\<br\>/g,"\\n");
	content = content.replace(/\&lt\;/g,"<");
	content = content.replace(/\&gt\;/g,">");
	
	var markerObj = MAPS.Markers.arr[markerNum];
	
	markerObj.tabsArr[tabNum].content = content; //local update
	MAPS.Markers.generateBigHTML(markerObj); //local update
	MAPS.Markers.changeTab(markerNum,tabNum); //visual update
	
	// db update
	MAPS.Parse.updateTab(markerObj.tabsArr[tabNum]);
	
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//delete a marker
MAPS.Markers.deleteMarker = function(posInArr)
{
	posInArr = MAPS.Markers.editableMarkerNum;
	var answer = confirm("Are you sure you want to delete this Marker?!");
	if (answer)
	{
		MAPS.Markers.arr[posInArr].hide(); //removes from the map
		MAPS.Parse.deleteFromDb(posInArr); //deletes from the DB
		MAPS.Markers.arr[posInArr] = null; //deletes from the array
	}
	MAPS.UserEvents.ctrlUp(); //canceling CTRL affect
	MAPS.Forms.InputForm.hide(); //hides the input form
	MAPS.Forms.InputForm.reset();	//resetting the input form
	MAPS.MarkersMNG.findVisibleMarkers(); //re-counting the markers (w/ marker manager)
}



//enable dragging markers
MAPS.Markers.enableDragging = function()
{
	var len = MAPS.Markers.arr.length;
	for (var i=0;i<len;i++)
	{
		if (MAPS.Markers.arr[i] != null)
		{
			MAPS.Markers.arr[i].marker.enableDragging();
		}	
	}
}

//disable dragging markers
MAPS.Markers.disableDragging = function()
{
	var len = MAPS.Markers.arr.length;
	for (var i=0;i<len;i++)
	{
		if (MAPS.Markers.arr[i] != null)
		{
			MAPS.Markers.arr[i].marker.disableDragging();
		}	
	}
}



//returns true if marker's name exists already
MAPS.Markers.isNameExists = function(name)
{
	var len = MAPS.Markers.arr.length;
	for (var i=0;i<len;i++)
	{
		if (MAPS.Markers.arr[i] != null)
		{
			if (MAPS.Markers.arr[i].name == name)	
				return true;
		}
	}
	return false;
}


//search for markers with "name" that fits. return array w/ markers num.
MAPS.Markers.searchMarker = function(what2search)
{
	var resultsArr = new Array();
	if ((!what2search) || (what2search == ''))
	{
		alert('No name entered!');
	}
	else
	{
		what2search = what2search.toLowerCase();
		var len = MAPS.Markers.arr.length;
		for (var i=0;i<len;i++)
		{
			var markObj = MAPS.Markers.arr[i];
			if (markObj != null)
			{
				if (markObj.name.toLowerCase().indexOf(what2search) != -1)		
				{
					resultsArr.push(markObj);
				}
			}
		}
	}
	return resultsArr;
}

MAPS.Markers.setMarkersOnMapByImportance = function(level,show)
{
	var len = MAPS.Markers.arr.length;
	for (var i=0;i<len;i++)
	{
		var markerObj = MAPS.Markers.arr[i];
		if (markerObj != null)
		{
			if (markerObj.importance == level)
			{
				if (show)
				{
					markerObj.importanceShow = true;
					// showing marker only if should be shown by type
					if (markerObj.markerShow) markerObj.show();
				}
				else
				{
					markerObj.importanceShow = false;
					markerObj.hide();
				}
			}
		}
	}
	MAPS.MarkersMNG.findVisibleMarkers();
}

MAPS.Markers.setMarkersOnMap = function(type,show)
{
	var len = MAPS.Markers.arr.length;
	for (var i=0;i<len;i++)
	{
		var markerObj = MAPS.Markers.arr[i];
		if (markerObj != null)
		{
			if (markerObj.type == type)
			{
				if (show)
				{
					markerObj.markerShow = true;
					// showing marker only if should be shown by importancy
					if (markerObj.importanceShow) markerObj.show();
				}
				else
				{
					markerObj.markerShow = false;
					markerObj.hide();
				}
			}
		}
	}
	MAPS.MarkersMNG.findVisibleMarkers();	
}

MAPS.Markers.showAllMarkers = function(show)
{
	//markers on map
	var len = MAPS.Markers.arr.length;
	for (var i=0;i<len;i++)
	{
		var markerObj = MAPS.Markers.arr[i];
		if (markerObj != null)
		{
			if (show && markerObj.importanceShow)
			{
				markerObj.markerShow = true;
				//shows the marker only if should be shown by importancy and is hidden
				if (markerObj.importanceShow && markerObj.marker.isHidden()) markerObj.show();
			}
			else
			{
				markerObj.markerShow = false;
				markerObj.hide();
			}
		}
	}	
	
	//markers type checkboxes on menubar
	var checkboxes = document.forms['showMarkersForm'].markerType;
	var ch_len = checkboxes.length;
	for (var i=0; i<ch_len;i++)
	{
		checkboxes[i].checked = show;
	}
	MAPS.MarkersMNG.findVisibleMarkers();
}

MAPS.Markers.numberOfMarkers = function()
{
	var counter = 0;
	var len = MAPS.Markers.arr.length;
	for (var i=0;i<len;++i)
	{
		var markerObj = MAPS.Markers.arr[i];
		if (markerObj != null) ++counter;
	}
	return counter;		
}



//////////////////////////////////////////
///////// SORT ARRRAY ///////////////////
/////////////////////////////////////////

MAPS.Markers.sortbyNameASC = function(a,b){
		var x = a.name.toLowerCase();
		var y = b.name.toLowerCase();
		if (x > y)
			return 1
		else if (x < y )
			return -1
		else
			return 0
	}
MAPS.Markers.sortbyNameDESC = function(a,b){
		var x = a.name.toLowerCase();
		var y = b.name.toLowerCase();
		if (x < y)
			return 1
		else if (x > y )
			return -1
		else
			return 0
	}
MAPS.Markers.sortbyTypeDESC = function(a,b){
		var x = a.type.toLowerCase();
		var y = b.type.toLowerCase();
		if (x < y)
			return 1
		else if (x > y )
			return -1
		else
			return 0
	}
MAPS.Markers.sortbyTypeASC = function(a,b){
	var x = a.type.toLowerCase();
		var y = b.type.toLowerCase();
		if (x > y)
			return 1
		else if (x < y )
			return -1
		else
			return 0
	}
MAPS.Markers.sortArr = function(method)
{
	switch (method.toLowerCase())
	{
		case 'nameasc':
			MAPS.Markers.arr.sort(MAPS.Markers.sortbyNameASC);	
			break;
		case 'namedesc':
			MAPS.Markers.arr.sort(MAPS.Markers.sortbyNameDESC);	
			break;
		case 'typeasc':
			MAPS.Markers.arr.sort(MAPS.Markers.sortbyTypeASC);	
			break;
		case 'typedesc':
			MAPS.Markers.arr.sort(MAPS.Markers.sortbyTypeDESC);	
			break;
	}
}

