/*
	Site:		Denizen
	File:		/js/plugins.js
	Author:		vinay@artminister.com
	Version:  12-02-2010
	
*/

// usage: log('inside coolFunc', this, arguments);
// paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/
window.log = function(){
  log.history = log.history || [];   // store logs to an array for reference
  log.history.push(arguments);
  if(this.console) console.log( Array.prototype.slice.call(arguments) );
};



// Slideshow Plugin
(function($){
  
  $.fn.slideshow=function(options,callback){    
    
    var settings={
      pager:'.pager',
      autoplay:true,
      delay:5000,
      pagerthumbs:false,
      perpage:5,
      pagerid:'#Thumbs',
      pauseonhover:false,
      ajax:false,
      paginate:true
    };
    
    if(options) $.extend(settings,options)    
  
  	return this.each(function(){
  	  
  	  // Init Variables
  	  
  	  var $this = $(this),
  	    	$slideshow = $(this).children('div').eq(0),
  	    	$slidereel = $slideshow.find('ul'),
  	    	$slideimages = $slidereel.find('li'),
  	    	pageli='',
  	    	imageWidth = $slideshow.width(),
          imageSum = $slideimages.size(),
          imageReelWidth = imageWidth * imageSum,
          imageReelHeight =$slideimages.height();
          
          if(settings.ajax) imageReelHeight=404;
      
          $slidereel.css({
            width:imageReelWidth,
            height:imageReelHeight,
            position:"relative"
            });
          
          $slideimages.css({
            width:imageWidth,
            height:imageReelHeight
          });
  	  
      	  // Append Page Numbers
  	  
      	  $slideimages.each(function(i){
      	    pageli += '<li><a href="#">'+(i+1)+'</a></li>';  	      	    
      	  });  	  
  	  
      	  if(!settings.pagerthumbs){
      	    $(settings.pager).append(pageli).find('li:first').addClass("active").end()
        	  .find("li").live('click',function(e) {	
        	    e.preventDefault();
          		$active = $(this); 
          		if(settings.autoplay) clearInterval(play); 
          		rotate(); 
          		if(settings.autoplay) rotateSwitch();
          	});
          	
      	  }
      	  else{
            //paginate(settings.pagerid,settings.perpage);
            if(settings.paginate) $(settings.pagerid).paginate(settings.perpage);
            
            // Add Click Handler to Pages
            
            $id = $(settings.pagerid);
      	    $items =  $id.find('a')
      	              .click(function(e){
                        i = $(this).parent().prevAll().length;
                        if(settings.ajax){
                          $slidereel.find('li:first').empty().load($(this).attr("href"));
                        }
                        else{                  
                          $slideimages.hide().eq(i).show();                  
                        }
                        $items.parent().removeClass("active").end().parent().eq(i).addClass("active");
                        e.preventDefault();
            });
      	    
            startshow();
      	  }
  	  
  	  
  	  
      	  //Paging + Slider Function
        	function rotate(){	
        		var triggerID = $active.prevAll().length; //Get number of times to slide
        		var image_reelPosition = triggerID * imageWidth; //Determines the distance the image reel needs to slide

        		$(settings.pager).find("li").removeClass('active'); //Remove all active class
        		$active.addClass('active'); //Add active class (the $active is declared in the rotateSwitch function)

        		//Slider Animation
        		$slidereel.animate({ 
        			left: -image_reelPosition
        		}, 500);
        
        	}; 
    	
        	//Rotation + Timing Event
        	function rotateSwitch(){	
        		play = setInterval(function(){ 
        			$active = $(settings.pager).find('.active').next();
        			if ( $active.length === 0) { //If paging reaches the end...
        				$active = $(settings.pager).find('li:first'); //go back to first
        			}
        			rotate(); 
        		}, settings.delay); 
        	};
      
          if(settings.autoplay && $.fn.slideshow.defaults.autoplay) rotateSwitch();
          
          // Poll for autoplay option
          setInterval(function(){
            //if($.fn.slideshow.defaults.autoplay) rotateSwitch();
            settings.autoplay = $.fn.slideshow.defaults.autoplay||settings.autoplay;
          },1000);
            
          //On Hover
          if(settings.pauseonhover){
          	$slideshow.hover(function() {
          		if(settings.autoplay) clearInterval(play); //Stop the rotation
          	}, function() {
          		if(settings.autoplay) rotateSwitch(); //Resume rotation
          	});
          
          } 
          
          function stopautoplay(){
            clearInterval(play);
          } 	    	  
          
          function startautoplay(){
            rotateSwitch();
          }
      	  
      	  function startshow(){
      	    if(settings.ajax){
      	      $items.eq(0).trigger('click');
      	      $slidereel.css({
      	        height:"auto"
      	      });
      	    }
      	    else{
      	      $slideimages.hide().eq(0).show();
        	    $items.eq(0).addClass("active"); 
      	    }      	    
      	  };
  	  
  	});
  	
  }; // End Slideshow
  
})(this.jQuery);

