function homePage(){
    if ($('#homePage').length) {
        $('body').addClass('homePage');
    }
}

jQuery.fn.extend({
    check: function(){
        return jQuery(this).attr('checked',true);
    },
    uncheck: function(){
        return jQuery(this).attr('checked',false);
    },
    select: function(){
        return jQuery(this).attr('selected','selected');
    },
    deselect: function(){
        return jQuery(this).rmoveAttr('selected');
    },
    disable: function(){
        return jQuery(this).attr('disabled','disabled').removeAttr('enabled');
    },
    enable: function(){
        return jQuery(this).attr('enabled','enabled').removeAttr('disabled');
    }
});

jQuery.extend({
    beginsWith: function(what,withWhat){
        return (what.match("^"+withWhat)==withWhat)
    }
});

var ajaxCheckRun=false;

function replaceSubmitBtns(){
    var $sbmts = $('input[type="submit"]').filter(function(){
        return !$(this).hasClass('replaced');
    }); 
    if($sbmts.length){
        $sbmts.each(function(){
            
            var $sbmt = $(this).wrap('<span style="position:relative;float:left;"></span>');
            
            var $btn = $('<a href="#" class="arrow replacedSubmit"></a>').addClass($sbmt.attr('class')).css({
                position: 'relative',
                zIndex: 1
            }).append($('<strong>').html($sbmt.val()));
            
            $sbmt.after($btn).css({
                position: 'absolute',
                zIndex: 2,
                width: $btn.outerWidth(),
                height: $btn.outerHeight(),
                top: 0,
                left: 0,
                border: 0,
                padding: 0,
                margin: 0,
                opacity: 0,
                overflow: 'visible',
                cursor: 'pointer'
            }).addClass('replaced');
            
            if ($(this).hasClass('withCancel')) $btn.after('<a class="cancel" href=\"#\"><strong>Mégsem</strong></a>');
        });
    }
}

// formValidation custom methods

