var ats$=function(element){
    if (typeof element=='string')element=document.getElementById(element);
    return element
};

var ats={
    browser:{
        IE:     !!(window.attachEvent&&!window.opera),Opera:  !!window.opera,
        WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
        Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
        Safari: navigator.userAgent.indexOf('Safari') > -1
    },
    newClass:function(){return function(){this.initialize.apply(this, arguments);}
    },
    addEvent:function(element,name,observer,useCapture) {
        element=ats$(element);
        useCapture=useCapture||false;
        if(name=='keypress'&&(ats.browser.WebKit||element.attachEvent))name='keydown';
        if(element.addEventListener)element.addEventListener(name,observer,useCapture);
        else if(element.attachEvent)element.attachEvent('on'+name,observer);
    },
    removeEvent: function(element,name,observer,useCapture) {
        element = ats$(element);
        useCapture = useCapture||false;
        if(name=='keypress'&&(ats.browser.WebKit||element.attachEvent))name='keydown';
        if(element.removeEventListener)element.removeEventListener(name,observer,useCapture);
        else if(element.detachEvent){
            try {
                element.detachEvent('on'+name,observer);
            } catch (e) {}
        }
    },
    setCookie: function(key,data,term){
        if(!navigator.cookieEnabled)return;
        var day = new Date();
        day.setTime(day.getTime() + (term * 1000 * 60 * 60 * 24));
        s2day = day.toGMTString();
        document.cookie = key + "=" + escape(data) + ";expires=" + s2day+ ";path=/";

    },
    getCookie: function(key){
        if(typeof(key) == "undefined")return "";
            key+="=";
            var scookie = document.cookie + ";";
            var start = scookie.indexOf(key);
            if (start != -1){
                end = scookie.indexOf(";", start);
                var data = unescape(scookie.substring(start + key.length, end));
            }else{
                var data='';
            }
        return data;
    }
};

Function.prototype.bind = function(object) {
    var self=this;
    var args=[];
    if(arguments)for(var i=0,n=arguments.length;i<n;i++)args.push(arguments[i]);
    object=args.shift();
    return function(event) {
        return self.apply(object,[event||window.event].concat(args));
    }
};

var fontController=ats.newClass();
fontController.prototype={
    initialize: function (){
        var arg=arguments[0];

        this.setController(arg);
        this.setTarget(arg.target);

        this.cookieName=arg.cookieName;
        this.currentValue=parseInt(ats.getCookie(this.cookieName));

        this.originalValue=arg.defaultSize;
        if(!this.currentValue){
            this.currentValue=this.originalValue;
        }

        this.rate=arg.rate;

        var name=['decrease','reset','increase'];
        this.buttonId=[arg.smallButtonId,arg.resetButtonID,arg.largeButtonId];
        this.parentButton=[];
        this.parentButtonOriginalClassName=[];

        for(i=0,n=this.buttonId.length;i<n;i++){
            ats.addEvent(this.buttonId[i], 'click', this[name[i]].bind(this), false);

            var parentButtonNode=ats$(this.buttonId[i]).parentNode;

            this.parentButton[i]=parentButtonNode;
            this.parentButtonOriginalClassName[i]=parentButtonNode.className;
        }

        this.setParentButtonClass();
    },
    setTarget: function(){
       var target=arguments[0];
       this.target=[];

       //ターゲットの指定が無いときはBodyをターゲットにする。
       if(target===''|| target==='body'){
            this.target.push(document.getElementsByTagName('body')[0]);
       }else{
            var targetList=target.split(',');
            for(var i=0,n=targetList.length;i<n;i++){
                   this.target.push(ats$(targetList[i]));
            }
       }
    },
    setController:function(arg){
        if(arg.useRender=='enable'){
            (function(){
                ats$(arguments[0]).innerHTML=arguments[1];
            })(
                arg.outputID,arg.source
            );
        }
    },
    setParentButtonClass:function(){

        var prefix='',suffix='-c',self=this;

        var classNameSetter=function(){
            for(var i=0,n=self.parentButton.length;i<n;i++){
                if(i===arguments[0]){
                    self.parentButton[i].className=prefix+self.parentButtonOriginalClassName[i]+suffix;
                }else{
                    self.parentButton[i].className=self.parentButtonOriginalClassName[i];
                }
            }

        }

        if(this.currentValue==this.originalValue){
            classNameSetter(1);
        }else if(this.currentValue<this.originalValue){
            classNameSetter(0);
        }else{
            classNameSetter(2);
        }

    },
    decrease: function (){
        if(this.rate<(this.currentValue-this.rate)){
            this.currentValue-=this.rate;
            this.setStyle();
        }
    },
    reset:function(){
        this.currentValue=this.originalValue;
        this.setStyle();
    },
    increase:function(){
        this.currentValue+=this.rate;
        this.setStyle();
    },
    setStyle:function(){
        for(var i=0,n=this.target.length;i<n;i++){
            this.target[i].style.fontSize=this.currentValue+'%';
        }

        this.setParentButtonClass();
        ats.setCookie(this.cookieName,this.currentValue,2);
    }
};

(   function(){

        var config={





        // ------------------------------------------------------------------------------------------------------------------------ここから設定です

            smallButtonId:'small',
            resetButtonID:'reset',
            largeButtonId:'large',
            rate:10,
            defaultSize:100,
            cookieName:'sktsite',
            target:'wrapper',

            useRender:'enable',
            outputID:'fontController',
            source:'<dl class="fsize clearfix"><dt class="fsize-title">文字サイズ</dt><dd class="small"><a href="javascript:;" id="small" class="small">小さく</a></dd><dd class="middle"><a href="javascript:;" id="reset" class="reset">標準</a></dd><dd class="large"><a href="javascript:;" id="large" class="large">大きく</a></dd></dl> '


        // ------------------------------------------------------------------------------------------------------------------------ここまで設定です





        };

        var head=document.getElementsByTagName('head')[0];

        var currentValue=parseInt(ats.getCookie('sktsite'));

        if(!currentValue){
            currentValue=config.defaultSize;
        };

        var element = document.createElement('style');
        element.setAttribute('type','text/css');

        if(config.target===''|| config.target==='body'){
            var target='body'
        }else{
            var targetList=[],target='';
            targetList=config.target.split(',');
            for(var i=0,n=targetList.length;i<n;i++){
                targetList[i]='#'+targetList[i]
            }
            target=targetList.join(',');
        }

        if(ats.browser.IE || ats.browser.Safari){
            var hack = document.createElement('div');
            hack.innerHTML='div<style type="text/css"><!--'+target+' { font-size: '+currentValue+'%; }--></style>';
            head.appendChild(hack.getElementsByTagName('style')[0]);
        }else{
            var test='<!--'+target+' { font-size: '+currentValue+'%; }-->';
            element.innerHTML='<!--'+target+' { font-size: '+currentValue+'%; }-->';
            head.appendChild(element);
        }
        ats.addEvent(window, 'load', function(){ new fontController(config)}, false);
    }
)();

