function Map(landsObject) {
	this.init(landsObject);
}

Map.prototype = {
	spaceLink : null,
	skyLink : null,
	landLink : null,
	grassLink : null,
	seaLink : null,
	
	lands : null,
	whatLandMouse : '',
	whatLandMouseIndex : null,
	
	upArrow : null,
	downArrow : null,
	scroller : null,
	scrollYOffset : 300,
	
	init : function(landsObject) {
		//console.log('Map Initialized');
		this.lands = landsObject;
		this.scroller = new ScrollScreen();
		this.getMapLands();
		this.setMouseEvents();
		this.setArrows();
		this.setInTextLinks();
		this.setInTextStrongs();
	},
	
	setInitLand : function() {
		this.scroller.scrollIt(0,this.lands.landStops[2] + this.scrollYOffset, 15);
	},
	
	getMapLands : function() {
		this.spaceLink =  $('#nSpace').find('a').eq(0);
		this.skyLink = $('#nSky').find('a').eq(0);
		this.landLink = $('#nLand').find('a').eq(0);
		this.grassLink = $('#nGrass').find('a').eq(0);
		this.seaLink = $('#nSea').find('a').eq(0);
		
		this.upArrow = $('#nBack').find('a').eq(0);;
		this.downArrow = $('#nNext').find('a').eq(0);
	},
	
	clearMapLands : function() {
		this.spaceLink.css('background','transparent url(imgs/navigator/map/spaceNone.png) no-repeat');
		this.skyLink.css('background','transparent url(imgs/navigator/map/skyNone.png) no-repeat');
		this.landLink.css('background','transparent url(imgs/navigator/map/landNone.png) no-repeat');
		this.grassLink.css('background','transparent url(imgs/navigator/map/grassNone.png) no-repeat');
		this.seaLink.css('background','transparent url(imgs/navigator/map/seaNone.png) no-repeat');
	},
	
	setMouseEvents : function() {
		var thisMap = this;
		var speed = 15;
		
		for(var i = 0; i < this.lands.landNames.length; i++) {
			var thisMapLink = eval('this.' + this.lands.landNames[i] + 'Link');
			thisMapLink.data('i', i);
			thisMapLink.data('nom', thisMap.lands.landNames[i]);
			thisMapLink.hover(function() {	
				thisMap.whatLandMouse = $(this).data('nom');
				thisMap.focusOnLand();
			}, function() {
				thisMap.whatLandMouse = '';
				thisMap.whatLandMouseIndex = null;
				thisMap.focusOnLand();
			})
			.click(function(e) {
				e.preventDefault();
				var altScrollYOffset = $(this).data('i') > 0 ? thisMap.scrollYOffset : 0;
				thisMap.scroller.scrollIt(0,thisMap.lands.landStops[$(this).data('i')] + altScrollYOffset, speed);
			});
		}
	},
	
	setMapLand : function() {
		this.clearMapLands();
		this.focusOnLand();
	},
	
	focusOnLand : function() {
		this.clearMapLands();
		var noms = this.getMapImageName(this.whatLandMouse,this.lands.whatLand);
		/*console.log('\nLAND');
		console.log('curr image: ' + noms[0].img);
		console.log('next image: ' + noms[1].img);
		console.log('prev image: ' + noms[2].img);
		console.log('hover image: ' + noms[3].img);
		console.log('hover next image: ' + noms[4].img);
		console.log('hover prev image: ' + noms[5].img);*/
		noms[0].element.css('background','transparent url(imgs/navigator/map/' + noms[0].img + '.png) no-repeat');
		if(noms[1].element) { noms[1].element.css('background','transparent url(imgs/navigator/map/' + noms[1].img + '.png) no-repeat')};
		if(noms[2].element) { noms[2].element.css('background','transparent url(imgs/navigator/map/' + noms[2].img + '.png) no-repeat')};
		if(noms[3].element) { noms[3].element.css('background','transparent url(imgs/navigator/map/' + noms[3].img + '.png) no-repeat')};
		if(noms[4].element) { noms[4].element.css('background','transparent url(imgs/navigator/map/' + noms[4].img + '.png) no-repeat')};
		if(noms[5].element) { noms[5].element.css('background','transparent url(imgs/navigator/map/' + noms[5].img + '.png) no-repeat')};
	},
	
	getMapImageName : function(hoverLand,currentLand) {
		var landNom = currentLand;
		var landCurrent = currentLand.charAt(0).toUpperCase() + currentLand.slice(1);
		var landHover = hoverLand ? hoverLand.charAt(0).toUpperCase() + hoverLand.slice(1) : hoverLand;
		
		var nextLandNom = this.lands.landNames[this.lands.landIndex + 1];
		var prevLandNom = this.lands.landNames[this.lands.landIndex - 1];
		
		var currElem = eval('this.' + landNom + 'Link');
		var nextElem = nextLandNom ? eval('this.' + nextLandNom + 'Link') : null;
		var prevElem = prevLandNom ? eval('this.' + prevLandNom + 'Link') : null;
		
		var mouseElem = hoverLand ? eval('this.' + hoverLand + 'Link') : null;
		var mouseLand = hoverLand ? hoverLand + landHover + landCurrent : '';
		
		if(mouseElem) {
			var nextMouseNom = this.lands.landNames[mouseElem.data('i') + 1];
			var prevMouseNom = this.lands.landNames[mouseElem.data('i') - 1];
			var nextMouseElem = nextMouseNom ? eval('this.' + nextMouseNom + 'Link') : null;
			var prevMouseElem = prevMouseNom ? eval('this.' + prevMouseNom + 'Link') : null;
			
			var mouseNextIsCurrent = currElem === nextMouseElem ? landCurrent : '';
			var mousePrevIsCurrent = currElem === prevMouseElem ? landCurrent : '';
		}
		
		var mouseNextisCurrentPrev = nextMouseElem === prevElem ? landHover : '';
		var mousePrevisCurrentNext = prevMouseElem === nextElem ? landHover : '';
		
		if(mouseNextisCurrentPrev) nextMouseElem = null;
		if(mousePrevisCurrentNext) prevMouseElem = null;
		
		
		// current Land, current next neighbor,  current prev neighbor, mouse land, next mouse land, prev mouse land.
		var noms = [{ element : currElem, img : landNom + landCurrent},
					{ element : nextElem, img : nextLandNom + landCurrent + mousePrevisCurrentNext},
					{ element : prevElem, img : prevLandNom + landCurrent + mouseNextisCurrentPrev},
					{ element : mouseElem, img : hoverLand + landHover + mouseNextIsCurrent + mousePrevIsCurrent},
					{ element : nextMouseElem, img : nextMouseNom + mouseNextIsCurrent + landHover },
					{ element : prevMouseElem, img : prevMouseNom + mousePrevIsCurrent + landHover }];
		
		return noms;
	},
	
	setArrows : function() {
		var thisMap = this;
		var thisWindow = $(window);
		var arrScroll = 450;
		var speed = 15;
	
		this.upArrow.click (function(e) {
				e.preventDefault();
				//console.log(thisWindow.scrollTop());
				thisMap.scroller.scrollIt(0,thisWindow.scrollTop() - arrScroll, speed);
			});
		
		this.downArrow.click (function(e) {
				e.preventDefault();
				thisMap.scroller.scrollIt(0,thisWindow.scrollTop() + arrScroll, speed);
			});
	},
	
	setInTextLinks : function() {
		var thisMap = this;
		var inTextLinks = $('a.inTextLink');
		var speed = 15;
		
		inTextLinks.each(function() {
			var thisLink = $(this);
			var whereTo = $(thisLink.attr('href'));
			thisLink.click(function(e) {
				e.preventDefault();
				var altScrollYOffset = (whereTo.offset().top > 0) && (whereTo.hasClass('strata')) ? thisMap.scrollYOffset : 0;
				thisMap.scroller.scrollIt(0,whereTo.offset().top + altScrollYOffset, speed);
			})
		})
	},
	
	setInTextStrongs : function() {
		var thisMap = this;
		var inTextStrongs = $('strong');
		var fosforo = new Fosforo();
		
		inTextStrongs.each(function() {
			var thisLink = $(this);
			var what = thisLink.attr('class');
			switch(what) {
				case "loveDF":
				thisLink.hover(function(e) {
					fosforo.sayDF();
					fosforo.takeGlassesOff();
				})
				break;
					
				case "loveNY":
				thisLink.hover(function(e) {
					fosforo.sayNY();
					fosforo.putGlassesOn();
				})
				break;
			}
		})
	},
}