jQuery.validator.addMethod('urlWithoutHttp', function(url, element){
    var reg = new RegExp(/^(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i);
    return this.optional(element) || reg.test(url);
}, '');

jQuery.validator.addMethod('lettersonly', function(number, element){
    var reg = new RegExp(/^[a-záéíóöőúüű'.\-\s]+$/i);
    return this.optional(element) || reg.test(number);
}, 'Letters only');

jQuery.validator.addMethod('zipnum', function(number, element){
    var reg = new RegExp(/^[0-9]{4}$/);
    return this.optional(element) || reg.test(number);
}, 'Incorrect ZIP');

jQuery.validator.addMethod('cityname', function(number, element){
    var reg = new RegExp(/^[a-záéíóöőúüű\-\s]+$/);
    return this.optional(element) || reg.test(number);
}, 'Incorrect city name');

jQuery.validator.addMethod('mobileOrPhoneNum', function(number, element){
    var reg = new RegExp(/^(((20|30|70)[0-9]{7})|([1-9][0-9]{7}))$/);
    return this.optional(element) || reg.test(number);
}, 'Incorrect mibile num');

jQuery.validator.addMethod('mobilenum', function(number, element){
    var reg = new RegExp(/^[0-9]{7}$/);
    return this.optional(element) || reg.test(number);
}, 'Incorrect mibile num');

jQuery.validator.addMethod('telnum', function(number, element){
    var reg = new RegExp(/^[1-9][0-9]{7,8}$/);
    return this.optional(element) || reg.test(number);
}, 'Incorrect mibile num');

jQuery.validator.addMethod('ajaxcheck', function(number, element){
    return !ajaxCheckRun;
}, '');

// validator constructor function

function formValidation(form,rules,messages,invalidHandler,groups){
    
    if(form.length){

        form.validate({
            onfocusout: false,
            onkeyup: false,
            onclick: false,
            errorClass: 'inputError',
            wrapper: 'li',
            errorPlacement: function(error, element){
                var par=element.parent();
                var errorCnt=$('<ul class="formErrors client"></ul>').append(error);
                if (par.is('td')) element.parents('table').after(errorCnt);
                else if (element.attr('name') == 'city' ) element.prev().find('.inputBox').append(errorCnt);
                else if (element.attr('name')=='login_name' || element.attr('name')=='password') errorCnt.insertAfter($('#password'))
                else element.parent().append(errorCnt);
                
            },
            groups: groups,
            rules: rules,
            messages: messages,
            invalidHandler: invalidHandler
        });
    }
}

function ajaxEmailAddrChecker(userMail){
    var $mail = $('.defaultForm #email'),
        $loader = $('<img class="ajaxLoader" src="' + K_WEB_PATH + 'public/img/ajax-loader.gif" width="16" height="16" alt="ajax loading" title="" />'),
        curMail,origMail
        go = true;
    if($mail.val()!='') origMail = $mail.val();
    if ($mail.length) {
        $mail.blur(function(){
            
            if ($mail.next('ul').length && $mail.val() != curMail) $mail.next('ul').remove();
            if ($mail.val() != curMail && $mail.val() != origMail && $mail.val() != '') {
                
                if (/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test($mail.val())) {
                    
                    if(!$mail.next('img').length)$loader.insertAfter($mail);
                    ajaxCheckRun=true;
                    $.post(K_QUERY_PATH + 'user/emailexists' + K_QUERY_SEPARATOR + 'email=' + encodeURIComponent($mail.val()), function(data){
                        curMail = $mail.val();
                        $loader.remove();
                        ajaxCheckRun=false;
                        
                        if (data) {
                            go = false;
                            var $ul = $('<ul class="formErrors client"></ul>').html('<li class="error">Ezzel az e-mail címmel már valaki regisztrált egy My Samsung profilt.<br />Ha a tiéd az e-mail cím, jelentkezz be vele a bal oldalon!</li>');
                            if ($mail.parents('#emailModifyForm').length) {
                                if(curMail==userMail)$ul.find('.error').html('Ez a jelenlegi e-mail címed.');
                                else $ul.find('.error').html('Ezt az e-mail címet már valaki regisztrálta.<br /> Válassz másikat!');
                            }
                            if(!$mail.next('ul').length)$ul.appendTo($mail.parent());
                            $mail.parents('form').submit(function(){
                                return go;
                            });
                        }
                        else {
                            go = true;
                        }
                    });
                }
            }
            $mail.parents('form').submit(function(){
               return go; 
            });
        });
    }
}

function ajaxZipList(){
    var $zip = $('#zip').attr('maxlength',4),
        $errors = $zip.parents('.formRow').find('ul.formErrors'),
        $loader = $('<img class="ajaxLoader" src="' + K_WEB_PATH + 'public/img/ajax-loader.gif" width="16" height="16" alt="ajax loading" title="" />'),
        $city = $('#city'),
        $sel = [], $a = [], $span = [], $ul = [], zipVal = '', pageLoad=false;
        
    if ($zip.length) {
        
        function getZip(){
            $loader.insertAfter($zip);
            $.get(K_QUERY_PATH + 'user/getcitiesbyzip/' + $zip.val(), function(data){
                $loader.remove();
                data = eval(data);
                $zip.nextAll().remove();
                if($errors.length)$errors.remove();
                if (data) {
                    
                    function appendElem(elem){
                        $zip.parent().css('position', 'relative').append(elem);
                    }
                    
                    if (data.length > 1) {
                        
                        $sel = $('<select class="citySelector frmSelect"><option value=""> - Válassz - </option></select>');
                        
                        if(pageLoad)$sel.hide();
                        
                        appendElem($sel);
                        
                        $.each(data, function(){
                            $('<option value="'+this.toString()+'"></option>').html(this.toString()).appendTo($sel);
                        });
                        
                        if ($.inArray($city.val(), data) > -1) {
                            $sel.find('option').filter(function(){
                                return $(this).html()==$city.val();
                            }).select();
                        } else {
                            $sel.find('option:first').select();
                        }
                        
                        $a = $('<a class="lnk cityText" href="#">'+$sel.find('option:selected').html()+'</a>');
                        
                        $sel.before($a);
                        
                        if(!pageLoad)$a.hide();
                        
                        $a.click(function(e){
                            var $l = $(this);//.hide();
                            $sel.show().find('option:first').select();
                            e.preventDefault();
                        });
                        
                        $sel.change(function(){
                            var $s = $(this).hide();
                            var value = $s.find('option:selected').html(); 
                            $a.html(value).show();
                            $city.val(value);
                            if($s.nextAll('ul').length)$s.nextAll('ul').remove();
                        }).keydown(function(e){
                            if (e.keyCode == 13) {
                                var $s = $(this).hide();
                                var value = $s.find('option:selected').html();
                                $a.html($s.val()).show();
                                $city.val($s.val());
                            }
                        });
                        
                        var cityValue = ($sel.val()=='') ? '': $sel.find('option:selected').html();  
                        
                        $city.val(cityValue);
                    }
                    else {
                        if (data.length) {
                            
                            $span = $('<span class="cityText"></span>').html(data[0]);
                            
                            appendElem($span);
                            
                            $city.val(data[0]);
                        }
                        else {
                            var msg = (pageLoad) ? 'Kérjük ellenőrizd az irányítószámod, majd mentsd el adataid!' : 'Nem létező irányítószám!';
                            $ul = $('<ul class="formErrors client"></ul>').html('<li class="error">'+msg+'</li>').appendTo($zip.parent());
                            $city.val('');
                        }
                    }
                }
                pageLoad = false;
            });
        }
        
        if($zip.val().length>3){
            pageLoad = true;
            getZip();
            zipVal = $zip.val();
        }
        
        $zip.keyup(function(){
            if ($(this).val().length > 3) {
                if ($zip.next().length && zipVal!=$(this).val())$zip.next().remove();
                if(zipVal!=$(this).val())getZip();
                zipVal = $(this).val();
            }
            if($(this).val().length < 4) {
                $(this).next().remove();
                $city.val('');
                zipVal = '';
            }
        }).blur(function(){
            if($(this).val()=='' || $(this).val().length<4){
                if($sel.length)$sel.remove();
                if($ul.length)$ul.remove();
                if($span.length)$span.remove();
                $city.val('');
                zipVal = '';
            } else {
                if(zipVal!=$(this).val())getZip();
            }
        });
    }
}

function purchasePlace(){
    var $sel=$('#purchase_place');
    var $nxt=$sel.parents('.formRow').next('.formRow');
    if ($sel.find('option:selected').html()=='Online vásárlás'){
        $nxt.find('label').removeClass('dn');
        $nxt.slideDown();
    }
       
    $sel.change(function(){
        if ($(this).find('option:selected').html()=='Online vásárlás'){
            $nxt.find('label').removeClass('dn');
            $nxt.slideDown('fast');
        }   
        else {
            $('#purchase_url').val('');
            $nxt.slideUp('fast').find('.formErrors').remove();
            
        } 
    });
    
    $('#purchase_url').blur(function(){
        var u = $(this).val();
        if($.beginsWith(u,'http://'))u=u.replace('http://','');
        if($.beginsWith(u,'https://'))u=u.replace('https://','');
        $(this).val(u);
    });
    
}


function linkInLabel () {
    // label-en belüli a tagek kattintása ne váltsa ki a label kattintást
    $('label').filter(function(){
        return $(this).children('a').length>0;
    }).click(function(e){
        if(e.target.nodeName=='A'){
            e.stopPropagation();
            e.preventDefault();
            if(e.target.target=='_blank')window.open(e.target.href);
            else window.location.href = e.target.href;
        }
    });
}

function historyBackButtons(){
    $('.cancel, .back').click(function(e){
        history.back();
        e.preventDefault();
    })
}

jQuery(function($){
    linkInLabel();
    replaceSubmitBtns();
    ajaxEmailAddrChecker();
    ajaxZipList();
    purchasePlace();
    homePage();
    historyBackButtons();
});

