$(document).ready(function() {
	handlePopinFooter();
    centerImages();
    comments();
    formValidation();
    showComments();
});

var showComments = function() {
    windowUrl = window.location.href;
    windowUrl = windowUrl.toString();
    anc = windowUrl.split('#')[1];
    if (anc) {
        $('body').find('div#'+anc).show();
    }
}

var centerImages = function() {
    $('body').find('#content .visual div').each(function() {
        var content = $(this).find('img').outerWidth();
        var contenant = $('body').find('#content .article').innerWidth();
        if (contenant > content) {
            var mLeft = (contenant - content) / 2;
            $(this).css('left', mLeft);
        }
    });
}

var comments = function() {
    $('body').find('#content .addComment > a').each(function() {
        $(this).click(function(ev) {
            ev.preventDefault();
            if ($(this).parent().parent().parent().find('.comments').css('display') == 'block') {
                $(this).parent().parent().parent().find('.comments').hide();
            } else {
                $(this).parent().parent().parent().find('.comments').show();
            }
        })
    });
}

var formValidation = function() {
    $('body').find('form.loggedOut').each(function() {
        box.ui('form').create({
            element: $(this)
        }).mustValidate(function(form) {
            nb = form.id.split('-')[1];
            form.field('commentName-'+nb).mustValidate(function(field) {
                if(field.isEmpty()) {
                    return l10n.errors.required;
                }
            });
            form.field('commentEmail-'+nb).mustValidate(function(field) {
                if(field.isEmpty()) {
                    return l10n.errors.required;
                } else if(!field.isMatching('email')) {
                    return l10n.errors.badEmail;
                }
            });
//            form.field('commentUrl-'+nb).mustValidate(function(field) {
//                if(field.isEmpty()) {
//                    return l10n.errors.required;
//                }
//            });
            form.field('comment-'+nb).mustValidate(function(field) {
                if(field.isEmpty()) {
                    return l10n.errors.comment;
                }
            });
            return l10n.errors.forms;
        });
    });
    $('body').find('form.loggedIn').each(function() {
        box.ui('form').create({
            element: $(this)
        }).mustValidate(function(form) {
            nb = form.id.split('-')[1];
            form.field('comment-'+nb).mustValidate(function(field) {
                if(field.isEmpty()) {
                    return l10n.errors.comment;
                }
            });
            return l10n.errors.forms;
        });
    });
}
var errorCls = 'error';

// Bind click on popin link in the footer
var handlePopinFooter = function(){
	$('body').prepend('<div id="popinWrapper"><div id="popinInner"></div></div>');
	$('body').prepend('<div class="overlay"></div>');

	$('#footer .copyright, #footer .legals').click(function(){
		displayPopin($(this).attr('href'));
		return false;
	});
}

var displayPopin = function(link){
	//$('embed, object').hide();
	$('embed, object').each(function() {
		$(this).closest('p').css('height',376);
		$(this).hide();
	});
	$.get(link, null, onLoadPopin);
	$(".overlay").show();
}
var onLoadPopin = function(cnt){
	$("#popinInner").html(cnt);
	$("#popinWrapper").show();
	bindClosePopin();
	centerPopin();
	$('.legalInner .content').jScrollPane();
}
var bindClosePopin = function(){
	$("#popinInner a.close").click(function(e){
		closePopin();
		e.preventDefault();
	});
}
var closePopin = function(){
//	$('embed, object').show();
	$('embed, object').each(function() {
		$(this).closest('p').css('height','auto');
		$(this).show();
	});
	$("#popinWrapper, .overlay").hide();
	$("#popinInner").html("");
}
var centerPopin = function(){
	var left 	= ($(document).width() - $("#popinWrapper").width()) / 2;
	var top 	= ($(window).height() - $("#popinWrapper").height()) / 2;
	var pos 	= getScrollPos();

	$("#popinWrapper").css({top: (top + pos[1])+"px", left: left+"px"});
	$(".overlay").css({height: ($(document).height())+"px"});
}

var getScrollPos = function(){
	var scrOfX = 0, scrOfY = 0;
	if( typeof( window.pageYOffset ) == 'number' ) {
		//Netscape compliant
		scrOfY = window.pageYOffset;
		scrOfX = window.pageXOffset;
	} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
		//DOM compliant
		scrOfY = document.body.scrollTop;
		scrOfX = document.body.scrollLeft;
	} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
		//IE6 standards compliant mode
		scrOfY = document.documentElement.scrollTop;
		scrOfX = document.documentElement.scrollLeft;
	}
	return [ scrOfX, scrOfY ];
}

var getErrorTarget = function(field) {
    if('radio' != field.type) {
        return field.getLabel();
    } else {
        return field.getElements().parent().parent().parent().prev();
    }
};

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(' <p id=' + id + '>' + field.getError() + '</p>');
    }
};

var addFieldError = function(e) {
    addErrorIcon(e.source, getErrorTarget(e.source).addClass(errorCls));
};

var removeFieldError = function(e) {
    box.dom('#' + e.source.name + 'Error').remove();
    getErrorTarget(e.source).removeClass(errorCls);
};

var addFormError = function(e) {
    var id = e.source.id + 'Error';
    var msg = '<p class=\"msg\">' + e.source.msg + '</p>';
    var error = box.dom('#' + id);
    if(error.length) {
        error.html(msg);
    } else {
        e.source.getElement().find('fieldset').prepend('<div id="' + id + '" class="' + errorCls + '">' + msg + '</div>');
    }
    e.source.getElement().addClass('error');
};

var removeFormError = function(e) {
    box.dom('#' + e.source.id + 'Error').remove();
    e.source.getElement().removeClass('error');
};

// binding des evenements
box.bind({
    'error.form': addFormError,
    'valid.form': removeFormError,
    'error.field': addFieldError,
    'valid.field': removeFieldError
});