/*
####################################################################################################
********** Utility Object **********
####################################################################################################
*/

var util = {
	loading: function(div){
		$(div).html('<p class="loading"><img src="images/loading.gif" alt="Loading..." /></p>');
	}

};


/*
####################################################################################################
********** Email Sharing Object **********
####################################################################################################
*/
// email business to a friend
// uses colorbox. HTML form @ ajax/email_form.html

var email = {
	emailForm: function(){
		$('#email_it').click(function(event){
			event.preventDefault();
			var bizId = $('#email_it').attr('title'); // business id is attached to class as way to pass along
			//$('#email_it').attr('title', '');
			
			$('#email_it').colorbox({opacity:.7, title: true,  onComplete: function(){
				$('#businessID').val(bizId); // set biz. id in hidden input so we can fish out biz. data on server side
								
				form.validate('#email_form', '#submit_email', function(){					
					var formData = $('#email_form').serializeArray();
					$.post('php/config.php?email-friend=true', formData,
					   function(d){
							$('#email_form').remove();
							$('h3#email_form_h3').empty();
							if (d.message == "success") {
								$('h3#email_form_h3').html("Thank you! Your email has been sent");
							} else{
								$('h3#email_form_h3').html("Oops! Something went wrong. Please try again.");
							}
							
							$.fn.colorbox.resize();
			
					   }, 'json');
				});


				
			}});
		});
	}
	
};


/*
####################################################################################################
********** Form Object **********
####################################################################################################
*/

var form = {
		
	validate: function(formId, submitId, callback){

		$(formId+' '+submitId).click(function(event){

			//event.preventDefault();

			var totalRequired = $(formId+' .required').length;
			var errorCount = 0;
			var warning = 'error';

			$(formId+' .required').each(function(i){

				if($(this).hasClass('email')){

					if($(this).val() != $(this).val().match(/.+@.+\..+/)){

						$(this).addClass(warning);
						$(this).siblings('label').addClass(warning);

						errorCount++;

					}else{

						$(this).removeClass(warning);
						$(this).siblings('label').removeClass(warning);


					}

				}else if($(this).val() == ''){

					$(this).addClass(warning);
					$(this).siblings('label').addClass(warning);

					errorCount++;

				}else{

					$(this).removeClass(warning);
					$(this).siblings('label').removeClass(warning);

				}

				if($(this).is(':checkbox') && !$(this).is(':checked')){
					errorCount++;
					$(this).siblings('label').addClass(warning);
				}else if($(this).is(':checkbox') && $(this).is(':checked')){
					$(this).siblings('label').removeClass(warning);
				}


			});

			var errorMessage = 'Missing <span>'+errorCount+' / '+totalRequired+'</span> required fields.';

			if(errorCount > 0){
				event.preventDefault();
				if(errorCount > 1){
					$('p.error').html(errorMessage);
				}else{
					$('p.error').html(errorMessage);
				}
			}else{
				if($.isFunction(callback)){
					event.preventDefault();
					callback();
				}
				$('p.error').html('* <span>Required Field</span><br/>&nbsp;');
			}

		});

	},
		
	wordCount: function(){
		
		$('#biz-form textarea').keyup(function(event){
			
			var maxWords = 250;
			var wordCount = $(this).val().split(' ').length;
			if($(this).val() === ''){
				wordCount = 0;
			}			
			var wordsRemaining = maxWords - wordCount;
			var countSpan = $(this).siblings('label').children('span');
			
			if(wordsRemaining < 0){
				$(this).val($(this).val().substr(0,maxWords));
			}else{
				countSpan.html(wordsRemaining);
			}
			
		});
	}
	
};


/*
####################################################################################################
********** Vote Page Object **********
####################################################################################################
*/

