var minlength = 6;

var userinput = "#input_username";
var passwordinput1 = "#input_password1";
var passwordinput2 = "#input_password2";

var shortPass = 'Túl rövid a jelszó (minimum ' + minlength + ' karakter)';
var badPass = 'Gyenge jelszó';
var goodPass = 'Közepesen erős jelszó';
var strongPass = 'Erős jelszó';
var sameAsUsername = 'A jelszó megegyezik a felhasználónévvel!';
var bubbleIsOn = 0;
var bubbleTimeout;

function passwordStrengthPercent(password,username) {
    score = 0;

    //password == username
    if (password.toLowerCase()==username.toLowerCase() && password.length > 0) return new Array(0, sameAsUsername);

    //password < 4
    if (password.length < minlength) return new Array(0, shortPass);

    //password length
    score += password.length * 4;
    score += ( checkRepetition(1,password).length - password.length ) * 1;
    score += ( checkRepetition(2,password).length - password.length ) * 1;
    score += ( checkRepetition(3,password).length - password.length ) * 1;
    score += ( checkRepetition(4,password).length - password.length ) * 1;

    //password has 3 numbers
    if (password.match(/(.*[0-9].*[0-9].*[0-9])/))  score += 5;

    //password has 2 sybols
    if (password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)) score += 5;

    //password has Upper and Lower chars
    if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/))  score += 10;

    //password has number and chars
    if (password.match(/([a-zA-Z])/) && password.match(/([0-9])/))  score += 15;

    //password has number and symbol
    if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([0-9])/))  score += 15;

    //password has char and symbol
    if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([a-zA-Z])/))  score += 15;

    //password is just a nubers or chars
    if (password.match(/^\w+$/) || password.match(/^\d+$/) )  score -= 10;

    if ( score < 0 )  score = 0;
    if ( score > 100 ) score = 100;

    return new Array(score, (score < 34 ? badPass : (score < 68 ? goodPass : strongPass)));
}

function checkRepetition(pLen,str) {
    res = "";
    for ( i=0; i<str.length ; i++ ) {
        repeated=true;
        for (j=0;j < pLen && (j+i+pLen) < str.length;j++)
            repeated=repeated && (str.charAt(j+i)==str.charAt(j+i+pLen));
        if (j<pLen) repeated=false;
        if (repeated) {
            i+=pLen-1;
            repeated=false;
        } else {
            res+=str.charAt(i);
        }
    }
    return res;
}

function passwordCheck1() {
    if( $(passwordinput1).val()!='' ) {
	var res = passwordStrengthPercent($(passwordinput1).val(),$(userinput).val());

	$('#result').html(res[1]);
	var perc = res[0];

	$('#colorbar').css( { backgroundPosition: "0px -"+ perc +"px" } );
	$('#colorbar').css( { width: (perc * 2.4) + "px" } );

	$('#percent').html(" " + perc  + "% ");
    }
}

function passwordCheck2() {
    var resultmsg="";

    if( $(passwordinput1).val()!=$(passwordinput2).val() ) {
	resultmsg = "Nem egyezik a jelszó és a megerősítés!";
    } else if( $(passwordinput1).val().length<minlength ) {
        resultmsg = "Túl rövid a jelszó! (minimum 6 karakter)";
    } else if( $(passwordinput2).val()==$(userinput).val() ) {
        resultmsg = "A jelszó megegyezik a felhasználónévvel!";
    } else if( !$(passwordinput1).val().match(/^[._\-0-9a-z]+$/gi) || !$(passwordinput2).val().match(/^[._\-0-9a-z]+$/gi)) {
	resultmsg = "A jelszó nem megengedett karaktereket tartalmaz!";
    }

    $('#message_password2').html(resultmsg);
}

function showBadLoginPopup4aWhile(t) {
	if( bubbleIsOn==1 ) {
	    $('#passcontainer').HideBubblePopup();
	    $('#passcontainer').FreezeBubblePopup();
	    clearTimeout(bubbleTimeout);
	    bubbleIsOn = 0;
	}

	$('#passcontainer').SetBubblePopupInnerHtml(t);
	$('#passcontainer').ShowBubblePopup();
	$('#passcontainer').FreezeBubblePopup();
	bubbleIsOn = 1;
	bubbleTimeout = setTimeout( function() {
	    $('#passcontainer').HideBubblePopup();
	    $('#passcontainer').FreezeBubblePopup();
	    bubbleIsOn = 0;
	}, 4000);
}

function ajaxcmd(cmd, data) {
    $.ajax({
	type: "POST",
	url: "go",
        dataType: "json",
        data: "cmd="+cmd+"&"+data,
        success: function(returndata) {
	    $.each(returndata, function(i, packet) {
		switch(packet.cmd) {
		    case 'show' :
			var destination = $('#'+packet.data.id);
			destination.html(packet.data.html);

			break;
		    case 'alert' :
			alert(packet.data);
			break;
		    case 'switchelements' :
			$('#'+packet.data.id1).fadeOut("fast", function() {
			    $('#'+packet.data.id2).fadeIn("fast");
			});
			break;
		    case 'resetcaptcha' :
			$('#recaptcha_response_field').val('');
			Recaptcha.reload()
			break;
		    case 'gotopage' :
			window.location.replace(packet.data);
			break;
		    case 'badloginpopup' :
			showBadLoginPopup4aWhile(packet.data);
			break;
		    case 'submitform' :
			var f = $('#'+packet.data);
			$('input[name="_isvalidated"]', f).val('yes');
			f.submit();
			break;
		    default	    :
			alert('uhh... unknown cmd ('+packet.cmd+')');
			break;
		}
	    });
        }
    });
}

