var isIE = $.browser.msie;


// #########################################################################################################################################################
// ################################# AJAX CONTROLLER #######################################################################################################
// #########################################################################################################################################################
var ajaxController = {
	getVenues : function(callBack, slotID){
		var getAll = true;
		(slotID) ? getAll = false : slotID = 0;
		(callBack) ? callBack = callBack : callBack = 'ajaxController.storeVenues'
		
		$.ajax({
			dataType: 'jsonp',
			type:'GET',
			data: {'appid':'65e073b6-fdf5-415c-ac0a-4545f87431eb','all':getAll,'eventId':slotID,'cbm':callBack},
			url: 'http://service.wunderman-review.com/jw_events/getNestedLocations.ashx'
		});
	},
	ajaxCall : function(url, opts){
		$.ajax({
			dataType: 'json',
			contentType: "application/json; charset=utf-8",
			type: opts.type,
			data: opts.data,
			url: url,
			success : opts.success,
			error : errorController.error
		});
	},
	getRecentComments : function(){
		var input = JSON.stringify({request: {Request: {Count: 10}}}); 
		this.ajaxCall(constant.serverString+'GetRecentComments.ashx',{type:'POST',success:function(data){console.log(data)},data:input})
	},
	getRecentPhotos : function(){
		var input = JSON.stringify({request: {Request: {Count: 10}}}); 
		this.ajaxCall(constant.serverString+'JWPhotos.svc/JSON/GetRecentPhotos',{type:'POST',success:contentController.buildRecentPhotos,data:input})
	},
	recentPhotosClick : function(zid, eid){
		if(globalVars.activeEvent.photoArray)
			delete globalVars.activeEvent.photoArray;
		var input = JSON.stringify({request: {Request: {ZoneId: zid, EventId: eid.toString(),"Pagination":{"Offset":"0","Count":"50"}}}});
		this.ajaxCall(constant.serverString+'JWPhotos.svc/JSON/GetZonePhotos',{type:'POST',success:function(msg){contentController.showSinglePhoto(msg,eid)},data:input});
	},
	getPhotos : function(zid, eid){
		if(globalVars.activeEvent.photoArray)
			delete globalVars.activeEvent.photoArray;
		var input = JSON.stringify({request: {Request: {ZoneId: zid, EventId: eid.toString(),"Pagination":{"Offset":"0","Count":"50"}}}});
		this.ajaxCall(constant.serverString+'JWPhotos.svc/JSON/GetZonePhotos',{type:'POST',success:function(msg){contentController.buildPhotos(msg,eid)},data:input});
	},
	storeVenues : function(msg){
		if(msg.status == 'OK'){
			contentController.venues = msg.venues;
			contentController.setPoints();
		}
		else{
			errorController.error('error');
			return false;
		}
			
		if(globalVars.deepLink.guid){
			contentController.displayMarker(globalVars.deepLink.guid,globalVars.deepLink.photoId,globalVars.deepLink.eventId)	
		}
	},
	register : function(){
		var name = $('input[name="name"]')[0].value;
		var email = $('input[name="email"]')[0].value;
		var DOB = $('#phoneBox input')[0].value + '/' + $('#phoneBox input')[1].value + '/' +  $('#phoneBox input')[2].value;
		var checkAge = errorController.calculateAge(DOB.split('/')[0],DOB.split('/')[1],DOB.split('/')[2])
		if(!checkAge)
			errorController.indicateError([$('input[name="DOB"]')]);
		
		DOB = DOB.split('/')[2] + '-' + DOB.split('/')[0] + '-' + DOB.split('/')[1]  
		var checkEmail = errorController.echeck(email);
		
		if(name == '')
			errorController.indicateError([$('input[name="name"]')]);
		if(!checkEmail)
			errorController.indicateError([$('input[name="email"]')]);
			
		if(!checkEmail || !checkAge || name==''){
			var errorBox = $('#popUp div.register .errorDisplay');
			errorBox.css('display','block');
			errorBox.html(content[constant.language].register.registerError);
			return false;
		}			
		var input = JSON.stringify({request:{"Name":name,"Email":email,"Country":"USA","DOBString":DOB}});
		this.ajaxCall(constant.serverString+'JWPhotos.svc/JSON/UserRegister',{type:'POST',success:function(msg){constant.user.UserId = msg.d.UserId; constant.user.sessionId = msg.d.SessionId; if(msg.d.SessionId)constant.user.callBack()},data:input});
	},
	login : function(){
		var email = $('input[name="loginEmail"]')[0].value;
		var checkEmail = errorController.echeck(email);
		var ageCheck = $('input[name="over21check"]')[0].checked;
		
		if(!checkEmail)
			errorController.indicateError([$('input[name="loginEmail"]')]);
		if(!ageCheck)
			errorController.indicateError([$('input[name="over21check"]')]);
		
		if(!checkEmail || !ageCheck){
			var errorBox = $('#popUp div.register .errorDisplay');
			errorBox.css('display','block');
			errorBox.html(content[constant.language].register.loginError);
			return false;
		}
		var input = JSON.stringify({request:{"Email":email}});
		this.ajaxCall(constant.serverString+'JWPhotos.svc/JSON/UserLogin',{type:'POST',success:function(msg){constant.user.UserId = msg.d.UserId; constant.user.sessionId = msg.d.SessionId; if(msg.d.SessionId)constant.user.callBack()},data:input});
	},
	submitComment : function(comment){
		if(!constant.user.sessionId){
			globalVars.activeEvent.userComment = $('#commentControl textarea')[0].value;
			popUpController.show({'background-image':'url(images/'+constant.language+'/popUp-registrate.png)','width':'571px','height':'367px','contentType':'register'});
			return false;
		}
		var input = JSON.stringify({request:{"SessionId":constant.user.sessionId,"Request":{"PhotoId":globalVars.activeEvent.photoArray[globalVars.activeEvent.activeEventId][globalVars.activeEvent.selectedPhoto].split('photoId=')[1],"Comment":comment}}});
		this.ajaxCall(constant.serverString+'JWPhotos.svc/JSON/AddPhotoComment',{type:'POST',success:function(msg){if(globalVars.activeEvent.userComment){delete globalVars.activeEvent.userComment}; $('#commentControl textarea')[0].value = ''; ajaxController.getComments();},data:input});
	},
	getComments : function(){
		var input = JSON.stringify({request:{"Request":{"PhotoId":globalVars.activeEvent.photoArray[globalVars.activeEvent.activeEventId][globalVars.activeEvent.selectedPhoto].split('photoId=')[1],"Pagination":{"Offset":"0","Count":"50"}}}});
		this.ajaxCall(constant.serverString+'JWPhotos.svc/JSON/GetPhotoComments',{type:'POST',success:contentController.fillComments,data:input});
	}
}

