function getPasswordStrength(pw){
	var pwlength=(pw.length);
	if(pwlength>5)pwlength=5;
	var numnumeric=pw.replace(/[0-9]/g,"");
	var numeric=(pw.length-numnumeric.length);
	if(numeric>3)numeric=3;
	var symbols=pw.replace(/\W/g,"");
	var numsymbols=(pw.length-symbols.length);
	if(numsymbols>3)numsymbols=3;
	var numupper=pw.replace(/[A-Z]/g,"");
	var upper=(pw.length-numupper.length);
	if(upper>3)upper=3;
	var pwstrength=((pwlength*10)-20)+(numeric*10)+(numsymbols*15)+(upper*10);
	if(pwstrength<0){pwstrength=0}
	if(pwstrength>100){pwstrength=100}
	return pwstrength
}

var tip_box_has_focus=0;
var attached_form;
var pwstrapp;
var attached_pwbox={};
var password_str_handle_validate=1;
var pwminstrength=0;
var pwminstrength_fail_txt='Sorry, the password you selected cannot be used because it is too weak and would be too easy to crack.  Please select a password with strength rating of % or higher.';
var pwminstrength_tip='You can increase the strength of your password by adding UPPER CASE, numbers, and symbol characters.  You should avoid using words that are in the dictionary as <a href="http://en.wikipedia.org/wiki/Password_cracking" target="_blank">crackers</a> usually start with these first.  Currently the system requires you use a password with a strength rating of % or greater.';

function hide_password_tip_panel_if_no_box_focus(){
	if(!tip_box_has_focus){
		hide_password_tip_panel();
		tip_box_has_focus=0
	}
}

function ensurePwStrength(e,pwbox){
	var bpb=""+pwbox.value;
	var pwstrength=getPasswordStrength(bpb);
	if(pwstrength<pwminstrength){
		YAHOO.util.Event.stopEvent(e);
		alert(pwminstrength_fail_txt.replace('%',pwminstrength))
	}
}

