(function($){
  //if (window.useBrowserHelper == undefined) alert('useBrowserHelper 값이 없습니다.');

  if (window.useBrowserHelper == undefined) window.useBrowserHelper = true;
  if (!window.useBrowserHelper) return false;

var toggle = function(op) {
  var that = {};
  op = op || {};
  var state = {'action': 'hide', 'state' : 'finish'}
  
  that.getState = function() {
    return state.action + state.state;
  }
  that.stop = function() {
    state = {'action': state.action, 'state' : 'stop'}
    op.target.stop();
  }
  that.show = function() {
    state = {'action': 'show', 'state' : 'ing'}
    op.target
      .show()
      .stop()
      .animate(
        {top: op.top},
        op.speed || 300,
        'swing', // swing, linear, easeOutBounce
        function() {
          state = {'action': 'show', 'state' : 'finish'};
          op.overlay && op.overlay.show().animate({'opacity': 0.6}, 150, 'swing');
        }
      );
    return false;
  }  
  that.hide = function(callback) {
    state = {'action': 'hide', 'state' : 'ing'}
    var _height = op.height;
    if (typeof op.height == 'function') {
      _height = op.height();
    }
    
    op.target
      .stop()
      .animate(
        {top: (_height + op.top + 2) * -1},
        op.speed || 300,
        'swing', // swing, linear, easeOutBounce
        function() {
          op.target.hide();
          if (typeof callback == 'function') callback();
          state = {'action': 'hide', 'state' : 'finish'}
          op.overlay && op.overlay.animate({'opacity': 0}, 150, 'swing', function(){ op.overlay.hide(); });          
        }
      );
    return false;
  }

  return that;
}

var install_helper = function(op) {
  if (!op.target) { return false; }

  $.extend({
    'callbackHide': function() {},
    'checkerNone' : false
  }, op);
  
  if (op.checkerNone) {
    op.target.find('.checkbox, .checker_text').hide();
  }
  
  var that = toggle(op);
  
  var setHTML = function() {
    $(document).append('');
  }
  
  return {
    'init': function() {
      $(window).resize(setPos);
      op.closer && op.closer.click(hide);

      if (op.checker && op.checker.length != 0) {
        op.checker.attr('checked', (_storage.data().toggle != 'show'));          
        op.checker.click(check);
      }

      op.target.show();

      if (!$.browser.msie) {
        op.target.find('.info').css('textAlign', 'left');
      }
      op.target.hide();
      op.overlay.click(hide);
    },
    'show': show,
    'hide': hide,
    'isShow': isShow,
    'getState': that.getState,
    'stop'    : that.stop
  };
  
  function isShow() {
    return op.target.css('display') != 'none';
  }
  function check() {
    _storage.data({'toggle': $(this).attr('checked') ? 'hide' : 'show'});
    $(this).attr('checked') && hide();
  };
  function show() {
    setPos();
    that.show();
  };
  
  function hide(callback) {
    that.hide(callback);
  };
  
  function setPos() {
    var left = ($(window).width() - op.target.width()) / 2;
    op.target.css('left', left);
  };

};

var tell_toolbar = function(op) {
  if (!op.target) { return false; }      
  $.extend({
    'height': 38
  }, op);
  
  var helper = '', 
      that = toggle(op);
  
  return {
    'init': function() {
      helper = install_helper({
        'target' : $('#install_helper'),
        'closer' : $('#install_helper').find('span.close'),
        'checker': $('#install_helper').find('input:checkbox'),
        'overlay': $('#install_helper_overlay'),
        'height' : function() {
          var h = 0;
          $('#install_helper').children().each(function(){
            h += $(this).height();
          });
          return h;
        },
        'top': 31,
        'speed': 800,
        'callbackHide': that.hide,
        'checkerNone' : true
      });
      helper && helper.init();
      
      op.closer    && op.closer.click(hide);
      op.showlayer && op.showlayer.click(showlayer);
      
      if (op.checker) {
        op.checker.attr('checked', (_storage.data().toggle != 'show'));          
        op.checker.click(check);
      }
      
      window.setTimeout(function(){
        that.show();
        op.target.css('line-height', (op.height - 1) + 'px'); 
      }, 500);
      
    }// func init end
  };

  function check() {    
    _storage.data({'toggle': $(this).attr('checked') ? 'hide' : 'show'});

    if ($(this).attr('checked')) {
      hide();
    }
  };
    
  function hide() {
    if (!helper) {
      return false;
    }
    helper.isShow() ? helper.hide(that.hide) : that.hide();
  };

  function showlayer() {
    if (!helper) {
      return false;
    };
    ({
      'showing'    : helper.hide,
      'showstop'   : helper.show,
      'showfinish' : helper.hide,
      'hideing'    : helper.show,
      'hidestop'   : helper.hide,
      'hidefinish' : helper.show
    }[helper.getState()])();
  };
  return false;
};

var _storage;
window == parent && $(document).ready(function() {  
  _storage = $R.toggle_Storage('username');
  
  var toolbar = $('#tell_toolbar');
  var helper  = $('#install_helper');
  
  if (_storage.data().toggle == 'hide') {
    toolbar.hide();
    helper.hide();
    return false;
  }
  
  browser = $RC.browser(svc_GATE1000_helper_language);

  var Text = {
    'customer_browser' : svc_GATE1000_helper_customer_browser,
    'advice'           : svc_GATE1000_helper_advice,
    'checker_text'     : svc_GATE1000_helper_checker,
    'close'            : svc_GATE1000_helper_close,
    'version'          : browser.version(),
    'info'             : browser.info()
  }

  browser.setText(toolbar, {
    'childs': ['customer_browser', 'advice', 'checker_text', 'close', 'version'],
    'text'  : Text 
  });
  browser.setText(helper, {
    'childs': ['close', 'info'],
    'text'  : Text 
  });

  helper.find('.infoimgbox').append($('<img src="' + browser.src() + '" />'));
  
  tell_toolbar({
    'target'    : toolbar,          
    'closer'    : toolbar.find('button.close'),
    'checker'   : toolbar.find('input:checkbox'),
    'showlayer' : toolbar.find('a.advice'),
    'height'    : 31,
    'top'       : 0
  }).init();
});

})(jQuery);


