jQuery.email = function($value) {
	return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test($value);						
}


$.widget('ui.validate', {

	submit: true,

	_init: function() {
		var $this = this;
      var $fields, $field;

      if (this.element.find('button[type=submit]').length > 0) {
         this.element.filter('form').submit(function() {
            return $this.validate();										  
         });
      }
      else {
      	this.submit = false;
      
         this.element.find('.submit').click(function() {
            $this.validate();
         });
      }

		$fields = this.fields();
		for (var $i = 0; $i < $fields.length; $i++) {
			$field = $fields.eq($i);
         $field.data('validator', this);
			if ($field.data('type') == null) {
         	$field.data('type', $field.attr('type'));
            $field.focus(function() {
               if ($(this).val() == $(this).attr('title')) {
                  $(this).val('');
                  $this.clone($(this), true);
               }
            });
            $field.blur(function() {
               if ($(this).val().length == 0) {
                  $(this).val($(this).attr('title'));
                  $this.clone($(this), false);
               }
            });
            $field.trigger('blur');
         }
		}
	},

	fields: function() {
		return this.element.find('input, textarea, select');
	},

	clone: function($field, password) {
		var type = $field.data('type');
      var $clone;

		if (type == 'password') {
			$clone = $field.clone(true);
			$clone.attr('type', (password ? 'password' : 'text'));
			$clone.insertBefore($field[0]);
			$clone.data('type', type);
         $clone.data('validator', this);
			if (password) $clone.focus();
			$field.remove();
		}
	},

	validate: function() {
		var $fields = this.fields();
      var $field;
      var values = {};
      var value;
      var parts, part;
      var valid;
		var result = true;
      var errors = {};
      var error;

		for ($i = 0; $i < $fields.length; $i++) {
			$field = $fields.eq($i);
         if ($field.data('validator') == this) {
            value = ($field.val() == $field.attr('title') ? '' : $field.val());
            parts = $field.attr('class').split(" ");
            part = null;
   
            for ($j = 0; $j < parts.length; $j++) {
               if (parts[$j].slice(0, 8) == 'validate') {
                  part = parts[$j].slice(9, -1).split(',');
                  break;	
               }
            }

            if (part != null) {
               switch (part[0]) {
                  case 'email': valid = jQuery.email(value); break;
                  default: valid = (value.length >= 1);
               }

               if ($field.is('input[type=text]')) error = 'error';
               else if ($field.is('input[type=password]')) error = 'error';
               else if ($field.is('textarea')) error = 'error';

               $field.toggleClass(error, !valid);
               errors[$field.attr('name')] = !valid;
               values[$field.attr('name')] = value;
   
               if (!valid) result = false;
            }
         }
		}

		if (this._getData('submit') != null)
      {
      	this._getData('submit').apply(this.element[0], [result, errors, values]);
      	return false;
      }

		if (result) this.cleanup();
      if (!this.submit) this.element[0].submit();
		return result;
	},
 
   cleanup: function() {
   	var $fields = this.fields();
      var $field;

      for (var i = 0; i < $fields.length; i++) {
         $field = $fields.eq(i);
         if ($field.val() == $field.attr('title')) $field.val('');
      }
   },
   
   submit: function() {
   	this.cleanup();
      this.element[0].submit();
   }
	
});


$.widget('ui.scrollable', {

	_init: function() {
   	var $this = this;

   	this.element.find('.button1, .button2').click(function() {
         $this.change(($(this).hasClass('button1') ? '-1' : '1'));
      });
      
      this._setData('index', 1);
      this._setData('enabled', true);
      this.play();
   },
   
   
   pause: function()
   {
   	if (this._getData('auto') !== true) return;
      
      clearInterval(this.interval);
   },
   
   
   play: function()
   {
   	if (this._getData('auto') !== true) return;
  
  		var $this = this;
  
      this.interval = setInterval(function() {
         $this.change('1');
      }, 4000);
   },


   change: function(offset)
   {
   	if (!this._getData('enabled')) return;
      
      this._setData('enabled', false);

   	var $this = this;
      var vertical = (this._getData('type') == 'vertical');
   	var index = this._getData('index');
      var items = this.element.find('.items ul li');
      var item = items.eq(0);
      var length = (vertical ? item.height() : item.width());
      var spacing = parseInt(item.css((vertical ? 'marginBottom' : 'marginRight')), 10);
		var count = Math.floor(((vertical ? this.element.find('.items').height() : this.element.find('.items').width()) + spacing) / (length + spacing));

      if (this._getData('count') != null) count = this._getData('count');
      
      var total = Math.ceil(items.length / count);
      var data = {};
      var auto = this._getData('auto');

      switch (offset) {
      	case '-1': index = (index == 1 ? total : index - 1); break;
         case '1': index = (index == total ? 1 : index + 1); break;
      }
      
      if (vertical) {
         data.marginTop = -((length + spacing) * count) * (index - 1);
      }
      else {
         data.marginLeft = -((length + spacing) * count) * (index - 1);
      }

      this._setData('index', index);
      this.element.find('.items ul').animate(data, 1000, function() {
      	$this._setData('enabled', true);
     	});
   }

});


var fonts;
var wmode = (jQuery.browser.msie && (jQuery.browser.version >= 6 && jQuery.browser.version < 7)) ? '' : 'transparent';

fonts = [];
fonts[0] = { src: 'http://www.ruthless-toothless.com/assets/swf/fonts/tusj.swf', ratios: [7, 1.32, 8, 1.31, 12, 1.27, 20, 1.22, 28, 1.19, 30, 1.17, 31, 1.18, 45, 1.17, 61, 1.16, 62, 1.15, 65, 1.16, 66, 1.15, 67, 1.16, 109, 1.15, 110, 1.14, 116, 1.15, 117, 1.14, 122, 1.15, 1.14] };

sIFR.activate(fonts[0]);
sIFR.replace(fonts[0], { selector: '.sifr1', css: '.sIFR-root { color: #ffffff; }', wmode: wmode });
sIFR.replace(fonts[0], { selector: '#company-detail h1', css: '.sIFR-root { color: #666565; } em { font-style: normal; color: #48615b; }', wmode: wmode, tuneHeight: -6 });

$().ready(function() { 
   $('#products .menu').each(function() {
   	var width = 1;

      $(this).find('li').each(function() { width += $(this).width() + 1; });
   	$(this).css('width', width + 'px');
   });
   
   $('#home .videos .image, #products .image, #media .image, #media-detail .list .thumbnails ul li a').hover(
      function() {
         var $images;
         var $image;

         $images = $(this).find('span:last');
         $image = $images.find('img');
         $images.animate({
         	top: '-' + $image.height() +  'px'
        	}, 500, 'easeOutBounce');
      },
      function() {
         var $images;

         $images = $(this).find('span:last');
         $images.animate({
         	top: '0px'
        	}, 500, 'easeOutBounce');
      }
   );
});