var menuItems = [];
var currentMenuItem = -1;
var views = {};
var currentView = 'intro';
var currentType;
var currentHus;
var currentMursten = 0;
var currentTagsten = 0;
var murstenWidth = 0;
var useTNT = false;



var typer = {
	'kerne'	: [
		{'thumb' : 'KL170_OC.jpg',
			'texture' : 'KL170_OC.jpg',
			'tnt' : 'kl170.tnt',
			'label' : 'Bülow & Nielsen Kerne,<br />Længehus<br />170 m2'},
		{'thumb' : 'Skitseplan-KV-192.jpg',
			'texture' : 'Skitseplan-KV-192.jpg',
			'tnt' : 'kl192.tnt',
			'label' : 'Bülow & Nielsen Kerne,<br />Vinkelhus<br />192 m2'}
	],
	'archline' : [
		{'thumb' : 'FL155-Model.jpg',
			'texture' : 'FL155-Model.jpg',
			'tnt' : 'al155.tnt',
			'label' : 'Bülow & Nielsen Archline, <br />Forskudt Længe<br />155 m2'},
		{'thumb' : 'FV-200-Model.jpg',
			'texture' : 'FV-200-Model.jpg',
			'tnt' : 'al200.tnt',
			'label' : 'Bülow & Nielsen Archline, <br />Forskudt Vinkel<br />200 m2'}
	],
	'classic' : [
		{'thumb' : '280508-CL-154.jpg',
			'texture' : '280508-CL-154.jpg',
			'tnt' : 'cl154.tnt',
			'label' : 'Bülow & Nielsen Classic,<br />Længehus<br />154 m2'},
		{'thumb' : '270608-CV-174.jpg',
			'texture' : '270608-CV-174.jpg',
			'tnt' : 'cl174.tnt',
			'label' : 'Bülow & Nielsen Classic,<br />Vinkelhus<br />174 m2'}
	],
	'plan'	: [
		{'thumb' : '169_fisker.jpg',
			'texture' : '169_fisker.jpg',
			'tnt' : 'cl169.tnt',
			'label' : 'Bülow & Nielsen 1½ plan,<br />Fiskerhus<br />169 m2'},
		{'thumb' : '191_fisker.jpg',
			'texture' : '191_fisker.jpg',
			'tnt' : 'kl191.tnt',
			'label' : 'Bülow & Nielsen 1½ plan,<br />Fiskerhus<br />191 m2'}
	]
};

var tagsten = [
	{'thumb' : 'Benders_020020.jpg',
		'texture_a' : 'Benders_0200_20a.jpg',
		'texture_b' : 'Benders_0200_20b.jpg',
		'texture_c' : 'Benders_0200_20c.jpg',
		'label' : 'Bender Palema<br />Betontagsten<br />Sort'},
	{'thumb' : 'Benders_020022.jpg',
		'texture_a' : 'Benders_0200_22a.jpg',
		'texture_b' : 'Benders_0200_22b.jpg',
		'texture_c' : 'Benders_0200_22c.jpg',
		'label' : 'Bender Palema<br />Betontagsten<br />Brun'},
	{'thumb' : 'Benders_020024.jpg',
		'texture_a' : 'Benders_0200_24a.jpg',
		'texture_b' : 'Benders_0200_24b.jpg',
		'texture_c' : 'Benders_0200_24c.jpg',
		'label' : 'Bender Palema<br />Betontagsten<br />Rød'},
	{'thumb' : 'Benders_020026.jpg',
		'texture_a' : 'Benders_0200_26a.jpg',
		'texture_b' : 'Benders_0200_26b.jpg',
		'texture_c' : 'Benders_0200_26c.jpg',
		'label' : 'Bender Palema<br />Betontagsten<br />Teglrød'}		   
];

