///////////////////////////////////////////////////////////////////////////////
//                                   Création WEB&DESIGN - www.webetdesign.com//
////////////////////////////////////////////////////////////////////////////////
//                            I N I T S                                       //
////////////////////////////////////////////////////////////////////////////////
//jQuery.noConflict();

google.load("earth", "1");  
google.load("maps", "2.xx");
var ge = null;

var models = new Array();
var views = new Array();
var preload_images = new Array();
var address = new Array();
var location_datas = "/kmz/";

var links = null;
var h_nav_container = null;
var h_nav = 0;
var move_nav = 0;

var active_page = null; 
var active_title = null; 
var active_link = null; 
var active_kmz = null;

var id_start = 0;
var link_start = null;
 
var navigation;
var sub_navigations = new Array();

Event.observe(window, 'load', loadNavigation, false);

function loadNavigation() {
	
	
	var agt=navigator.userAgent.toLowerCase();
	var is_major = parseInt(navigator.appVersion);
	var is_minor = parseFloat(navigator.appVersion);

	var is_ie     = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
	var is_ie3    = (is_ie && (is_major < 4));
	var is_ie4    = (is_ie && (is_major == 4) && (agt.indexOf("msie 4")!=-1) );
	var is_ie5    = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.0")!=-1) );
	var is_ie5_5  = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.5") !=-1));
	var is_ie6    = (is_ie && (is_major == 4) && (agt.indexOf("msie 6.")!=-1) );
	var is_ie7    = (is_ie && (is_major == 4) && (agt.indexOf("msie 7")!=-1) );
	var is_ie7up  = (is_ie && !is_ie3 && !is_ie4 && !is_ie5 && !is_ie5_5 && !is_ie6);
	var is_ie7down= (is_ie && !is_ie7up);
	if (is_ie7down) alert("Attention, votre navigateur date de plus de 4 ans : nous vous invitons à mettre à jour votre ordinateur afin de profiter de ce module 3D");
	
	
	
	//$('indicator').hide();
	$('login_container').hide();
	
	divs = $("content").getElementsByClassName("title");
	for ( var i = 0 ; i< divs.length ; i++) {
		divs[i].hide();
	}
	
	divs = $("content").getElementsByClassName("infos");
	for ( var i = 0 ; i< divs.length ; i++) {
		divs[i].hide();
	}
	
	divs = $("content").getElementsByClassName("photos");
	for ( var i = 0 ; i< divs.length ; i++) {
		divs[i].hide();
	}



	// Mise en interaction de la navigation
	
	navigation = new accordion('accordion', {
		classNames : {
			toggle : 'accordion_toggle',
			toggleActive : 'accordion_toggle_active',
			content : 'accordion_content'
		}
	});
	
	towns = $("navigation").getElementsBySelector('h1.accordion_toggle');
	for ( var t = 0 ; t<towns.length ; t++) {	
		
		sub_navigations[t] = new accordion('sub_accordion_'+t, {
			classNames : {
				toggle : 'sub_accordion_toggle',
				toggleActive : 'sub_accordion_toggle_active',
				content : 'sub_accordion_content'
			}
		});
	}
	
	links = $("navigation").getElementsByTagName("li");
	for ( var i = 0 ; i< links.length ; i++) {
		link = links[i];
		Event.observe(link, "click", showPage.bind(this, link), false);
	}	
	
	links = $("navigation").getElementsByTagName("h1");
	for ( var i = 0 ; i< links.length ; i++) {
		link = links[i];
		Event.observe(link, "click", showPage.bind(this, link), false);
	}
	
	links = $("navigation_plus").getElementsByTagName("li");
	for ( var i = 0 ; i< links.length ; i++) {
		link = links[i];
		Event.observe(link, "click", showPage.bind(this, link), false);
	}
	
		
	// Gestion des boutons de défilement de la navigation
	
	$("button_down").hide();
	$("button_up").hide();
	
	Event.observe($("button_down"), "mousedown", function(){ move_nav = -1 });
	Event.observe($("button_down"), "mouseup", function(){ move_nav = 0 });
	
	Event.observe($("button_up"), "mousedown", function(){ move_nav = 1 });
	Event.observe($("button_up"), "mouseup", function(){ move_nav = 0 });
	
	h_nav_container = $("navigation_container").getHeight();
	
	var timer=setInterval("surveyNavigation()", 100);
	


  	//GOOGLE EARTH
	//displayNoneWorkaround('map3d');
	google.earth.createInstance("map3d", initCallback, failureCallback);	
	
}




