/**
 * 密码安全度
 * @param {Object} showed boolean值
 * @version 1.0
 */
function PS(showed){	
	this.showed = (typeof(showed) == "boolean")?showed:true; //是否显示密码安全度
	
	this.styles = new Array();	
	this.styles[0] = {backgroundColor:"#EBEBEB",borderLeft:"solid 1px #FFFFFF",borderRight:"solid 1px #BEBEBE",borderBottom:"solid 1px #BEBEBE"};	
	this.styles[1] = {backgroundColor:"#FF4545",borderLeft:"solid 1px #FFFFFF",borderRight:"solid 1px #BB2B2B",borderBottom:"solid 1px #BB2B2B"};
	this.styles[2] = {backgroundColor:"#FFD35E",borderLeft:"solid 1px #FFFFFF",borderRight:"solid 1px #E9AE10",borderBottom:"solid 1px #E9AE10"};
	this.styles[3] = {backgroundColor:"#95EB81",borderLeft:"solid 1px #FFFFFF",borderRight:"solid 1px #3BBC1B",borderBottom:"solid 1px #3BBC1B"};
	
	this.labels= ['low','medium','high'];

	this.divName = "pwd_div_"+Math.ceil(Math.random()*100000);
	this.minLen = 4;
	
	this.width = "160px";
	this.height = "16px";
	
	this.content = "";
	
	this.selectedIndex = 0;
	
	this.init();	
}

/**
 * 初始化密码安全度提示框
 * @version 1.0
 */
PS.prototype.init = function(){
	var s = '<table cellpadding="0" id="'+this.divName+'_table" cellspacing="0" style="width:'+this.width+';height:'+this.height+';">';
	s += '<tr>';
	for(var i=0;i<3;i++){
		s += '<td id="'+this.divName+'_td_'+i+'" width="33%" align="center"><span style="font-size:1px">&nbsp;</span><span id="'+this.divName+'_label_'+i+'" style="font-family: Courier New, Courier, mono;font-size: 12px;color: #999999;">'+this.labels[i]+'</span></td>';
	}	
	s += '</tr>';
	s += '</table>';
	this.content = s;
	if(this.showed){
		document.write(s);
		this.copyToStyle(this.selectedIndex);
	}	
}

/**
 * 设置密码安全度提示框样式
 * @version 1.0
 */
PS.prototype.copyToObject = function(o1,o2){
	for(var i in o1)
		o2[i] = o1[i];
}

/**
 * 设置密码安全度提示框样式
 * @version 1.0
 */
PS.prototype.copyToStyle = function(id){
	this.selectedIndex = id;
	for(var i=0;i<3;i++){
		if(i == id-1){
			this.$(this.divName+"_label_"+i).style.color = "#000000";
		}else{
			this.$(this.divName+"_label_"+i).style.color = "#999999";
		}
	}
	for(var i=0;i<id;i++)
		this.copyToObject(this.styles[id],this.$(this.divName+"_td_"+i).style);			
	
	for(;i<3;i++)
		this.copyToObject(this.styles[0],this.$(this.divName+"_td_"+i).style);
}

/**
 * document.getElementById方法的简写形式
 * @version 1.0
 */
PS.prototype.$ = function(s){
	return document.getElementById(s);
}

/**
 * 设置密码安全度提示框大小
 * @version 1.0
 */
PS.prototype.setSize = function(w,h){
	this.width = w;
	this.height = h;
}

/**
 * 设置密码安全度提示最小长度
 * @version 1.0
 */
PS.prototype.setMinLen = function(n){
	if(isNaN(n))
		return ;
		
	n = Number(n);
	if(n>1)
		this.minLen = n;
}

/**
 * 设置密码安全度提示框样式
 * @version 1.0
 */
PS.prototype.setStyles = function(){
	if(arguments.length == 0){
		return ;
	}
	for(var i=0;i<arguments.length && i < 4;i++){
		this.styles[i] = arguments[i];
	}
	this.copyToStyle(this.selectedIndex);
}

/**
 * 设置密码安全度提示框显示的位置
 * @version 1.0
 */
PS.prototype.write = function(s){
	if(this.showed)
		return ;
	
	var n = (s == 'string') ? this.$(s) : s;
	if(typeof(n) != "object")
		return ;
		
	n.innerHTML = this.content;
	this.copyToStyle(this.selectedIndex);
}

/**
 * 密码框中输入时调用
 * @version 1.0
 */
PS.prototype.update = function(s){
	if(s.length < this.minLen){
		this.copyToStyle(0);
		return;
	}
	var ls = this.getLevel(s);
	 switch(ls) { 
		 case 1:
			 this.copyToStyle(1);
			 break;
		 case 2:
			 this.copyToStyle(2);
			 break;
		 case 3:
			 this.copyToStyle(3);
			 break;
		 default:
			 this.copyToStyle(0);
	 }
}

/**
 * 验证输入的密码安全级别
 * 安全级别:
 * 		低:(字母|数字|长度<4)  
 * 		中:(字母-数字-8<长度>4)  
 * 		高:(字母-数字-长度>7)	
 * @param {Object} s
 * @return number 安全级别
 */
PS.prototype.getLevel = function(s){
	var ls = 0;
	//输入字符小于4
	if (s.length < 4)
		return 0;

	//输入字符为字母
	if (s.match(/[a-z]/ig))
		ls++;
	
	//输入字符为数字
	if (s.match(/[0-9]/ig))
		ls++;
	
 	if (s.match(/(.[^a-z0-9])/ig))
		ls++;
	
	//长度小于6为不安全
	if (s.length < 6 && ls > 1)
		ls--;
	
	//长度大于18,安全
	if (s.length >= 18 && ls == 2)
		ls++;
		
	return ls;
}
