// v0.1.1
// Last Updated: September 01

Object.extend = function(destination, source) {
  for (property in source) {
    destination[property] = source[property];
  }
  return destination;
};

var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
};

// Mmm... Chocolate Chip

var Helper = {
	setCookie: function(name, value) {
		var expires = new Date();
		expires.setTime(expires.getTime() + 365 * 24 * 60 * 60 * 1000);
	  var curCookie = name + '=' + escape(value) + '; expires=' + expires.toGMTString();
	  document.cookie = curCookie;
	},

	getCookie: function(name) {
	  var dc = document.cookie;
	  var prefix = name + '=';
	  var begin = dc.indexOf('; ' + prefix);
	  if (begin == -1) {
	    begin = dc.indexOf(prefix);
	    if (begin != 0) return null;
	  } else
	    begin += 2;
	  var end = document.cookie.indexOf(';', begin);
	  if (end == -1)
	    end = dc.length;
	  return unescape(dc.substring(begin + prefix.length, end));
	}
};

String.prototype.format = function() {
  var params = String.prototype.format.arguments;
  var toReturn = this;

  for (var i = 0; i < params.length; i++) {
    var regex = new RegExp('\{[' + i + ']\}', 'g');
    toReturn = toReturn.replace(regex, params[i]);
  }
 return toReturn;
};

RegExp.escape = function(text) {
  if (!arguments.callee.sRE) {
    var specials = [
      '/', '.', '*', '+', '?', '|',
      '(', ')', '[', ']', '{', '}', '\\'
    ];
    arguments.callee.sRE = new RegExp(
      '(\\' + specials.join('|\\') + ')', 'g'
    );
  }
  return text.replace(arguments.callee.sRE, '\\$1');
};


// Shades

var FontSizer = Class.create();

FontSizer.prototype = {
	initialize: function(options) {
		var dOptions = {
			cLarge: 'fourEyes',
			selLarge: '#fonts .fourEyes a',
			selNormal: '#fonts .normal a'
		};

		this.options = Object.extend(dOptions, options);

		this.loadSettings();
		this.initHandlers();
	},

	loadSettings: function() {
		var size = Helper.getCookie('fontSize');
		if (size) this.toggleSize(size);
	},
	
	initHandlers: function() {
		var self = this;

		$(this.options.selNormal).click( function() {
			self.toggleSize.apply(self, ['']);
			return false;
		});

		$(this.options.selLarge).click( function() {
			self.toggleSize.apply(self, [self.options.cLarge]);
			return false;
		});
		
	},

	toggleSize: function(size) {
		$('#fonts li a span').hide();
		$('body').removeClass(this.options.cLarge)
			.removeClass(this.options.cLarge)
			.removeClass('bigBrowser')
			.addClass(size);

		Helper.setCookie('fontSize', size);
	}
};

// 5,4,3,1 OFFBLAST!!

$(document).ready( function() {

	new FontSizer();

});

var fSpeed = 100, origSize = 475, curSize, lastSwitch;

$(function() { initSize(); });

function initSize() {
	$('body').append('<span style="font-family: Verdana !important; position: absolute; top: -600px; left: -600px; visibility: hidden !important;" id="fsize">WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW</span>');

	var el = $('#fsize')[0];
	curSize = el.offsetWidth;
	setInterval(function() {
		curSize = el.offsetWidth;
		if (curSize > origSize)
			bb();
		else
			debb();

	}, fSpeed);
}

function bb() {
	if (!hasClass('bigBrowser'))
		$('body')
			.addClass('fourEyes')
			.addClass('bigBrowser');
}


function debb() {
	if (hasClass('bigBrowser'))
		$('body')
			.removeClass('fourEyes')
			.removeClass('bigBrowser');
}

function hasClass(n) { return $('body')[0].className.indexOf(n) > -1; }