var mursten = [
	{'thumb' : 'RT209-1024.jpg',
		'texture' : 'RT209-Graahvid-Texture.jpg',
		'label':'Gule<br />Blødstrøgne'},
	{'thumb' : 'RT307-1024.jpg',
		'texture' : 'RT307-Graahvid-Texture.jpg',
		'label':'Røde<br />Blødstrøgne'},
	{'thumb' : 'RT406-1024.jpg',
		'texture' : 'RT406-Graahvid-Texture.jpg',
		'label':'Rød/brune<br />Blødstrøgne<br />kloster'},
	{'thumb' : 'RT414-1024.jpg',
		'texture' : 'RT414-Graahvid-Texture.jpg',
		'label':'Rosé India<br />Blødstrøgne'},
	{'thumb' : 'RT425-1024.jpg',
		'texture' : 'RT425-Graahvid-Texture.jpg',
		'label':'Rosé<br />Blødstrøgne<br />Miletegl'},
	{'thumb' : 'RT431-1024.jpg',
		'texture' : 'RT431-Graahvid-Texture.jpg',
		'label':'Gulrøde<br />Blødstrøgne<br />Toscana'},
	{'thumb' : 'RT434-1024.jpg',
		'texture' : 'RT434-Graahvid-Texture.jpg',
		'label':'"Lava"<br />Blødstrøgne<br />reducerede'},
	{'thumb' : 'RT449-1024.jpg',
		'texture' : 'RT449-Hvid-Texture.jpg',
		'label':'Gul/rød Sevilla<br />Blødstrøgne'},
	{'thumb' : 'RT471-1024.jpg',
		'texture' : 'RT471-Hvid-Texture.jpg',
		'label':'Rød/brune "Pisa" <br />Blødstrøgne'},
	{'thumb' : 'RT487-1024.jpg',
		'texture' : 'RT487-Hvid-Texture.jpg',
		'label':'Gul/røde<br />Blødstrøgne'},
	{'thumb' : 'vandskuret.jpg',
		'texture' : 'vandskuret.jpg',
		'label':'Hvid filset<br />(tilvalg)'}
];

