/*
 *
 *	jQuery Timer plugin v0.1
 *		Matt Schmidt [http://www.mattptr.net]
 *
 *	Licensed under the BSD License:
 *		http://mattptr.net/license/license.txt
 *
 */
 
 jQuery.timer = function (interval, callback)
 {
 /**
  *
  * timer() provides a cleaner way to handle intervals  
  *
  *	@usage
  * $.timer(interval, callback);
  *
  *
  * @example
  * $.timer(1000, function (timer) {
  * 	alert("hello");
  * 	timer.stop();
  * });
  * @desc Show an alert box after 1 second and stop
  * 
  * @example
  * var second = false;
  *	$.timer(1000, function (timer) {
  *		if (!second) {
  *			alert('First time!');
  *			second = true;
  *			timer.reset(3000);
  *		}
  *		else {
  *			alert('Second time');
  *			timer.stop();
  *		}
  *	});
  * @desc Show an alert box after 1 second and show another after 3 seconds
  *
  * 
  */

	var interval = interval || 100;

	if (!callback)
		return false;
	
	_timer = function (interval, callback) {
		this.stop = function () {
			clearInterval(self.id);
		};
		
		this.internalCallback = function () {
			callback(self);
		};
		
		this.reset = function (val) {
			if (self.id)
				clearInterval(self.id);
			
			var val = val || 100;
			this.id = setInterval(this.internalCallback, val);
		};
		
		this.interval = interval;
		this.id = setInterval(this.internalCallback, this.interval);
		
		var self = this;
	};
	
	return new _timer(interval, callback);
 };
 
 

var AdPlugin = {
	settings : {
		small_ad : '#footer #small-ad',
		full_ad : '#footer #full-ad',
		open :'#small-ad a',
		close : '#full-ad #close-ad',
		submit : '#full-ad .continue',
		content: '#full-ad .content',
		
		expanded : false, // reffers to ad state
		
		slidingDirection : 'up',
		userClicks : 0,
		showCount : 0,
		
		seconds : 15000,
		slideSpeed : 800,
		full_ad_height : '105px'
	},
	
	
	init : function(){
		var AdPlugin = this,
			settings = this.settings;
			
		$(settings.full_ad).css({
			'left' : ($(window).width()-$(settings.small_ad).width())/2,
			'bottom' : '-'+settings.full_ad_height
		}).toggle();
		
		var togglers = [$(settings.open), $(settings.close)];
		
		$(togglers).each(function(){
			$(this).click(function(){
				AdPlugin.handleClick();
				AdPlugin.toggleAd();
				return false;
			});
		});
		
		var inputs = [$(settings.content).find('.name'), $(settings.content).find('.email')];
		$(inputs).each(function(){
			$(this).click(function(){
				AdPlugin.handleClick();
			});
		});
		
		$(settings.content).click(function(){
			AdPlugin.handleClick();
		});
		
		$(settings.submit).click(function(){
			AdPlugin.handleClick();
			$(settings.wrapper).find('form').submit();
		});
		
		AdPlugin.countdown();
	},	
	
	handleClick : function(){
		var AdPlugin = this,
			settings = this.settings;
			
		if(settings.slidingDirection == 'up')
		{
			settings.slidingDirection = 'down';
		}
		settings.userClicks++;
	},
	
	countdown : function(currentShowCount){
		var AdPlugin = this,
			settings = this.settings,
			currentShowCount = currentShowCount || -1;
		
		$.timer(settings.seconds, function(timer){
			if(settings.slidingDirection == 'up') // x seconds have passed without user clicking on the ad
			{
				settings.slidingDirection = 'down';
				AdPlugin.toggleAd();
			}
			else if(settings.slidingDirection == 'down')
			{
				if(settings.showCount==currentShowCount && settings.userClicks==0)
				{
					//alert(settings.showCount+"=="+currentShowCount);
					if(settings.showCount <= 1){
					AdPlugin.toggleAd(); 
					}
				}
			}
			timer.stop();
		});
	},
	
	toggleAd : function(){
		var AdPlugin = this;
		var settings = this.settings;
		
		settings.expanded = (settings.expanded==false) ? true : false;		
		
		if(settings.expanded == true)
		{
			$(settings.full_ad).animate({"bottom" : "+="+settings.full_ad_height}, settings.slideSpeed);
		
			settings.showCount++;
			settings.userClicks = 0;
			
			AdPlugin.countdown(settings.showCount);
		}
		else
		{
			$(settings.full_ad).animate({"bottom" : "-="+settings.full_ad_height}, settings.slideSpeed);
		}
	}
	
};

$(document).ready(function() {	
	AdPlugin.init();	
});
