/*Fluid Text Resizer (June 27th, 2010)
* This notice must stay intact for usage 
* Author: Dynamic Drive at http://www.dynamicdrive.com/
* Visit http://www.dynamicdrive.com/ for full source code
*/

//jQuery.noConflict()

function fluidtextresizer(setting) {
    fluidtextresizer.count = (fluidtextresizer.count) ? ++fluidtextresizer.count : 1
    this.cookiename = "fluidtextsizer" + fluidtextresizer.count //name of cookie to use to store persistence for this text resizer instance
    this.setting = setting
    this.selectors = [] //array translating setting.targets into array of jquery selectors
    this.$controls = null
    this.defaultfontsizes = []
    this.curfontlevel = 0
    var thisobj = this
    jQuery(function($) { //on document.ready
        var els = setting.targets
        for (var i = 0; i < els.length; i++) {
            if ($(els[i]).length == 0) { //if selector doesn't yield any matched elements
                els.splice(i, 1) //delete it from setting.targets[]
                i -= 1
                continue
            }
            var curfontsize = $(els[i]).css('fontSize')
            thisobj.defaultfontsizes.push({ val: parseFloat(curfontsize), unit: curfontsize.slice(-2) }) //remember default font sizes of target elements
            thisobj.selectors.push($(els[i])) //cache selector
        }
        if (setting.controlsdiv) { //if special container for resize controls defined
            thisobj.$controls = $('#' + setting.controlsdiv).find('a[href^=#fontsize], a[href=#bigger], a[href=#smaller]')
            thisobj.$controls.each(function() {
                var $target = $(this)
                $target.data('level', $target.attr('href').replace(/(#)|(fontsize)/ig, '')) //remove "#" and "fontsize" from href to derive level
                $target.click(function() {
                    thisobj.setFontLevel($target.data('level'))
                    return false
                })
            })
        }
        if (setting.persisttype != "none") {
            var curfontlevel = fluidtextresizer.routines.getCookie(thisobj.cookiename) || 0 //get persisted font level, or 0 to indicate no change in font size
            curfontlevel = parseInt(curfontlevel)
            if (curfontlevel >= -setting.levels && curfontlevel <= setting.levels) { //if font level within range
                thisobj.setFontLevel(curfontlevel, true)
            }
        }
    })
}

fluidtextresizer.prototype = {

    setFontLevel: function(level, disableanim) {
        var s = this.setting
        var $els = this.selectors
        var level = (level == "bigger") ? this.curfontlevel + 1 : (level == "smaller") ? this.curfontlevel - 1 : parseInt(level) //calculate new font size level
        if (s.controlsdiv) { //if special container for resize controls defined
            this.$controls.filter('.selectedcontrol').removeClass('selectedcontrol').end()  //deselect previously selected control
				.filter('[href=#fontsize' + level + ']').addClass('selectedcontrol') //apply "selectedcontrol" CSS class to corresponding control
        }
        if (level < -s.levels || level > s.levels || level == this.curfontlevel) //if target level is out or range (range is int from -s.levels to +s.levels) or is current level already
            return
        for (var i = 0; i < $els.length; i++) {
            var abslevel = Math.abs(level)
            var valchange = Math.pow(1.2, abslevel) //calculate fontlevel^1.2
            //calculate new font size, which is default font size multiply or divided by valchange:
            var newfontsize = this.defaultfontsizes[i].val * (level < 0 ? 1 / valchange : level > 0 ? valchange : 1) + this.defaultfontsizes[i].unit
            $els[i].animate({ fontSize: newfontsize }, disableanim ? 0 : this.setting.animate)
        }
        if (s.persist == "session") {
            fluidtextresizer.routines.setCookie(this.cookiename, level)
        }
        this.curfontlevel = level
    }

}

fluidtextresizer.routines = {
    getCookie: function(Name) {
        var re = new RegExp(Name + "=[^;]*", "i"); //construct RE to search for target name/value pair
        return (document.cookie.match(re)) ? document.cookie.match(re)[0].split("=")[1] : null //return cookie value if found or null
    },

    setCookie: function(name, value, days) {
        var expirestr = ''
        if (typeof days != "undefined") //if set persistent cookie
            expirestr = "; expires=" + expireDate.setDate(new Date().getDate() + days).toGMTString()
        document.cookie = name + "=" + value + "; path=/" + expirestr
    }
}
