﻿/*	 *	jQuery ajaxContactForm version 1.3.2 *	www.frebsite.nl *	Copyright (c) 2009 Fred Heusschen *	Licensed under the MIT license. *	http://www.opensource.org/licenses/mit-license.php */
(function($) {
    $.fn.ajaxContactForm = function(act, opts) {
        return this.each(function() {
            var t = this, f = $(this);
            f.prepend('<input type="text" name="bottrap" value="" style="display: none;" />');
            var options = $.extend({},
            $.fn.ajaxContactForm.defaults,
            opts),
            submit_btn = ($(':submit', f).length) ? $(':submit', f) : $(options.submitButton, f),
            reset_btn = ($(':reset', f).length) ? $(':reset', f) : $(options.resetButton, f),

            action = (typeof (act) == 'undefined') ? '' : act;

            $('input, textarea, select', f).each(function() {
                if ($.fn.ajaxContactForm.is_invoerveld($(this))) {
                    $(this).data("defaultvalue", $(this).val()).focus(function() {
                        $(this).addClass('focussed');
                    }).blur(function() {
                        $(this).removeClass('focussed');
                        if (!$.fn.ajaxContactForm.test_veld($(this), $(this).val())) {
                            options.falseFieldFunc(f, $(this), options.language);
                        }
                    });
                    if ($.fn.ajaxContactForm.is_default_value_veld($(this))) {
                        $.fn.ajaxContactForm.inactivate($(this));
                        if (this.tagName.toLowerCase() == 'select') {
                            $.fn.ajaxContactForm.inactivate($(this).find("option:selected"));
                            $(this).change(function() {
                                if ($(this).val() == $(this).data("defaultvalue")) {
                                    $.fn.ajaxContactForm.inactivate($(this));
                                } else $.fn.ajaxContactForm.activate($(this));
                            });
                        } else {
                            $(this).focus(function() {
                                if ($(this).val() == $(this).data("defaultvalue")) {
                                    $(this).val("");
                                    $.fn.ajaxContactForm.activate($(this));
                                }
                            }).blur(function() {
                                if ($(this).val() == '') {
                                    $(this).val($(this).data("defaultvalue"));
                                    $.fn.ajaxContactForm.inactivate($(this));
                                }
                            });
                        }
                    }
                }
            }).filter(':checkbox, :radio').change(function() {
                $(this).trigger("blur");
            });
            submit_btn.click(function() {
                f.css('opacity', '0.5');
                var miss_arr = new Array();
                var data_arr = new Array();
                $('input, textarea, select', f).each(function(i) {
                    if ($.fn.ajaxContactForm.is_invoerveld($(this))) {
                        var veld = $(this), name = veld.attr('name'), valu = veld.val();

                        if ($.fn.ajaxContactForm.is_default_value_veld($(this))) {
                            if (valu == $(this).data("defaultvalue")) valu = '';
                        }
                        if ($.fn.ajaxContactForm.test_veld(veld, valu)) {
                            if (veld.attr('type') == 'radio' && !veld.is(':checked')) valu = '';
                            if (veld.attr('type') == 'checkbox' && !veld.is(':checked')) valu = '';
                            if (valu.length > 0) {
                                data_arr.push(name + '=' + escape(valu));
                            }
                        } else {
                            miss_arr.push($(this));
                        }
                    }
                });
                //	niet goedkeuren
                if (miss_arr.length > 0 || data_arr.length == 0) {
                    options.falseMessageFunc(f, options.language);
                    f.css('opacity', '1');
                    for (var z = 0; z < miss_arr.length; z++) {
                        options.falseFieldFunc(f, miss_arr[z], options.language);
                    }
                    return false;
                    //	goedkeuren en versturen
                } else {
                    //	via ajax versturen	
                    if (action != '') {
                        data_arr.push('language=' + options.language);
                        for (var i in options.extraValues) {
                            data_arr.push(i + '=' + options.extraValues[i]);
                        }
                        $.ajax({
                            type: options.method,
                            url: action,
                            data: 'ajaxcontactform=ajaxcontactform&' + data_arr.join('&'),
                            success: function(msg) {
                                var msg = msg.split('___');
                                if (msg[0].toUpperCase() != 'Y') {
                                    options.errorMessageFunc(f, msg[1], options.language);
                                } else {
                                    options.succesMessageFunc(f, msg[1], options.language);
                                }
                                f.css('opacity', '1');
                            },


                            error: function() {
                                options.errorMessageFunc(f, 'Error, file not found', options.language);
                                f.css('opacity', '1');
                            }
                        });
                        return false;
                        //	via form versturen
                    } else {
                        f.css('opacity', '1');
                        if (t.tagName.toLowerCase() == 'form') {
                            t.submit();
                            return false;
                        }
                        return true;
                    }
                }
            });
            reset_btn.click(function() {
                $.fn.ajaxContactForm.resetForm(f);
                return false;
            });
        });
    };
    $.fn.ajaxContactForm.defaults = {
        submitButton: '#sub',
        resetButton: '#res',
        method: 'POST',
        language: 'en',
        extraValues: {},
        falseFieldFunc: function(form, veld, lang) {
            veld.effect("highlight", { color: '#b80707' }, 1000);
        },
        falseMessageFunc: function(form, lang) {
            switch (lang) {
                case 'en':
                    msg = "Polja nisu ispravno popunjena.";
                    break;
                case 'de':
                    msg = "Achtung, nicht alle Felder sind korrekt ausgefuellt.";
                    break;
                default:
                    msg = "Let op, niet alle velden zijn correct ingevuld.";
                    break;
            }
            alert(msg);
        },
        errorMessageFunc: function(form, msg, lang) {
            //ovdje
            //alert(msg + "sipu");
            //$.fn.ajaxContactForm.resetForm(form);
        $("#cf").css({ "display": "none" });
        $("#msg").css({ "display": "block" });
            //alert("poruka je poslana");
        },
        succesMessageFunc: function(form, msg, lang) {
            $.fn.ajaxContactForm.resetForm(form);
            alert(msg);
        }
    };
    $.fn.ajaxContactForm.resetForm = function(form) {
        $('input, textarea, select', form).each(function() {
            var type = this.type.toLowerCase();
            if (type == 'checkbox' || type == 'radio') this.checked = false;
            else $(this).val($(this).data("defaultvalue"));
            if ($.fn.ajaxContactForm.is_default_value_veld($(this))) {
                $.fn.ajaxContactForm.inactivate($(this));
            }
        });
    };
    $.fn.ajaxContactForm.test_v = function(name, valu, veld) {
        if (name.indexOf('__v') == -1) return true;
        if (valu.length < 1) return false;
        if ((veld.attr('type') == 'radio' || veld.attr('type') == 'checkbox') && !veld.is(':checked')) return false;
        return true;
    };
    $.fn.ajaxContactForm.test_n = function(name, valu) {
        if (name.indexOf('__n') == -1) return true;
        var vervangen = new Array(' ', '-', '+', '(', ')', '/', '\\');
        for (var i = 0; i < vervangen.length; i++) {
            valu = valu.split(vervangen[i]).join('');
        }
        if (valu.length == 0) return true;
        else if (isNaN(valu)) return false;
        return true;
    };
    $.fn.ajaxContactForm.test_e = function(name, valu) {
        if (name.indexOf('__e') == -1) return true;
        if (valu.length < 1) return true;
        if (valu.indexOf("@") != -1 && valu.indexOf(".") != -1 && valu.length > 4) {
            return true;
        } else return false;
    };
    $.fn.ajaxContactForm.test_d = function(valu, veld) {
        if (!$.fn.ajaxContactForm.is_default_value_veld(veld)) return true;
        if (veld[0].tagName.toLowerCase() == 'select') return true;
        if (valu == veld.data("defaultvalue")) return false;
        return true;
    };
    $.fn.ajaxContactForm.test_veld = function(veld, valu) {
        var name = veld.attr('name');
        if ($.fn.ajaxContactForm.test_v(name, valu, veld) && $.fn.ajaxContactForm.test_n(name, valu) && $.fn.ajaxContactForm.test_e(name, valu) && $.fn.ajaxContactForm.test_d(valu, veld)) {
            return true;
        } else return false
    };
    $.fn.ajaxContactForm.is_invoerveld = function(veld) {
        if (veld.attr('type') == 'button') return false;
        if (veld.attr('type') == 'submit') return false;
        if (veld.attr('type') == 'reset') return false;
        if (veld.attr('name') == 'bottrap') return false;
        return true;
    };
    $.fn.ajaxContactForm.is_default_value_veld = function(veld) {
        return (veld.attr('name').indexOf('__d') == -1) ? false : true;
    };
    $.fn.ajaxContactForm.inactivate = function(veld) {
        veld.addClass("inactive");
    };
    $.fn.ajaxContactForm.activate = function(veld) {
        veld.removeClass("inactive");
    };
})(jQuery);
