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;

}

//