// ==UserScript==
// @name           ChkPasswd
// @namespace      http://moto-mono.net
// @description    Check the entered password.
// @include        http://*
// @include        https://*
// ==/UserScript==
//
// auther:  5509 http://moto-mono.net
// version: 0.2.0 2009-08-26
//

new function(){

	// AddEventListener
	function add_event(elm,list,func){
		elm.addEventListener(list,func,false);
	}
	
	// Set Styles
	// By Hashed CSS Styles
	function set_styles(elm,hash){
		for(var c in hash){
			elm.style[c] = hash[c];
		}
	}
	
	// Add Checkbox init
	// Apply add_chkbox to all password inputs
	function add_chkbox_init(){
		var inputs = document.getElementsByTagName('input');
		for(var i=0;i<inputs.length;i++){
			if(inputs[i].type=='password'){
				add_chkbox(inputs[i]);
			}	
		}
	}
	
	// Get target offset
	function get_offset(target) {
		var top = 0,
			left = 0;
			
		do{
			top += target.offsetTop || 0;
			left += target.offsetLeft || 0;
			target = target.offsetParent;
		}while(target);
		
		return [top,left];
	}
		
	// Add Checkbox
	function add_chkbox(target){
		var body = document.body,
			chk = document.createElement('input'),
			pane = document.createElement('div'),
			
			// Set Pos
			// Set position to both chk and pane 
			set_pos = function(){
				var offset = get_offset(target);
				
				set_styles(chk,{
					top: offset[0]+'px',
					left: offset[1]+3+target.offsetWidth+'px'
				});
				
				set_styles(pane,{
					top: offset[0]+target.offsetHeight+5+'px',
					left: offset[1]+'px'
				});
			}
		
		// Checkbox
		chk.type = 'checkbox';
		set_styles(chk,{
			position: 'absolute',
			zIndex: 500
		});
		
		body.appendChild(chk);
		
		// Pane
		set_styles(pane,{
	    	border: 'solid #006FFF 1px',
	    	padding: '5px',
	    	display: 'none',
	    	color: '#fff',
	    	backgroundColor: '#73adff' ,
	    	position: 'absolute',
	    	zIndex: 500,
	    	fontFamily: 'monaco, verdana, sans-serif',
	    	fontSize: '12px',
	    	fontWeight: 'bold',
	    	lineHeight: '1.3',
	    	opacity: .9,
	    	MozBorderRadius: '5px',
	    	MozBorderShadow: '2px 2px 2px #666'
		});
		body.appendChild(pane);
		
		set_pos(); // Set Postion
		
		// When the chk is checked...
		add_event(chk,'click',function(){
			var condition = this.checked,
				val = target.value;
			if(condition && val.length>0){
				pane.style.display = 'block';
				pane.innerHTML = val;
			}else{
				pane.style.display = 'none';
			}
		});
				
		// When do the keyup on pass field
		add_event(target,'keyup',function(){
			var val = this.value;
			if(val.length>0){
				if(chk.checked){
					pane.style.display = 'block';
				}
				pane.innerHTML = val;
			}else{
				pane.style.display = 'none';
			}
		});
		
		// When window is resized, positions will be refreshed
		add_event(window,'resize',set_pos);
	}
	
	// Activate
	add_event(window,'load',add_chkbox_init);
}

