// Perform Ajax style server based form validation
$(function() {
    $(":input").focus(function() {
        var formElementId = $(this).attr('id');
        $("#"+formElementId).addClass('focusState');
    });
    $(":input").blur(function() {
        var formClass = $(this).parent().parent().parent().parent().parent().attr('class');
        if (formClass == 'formHeaderMessages') {
            var formElementId = $(this).attr('id');
            var formId = $(this).parent().parent().parent().parent().parent().parent().siblings('.formHeaderMessages').attr('id');
            doValidation(formElementId, formId, 'header');
        } else {
            var formElementId = formId = $(this).attr('id');
            doValidation(formElementId, formId, 'field');
        }
    });
    $("#freeAccessActive-1").click(function() {
        $("#currencyFieldRow").addClass('hiddenRegion');
    });
    $("#freeAccessActive-0").click(function() {
        $("#currencyFieldRow").removeClass('hiddenRegion');
    });
});
$(document).ready(function() {
    $(":input" ).parent().find('ul').parent().find('input').addClass('errorState');
});
function doValidation(messageId, formId, place)
{
    var url = location.href + 'validate';
    var data = {};
    $(":input").each(function() {
        data[$(this).attr('name')] = $(this).val();
    });
    if (place == 'header') {
        $.post(url,data,function(resp) {
            $("#"+formId).parent().find('.form-errors').remove();
            $("#"+formId).parent().find('.errors').remove();
            $("#"+formId).append(getErrorHtml(resp[messageId], messageId));
        },'json');
    } else {
        $.post(url,data,function(resp) {
            $("#"+formId).parent().find('.errors').remove();
            $("#"+formId).parent().append(getErrorHtml(resp[messageId], messageId));
        },'json');
    }
}
function getErrorHtml(formErrors , id)
{
    if(formErrors === undefined) {
        o ='';
    } else {
        var o = '<ul id="errors-'+id+'" class="errors">';
        for(errorKey in formErrors)
        {
            o += '<li>' + formErrors[errorKey] + '</li>';
        }
        o += '</ul>';
    }
    setFeedbackClass(formErrors, id);
    return o;
}
function setFeedbackClass(formErrors, id) {
    if(formErrors === undefined){
        $("#"+id).addClass('validState');
        $("#"+id).removeClass('focusState');
        $("#"+id).removeClass('errorState');
    } else {
        $("#"+id).addClass('errorState');
        $("#"+id).removeClass('focusState');
        $("#"+id).removeClass('validState');
    }
}
$(document).ajaxError(function(event, request, setting) {
    var re = /<br\/>|<br>/g; // for replacing all <br/> with empty string in error 404
    var txt = request.responseText.replace(re,"");
    console.log(txt,"Server Error");
});


// implement drop-down menu
$(function(){

    $("ul.dropdown li").hover(function(){

        $(this).addClass("hover");
        $('ul:first',this).css('visibility', 'visible');

    }, function(){

        $(this).removeClass("hover");
        $('ul:first',this).css('visibility', 'hidden');

    });

    $("ul.dropdown li ul li:has(ul)").find("a:first").append(" &raquo; ");

});