////////////////////////////////////////////////////////////////////////////////
//                            FONCTIONS     INTERFACE                         //
////////////////////////////////////////////////////////////////////////////////

function showPage(link){
	url=null;
	if (link.hasClassName("sub_accordion_toggle") || link.hasClassName("accordion_toggle")  ||  link.hasClassName("navigation_plus") ||  link.hasClassName("map") ) {
		$("infos_container").hide();
		if (active_page!=null) active_page.hide();
		if (active_title!=null) active_title.hide();
		active_title = $("title_"+link.readAttribute('name'));
		active_title.show();
		
		/**/
		if (link.hasClassName("sub_accordion_toggle")) {	//clic site
			link = $("map_"+link.readAttribute('name'))
		}
		else {	//clic ville
			url = location_datas+views[link.readAttribute('name')];
		}
		
		//url = location_datas+views[link.readAttribute('name')];


	}
	else {
		
		//$("map3d").hide();
		//$("map3d").style.left = '400px';
		$("map3d_container").setStyle({top:"2000px"});
		$("infos_container").show();
		
		if(active_page!=null) active_page.hide();
		active_page = $(link.readAttribute('name'));
		
		if (link.hasClassName("content_html")){
			
		} 
		else if (link.hasClassName("content_imgs")){
			
		}
		else if (link.hasClassName("content_flv")){
			
		}
		else if (link.hasClassName("content_swf")){
			
		}
		else if (link.hasClassName("content_full_swf")){
			showFlash(link.readAttribute('name'));
		}
		
		if(active_page!=null) active_page.show();
	
		new Ajax.Updater('infos_container', 
						 "/"+link.readAttribute('rel'), 
						 {	asynchronous:true, 
							evalScripts:false, 
							onComplete:function(request, json){Element.hide('indicator'); $("infos_container").show();}, 
							onLoading:function(request, json){Element.show('indicator')}
						 }
						);
		
	}
	
	if(active_link!=null) active_link.removeClassName("active");
	active_link = link;
	active_link.addClassName("active");
	
	/* spécial thermo
    if (link.readAttribute('name')=="89") ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, false);
	else if(form){
		if (form.buldings.checked) {
			ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, true);
  		} else {
    		ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, false);
  		}
	}
   fin spécial thermo*/
	
	if (active_link.hasClassName("map") || url!=null){
		if(url==null) url = location_datas+views[active_link.readAttribute('name')];
		
		showKmz(url);
		if (address[active_link.readAttribute('name')]) setCameraPosition(address[active_link.readAttribute('name')])	
	}
	$("direct_url").value = 'http://www.agglo-montbeliard.fr/index.php?id=583&no_cache=1&direct='+link.readAttribute('name')
}

function showView(page_id){
	
	title_id = null;
	link = null;
	id = null;
	sub_id = null;
	
	links = $("navigation").getElementsByTagName("li");
	for ( var i = 0 ; i< links.length ; i++) {
		if (links[i].readAttribute('name')==page_id){
			link = links[i];
			ancestors = link.ancestors();
			for ( var j=0 ; j< ancestors.length ; j++) {
				if (ancestors[j].hasClassName("sub_accordion_content")) {
					sub_id = ancestors[j].readAttribute('rel');
					title_id = ancestors[j].readAttribute('name');
				}
				if (ancestors[j].hasClassName("accordion_content")) id = ancestors[j].readAttribute('name');
			}
		}
	}
	
	if (link==null){
		links = $("navigation").getElementsByTagName("h1");
		for ( var i = 0 ; i< links.length ; i++) {
			if (links[i].readAttribute('name')==page_id){
				link = links[i];
				id = i;
				title_id = page_id;
			}
		}
	}
	
	if (link!=null){
		if (id!=null) navigation.activate($$('#accordion .accordion_toggle')[id]);
		if (sub_id!=null) sub_navigations[0].activate($$('#sub_accordion_'+id+' .sub_accordion_toggle')[sub_id]);
		if (title_id!=null) {
			if(active_title!=null) active_title.hide();
			active_title = $("title_"+title_id);
			active_title.show();
		}
		showPage(link)		
	}
}