// #####################################################################################################################################################################
// ################################# CONTENT CONTROLLER ################################################################################################################
// #####################################################################################################################################################################

var contentController = {
	buildRecentPhotos : function(msg){
		var photoBox = $('#recentPhotoBox');
		var photoArray = [];
		globalVars.recentImgPreload = {};
		var imageCount = 0;
		for(photos in msg.d){
			photoBox.append('<div onclick="contentController.displayMarker(\''+msg.d[photos].ZoneId+'\',\''+msg.d[photos].Id+'\',\''+msg.d[photos].EventId+'\')" class="recentPhoto" style="background-image:url('+constant.serverString + 'Photo.ashx?photoId=' + msg.d[photos].Id+'&height=100&monochrome=true)"></div>');
			if(document.images){
				globalVars.recentImgPreload[imageCount] = new Image
				globalVars.recentImgPreload[imageCount].src = constant.serverString + 'Photo.ashx?photoId=' + msg.d[photos].Id+'&height=100'
				globalVars.recentImgPreload[imageCount+1] = new Image
				globalVars.recentImgPreload[imageCount+1].src = constant.serverString + 'Photo.ashx?photoId=' + msg.d[photos].Id+'&height=100&monochrome=true'
				imageCount = imageCount + 2;
			}
		}
		$('#recentPhotoBox div')
		.hover(function(){
			var backgroundImage = $(this).css('background-image')
			backgroundImage = backgroundImage.split('photoId=')[1].split('&')[0]
			$(this)
			.css({'background-image':'url('+constant.serverString+'Photo.ashx?photoId='+backgroundImage+'&height=100)','border':'solid 1px #fff','margin':'4px 7px 0 -1px'})
		},function(){
			var backgroundImage = $(this).css('background-image')
			backgroundImage = backgroundImage.split('photoId=')[1].split('&')[0]
			$(this).css({'background-image':'url('+constant.serverString+'Photo.ashx?photoId='+backgroundImage+'&height=100&monochrome=true)','border':'none','margin':'5px 8px 0 0'})			
		});
		
	},
	buildPhotos : function(msg, eventId, guid){
		var photoBox = $('#photoBox');
		var photoArray = [];
		var eventH2 = '';
		
		
		contentController.setContent('',guid,'');
		
		
		for(photos in msg.d){
			photoArray.push(constant.serverString + 'Photo.ashx?photoId=' + msg.d[photos].Id);		
		}

		if(!globalVars.activeEvent.photoArray && msg.d.length > 0)
			globalVars.activeEvent.photoArray = {};
			
		if(msg.d.length > 0){
			globalVars.activeEvent.photoArray[eventId]= photoArray;
			var pid = eventId.toString();
			for(e in globalVars.activeEvent.events){
				var thisEvent = globalVars.activeEvent.events[e];
				if(thisEvent.eventId == eventId){
					eventH2 = thisEvent.eventType+' ('+thisEvent.startDate+')';
					globalVars.activeEvent.eventH2[eventId] = eventH2;
					photoBox.append('<h2><a href="#" onclick="contentController.showEventPhotos(\''+eventId+'\',\''+eventH2+'\'); return false;">'+thisEvent.eventType+' ('+thisEvent.startDate+')</a></h2>');
				}
			}
			photoBox.append('<div id="photo'+pid+'" class="wrapper">')
			
			for(var i =0; i < 4; i++){
				if(photoArray.length > 4)
					$('#photo'+pid).append('<div onclick="contentController.showEventPhotos(\''+eventId+'\',\''+eventH2+'\')" class="photo" style="background-image:url('+photoArray[i]+'&height=150)"></div>');
				else if(photoArray[i])
					$('#photo'+pid).append('<div onclick="contentController.commentOnPhoto(\''+i+'\',\''+eventId+'\')" class="photo" style="background-image:url('+photoArray[i]+'&height=150)"></div>');
			}
			
		}
		
	},
	showEventPhotos : function(eventId, header){
		$('#photoBox').html('<div></div>');
		var photoBox = $('#photoBox div');
		var photoArray = globalVars.activeEvent.photoArray[eventId];
		$('#popUp .head h2').html(header);
		//var spanHTML = $('#popUp .head span').html()
		//$('#popUp .head span').html('<a href="#" onclick="contentController.rollbackPopUp(0); return false;">'+spanHTML+'</a>')
		
		for(i in photoArray)
			photoBox.append('<div onclick="contentController.commentOnPhoto(\''+i+'\',\''+eventId+'\')" class="photo" style="background-image:url('+photoArray[i]+'&height=150)"></div>');
	},
	commentOnPhoto : function(arrayLocation, eventId){
		globalVars.activeEvent.selectedPhoto = arrayLocation;
		globalVars.activeEvent.activeEventId = eventId;
		popUpController.show({'background-image':'url(images/'+constant.language+'/popUp-photoComment.png)','width':'571px','height':'582px','contentType':'photoComment'});
	},
	venues : {},
	sortEvents : function(points){
		var eventDatesArray = [];
		if(this.venues.hasOwnProperty(points))
			for(var i=0; i < this.venues[points].events.length; i++){
				eventDatesArray.push(this.venues[points].events[i].startDate);
			}
		eventDatesArray = sortSlots(eventDatesArray);
		return eventDatesArray;
	},
	setPoints : function(){
		for(var points in this.venues){
			var eventDatesArray = [];
			var iconImage;
			//Sort Event Dates and Set Icon to Upcoming or Past events
			eventDatesArray = this.sortEvents(points);
			var d = eventDatesArray[0];
			var today = new Date();
			d =  new Date(d.split('/')[2], d.split('/')[0]  - 1 , d.split('/')[1]);
			(d < today) ? iconImage = "images/"+constant.language+"/icon_jw-pastEvents.png" : iconImage = "images/"+constant.language+"/icon_jw-Events.png";
			mapController.addPoint(this.venues[points].latitude,this.venues[points].longitude,{image:iconImage,guid:this.venues[points].locationGuid});
			
			d = eventDatesArray[eventDatesArray.length - 1];
			d =  new Date(d.split('/')[2], d.split('/')[0]  - 1 , d.split('/')[1]);
			(d < today) ? iconImage = "images/"+constant.language+"/icon_jw-pastEvents.png" : iconImage = "images/"+constant.language+"/icon_jw-Events.png";
			if(d > today){
				 iconImage = "images/"+constant.language+"/icon_jw-Events.png";
				 mapController.addPoint(this.venues[points].latitude - .00004,this.venues[points].longitude - .00004,{image:iconImage,guid:this.venues[points].locationGuid});
			}
		}
	},
	setContent : function(contentType, guid, popUpContent){
		if(guid){
			for(events in this.venues){
				if(guid == this.venues[events].locationGuid){
					var e = this.venues[events];
					globalVars.activeEvent.address = e.address;
					globalVars.activeEvent.csz = e.csz;
					globalVars.activeEvent.title = e.title;
					globalVars.activeEvent.url = e.url;
					globalVars.activeEvent.phone = e.phone;
					globalVars.activeEvent.events = e.events;
				}
			}
		}
		switch(contentType){
			case 'icon_newEvent':
				globalVars.addedClass = 'icon_newEvent';
				popUpContent.addClass('icon_newEvent');
				popUpContent.append('<div class="head"></div><div class="body"><div class="eventPhoto"></div><div class="eventListings"><div></div></div></div>');
				this.loadContent('icon_newEvent', popUpContent);
			break;
			case 'icon_pastEvent':
				globalVars.addedClass = 'icon_pastEvent';
				popUpContent.addClass('icon_pastEvent');
				popUpContent.append('<div class="head"></div><div class="body"><div id="photoBox"></div></div>');
				popUpContent.append('<div class="submitPhotos" onclick="popUpController.show({\'background-image\':\'url(images/'+constant.language+'/popUp-subeTusFotos.png)\',\'width\':\'571px\',\'height\':\'367px\',\'contentType\':\'uploadPhoto\'});"></div>');
				this.loadContent('icon_pastEvent', popUpContent);
			break;
			case 'pastEvents':
				globalVars.addedClass = 'allEvents';
				popUpContent.addClass('allEvents');
				popUpContent.append('<div class="submitPhotos" onclick="popUpController.show({\'background-image\':\'url(images/'+constant.language+'/popUp-subeTusFotos.png)\',\'width\':\'571px\',\'height\':\'367px\',\'contentType\':\'uploadPhoto\'});"></div>');
				popUpContent.append('<div class="body"><p></p><div class="events"><div></div></div></div>');
				this.loadContent('allEvents', popUpContent, false);
			break;
			case 'newEvents':
				globalVars.addedClass = 'allEvents';
				popUpContent.addClass('allEvents');
				popUpContent.append('<div class="body"><p></p><div class="events"><div></div></div></div>');
				this.loadContent('allEvents', popUpContent, true);
			break;
			case 'uploadPhoto':
				globalVars.addedClass = 'uploadPhoto';
				popUpContent.addClass('uploadPhoto');
				this.loadContent('uploadPhoto', popUpContent, true);
			break;
			case 'photoUploaded':
				globalVars.addedClass = 'photoUploaded';
				popUpContent.addClass('photoUploaded');
				this.loadContent('photoUploaded', popUpContent, true);
			break;
			case 'register':
				globalVars.addedClass = 'register';
				popUpContent.addClass('register');
				popUpContent.append('<div class="body"><p>'+content[constant.language].register.p+'</p><div id="registerArea"><label>'+content[constant.language].register.labelName+'</label><input type="text" name="name" /><br /><span class="nameInfo">'+content[constant.language].register.nameInfo+'</span><br /><label>'+content[constant.language].register.labelEmail+'</label><input type="text" name="email" /><br /><label class="dob">'+content[constant.language].register.labelDOB+'</label><div class="wrapper" id="phoneBox"><input type="text" value="'+content[constant.language].register.DOB1+'" onfocus="this.value = \'\'" id="AreaCode" onkeydown="if(event.keyCode!=9 &amp;&amp; event.keyCode!=8  ){if(event.keyCode!=46)errorController.phoneinput(event,this)}"><span>/</span><input type="text" id="inputCellPhonePart2" onfocus="this.value = \'\'" value="'+content[constant.language].register.DOB2+'" onkeydown="if(event.keyCode!=9 &amp;&amp; event.keyCode!=8  ){if(event.keyCode!=46)errorController.phoneinput(event,this)}"><span>/</span><input type="text" onkeypress="if(event.keyCode == \'13\')ajaxController.register()" value="'+content[constant.language].register.DOB3+'" onfocus="this.value = \'\'" id="inputCellPhonePart3" onkeydown="if(event.keyCode!=9 &amp;&amp; event.keyCode!=8  ){if(event.keyCode!=46)errorController.phoneinput(event,this)}"></div></div><div onclick="ajaxController.register();" class="submitControl"></div><div onclick="ajaxController.login();" class="loginControl"></div><div id="loginArea"><label>'+content[constant.language].register.labelEmail+'</label><input type="text" name="loginEmail" /><br /><input type="checkBox" class="checkBox" name="over21check" /><span>'+content[constant.language].register.over21txt+'</span></div></div><div class="errorDisplay"></div>');
				this.loadContent('register', popUpContent, true);
			break;
			case 'photoComment':
				globalVars.addedClass = 'photoComment';
				popUpContent.addClass('photoComment');
				popUpContent.append('<div class="submitPhotos" onclick="popUpController.show({\'background-image\':\'url(images/'+constant.language+'/popUp-subeTusFotos.png)\',\'width\':\'571px\',\'height\':\'367px\',\'contentType\':\'uploadPhoto\'});"></div>');
				popUpContent.append('<div class="head"></div><div class="body"><input onfocus="this.select();" READONLY id="shareLink" /><div id="commentControl"><div id="submitControl"></div><textarea></textarea></div><div class="leftArrowControl"></div><div class="rightArrowControl"></div><div class="selectedPhoto" style="background-image:url('+globalVars.activeEvent.photoArray[globalVars.activeEvent.activeEventId][globalVars.activeEvent.selectedPhoto]+'&height=300'+')"></div><div class="commentListings"><div></div></div></div>');
				$('#popUp .leftArrowControl,#popUp .rightArrowControl').click(function(){contentController.navPhotoControl($(this))})
				$('#commentControl textarea').keydown(function(event){if(event.keyCode!=9 && event.keyCode!=8 && event.keyCode!=46 && event.keyCode!=37 && event.keyCode!=40 && event.keyCode!=38) if(this.value.length > 149)event.preventDefault();});
				$('submitControl').bind('click',function(){ajaxController.submitComment($('#commentControl textarea')[0].value)})
				$('#popUp .selectedPhoto').bind('click',function(){window.open(globalVars.activeEvent.photoArray[globalVars.activeEvent.activeEventId][globalVars.activeEvent.selectedPhoto])});
				this.loadContent('photoComment', popUpContent, true);
				$('#shareLink')[0].value = constant.serverString + '?uid=' + globalVars.activeGuid + '&id=' + globalVars.activeEvent.photoArray[globalVars.activeEvent.activeEventId][globalVars.activeEvent.selectedPhoto].split('photoId=')[1] + '&eventId='+globalVars.activeEvent.activeEventId;
				
				
				$('#track_iframe')[0].src = 'iframeTrack.html?photoClicked='+globalVars.activeEvent.photoArray[globalVars.activeEvent.activeEventId][globalVars.activeEvent.selectedPhoto];
			break;
		}
	},
	loadContent : function(contentType, popUpcontent, orderByUpcoming){
		switch(contentType){
			case 'allEvents':
				var p = popUpcontent.contents().contents('p');
				var eventsArea =  popUpcontent.contents().contents('.events').contents();
				
				if(orderByUpcoming)
					p.html(content[constant.language].newEvents.p);
				else
					p.html(content[constant.language].pastEvents.p);
				eventsArea.html(this.buildEvents(orderByUpcoming, 'viewEvent'));
				$('#popUp div.allEvents .body .events').hover(function(){$(this).css('overflow','auto');},function(){$(this).css('overflow','hidden');});
			break;
			case 'icon_pastEvent':
				var bodyArea = popUpcontent.contents('.body');
				var headArea = popUpcontent.contents('.head');
				headArea.html('<h2>'+globalVars.activeEvent.title+' - '+content[constant.language].pastEvents.title+'</h2><span>'+globalVars.activeEvent.title+', '+globalVars.activeEvent.address+' '+globalVars.activeEvent.csz+'</span>')
				for(captureID in globalVars.activeEvent.events){
					ajaxController.getPhotos(globalVars.activeGuid, globalVars.activeEvent.events[captureID].eventId);
				}
			break;
			case 'icon_newEvent':
				var slotArea = popUpcontent.contents('.body').contents('.eventListings').contents();
				var headArea = popUpcontent.contents('.head');
				headArea.html('<h2>'+globalVars.activeEvent.title+' - '+content[constant.language].newEvents.title+'</h2><span>'+globalVars.activeEvent.title+', '+globalVars.activeEvent.address+' '+globalVars.activeEvent.csz+'</span>')
				
				var eventBuilder = [];
				var eventHTML = '';
				for(events in globalVars.activeEvent.events){
					var e = globalVars.activeEvent.events[events];
					var d = e.startDate;
					var today = new Date();
					d =  new Date(d.split('/')[2], d.split('/')[0]  - 1 , d.split('/')[1]);
					if(d > today)
					eventBuilder.push('<div class="event"><h2>'+e.eventType+'</h2><span>'+e.startDate+'</span><span>'+e.slots[0].startTime.convertTime()+'</span><a href="http://www.johnniewalker.com/en-us/mainevents/eventVenue/?slotId='+e.slots[0].slotId+'&appId=65e073b6-fdf5-415c-ac0a-4545f87431eb" target="_blank"><img src="images/'+constant.language+'/btn_rsvp.png" /></a></div>');
				}
				for(items in eventBuilder)
					eventHTML += eventBuilder[items];
				slotArea.html(eventHTML);
				slotArea.parent().hover(function(){$(this).css('overflow','auto')},function(){$(this).css('overflow','hidden')});
			break;
			case 'uploadPhoto':
				var optionContent = this.buildEvents(false,'option');
				popUpcontent.html('<div class="body"><p>'+content[constant.language].uploadPhoto.p+'</p><div class="upload"><select onchange="$(\'#zoneId\')[0].value = this.value.split(\',\')[0];$(\'#evId\')[0].value = this.value.split(\',\')[1]"><option value="default">'+content[constant.language].uploadPhoto.selectEvent+'</option>'+optionContent+'</select><br /><br /><form action="'+constant.serverString+'UploadFile.ashx" target="upload_iframe" id="uploadForm" method="post" enctype="multipart/form-data"><input type="hidden" name="sessionId" value="'+constant.user.sessionId+'"><input type="hidden" id="zoneId" name="zoneId" value=""><input type="hidden" id="evId" name="eventId" value=""><input type="file" name="photo" id="file"><img onclick="jsUpload($(\'#file\')[0])" class="submitBtn" src="images/'+constant.language+'/btn_submit.png" /></form></div></div>');
			break;
			case 'photoUploaded':
				popUpcontent.html('<div class="uploadMorePhotos"></div>');
				$('#popUp .uploadMorePhotos').click(function(){popUpController.show({'background-image':'url(images/'+constant.language+'/popUp-subeTusFotos.png)','width':'571px','height':'367px','contentType':'uploadPhoto'});})
			break;
			case 'photoComment':
				var headArea = popUpcontent.contents('.head');
				var bodyArea = popUpcontent.contents('.body');
				headArea.html('<h2>'+globalVars.activeEvent.eventH2[globalVars.activeEvent.activeEventId]+'</h2><span>'+globalVars.activeEvent.title+', '+globalVars.activeEvent.address+' '+globalVars.activeEvent.csz+'</span>');
				bodyArea.append('<span class="photoOf">'+content[constant.language].photoComment.photoOf_p1+' '+(parseFloat(globalVars.activeEvent.selectedPhoto) + 1)+' '+content[constant.language].photoComment.photoOf_p2+' '+globalVars.activeEvent.photoArray[globalVars.activeEvent.activeEventId].length+'</span>');
				ajaxController.getComments();
				if(globalVars.activeEvent.userComment)
					$('#commentControl textarea')[0].value = globalVars.activeEvent.userComment
				$('#submitControl').click(function(){ajaxController.submitComment($('#commentControl textarea')[0].value)})
				$('#popUp .commentListings')
				.hover(function(){$(this).css('overflow','auto')},function(){$(this).css('overflow','hidden')})
			break;
			case 'register':
				var p = popUpcontent.contents().contents('p');
				var eventsArea =  popUpcontent.contents().contents('.events').contents();
				
				p.html(content[constant.language].register.p);
			break;
		}
	},
	buildEvents : function(newEvents, buildType){
		
		var eventHTML = '';
		var eventHTMLArray = [];
		var imgSRC ='';
		var linkController = '';
		(newEvents) ? imgSRC = "images/"+constant.language+"/btn_rsvp-big.png" : imgSRC = "images/"+constant.language+"/btn_verFotos.png";
		var a = new Date();
		for(var points in this.venues){
			for(var e in this.venues[points].events){
				var ev = this.venues[points].events[e]
				var d = this.venues[points].events[e].startDate;
				(newEvents) ? linkController = "window.open('http://www.johnniewalker.com/en-us/mainevents/eventVenue/?slotId="+ev.slots[0].slotId+"&appId=65e073b6-fdf5-415c-ac0a-4545f87431eb')" : linkController = "contentController.displayMarker('"+this.venues[points].locationGuid+'\',\'\',\''+ev.eventId+"')";
				d =  new Date(d.split('/')[2], d.split('/')[0]  - 1 , d.split('/')[1]);
				if(!newEvents){a = d; d = new Date()}
				
				if(a < d){
					switch(buildType){
						case 'viewEvent':
							eventHTMLArray.push( '<div class="eventBlock wrapper"><div class="info"><h2>'+this.venues[points].events[e].eventType+'</h2><span>'+this.venues[points].title+'</span><span>'+this.venues[points].address+'<br />'+this.venues[points].csz+'</span></div><div class="date">'+this.venues[points].events[e].startDate+'</div><img onclick="'+linkController+'" src='+imgSRC+' /></div>');
						break;
						case 'option' :
							eventHTMLArray.push( '<option value="'+this.venues[points].locationGuid+','+this.venues[points].events[e].eventId+'">'+this.venues[points].title + ' : ' +this.venues[points].events[e].startDate+'</option>');
						break;
						default:
							eventHTMLArray.push( '<div class="eventBlock wrapper"><div class="info"><h2>'+this.venues[points].events[e].eventType+'</h2><span>'+this.venues[points].title+'</span><span>'+this.venues[points].address+'<br />'+this.venues[points].csz+'</span></div><div class="date">'+this.venues[points].events[e].startDate+'</div><img onclick="'+linkController+'" src='+imgSRC+' /></div>');
						break;
					}
				}
			}
			
		}
		//If viewEvent Sort By Date
		if(buildType == 'viewEvent')
			eventHTMLArray.sort(findDate);
			
		for(var items in eventHTMLArray)
			eventHTML += eventHTMLArray[items];
		
		return eventHTML;
	},
	displayMarker : function(guid, photoId, eventId){
		if(photoId){
			globalVars.activeEvent.recentPhotoClickID = photoId;
			globalVars.activeEvent.recentPhotoClickguid = guid;
			globalVars.activeEvent.activeEventId = eventId;
			ajaxController.recentPhotosClick(guid, eventId);
		}
		else{
			globalVars.activeEvent.activeEventId = eventId;
			for(itm in mapController.markers){
				if(guid == mapController.markers[itm].guid){
					mapController.displayDetails(mapController.markers[itm]);
					return true;
				}
					
			}
		}
	},
	showSinglePhoto : function(msg, eventId){
		var guid = globalVars.activeEvent.recentPhotoClickguid;
		contentController.buildPhotos(msg, eventId, guid);
		
		for(findPhoto in globalVars.activeEvent.photoArray[eventId]){
			if(globalVars.activeEvent.recentPhotoClickID ==  globalVars.activeEvent.photoArray[eventId][findPhoto].split('photoId=')[1])
				globalVars.activeEvent.selectedPhoto = findPhoto;
		}
				
		for(var i in mapController.markers){
			if(mapController.markers[i].guid == guid)
				mapController.displayDetails(mapController.markers[i], true);
		}		
	},
	navPhotoControl : function(e){
		var photoArray = globalVars.activeEvent.photoArray[globalVars.activeEvent.activeEventId];
		var photoArea = $('#popUp .selectedPhoto');
		var photoOfArea = $('#popUp .photoOf');
		if(e.hasClass('leftArrowControl')){
			(globalVars.activeEvent.selectedPhoto == 0) ? globalVars.activeEvent.selectedPhoto = photoArray.length - 1 : globalVars.activeEvent.selectedPhoto--;
			photoOfArea.html(content[constant.language].photoComment.photoOf_p1+' '+(parseFloat(globalVars.activeEvent.selectedPhoto) + 1)+' '+content[constant.language].photoComment.photoOf_p2+' '+photoArray.length);
			 photoArea.css('background-image','url('+photoArray[globalVars.activeEvent.selectedPhoto]+'&height=300'+')');
		}
		else{
			(globalVars.activeEvent.selectedPhoto == photoArray.length - 1) ? globalVars.activeEvent.selectedPhoto = 0 : globalVars.activeEvent.selectedPhoto++;
			 photoOfArea.html(content[constant.language].photoComment.photoOf_p1+' '+(parseFloat(globalVars.activeEvent.selectedPhoto) + 1)+' '+content[constant.language].photoComment.photoOf_p2+' '+photoArray.length);
			photoArea
			.unbind('click')
			.bind('click',function(){window.open(photoArray[globalVars.activeEvent.selectedPhoto])})
			.css('background-image','url('+photoArray[globalVars.activeEvent.selectedPhoto]+'&height=300'+')');
		}
		ajaxController.getComments();
		var eventId = globalVars.activeEvent.activeEventId;
		$('#shareLink')[0].value = constant.serverString + '?uid=' + globalVars.activeGuid + '&id=' + photoArray[globalVars.activeEvent.selectedPhoto].split('photoId=')[1] + '&eventId='+ eventId;
	},
	fillComments : function(msg){
		var commentArray = [];
		for(response in msg.d){
			commentArray.push('<span>'+msg.d[response].UserName+'</span><p>'+msg.d[response].Comment+'</p>');
		}
		$('#popUp .commentListings div').html('');
		for(e in commentArray){
			$('#popUp .commentListings div').append(commentArray[e]);
		}
	}
}

