/**
    Document   : Controller.js
    Author     : Pierre FEVRIER
    Description: Classe permettant de charger les informations spécifiques à chaque page
 */

function Controller ()
{
    this.domain_name        = 'www.pierrefevrier.fr/';

    this.content_div        = document.getElementById('contenu');

    // Initialisation de l'objet SlideShow pour gérer le menu
    this.menu = new SlideShow(this);
    // Initialisation de l'objet evts pour gérer les différents évênements de la page courante
    this.ajax = new AjaxBrowser(this);
}

    Controller.prototype._load_page_components = function (current_page)
    {
        clearTimeout(this.timer);
        this.is_avatar_loaded = false;
        this.fade = 80;

        switch (current_page)
        {
            case 'accueil':
                this._load_accueil_components();
                this._switch_avatar(0);
                break;

            case 'creations':
                this._load_creations_components();
                this._switch_avatar(-140);
                break;

            case 'cv':
                this._switch_avatar(-280);
                break;

            case 'contact':
                this._switch_avatar(-420);
                document.getElementById('genererCaptcha').onclick = function() {ctl.genererCaptcha(); return false};
                break;

            case 'blog':
                this._load_blog_components();
                this._switch_avatar(-560);
                break;

            case 'a-propos':
                this._switch_avatar(-700);
                break;
        }

        this._target_blanc('external');
    }

    Controller.prototype._load_accueil_components = function ()
    {
        var last_realisations = document.getElementById('vignettes').getElementsByTagName('img');

        for (var i=0; i<last_realisations.length; i++)
        {
            var img = last_realisations[i];
            var a   = img.parentNode;

            img.normal_src  = img.src;
            img.hover_src   = 'http://'+this.domain_name+'Application/images/projects/project_'+img.id+'_hover.jpg';
            img.position    = i;
            img.link        = 'creations/'+img.id+'.html';
            a.link          = 'creations/'+img.id+'.html';
            a.onclick       = function() {clearTimeout(ctl.menu.timer);ctl.ajax.set_anchor(this.link);return false;};

            img.onmouseover = function () {ctl.overfly(this.link, this.position, this.alt);};
        }

        var opacity = 70;
        this.overflyer                      = document.getElementById('overflyer');
        this.overflyer.style.opacity        = (opacity / 100);
        this.overflyer.style.MozOpacity     = (opacity / 100);
        this.overflyer.style.KhtmlOpacity   = (opacity / 100);
        this.overflyer.style.filter         = 'alpha(opacity=' + opacity + ')';
        this.overflyer.onmouseout           = function () {ctl.overflyer.style.display = 'none';}
    }

    Controller.prototype.overfly = function (link, pos, name)
    {
        switch (pos)
        {
            case 0:
                this.overflyer.style.marginLeft = '43px';
                break;
            case 1:
                this.overflyer.style.marginLeft = '293px';
                break;

            case 2:
                this.overflyer.style.marginLeft = '543px';
                break;
        }

        this.overflyer.innerHTML = name;
        this.overflyer.style.display = 'block';
        this.overflyer.onclick = function() {clearTimeout(ctl.menu.timer);ctl.ajax.set_anchor(link);return false;};

    }

    Controller.prototype._load_creations_components = function ()
    {
        // Est-on sur la page de présentation des projets ?
        if (document.getElementById('realisations'))
        {
            var realisations = document.getElementById('realisations').childNodes;
            for (i = 0; i < realisations.length; i++)
            {
                // Fix firefox white nodes
                if (!this.is_empty_node(realisations[i]))
                {
                    var currentId = realisations[i].id;
                    var links = realisations[i].getElementsByTagName('a');

                    for (j = 0; j < links.length; j++)
                    {
                        if (links[j].className == "project_overview" || links[j].className == "project_more")
                        {
                            links[j].link       = 'creations/'+currentId+'.html';
                            links[j].onclick    = function() {clearTimeout(ctl.menu.timer);ctl.ajax.set_anchor(this.link);return false;};
                        }
                    }
                }
            }
        }

    }

    Controller.prototype.is_empty_node = function(node)
    {
        return !(/[^\t\n\r ]/.test(node.data));
    }


    Controller.prototype.send_contactForm = function ()
    {
        this.ajax.show_messageBox('Vérification des champs...');

        var data = 'ajax=enable&';
            data += 'name='+ encodeURIComponent(document.getElementById('name').value);
            data += '&email='+ encodeURIComponent(document.getElementById('email').value);
            data += '&subject='+ encodeURIComponent(document.getElementById('subject').value);
            data += '&message='+ encodeURIComponent(document.getElementById('message').value);
            data += '&captcha='+ encodeURIComponent(document.getElementById('captcha').value);

        // On demande le contenu de la page au serveur
        var req = this.ajax._get_ajax_object();

        req.open('POST', 'http://'+this.domain_name+this.ajax.current_page, true);
        req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        req.onreadystatechange = function()
        {
            if(req.readyState == 4)
            {
                if (req.status != 404)
                {
                    ctl.ajax.msgBox.display = 'none';
                    var docXML = req.responseXML;

                    ctl.parse_contactForm(docXML);
                    // On ré-enregistre le listener qui permet de gérérer un nouveau captcha au clic sur le bouton
                    document.getElementById('genererCaptcha').onclick = function() {ctl.genererCaptcha(); return false};
                }
                else
                {
                    ctl.ajax._set_error_404();
                }
            }
        }
        req.send(data);

        return false;
    }

    Controller.prototype.genererCaptcha = function ()
    {
        // On génére un chiffre aléatoire pour le captcha
        var randomNumber = Math.floor(Math.random() * 1000)+1;
        document.getElementById('imgCaptcha').src = 'http://'+ this.domain_name +'contact/generate_captcha/'+ randomNumber +'.gif';
    }

    Controller.prototype.parse_contactForm = function (docXML)
    {
        var mailState = docXML.getElementsByTagName("email_state").item(0).firstChild.data;

        if (mailState == 2) // Erreurs au niveau des champs
        {
            this.content_div.innerHTML = docXML.getElementsByTagName("data").item(0).firstChild.data;
        }
        else if (mailState == 1) // E-mail envoyé
        {
            document.getElementById('subject').value = '';
            document.getElementById('message').value = '';
            document.getElementById('captcha').value = '';
            this.ajax.show_messageBox ('Votre e-mail a bien été transmis.', 'info');
        }
        else // Erreur du serveur
        {
            this.ajax.show_messageBox ('Une erreur serveur est survenue, votre mail n\'a pas été transmis.', 'error');
        }
    }

    Controller.prototype._load_blog_components = function ()
    {
        var content = '<h2>Mon Blog</h2>';
            content += '<p style="margin-bottom: 80px">Vous allez être re-dirigé(e) dans 3 secondes vers mon blog, merci de votre visite et à bientôt.</p>';
            content += '<p style="text-align: right;margin-bottom: 0px;"><em><a href="http://blog.pierrefevrier.fr">Cliquez ici</a> si vous n\'êtes pas redirigé(e) automatiquement.</em></p>';

        this.content_div.innerHTML = content;

        // Redirection vers mon blog après 3 secondes
        setTimeout(function () {window.location.replace ("http://blog.pierrefevrier.fr");},3000);
    }

    Controller.prototype._switch_avatar = function (pos)
    {
        document.getElementById('avatar').style.backgroundPosition = pos+'px 100%';
    }

    Controller.prototype._target_blanc = function (rel)
    {
        var links = document.getElementsByTagName("a");
        for (i = 0; i < links.length; i++)
        {
            if (links[i].hasAttribute("rel") && links[i].rel == rel)
            {
                links[i].onclick = function()
                {
                    window.open(this.href);
                    return false;
                }
            }
        }
    }