/**
 * Pad a string to the specified length (emulates PHP's str_pad() function)
 * @author Travis Miller
 * @link http://www.electrumdigital.com/2009/06/a-comprehensive-javascript-pad-function/
 */
String.prototype.pad = function( padLength, padString, padType ) {

	if ( typeof padLength === "undefined" ) {
		throw new TypeError( "String.pad(): padLength is a required argument." );
	}
	
	if ( typeof padString === "undefined" ) {
		padString = " ";
	}

	if ( typeof padType === "undefined" ) {	
		padType = "right";
	} else if ( padType !== "left" && padType !== "right" && padType !== "both" ) {
		throw new TypeError( "String.pad(): argument padType must be one of \"left\", \"right\", or \"both\"." );
	}

	if ( padLength <= this.length ) {
		return this.toString();
	}
	
	var paddingLength = padLength - this.length;
	
	switch ( padType ) {
	
		case "left":
			return new Array( Math.ceil( paddingLength / padString.length + 1 ) ).join( padString ).substr( 0, paddingLength ) + this; 
			break;
			
		case "right":
			return this + new Array( Math.ceil( paddingLength / padString.length + 1 ) ).join( padString ).substr( 0, paddingLength ); 
			break;
			
		case "both":
			var rightLength = Math.ceil( paddingLength / 2 );
			var leftLength = paddingLength - rightLength;
			return new Array( Math.ceil( leftLength / padString.length + 1 ) ).join( padString ).substr( 0, leftLength ) + this + new Array( Math.ceil( rightLength / padString.length + 1 ) ).join( padString ).substr( 0, rightLength );
			break;
	
	}

};
