/*----------------------------------------------------------
  UserLocations Class
  
  
  Basic function:
    * Saves Advanced Options into cookie
  

  Requires the utilities.js 

  @package NTP
  @author Arnd Beyer, arnd.beyer@wmdata.fi
  @copyright WM-data Novo 2006
  @version $Id: UserSettings.php,v 1.0 2005/07/26 12:44:42 arnd Exp $
  ---------------------------------------------------------*/

/*
*  parameter: objectVariableName String Name of the variable 
*									where the Object will be stored in
*  Used for the setTimeout Function
*/
function UserLocations(objectName){
    var cookiePostfix = "_stop";
	
	var cookiePrefix = "";
	var linktitle = "";
	var locationsCounter=0;
	
	var mapLink = "";
	var mapLinkTitle = "";
	var mapLinkText = "";

	
	var tableHeaderLeft ="";
	var tableHeaderMiddle ="";
	var tableHeaderRight ="";
	var noLocations ="";
	
	var deleteLinkText ="";
	var deleteLinkTitle ="";
	
	var mgsLocationSaved = "";
	
	var locations = new Array();
	
	this.printList = printList;
	this.setMapLink = setMapLink;
	this.setTableTexts =setTableTexts;
	this.setCookieName =setCookieName;
	this.setDeleteLink =setDeleteLink;
	this.addLocation = addLocation;
	this.deleteLocation =deleteLocation;
	
	function setCookieName(cookieNameSet){
		cookiePrefix =cookieNameSet;
	}
		
	function setDeleteLink(deleteLinkTextSet,deleteLinkTitleSet){
		deleteLinkText =deleteLinkTextSet;
		deleteLinkTitle =deleteLinkTitleSet;
	}

	function setMapLink(mapLinkSet,mapLinkTitleSet,mapLinkTextSet){
		mapLink = mapLinkSet;
		mapLinkTitle = mapLinkTitleSet;
		mapLinkText = mapLinkTextSet;
	}
	
	function setTableTexts(tableHeaderLeftSet,tableHeaderMiddleSet,tableHeaderRightSet,noLocationsSet,mgsLocationSavedSet){
		tableHeaderLeft = tableHeaderLeftSet;
		tableHeaderMiddle = tableHeaderMiddleSet;
		tableHeaderRight = tableHeaderRightSet;
		noLocations = noLocationsSet;
		mgsLocationSaved = mgsLocationSavedSet;
	}
	
	//write HTML for Location List
	function printList(){
		  readCookie();
		  var divObj = attach("cookie_locations");
		  var html = "";
		  html += '<table id="cookie_locations_table" cellspacing="0">';
		  html += '<tr id="cookie_locations_headers">';
		  html += '<th class="left">'+ tableHeaderLeft + '</th>';
		  html += '<th>'+ tableHeaderMiddle +'</th>';
		  html += '<th class="right">'+ tableHeaderRight +'</th>';
		  html += '</tr>';
		  if(locations.length ==0){
		      html += '<tr id="cookie_locations_noentries"><td colspan="3" class="list">'+ noLocations +'</td></tr>';
		  }else{
		  	  for(var n=0; n< locations.length;n++){
		 	     html += printListEntry(n,locations[n].name,locations[n].x,locations[n].y,true);
		 	  }
	 	  }
		  html += '</table>';
		  divObj.innerHTML = html;
	}
	
	function printListEntry(nr, name, x,y, light){
          var className = "dark";
          if (light) {
          	  className = "light";
          }

		  var locLink = '<a href="#"  title="'+linktitle+'" onclick="javascript:useSavedLocation(\''+name+'\')">'+name+'</a>';

		  var route = 't0a'+x+'a'+y
		  var mapURL = mapLink +'&amp;ss='+encodeURI(name)+'&amp;px='+x+'&amp;py='+y +'&amp;route='+route;
		  var map= '<a href="'+ mapURL + '" target="blank_" title="'+mapLinkTitle+'">'+mapLinkText+'</a>';
		  var deleteSript = objectName +'.deleteLocation('+nr+')';
		  var deleteLink = '<a href="#" title="'+deleteLinkTitle+'" onclick="javascript:'+deleteSript+'">'+deleteLinkText+'</a>';
		  var html = '<tr class="'+ className +'">';
		  html += '<td class="list">'+ (nr+1) +'. ' +locLink +'</td>';
		  html += '<td class="list_center">'+map +' </td>';
		  html += '<td class="list_center">'+deleteLink+'</td>';
		  html += '</tr>';
		  return html;
		  
	}

	function readCookie(){
		var cookieName = cookiePrefix+cookiePostfix;
		var cookie = document.cookie;
		var begin = cookie.indexOf("; " + cookieName +"=");
		var end =0;
		if (begin ==-1){
			begin = cookie.indexOf(cookieName +"=");
			if(begin == -1){
				return;
			}
		}else {
			begin += 2;
		}
		begin++;
		var end = cookie.indexOf(";", begin);
		if(end== -1)
			end = cookie.length;
		var cookieString = unescape(cookie.substring(begin + cookieName.length,end));
		
		locations = new Array();
		if(cookieString != "") {
			var locs = cookieString.split("|");
			for(var n=0; n< locs.length; n++){
				var loc = locs[n].split(":");
				locations.push({"name":decodeURI(loc[0]),"x":loc[1],"y":loc[2]});
			}
		}
		
	}
	function deleteLocation(nr){
		locations.splice(nr,1);
		var settings = calcCookie();
		setCookie(settings,true);
		printList();
	}
	
	function addLocation(event, name, x,y){
		var found = false
		for(var n=0; n< locations.length && !found;n++)
	 	     found = locations[n].name == name;
		if (!found) {
			locations.push({"name":name,"x":x,"y":y});
			
			//todo check exists
			var settings = calcCookie();
			setCookie(settings,true);
			printList();
		}
		messages.display(event, "jsMessages",mgsLocationSaved, 2000);
	}
	
	function calcCookie(){
		var settings = "";
	  	for(var n=0; n< locations.length;n++)
	 	     settings += encodeURI(locations[n].name)+":"+locations[n].x+":"+locations[n].y+ "|";
		if(settings != "")
			settings = settings.substring(0,settings.length -1);
		return settings;
	}
	
	function setCookie( settings, persistant){
	    var futdate = new Date()		//Get the current time and date
      	var expdate = futdate.getTime()  //Get the milliseconds since Jan 1, 1970
     	expdate += 356*24*3600*1000  //expires in 1 Year(milliseconds)
      	futdate.setTime(expdate)
      	var cookie = cookiePrefix+cookiePostfix+"="+settings+"; path=/";
      	if(persistant)
       		cookie+= "; expires=" + futdate;
	  	document.cookie=cookie;
	
	}

}