jQuery(document).ready(function() {
    var bpos = "";
    var perc = 0;
    var minperc = 0;

// ************** loginform ****************
    $('#_user').focus( function() {
	if($(this).val()=="Felhasználónév") $(this).val('');
    });

    $('#_pass').css('display', 'none');
    $('#_pass_dummy').css('display', 'block');

    $('#_pass_dummy').focus( function() {
	$(this).css('display', 'none');
	$('#_pass').css('display', 'block').focus();
    });

    $('#loginform').submit( function() {
	if(this._user.value=="Felhasználónév" || this._pass.value=="" || this._user.value=="") {
	    showBadLoginPopup4aWhile('A felhasználónév és a jelszó nem lehet üres!');
	    return false;
	}

	var atpos=this._user.value.indexOf('@');
	if(atpos>-1) this._user.value = this._user.value.substr(0, atpos);

	if(this._isvalidated.value=='no') {
	    ajaxcmd('checklogin', $(this).serialize());
	    return false;
	}
    });

    $('#passcontainer').CreateBubblePopup({
	position : 'right',
	align	 : 'right',
	innerHtmlStyle: {
	    'font-size':'15px',
	    color:'#C01111', 
	    'text-align':'center',
	    'font-weight':'bold'
	},
	themeName: 	'blue',
	themePath: 	'resources/images/jquerybubblepopup-theme'
    }).FreezeBubblePopup();

// ************** forgottenform ****************
    $('#form_forgotten').submit( function() {
	var atpos=this._user.value.indexOf('@');
	if(atpos>-1) this._user.value = this._user.value.substr(0, atpos);

	ajaxcmd('sendforgotten', $(this).serialize());

	return false;
    });

// ************** forgotten_change form ****************
    $('#form_forgotten_change').submit( function() {
	ajaxcmd('forgotten_change', $(this).serialize());

	return false;
    });

// ************** contactform ****************
    $('#form_contact').submit( function() {
	ajaxcmd('contactus', $(this).serialize());

	return false;
    });

    $('input[name="hasmailbox"]').click( function() {
	if( $(this).val()=='n' ) {
	    $('#contactunamecontainer').animate({'opacity' : 0}, 500, function() {
		$('#contactunamecontainer').animate({'height' : 'toggle'}, 400)
	    });
	} else {
	    $('#contactunamecontainer').animate({'height' : 'toggle'}, 400, function() {
		$('#contactunamecontainer').animate({'opacity' : 1}, 500)
	    });
	}
	
    });

// ************** regform ****************
    $(userinput).keyup( function() { passwordCheck1(); } );
    $(passwordinput1).keyup( function() { passwordCheck1(); } );
    $(passwordinput2).blur( function() { passwordCheck2(); } );

    $('#input_username').blur( function() { ajaxcmd('checkuname', 'username='+$('#input_username').val()); } );
    $('#btn_reg_next').click( function() {
	$('#input_regphase').val("1");
	ajaxcmd('register', $('#'+$(this).attr("formid")).serialize());
    } );
    $('#btn_reg_back').click( function() {
	$('#reg_phase2').fadeOut("fast", function() {
	    $('#reg_phase1').fadeIn("fast");
	});
	return false;
    });
    $('#btn_reg_finish').click( function() {
	$('#input_regphase').val("2");
	ajaxcmd('register', $('#'+$(this).attr("formid")).serialize());
    } );

    $('div#recaptcha_image').click( function() {
	Recaptcha.reload();
    });

    if($('#reg_phase2').css('display')=="none") {
	$('#reg_phase2').css({'visibility':'hidden', 'display':'block'});
	$('#input_birthday_year').sSelect({ ddMaxHeight: '250' });
	$('#input_birthday_month').sSelect({ ddMaxHeight: '250' });
	$('#input_birthday_day').sSelect({ ddMaxHeight: '250' });
	$('#reg_phase2').css({'visibility':'visible', 'display':'none'});
    } else {
	$('#input_birthday_year').sSelect({ ddMaxHeight: '250' });
	$('#input_birthday_month').sSelect({ ddMaxHeight: '250' });
	$('#input_birthday_day').sSelect({ ddMaxHeight: '250' });
    }

// ************** help ****************
    $('div.faq_box a').click( function() {
	$('div.faq_box_opened', $(this).parents('div#long_left')).each( function() {
	    var context = $(this);
	    $('.faq_box_desc', this).slideToggle( function() {
		$('.faq_box_right_opened', context).removeClass('faq_box_right_opened').addClass('faq_box_right');
		$(context).removeClass('faq_box_opened').addClass('faq_box');
	    } );

	});

	var parentdiv = $(this).parents("div.faq_box");

	parentdiv.removeClass('faq_box').addClass('faq_box_opened');
    	$('.faq_box_right', parentdiv).removeClass('faq_box_right').addClass('faq_box_right_opened');
	$('.faq_box_desc', parentdiv).slideToggle();

	return false;
    });

    $('.infobutton').CreateBubblePopup({
	themeName: 	'all-blue',
	themePath: 	'resources/images/jquerybubblepopup-theme'
    });

    $('.infobutton').each(function() {
	$(this).data("title", $(this).attr("title")).removeAttr("title");
    });

    $('.infobutton').mouseover( function() {
	var button = $(this);
	button.ShowBubblePopup({
	    position : 'top',
	    align	 : 'right',
	    tail	 : { align: 'right' },
	    innerHtml: button.data('title'),
	    innerHtmlStyle: {
		'font-size':'12px',
		color:'#FFFFFF', 
		'text-align':'center',
		'font-weight':'bold'
	    },
	    themeName: 	'all-blue',
	    themePath: 	'resources/images/jquerybubblepopup-theme'
	});
    });

});

