﻿(function($) { var DEBUG_MODE = false; $.fn.textresizer = function( options )
{ if( DEBUG_MODE )
debug( this ); if( this.size() == 0 )
return; var defaultSizes = buildDefaultFontSizes( this.size() ); var settings = $.extend( { selector: $(this).selector, sizes: defaultSizes, selectedIndex: -1 }, $.fn.textresizer.defaults, options ); if( this.size() > settings.sizes.length )
{ if( DEBUG_MODE )
{ debug( "ERROR: Number of defined sizes incompatible with number of buttons => elements: " + this.size() + "; defined sizes: " + settings.sizes.length + "; target: " + settings.target );}
return;}
loadPreviousState( settings ); return this.each( function( i ) { var $this = $(this); var currSizeValue = settings.sizes[ i ]; if( settings.selectedIndex == i )
$(this).addClass( "textresizer-active" ); $this.bind( "click", { index: i }, function( e ) { settings.selectedIndex = e.data.index; applyFontSize( currSizeValue, settings ); saveState( currSizeValue, settings ); markActive( this, settings );});});}
$.fn.textresizer.defaults = { type : "fontSize", target: "body"
}; function applyFontSize( newSize, settings )
{ if( DEBUG_MODE )
debug( [ "target: " + settings.target, "newSize: " + newSize, "type: " + settings.type ].join( ", " ) ); var targetElm = $( settings.target ); switch( settings.type )
{ case "css":
targetElm.css( newSize ); break; case "cssClass":
var cssClasses = settings.sizes; $.each( cssClasses, function( i, value ) { targetElm.each( function() { if( $(this).hasClass( value ) )
$(this).removeClass( value );});}); targetElm.addClass( newSize ); break; default:
targetElm.css( "font-size", newSize ); break;}
}
function markActive( sizeButton, settings )
{ $(settings.selector).removeClass( "textresizer-active" ); $(sizeButton).addClass( "textresizer-active" );}
function buildCookieID( selector, target, prop )
{ return "JQUERY.TEXTRESIZER[" + selector + "," + target + "]." + prop;}
function getCookie( selector, target, prop )
{ var id = buildCookieID( selector, target, prop ); var cookieValue = $.cookie( id ); if( $.cookie( id + ".valueType" ) == "dict" && cookieValue )
{ var dict = {}; var dictValues = cookieValue.split( "|" ); for( var i = 0; i < dictValues.length; i++ )
{ var keyValuePair = dictValues[ i ].split( "=" ); dict[ keyValuePair[ 0 ] ] = unescape( keyValuePair[ 1 ] );}
return dict;}
return cookieValue;}
function setCookie( selector, target, prop, value )
{ var id = buildCookieID( selector, target, prop ); var cookieOpts = { expires: 365, path: "/" }; if( typeof( value ) == "object" )
{ $.cookie( id + ".valueType", "dict", cookieOpts ); var dict = value; var dictValues = new Array(); for( var key in dict )
{ dictValues.push( key + "=" + escape( dict[ key ] ) );}
var serializedVals = dictValues.join( "|" ); $.cookie( id, serializedVals, cookieOpts ); if( DEBUG_MODE )
debug( "In setCookie: Cookie: " + id + ": " + serializedVals );}
else
{ $.cookie( id, value, cookieOpts ); if( DEBUG_MODE )
debug( "In setCookie: Cookie: " + id + ": " + value );}
}
function loadPreviousState( settings )
{ if( $.cookie )
{ if( DEBUG_MODE )
debug( "In loadPreviousState(): jquery.cookie: INSTALLED" ); var selectedIndex = getCookie( settings.selector, settings.target, "selectedIndex" ); if( DEBUG_MODE )
debug( "In loadPreviousState: selectedIndex: " + selectedIndex + "; type: " + typeof(selectedIndex) ); if( selectedIndex )
settings.selectedIndex = selectedIndex; var prevSize = getCookie( settings.selector, settings.target, "size" ); if( DEBUG_MODE )
debug( "In loadPreviousState: prevSize: " + prevSize + "; type: " + typeof(prevSize) ); if( prevSize )
applyFontSize( prevSize, settings );}
else
{ if( DEBUG_MODE )
debug( "In loadPreviousState(): jquery.cookie: NOT INSTALLED" );}
}
function saveState( newSize, settings )
{ if( $.cookie )
{ if( DEBUG_MODE )
debug( "In saveState(): jquery.cookie: INSTALLED" ); setCookie( settings.selector, settings.target, "size", newSize ); setCookie( settings.selector, settings.target, "selectedIndex", settings.selectedIndex );}
else
{ if( DEBUG_MODE )
debug( "In saveState(): jquery.cookie: NOT INSTALLED" );}
}
function debug( $obj )
{ if( window.console && window.console.log )
{ if( typeof( $obj ) == "string" )
window.console.log( "jquery.textresizer => " + $obj ); else
window.console.log( "jquery.textresizer => selection count: " + $obj.size() );}
}
function buildDefaultFontSizes( numElms )
{ var size0 = 8; var mySizes = new Array(); if( DEBUG_MODE )
debug( "In buildDefaultFontSizes: numElms = " + numElms ); if( DEBUG_MODE )
{ for( var i = 0; i < numElms; i++ )
{ var value = (size0 + (i * 2)) / 10; mySizes.push( value + "em" ); if( DEBUG_MODE )
debug( "In buildDefaultFontSizes: mySizes[" + i + "] = " + mySizes[ i ] );}
}
else
{ for( var i = 0; i < numElms; i++ )
{ var value = (size0 + (i * 2)) / 10; mySizes.push( value + "em" );}
}
return mySizes;}
})(jQuery); 