////////////////////////////////////////////////////////////////////////////////
//                            FONCTIONS     GOOGLE                            //
////////////////////////////////////////////////////////////////////////////////


function initCallback(object) {
	
  	ge = object;
	try{
		ge.getWindow().setVisibility(true);
		ge.getNavigationControl().setVisibility(ge.VISIBILITY_AUTO);
		ge.getLayerRoot().enableLayerById(ge.LAYER_TERRAIN, true);
		ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, true);
		ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, false);
		ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, true);
	
		ge.getOptions().setStatusBarVisibility(0);
	
		setTimeout('loadModels()', 200);
	}
	catch(Exception){
	    ge.getWindow().setVisibility(true);
	  }
}

function loadModels(){
	if (active){
		for ( var i = 0 ; i< models.length ; i++) {
			addKmlFromUrl(location_datas+models[i]);
		}
		/*
		for ( var i=0; i<views.length; i++ ){
	        if (views[i]){
				preload_images[i] = new Image();
				preload_images[i].src = location_datas+views[i];
				//alert(preload_images[i].src )
				
				var oImg=document.createElement("img");
				oImg.setAttribute('src', preload_images[i].src);
				oImg.setAttribute('alt', '');
				oImg.setAttribute('height', '1px');
				oImg.setAttribute('width', '1px');
				$("preloader").innerHTML+="<img src='"+preload_images[i].src+"' width='1' height='1'>";
				
				//$("preloader").appendChild(preload_images[i].src)
			}
		}
		*/
		//alert($("preloader").innerHTML);
		
		
		setTimeout('showView(id_start)', 200);
		
	}
	else setTimeout('loadModels()', 200);
}

function failureCallback(object) { 
	$('indicator').hide();
	$("infos_container").hide();
	
}

function addKmlFromUrl(kmlUrl) {
	ge.setBalloon(null);
	var link = ge.createLink("");
	link.setHref(kmlUrl);//+"?random="+Math.random());
	
	var networkLink = ge.createNetworkLink("");
	networkLink.set(link, false, false);
	ge.getFeatures().appendChild(networkLink);
}
/*
function loadKmlFromUrl(kmlUrl) {
	ge.setBalloon(null);
	var link = ge.createLink("");
	link.setHref(kmlUrl);
	var networkLink = ge.createNetworkLink("");
	networkLink.set(link, true, true);
	if (active_kmz!=null) ge.getFeatures().removeChild(active_kmz);
	active_kmz = ge.getFeatures().appendChild(networkLink);
}
*/

function loadKmlFromUrl(kmlUrl) {
	$('indicator').show();
	ge.setBalloon(null);
	if (active_kmz) {
	    ge.getFeatures().removeChild(active_kmz);
		try{ active_kmz.release(); }
		catch(error){}
	    active_kmz = null;
	}
	google.earth.fetchKml(ge,kmlUrl, finishFetchKml);
}



function finishFetchKml(kmlObject) {
	if (kmlObject) {
		$('indicator').hide();
	    active_kmz = kmlObject;
	    ge.getFeatures().appendChild(active_kmz);
		if (kmlObject.getAbstractView() !== null) ge.getView().setAbstractView(kmlObject.getAbstractView());
	}
}



