// JavaScript Document
// -- FORMS INTERACTIONS INIT -----------------------------------------------------
// var debugMode = true;
if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
    debug("yoyo");
    var inField_opt = {
        'left': '8px',
        'position': 'absolute',
        'top': '3px',
        'padding': '0',
        'margin': '0'
    };
} else {
    var inField_opt = {
        'left': '8px',
        'position': 'absolute',
        'top': '4px'
    };
}
function getLang() {
    var l = "en";
    if ($('body').is('.fr')) {
        l = "fr"
    }
    return l;
}

$.fn.preload = function() {
    this.each(function(){
        $('<img/>')[0].src = this;
    });
}
$([
	'../img/ui/btn_send_loading_en_all.gif'
	,'../img/ui/btn_send_loading_en_all_small.gif'
	,'../img/ui/btn_send_loading_fr_all.gif'
	,'../img/ui/btn_send_loading_fr_all_small.gif'
	,'../img/ui/btn_send_loading_en.gif'
	,'../img/ui/btn_send_loading_fr.gif'
]).preload();

// function initForm() -------------------------------------------------------------
function initForm() {
	
    if (debugMode) {
        try {
            console.groupCollapsed('function initform n=' + $('form').length);
        } catch(err) {}
    }
    // initialise in Page forms
    $('form').each(function() {
        initFormDisplay($(this));
    });
    // method for ajax submitting
    bindContactSubmit();
    // debug("inField_opt : " + inField_opt + " >>");
    // form Other input : Free text field appear on click on last choice of the select box.
    $('form option[value=other]').click(function(event) {
        event.preventDefault();
        debug('form option[value=other].click = function');
        var selectName = $(this).parent().attr('name').replace(/]$/gi, "_other]");
        var selectId = $(this).parent().attr('id') + "_other";
        var otherInputHtml = "<div class='input select'><label for='" + selectId + "'>" + $(this).text() + "</label><input type='text' name='" + selectName + "' id='" + selectId + "' /></div>";
        // $(this).parent().blur();
        if ($('#' + selectId).length > 0) {
            $('#' + selectId).focus().css({
                'border-color': '#00B8DE'
            });
        } else {
            $(this).parents('.input.select').after(otherInputHtml);
            if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
                $('#' + selectId).css({
                    'display': 'block'
                });
                // .focus();
                $("label[for=" + selectId + "]").css({
                    'left': '6px',
                    'position': 'absolute',
                    'top': '12px'
                });
                $('#' + selectId).focus(function(event) {
                    $(this).siblings('label').css({
                        'display': 'none'
                    });
                });
                $('#' + selectId).blur(function(event) {
                    if ($(this).attr('value') == '') {
                        $(this).siblings('label').css({
                            'display': 'block'
                        });
                    }
                });
            } else {
                $('#' + selectId).css({
                    'display': 'none'
                }).fadeIn("400").focus().css({
                    'border-color': '#00B8DE'
                });
                $("label[for=" + selectId + "]").css(inField_opt).inFieldLabels().fadeIn("400");
            }
        }
        $('#' + selectId).blur(function(event) {
            $(this).css({
                'border-color': '#CCCCCC'
            });
        });
    }).parent().change(function(event) {
        debug("option[value=other].parent.change: " + $(this).html() + " ;\n val=" + $(this).val());
        if ($(this).val() != 'other') {
            var selectId = $(this).attr('id') + "_other";
            debug('selectId:' + selectId);
            $('#' + selectId).parent("div.input").remove();
        };
    });
    // prevent selecting empty value in select input
    $('form #ContactPhonetypeFreead, form #ContactProviderFreead, form #ContactRegionIdFreead, form #ContactRegionIdContest2011').change(function(event) {
        debug("$(this).val() " + $(this).val());
        if ($(this).val() == '') {
            debug("$(this).val() " + $(this).val());
            $(this).val($(this).find("option[value!='']").val());
        }
    });
    debug("$('#freead form').length : " + $('#freead form').length + " / typeof setAutoComplete : " + typeof setAutoComplete);
    if ($('.contact form').length > 0 && typeof setAutoComplete == 'function') {
        debug("Function : setAutoComplete");
        var l = getLang();
        // Freead
        setAutoComplete("#ContactCityFreead", "/" + l + "/cities/autocomplete/");
        // note : I removed Region cuz it's a list taken from DB, not elligible for auto-complete
        setAutoComplete("#ContactHeadingFreead", "/" + l + "/headings/autocomplete/");
        // Contest2011
        setAutoComplete("#ContactCityContest2011", "/" + l + "/cities/autocomplete/");
        setAutoComplete("#ContactHeadingContest2011", "/" + l + "/headings/autocomplete/");
    };
    // CLOSE debug group
    if (debugMode) {
        try {
            debug("CLOSE initFormGroup");
            console.groupEnd();
        } catch(e) {};
    };
}
// close  function initForm( )
/*
 * ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 *   Function : bindContactSubmit
 *   Arguments : NONE
 *   Description : Bind Ajax submit
 */
