/*
 * plugin-name: Slideshow 
 * plugin-type: addon
 */
var pluginSlideshow = {
	data: {},
	render: function(container,location,className){
		var locationID = location.attr('id');
		var slideshowEntry = location.find('slideshow');
		var slideshowWrapper = $(container.find('.slideshow-wrapper')[0]).addClass(className+"-slideshow-wrapper");
		var slideshowContainer = $(slideshowWrapper.find('.slideshow')[0]).attr('id','slideshow'+locationID);
		var slides = slideshowEntry.find('image');
		var leftControl = $(new Image()).attr('id','slideshow-control-left'+locationID).attr('src','theme/graphics/green_arrow_left.png').
			addClass('slideshow-control').addClass('slideshow-control-left').css('visibility','hidden');
		var rightControl = $(new Image()).attr('id','slideshow-control-right'+locationID).attr('src','theme/graphics/green_arrow_right.png').
			addClass('slideshow-control').addClass('slideshow-control-right');
		for(var i=0;i<slides.length;i++)
		{
			var slideElement = $("<div></div>").addClass('slideshow-element').attr('id','slideshow'+location.attr('id')+'-element'+i).
				css('left',(i*map.settings["slideshow-width"])+'px');
			slideElement.append($(new Image()).attr('src',map.settings["domain-prefix"]+$(slides[i]).attr('url')));
			if($(slides[i]).attr('credits')){slideElement.append($("<div></div>").addClass('slideshow-credit').html($(slides[i]).attr('credits')));}
			slideshowContainer.append(slideElement);
		}
		eval("leftControl.bind('click',function(){ pluginSlideshow.showSlide('"+locationID+"',-1); });");
		eval("rightControl.bind('click',function(){ pluginSlideshow.showSlide('"+locationID+"',1); });");
		slideshowWrapper.append(leftControl);
		slideshowWrapper.append(rightControl);
		pluginSlideshow.data[locationID] = {max:slides.length,pos:0};
	},
	showSlide: function(locationID,direction){
		var sdata = pluginSlideshow.data[locationID];
		var lcontrol = $('#slideshow-control-left'+locationID);
		var rcontrol = $('#slideshow-control-right'+locationID);
		sdata.pos+=direction;
		$('#slideshow'+locationID).scrollTo((sdata.pos*map.settings["slideshow-width"]),map.settings["slideshow-speed"],{axis:'x'});
		lcontrol.css('visibility',(sdata.pos==0) ? 'hidden' : 'visible');
		rcontrol.css('visibility',(sdata.pos==(sdata.max-1)) ? 'hidden' : 'visible');
	}
}
/*
 * plugin-name: Trivia 
 * plugin-type: addon
 */
var pluginTrivia = {
	validate: function(locationID){
		var locationEntry = map.getLocation(locationID);
		var triviaQuestions = locationEntry.find('question');
		for(var i=0;i<triviaQuestions.length;i++){
			var questionGroupName = 't'+locationEntry.attr("id")+'q'+i;
			var choiceTrue = $('#'+questionGroupName+'-true').attr('checked');
			var choiceFalse = $('#'+questionGroupName+'-false').attr('checked');
			var choice = (choiceTrue) ? "vrai" : "faux";
			var result = ((choiceTrue||choiceFalse)&&choice==$(triviaQuestions[i]).attr('answer').toLowerCase());
			var resultMessage = $("#"+questionGroupName+'-result');
			resultMessage.html(map.locales["result"]+": <strong>"+((result)?map.locales['good-answer']:map.locales['bad-answer'])+" </strong>!");
		}
	},
	render: function(container,locationEntry){
		var trivia = $(locationEntry.find('trivia')[0]);
		var triviaQuestionsContainer = $(container.find('.trivia-questions-wrapper')[0]);
		var triviaQuestions = locationEntry.find('question');
		for(var i=0;i<triviaQuestions.length;i++){
			var questionGroupName = 't'+locationEntry.attr("id")+'q'+i;
			var triviaQuestionInstance = $('#trivia-question-template').clone();
			var choiceTrue = $('<input id="'+questionGroupName+'-true" type="radio" name="'+questionGroupName+'" /><span>'+map.locales["true"]+'&nbsp;&nbsp;</span>');
			var choiceFalse = $('<input id="'+questionGroupName+'-false" type="radio" name="'+questionGroupName+'" /><span>'+map.locales["false"]+'</span>');
			$(triviaQuestionInstance.find('.trivia-question-caption')[0]).html($(triviaQuestions[i]).attr('caption'));
			$(triviaQuestionInstance.find('.trivia-question-choices')[0]).append(choiceTrue).append(choiceFalse);
			$(triviaQuestionInstance.find('.trivia-question-result')[0]).attr('id',questionGroupName+'-result');
			triviaQuestionsContainer.append(triviaQuestionInstance);
		}
		$(container.find('.trivia-validate-button')[0]).attr('value',map.locales["validate"]);
		eval("$(container.find('.trivia-validate-button')).bind('click',function(){pluginTrivia.validate('"+locationEntry.attr('id')+"');});");
	}
}
/*
 * plugin-name: MediaPlayer 
 * plugin-type: addon
 */