$(document).ready(function(){			   
	useTNT = TNTsupportedPlatform();
	
	if(document.location.hash.indexOf('notnt') != -1 || document.location.hash.indexOf('mac') != -1){
		useTNT = false;
	}
	
	if(useTNT){
		initTurnTool();
	}else{
		$('#TurnTool').css('height', '400px').hide();
		$('#menu-hjelp').html('Det er desværre ikke muligt at se villaerne i 3D på denne computer.');
	}
	
						   
	menuItems[0] = $('#menu-type');
	menuItems[1] = $('#menu-plan');
	menuItems[2] = $('#menu-tagsten');
	menuItems[3] = $('#menu-mursten');
	if(useTNT){
		menuItems[4] = $('#menu-hjelp');
	}else{
		menuItems[4] = $('#menu-hjelp-mac');
	}
	menuItems[5] = $('#menu-mail');
	switchMenu(0);
	
	views.intro = new view({'intro':true});
	views.tnt = new view({'TurnTool':true});
	views.plantegning = new view({'plantegning':true});
	
	$("#menu li").click(function(event){
		switchMenu( $('#menu li').index(this) );
		event.preventDefault();
	});
	
	$("#menu-type li").click(function(event){
		_log( $('#menu-type li').index(this) );
		
		switch($('#menu-type li').index(this)){
			case 0:
				currentType = 'kerne';
				break;
			case 1:
				currentType = 'archline';
				break;
			case 2:
				currentType = 'classic';
				break;
			case 3:
				currentType = 'plan';
				break;
				
			default:
				currentType = 'plan';
				break;
				
		}
		currentHus = 0;
		
		switchMenu(1);
		setView('plantegning');
		event.preventDefault();
	});


	
	
	for(var i=0;i<tagsten.length;i++){
		var li = $('<li><img src="images/thumbs/'+tagsten[i].thumb+'" class="shadow" />'+tagsten[i].label+'</li>');

		if(i == 0){
			li.addClass('selected');
		}
		if(i == tagsten.length-1){
			li.addClass('last');
		}
		
		$("#menu-tagsten ul").append(li);
	}
	
	$("#menu-tagsten li").click(function(event){
		$('#menu-tagsten li').removeClass('selected');
		$(this).addClass('selected');
		switchTagsten( $('#menu-tagsten li').index(this) );
		event.preventDefault();
	});
	
	
	
	
	for(var i=0;i<mursten.length;i++){
		var li = $('<li><img class="shadow" src="images/thumbs/'+mursten[i].thumb+'" />'+mursten[i].label+'</li>');
		
		if(i == mursten.length-1){
			li.addClass('last');
		}
		$("#menu-mursten .prev").css({'width' : 0,'opacity' : 0,'cursor':'auto'});
		$("#menu-mursten ul").append(li)
	}
	
	$("#menu-mursten .next").click(function(event){
		$("#menu-mursten .holder").stop().animate({scrollLeft: '707'}, 300);
		$(this)
			.animate({'opacity' : 0},100)
			.css({'cursor':'auto','width':0});
		$("#menu-mursten .prev")
			.animate({'width' : 26},100)
			.animate({'opacity' : 1},500)
			.css('cursor','');
	});
	
	$("#menu-mursten .prev").css('opacity',0).click(function(event){
		$("#menu-mursten .holder").stop().animate({scrollLeft: '0'}, 300);
		$(this)
			.animate({'opacity' : 0},100)
			.css({'cursor':'auto','width':0});
		$("#menu-mursten .next")
			.animate({'width' : 26},100)
			.animate({'opacity' : 1},500)
			.css('cursor','');
			
	});
	
	$("#menu-mursten li").click(function(event){
		$('#menu-mursten li').removeClass('selected');
		$(this).addClass('selected');
		switchMursten( $('#menu-mursten li').index(this) );
		event.preventDefault();
	});
	
	
	$('#saveAsPdf').click(function(){
		savePDF();				   
	});
	
	$('#doPrint').click(function(){
		print();				   
	});
	
	var mailValidator = $("#mailForm").validate({
		rules: {
			mail_sender_name: {
				required: true
			},
			mail_sender: {
				required: true,
				email:true
			},
			mail_reciever_name: {
				required: true
			},
			mail_reciever: {
				required: true,
				email: true
			}
		},
		errorPlacement: function(error, element) {
			//error.insertAfter( element );
		},
		messages: {
			mail_reciever_name: "Skriv venligst modtagerens navn",
			mail_sender_name: "Skriv venligst dit navn",
			mail_reciever: {
				required: "Dette felt skal udfyldes.",
				email: "Indtast venligst en gyldig email adresse."
			},
			mail_sender: {
				required: "Dette felt skal udfyldes.",
				email: "Indtast venligst en gyldig email adresse."
			}
		},					   
		submitHandler: function(form) {
				$("#mailForm .submit").attr('disabled','disabled');
				var data = $("#mailForm").serialize()
				
				data += '&type='+currentType;
				data += '&hus='+currentHus;
				data += '&mursten='+currentMursten;
				data += '&tagsten='+currentTagsten;
			
				$.ajax({
				type: "POST",
				url: "mail/mail.php",
				data: data,
				success: function(returnValue){
					$("#mailForm .submit").attr('disabled','');
					if(returnValue != 'succes'){
						$('#mail-sent')
							.css( $('#mailForm').offset() )
							.html('<p>Din meddelse kunne desværre ikke sendes.<br />kontroller de indtastede oplysninger og prøv igen</p>')
							.fadeIn(300)
							.delay(3000)
							.fadeOut(300);
							
						_log(returnValue);
					}else{
						$('#mail-sent')
							.css( $('#mailForm').offset() )
							.html('<p>Din meddelse er sendt</p>')
							.fadeIn(500)
							.delay(3000)
							.fadeOut(500);
					}
				}
			});	
		}
	});
	
	$('#help1 h3').click(function(){
		TNTDoCommand('SceneGraph.Physics.Reset()');
		TNTDoCommand('CameraCtrl.SetCurrent("Camera_walk")');
	});
	
	$('#help2 h3').click(function(){
		TNTDoCommand('CameraCtrl.SetCurrent("Camera_animated")');
		TNTDoCommand('Objects("Camera_animated").PlayAnimation(0,1200,true)');
	});
	
	$('#help3 h3').click(function(){
		TNTDoCommand('CameraCtrl.SetCurrent("Camera_oversigt")');
	});
	
	checkDeepLink();
	
});