/*
function traverseKml(node) { 
	
	if(node.getFeatures().hasChildNodes()) { 
		var subNodes = node.getFeatures().getChildNodes(); 
		var length = subNodes.getLength(); 
		alert(length)
		for(var i = 0; i < length; i++) { 
			var eachSubNode = subNodes.item(i);
			alert(eachSubNode.getName())
	      	if (eachSubNode.getType()=="LookAt"){
				alert("yo")
			} 
			//else 
			traverseKml(subNodes.item(i)); 
		} 
  	}
	
} 
*/ 

function setCameraPosition(address) {
	var geocoder = new google.maps.ClientGeocoder();
	geocoder.getLatLng(address, function(point) {
	  if (point) {
	    var lookAt = ge.createLookAt('');
	    lookAt.set(point.lat(), point.lng(), 10, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 45, 400);
	    ge.getView().setAbstractView(lookAt);
	  }
	});
}

function showKmz(url){
	if(active_page!=null) active_page.hide();
	active_page = null;
	//$("map3d").show();
	$("infos_container").hide();
	$("map3d_container").setStyle({top:"80px"});
	if (url!=location_datas) loadKmlFromUrl(url)
}



function displayNoneWorkaround(earthNodeID) {
  // IE isn't affected by this bug
  if (navigator.userAgent.toLowerCase().indexOf('msie') < 0) {
    // Firefox, Safari, etc. are affected
    var earthNode = document.getElementById(earthNodeID);
    var earthWatchNode = earthNode.parentNode;
    
    earthNode.style.position = 'absolute';
    earthNode.style.left = earthNode.style.top = '0';
    earthNode.style.width = earthNode.style.height = '0';
    document.body.appendChild(earthNode);
    
    function repositionEarth() {
      earthNode.style.height = earthWatchNode.offsetHeight + 'px';
      earthNode.style.width = earthWatchNode.offsetWidth + 'px';
      
      // calculate position on page
      var left = earthWatchNode.offsetLeft;
      var top = earthWatchNode.offsetTop;
      var p = earthWatchNode.offsetParent;
      
      while (p && p != document.body) {
        if (isFinite(p.offsetLeft) && isFinite(p.offsetTop)) {
          left += p.offsetLeft;
          top += p.offsetTop;
        }
        
        p = p.offsetParent;
      }
      
      earthNode.style.left = left + 'px';
      earthNode.style.top = top + 'px';
    }
    
    repositionEarth();
    
    // reposition every 100ms
    window.setInterval(function() {
      repositionEarth();
    }, 100);
  }
}


////////////////////////////////////////////////////////////////////////////////
//                   GESTION SCROLING MENU EN ACCORDEON                       //
////////////////////////////////////////////////////////////////////////////////

function surveyNavigation(){
	h = $("accordion").getHeight()
	if (h>h_nav_container) {
		if ($("navigation_container").scrollTop>0) $("button_up").show();
		else $("button_up").hide();
		if ($("navigation_container").scrollTop<(h-$("navigation_container").getHeight()) ) $("button_down").show();
		else $("button_down").hide();
	}
	else {
		if ($("navigation_container").scrollTop!=0) $("navigation_container").scrollTop = 0;
		$("button_down").hide();
		$("button_up").hide();
	}
	
	if(move_nav!=0){
		if (move_nav < 0) $("navigation_container").scrollTop  += 15;
		else  $("navigation_container").scrollTop  -= 15;
	}
	
}

Effect.Scroll = Class.create();
Object.extend(Object.extend(Effect.Scroll.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    var options = Object.extend({
      x:    0,
      y:    0,
      mode: 'absolute'
    } , arguments[1] || {}  );
    this.start(options);
  },
  setup: function() {
    if (this.options.continuous && !this.element._ext ) {
      this.element.cleanWhitespace();
      this.element._ext=true;
      this.element.appendChild(this.element.firstChild);
    }
   
    this.originalLeft=this.element.scrollLeft;
    this.originalTop=this.element.scrollTop;
   
    if(this.options.mode == 'absolute') {
      this.options.x -= this.originalLeft;
      this.options.y -= this.originalTop;
    } else {
    }
  },
  update: function(position) {   
    this.element.scrollLeft = this.options.x * position + this.originalLeft;
    this.element.scrollTop  = this.options.y * position + this.originalTop;
  }
});