$.fn.slideshow.defaults={
  autoplay:'true'
};


// Paginate Plugin

(function($){
  
  $.fn.paginate=function(options, callback){
    
    var settings = {
      perpage : 5,
      itemwidth:110,
      nextlink:'#Next',
      prevlink:'#Prev'
    };
    
    $.fn.extend(settings,options);
    
    return this.each(function(){
      
      $id = $(this);
	    $items =$id.find('li');
	    var numPages = Math.ceil($items.length / settings.perpage) - 1;
	    var current = 0;
  
	    var $next = $(settings.nextlink);
	    var $back = $(settings.prevlink);
	    
	    $id.css({
	      position:"relative",
	      width:$items.length * settings.itemwidth+"px"
	    });
  
	    $back
        .addClass('paging-disabled')
        .click(function(e) {
          pagination('<');
          e.preventDefault();
        });
    
      $next.click(function(e) {
        pagination('>');
        e.preventDefault();
      });
  
      $items
        .css({
          width:settings.itemwidth
        });
        
      
        pagination = function (direction){
          reveal = function (current){
            $back.removeClass('paging-disabled');
            $next.removeClass('paging-disabled');
            
            _pageWidth = current * settings.perpage * settings.itemwidth;
            $id
              .animate({
                left:- _pageWidth
              },1000);
              
          };
          // 4. Move previous and next  
        	if (direction == '<') { // previous
            if (current > 1) {
              reveal(current -= 1);
            }
            else if (current == 1) {
              reveal (current -= 1);
              $back.addClass('paging-disabled');
            }
          } else {
            if (current < numPages - 1) {
              reveal(current += 1);
            }
            else if (current == numPages - 1) {
              reveal(current += 1);
              $next.addClass('paging-disabled');
            }
          }
        }
        
        
        if (typeof callback == 'function') {
            callback.call(this); 
        }
        
        
    });
    
  };
  
})(jQuery);


(function($){
	
	$.fn.generateMap=function(){
		
		return this.each(function(){
			var $this = $(this),
					$items = $this.find('a'),
					$map = $('#CountryMap');
			
				
				$items.each(function(){
				  
				  var $item = $(this),
  						_name = $item.text(),
  						_href = $item.attr("href"),
  						_rel = $item.attr("rel"),
  						_x = parseInt($item.attr("data-x"))- 17,
  						_y = parseInt($item.attr("data-y"))-39,
  						_displaybool = $item.attr("data-display"),
  						_class="";
  				
  				if(_displaybool!="false"){
  				 $map.append('<a href="'+_href+'" rel="'+_rel+'" class="maplinks" style="left:'+_x+'px; top:'+_y+'px"><span><em>'+_name+'</em></span></a>'); 
  				}  						  				
  				
  			}).hover(function(){
  			    var _relattr = $(this).attr("rel");
  			    $map.find("[rel="+_relattr+"]").find('span').css({
  			      zIndex:1000,
  			      visibility:"visible"
  			    }).show();
  			},function(){
  			    $map.find('span').css({
  			      visibility:"hidden"
  			    });
  			});
				
				if(jQuery.browser.msie&&jQuery.browser.version<7){
				  DD_belatedPNG.fix('.maplinks');
				}
				
				$map.find('em').each(function(){
				  //console.log($(this).width());
				});
				
				// Centralize Country Names
				$map.find('span').each(function(){				  
				  var _width = $(this).find('em').width()+10;
				  $(this).css({
				    width:_width,
				    marginLeft:-(_width/2)-16
				  });
				});
			
			});	
		
	};
	
})(jQuery);