var votePage = {
	
	getPreview: false,
	
	// Grab the business name on the url, then go get the business' info, ajax-style
	showInfo: function(topicID){
			util.loading('#biz-info-r');
			var bizName = votePage.parseUrl();
			var preview = "";
			if (votePage.getPreview == true) {
				var preview = "&preview=true";
			};
			$.getJSON('php/config.php?getBizData=true&bizName='+ bizName + preview, function(data){
				var d = data;
				/*
				if (!d) {
					window.location.href = 'http://www.1800vistaprint.com/contest/';
				};
				*/
				
				// --- First, add misc. text to various points on the page
				/*
					var bizLogoPadding = d.bizLogoPadding * 1;
				
					if(bizLogoPadding > 0){
						var bizLogoHeight = 120 - bizLogoPadding;
						console.log(bizLogoHeight);
						$('#biz-info-l').css({
							'height': bizLogoHeight + 'px',
							'padding-top': d.bizLogoPadding + 'px'	
						});
						
					}else{
						$('#biz-info-l').css({
							'height': '120px',
							'padding-top': d.bizLogoPadding + 'px'	
						});
					}
				*/
				
				// --- First, add misc. text to various points on the page
				$('#biz-info-l').css({
					height: (120-d.bizLogoPadding) + 'px',
					'padding-top': d.bizLogoPadding + 'px'
				});
				
				$('.biz-name').html(d.bizName); // business name in welcome text copy
				$('#do-vote').attr('href',d.id);
				$('#tally-box span').html('');
				$('#email_it').attr('title', d.id);
				
				// Next, add the business address & business logo
				$('#biz-logo').attr({
					src: 'images/uploads/' + d.bizLogo + '',
					height: d.bizLogoHeight,
					width: d.bizLogoWidth
					//style: 'padding-top:' + d.bizLogoPadding + 'px;'
				}); 
				
				if (d.bizURL !="") {
					$('#biz-logo').wrap(
						'<a href="' + d.bizURL + '"></a>'
					);		
				};
	
				var bizInfo = '<p class="biz-name">' + d.bizName + '</p>';
				bizInfo += '<p>' + d.bizAddress + '</p>';
				bizInfo += '<p>' + d.bizCity + ', ' + d.bizState +' ' + d.bizZip + '</p>';
				if (d.bizPhone != "") {
					bizInfo += '<p>' + d.bizPhone + '</p>';	
				};
				//bizInfo += '<p><a href="' + d.bizURL + '">' + d.bizURL + '</a></p>';	
				$('#biz-info-r').html(bizInfo);
				
				// --- Next, add the question answer data
				var answers = '<li><h3>Why should you be selected as the winner?</h3>' + d.whyWinner + '</li>';
				answers += '<li><h3>How do you impress your customers?</h3>' + d.howImpressCustomers + '</li>';
				answers += '<li><h3>How do you plan to use the prize package if you win?</h3>' + d.howUsePackage + '</li>';
				d.whatElse == "" ? null : answers += '<li><h3>What else should we know about your business?</h3>' + d.whatElse + '</li>';
				
				$('#biz-answers').html(answers);
				
				votePage.castVote();
				email.emailForm();

			});
	},
	
	parseUrl: function(){
		var url = window.location.href;
		url = url.split('/');
			var preview = url[4].search('preview');
			if (preview != -1) {
				var string = url[4].split('?');
				votePage.getPreview = true;
				return string[0];
			} else {
				return url[4]; // the fourth array element contains the business name.
			}
	},
	
	castVote: function(){
		//$('span#vote-checkbox').html('<img src="images/cast-your-vote.jpg" />');
		
		$('#do-vote').click(function(e){
			var id = $('#do-vote').attr('href');
			//util.loading('#tally-box span');
			$.getJSON('php/config.php?castVote=true&id=' + id + '', function(d){
				//console.log(d);
				//$('span#vote-checkbox').empty();
				$('#do-vote').empty();
				
				// 1 means vote added, 2 means user already voted
				// in either case, show the already voted graphic
				if (d.success == '1' || d.success == '2') {
					$('span#vote-checkbox').html('<img src="images/thanks-for-voting.jpg" />');
				}
			});
			e.preventDefault();
		});
	}
};


/*
####################################################################################################
********** Carousel Object **********
####################################################################################################
*/