var pluginMediaPlayer = {
	playerCache: {},
	render: function(container,location){
		var mediaPlayerID = 'media-player-wrapper'+location.attr('id');
		var attributes = {};
		var params = {};
		var flashvars = {file:map.settings["domain-prefix"]+$(location.find('guide')[0]).attr('url')};
		container.attr('id',mediaPlayerID);
		swfobject.embedSWF("flash/player.swf", mediaPlayerID, "100%", "260px", "7.0.0",'',flashvars,params,attributes);		
	},
	forceStop: function(playerID){
		var playerContainer = $('#'+playerID);
		var locationEntry = map.getLocation(playerID.replace('media-player-wrapper',''));
		if(playerContainer.attr('id') == playerID){
			var parent = playerContainer.parent();
			playerContainer.replaceWith("<div class='media-player-wrapper'></div>");
			pluginMediaPlayer.render($(parent.find('.media-player-wrapper')[0]),locationEntry);
		}
	}
}
/*
 * plugin-name: Randonnée 
 * plugin-type: popupclass
 */
var popupRandonnee = {
	markerIcon: "location.png",
	tabMemory: {},
	init:function(){
		popupRandonnee.template = $('#randonnee-popup-template');
	},
	swapTab: function(popupID,index){
		$('#'+popupID+'-tab'+popupRandonnee.tabMemory[popupID]).removeClass('randonnee-active-tab');
		$('#'+popupID+'-tab'+index).addClass('randonnee-active-tab');
		$('#'+popupID+'-tab-control'+popupRandonnee.tabMemory[popupID]).removeClass('active-tab-control');
		$('#'+popupID+'-tab-control'+index).addClass('active-tab-control');
		
		if(index!=0){
			pluginMediaPlayer.forceStop(popupID.replace('popup','media-player-wrapper'));
		}
		
		popupRandonnee.tabMemory[popupID] = index;
	},
	render: function(popupID,locationEntry){		
		var activeTab = [true,true,true,true];
		var popupInstance = popupRandonnee.template.clone().attr('id',popupID);
		var mediaplayerTab = $(popupInstance.find('.randonnee-tab0')[0]).attr('id',popupID+'-tab0');
		var slideshowTab = $(popupInstance.find('.randonnee-tab1')[0]).attr('id',popupID+'-tab1');
		var informationTab = $(popupInstance.find('.randonnee-tab2')[0]).attr('id',popupID+'-tab2');
		var closeButton = $(popupInstance.find('.popup-closebutton')[0]);
		var triviaTab = $(popupInstance.find('.randonnee-tab3')[0]).attr('id',popupID+'-tab3');
		if($(locationEntry.find('slideshow')[0]).attr('nb')>0)
			pluginSlideshow.render(slideshowTab,locationEntry,"randonnee");
		else
			activeTab[1] = false;
		if($(locationEntry.find('trivia')[0]).attr('nb')>0)
			pluginTrivia.render(triviaTab,locationEntry);		
		else 
			activeTab[3] = false;
		if(locationEntry.find('guide').length<1)
		{
			activeTab[0] = false;
		}
		$(popupInstance.find('.popup-title')[0]).text(locationEntry.attr('caption'));
		$(popupInstance.find('.randonnee-information')[0]).attr('id',popupID+'randonnee-information').
			attr('src',map.settings["domain-prefix"]+$(locationEntry.find('information')[0]).attr('url'));
		
		// Close button
		eval("closeButton.bind('click',function(){pluginMediaPlayer.forceStop('"+popupID.replace('popup','media-player-wrapper')+"');return hs.close(this);});");
		
		// Commentaires
		if(!jQuery.fn.submitWithAjax){
			jQuery.fn.submitWithAjax = function() {
				this.submit(function() {
					alert('post');
					$.post(this.action, $(this).serialize(), null, "script");
					return hs.close(this);
				});
				return this;
			};
		}
		var commentsForm = $('#comments-popup-template').clone().attr('id','comments-popup'+popupID);
		$(commentsForm.find('.comments-location-id')[0]).attr('value',popupID.replace('popup',''));
		$(commentsForm.find('form')[0]).submitWithAjax();
		$(commentsForm.find('.comments-submit-button')[0]).click(function(){
			$(commentsForm.find('form')[0]).submit();
		});
		$('#templates-layer').append(commentsForm);
		eval("$(popupInstance.find('.randonnee-comments-link')[0]).bind('click',function(){$($('#comments-form"+popupID+"').find('comments-location-id')[0]).attr('value',"+locationEntry.attr('id')+");return hs.htmlExpand(this,{objectType:'inline', contentId:'comments-popup"+popupID+"'});});");
		
		var tabControls = popupInstance.find('.tab-control');
		popupRandonnee.tabMemory[popupID] = 2;
		for(var i=0;i<tabControls.length;i++){
			$(tabControls[i]).attr('id',popupID+'-tab-control'+i);
			if (activeTab[i])
				eval("$(tabControls[i]).bind('click',function(){ popupRandonnee.swapTab('"+popupID+"',"+i+"); });");
			else
				$(tabControls[i]).addClass('inactive-tab-control');
		}
		return popupInstance;
	},
	postRender: function(popupInstance,locationEntry) {
		pluginMediaPlayer.render($(popupInstance.find('.media-player-wrapper')[0]),locationEntry);
	}
}
/*
 * plugin-name: Exploration 
 * plugin-type: popupclass
 */
