/*
 * password.js
 * 
 * Copyright (c) Takao Tagawa (dounokouno.com)
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * Since:     2009-02-23
 * Modified:  2010-12-10
 *
 * jQuery 1.6.4
 * 
*/

(function($){
	$(function(){
		// 複数個の判別
		$.password.plural();
		
		// 初期状態でパスワードを生成
		$.password.submit();
		
		// 生成ボタン
		$("#create").click($.password.submit);
		
		// 選択ボタン
		$("#select").click(function(){
			$("#password").select();
			return false;
		});
		
		// リセットボタン
		$("#reset").click(function(){
			$("#password").val("");
			return false;
		});
		
		// 複数個のパスワードを作成する場合
		$("#plural").change(function(){
			$.password.plural();
			return false;
		});
	});
	
	// 処理
	$.password={
		// 生成
		create:function(num,likes,uppercase,read){
			// -------------------------------------------------------
			// パスワード文字列
			// -------------------------------------------------------
			// 小文字
			var w = "a,b,c,d,e,f,h,i,j,k,n,m,p,r,s,t,u,v,w,x,y,z";
			var y = "えー,びー,しー,でぃー,いー,えふ,えいち,あい,じぇい,けい,えぬ,えむ,ぴー,あーる,えす,てぃー,ゆー,ぶい,だぶりゅー,えっくす,わい,ぜっと";
			// 数字
			w += ",2,3,4,5,6,7,8"
			y += ",に,さん,よん,ご,ろく,なな,はち";
			
			// -------------------------------------------------------
			// オプション
			// -------------------------------------------------------
			// 紛らわしい文字を使用する場合
			if (!likes) {
				// o,O,0
				w += ",o,0";
				y += ",おー,ぜろ";
				// 大文字
				if (!uppercase) {
					w += ",O";
					y += ",おー";
				}
				
				// l,I,1
				w += ",l,1";
				y += ",える,いち";
				// 大文字
				if (!uppercase) {
					w += ",I";
					y += ",あい";
				}
				
				// g,q,9
				w += ",g,q,9";
				y += ",じー,きゅう,きゅう";
				
				// U,V
				// 大文字
				if (!uppercase) {
					w += ",U,V";
					y += ",ゆー,ぶい";
				}
			}
			
			// 大文字を使用しない
			if (!uppercase) {
				// 大文字
				w += ",A,B,C,D,E,F,G,H,J,K,L,N,M,P,Q,R,S,T,W,X,Y,Z";
				y += ",えー,びー,しー,でぃー,いー,えふ,じー,えいち,じぇい,けい,える,えぬ,えむ,ぴー,きゅう,あーる,えす,てぃー,だぶりゅー,えっくす,わい,ぜっと";
			}		
			
			// -------------------------------------------------------
			// 処理
			// -------------------------------------------------------
			w = w.split(",");
			y = y.split(",");
			var p = {t:"", y:"", n:0, r:0};
			p.n = num;
			
			// パスワード生成
			for (var i=0;i<p.n;i++) {
				p.r = Math.floor(Math.random()*w.length);
				p.t += w[p.r];
				p.y += y[p.r];
				if (i<p.n-1) {
					p.y+=",";
				}
			}
			
			// 読みがなを表示する
			if (read) {
				p.y = "（"+p.y+"）";
			} else {
				p.y = "";
			}
			
			return p.t + p.y;
		},
		
		// 生成ボタンクリック
		submit:function(){
			// オプションを取得
			var likes = 0;
			var uppercase = 0;
			var read = 0;
			if ($("#likes").attr('checked')) {
				likes = 1;
			}
			if ($("#uppercase").attr('checked')) {
				uppercase = 1;
			}
			if ($("#read").attr('checked')) {
				read = 1;
			}
			
			// 桁数
			var num = $("#num").val();
			
			// パスワードの出力
			$("#password").val("");
			for (var i=0;i<$("#plural").val();i++) {
				$("#password").val($("#password").val() + $.password.create(num,likes,uppercase,read));
				if (i<$("#plural").val()-1) {
					$("#password").val($("#password").val()+"\n");
				}
			}
			
			// 選択状態
			$("#password").select();
			
			return false;
		},
		
		// 複数個選択の表示
		plural:function(){
			$("#password").attr("rows", $("#plural").val());
			$("#password").css("height", $("#plural").val() * 1.6 + "em");
			return false;
		}
		
	};
})(jQuery);