var carousel = {
	
	loadVertical: function(){
		
		$.getJSON('php/config.php?load-carousel=true', function(data){

			var logos = '<ul id="logo-list">';
			
			
			for(i=0; i<data.length; i++){
				
				if(i % 2 == 0){
					if (i>=2){logos += '</li>';}
					logos += '<li>';	
				}
				
				var bizId = data[i].id;
				var bizName = data[i].name;
				var img = data[i].img;
				var link = data[i].link;
				
				var logoHeight = data[i].bizLogoHeight;
				var logoWidth = data[i].bizLogoWidth;
				var logoPadding = data[i].bizLogoPadding;
				
				if(img == ''){
					img = 'no-logo.jpg';
					logoWidth = 150;
					logoHeight = 120;
					logoPadding = 0;
				}
				
				logos += '<div class="image-holder">';
				logos += '<a href="'+link+'">';
				logos += '<img src="images/uploads/'+img+'" alt="'+bizName+'" height="'+ logoHeight +'" width="'+ logoHeight +'" style="padding-top:'+ logoPadding +'px" />';
				logos += '</a>';
				logos += '</div>'

			}
			
			if(data.length % 2 != 0){
				//Additional image if total number is odd.
				logos += '<div class="image-holder"><img src="images/uploads/no-logo.jpg" alt=""/></div>';	
			}

			logos += '</li></ul>';
			//console.log(logos);

			$('#logo-slider').html(logos);

			$('#logo-slider').jCarouselLite({
		        btnNext: ".down",
		        btnPrev: ".up",
				visible: 3,
				scroll: 1,
				vertical: true
		    });

		});	
		
	},
	
	loadHorizontal: function(){
		
		$.getJSON('php/config.php?load-carousel=true', function(data){

			var logos = '<ul id="logo-list">';
			
			for(i=0; i<data.length; i++){
				
				var bizId = data[i].id;
				var bizName = data[i].name;
				var img = data[i].img;
				var link = data[i].link;
				
				var logoHeight = data[i].bizLogoHeight;
				var logoWidth = data[i].bizLogoWidth;
				var logoPadding = data[i].bizLogoPadding;
				
				if(img == ''){
					img = 'no-logo.jpg';
					logoWidth = 150;
					logoHeight = 120;
					logoPadding = 0;
				}
				
				
				logos += '<li>';
				logos += '<a href="'+link+'">';
				logos += '<img src="images/uploads/'+img+'" alt="'+bizName+'" height="'+ logoHeight +'" width="'+ logoWidth +'" style="padding-top:'+ logoPadding +'px; margin:0 auto;" />';
				logos += '</a>';
				logos += '</li>';

			}

			$('#logo-slider').html(logos);

			$('#logo-slider').jCarouselLite({
		        btnNext: ".next",
		        btnPrev: ".prev",
				visible: 4,
				scroll: 1
		    });

		});
		
	}

};


/*
####################################################################################################
********** Sharing Object **********
####################################################################################################
*/

