(function($) {
	
	$.fn.preview = function()
	{
		return this.each(function()
		{
			var $preview = $(this);
			var $page  = $('div#landing-page');

			var $mask = $('<div class="preview-mask"></div>').appendTo($page);
			var $image = $('<img src="'+$(this).attr('uiparam')+'" alt="" class="preview-image" />').appendTo($page);
			var $close = $('<img src="content/img/close.png" alt="" class="preview-close" />').appendTo($page);
			
			$preview.bind('preview:close',function()
			{
				$mask.add($image).add($close).css({display:'none'});
				$page.addClass('min-full-height');
				$('.add-this').css({display:'block'});
			});

			$preview.bind('preview:init',function()
			{   
				//20100322 cu - newsletter style update
				//$mask.css({width:$('div.page').width()}); //orig code
				$mask.css({width:$(document).width()});
				var l = ( $(document).width() - $("div.page").width() ) / 2;
				$image.css({left:l});
				$mask.insertBefore( $("body").children([0]) );
				$image.insertBefore( $("body").children([0]) );
				$close.insertBefore( $("body").children([0]) );
				//
				if(!browser.islegacy)
			    {
					$mask.add($image).add($close).css({opacity:0});
				}
				
			    $close.click(function()
			    {
					if(!browser.islegacy)
					{
						$image.add($close).animate({opacity:0},500,"easeInQuad");
						$mask.animate({opacity:0},500,"easeInQuad",function()
						{
							$preview.trigger('preview:close');
						});
			        }
					else
					{
						$preview.trigger('preview:close');
						$('select').css({visibility:'visible'});
					}
			    });
			    
			    $preview.css({cursor:'pointer'}).click(function()
			    {
					$mask.add($image).add($close).css({display:'block'});
					$image.css({marginLeft:($('div.page').width()-$image.width())/2});
					//20100322 cu - newsletter style update
					//$close.css({left:(($('div.page').width()-$image.width())/2)+20+$image.width()}); //orig code
					$close.css({left:(($(document).width()-$image.width())/2)+$image.width()-2});
					//
					$page.removeClass('min-full-height').add($mask).css({height:$image.height()});
					$('.add-this').css({display:'none'});

					if(!browser.islegacy)
					{
						$mask.animate({opacity:0.75},500,"easeInQuad");
						$image.add($close).animate({opacity:1},500,"easeInQuad");
					}
					else
					{
						$('select').css({visibility:'hidden'});
					}

					return false;
			    });
				
			}).trigger('preview:init');
		});
	};

	$.fn.registration = function()
	{
		return this.each(function()
		{
		    var _registration = this;
			var $registration = $(this);

			$registration.bind('registration:transition',function(event)
			{
				var $curr = $('div#'+event.step)
				var $next = $curr.next('div.step');
				
				$curr.css({display:'none'});
				$next.css({display:'block'});
				_registration.locked = false;
				
				$curr.find('input,select,a').attr('tabindex','-1');
				$next.find('input,select,a').attr('tabindex','');
			});
			
			$registration.bind('registration:step',function(event)
			{
			    if(!_registration.locked)
			    {
			        _registration.locked = true;
			        
			        $errors = event.button.parents('div.step').find('div.error');
			        $errors.find('> p').css({display:'none'});
			        
			        switch(event.step)
			        {
			            case "step-one":
			            
			                $('#reg-firstname').val($.trim($('#reg-firstname').val()));
			                $('#reg-lastname').val($.trim($('#reg-lastname').val()));
			                
			                if($('#reg-salutation').val() == "null")
			                {
			                    //$('#reg-salutation').focus();
			                    $errors.find('> p:eq(0)').css({display:'block'});
			                }
			                
			                if(!(new RegExp(/\S/).test($('#reg-firstname').val())))
			                {
			                    //$('#reg-firstname').focus();
			                    $errors.find('> p:eq(1)').css({display:'block'});
			                }
			                
			                if(!(new RegExp(/\S/).test($('#reg-lastname').val())))
			                {
			                    //$('#reg-lastname').focus();
			                    $errors.find('> p:eq(2)').css({display:'block'});
			                }
			                
			                if(!(new RegExp(/^[a-zA-Z]+$/).test($('#reg-firstname').val())))
			                {
			                    //$('#reg-firstname').focus();
			                    $errors.find('> p:eq(3)').css({display:'block'});
			                }
			                
			                if(!(new RegExp(/^[a-zA-Z\-]+$/).test($('#reg-lastname').val())))
			                {
			                    //$('#reg-lastname').focus();
			                    $errors.find('> p:eq(4)').css({display:'block'});
			                }
			                break;
			                
			            case "step-two":
			                
			                if($('#reg-birthyear').val() == "null")
			                {
			                    //$('#reg-birthyear').focus();
			                    $errors.find('> p:eq(2)').css({display:'block'});
			                }
			                
			                if($('#reg-birthday').val() == "null")
			                {
			                    //$('#reg-birthday').focus();
			                    $errors.find('> p:eq(1)').css({display:'block'});
			                }
			                
			                if($('#reg-birthmonth').val() == "null")
			                {
			                    //$('#reg-birthmonth').focus();
			                    $errors.find('> p:eq(0)').css({display:'block'});
			                }
			                break;
			                
			            case "step-three":
			                
			                if(!(new RegExp(/[0-9]{5}/i).test($('#reg-zipcode').val())))
			                {
			                    //$('#reg-zipcode').focus();
			                    $errors.find('> p:eq(1)').css({display:'block'});
			                }
			                
			                if($('#reg-state').val() == "null")
			                {
			                    //$('#reg-state').focus();
			                    $errors.find('> p:eq(0)').css({display:'block'});
			                }
			                break;
			                
                        case "step-four":
                            
                            if(!(new RegExp(/^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/).test($('#reg-emailaddress').val())))
			                {
			                    //$('#reg-emailaddress').focus();
			                    $errors.find('> p:eq(0)').css({display:'block'});
			                }
			                
                            if(($.trim($('#reg-password').val()).length < 6))
			                {
			                    //$('#reg-password').focus();
			                    $errors.find('> p:eq(1)').css({display:'block'});
			                }
			                
			                if(!(new RegExp(/^[a-z0-9-]+$/i).test($('#reg-password').val())))
			                {
			                    //$('#reg-password').focus();
			                    $errors.find('> p:eq(2)').css({display:'block'});
			                }
			                
			                if(!(new RegExp(/[0-9]{1}/i).test($('#reg-password').val())))
			                {
			                    //$('#reg-password').focus();
			                    $errors.find('> p:eq(3)').css({display:'block'});
			                }

							if(!(new RegExp(/[a-zA-Z]{1}/i).test($('#reg-password').val())))
			                {
			                    //$('#reg-password').focus();
			                    $errors.find('> p:eq(3)').css({display:'block'});
			                }
                            break;
			        }
			        
			        if($errors.find('> p:visible').length > 0)
			        {
			            $errors.find('> p:visible').filter(':gt(0)').css({display:'none'});
			            _registration.locked = false;
			        }
			        else
			        {   
						$('body').trigger({type:'tracking:global',action:event.step});

			            switch(event.step)
			            {
			                case "step-two":
			                    var _birthdate = new Date(parseInt($('#reg-birthyear').val())+18,$('#reg-birthmonth').val(),$('#reg-birthday').val());
								
								if((new Date().getTime() - _birthdate.getTime()) < 0)
								{
								    $('body').trigger({type:'util:transition',page:"ineligible"});
								}
								else
								{
								    $registration.trigger({type:'registration:transition',step:event.step});
								}
								break;
								
			                case "step-four":
								if(!browser.islegacy)
								{
									$registration.animate({opacity:0.5},350,"linear",function()
									{
										$.post("script.aspx",$registration.find('input:text,input:password,select').add('input#reg-sourcecode').serialize(),function(response)
										{
											var _response = parseJSON(response);
											
											switch(_response.status)
											{
												case "RegistrationSuccess":
													$('body').trigger({type:'util:transition',page:"success"});
													break;
												
												case "RegistrationDuplicate":
													$('body').trigger({type:'util:transition',page:"duplicate"});
													break;
													
												default:
													$('body').trigger({type:'util:transition',page:"error"});
													break;
											}
										});
									});
								}
								else
								{
									$.post("script.aspx",$registration.find('input:text,input:password,select').add('input#reg-sourcecode').serialize(),function(response)
									{
										var _response = parseJSON(response);
										
										switch(_response.status)
										{
											case "RegistrationSuccess":
												$('body').trigger({type:'util:transition',page:"success"});
												break;
											
											case "RegistrationDuplicate":
												$('body').trigger({type:'util:transition',page:"duplicate"});
												break;
												
											default:
												$('body').trigger({type:'util:transition',page:"error"});
												break;
										}
									});
								}
			                    break;
			                    
			                default:
			                    $registration.trigger({type:'registration:transition',step:event.step});
			                    break;
			            }
			        }
			    }
			});
			
			$registration.bind('registration:init',function()
			{   
			    $('#step-two,#step-three,#step-four').find('input,select,a').attr('tabindex','-1');
			    
				$registration.find('input:text,input:password').keydown(function(event)
				{
					if(event.keyCode == 13)
					{	
						$(this).parents('div.step').find('[uibehavior=button]:first').click();
						return false;
					}
				});
				
				$('[uibehavior=button]').css({cursor:'pointer'}).click(function()
				{
				    $registration.trigger({type:'registration:step',step:$(this).attr('uiparam'),button:$(this)});
				});
				
				_registration.locked = false;

				//$('#reg-salutation').focus();
								
			}).trigger('registration:init');
		});
	};
	
	$.fn.util = function()
	{
		return this.each(function()
		{
			var $util = $(this);
			var $pages = $util.find('div.page > div');
			var $dcframe = $('<iframe src="" wdith="1" height="1" frameborder="0" style="display:none;" id="tracking-dcframe"></iframe>').appendTo($util);
			
			$util.bind('tracking:doubleclick',function(event)
			{
				try
				{
					var axel = Math.random()+"";
					var a = axel * 10000000000000;
					$('#tracking-dcframe').attr('src',event.url+'ord=1;num='+a+'?');
				}
				catch(_ex)
				{
					//console.log(_ex);
				}
			});

			$util.bind('tracking:webtrends',function(event)
			{
				try
				{
					dcsVar(event.url);
					dcsMeta();
					dcsFunc("dcsAdv");
					dcsTagCustom();
				}
				catch(_ex)
				{
					//console.log(_ex);
				}
			});

			$util.bind('tracking:addify',function(event)
			{
				try
				{
					$util.append('<img src="'+event.url+'&rand='+Math.round(Math.random()*100000000)+'" alt="" class="tracking-tag" />');
				}
				catch(_ex)
				{
					//console.log(_ex);
				}
			});

			$util.bind('util:showpage',function(event)
			{
				if(!browser.islegacy)
				{
					$pages.filter('div#'+event.page+'-page').addClass('min-full-height').removeClass('hide').animate({opacity:1},500,"easeInQuad");
				}
				else
				{
					$pages.filter('div#'+event.page+'-page').addClass('min-full-height').removeClass('hide');
				}
			});

			$util.bind('util:transition',function(event)
			{   
                if($pages.not('div.hide').length > 0)
                {
                    $pages.not('div.hide').animate({opacity:0},500,"easeInQuad",function()
                    {
                        $pages.not('div.hide').removeClass('min-full-height').addClass('hide');
						$util.trigger({type:'util:showpage',page:event.page});
                    });
                }
                else
                {
                   $util.trigger({type:'util:showpage',page:event.page});
                }
                
                $('body').trigger({type:'tracking:global',action:event.page});
			});
			
			$util.bind('util:init',function()
			{   
			    if(!browser.islegacy)
				{
					$pages.css({opacity:0});
				}

                $util.trigger({type:'util:transition',page:$util.attr('showpage')});
				
			}).trigger('util:init');
		});
	};
	
	$.fn.carousel = function()
	{
	    return this.each(function()
		{
			var $carousel = $(this);
			var $slides = $carousel.find('img.slide');
			
			$carousel.bind('carousel:change',function(event)
			{
				if($carousel.attr('locked') == 'false')
				{
					$carousel.attr('locked','true');

					var _curr = parseInt($carousel.attr('current'));
					var _step = _curr+event.step;

					_step = (_step < 0) ? ($slides.length-1) : _step;
					_step = (_step > ($slides.length-1)) ? 0 : _step;

					$carousel.attr('current',_step);
					
					if(!browser.islegacy)
					{
						$slides.filter(':eq('+_curr+')').css({zIndex:3}).stop().animate({opacity:0},800,"linear",function()
						{
							$carousel.attr('locked','false');
						});

						$slides.filter(':eq('+_step+')').css({opacity:1,zIndex:2});
					}
					else
					{
						$slides.css({visibility:'hidden'}).filter(':eq('+_step+')').css({visibility:'visible'});
						$carousel.attr('locked','false');
					}
				}
			});

			$carousel.bind('carousel:init',function(event)
			{
				$carousel.find('img.left').css({cursor:'pointer'}).click(function()
				{
					$carousel.trigger({type:'carousel:change',step:-1});
				});

				$carousel.find('img.right').css({cursor:'pointer'}).click(function()
				{
					$carousel.trigger({type:'carousel:change',step:1});
				});
				
				if(!browser.islegacy)
				{
					$slides.css({visibility:'visible'}).css({opacity:0});

					$slides.filter(':eq(0)').animate({opacity:1},800,"linear",function()
					{
						$carousel.attr('locked','false').attr('current','0');
					});
				}
				else
				{
					$slides.filter(':eq(0)').css({visibility:'visible'});
					$carousel.attr('locked','false').attr('current','0');
				}

				if($carousel.attr('autoplay') == "true")
				{
					window.setInterval("$('[uibehavior=carousel]').trigger({type:'carousel:change',step:1})",6000);
				}

			}).trigger('carousel:init');
		});
	};

	$.fn.modcarousel = function()
	{
	    return this.each(function()
		{
			var $modcarousel = $(this);
			var $slides = $modcarousel.find('> div');
			
			$modcarousel.bind('modcarousel:change',function(event)
			{
				var _curr = parseInt($modcarousel.attr('current'));
				var _step = _curr+event.step;

				_step = (_step < 0) ? ($slides.length-1) : _step;
				_step = (_step > ($slides.length-1)) ? 0 : _step;

				$modcarousel.attr('current',_step);
				
				$slides.css({display:'none'}).filter(':eq('+_step+')').css({display:'block'});
			});

			$modcarousel.bind('modcarousel:init',function(event)
			{
				$modcarousel.parent('div').find('[uibehavior=module-carousel-left]').css({cursor:'pointer'}).click(function()
				{
					$modcarousel.trigger({type:'modcarousel:change',step:-1});
				});

				$modcarousel.parent('div').find('[uibehavior=module-carousel-right]').css({cursor:'pointer'}).click(function()
				{
					$modcarousel.trigger({type:'modcarousel:change',step:1});
				});
				
				$modcarousel.attr('current','0');
				$slides.filter(':eq(0)').css({display:'block'});

			}).trigger('modcarousel:init');
		});
	};
	
	//slideshow
	$(function() {
		if( $("#slideshow") ){
			slideshowInterval = setInterval( "$.slideShow()", 8000 ); //image switch frequency
			var h = $("#slideshow img").height();
			var w = $("#slideshow img").width();
			$("#slideshow").css("height",h);
			$("#slideshow").css("width",w);
			$("#slideshow-manual li").click( function(){
				clearInterval(slideshowInterval);
				var i = $("li").index(this);
				var c = "#landing-page"+" ."+i;
				$(c).animate({opacity: 1.0}, 1000);
				$("#slideshow img").not(c).animate({opacity: 0}, 1000);
			});
		}
	});
	
	jQuery.slideShow = function() {
		var $active = $('#slideshow img.active');
		if ( $active.length == 0 ){
			$active = $('#slideshow img:last');
		}
		if($active.next().length){
			$next = $active.next();
		}
		else {
			$next = $('#slideshow img:first');
		}
		$active.addClass('last-active');
		$next.css({opacity: 0.0})
			.addClass('active')
			.animate({opacity: 1.0}, 1000, function() {
				$active.removeClass('active last-active');
			});
	}
	
		
	
})(jQuery);



