/**
* @title  Touring Nature global scripts 
*/

// wait for the DOM to be ready
box.dom(document).ready(function() {

    $('#newsletterEmail').click(function() {
        $(this).attr('value', '');
    })

    $('form.skinnedForm').each(function() {
        formId = $(this).attr('id');
        box.ui('form').create({
            element: '#'+formId
        }).addReplacement();
    });
    
    $('#navigationOthers li.subNav').mouseenter(function() {
        $(this).addClass('hover');
    });
    $('#navigationOthers li.subNav').mouseleave(function() {
        $(this).removeClass('hover');
    });


    /**
     *  @section        popups Map
     */
    $('a.popupMap').click(function(){
        window.open($(this).attr('href'),"popupMap","menubar=no, status=yes, scrollbars=yes, location=no, resizable=yes, width=670, height=700").focus();
        return false;
    });
      
    
    /**
     *  @section        login form
     *  @description    show/hide
     */
    $('#login a').click(function(){
        if ($(this).hasClass('on')) {
            $(this).removeClass('on');
            $('#connection').animate({top:'-300px'}, {duration:500});
            
        } else {
            $(this).addClass('on');
            $('#connection').animate({top:'40px'}, {duration:500});
            
        }
    });
    
    /**
     * @section         loginForm
     * @description     faux fields, validation
     */   
    if ($('#loginForm').length) {
        box.ui('form').create({
            element: '#loginForm'
        }).mustValidate(function(form) {
            form.field('connectionUserLogin').mustValidate(function(field) {
                if(field.isEmpty()) {
                    return l10n.errors.required.nickname;
                }
            });
            form.field('connectionUserPassword').mustValidate(function(field) {
                if(field.isEmpty()) {
                    return l10n.errors.required.password;
                } 
            });
            // message d'erreur global au formulaire
            return l10n.errors.form;
        });
    }
    
    /**
     * @section         PollForm
     * @description     faux fields, validation
     */ 
    if ($('#pollForm').length) {
        box.ui('form').create({
            element: '#pollForm'
        }).mustValidate(function(form) {
            form.field('answer').mustValidate(function(field) {
                if(!field.isChecked()) {
                    return l10n.errors.mandatory;
                }
            });
            // message d'erreur global au formulaire
            return l10n.errors.form;
        });
    }
    $('#pollForm .actions input').click(function() {
        if (box.ui('form.pollForm').isValid()) {
            $.post(l10n.url.asidePollResults, {answer: $('input[type=radio][name=answer]:checked').attr('value'), tokenPoll: $('#tokenPoll').attr('value')}, function(data) {
                $('#pollForm .radios').replaceWith(data);
                $('#pollForm .actions').empty();
            });
        }
        return false;
    });
    

    // classe à  ajouter aux éléments lors d'une erreur
    var errorCls = 'error';
    
    // récupérer l'élément adéquat pour l'insertion de l'icône d'erreur
    var getErrorTarget = function(field) {
        if('radio' != field.type) {
            return field.getLabel();
        } else {
            return field.getElements().parent().parent().prev();
        }
    };
    
    // ajouter l'icône d'erreur ou changer son alt si déjà  présent
    var addErrorIcon = function(field, target) {
        var id = field.name + 'Error';
        var img = box.dom('#' + id);
        if(img.length) {
            img.attr('alt', field.getError());
        } else {
            target.append('<img id="' + id + '" alt="' + field.getError() + '" title="' + field.getError() + '" src="' + l10n.url.imgError + '" />');
        }
    };
    
    // ajouter une erreur sur un champ
    var addFieldError = function(e) {
        addErrorIcon(e.source, getErrorTarget(e.source).addClass(errorCls));
    };

    // supprimer une erreur d'un champ
    var removeFieldError = function(e) {
        box.dom('#' + e.source.name + 'Error').remove();
        getErrorTarget(e.source).removeClass(errorCls);
    };

    // ajouter une erreur sur un formulaire
    var addFormError = function(e) {
        var id = e.source.id + 'Error';
        var msg = '<p>' + e.source.msg + '</p>';
        var error = box.dom('#' + id);
        if(error.length) {
            error.html(msg);
        } else {
            e.source.getElement().prepend('<div id="' + id + '" class="' + errorCls + '">' + msg + '</div>');
        }
    };

    // supprimer une erreur d'un formulaire
    var removeFormError = function(e) {
        box.dom('#' + e.source.id + 'Error').remove();
    };
    
    var disableReturnDate = function(e) {
        if (e.id == 'isDirect' && e.source.getValue() == 1) {
            if ($("#flightReturnDate").length) {
                $("#flightReturnDate").attr('disabled','disabled');
                $("#flightReturnDate").addClass('disabled');
                $("#flightReturnDate").next().css('visibility','hidden');
            }
        }
        if (e.id == 'isDirect' && e.source.getValue() == 0) {
            if ($("#flightReturnDate").length) {
                $("#flightReturnDate").removeAttr('disabled');
                $("#flightReturnDate").removeClass('disabled');
                $("#flightReturnDate").next().css('visibility','visible');
            }
        }
    }
    
    // réaction aux différents événements
    box.bind({
        'error.form': addFormError,
        'valid.form': removeFormError,
        'error.field.text': addFieldError,
        'valid.field.text': removeFieldError,
        'error.field.select': addFieldError,
        'valid.field.select': removeFieldError,
        'change.field.radio' : disableReturnDate
    });
    
});


/**
* @description  convert a text into xml
*/
function StringtoXML(text){
    if (window.ActiveXObject){
        var doc = new ActiveXObject('Microsoft.XMLDOM');
        doc.async = 'false';
        doc.loadXML(text);
    } else {
        var parser = new DOMParser();
        var doc = parser.parseFromString(text,'text/xml');
    }
    return doc;
} 

/**
 * @section         Comments
 * @description     Toggle comments display
 */
function toggleComments(){
    if ($("#comments li.hidden").length) {
        $("#comments .showComments").show();
    } else {
        $("#comments .showComments").hide();
    }
    $("#comments .showComments").click(function(){
        if ($(this).hasClass('off')) {
            $("#comments li.hidden").slideDown('slow');//addClass('on').removeClass('off');
            $(this).addClass('on').removeClass('off');
            $(this).find('span').empty().html(l10n.lessComments);
            return false;
        } else {
            $("#comments li.hidden").slideUp('slow');
            $(this).addClass('off').removeClass('on');
            $(this).find('span').empty().html(l10n.allComments);
        }
    });
}

/**
 * @description     Get value of the url parameter 'name'
 */
function getUrlParameter(name) {
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