function updatePasswordStrength_new(pwbox,pwdiv,divorderlist,noshowpanel){
	var bpb=""+pwbox.value;
	if(attached_pwbox[pwbox.id]!=1){
		YAHOO.util.Event.addListener(pwbox,"blur",function(e){setTimeout(hide_password_tip_panel_if_no_box_focus,250)},this,true);
		attached_pwbox[pwbox.id]=1
	}
	if(pwstrapp&&pwminstrengthapps[pwstrapp]){
		pwminstrength=pwminstrengthapps[pwstrapp]
	}
	if(!attached_form){
		init_passtip_dialog();
		var formEl=pwbox.form;
		if(formEl&&formEl.action&&formEl.action.length>3){
			if(self.register_validator){
				register_validator('func',function(Els){
					var pwbox=Els[0];
					var bpb=""+pwbox.value;
					var pwstrength=getPasswordStrength(bpb);
					if(pwstrength<pwminstrength){
						return false
					}else{
						return true
					}
				},[pwbox],pwminstrength_fail_txt.replace('%',pwminstrength))
			}else{
				YAHOO.util.Event.addListener(formEl,"submit",function(e){ensurePwStrength(e,pwbox)},this,true)
			}
		}
		var tipBoxEl=document.getElementById('password_tip_panel');
		if(tipBoxEl){
			YAHOO.util.Event.addListener(tipBoxEl,"blur",function(e){
				tip_box_has_focus=0;
				hide_password_tip_panel()
			},this,true);
			YAHOO.util.Event.addListener(tipBoxEl,"focus",function(e){tip_box_has_focus=1},this,true);
			var tipBoxAEls=tipBoxEl.getElementsByTagName('a');
			for(var i=0;i<tipBoxAEls.length;i++){
				YAHOO.util.Event.addListener(tipBoxAEls[i],"blur",function(e){
					tip_box_has_focus=0;
					hide_password_tip_panel()
				},this,true);
				YAHOO.util.Event.addListener(tipBoxAEls[i],"focus",function(e){tip_box_has_focus=1},this,true)
			}
		}
	attached_form=1
}
var pwstrength=getPasswordStrength(bpb);
var bars=(parseInt(pwstrength/10)*10);
var pwdivEl=document.getElementById(pwdiv);
if(!pwdivEl){
	return;
	alert('Password Strength Display Element Missing')
}
var divlist=pwdivEl.getElementsByTagName('div');
var maindiv=divlist[0].getElementsByTagName('div');
var pw_test_maxstrength=pwminstrength>0?pwminstrength:100;
var pw_test_strength=pwstrength<pw_test_maxstrength?pwstrength:pw_test_maxstrength;
var pwcolor=parseInt((pw_test_strength/pw_test_maxstrength)*3);
maindiv[0].className='pass_bar_base pass_bar_'+bars+' pass_bar_color_'+(pwcolor?pwcolor:1);
var txtdivnum=1;
if(divorderlist&&divorderlist.text>-1){
	txtdivnum=divorderlist.text
}
var txtdiv=divlist[txtdivnum];
if(txtdiv&&self.pass_strength_phrases){
	if(pwminstrength>50&&pwstrength>=50&&pwstrength<pwminstrength){bars=40}
	txtdiv.innerHTML=pass_strength_phrases[bars]+' ('+pwstrength+'/100)'
}
var ratingdivnum;
if(divorderlist&&divorderlist.rating>-1){
	ratingdivnum=divorderlist.rating
}
var ratingdiv=divlist[ratingdivnum];
if(ratingdiv&&self.pass_strength_phrases){
	ratingdiv.innerHTML='Strength: ('+pwstrength+')'
}
if(pwstrength<pwminstrength){
	if(!noshowpanel){
		show_password_tip_panel()
	}
	if(password_str_handle_validate){
		YAHOO.util.Dom.addClass(pwbox,'formverifyfailed')
	}
}else{
	hide_password_tip_panel();
	if(password_str_handle_validate){
		YAHOO.util.Dom.removeClass(pwbox,'formverifyfailed')
	}
}
}
function updatePasswordStrength(pwbox,pwdiv,divorderlist){
	var bpb=""+pwbox.value;
	var pwstrength=getPasswordStrength(bpb);
	var bars=(parseInt(pwstrength/10)*10);
var pwdivEl=document.getElementById(pwdiv);
if(!pwdivEl){
	return;
	alert('Password Strength Display Element Missing')}var divlist=pwdivEl.getElementsByTagName('div');
	var imgdivnum=0;
	var txtdivnum=1;
	if(divorderlist&&divorderlist.text>-1){txtdivnum=divorderlist.text}
	if(divorderlist&&divorderlist.image>-1){imgdivnum=divorderlist.image}
	var imgdiv=divlist[imgdivnum];
	imgdiv.id='ui-passbar-'+bars;
	var txtdiv=divlist[txtdivnum];
	if(txtdiv&&self.pass_strength_phrases){txtdiv.innerHTML=pass_strength_phrases[bars]}
}
var password_tip_panel_shown=0;
var password_tip_panel;
var password_tip_panel_initted=0;
var password_gen_panel;
var password_gen_panel_initted=0;
var password_use_panel;
var password_use_panel_initted=0;
var password_gen_pwbox;
var password_gen_update_func;
var did_password_gen=0;
var chrsets={'uppercase':[{'start':65,'end':90}],'lowercase':[{'start':97,'end':122}],'numbers':[{'start':48,'end':57}],'symbols':[{'start':33,'end':47},{'start':58,'end':64},{'start':123,'end':126}]};
var defaultallowedtxt=['lowercase','uppercase','numbers','symbols'];

function get_chr_string(chrset){
	var txt='';
	if(!chrsets[chrset]||!chrsets[chrset].length){return''}
	for(var ct=0;ct<chrsets[chrset].length;ct++){
		for(var i=chrsets[chrset][ct]['start'];i<=chrsets[chrset][ct]['end'];i++){
			txt+=String.fromCharCode(i)
		}
	}
	return txt
}

function getrand(max){return Math.floor(Math.random()*max)}

function generate_password(plength,allowedtxt,forbiddentxt){
	var passtxt='';if(!allowedtxt.length){allowedtxt=defaultallowedtxt}
	for(var i=0;i<allowedtxt.length;i++){passtxt+=get_chr_string(allowedtxt[i])}
	var ft=forbiddentxt.split('');
	for(var i=0;i<ft.length;i++){passtxt=passtxt.replace(ft[i],'')}
	if(passtxt.length==0){passtxt=' '}
	var newpass='';
	while(newpass.length<plength){newpass+=passtxt.charAt(getrand(passtxt.length))}
	return newpass
}

function open_usepass_dialog(newpass){
	init_usepass_dialog();
	document.getElementById('password_use_newpass').innerHTML=html_encode_str(newpass);
	password_use_panel.show()
}

function open_passgen_dialog(pwupdatebox,pwbox){
	init_passgen_dialog();
	password_gen_pwbox=pwbox;
	password_gen_update_func=pwupdatebox;
	password_gen_panel.show();
	if(!did_password_gen){dialogGeneratePass()}
}

function handlePassCancel(){password_gen_panel.hide()}