switchMenu = function(index){
	
	switch(index){
		case 0:
			setView('intro');
			break;
			
		case 1:
			if(currentType !== undefined){
				setView('plantegning');
			}else{
				return;
			}
			break;
			
		case 2:
		case 3:
			if(currentType !== undefined || currentHus !== undefined){
				setView('plantegning');
			}else{
				return;
			}
			setView('tnt');
			break;
			
		
		case 4:
		case 5:
			setView('tnt');
			break;
	}
	
	
	if(currentMenuItem == -1){
		for(i=0;i<menuItems.length;i++){
			menuItems[i].hide();
		}
	}else{
		menuItems[currentMenuItem].hide();
	}
	menuItems[index].fadeIn(400);
	
	$('#menu li.current').removeClass('current');
	$('#menu li:nth-child('+(index+1)+')').addClass('current');
	
	

	
	currentMenuItem = index;
}

checkDeepLink = function(){
	link = document.location.hash.substring(1);
	
	if(link.length !== 0){
		params = link.split(',');
		
		if(params.length == 4){
		
			currentType = params[0];
			currentHus = params[1];
			currentMursten = params[2];
			currentTagsten = params[3];
			
			setView('tnt');
			switchTNT('tnt/'+typer[currentType][currentHus].tnt);
		}
	}
}

setView = function(view){
	
	
	if(view == 'plantegning'){
		$("#menu-plan ul").children().remove();
		$("#plantegning img").remove();
		for(var i=0;i<typer[currentType].length;i++){
			var li = $('<li><img src="images/thumbs/'+typer[currentType][i].thumb+'" /><p>'+typer[currentType][i].label+'</p></li>');
			
			$("#menu-plan ul").append(li);
		}
		
		$("#menu-plan li").hover(function(event){
			switchPlantegning( $('#menu-plan li').index(this) );
		},function(){
			
		});
		
	
		$("#menu-plan li").click(function(event){
			currentHus = $('#menu-plan li').index(this);
			setView('tnt');
			switchMenu(2);
			switchTNT('tnt/'+typer[currentType][currentHus].tnt);
			event.preventDefault();
		});
	}
	
	if(view == 'tnt'){
		if(currentType == 'archline' || currentType == 'plan'){
			$("#menu-mursten .last").show();
		}else{
			$("#menu-mursten .last").hide();
		}
	}
	
	
	for (var element in views[currentView]) {
		if(views[currentView][element] != views[view][element]){
			if(views[view][element]){
				if(element == 'TurnTool' && useTNT){
					showTNT()
				}else{
					$('#'+element).fadeIn(400);
				}
			}else{
				if(element == 'TurnTool' && useTNT){
					hideTNT()
				}else{
					$('#'+element).hide();
				}
			}
		}
	}

	currentView = view;
	return;	
}

switchTNT = function(file){
	tntSource = file;
	if(useTNT){
		if(document.getElementById('TNTCtrl') != null){
			document.getElementById('TNTCtrl').src = tntSource;
		}else{
			_log('TNTCtrl not found');
		}	
	}else{
		updateRendering()
	}
}

updateRendering = function(){
	var url = 'renders/ncc_'+(tntSource.substring( tntSource.lastIndexOf('/')+1, tntSource.lastIndexOf('.') ))+'_'+currentMursten+'_'+currentTagsten+'.jpg';
	var img = new Image();
	
	$('#TurnTool .loadingIndicator').stop().css('opacity',1).fadeIn(500);

	$(img).load(function(){
		$('#TurnTool img').delay(500).fadeOut(100, function(){
			$(this).remove();
		});
		$('#TurnTool').append(this);
		$(this).fadeIn(500);
		$('#TurnTool .loadingIndicator').stop().fadeOut(500);
	}).attr('src',url).hide();	
}

switchPlantegning = function(index){
	var img = new Image();
	$('#plantegning .loadingIndicator').fadeIn(500);

	$(img).load(function(){
		$('#plantegning img').fadeOut(500, function(){
			$(this).remove();											   
		});
		$(this).hide();
		$('#plantegning').append(this);
		$(this).fadeIn(500);
		
		$('#plantegning .loadingIndicator').stop().fadeOut(500);
	}).attr('src','images/'+typer[currentType][index].texture);
	
	
}