var popupExploration = {
	tabMemory: {},
	markerIcon: "exploration.png",
	init: function(){
		popupExploration.template8a12 = $('#exploration-popup-template');
		popupExploration.template13a17 = $('#action-popup-template');
	},
	swapTab: function(popupID,index){
		$('#'+popupID+'-tab'+popupExploration.tabMemory[popupID]).removeClass('exploration-active-tab');
		$('#'+popupID+'-tab'+index).addClass('exploration-active-tab');		
		$('#'+popupID+'-tab-control'+popupExploration.tabMemory[popupID]).removeClass('active-tab-control');
		$('#'+popupID+'-tab-control'+index).addClass('active-tab-control');
		$('#'+popupID+'-exploration-viewport').scrollTop(0);
		popupExploration.tabMemory[popupID] = index;
	},
	onQuestionKeyup: function(event,locationID,questionID,indiceIndex,questionIndex){
		var questionImage = $('#'+questionID+'-image');
		var locationEntry = map.getLocation(locationID);
		var question = $($(locationEntry.find('indice')[indiceIndex]).find('question')[questionIndex]);
		if(event.keyCode == 13) {
			var questionInput = $('#'+questionID+'-input');
			var value = questionInput.attr('value').toLowerCase();
			questionImage.attr('src',(value.match(question.attr('reponse').toLowerCase()))?map.locales["good-answer-image"]:map.locales["bad-answer-image"]);
		} else {
			questionImage.attr('src',map.settings["domain-prefix"]+question.attr('image'));
		}
	},
	render8a12: function(popupID,locationEntry){
		var activeTab = [true,true,true,true];
		var popupInstance = popupExploration.template8a12.clone().attr('id',popupID);
		var enquete = $(locationEntry.find('enquete')[0]);
		var enqueteContinue = $(locationEntry.find('continue')[0]);
		$(popupInstance.find('.popup-title')[0]).text(map.locales["exploration-title-prefix"]+locationEntry.attr('caption'));
		$(popupInstance.find('.exploration-description')[0]).html(enquete.attr('description'));
		// Indices
		var indices = locationEntry.find('indice');
		for(var i=0;i<3;i++)
		{
			if(indices[i]){
				var indice = $(indices[i]);
				var currentTab = $(popupInstance.find('.exploration-tab'+i)[0]);				
				var questionsContainer = $(currentTab.find('.questions-container')[0]);
				$(currentTab.find('.exploration-details')[0]).html(indice.attr('details'));
				var questions = $(indices[i]).find('question');
				for(var q=0;q<questions.length;q++)
				{
					var question = $(questions[q]);
					var questionID = popupID+'-i'+i+'-q'+q;
					var questionInstance = $('#question-box-template').clone().attr('id',questionID);
					var questionInput = $(questionInstance.find('.question-input')[0]).attr('id',questionID+'-input');
					$(questionInstance.find('.question-illustration')[0]).attr('id',questionID+'-image').attr('src',map.settings["domain-prefix"]+question.attr('image'));
					eval("questionInput.bind('keyup',function(e){popupExploration.onQuestionKeyup(e,'"+locationEntry.attr('id')+"','"+questionID+"',"+i+","+q+");});");
					questionsContainer.append(questionInstance);
				}
			} else {
				activeTab[i] = false;
			}
		}
		// Conclusion
		var conclusionResultID = popupID+'-conclusion-result';
		var conclusionResult = $($(popupInstance.find('.exploration-conclusion-result')[0]));
		var conclusionResultTrigger = $(conclusionResult.find('.exploration-result-trigger')[0]).html(enquete.attr('question').replace(/[\n\r\t]/g,""));
		var conclusionResultText = $(conclusionResult.find('.exploration-result-text')[0]);
		conclusionResultText.attr('id',conclusionResultID+'-text');
		conclusionResultTrigger.attr('id',conclusionResultID+'-trigger');
		eval("conclusionResultTrigger.bind('click',function(){ $('#"+(conclusionResultID+'-text')+"').html(\"&nbsp;"+enquete.attr('answer').replace(/[\n\r\t]/g,"")+"\");});");
		var conclusionContinueID = popupID+'-conclusion-continue';
		var conclusionContinue = $($(popupInstance.find('.exploration-conclusion-continue')[0]));
		var conclusionContinueTrigger = $(conclusionContinue.find('.exploration-result-trigger')[0]).html(enqueteContinue.attr('question').replace(/[\n\r\t]/g,""));
		var conclusionContinueText = $(conclusionContinue.find('.exploration-result-text')[0]);
		$(conclusionContinue.find('.exploration-continue-description')[0]).html(enqueteContinue.attr('description').replace(/[\n\r\t]/g,""));
		conclusionContinueText.attr('id',conclusionContinueID+'-text');
		conclusionContinueTrigger.attr('id',conclusionContinueID+'-trigger');
		eval("conclusionContinueTrigger.bind('click',function(){ $('#"+(conclusionContinueID+'-text')+"').html('&nbsp;"+enqueteContinue.attr('answer').replace(/[\n\r\t]/g,"")+"'); });");
		$(popupInstance.find('.exploration-conclusion-information')[0]).attr('src',map.settings["domain-prefix"]+enquete.attr('conclusion'));				
		// Tabs
		$(popupInstance.find('.exploration-viewport')[0]).attr('id',popupID+'-exploration-viewport');
		var tabControls = popupInstance.find('.tab-control');
		popupExploration.tabMemory[popupID] = 0;
		for(var i=0;i<tabControls.length;i++){
			$(popupInstance.find('.exploration-tab'+i)[0]).attr('id',popupID+'-tab'+i);
			$(tabControls[i]).attr('id',popupID+'-tab-control'+i);
			if (activeTab[i])
				eval("$(tabControls[i]).bind('click',function(){ popupExploration.swapTab('"+popupID+"',"+i+"); });");
			else
				$(tabControls[i]).addClass('inactive-tab-control');
		}
		return popupInstance;
	},
	render13a17: function(popupID,locationEntry){
		var popupInstance = popupExploration.template13a17.clone().attr('id',popupID);
		var details = $(locationEntry.find('information')[0]).attr('url');
		var closeButton = $(popupInstance.find('.popup-closebutton')[0]);
		$(popupInstance.find('.popup-title')[0]).text(locationEntry.attr('caption'));
		
		// Close button
		eval("closeButton.bind('click',function(){pluginMediaPlayer.forceStop('"+popupID.replace('popup','media-player-wrapper')+"');return hs.close(this);});");
		
		if(details){
			$(popupInstance.find('.action-information')[0]).attr('id',popupID+'action-information').
			attr('src',map.settings["domain-prefix"]+$(locationEntry.find('information')[0]).attr('url'));
		}
		return popupInstance;
	},
	render: function(popupID,locationEntry){
		var type = $(locationEntry.find('filter')[0]).attr('id');
		return (type.match("8a12"))?popupExploration.render8a12(popupID,locationEntry):popupExploration.render13a17(popupID,locationEntry);
	},
	postRender: function(popupInstance,locationEntry) {
		if(locationEntry.find('guide').length>0)
		{
			pluginMediaPlayer.render($(popupInstance.find('.media-player-wrapper')[0]),locationEntry);
		}
	}
}

/*
 * plugin-name: Partenaires
 * plugin-type: popupclass
 */
var popupPartenaire = {
	markerIcon: "partner.png",
	init:function(){
		popupPartenaire.template = $('#partner-popup-template');
	},
	render: function(popupID,locationEntry){
		var popupInstance = popupPartenaire.template.clone().attr('id',popupID);
		pluginSlideshow.render(popupInstance,locationEntry,"partner");
		
		$(popupInstance.find('.partner-logo')[0]).append($(new Image()).attr('src',map.settings["domain-prefix"]+locationEntry.attr('logo')));
		$(popupInstance.find('.partner-description')[0]).attr('id',popupID+'partner-description').
			attr('src',map.settings["domain-prefix"]+$(locationEntry.find('information')[0]).attr('url'));
		$(popupInstance.find('.partner-link')[0]).attr('href',"http://"+locationEntry.attr('url')).text(locationEntry.attr('url'));
		return popupInstance;
	}
}
//
// Intégration des plugins de type "popupclass"
//
map.addPopupClass("Exploration",popupExploration);
map.addPopupClass("Randonnée",popupRandonnee);
map.addPopupClass("Partenaire",popupPartenaire);

