/* © 2009 - 2011 Oldrin Bărbulescu (www.oldrinb.ca)
        All rights reserved. */

function init() {    
    load_images();  
    
    add_mouse_over_events ();
    add_show_hide_div_events();
    
    display_news();
    display_weather(null);
    display_quote();
    
    var page = get_current_page_name();
    display_counter (page);
    adjust_left_panel_height(); 
    add_weather_selector_events ();  
}


function load_images() {
    var imgs = ["../images/page/lang.jpg",
                "../images/marker/minus_hover.gif",
                "../images/marker/plus_hover.gif",
                "../images/marker/triangle_news.gif",
                "../images/counter/counter_0.jpg", "../images/counter/counter_1.jpg", "../images/counter/counter_2.jpg", "../images/counter/counter_3.jpg",
                "../images/counter/counter_4.jpg", "../images/counter/counter_5.jpg", "../images/counter/counter_6.jpg", "../images/counter/counter_7.jpg",
                "../images/counter/counter_8.jpg", "../images/counter/counter_9.jpg", "../images/counter/counter_-.jpg",                       
                "../images/projects/icons/bibliotheque_hover.png",
                "../images/projects/icons/parc_hover.png",
                "../images/projects/icons/bonhomme_hover.png",
                "../images/projects/icons/calculator_hover.png",
                "../images/projects/icons/magasin_films_hover.png",
                "../images/projects/icons/convertiseur_hover.png",
                "../images/projects/icons/prev_meteo_hover.png",
                "../images/projects/icons/facture_hover.png",
                "../images/projects/icons/restaurant_hover.png",
                "../images/projects/icons/calibration_hover.png",
                "../images/projects/icons/flux_hover.png",
                "../images/projects/icons/mosaique_hover.png",
                "../images/projects/icons/stereo_hover.png",
                "../images/projects/icons/sails_ji_hover.png",                
                "../images/projects/sails_ji/sails_ji.png",
                "../images/projects/sails_ji/sails_ji_full.jpg",                  
                "../images/projects/parc_attractions/parc.png", 
                "../images/projects/bibliotheque/bibliotheque.png"];
                
    for (var i = 0; i < imgs.length; i++) load_imag (imgs[i]);      
}


function load_imag (path) {
    var imag = new Image();
    imag.src = path;
    return imag;
}


function add_mouse_over_events () {
    var div = document.getElementsByTagName("div");

    for (var i = 0; i < div.length ; ++i) {
        if (div[i].className == "text") {
            var link_images = div[i].getElementsByTagName("a");        
            for (var j = 0; j < link_images.length; j++)  {
                var im = link_images[j].getElementsByTagName("img");                
                if (im[0] != null) {            
                    if (navigator.userAgent.indexOf('Opera') > -1)
                        im[0].onmouseover = eventMouseOver; 
                    else  addListener (im[0], "mouseover", eventMouseOver);
                    addListener (im[0], "mouseout", eventMouseOut);  
                }                
            }             
        }
    }
}


function add_show_hide_div_events () {
    var divs = document.getElementsByTagName ("div");    
    add_events (divs);
  
    var tbodys = document.getElementsByTagName ("tbody"); 
    add_events (tbodys);
    
    function add_events (cont) {
        for (var i = 0; i < cont.length; i++) {
            if (cont[i].className.indexOf('show_hide') != -1) {        
                var links = cont[i].getElementsByTagName ("a");
                for (var j = 0; j < links.length; j++) {
                    if (links[j].className.indexOf('show') != -1 || links[j].className.indexOf('hide') != -1) addListener (links[j], "click", show_hide_div);
                    if (links[j].className.indexOf('show') != -1) show_hide_div(links[j]);
                    else if (links[j].className.indexOf('hide') != -1) show_hide_div(links[j]);
                }
            }
        } 
    }
}


function add_weather_selector_events () {
    var div = document.getElementById("weather");
    var select = div.getElementsByTagName ("select")[0];
    addListener (select, "change", display_weather);
}


function eventMouseOver(img) {   
    if (navigator.userAgent.indexOf('Opera') > -1) 
        img = this;
    
    if (img.className.indexOf('hover') != -1) {
        var index = img.src.indexOf(".png");   
        if (index == -1) {
            index = img.src.indexOf(".gif"); 
            img.src = img.src.substring(0, index) + "_hover.gif" ;
        }
        else {
            img.src = img.src.substring(0, index) + "_hover.png" ;
        }        
    }
}


function eventMouseOut(img) {  
    if (img.className.indexOf('hover') != -1) {
        var index = img.src.indexOf("_hover.png");
        if (index == -1) {
            index = img.src.indexOf("_hover.gif");
            img.src = img.src.substring(0, index) + ".gif" ;
        }
        else {
            img.src = img.src.substring(0, index) + ".png" ;
        }
    }
}