// Denizen Modal - Attach to form

(function($){
    $.denizenmodal = function(el, options){
        var base = this;
        
        base.$el = $(el);
        base.el = el;
        base.$body = $('body');        
        base.$el.data("denizenmodal", base);
                
        base.init = function(){

            base.options = $.extend({},$.denizenmodal.defaultOptions, options);
            
            // Append the Modal Box on Page Load
            if(!$('#DenizenModal').length) base.$body.append(base.options.structure); 
            base.$modal = $('#DenizenModal');
            base.$close = base.$modal.find('.close').html(base.options.closeImage);
            base.$content = base.$modal.find('.content').html(base.options.loadingImage);
            base.$foot = base.$modal.find('.foot');
            base.options.showok? base.$foot.html(base.options.okbutton):'';            
            base.options.showcancel? base.$foot.find('p').append(base.options.cancelbutton):'';            
            base.options.contenturl = base.$el.attr("data-model-content")?false:true
            base.options.title = $.denizenmodal.defaultOptions.title||base.$el.attr("data-modal-title")||base.options.title;
            
            // Check if the element is a form
            if(base.$el[0].nodeName=="FORM"){
             
              // Bind Submit
              
              base.$el.submit(function(e){                

                // If No Errors Submit The Form
                if(jQuery.trim(base.isempty(base.options.content))=='') return true;
                    
                e.preventDefault();                  
                base.open();
              });
                                          
            }

            // Assume we are dealing with links
            else{
              
              base.$el.click(function(e){
                $ok = $(this);
                if (base.$el.attr('id') != "submitBigBet") {
                base.options.content = base.$el.attr("data-modal-url")||base.$el.attr("data-model-content");
                }
                else {
                if(jQuery.trim(base.isempty(base.options.content))=='') {
                 var serArr;
  							 serArr = $('#CreateBigBetForm').find('select, [type=hidden], [type=text], textarea').serializeArray(); 
  							 $.post('/create-big-bet', serArr, function(response) {window.location.href = response; } );
                 return true;
                }
                    
                e.preventDefault();                  
                base.open();
                }              

                e.preventDefault();
                base.open();
              });
              
            }
            
            // Bind Close Button and OK button
            
            base.$close.bind('click',base.close);
            base.$modal.find('.okbutton').bind('click',function(event){
              base.close(event);
              if(base.options.okhandler && (typeof base.options.okhandler == 'function')){
                base.options.okhandler.call(this, $ok);
              }
            });
            base.$modal.find('.cancelbutton').bind('click',base.close);
            
            // Bind Keydown
            $(document).keyup(function(e){
              if(e.keyCode=='27'){
                base.close(e);
              }
            });   
            
            $(window).resize(function(){
              base.reposition();
            });
            
        };
        
        // Public method to open
        arguments.callee.open = function() {            
            base.content = $.denizenmodal.defaultOptions.content;
            base.title = $.denizenmodal.defaultOptions.title;
            base.open(base.content, base.title);
        };
        
        // Public method to open
        arguments.callee.close = function() {
            base.close();
        };
        
        base.reposition=function(){
          base.$modal
          .css({
            top : base.getPageScroll()[1] + (base.getPageHeight() / 10),
            left : $(window).width()/2 - base.$modal.outerWidth()/2                    
          })
        };
        
        base.isempty=function(content){
          
          return (
          typeof content == 'function' ?
  					content.call(base.$el[0], function(newContent) {
  						base.update(newContent);
  					}) :
  					content
  				);
  				
        };
        
        base.update=function(content){

          var async = content !== undefined;
    			if (!async) {
    				content = base.options.content;
    			}    			
    			    			
    			if(typeof content == 'function'){
    			  
    			  base.$content.empty().html(content.call(base.$el[0], function(newContent) {
  						base.update(newContent);
  					}));
    			}else{
    			      			  
    			  // Load the URL
    			  base.$content.html(base.options.loadingImage);
    			  
    			  // If content is url
    			  if(base.options.contenturl){
    			    $.get(content,function(data){

    					  base.$content.empty().html(data);

    					  // Callback 
    					  callback= base.options.onload;
        				if (typeof callback == 'function') {
                    callback.call(this);
                }

    					});  
    			  }
    			  else{
    			    
    			    base.$content.empty().html(base.options.content);
    			  }
 					
    			} 			
    			  				
        };
        
        base.close=function(e){
          $(document).unbind('keydown.facebox')          
          base.$modal.fadeOut();
          base.$el.trigger('modal_close');
          e.preventDefault();
        };
        
        base.open=function(content,title){

          base.update(content);
          
          // Show Modal
          base.$modal            
            .find('.title')
            .html(title||base.options.title)
            .end()
            .find('.content')
            .append(base.$ok)
            .end()
            .css({
              borderColor : base.options.bordercolor,
              top : base.getPageScroll()[1] + (base.getPageHeight() / 10),
              left : $(window).width()/2 - base.$modal.outerWidth()/2
            })
            .fadeIn();                    
          
        };
        
        // getPageScroll() by quirksmode.com
        base.getPageScroll=function() {
          var xScroll, yScroll;
          if (self.pageYOffset) {
            yScroll = self.pageYOffset;
            xScroll = self.pageXOffset;
          } else if (document.documentElement && document.documentElement.scrollTop) {	 // Explorer 6 Strict
            yScroll = document.documentElement.scrollTop;
            xScroll = document.documentElement.scrollLeft;
          } else if (document.body) {// all other Explorers
            yScroll = document.body.scrollTop;
            xScroll = document.body.scrollLeft;	
          }
          return new Array(xScroll,yScroll) 
        }

          // Adapted from getPageSize() by quirksmode.com
        base.getPageHeight=function() {
          var windowHeight
          if (self.innerHeight) {	// all except Explorer
            windowHeight = self.innerHeight;
          } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
            windowHeight = document.documentElement.clientHeight;
          } else if (document.body) { // other Explorers
            windowHeight = document.body.clientHeight;
          }	
          return windowHeight
        }
        
        
        base.init();
    };
    
        
    $.denizenmodal.defaultOptions = {
      title:'',
      delay:200,
      loadingImage : '<img src="/sites/all/themes/zen/denizen/images/loader-rectangle.gif" alt="Loading">',
      closeImage   : '<img src="/sites/all/themes/zen/denizen/images/close.png" alt="Close">',
      okbutton : '<p><a href="#" class="okbutton redButton">OK</a></p>',
      cancelbutton : '<a href="#" class="cancelbutton redButton">Cancel</a>',
      structure:'<div id="DenizenModal" class="dzmodal" style="display:none;"> \
              <h3 class="title"></h3>\
              <div class="content"></div> \
              <a href="#" class="close"></a> \
              <div class="foot"></div></div>',
      content:'url or function here',
      bordercolor:'#fd4613',
      showok:false,
      showcancel:false,
      onload:function(){
        
      }
    };
    
    $.fn.denizenmodal = function(options){
        return this.each(function(){
            (new $.denizenmodal(this, options));
        });
    };
    
    $.fn.getdenizenmodal = function(){
        this.data("denizenmodal");
    };
    
})(jQuery);