// #####################################################################################################################################################################
// ################################# PopUp CONTROLLER ##################################################################################################################
// #####################################################################################################################################################################

var popUpController;
$(document).ready(function(){	
	popUpController = function(){
		var popUp = $('#popUp');
		var popUpContent =  $('#popUp .content');
		var previousContent = '';
		return {
			show : function(opts){
				//START TRACKING
				if(opts.callBack){
					for(items in opts)
						if(typeof opts[items] == 'string')
							if(opts[items].search('images/') > 0){
								var imgPos = opts[items].search('images/')
								var languagePos = opts[items].indexOf('/',imgPos)
								//console.log(opts[items].slice(languagePos,50))
								
							}
				}
				if(opts.guid)
					$('#track_iframe')[0].src = 'iframeTrack.html?loc='+opts.contentType +'&eventGUID='+opts.guid;
				else
					$('#track_iframe')[0].src = 'iframeTrack.html?loc='+opts.contentType 
				//END TRACKING
				
				if(opts.contentType != 'register'){
					opts.callBack = true;
					constant.user.callBack = function(){popUpController.show(opts)};
				}
				if((opts.contentType == 'uploadPhoto') && !constant.user.sessionId){
					this.show({'background-image':'url(images/'+constant.language+'/popUp-registrate.png)','width':'571px','height':'367px','contentType':'register'});
					return false;
				}
				this.hide(opts);
				
				$('#popUp .close').css('background-image','url(images/'+constant.language+'/btn_closePopUp.png)')
				popUp.css({'background-image':opts['background-image'],'width':opts['width'],'height':opts['height']});
				if(!isIE)
					popUp.fadeIn();
				else
					popUp.show();
				
				contentController.setContent(opts.contentType, opts.guid, popUpContent)
			},
			hide : function(opts){					
				popUp.hide();	
				popUpContent.html('');
				//if class has been added remove
				if(globalVars.addedClass){
					popUpContent.removeClass(globalVars.addedClass)	
					delete globalVars.addedClass;
				}
				if(!opts.callBack && globalVars.mapCenter && (previousContent == 'icon_pastEvent' || previousContent == 'icon_newEvent' || previousContent == 'photoComment') && opts.contentType != 'photoComment' && opts.contentType != 'register'){
					var center = mapController.map.getCenter()
					var mapCenter = mapController.map.fromLatLngToDivPixel(new GLatLng(center.y, center.x));
					var move = {};
					move.y = mapCenter.y - globalVars.mapCenter.pixel.y;
					move.x = mapCenter.x - globalVars.mapCenter.pixel.x;
					mapController.map.panBy(new GSize(move.x,move.y));
				}
				previousContent = opts.contentType;
			}
		}
	}();
});