switchMursten = function(index){
	currentMursten = index;
	if(useTNT){
		TNTDoCommand('SceneGraph.Bitmap("rt307-1024").Load("textures/'+mursten[index].texture+'")');
	}else{
		updateRendering()
	}
}

switchTagsten = function(index){
	currentTagsten = index;
	if(useTNT){
		TNTDoCommand('SceneGraph.Bitmap("tag_test1").Load("textures/'+tagsten[index].texture_a+'")');
		TNTDoCommand('SceneGraph.Bitmap("tag_test1b").Load("textures/'+tagsten[index].texture_b+'")');
		TNTDoCommand('SceneGraph.Bitmap("tag_test2").Load("textures/'+tagsten[index].texture_c+'")');
	}else{
		updateRendering()
	}
}




function hideTNT(){
	if(document.getElementById('TNTCtrl') != null){
		document.getElementById('TNTCtrl').width = 1;
		document.getElementById('TNTCtrl').height = 1;
	}else{
		tntSizeX = 1;
		tntSizeY = 1;
	}
}

function showTNT(){
	if(document.getElementById('TNTCtrl') != null){
		document.getElementById('TNTCtrl').width = 750;
		document.getElementById('TNTCtrl').height = 400;
	}else{
		tntSizeX = 750;
		tntSizeY = 400;
	}
}




var render_tntfiles = [];
var render_currentMursten = 0;
var render_currentTagsten = 0;
var render_cancel = false;

function render(){
	setView('tnt');
	render_cancel = false;
	
	for (var type in typer) {
		for (var hus in typer[type]) {
			_log('tnt/'+typer[type][hus].tnt);
			render_tntfiles.push( 'tnt/'+typer[type][hus].tnt );
		}
	}
	render_switchTNT();
}

function cancel(){
	render_cancel = true;
}

function render_switchTNT(){
	_log('render_switchTNT()');
	if(render_tntfiles.length == 0 || render_cancel){
		return;
	}
	
	render_currentMursten = 0;
	render_currentTagsten = -1;
	
	switchTNT( render_tntfiles.shift() );
	setTimeout(render_combinations, 5000);
}

function render_combinations(){
	_log('render_combinations()');
	render_currentTagsten++;
	
	TNTDoCommand('Objects("*").StopAnimation()');
	TNTDoCommand('Objects("*").SetFrame(0)');
	
	if(render_currentTagsten >= tagsten.length){
		render_currentTagsten = 0;
		render_currentMursten++;
	}
	
	if(render_currentMursten >= mursten.length){
		render_switchTNT();
	}
	
	switchMursten(render_currentMursten);
	switchTagsten(render_currentTagsten);
	
	setTimeout(render_saveimage,1000);
}

function render_saveimage(){
	_log('render_saveimage()');
	TNTDoCommand('Renderer.SaveImage("L:\\cubicasa\\ncc\\renders\\ncc_'+(tntSource.substring( tntSource.lastIndexOf('/')+1, tntSource.lastIndexOf('.') ))+'_'+render_currentMursten+'_'+render_currentTagsten+'.bmp",0)');
	if(!render_cancel){
		render_combinations();
	}
}

function savePDF(){
	if(currentType !== undefined && currentHus !== undefined){
		var url = 'print/pdf.php?type='+currentType+'&hus='+currentHus+'&mursten='+currentMursten+'&tagsten='+currentTagsten;
		window.open(url);
	}
}

function print(){
	if(currentType !== undefined && currentHus !== undefined){
		var url = 'print/print.php?type='+currentType+'&hus='+currentHus+'&mursten='+currentMursten+'&tagsten='+currentTagsten;
		window.open(url);
	}
}



function view(options){
	var defaults = {
		'intro' : false,
		'TurnTool' : false,
		'plantegning' : false
	};
	return $.extend({}, defaults, options);
}

_log = function (msg) {
	if(typeof window.console !== 'undefined'){
		console.log("%o", msg);
	}
};
