

var Wanoa = {

    ChangePass: {
    
    	init: function(){
    	    		
    		var form = $("resend");
    		this.form = form;
    		    	
    		Wanoa.language = form.formlang.value;    		
    		var validate = new Element("div", {'class': "validate"});
    		var text     = new Element("span", {'class': "text"});
    		var dur = 300;
    		
    		form.newpass.validate          = validate.clone().injectAfter(form.newpass);
    		form.newpass.validate.setStyle("display", "none");
    		form.newpass.validate.strength = new Element("div",{styles:{color:"#aaaaaa"}}).injectInside(form.newpass.validate);
    		form.newpass.validate.label    = text.clone().injectInside(form.newpass.validate.strength);
    		form.newpass.validate.message     = text.clone().injectInside(form.newpass.validate.strength);
    		form.newpass.validate.label.setText(Wanoa.Text.strength[Wanoa.language]+": ");
    		form.newpass.validate.bar      = new Element("div",{styles:{width:0,height:4,"margin-left":"0.3em","background-color":"#aaaaaa"}}).injectInside(form.newpass.validate);
    		form.newpass.validate.barEffect = new Fx.Styles(form.newpass.validate.bar, {transition: Fx.Transitions.Expo.easeOut,duration: 750,wait:false});
    		form.newpass.addEvent("keyup", this.checkPass.bindAsEventListener(form.newpass));

    	
    	},
    	
    	swapAnimation: function(item, activate, text){
    	
    		if(!text) text = "";
    		var text_in  = {opacity:[0,1]};
    		var icon_in  = {top:[0,0],left:[-20,0]};
    		var both_out = {top:[0,20],left:[0,0],opacity:[1,0]};
    		
    		var reset_icon = {display:"inline",top:0,left:-20,opacity:1};
    		var reset_text = {display:"inline",top:0,opacity:0};
    		
    		var remove = {display:"none"};
    		
    		var effect = item[activate];
    		var icon   = item.validate[activate];
    		
    		css = (activate == "bad") ? "text alert" : "text notify";
    		    		
    		if(error = item.getParent().getElement("span.error")){ error.remove(); }
    		    		
    		if(item.current){
    		
    			var prevEffect = item[item.current];
    			var prevIcon   = item.validate[item.current];
    		
    			if(prevIcon.getStyle("left").toInt() < 0){
    			
    				prevEffect.stop();
    				prevIcon.setStyles(remove);
    				item.message.setStyles(remove);
    				item.current = false;
    			}
    		}
    		    		   		
    		if(item.current){
    		
    			var currentIcon = item.validate[item.current];
    			item[item.current].start(both_out);
    			item.textFade.start(both_out).chain(function(){
    			    	
    			    	currentIcon.setStyle("display", "none");
    			    	if(activate != item.current) { item.message.setStyle("top", 0); return; }
    			    	item.message.setProperty("class", css);
    			    	item.message.setText(text);
    			    	
    			    	if(activate){
    					icon.setStyles(reset_icon);
	    				item.message.setStyles(reset_text);
    					effect.start(icon_in).chain(item.textFade.start.pass(text_in,item.textFade));
    				}
    			});
    			
    		} else if(activate){
    		
    			item.message.setProperty("class", css);
    			item.message.setText(text);
			icon.setStyles(reset_icon);
			item.message.setStyles(reset_text);
    			effect.start(icon_in).chain(item.textFade.start.pass(text_in,item.textFade));
    		
    		}
    		    		
		item.current = activate;    	
    	},
    	
    	checkPass: function(){
    	
    		var pass  = this.value;
    		var label = this.validate.label;
    		var text  = this.validate.message;
    		var bar       = this.validate.bar;
    		var barEffect = this.validate.barEffect;
    		var strength = 0;
    		var str;
    		var max = 16;
    		var maxWidth = 130;
    		var color;
    		
    		
    		if(pass){
    		
    			if(error = this.getParent().getElement("span.error")){ error.remove(); }
    			if(this.validate.getStyle("display") == "none") this.validate.setStyle("display", "block");
    			
    			if(label.getText() == " ") { label.setText(Wanoa.Text.strength[Wanoa.language]+": "); }
    			
    			if(pass.match(/[a-f]/)) strength+=1;
    			if(pass.match(/[A-F]/)) strength+=2;
    			if(pass.match(/[0-9]/)) strength+=2;
    			if(pass.match(/[!@#$%^&*()-=_+]/)) strength+=3;
    			if(pass.match(/[^a-fA-f0-9!@#$%^&*()-=_+]/)) strength+=3;
    			if(pass.length > 4) strength++;
    			if(pass.length > 8) strength+=2;
    			if(pass.length > 12) strength+=2;
    			
    			var per = Math.floor(strength/max*100);
    			
    			if(per < 25){ str = Wanoa.Text.weak[Wanoa.language]; color = "#ff0000"; }
    			else if(per >= 25 && per < 50){ str = Wanoa.Text.low[Wanoa.language]; color = "#f29e0a"; }
    			else if(per >= 50 && per < 75){ str = Wanoa.Text.moderate[Wanoa.language]; color = "#a5be33" }
    			else if(per >= 75 && per < 100){ str = Wanoa.Text.strong[Wanoa.language]; color = "#00aa00"; }
    			else if(per >= 100){ str = Wanoa.Text.max[Wanoa.language]; color = "#00aa00"; }
    			
    			text.setText(str);
    			text.setStyle("color", color);
    			
    			var barWidth = Math.floor(per*maxWidth/100);
    			barEffect.start({width: barWidth,"background-color":color});
    			
    		} else {
    		
    			if(label.getText()) { label.setText(" "); }
    			text.setText("");
    			
    			if(bar.getStyle("width").toInt() != 0){
    				barEffect.start({width:0,"background-color":"#aaaaaa"});
    			}
    		}
    	
    	}
    },
    Icons: {
    	loading: new Element("img", {src: "/images/graphics/icons/loading.gif"}),    	
    	ok: new Element("img", {src: "/images/graphics/icons/ok.gif"}),
    	ng: new Element("img", {src: "/images/graphics/icons/ng.gif"})    	
    	
    },
    Text: {
    	
    	invalid:	{ eng: "Address is invalid.",		jpn: "正しく入力してください。"},
    	used:		{ eng: "Address is already in use.",	jpn: "このメールアドレスでは登録できません。"},
    	valid:		{ eng: "Address can be used.",		jpn: "このメールアドレスは使用できます。"},
    	strength:	{ eng: "Strength",			jpn: "パスワードの安全性"},
    	weak:		{ eng: "Weak",				jpn: "低"},
    	low:		{ eng: "Low",				jpn: "低"},
    	moderate:	{ eng: "Moderate",			jpn: "中"},
    	strong:		{ eng: "Strong",			jpn: "高"},
    	max:		{ eng: "Max",				jpn: "最高"},
    	nomatch:	{ eng: "Does not match password.",	jpn: "入力されたパスワードが一致しません。"}
    }

}



window.addEvent("domready", Wanoa.ChangePass.init.bind(Wanoa.ChangePass));