// #####################################################################################################################################################################
// ################################# Map CONTROLLER ####################################################################################################################
// #####################################################################################################################################################################


var mapController = {
	map : null,
	markers : [],
	activateMap : function(){
		this.map = new GMap2(document.getElementById('map'));
		var topLeft = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(65,50)); 
		mapController.map.addControl(new GLargeMapControl3D(),topLeft);
		this.map.enableScrollWheelZoom()
	},
	addPoint : function(lat, long, opts){
		//"images/icon_jw-Events.png"
		if(!this.map)
			mapController.activateMap();
		var myIcon = new GIcon(G_DEFAULT_ICON);
        myIcon.image = opts.image;
        myIcon.iconSize = new GSize(26,38);
        myIcon.shadowSize = new GSize(42, 31);
        myIcon.iconAnchor = new GPoint(10, 29);
        myIcon.infoWindowAnchor = new GPoint(10, 14);
        myIcon.imageMap = [15,45,5,26,0,12,10,1,22,1,29,10,30,21,25,28,19,35,17,43];
		
        var markerOptions = { icon:myIcon };
		
		var wunderman = new GLatLng(lat, long);
		this.map.setCenter(new GLatLng(25.798654774824335,-80.17822265625), 11);

		var marker = new GMarker(wunderman,markerOptions);
		marker.guid = opts.guid;
		marker.arrayID = this.markers.length;
		marker.iconImage = opts.image;
		this.markers.push(marker)
		this.map.addOverlay(marker);

		GEvent.addListener(marker, "click", function() {
			mapController.displayDetails(marker);
		});

		
	},
	displayDetails : function(marker, recentPhotoClick) {
		//$("#popUp").appendTo(this.map.getPane(G_MAP_FLOAT_PANE));
		globalVars.activeGuid = marker.guid;
		if(!recentPhotoClick){
			var switchImage = marker.iconImage.split('/');
			switchImage = switchImage[switchImage.length - 1];
			switch(switchImage){
				case "icon_jw-Events.png":
					popUpController.show({'background-image':'url(images/'+constant.language+'/popUp-eventView.png)','width':'569px','height':'575px','contentType':'icon_newEvent','guid':marker.guid});
					break;
				case "icon_jw-pastEvents.png":
					popUpController.show({'background-image':'url(images/'+constant.language+'/popUp-photoGrid.png)','width':'571px','height':'582px','contentType':'icon_pastEvent','guid':marker.guid});
				break;
			}
		}
		else
			popUpController.show({'background-image':'url(images/'+constant.language+'/popUp-photoComment.png)','width':'571px','height':'582px','contentType':'photoComment','guid':marker.guid});
		var mark = {x:marker.getLatLng().x,y:marker.getLatLng().y,pixel:this.map.fromLatLngToDivPixel(new GLatLng(marker.getLatLng().y,marker.getLatLng().x))}
		
		globalVars.mapCenter = {};
		globalVars.mapCenter.pixel = this.map.fromLatLngToDivPixel(new GLatLng(this.map.getCenter().y,this.map.getCenter().x));
		
		var markToMap = {y:globalVars.mapCenter.pixel.y - mark.pixel.y,x:globalVars.mapCenter.pixel.x - mark.pixel.x}
		
		var mapPos = {};
		mapPos.GSize = new GSize(markToMap.x - 400, markToMap.y + 257);
		this.map.panBy(mapPos.GSize);
	}
}