function bindContactSubmit() {
    if (debugMode) {
        try {
            console.groupCollapsed('!! function bindContactSubmit()');
        } catch(e) {}
    }
    $('.contact form').unbind('submit').submit(function(event) {
        event.preventDefault();
        // debug('!! SUBMIT');
        // TRACK EVENT
        if (typeof $.fn.trackEvent360 == 'function') {
            $(this).trackEvent360("FORM SUBMIT");
        }
        // avoid double click action
        $(this).unbind('submit').submit(function(event) {
            event.preventDefault();
            return false;
        });
        $.ajax({
            url: $(this).attr('action'),
            context: $(this),
            type: 'POST',
            dataType: "json",
            data: $(this).serialize(),
            beforeSend: function(x) 
			{
				showLoader(this);
				
				
                // debug('beforeSend(x)');
                // if (x && x.overrideMimeType) {
                //                     debug('x: ' + x + '; x.overrideMimeType:' + x.overrideMimeType);
                //                     // x.overrideMimeType("application/j-son;charset=UTF-8");
                //                 }
            },
            success: function(data, textStatus, XMLHttpRequest) {
                // debug('success: ');
				hideLoader(this);
				
                if (data['status'] == 'error')
                {
                    displayError(this, data);
                } 
				else 
				{
                    if ($(this).is('#ContactEditFormconsult') || $(this).is('#ContactEditForm')) {
                        var loc = document.location.href.toString();
                        var url = document.location.protocol + "//" + document.location.host.toString() + "/en/thanks";
                        debug('loc.search(/(fr|en)/i) : ' + loc.search(/(fr|en)/i));
                        if (loc.search(/(fr|en)/i) >= 0) {
                            debug("url = " + url);
                            url = loc.replace(/(fr|en)\/?.*/i, "$1/thanks");
                            debug("url = " + url);
                        }
                        debug('loc.search(/(fr|en)/i) : ' + loc.search(/(fr|en)/i));
                        debug("url = " + url);
                        document.location.href = url;
                    }
                    // TRACK EVENT
                    // @TODO: Define FORM SUBMIT SUCCESS
                    if (typeof $.fn.trackEvent360 == 'function') {
                        $(this).trackEvent360("FORM SUBMIT SUCCESS");
                    }
                    $('.error, .error-marker', this).remove();
                    $(this).css({
                        'display': 'none'
                    });
                    if (data['flagtype'] == 'contest') {
                        $('#fNameContestAnswer').text(data['namefirst']);
                        $('#nameContestAnswer').text(data['name']);
                    }
                    if (data['flagtype'] == 'freead' && (data['swid'] || data['duplicate']))
                    {
                        $(this).siblings('.msg_confirmation_duplicate').css({
                            'display': 'block'
                        });
                    }
                    else
                    {
                        $(this).siblings('.msg_confirmation').css({
                            'display': 'block'
                        });
                    }

                    // $.scrollTo($(this).siblings('.msg_confirmation'), 800);
                    // $('#info.form.contact',this).expose().load();
                    if (typeof callGadds == 'function') {
                        callGadds();
                    }
                }
                bindContactSubmit();
            },
            error: function(XMLHttpRequest, textStatus) 
			{
				hideLoader(this);
				
                debug('error: function(XMLHttpRequest,textStatus); XMLHttpRequest:' + XMLHttpRequest + "; textStatus:" + textStatus);
                debug('XMLHttpRequest.status : ' + XMLHttpRequest.status);
                debug('RE bindContactSubmit');
                bindContactSubmit();
            }
        });
        return false;
    });
    // CLOSE debug group
    if (debugMode) {
        try {
            console.groupEnd();
        } catch(e) {}
    }
}
// CLOSE function bindContactSubmit() ---------------------------------------------------------------------------------------------------
// =====================================
// = function displayError(form, data) =
// =====================================
// argument :
// - form
// - data : json object containing error messages by
function displayError(form, data) {

    if (debugMode) {
        try {
            console.groupCollapsed("function displayError(" + form + ", " + data + ")");
        } catch(e) {}
    }
    debug(data['status']);
    // don't display final msg
    $('.msg_confirmation', form).css({
        'display': 'none'
    });
    // remove all error msg
    $('.error, .error-marker', form).remove();

	
	
	
    // parse errors
    for (key in data) {
        debug("data['" + key + "'] : " + data[key]);
        var my_id = key;
        // ?
        if (my_id == 'region_id') {
            debug('my_id = ' + my_id + " ; key = " + key);
            my_id = my_id.replace('_i', 'I');
            debug('my_id = ' + my_id + " ; key = " + key);
        }
        // format names
        var fieldName = "Contact" + capitaliseFirstLetter(my_id);
        var formId = capitaliseFirstLetter($(form).parent().attr('id'));
        var fieldId = fieldName + formId;
		
        // debug
        debug("fieldName : " + fieldName);
        debug("fieldId : " + fieldId);
        switch (fieldId) {

        case "ContactTermsContest":
        case "ContactTermsFreead":
            // le cas du Term
            $('#' + fieldId).after("<span class='error-accept'>" + data[key] + "</span><span class='error-marker-accept'></span>");
            break;
        case "ContactPhoneFreead":
            // if()
        case "ContactPhoneContest":
        case "ContactPhoneConsult":
        case "ContactPhoneInfo":
            // le cas du telephone en 3 champs
            $('.phone1 input', form).after("<span class='error-marker'></span>");
            $('.phone3', form).after("<span class='error "+formId+"'>" + data[key] + "</span>");

            break;
        case "ContactAddress1numberFreead":
        case "ContactAddress1streetFreead":
        case "ContactAddress1numberContest":
        case "ContactAddress1streetContest":
            // le cas du telephone en 3 champs
            $($('#' + fieldId)).after("<span class='error-marker'></span>");
            $('.addressstreet').after("<span class='error "+formId+"'>" + data[key] + "</span>");
            break;
        default:
            if ($('#' + fieldId).parent().hasClass('select')) {
                // le cas des liste v/s selectBox
                $('#' + fieldId).parent().find('.selectBox-dropdown').after("<span class='error'>" + data[key] + "</span><span class='error-marker'></span>");
            } else {
                // dans tous les autres cas
                $('#' + fieldId).after("<span class='error "+formId+"'>" + data[key] + "</span><span class='error-marker'></span>");
            }
            break;
        }
        // if(fieldId == "ContactTermsContest" || fieldId == "ContactTermsFreead"){
        //
        // 	// le cas du Term
        // 	$('#'+fieldId).after("<span class='error-accept'>"+data[key]+"</span><span class='error-marker-accept'></span>");
        //
        //         } else if(fieldId == "ContactPhoneFreead" || fieldId == "ContactPhoneContest" || fieldId == "ContactPhoneConsult" || fieldId == "ContactPhoneInfo"){
        //
        // 	// le cas du telephone en 3 champs
        // 	$('.phone1 input').after("<span class='error-marker'></span>");
        // 	$('.phone3').after("<span class='error'>"+data[key]+"</span>");
        //
        // } else if(fieldId == "ContactAddress1numberFreead" || fieldId == "ContactAddress1streetFreead" || fieldId == "ContactAddress1numberContest" || fieldId == "ContactAddress1streetContest" ){
        //
        // 	// le cas du telephone en 3 champs
        // 	$($('#'+fieldId)).after("<span class='error-marker'></span>");
        // 	$('.addressstreet').after("<span class='error'>"+data[key]+"</span>");
        //
        // } else if ($('#'+fieldId).parent().hasClass('select')) {
        //
        // 	// le cas des liste v/s selectBox
        // 	$('#'+fieldId).parent().find('.selectBox-dropdown').after("<span class='error'>"+data[key]+"</span><span class='error-marker'></span>");
        //
        // }else {
        //
        // 	// dans tous les autres cas
        //         	$('#'+fieldId).after("<span class='error'>"+data[key]+"</span><span class='error-marker'></span>");
        //         }
    }
    // a bit of animation
    $('.error', form).css({
        'height': '0px',
        'opacity': '0'
    }).animate({
        'height': '18px',
        'opacity': '1'
    },
    'normal');
    // CLOSE debug group
    if (debugMode) {
        try {
            console.groupEnd();
        } catch(e) {}
    }
}
// CLOSE function displayError() ---------------------------------------------------------------------------------------------------
if (function_exists('jQuery.expose')) {
    debug("function_exists('jQuery.expose') :" + function_exists('jQuery.expose'));
    // Request Info exposing setup
    $('#info.form.contact').expose({
        // a custom mask ID
        maskId: 'fancybox-overlay',
        onBeforeLoad: function() {
            this.getExposed().animate({
                left: 0
            });
            $('#btn_requestInfo_slider').addClass('on');
        },
        onBeforeClose: function() {
            this.getExposed().animate({
                left: '-560px'
            });
            $('#btn_requestInfo_slider').removeClass('on');
        },
        onLoad: function() {
            this.fit();
            $('#fancybox-overlay').unbind('click').click(function(event) {
                event.preventDefault();
                $('#info.form.contact').expose().close();
            });
        },
        onClose: function() {
            // $('#fancybox-overlay, #btn_requestInfo_slider').unbind('click');
            }
        // perform exposing when image is clicked
    });
}
// Forms Display Initialisation
function initFormDisplay(form) {
    if (debugMode) {
        try {
            console.groupCollapsed("function initFormDisplay(" + form + " [formId: " + $(form).attr('id') + "] )");
        } catch(e) {}
    }
    /*
         $("div.input input:not('div.checkbox input, div.radio input'), div.input select:not('#productList div.input select')", form).mouseleave(
            function(event){
                debug("mouseleave");
                if(( $(this).attr('value') == '' )){
                        $(this).blur();
                        //$(this).siblings('label').css({'display':'block'});
                }
            })

            $("div.input input:not('div.checkbox input, div.radio input'), div.input select:not('#productList div.input select')", form).mouseenter(
            function(event){
                    debug("mouseenter");
                    $(this).siblings('label').css({'display':'none'});
                   /* if( $(this).attr('value') == '' ){
                        $(this). siblings('label').css({'display':'block'});
                }
            })
            */
    if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) {
        $("div.input input:not('div.checkbox input, div.radio input'), div.input select:not('#productList div.input select')", form)
        .focus(
        function(event) {
            debug("focus");
            $(this).siblings('label').css({
                'display': 'none'
            });
        }
        ).blur(
        function(event) {
            debug("blur");
            if ($(this).attr('value') == '') {
                $(this).siblings('label').css({
                    'display': 'block'
                });
            }
        }
        ).siblings("label:not('div.checkbox label, div.radio label')").css(inField_opt);
    } else {
        /*
            $("div.input input:not('div.checkbox input, div.radio input'), div.input select:not('#productList div.input select')", form).blur(


             function(event){
                debug("blur");
                if( $(this).attr('value') == '' ){
                        $(this).siblings('label').css({'display':'block'});
                }
            })
            */


        debug("init inFieldLabels");
        $("div.input > label:not('div.checkbox label, div.radio label, div.select label')", form).css(inField_opt).inFieldLabels({
            fadeOpacity: 0
        });
    }
    // on lance le selectBox pour le form freead!
    var options = {
        'menuTransition': 'slide',
        'menuSpeed': 'fast'
    };
    $("form select").not('#ContactProductId_ , #ContactProductId').selectBox(options);
    $("select option:selected[value!='']", form).parent().siblings('label').css({
        'display': 'none'
    });
    $("select:not('#productList div.input select')", form).change(function(event) {
        debug("$('select', form#" + form.attr('id') + ").change()");
        forceHideLabel(this);
    });
    prepopFields();
    // CLOSE debug group
    if (debugMode) {
        try {
            debug("CLOSE initFormDisplayGroup");
            console.groupEnd();
        } catch(e) {}
    }
}
function forceHideLabel(el) {
    debug("function forceHideLabel");
    if ($(el).is('label')) {
        $(el).hide().css({
            'display': 'none',
            'height': '0px'
        });
        $(el).siblings('input, select').focus();
    } else {
        $(el).siblings('label').hide().css({
            'display': 'none',
            'height': '0px'
        }).focus();
    }
}
function formatItem(row) {
    return row[1];
}
function formatResult(row) {
    return row[1];
}
function prepopFields() {
    if (debugMode) {
        try {
            console.groupCollapsed("function prepopFields()");
        } catch(e) {}
    }
    var formType = $('.form.contact').attr("id") || '';
    formType = capitaliseFirstLetter(formType);
    debug("formID = " + formType);
    if (readCookie("YPG-FirstName")) {
        $('#ContactNamefirst' + formType).val(readCookie("YPG-FirstName"));
        forceHideLabel($('#ContactNamefirst' + formType));
    };
    if (readCookie("YPG-LastName")) {
        $('#ContactName' + formType).val(readCookie("YPG-LastName"));
        forceHideLabel($('#ContactName' + formType));
    };
    if (readCookie("YPG-AccName")) {
        $('#ContactCompany' + formType).val(readCookie("YPG-AccName"));
        forceHideLabel($('#ContactCompany' + formType));
    };
    if (readCookie("YPG-SwTelno")) {
        $('#ContactPhone' + formType).val(readCookie("YPG-SwTelno"));
        forceHideLabel($('#ContactPhone' + formType));
    };
    if (readCookie("YPG-Email")) {
        $('#ContactEmail' + formType).val(readCookie("YPG-Email"));
        forceHideLabel($('#ContactEmail' + formType));
    };
    if (readCookie("YPG-Channel")) {
        $('#ContactChannel' + formType).val(readCookie("YPG-Channel"));
        forceHideLabel($('#ContactChannel' + formType));
    };
    if (readCookie("YPG-CampaignID")) {
        $('#ContactCampaignID' + formType).val(readCookie("YPG-CampaignID"));
        forceHideLabel($('#ContactCampaignID' + formType));
    };
    // CLOSE debug group
    if (debugMode) {
        try {
            console.groupEnd();
        } catch(e) {}
    }
}
/*
*   Function : setAutoComplete
*   Arguments :
				field : ,
				apiUrl : ,
				remoteField :
*   Description : Define autoComplete action.
*/
function setAutoComplete(field, apiUrl, remoteField) {
    if (debugMode) {
        try {
            console.groupCollapsed("function initAutoComplete(" + field + ", " + apiUrl + ", " + remoteField + ");");
        } catch(e) {}
    }
    // Une action autoComplete est possible meme si Province est indéfini
    debug("args : \n field :" + field + ",\n apiUrl:" + apiUrl + ",\n remoteField:" + remoteField);
    debug(field + " : " + $(field) + "\n" + $(field).html() + "\n");
    var arg = "";
    if ($(remoteField).length) {
        arg = $(remoteField).val();
    }
    $(field).autocomplete(apiUrl + arg, {
        minChars: 3,
        width: 300,
        formatItem: formatItem,
        formatResult: formatResult
    });
    $(field).result(function(event, data, formatted) {
        debug("data[" + data[0] + ',' + data[1] + "]\n" + $(this).html());
        $(this).addClass("ok");
        $(this).attr("content", data[1]);
    }).blur(function() {
        if (
        /*$(this).hasClass("ok") &&*/
        $(field).val() != "" && $(this).val() == $(this).attr("content")) {
            debug("ok");
        } else {
            $(this).val("");
            // permet la saisie de nom différents des propositions de l autocomplete SI COMMENTÉ
        }
        $(this).removeClass("ok");
        // permet la saisie de nom différents des propositions de l autocomplete SI COMMENTÉ
        //$(this).removeClass("loading");
    }).change(function(event) {
        event.preventDefault();
        $(this).addClass('loading');
        debug(field + ".val : " + $(this).val());
        if ($(this).hasClass("ok") && $(this).attr("content") != $(this).val()) {
            $(this).val("");
            $(this).removeClass("ok");
        }
    }).focus(function() {
        /*$(this).addClass('loading');*/
    });
    // change city autocomplete options when region change
    if (field == "#ContactCityFreead" && remoteField != "" && remoteField != undefined) {
        debug(remoteField + " : " + $(remoteField) + "\n" + $(remoteField).html() + "\n");
        $(remoteField).change(function() {
            debug(field + ".val : " + $(field).val());
            $(field).val("");
            debug(field + ".val : " + $(field).val());
            debug(remoteField + ".val : " + $(remoteField).val());
            // if( $("#ContactRegionId' . ucfirst($type) . '").val() != "" ){
            $(field).flushCache().setOptions({
                url: apiUrl + $(remoteField).val(),
                serviceUrl: apiUrl + $(remoteField).val()
            });
            // }
        });
    }
    if (debugMode) {
        try {
            console.groupEnd();
        } catch(e) {}
    }
}

function showLoader(context)
{
	$("#" + $(context).attr('id') + "> div.submit > input").attr('disabled', true);
	$("#" + $(context).attr('id') + "> div.submit > input").addClass('btn-send-loading ' + $(context).attr('id'));
}

function hideLoader(context)
{
	$("#" + $(context).attr('id') + "> div.submit > input").removeClass('btn-send-loading ' + $(context).attr('id'));
	$("#" + $(context).attr('id') + "> div.submit > input").removeAttr('disabled');
}