function handlePassSubmit(){
	password_gen_panel.hide();
	var dialogPasswordEl=document.getElementById('dialogPassword');
	var mainPasswordEl=document.getElementById(password_gen_pwbox);
	mainPasswordEl.value=dialogPasswordEl.value;
	var ElList=[mainPasswordEl];
	if(mainPasswordEl.type=="password"){
		var next_input=0;
		var allinputs=document.getElementsByTagName('input');
		for(var i=0;i<allinputs.length;i++){
			if(next_input){
				if(allinputs[i].type=="password"){
					ElList.push(allinputs[i]);
					allinputs[i].value=dialogPasswordEl.value;
					break
				}else if(allinputs[i].type=="text"){
					break
				}
			}else if(allinputs[i].id==password_gen_pwbox){
				next_input=1
			}
		}
	}
	password_gen_update_func();
	if(self.do_validate){
		for(var i=0;i<ElList.length;i++){
			if(ElList[i].form&&ElList[i].form.id){
				do_validate(ElList[i].form.id,0,0,ElList[i].id)
			}
		}
	}
	open_usepass_dialog(dialogPasswordEl.value)
}

function init_passtip_dialog(){
	if(password_tip_panel_initted){return}
	password_tip_panel_initted=1;
	password_tip_panel=new YAHOO.widget.Panel('password_tip_panel',{width:'300px',fixedcenter:false,constraintoviewport:false,close:true,draggable:true,modal:false,visible:false});
	password_tip_panel.setBody(pwminstrength_tip.replace('%',pwminstrength));
	var tdiv=document.getElementById('sdiv');
	if(!tdiv){tdiv=document.body}
	password_tip_panel.render(tdiv);
	password_tip_panel.hide();
	document.getElementById('password_tip_panel').style.display=''
}

function closeUsePass(){password_use_panel.hide()
}

function init_usepass_dialog(){
	if(password_use_panel_initted){return}
	password_use_panel_initted=1;
	password_use_panel=new YAHOO.widget.Dialog('password_use_panel',{width:'400px',fixedcenter:true,constraintoviewport:true,close:true,draggable:false,modal:false,buttons:[{text:"Close",handler:closeUsePass,isDefault:true}],visible:false});
	var tdiv=document.getElementById('sdiv');
	if(!tdiv){
		tdiv=document.body
	}
	password_use_panel.render(tdiv);
	password_use_panel.hide();
	document.getElementById('password_use_panel').style.display=''
}

function init_passgen_dialog(){
	if(password_gen_panel_initted){return}
	password_gen_panel_initted=1;
	password_gen_panel=new YAHOO.widget.Dialog('password_gen_panel',{width:'400px',fixedcenter:true,constraintoviewport:true,close:true,draggable:true,modal:false,buttons:[{text:"Use Password",handler:handlePassSubmit,isDefault:true},{text:"Cancel",handler:handlePassCancel}],visible:false});
	var tdiv=document.getElementById('sdiv');
	if(!tdiv){tdiv=document.body}
	password_gen_panel.render(tdiv);
	password_gen_panel.hide();
	document.getElementById('password_gen_panel').style.display=''
}

function handle_hide_passtip(){
	if(password_tip_panel_shown){
		password_tip_panel.hide();
		password_tip_panel_shown=0
	}
}

function hide_password_tip_panel(){handle_hide_passtip()}

function handle_hide_passgen(){}

function show_password_tip_panel(){var pwEl=document.getElementById('password');var pwRegion=YAHOO.util.Region.getRegion(pwEl);var passwdGenEl=document.getElementById('passwdGen');if(passwdGenEl){var passwdGenRegion=YAHOO.util.Region.getRegion(passwdGenEl);if(passwdGenRegion.bottom>pwRegion.bottom){pwRegion.bottom=passwdGenRegion.bottom}}password_tip_panel.moveTo(pwRegion.right+5,pwRegion.bottom+10);if(!password_tip_panel_shown){password_tip_panel.show();password_tip_panel_shown=1
	}
}

function dialogGeneratePass(){did_password_gen=1;var dialogPasswordEl=document.getElementById('dialogPassword');var pwLengthEl=document.getElementById('pwlength');var pwLength=parseInt(pwLengthEl.value);if(!pwLength||pwLength<8){pwLength=8}dialogPasswordEl.setAttribute('size',pwLength);for(var i=0;i<10;i++){dialogPasswordEl.value=generate_password(pwLength,[document.getElementById('uppercase').checked?'uppercase':'',document.getElementById('lowercase').checked?'lowercase':'',document.getElementById('numbers').checked?'numbers':'',document.getElementById('symbols').checked?'symbols':''],'\'oO0"');var bpb=dialogPasswordEl.value+'';var pwstrength=getPasswordStrength(bpb);if(pwstrength>=100){break}}updatePasswordStrength_new(dialogPasswordEl,'Dialog_passwdRating',{'text':2,'rating':3},1);password_gen_panel.show()
}

function html_encode_str(mystr){return mystr.replace(/\&/g,"&amp;").replace(/\</g,"&lt;").replace(/\>/g,"&gt;").replace(/\"/g,"&quot;");}
