(function($) { 
	
	$.fn.wtdforms = function(options) {
		
		var opts = $.extend({}, $.fn.wtdforms.defaults, options);
		
		if(this.length){
			return this.each(function(){
				if($(this).is('select')){
					setSelectBoxes($(this), opts);			
				}
				else if($(this).is('input[type=text]')){
					setTextFields($(this), opts);
				}
				else if($(this).is('input[type=password]')){
					setPasswordFields($(this), opts);
				}
				else if($(this).is('input[type=file]')){
					setUploadFields($(this), opts);
				}
				else if($(this).is('textarea')){
					setTextArea($(this), opts);
				}
				setFocusEvents($(this), opts);
			});
		}
		
		function setFocusEvents($obj, opts){
			$obj.bind({
				'focus': function() {
					$obj.parent().addClass('focus');
				},
				'blur': function() {
					$obj.parent().removeClass('focus');
				}
			});
		}

		function setTextArea($obj, opts){
			$obj.wrap('<div class=\'textarea-replacement\'>');
			if($obj.hasClass('large')){
				$obj.parent().addClass('large');
			}
			else if($obj.hasClass('email-box')){
				$obj.parent().addClass('email-box');
			}
		}

		function setUploadFields($obj, opts){
			$obj.parent().css('padding', '10px 0 12px 0');
			$obj.wrap('<div class=\'upload-replacement\'>');
		}
		
		function setTextFields($obj, opts){
			$obj.wrap('<div class=\'input-replacement\'>');
			if($obj.hasClass('medium')){
				$obj.parent().addClass('medium');
			}
			else if($obj.hasClass('small')){
				$obj.parent().addClass('small');
			}
			else if($obj.hasClass('mini')){
				$obj.parent().addClass('mini');
			}
			else if($obj.hasClass('buildno')){
				$obj.parent().addClass('buildno');
			}
			else if($obj.hasClass('email-field')){
				$obj.parent().addClass('email-field');
			}
			else if($obj.hasClass('login-field')){
				$obj.parent().addClass('login-field');
			}
		}

		function setPasswordFields($obj, opts){
			$obj.wrap('<div class=\'input-replacement\'>');
			if($obj.hasClass('small')){
				$obj.parent().addClass('small');
			}
			else if($obj.hasClass('login-field')){
				$obj.parent().addClass('login-field');
			}
		}
		
		function setSelectBoxes($obj, opts){
			$obj.wrap('<div class=\'select-replacement\'>');
			// Added option for small select boxes - WD 2011/05/16
			if($obj.hasClass('small')){
				$obj.parent().addClass('small');
			}
			else if($obj.hasClass('medium')){
				$obj.parent().addClass('medium');
			}
			else if($obj.hasClass('large')){
				$obj.parent().addClass('large');
			}
			else if($obj.hasClass('quick-search')){
				$obj.parent().addClass('quick-search');
			}
			
			// Adjust size of datepicker selects
			if($obj.hasClass('d')){
				$obj.parent().addClass('day');
			}
			else if($obj.hasClass('m')){
				$obj.parent().addClass('month');
			}
			else if($obj.hasClass('y')){
				$obj.parent().addClass('year');
			}
			
			$obj.parent().prepend('<div class="selection">' + $obj.find(':selected').html() + '</div>');

			$obj.bind({
				'change': function() {
					$selectValue = $obj.find(':selected').html();
					$obj.parent().find('div.selection').html($selectValue);
				}
			});
			
			// Register keypress events on the selectboxes
			$obj.keydown(function(e) {
				switch(e.keyCode) { 
					// User pressed "up" arrow
					case 38:
						$index = $obj.find(':selected').index();
						$totalItems = $obj.find('option').length - 1;
						if($index <= 0){
							$index;
						}
						else{
							$index = $index - 1;
						}
						$selectValue = $obj.find('option').eq($index).html();
						
						//NOTE TO WIPRO - Please ensure alerts are commented out!
						//alert($selectValue);
						$obj.parent().find('div').html($selectValue);
					break;
					// User pressed "down" arrow
					case 40:
						$index = $obj.find(':selected').index();
						$totalItems = $obj.find('option').length - 1;
						if($index >= $totalItems){
							$index;
						}
						else{
							$index = $index + 1;
						}
						$selectValue = $obj.find('option').eq($index).html();
						$obj.parent().find('div').html($selectValue);
					break;
				}
			});
			
			$obj.css({
				'opacity':'0', 
				'filter':'alpha(opacity=0)'
			});
		}
		
	};
	
	// Form Defaults
	$.fn.wtdforms.defaults = {
		speed: 2000,
		easing: 'easeOutQuint'
	};
	
	
})(jQuery);
