User:Func/wpfunc/blockiphelp.js

//

function BlockIpHelp {	var form = document.getElementById( 'blockip' ); if ( ! form || form.tagName != 'FORM' || ! form.wpBlockAddress ) return;

var span = document.createElement( 'SPAN' );

form.span = span; // avoid globals

//	to the right of the IP or username field //	form.wpBlockAddress.parentNode.insertBefore( span, form.wpBlockAddress.nextSibling );

function ipMessage( message, selectedIndex, color ) {	var span = document.createElement( 'SPAN' ); span.appendChild( document.createTextNode( ' ' + ( message || '' ) ) ); span.style.color = color || '#000000'; span.style.fontWeight = 'bold'; span.selectedIndex = selectedIndex || 0; return span; }	var expiry = { 'other' : 0, '15 minutes' : 1, '1 hour' : 2, '3 hours' : 3, '24 hours' : 4, '48 hours' : 5, '1 week' : 6, '1 month' : 7, 'indefinite' : 8 };	span.ipNone   = ipMessage; span.ipNot    = ipMessage( 'Not an IP.'    , expiry[ '24 hours'   ], '#009900' ); // green span.ipUnknown = ipMessage( 'Unknown IP.'  , expiry[ '1 hour'     ], '#999900' ); // yellow span.ipAOL    = ipMessage( 'AOL IP address.', expiry[ '15 minutes' ], '#990000' ); // red

span.appendChild( span.ipNot ); // place holder

span.showMessage = function( span ) {	this.replaceChild( span, this.firstChild ); }

form.wpBlockAddress.onchange = function {		var ip = IpDottedToLong( this.value );

if ( ip === null ) this.form.span.showMessage( this.form.span.ipNone   ); else if ( isNaN( ip ) ) this.form.span.showMessage( this.form.span.ipNot    ); else if ( IsAOL( ip ) ) this.form.span.showMessage( this.form.span.ipAOL    ); // what else, EarthLink? else                   this.form.span.showMessage( this.form.span.ipUnknown ); this.form.wpBlockExpiry.selectedIndex = this.form.span.selectedIndex; }	form.wpBlockAddress.onchange; } if ( window.addEventListener ) window.addEventListener( 'load', BlockIpHelp, false ); else if ( window.attachEvent ) window.attachEvent(   'onload', BlockIpHelp );

function IpDottedToLong( ip ) //-> number, Number.NaN for username, or null {	if ( ! ip ) return null;

if ( ( ip.constructor != String          ) ||	     ( (ip = ip.split( '.' )).length != 4 )  ) return Number.NaN; //	for ( var i = 0; i < 4; i++ ) if ( isNaN( ip[ i ] = Number( ip[ i ] ) ) ||		           ip[ i ] <   0                 ||		            ip[ i ] > 255                  ) return Number.NaN;

//	I "think" JavaScript numbers can handle this.... //	return	ip[ 0 ] * 256 * 256 * 256 +	// JS lacks an exponent op, I refuse to use Math.pow ip[ 1 ] * 256 * 256 + ip[ 2 ] * 256 + ip[ 3 ]; }

function IsAOL( ip ) {	    if ( ip <  1074528256 ) return false; //  64. 12. 0.  0 ..	else if ( ip <= 1074593791 ) return true;  //        .255.255

else if ( ip < 2511208448 ) return false; // 149.174. 0. 0 ..	else if ( ip <= 2511273983 ) return true;  //        .255.255

else if ( ip < 2560819200 ) return false; // 152.163. 0. 0 ..	else if ( ip <= 2560884735 ) return true;  //        .255.255

else if ( ip < 2894069760 ) return false; // 172.128. 0. 0 ..	else if ( ip <= 2899574783 ) return true;  //    .211.255.255

else if ( ip < 3277651968 ) return false; // 195. 93. 0.  0 ..	else if ( ip <= 3277684735 ) return true;  //        .127.255

else if ( ip < 3327197184 ) return false; // 198. 81. 0.  0 ..	else if ( ip <= 3327205375 ) return true;  //. 31.255

else if ( ip < 3393404928 ) return false; // 202. 67. 64. 0 ..	else if ( ip <= 3393421311 ) return true;  //        .127.255

else if ( ip < 3451650048 ) return false; // 205.188. 0. 0 ..	else if ( ip <= 3451715583 ) return true;  //        .255.255

else if ( ip < 3486007296 ) return false; // 207.200. 64. 0 ..	else if ( ip <= 3486023679 ) return true;  //        .127.255

else return false; }

//