function show_hide_div (e) {
    var parent = e.parentNode;
    while ((parent.tagName.toLowerCase() != 'div' || parent.tagName.toLowerCase() != 'tbody') && parent.className.indexOf('show_hide') == -1) {
        parent = parent.parentNode;
    }
    
    var divs = parent.getElementsByTagName ("div");    

    for (var i = 0; i < divs.length; i++) {
        if (divs[i].className.indexOf('content') != -1) {
            if (divs[i].style.display == 'block' && e.className.indexOf('hide') != -1) divs[i].style.display = "none";
             else  divs[i].style.display = "block"; 
        }
    }  


    var a = parent.getElementsByTagName ("a");
    for (var i = 0; i < a.length; i++) {
    
        if ((e.className.indexOf('show') != -1 && a[i].className.indexOf('hide') != -1)
        ||  (e.className.indexOf('hide') != -1 && a[i].className.indexOf('show') != -1)) {
            e.style.display = "none";
            a[i].style.display = "inline";
            
        }    
    }  
}


function display_news(){
    var url = "../ajax/news.php?lang=" + lang + "&id=" + Math.random(); 
    var news = document.getElementById ("news");
    var div = news.getElementsByTagName ("div")[0];    
    
    var error_message = (lang == "en") ? "The news list cannot be loaded." : "La liste de nouvelles ne peut pas être chargée.";     
    display_ajax_content (url, div, "<p class = 'center'>" + error_message + "</p>");
} 


function display_weather(e) {
    var url = "../ajax/weather.php?lang=" + lang; 
    if (e!= null)  {
        url += "&city=" + e.value;
    }
    url += "&id=" + Math.random();
    
    var weather = document.getElementById ("weather");
    var div = weather.getElementsByTagName ("div")[0];    
    
    var error_message = (lang == "en") ? "The weather information cannot be loaded." : "L'information météorologique ne peut pas être chargée.";
    div.innerHTML = "<p class = 'center'>" + weather_message + "</p>";    
    display_ajax_content (url, div, "<p class = 'center'>" + error_message + "</p>");
} 


function display_counter (page) {
    var url = "../ajax/counter.php?page=" + page + "&lang=" + lang + "&id=" + Math.random(); 
    var counter = document.getElementById ("counter");
    var div = counter.getElementsByTagName ("div")[0];
    
    display_ajax_content (url, div, "");
}


function display_quote () {
    var quote = document.getElementById ("quote");
    if (quote != null) {
        var url = "../ajax/quote.php?lang=" + lang + "&id=" + Math.random();    
        var div = quote.getElementsByTagName ("div")[0];    
    
        display_ajax_content (url, div, "");   
    }
}


function display_ajax_content (url, div, error_message) {
    var xmlhttp = get_xml_http_object();
    if (xmlhttp == null) return;    
    
    xmlhttp.onreadystatechange=function() {
        if(xmlhttp.readyState == 4) {
            var result = xmlhttp.responseText; 
            result = result.trim();
            //alert (result); 
            if (result.substring (0,4) == "<div"
                &&  result.substring  (result.length - 4, result.length) == "div>") div.innerHTML = result;
            else if (error_message != "") div.innerHTML = error_message;
        }
    }
    
    xmlhttp.open("GET",url,true);
    xmlhttp.send(null);
}


function adjust_left_panel_height () {
    var right = document.getElementById ("right");
    var menu = document.getElementById ("menu");
    var weather = document.getElementById ("weather");
    var counter = document.getElementById ("counter");
     
    var left_height = weather.offsetHeight;
    var right = right.offsetHeight;
    var max_height = menu.offsetHeight + left_height  + 450 + counter.offsetHeight;
    if (right > max_height) weather.style.height = left_height + right - max_height + 125 + "px";
}


function get_xml_http_object () {
    if (window.XMLHttpRequest)
        //code for IE7+, Firefox, Chrome, Opera, Safari
        return new XMLHttpRequest();
    else if (window.ActiveXObject)
        //code for IE6, IE5
        return new ActiveXObject("Microsoft.XMLHTTP");
    else return null;
} 


function get_current_page_name () {
    var url_string = window.location;
    var parts = (url_string + '').split('/');
    for (var i = 0; i < parts.length; i++) {
        var patt=/.php/g;
        if (patt.test(parts[i])) {
            var res = parts[i].split ('?lang=')[0];
            res = res.split ('&lang=')[0];
            res = res.split ('#menu')[0];
            res = res.split ('&next=')[0];
            return res;  
        } 
    } 
    return "";    
}


function addListener(element, baseName, handler) {
    if (element.addEventListener) // W3C compliant    
	   element.addEventListener(baseName, function (e) {
	                                          if (!handler(this)) e.preventDefault();
	                                      }, false);	 	    
    else if (element.attachEvent) // si MSIE
	   element.attachEvent('on' + baseName, function (e) {
	                                            return handler(e.srcElement);
	                                       });
}


String.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

var lang = document.getElementsByTagName("html")[0].getAttribute("xml:lang");
var weather_message = (lang == "en") ? "The weather information is being updated ..." : "L'information météorologique est mis à jour ...";

if (window.addEventListener) // W3C compliant    
	window.addEventListener("load", init, false);	 	    
else if (window.attachEvent) // si MSIE
    window.attachEvent('onload',init);

