
/* Setup
============================================================ */

$(document).ready(function() {
  $().styleswitcher();
});





(function($)
{	


  
  /* Styleswitcher
  ============================================================ */
  
  $.fn.styleswitcher = function() {
    var ss = $.fn.styleswitcher;
    ss.setup_styleswitcher();
    ss.setup_fields();
    ss.setup_color_sync();
    ss.setup_reset_button();
  }
  
  
  
  /* Defaults
  ------------------------------------------------------------ */
  
  $.fn.styleswitcher.options = {
    ss:           '#styleswitcher',
    open_button:  '#ss_open-button',
    colorpicker:  '.colorpicker',
    layout_color_selector:  '#ss_layout-color-selector div',
    layout_def_color:       '#3e545c',
    content_color_selector: '#ss_content-color-selector div',
    content_def_color:      '#3e545c',
    color_sync_option:      '#ss_color-sync',
    google_heading_font_css_file: '#google_heading_font_css_file',
    google_body_font_css_file:    '#google_body_font_css_file',
    google_font_option_class: 'google-font',
    heading_font_select:   '#ss_heading-font',
    body_font_select:      '#ss_body-font',
    body_font_size_select: '#ss_body-font-size',
    reset_button:          'input[type=reset]#ss_reset',
    cookie_name:  'polyon_ss'
  };
  
  
  
  /* Setup StyleSwitcher
  ------------------------------------------------------------ */
  
  $.fn.styleswitcher.setup_styleswitcher = function() {
    var ss = $.fn.styleswitcher;
    var o  = ss.options;
    
    // Peekaboo
    var peekaboo = $().multi_cookie(o.cookie_name, 'peekaboo');
    if(peekaboo == false && $('body').hasClass('with-topbar-content')) {
      $(o.ss).css('left', 0).delay(2300).animate({left: '-205'}, 250);
      $().multi_cookie(o.cookie_name, 'peekaboo', 'true');
    }
    
    // Mouse Enter
		$(o.open_button).mouseenter(function(){
			$(o.ss).animate({left: '0'}, 250); 
		});
		
		// Mouse Leave
		var mouseout_elements = '.wrapper, header.main, #topbar, #welcomebar, #main, footer.main';
		$(mouseout_elements).mouseenter(function(){
			$(o.ss).animate({left: '-205'}, 250); 
		});
  }

  
  
  
  /* Setup Fields
  ------------------------------------------------------------ */
  
  $.fn.styleswitcher.setup_fields = function() {
    var ss = $.fn.styleswitcher;
    var o  = ss.options;
    
    // Color
    ss.setup_colorpicker(o.layout_color_selector, o.layout_def_color, 'set_layout_color');
    ss.setup_colorpicker(o.content_color_selector, o.content_def_color, 'set_content_color');
    ss.add_body_class_by_checkbox(o.color_sync_option, 'color-sync');
    
    // Fonts
    ss.setup_font_by_select(o.heading_font_select, '#topbar #punchline, ' +
                                                   'h2, h3, h4');
    ss.setup_font_by_select(o.body_font_select, '#body-container, '+
                                                'input, textarea, ' +
                                                'input[type=checkbox] + label, ' +
                                                'input[type=radio] + label, ' +
                                                'blockquote p.source, ' +
                                                'nav.main > ul > li > a');
    ss.setup_body_font_size('#body-container');
    
    // Generic
    ss.add_body_class_by_checkbox('#ss_minimal', 'minimal');
    ss.add_body_class_by_checkbox('#ss_no-rounded-corners', 'no-rounded-corners');
    
    // Content
    ss.add_body_class_by_checkbox('#ss_no-header-top-border', 'no-header-top-border');
    ss.add_body_class_by_checkbox('#ss_simple-nav', 'simple-nav');
    ss.remove_body_class_by_checkbox('#ss_simple-nav', 'button-nav');
    ss.add_body_class_by_checkbox('#ss_no-topbar', 'no-topbar');
    ss.add_body_class_by_checkbox('#ss_no-topbar-shine', 'no-topbar-shine');
    ss.disable_field_by_checkbox('#ss_no-topbar', '#ss_no-topbar-shine');
    ss.add_body_class_by_checkbox('#ss_show-header-bottom-border', 'show-header-bottom-border');
    ss.enable_field_by_checkbox('#ss_no-topbar', '#ss_show-header-bottom-border');
    
    // Footer
    ss.add_body_class_by_checkbox('#ss_no-footer', 'no-footer');
    ss.add_body_class_by_checkbox('#ss_no-footer-top-border', 'no-footer-top-border');
    ss.disable_field_by_checkbox('#ss_no-footer', '#ss_no-footer-top-border');
    ss.add_body_class_by_checkbox('#ss_no-footerbar', 'no-footerbar');
    
    // Disable Fields on Frontpage
    if($('body').hasClass('with-topbar-content')) {
      $('#ss_no-topbar').attr('disabled', true);
      //$('#ss_no-topbar-shine').attr('disabled', true);
      $('#ss_show-header-bottom-border').attr('disabled', true);
    }
  }
  
  
  
  /* Setup Color Sync
  ------------------------------------------------------------ */
  
  $.fn.styleswitcher.setup_color_sync = function() {
    var ss = $.fn.styleswitcher;
    var o  = ss.options;
    
    $(o.color_sync_option).bind('click change', function() { // No keyup to let Content Color live after page refresh
      if($(this).is(':checked')) {
        ss.set_content_color($(o.layout_color_selector).css('backgroundColor'));
      }
    });
  }
  
  
  
  /* Setup Reset Button
  ------------------------------------------------------------ */
  
  $.fn.styleswitcher.setup_reset_button = function() {
    var ss = $.fn.styleswitcher;
    var o  = ss.options;
    
    $(o.reset_button).bind('click', function() {
      // Reset all checkboxes
      $(o.ss).find('input[type=checkbox]').each(function() {
        ss.set_check('#'+$(this).attr('id'), false);
      });
      
      // Reset Selects to first option
      $(o.heading_font_select).val($(o.heading_font_select+' option:first').val()).keyup();
      $(o.body_font_select).val($(o.body_font_select+' option:first').val()).keyup();
      $(o.body_font_size_select).val($(o.body_font_size_select+' option:nth-of-type(4)').val()).keyup();
      
      // Reset Color
      ss.set_layout_color(o.layout_def_color);
      ss.set_content_color(o.content_def_color);
      
      //return false;
    });
  }
  
  
  
  /* Setup Font by Select
  ------------------------------------------------------------ */
  
  $.fn.styleswitcher.setup_font_by_select = function(select_id, css_tags) {
    var ss     = $.fn.styleswitcher;
    var o      = ss.options;
    var select = $(select_id);
    
    select.bind('click change keyup', function() {
      if(select.val() != '') {
        // If Google Web Font is selected
        if(ss.set_google_web_font(select_id, select.val()))
          var font = $(select_id + ' option:selected').text();
        else
          var font = select.val();
        // To preserve SS font, get font-family
        var ss_ff = $(o.ss).css('fontFamily');
        // Set font
      	$(css_tags).css('fontFamily', font+', sans-serif');
      	// Override SS font-family with preserved font
      	$(o.ss+' label,'+o.ss+' h5,'+o.reset_button).css('fontFamily', ss_ff);
      	// Save status to cookie
        $().multi_cookie(o.cookie_name, select_id, select.val());
      }
    });
    
    // Set Select value automatically after load
    ss.set_select_option_by_cookie(select_id);
  }
  
  
  
  /* Setup Font by Select
  ------------------------------------------------------------ */
  
  $.fn.styleswitcher.setup_body_font_size = function(css_tags) {
    var ss = $.fn.styleswitcher;
    var o  = ss.options;
    $(o.body_font_size_select).bind('click change keyup', function() {
      // Preserve font-size of elements that don't belong to the body text
      var h2_fs = $('h2').css('fontSize');
      var h3_fs = $('h3').css('fontSize');
      var h4_fs = $('h4').css('fontSize');
      var widget_h3_fs = $('.widget h3').css('fontSize');
      var punchline_fs = $('#topbar #punchline').css('fontSize');
      
      // Set font-size
    	$(css_tags).css('fontSize', $(o.body_font_size_select).val());
    	
    	// Overwrite font-size of elements that don't belong to the body text 
    	$('h2').css('fontSize', h2_fs);
    	$('h3').css('fontSize', h3_fs);
    	$('h4').css('fontSize', h4_fs);
    	$('.widget h3').css('fontSize', widget_h3_fs);
      $('#topbar #punchline').css('fontSize', punchline_fs);
      
      $().multi_cookie(o.cookie_name, o.body_font_size_select, $(o.body_font_size_select).val());
    });
    
    // Set Select value automatically after load
    ss.set_select_option_by_cookie(o.body_font_size_select);
  }
  
  
  
  /* Set Google Web Font
  ------------------------------------------------------------ */
  
  $.fn.styleswitcher.set_google_web_font = function(select_id, font) {
    var o = $.fn.styleswitcher.options;
    
    // If Heading Font is selected
    if(select_id == o.heading_font_select) {
      // Get selected Option
      var heading_select_option = $(o.heading_font_select + ' option:selected');
      // If option contains a Google Web Font
      if(heading_select_option.attr('class') == o.google_font_option_class) {
        // Get Font from Google
        $(o.google_heading_font_css_file).attr('href', 'http://fonts.googleapis.com/css?family=' + font);
        return true;
      }
      return false;
    }
    // If Body Font is selected
    else if(select_id == o.body_font_select) {
      // Get selected Option
      var body_select_option = $(o.body_font_select + ' option:selected');
      // If option contains a Google Web Font
      if(body_select_option.attr('class') == o.google_font_option_class) {
        // Get Font from Google
        $(o.google_body_font_css_file).attr('href', 'http://fonts.googleapis.com/css?family=' + font);
        return true;
      }
      return false;
    }
    return false;
  }
  
  
  /* Setup ColorPicker
  ------------------------------------------------------------ */
  
  $.fn.styleswitcher.setup_colorpicker = function(selector_id, def_color, the_function) {
    var ss = $.fn.styleswitcher;
    var o  = ss.options;
    var cookie_color = $().multi_cookie(o.cookie_name, selector_id);
    var color        = def_color;
    
    // Set Color from Cookie
    if(cookie_color != null && cookie_color != '')
      var color = cookie_color;
    
    // Set Color Selector
    $.fn.styleswitcher[the_function](color);
  
    // Setup ColorPicker
    $(selector_id).ColorPicker({
      color: color,
    	onShow: function (colpkr) { $(colpkr).fadeIn(150);  return false; },
    	onHide: function (colpkr) { $(colpkr).fadeOut(150); return false; },
    	onChange: function (hsb, hex, rgb) {
    	  var hex_color = '#' + hex;
        $.fn.styleswitcher[the_function](hex_color);
    	}
    });
  }
  
  
  
  /* Set Layout Color
  ------------------------------------------------------------ */
  
  $.fn.styleswitcher.set_layout_color = function(color) {
    var ss = $.fn.styleswitcher;
    var o  = ss.options;
    
    // Set Color for Color Selector
    $(o.layout_color_selector).css('background', color);
    // Save Color to Cookie
		$().multi_cookie(o.cookie_name, o.layout_color_selector, color);
    
    var css_tags = '#topbar';
    $(css_tags).css('backgroundColor', color);
    
    css_tags = 'header.main, footer.main';
    $(css_tags).css('border-top-color', color);
    
    css_tags = 'header.main';
    $(css_tags).css('border-bottom-color', color);
    
    // Sync Colors?
    if($(o.color_sync_option).is(':checked')) {
      ss.set_content_color(color);
    }
  }
  
  
  
  /* Set Content Color
  ------------------------------------------------------------ */
  
  $.fn.styleswitcher.set_content_color = function(color) {
    var o = $.fn.styleswitcher.options;
    
    // Set Color for Color Selector
    $(o.content_color_selector).css('background', color);
    // Save Color to Cookie
		$().multi_cookie(o.cookie_name, o.content_color_selector, color);
    
    var css_tags = '.dropcap.colored,' +
                   '#welcomebar h2,' +
                   '.entry-content a:not(.button),' +
                   '.paginator .current,' +
                   '#comments .comment a.comment-reply-link,' +
                   '#comments .comment .main cite a,' +
                   '.contact-widget a,' +
                   '.twitter-widget a,' +
                   'nav.main > ul > li.current > a,' +
                   '#footerbar a';
    
    $(css_tags).css('color', color);
    
    // Hover Color
    css_tags = 'h2 a, h3 a, h4 a, h5 a, h6 a,' +
               'a.passive,' +
               '#comments .comment a.comment-reply-link,' +
               '#comments .comment .main cite a,' +
               '#comments .comment .main a.meta-data,' +
               '.widget ul li a,' +
               '.list-widget ul li a,' +
               '.double-list-widget ul li a,' +
               '.social-widget ul li a,' +
               '.posts-widget ul li .post-title,' +
               '.posts-widget ul li .post-date,' +
               'button,' +
               'a.button,' +
               'input[type=submit],' +
               'input[type=reset]:not(#ss_reset),' +
               '.paginator a,' +
               '.paginator span,' +
               'nav.main ul li a';
    css_tags = css_tags.split(',');
    $.each(css_tags, function(key, value) {
      var def_color = $(value).css('color');
      $(value).hover(
        function(){
          $(this).css({ color: color }); //mouseover
        },
        function(){
          $(this).css({ color: def_color }); // mouseout
        }
      );
    });
    
    css_tags = '.highlight, .dropcap-circle.colored, .dropcap-square.colored';
    $(css_tags).css('backgroundColor', color);
    
    css_tags = '.entry-content tfoot tr th, .entry-content tfoot tr td';
    $(css_tags).css('border-top-color', color);
    
    css_tags = '.entry-content table thead tr th';
    $(css_tags).css('border-bottom-color', color);
  }
  
  
  
  /* Add Body Class by Checkbox
  ------------------------------------------------------------ */
  
  $.fn.styleswitcher.add_body_class_by_checkbox = function(checkbox, body_class) {
    var ss = $.fn.styleswitcher;
    var o  = ss.options;
    var checkbox_id = checkbox
    var checkbox    = $(checkbox);
    
    // Set checkbox automatically after page load
    ss.set_checkbox_by_cookie(checkbox_id);
    
    if(checkbox.is(":checked"))
      $('body').addClass(body_class);
    
    checkbox.bind('click change keyup', function() {
      checkbox_id = '#'+$(this).attr('id');
      if($(this).is(":checked")) {
        $('body').addClass(body_class);
        $().multi_cookie(o.cookie_name, checkbox_id, 'true');
      }
      else {
        $('body').removeClass(body_class);
        $().multi_cookie(o.cookie_name, checkbox_id, 'false');
      }
    });
  }
  
  
  
  /* Remove Body Class by Checkbox
  ------------------------------------------------------------ */
  
  $.fn.styleswitcher.remove_body_class_by_checkbox = function(checkbox, body_class) {
    var ss = $.fn.styleswitcher;
    var o  = ss.options;
    var checkbox_id = checkbox;
    var checkbox    = $(checkbox);
    
    // Set checkbox automatically after page load
    ss.set_checkbox_by_cookie(checkbox_id);
    
    if(checkbox.is(":checked"))
      $('body').removeClass(body_class);
    
    checkbox.bind('click change keyup', function() {
      checkbox_id = '#'+$(this).attr('id');
      if($(this).is(":checked")) {
        $('body').removeClass(body_class);
        $().multi_cookie(o.cookie_name, checkbox_id, 'true');
      }
      else {
        $('body').addClass(body_class);
        $().multi_cookie(o.cookie_name, checkbox_id, 'false');
      }
    });
  }
  
  
  
  /* Enable Field by Checkbox
  ------------------------------------------------------------ */
  
  $.fn.styleswitcher.enable_field_by_checkbox = function(checkbox, field) {
    var checkbox = $(checkbox);
    var field    = $(field);
    
    if(checkbox.is(":not(:checked)"))
      field.attr('disabled', true);
    
    checkbox.bind('click change keyup', function() {
      if($(this).is(":checked"))
        field.removeAttr('disabled');
      else
        field.attr('disabled', true);
    });
  }
  
  
  
  
  /* Disable Field by Checkbox
  ------------------------------------------------------------ */
  
  $.fn.styleswitcher.disable_field_by_checkbox = function(checkbox, field) {
    var checkbox = $(checkbox);
    var field    = $(field);
    
    if(checkbox.is(":checked"))
      field.attr('disabled', true);
    
    checkbox.bind('click change keyup', function() {
      if($(this).is(":checked"))
        field.attr('disabled', true);
      else
        field.removeAttr('disabled');
    });
  }
  
  
  
  /* Set Checkbox by Cookie
  ------------------------------------------------------------ */
  
  $.fn.styleswitcher.set_checkbox_by_cookie = function(key) {
    var ss    = $.fn.styleswitcher;
    var o     = ss.options;
    var value = $().multi_cookie(o.cookie_name, key);
    
    if(value == 'true')
      ss.set_check(key, value);
  }
  
  
  
  /* Set Select Option by Cookie
  ------------------------------------------------------------ */
  
  $.fn.styleswitcher.set_select_option_by_cookie = function(key) {
    var ss    = $.fn.styleswitcher;
    var o     = ss.options;
    var value = $().multi_cookie(o.cookie_name, key);
    
    if(value != null && value != '')
      ss.set_value(key, value);
  }



  /* Set Value
  ------------------------------------------------------------ */
  
  $.fn.styleswitcher.set_value = function(id, value) {
    var o = $.fn.styleswitcher.options;
    $().multi_cookie(o.cookie_name, id, value);
    
    $(id).val(value).keyup();
  }



  /* Set Checkbox
  ------------------------------------------------------------ */
  
  $.fn.styleswitcher.set_check = function(id, value) {
    var o = $.fn.styleswitcher.options;
    $().multi_cookie(o.cookie_name, id, value);
    
    $(id).attr('checked', value).keyup();
  }
  
  
  
  /* Get Filename From URL
  ------------------------------------------------------------ */
  /*
  $.fn.styleswitcher.get_file_name_from_url = function(include_extension) {
    url = window.location;
    if(url) {
      if(include_extension)
        var m = url.toString().match(/.*\/(.+?)$/);
      else
        var m = url.toString().match(/.*\/(.+?)\./);
      if(m != null && m.length > 1)
        return m[1];
      return '';
    }
    return '';
  }
  */
  
  

})(jQuery);