Effect.SmoothScroll = Class.create();
Object.extend(Object.extend(Effect.SmoothScroll.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    var options = Object.extend({
      x:    0,
      y:    0,
      mode: 'absolute'
    } , arguments[1] || {}  );
    this.start(options);
  },
  setup: function() {
    if (this.options.continuous && !this.element._ext ) {
      this.element.cleanWhitespace();
      this.element._ext=true;
      this.element.appendChild(this.element.firstChild);
    }
   
    this.originalLeft=this.element.scrollLeft;
    this.originalTop=this.element.scrollTop;
   
    if(this.options.mode == 'absolute') {
      this.options.x -= this.originalLeft;
      this.options.y -= this.originalTop;
    } 
  },
  update: function(position) {   
    this.element.scrollLeft = this.options.x * position + this.originalLeft;
    this.element.scrollTop  = this.options.y * position + this.originalTop;
  }
});



////////////////////////////////////////////////////////////////////////////////
//                   FONCTIONS SPECIALES                                      //
////////////////////////////////////////////////////////////////////////////////

function authUser(user, pass){
	$("map3d_container").setStyle({top:"2000px"});
	$('infos_container').hide();
	$('login_container').show();
	$('login_container').src = "/login";
	
	/*
	new Ajax.Updater('login_container', 
					 "/login", 
					 {	method: 'post',
						parameters: {signin_username: user, signin_password: pass}, 
						asynchronous:true, 
						evalScripts:false, 
						onComplete:function(request, json){Element.hide('indicator'); $("infos_container").show();}, 
						onLoading:function(request, json){Element.show('indicator'); }
					 }
					);
	*/
}

function searchPlace() {
	var geocoder = new google.maps.ClientGeocoder();
	geocoder.getLatLng($("input-search").value, function(point) {
	  if (point) {
		ge.setBalloon(null);
		/*
		if (active_kmz) {
		    ge.getFeatures().removeChild(active_kmz);
		    active_kmz = null;
		}
		*/
	    
		var pt = ge.createPoint('');
		pt.setLatitude(point.lat());
		pt.setLongitude(point.lng());
	
	
		var placemark = ge.createPlacemark('');
		placemark.setDescription("<span style='text-align:left'><H1 style='font-size:16px; font-weight:bold; text-align:left;'>Recherche</H1>"+$("input-search").value+"</span>");
		placemark.setGeometry(pt);
		var icon = ge.createIcon('');
		icon.setHref('http://maps.google.com/mapfiles/kml/pal4/icon29.png');
		var style = ge.createStyle(''); 
		style.getIconStyle().setIcon(icon); 
		placemark.setStyleSelector(style);
		ge.getFeatures().appendChild(placemark);
	
		var lookAt = ge.createLookAt('');
	    lookAt.set(point.lat(), point.lng(), 10, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 45, 400);
	    ge.getView().setAbstractView(lookAt);
		$('title_place').innerHTML = "recherche : "+$("input-search").value;
	  
	
	  }
	});
}



function select_all(obj){ 
	var text_val=eval(obj);
	text_val.focus();
	text_val.select();
	if (!document.all) return; // IE only
	r= text_val.createTextRange();
	r.execCommand('copy');
}


function updateOptions() {
  var options = ge.getOptions();
  var form = document.options;
  
  options.setStatusBarVisibility(form.scaleLegend.checked);
  options.setScaleLegendVisibility(form.scaleLegend.checked);


  if (form.road.checked) {
	ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, true);
  } else {
    ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, false);
  }

  if (form.terrain.checked) {
	ge.getLayerRoot().enableLayerById(ge.LAYER_TERRAIN, true);
  } else {
    ge.getLayerRoot().enableLayerById(ge.LAYER_TERRAIN, false);
  }

  if (form.country.checked) {
	ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, true);
  } else {
    ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, false);
  }

  if (form.buldings.checked) {
	ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, true);
  } else {
    ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, false);
  }

}

function px(x){
        return ''.concat(Math.round(x), 'px');
}