var share = {
	
	init: function(){
	
		share.shareForm();
		
	},
	
	shareForm: function(){
		form.validate('#share-form', '#submit', function(){					
			var formData = $('#share-form').serializeArray();
			$.post('php/config.php?promote-contest=true', formData, function(){
				
				share.loadFbTw();
	
			});
		});
	},
	
	loadFbTw: function(){
		
		$('#dynamic-content').load('ajax/fb-tw-share.html', function(){
			$("#header-copy").html('<p><strong>SHARE BELOW</strong> FOR ADDITIONAL CHANCES TO WIN!</p>')
			$('#share-a-biz-hed').remove();
			share.facebookShare();
			share.twitterShare();
		});
		
	},
	
	facebookShare: function(){
		$('#share-this').click(function(event){
			event.preventDefault();
			var openFBwin = window.open("http://www.facebook.com/share.php?u=http://www.1800vistaprint.com/contest/",'sharer','toolbar=0,status=0,width=626,height=436');
			openFBwin.focus();
			$.getJSON("php/config.php?facebook-entry=true", function(data){
				//console.log(data[0]);
				share.facebookShared();
				var facebook = data[0].facebook;
				var twitter = data[0].twitter;
				
				if(facebook == 'true' && twitter == 'true'){
					share.bothShared();
				}
				
			});
		});
	},
	
	facebookShared: function(){
		$('#dynamic-facebook').load('ajax/facebook-shared.html');
	},
	
	twitterShare: function(){
		form.validate('#twitter-form', '#submit', function(){					
			var formData = $('#twitter-form').serializeArray();
			$('#dynamic-twitter').css('height', '170px'); // otherwise the twitter share box will collapse and ugly everything up
			util.loading('#twitter-form');
			
			// get the loading graphic in a nice position over the twitter bg graphic
			$('p.loading').css({
				position: 'absolute',
				left: '140px',
				top: '30px'
			})
			

			$.getJSON("php/config.php?twitter-entry=true", formData, function(data){
				
				//$('#dynamic-twitter').css('height', 'auto');
				
				console.log(data);
				// Use for debugging, will log Twitter errors 
			    //console.log(data[0].twitterInfo);
				//console.log(data[0].httpInfo);
				//console.log(data[0].twitter);

				var twitter = data[0].twitter;
				var facebook = data[0].facebook;
				var httpInfo = data[0].httpInfo;

				if(twitter == 'true' && facebook == 'false'){
					share.twitterShared();
				}else if(twitter == 'true' && facebook == 'true'){
					share.bothShared();
				}else if(twitter == 'error' || httpInfo == 401 || httpInfo == 403){
					share.twitterError();
				}

			});
		});
	},
	
	twitterShared: function(){
		$('.twitter-sharebox').load('ajax/twitter-shared.html');
	},
	
	twitterError: function(){
		util.loading('#twitter-form p#twitter-error');
		$('#dynamic-twitter').load('ajax/twitter-error.html', function(){
			$('#dynamic-twitter').css('height', 'auto');
			
			$('#reload-twitter-form').click(function(event){
				event.preventDefault();
				share.reloadTwitter();
			});
		});
	},
	
	reloadTwitter: function(){
		$('#dynamic-twitter').load('ajax/twitter-form.html', function(){
			share.twitterShare();
		});
	},
	
	bothShared: function(){
		$('#dynamic-content').load('ajax/both-shared-updated.html');
	}
	
};


/*
####################################################################################################
********** Toolbar Object **********
####################################################################################################
*/

var toolbar = {
	
	state: 0,
	
	open: function(){
		$('#toolbar-products').slideDown(function(){
			$('#product-toggle').css({backgroundPosition: '0 -27px'});
			toolbar.state = 1;
		});
	},
	
	close: function(){
		$('#toolbar-products').slideUp(function(){
			$('#product-toggle').css({backgroundPosition: '0 0'});
			toolbar.state = 0;
		});
	},
	
	showHide: function(){

		$('.toolbar-action').not('#toolbar-bottom-right').click(function(event){
			//event.preventDefault();
			
			if(toolbar.state == 1){
				toolbar.close();
			}else{
				toolbar.open();
			}
			
		});
		
	},
	
	toolTip: function(elementId){
		
		$(elementId).hover(function(e){

	    // Hover over code
	
	    	var titleText = $(this).attr('title');
	
	    	$(this).data('tipText', titleText).removeAttr('title');

	    	$('<p class="tooltip"></p>')
	      		.html(titleText+'<img src="images/toolbar/tooltip-point-v2.gif"/>')
	      		.appendTo('body')
	      		.css('top', (e.pageY - 50) + 'px')
	      		.css('left', (e.pageX - 115) + 'px')
	      		.fadeIn();
	
		}, function() {
		
		// Hover out code
	
	    	$(this).attr('title', $(this).data('tipText'));
	    	$('.tooltip').remove();
	
		}).mousemove(function(e){
		
	    // Mouse move code
	
			$('.tooltip')
				.css('top', (e.pageY - 50) + 'px')
				.css('left', (e.pageX - 115) + 'px');
				
	  });
		
	}
	
};


/*
####################################################################################################
********** Document Ready **********
####################################################################################################
*/

$(document).ready(function(){
	
	if ($('.single').length) {
		votePage.showInfo();
	};
	
	
	if($('#VPtoolbar').length){
		toolbar.showHide();
		toolbar.toolTip('#toolbar-social-icons a');
	}
	
	if($('#biz-form').length){
		form.validate('#biz-form', '#submit');
		form.wordCount();
	}	
	
	if($('#slider-strip').length){
		carousel.loadHorizontal();
	}
	
	if($('#slider-box').length){
		carousel.loadVertical();
	}
	
	if($('#share-form').length){
		share.init();
	}
	
	//setTimeout("$('.fb_share_count_top').html('0')", 1000);
	
});