// #########################################################################################################################################################
// ################################# ERROR CONTROLLER ######################################################################################################
// #########################################################################################################################################################

var errorController = {
	error : function(msg){
		if(msg.responseText == '{"ExceptionDetail":null,"ExceptionType":null,"Message":"User Exists","StackTrace":null}'){
			$('#popUp .errorDisplay')
				.css('display','block')
				.html(content[constant.language].userExists);
			errorController.indicateError([$('#registerArea input[name="email"]')]);
		}
		if(window.console)
			console.log(msg);
	},
	phoneinput : function (event, obj) {
		var key = event.keyCode;
		if (((47 < key) && (58 > key)) || ((95 < key) && (106 > key)) || (46 == key) || (8 == key) || (9 == key) || ((36 < key) && (41 > key))) {
			var areaCodeInput = document.getElementById('AreaCode');
			var cellInput = document.getElementById('inputCellPhonePart2');
			var cell2Input = document.getElementById('inputCellPhonePart3');
			var DOB1 = document.getElementById('DOB1');
			var DOB2 = document.getElementById('DOB2');
			var DOB3 = document.getElementById('DOB3');
			var objLength = obj.value
			var objId = obj.id;
			if (objLength.length > 1 && (objId == 'AreaCode' || objId == 'inputCellPhonePart2')) {
				switch (objId) {
				case 'AreaCode':
					cellInput.focus();
					break;
				case 'inputCellPhonePart2':
					cell2Input.focus();
					break;
				}
			} else if (objLength.length > 1) {
				switch (objId) {
				case 'DOB1':
					DOB2.focus();
					break;
				case 'DOB2':
					DOB3.focus();
					break;
				}
			}
			return;
		} else {
			event.preventDefault();
		}
	},
	echeck: function(str) {
			var at="@"
			var dot="."
			var lat=str.indexOf(at)
			var lstr=str.length
			var ldot=str.indexOf(dot)
			if (str.indexOf(at)==-1){
			   return false
			}
	
			if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
			   return false
			}
	
			if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
				return false
			}
	
			 if (str.indexOf(at,(lat+1))!=-1){
				return false
			 }
	
			 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
				return false
			 }
	
			 if (str.indexOf(dot,(lat+2))==-1){
				return false
			 }
			
			 if (str.indexOf(" ")!=-1){
				return false
			 }
	
			 return true					
	},
	calculateAge: function (pmonth, pday, pyear){
 
		if(pmonth > 12 || pmonth < 1)
			return false;
		if(pyear < 1900)
			return false;
		if(pday > 31 || pday < 1)
			return false;
		
		//Make sure input is a number
		var numTest = new Number(pmonth);
		var numTest1 = new Number(pday);
		var numTest2 = new Number(pyear);
		if(isNaN(numTest) || isNaN(numTest1) || isNaN(numTest2))
			return false;
			
		var daysInSubmittedMonth = this.daysInMonth(pmonth,pyear)
		
		if(pday > daysInSubmittedMonth)
			return false;
			
		
			
		var age;
		 
		 
		// Today info
		today = new Date();
		year = today.getFullYear() ;
		month = today.getMonth() + 1;
		day = today.getDate();
		
		if ( month < pmonth ){
		age = year - pyear - 1;
		}
		else if ( month > pmonth ){
		age = year - pyear;
		}
		else if ( month == pmonth ){
		if ( day < pday ){
		age = year - pyear - 1;
		}
		else if ( day > pday ){
		age = year - pyear;
		}
		else if ( day == pday ){
		age = year - pyear;
		}
		}
		
		if(age < 21 || age == 'undefined')
			return false;
		else if(age >= 21){
			return true;	
		}
		else
			return false;
		},
	indicateError : function(objsArray){
		$("#errorBox").css('visibility','visible')
		
		for(var i=0; i < objsArray.length; i++){
			objsArray[i].css('border','solid 1px #F00').focus(function(){$(this).css('border','solid 1px #555555')});
		}
		return true;		
	},
	daysInMonth: function( /* int */ monthNum, /* int */ yearNum )
	/*Author: Matthias Dailey March 30, 2009 */
	{
		// if monthNum or yearNum are not specified, set them to the current month/yearNum
		if( monthNum==undefined && yearNum==undefined )
		{
			now = new Date();
			monthNum = now.getMonth()+1;
			yearNum = now.getFullYear();
		}
		else if( monthNum || yearNum || monthNum=="" || yearNum == "" )
		{
			now = new Date();
			if( monthNum==undefined || monthNum=="" )
				monthNum = now.getMonth()+1;
			if( yearNum==undefined || yearNum=="" )
				yearNum = now.getFullYear();
		}
		// turn 01 into 1
		monthNum = Number(monthNum);
		yearNum = Number(yearNum);
		
		// check if monthNum and yearNum are numbers and whole numbers and monthNum is between 1 and 12
		if( isNaN(monthNum) || isNaN(yearNum) || monthNum%1!=0 || yearNum%1!=0 || monthNum<1 || monthNum>12 ){
			return false;
		}
		// create date
		var d = new Date(yearNum, monthNum, 0);
		return d.getDate();
	}
}