// Vertical Align Plugin

(function ($) {
// VERTICALLY ALIGN FUNCTION
$.fn.vAlign = function() {
	return this.each(function(i){
	var ah = $(this).height();
	if(!$(this).find('p').length){
	  var ph = $(this).find('h2').height();	    	
  	if(ph!=null&&ph<=16) $(this).css({
  	  paddingTop:"11px",
  	  height:"22px",
  	  minHeight:"22px"
	    }
  	  );
	}
	
	});
};
})(jQuery);


/*

Uniform v1.7.5
Copyright © 2009 Josh Pyles / Pixelmatrix Design LLC
http://pixelmatrixdesign.com

Requires jQuery 1.4 or newer

Much thanks to Thomas Reynolds and Buck Wilson for their help and advice on this

Disabling text selection is made possible by Mathias Bynens <http://mathiasbynens.be/>
and his noSelect plugin. <http://github.com/mathiasbynens/noSelect-jQuery-Plugin>

Also, thanks to David Kaneda and Eugene Bond for their contributions to the plugin

License:
MIT License - http://www.opensource.org/licenses/mit-license.php

Enjoy!

*/

(function($) {
  $.uniform = {
    options: {
      selectClass:   'selector',
      radioClass: 'radio',
      checkboxClass: 'checker',
      fileClass: 'uploader',
      filenameClass: 'filename',
      fileBtnClass: 'action',
      fileDefaultText: 'No file selected',
      fileBtnText: 'Upload',
      checkedClass: 'checked',
      focusClass: 'focus',
      disabledClass: 'disabled',
      buttonClass: 'button',
      activeClass: 'active',
      hoverClass: 'hover',
      useID: true,
      idPrefix: 'uniform',
      resetSelector: false,
      autoHide: true
    },
    elements: []
  };

  if($.browser.msie && $.browser.version < 7){
    $.support.selectOpacity = false;
  }else{
    $.support.selectOpacity = true;
  }

  $.fn.uniform = function(options) {

    options = $.extend($.uniform.options, options);

    var el = this;
    //code for specifying a reset button
    if(options.resetSelector != false){
      $(options.resetSelector).mouseup(function(){
        function resetThis(){
          $.uniform.update(el);
        }
        setTimeout(resetThis, 10);
      });
    }
    
    function doInput(elem){
      $el = $(elem);
      $el.addClass($el.attr("type"));
      storeElement(elem);
    }
    
    function doTextarea(elem){
      $(elem).addClass("uniform");
      storeElement(elem);
    }
    
    function doButton(elem){
      var $el = $(elem);
      
      var divTag = $("<div>"),
          spanTag = $("<span>");
      
      divTag.addClass(options.buttonClass);
      
      if(options.useID && $el.attr("id") != "") divTag.attr("id", options.idPrefix+"-"+$el.attr("id"));
      
      var btnText;
      
      if($el.is("a") || $el.is("button")){
        btnText = $el.text();
      }else if($el.is(":submit") || $el.is(":reset") || $el.is("input[type=button]")){
        btnText = $el.attr("value");
      }
      
      btnText = btnText == "" ? $el.is(":reset") ? "Reset" : "Submit" : btnText;
      
      spanTag.html(btnText);
      
      $el.css("opacity", 0);
      $el.wrap(divTag);
      $el.wrap(spanTag);
      
      //redefine variables
      divTag = $el.closest("div");
      spanTag = $el.closest("span");
      
      if($el.is(":disabled")) divTag.addClass(options.disabledClass);
      
      divTag.bind({
        "mouseenter.uniform": function(){
          divTag.addClass(options.hoverClass);
        },
        "mouseleave.uniform": function(){
          divTag.removeClass(options.hoverClass);
          divTag.removeClass(options.activeClass);
        },
        "mousedown.uniform touchbegin.uniform": function(){
          divTag.addClass(options.activeClass);
        },
        "mouseup.uniform touchend.uniform": function(){
          divTag.removeClass(options.activeClass);
        },
        "click.uniform touchend.uniform": function(e){
          if($(e.target).is("span") || $(e.target).is("div")){    
            if(elem[0].dispatchEvent){
              var ev = document.createEvent('MouseEvents');
              ev.initEvent( 'click', true, true );
              elem[0].dispatchEvent(ev);
            }else{
              elem[0].click();
            }
          }
        }
      });
      
      elem.bind({
        "focus.uniform": function(){
          divTag.addClass(options.focusClass);
        },
        "blur.uniform": function(){
          divTag.removeClass(options.focusClass);
        }
      });
      
      $.uniform.noSelect(divTag);
      storeElement(elem);
      
    }

    function doSelect(elem){
      var $el = $(elem);
      
      var divTag = $('<div />'),
          spanTag = $('<span />');
      
      if(!$el.css("display") == "none" && options.autoHide){
        divTag.hide();
      }

      divTag.addClass(options.selectClass);

      if(options.useID && elem.attr("id") != ""){
        divTag.attr("id", options.idPrefix+"-"+elem.attr("id"));
      }
      
      var selected = elem.find(":selected:first");
      if(selected.length == 0){
        selected = elem.find("option:first");
      }
      spanTag.html(selected.html());
      
      elem.css('opacity', 0);
      elem.wrap(divTag);
      elem.before(spanTag);

      //redefine variables
      divTag = elem.parent("div");
      spanTag = elem.siblings("span");

      elem.bind("change.uniform",function() {
          spanTag.text(elem.find(":selected").html());
          divTag.removeClass(options.activeClass);
        });
      
      elem.bind("keyup.uniform",function(){
          spanTag.text(elem.find(":selected").html());
      });
      
      //handle disabled state
      if($(elem).attr("disabled")){
        //box is checked by default, check our box
        divTag.addClass(options.disabledClass);
      }
      $.uniform.noSelect(spanTag);
      
      storeElement(elem);

    }

    function doCheckbox(elem){
      var $el = $(elem);
      
      var divTag = $('<div />'),
          spanTag = $('<span />');
      
      if(!$el.css("display") == "none" && options.autoHide){
        divTag.hide();
      }
      
      divTag.addClass(options.checkboxClass);

      //assign the id of the element
      if(options.useID && elem.attr("id") != ""){
        divTag.attr("id", options.idPrefix+"-"+elem.attr("id"));
      }

      //wrap with the proper elements
      $(elem).wrap(divTag);
      $(elem).wrap(spanTag);

      //redefine variables
      spanTag = elem.parent();
      divTag = spanTag.parent();

      //hide normal input and add focus classes
      $(elem)
      .css("opacity", 0)
      .bind({
        "focus.uniform": function(){
          divTag.addClass(options.focusClass);
        },
        "blur.uniform": function(){
          divTag.removeClass(options.focusClass);
        },
        "click.uniform touchend.uniform": function(){
          if(!$(elem).attr("checked")){
            //box was just unchecked, uncheck span
            spanTag.removeClass(options.checkedClass);
          }else{
            //box was just checked, check span.
            spanTag.addClass(options.checkedClass);
          }
        },
        "mousedown.uniform touchbegin.uniform": function() {
          divTag.addClass(options.activeClass);
        },
        "mouseup.uniform touchend.uniform": function() {
          divTag.removeClass(options.activeClass);
        },
        "mouseenter.uniform": function() {
          divTag.addClass(options.hoverClass);
        },
        "mouseleave.uniform": function() {
          divTag.removeClass(options.hoverClass);
          divTag.removeClass(options.activeClass);
        }
      });
      
      //handle defaults
      if($(elem).attr("checked")){
        //box is checked by default, check our box
        spanTag.addClass(options.checkedClass);
      }

      //handle disabled state
      if($(elem).attr("disabled")){
        //box is checked by default, check our box
        divTag.addClass(options.disabledClass);
      }

      storeElement(elem);
    }

    function doRadio(elem){
      var $el = $(elem);
      
      var divTag = $('<div />'),
          spanTag = $('<span />');
          
      if(!$el.css("display") == "none" && options.autoHide){
        divTag.hide();
      }

      divTag.addClass(options.radioClass);

      if(options.useID && elem.attr("id") != ""){
        divTag.attr("id", options.idPrefix+"-"+elem.attr("id"));
      }

      //wrap with the proper elements
      $(elem).wrap(divTag);
      $(elem).wrap(spanTag);

      //redefine variables
      spanTag = elem.parent();
      divTag = spanTag.parent();

      //hide normal input and add focus classes
      $(elem)
      .css("opacity", 0)
      .bind({
        "focus.uniform": function(){
          divTag.addClass(options.focusClass);
        },
        "blur.uniform": function(){
          divTag.removeClass(options.focusClass);
        },
        "click.uniform touchend.uniform": function(){
          if(!$(elem).attr("checked")){
            //box was just unchecked, uncheck span
            spanTag.removeClass(options.checkedClass);
          }else{
            //box was just checked, check span
            var classes = options.radioClass.split(" ")[0];
            $("." + classes + " span." + options.checkedClass + ":has([name='" + $(elem).attr('name') + "'])").removeClass(options.checkedClass);
            spanTag.addClass(options.checkedClass);
          }
        },
        "mousedown.uniform touchend.uniform": function() {
          if(!$(elem).is(":disabled")){
            divTag.addClass(options.activeClass);
          }
        },
        "mouseup.uniform touchbegin.uniform": function() {
          divTag.removeClass(options.activeClass);
        },
        "mouseenter.uniform touchend.uniform": function() {
          divTag.addClass(options.hoverClass);
        },
        "mouseleave.uniform": function() {
          divTag.removeClass(options.hoverClass);
          divTag.removeClass(options.activeClass);
        }
      });

      //handle defaults
      if($(elem).attr("checked")){
        //box is checked by default, check span
        spanTag.addClass(options.checkedClass);
      }
      //handle disabled state
      if($(elem).attr("disabled")){
        //box is checked by default, check our box
        divTag.addClass(options.disabledClass);
      }

      storeElement(elem);

    }

    function doFile(elem){
      //sanitize input
      var $el = $(elem);

      var divTag = $('<div />'),
          filenameTag = $('<span>'+options.fileDefaultText+'</span>'),
          btnTag = $('<span>'+options.fileBtnText+'</span>');
      
      if(!$el.css("display") == "none" && options.autoHide){
        divTag.hide();
      }

      divTag.addClass(options.fileClass);
      filenameTag.addClass(options.filenameClass);
      btnTag.addClass(options.fileBtnClass);

      if(options.useID && $el.attr("id") != ""){
        divTag.attr("id", options.idPrefix+"-"+$el.attr("id"));
      }

      //wrap with the proper elements
      $el.wrap(divTag);
      $el.after(btnTag);
      $el.after(filenameTag);

      //redefine variables
      divTag = $el.closest("div");
      filenameTag = $el.siblings("."+options.filenameClass);
      btnTag = $el.siblings("."+options.fileBtnClass);

      //set the size
      if(!$el.attr("size")){
        var divWidth = divTag.width();
        //$el.css("width", divWidth);
        $el.attr("size", divWidth/10);
      }

      //actions
      var setFilename = function()
      {
        var filename = $el.val();
        if (filename === '')
        {
          filename = options.fileDefaultText;
        }
        else
        {
          filename = filename.split(/[\/\\]+/);
          filename = filename[(filename.length-1)];
        }
        filenameTag.text(filename);
      };

      // Account for input saved across refreshes
      setFilename();

      $el
      .css("opacity", 0);
      
      $el.bind("focus.uniform",function(){
          divTag.addClass(options.focusClass);
        });
        
      /*
        "blur.uniform": function(){
          divTag.removeClass(options.focusClass);
        },
        "mousedown.uniform": function() {
          if(!$(elem).is(":disabled")){
            divTag.addClass(options.activeClass);
          }
        },
        "mouseup.uniform": function() {
          divTag.removeClass(options.activeClass);
        },
        "mouseenter.uniform": function() {
          divTag.addClass(options.hoverClass);
        },
        "mouseleave.uniform": function() {
          divTag.removeClass(options.hoverClass);
          divTag.removeClass(options.activeClass);
        }
      });*/

      // IE7 doesn't fire onChange until blur or second fire.
      if ($.browser.msie){
        // IE considers browser chrome blocking I/O, so it
        // suspends tiemouts until after the file has been selected.
        $el.bind('click.uniform.ie7', function() {
          setTimeout(setFilename, 0);
        });
      }else{
        // All other browsers behave properly
        $el.bind('change.uniform', setFilename);
      }

      //handle defaults
      if($el.attr("disabled")){
        //box is checked by default, check our box
        divTag.addClass(options.disabledClass);
      }
      
      $.uniform.noSelect(filenameTag);
      $.uniform.noSelect(btnTag);
      
      storeElement(elem);

    }
    
    $.uniform.restore = function(elem){
      if(elem == undefined){
        elem = $($.uniform.elements);
      }
      
      $(elem).each(function(){
        if($(this).is(":checkbox")){
          //unwrap from span and div
          $(this).unwrap().unwrap();
        }else if($(this).is("select")){
          //remove sibling span
          $(this).siblings("span").remove();
          //unwrap parent div
          $(this).unwrap();
        }else if($(this).is(":radio")){
          //unwrap from span and div
          $(this).unwrap().unwrap();
        }else if($(this).is(":file")){
          //remove sibling spans
          $(this).siblings("span").remove();
          //unwrap parent div
          $(this).unwrap();
        }else if($(this).is("button, :submit, :reset, a, input[type='button']")){
          //unwrap from span and div
          $(this).unwrap().unwrap();
        }
        
        //unbind events
        $(this).unbind(".uniform");
        
        //reset inline style
        $(this).css("opacity", "1");
        
        //remove item from list of uniformed elements
        var index = $.inArray($(elem), $.uniform.elements);
        $.uniform.elements.splice(index, 1);
      });
    };

    function storeElement(elem){
      //store this element in our global array
      elem = $(elem).get();
      if(elem.length > 1){
        $.each(elem, function(i, val){
          $.uniform.elements.push(val);
        });
      }else{
        $.uniform.elements.push(elem);
      }
    }
    
    //noSelect v1.0
    $.uniform.noSelect = function(elem) {
      function f() {
       return false;
      };
      $(elem).each(function() {
       this.onselectstart = this.ondragstart = f; // Webkit & IE
       $(this)
        .mousedown(f) // Webkit & Opera
        .css({ MozUserSelect: 'none' }); // Firefox
      });
     };

    $.uniform.update = function(elem){
      if(elem == undefined){
        elem = $($.uniform.elements);
      }
      //sanitize input
      elem = $(elem);

      elem.each(function(){
        //do to each item in the selector
        //function to reset all classes
        var $e = $(this);

        if($e.is("select")){
          //element is a select
          var spanTag = $e.siblings("span");
          var divTag = $e.parent("div");

          divTag.removeClass(options.hoverClass+" "+options.focusClass+" "+options.activeClass);

          //reset current selected text
          spanTag.html($e.find(":selected").html());

          if($e.is(":disabled")){
            divTag.addClass(options.disabledClass);
          }else{
            divTag.removeClass(options.disabledClass);
          }

        }else if($e.is(":checkbox")){
          //element is a checkbox
          var spanTag = $e.closest("span");
          var divTag = $e.closest("div");

          divTag.removeClass(options.hoverClass+" "+options.focusClass+" "+options.activeClass);
          spanTag.removeClass(options.checkedClass);

          if($e.is(":checked")){
            spanTag.addClass(options.checkedClass);
          }
          if($e.is(":disabled")){
            divTag.addClass(options.disabledClass);
          }else{
            divTag.removeClass(options.disabledClass);
          }

        }else if($e.is(":radio")){
          //element is a radio
          var spanTag = $e.closest("span");
          var divTag = $e.closest("div");

          divTag.removeClass(options.hoverClass+" "+options.focusClass+" "+options.activeClass);
          spanTag.removeClass(options.checkedClass);

          if($e.is(":checked")){
            spanTag.addClass(options.checkedClass);
          }

          if($e.is(":disabled")){
            divTag.addClass(options.disabledClass);
          }else{
            divTag.removeClass(options.disabledClass);
          }
        }else if($e.is(":file")){
          var divTag = $e.parent("div");
          var filenameTag = $e.siblings(options.filenameClass);
          btnTag = $e.siblings(options.fileBtnClass);

          divTag.removeClass(options.hoverClass+" "+options.focusClass+" "+options.activeClass);

          filenameTag.text($e.val());

          if($e.is(":disabled")){
            divTag.addClass(options.disabledClass);
          }else{
            divTag.removeClass(options.disabledClass);
          }
        }else if($e.is(":submit") || $e.is(":reset") || $e.is("button") || $e.is("a") || elem.is("input[type=button]")){
          var divTag = $e.closest("div");
          divTag.removeClass(options.hoverClass+" "+options.focusClass+" "+options.activeClass);
          
          if($e.is(":disabled")){
            divTag.addClass(options.disabledClass);
          }else{
            divTag.removeClass(options.disabledClass);
          }
          
        }
        
      });
    };

    return this.each(function() {
      if($.support.selectOpacity){
        var elem = $(this);

        if(elem.is("select")){
          //element is a select
          if(elem.attr("multiple") != true){
            //element is not a multi-select
            if(elem.attr("size") == undefined || elem.attr("size") <= 1){
              doSelect(elem);
            }
          }
        }else if(elem.is(":checkbox")){
          //element is a checkbox
          doCheckbox(elem);
        }else if(elem.is(":radio")){
          //element is a radio
          doRadio(elem);
        }else if(elem.is(":file")){
          //element is a file upload
          doFile(elem);
        }else if(elem.is(":text, :password, input[type='email']")){
          doInput(elem);
        }else if(elem.is("textarea")){
          doTextarea(elem);
        }else if(elem.is("a") || elem.is(":submit") || elem.is(":reset") || elem.is("button") || elem.is("input[type=button]")){
          doButton(elem);
        }
          
      }
    });
  };
})(jQuery);
