



/*
FUNCTION: main: 
*/	


var main = function() {
	
	// private variables
	var pageId = pageId;
	
	return {
	
		/*
		FUNCTION: wirePageContent: 
		main function used to wire up 
		global js events and also serve ato delegate
		page-specific js initialization 
		*/
		wirePageContent : function (pageId){
		
			if (pageId == 'reviews') Reviews.init();
			//if (pageId == 'blogs') Blogs.init();
			if (pageId == 'prodinfo') ProdInfo.init();
			if (pageId == 'askbounce') AskBounce.init();
			if (pageId == 'video') Video.init();			
			if (pageId == 'install') Install.init();
			if (pageId == 'betterhomes') Betterhomes.init();
			if (pageId == 'satisfaction-guaranteed') Satisfaction.init();
		},
		
		/*
		FUNCTION: loadPage: 
		responsible for making the ajax request for the page content frag.
		loads the content to the page and sets the nav to reflect the current
		page 
		*/
		loadPage : function (p,qs){
		
			pageId = p;
			
			$('div.fragment').remove();
			
			var page = '/en_US/includes/products/'+pageId+'.jsp?'+qs;
			var contentId = pageId+'-content';
			 
			$('div.tab-content').addClass('loading');
		
			$('.tab-content').append('<div id="'+contentId+'" class="fragment" />');
			$('#'+contentId).load(page, function(){
				$('div.tab-content').removeClass('loading');
				main.wirePageContent(pageId);
			});
			
		},
		
		/*
		FUNCTION: init: 
		*/
		
		init : function (){
		
			// load the reviews jsp fragment into the page
			main.wirePageContent(Page.getPageId());
			
			// set up the navigation events
			$("#tab-nav li").hover(
				function () {
					$(this).addClass('hover')
				}, 
				function () {
					$(this).removeClass('hover')
				}
			);

			$('#tab-nav li a').click(function(event){
				$('#tab-nav li').removeClass("active");
				$(this).parent().addClass('active')
				event.preventDefault();
				main.loadPage(this.id,'');

				// Added to remove duplicate click tags
				if (''+Page.getProductId() != 'dryer-bar')
				{
					trackPage('/' + Page.getLocale() + '/products/' + Page.getProductId() + '/' + this.id);
				}
				
			});
			
			
			$('.product-intro a').click(function(){
				if(Page.getProductId()=='dryer-bar'){
				trackPage('/'+'click'+'/' + Page.getLocale() + '/' + Page.getProductId() + '_buy_now');
				}
				else{
				trackPage('/' + Page.getLocale() + '/' + Page.getProductId() + '_buy_now');
				}

				trackSpotlight('http://ad.doubleclick.net/activity;src=2278269;type=bounc984;cat=bounc035;ord=1');
				trackSpotlight('http://ad.doubleclick.net/activity;src=2278269;type=bounc533;cat=bounc432;ord=1');
			});
				
			
		}
	};
	
}();

function checkForBelow18(data)
{
  if(!data)
  {
	document.location.href="/en_US/eligibility.jsp";
    return false;
  }
  else
  {
    Reviews.form.data.validate.review();
  }
}


var Reviews = function() {

	var nickname;
	var email;
	var rating;
	var city;
	var state;
	var title;
	var review;
	var recommend;
	var optSource;
	var firstName;
	var lastName;
	var address1;
	var address2;
	var contactCity;
	var contactState;
	var zip;
	var birthMonth;
	var birthDay;
	var birthYear;
	var errCode = 0;
	
	return {
	
		/*
		FUNCTION: init: 
		init reviews page DOM events
		*/
		init : function (){
			$('.pager a').click(function(event){
				event.preventDefault();
				
				var qs = this.href.split("?")[1];
				var page = '/en_US/includes/products/reviews-list.jsp?'+qs;
				
				$('#reviews-container').load(page,function(){
					Reviews.init();
				});
			});
			
			$('.product-review:first').addClass('open');
			
			$('.product-review').click(
				function(){
					var isOpen = $(this).className === 'product-review open' ? true : false;
					if (!isOpen){
						$('.product-review').removeClass('open')
						$(this).addClass('open');
						trackPage('/' + Page.getLocale() + '/products/' + Page.getProductId() + '/reviews/expand_review');
						trackSpotlight('http://ad.doubleclick.net/activity;src=2278269;type=bounc984;cat=bounc838;ord=1');
					}	
				}
			);
			
			$('p.helpful-comment-link a').click(function (event){
				event.preventDefault();
				$(this).parent().html('Thanks for your feedback!');
			});		
			
			$('#write-review').click(function(){
				Reviews.form.init();
			})
			
			$('form#sortForm select').change(function() {
				$('#reviews-content').remove();
				main.loadPage('reviews','sort='+$(this).val()+'&pager.offset=0');
			});
		},
		
		form : {
		
			init : function () {
			
				$.get('/en_US/products/dryer-bar/reviewForm.jspx', function(html){
					Reviews.form.view.edit.review(html);
					$('.product-review').removeClass('open');
					$('.product-review:first').addClass('open');
					$('#write-review, form#sortForm select').hide();		
					$('.pager').css('visibility','hidden'); 
					Reviews.form.util.setMaxLength();
					$("textarea.checkMax").bind("click mouseover keyup change", function(){Reviews.form.util.checkMaxLength(this.id); } )
					trackPage('/' + Page.getLocale() + '/products/' + Page.getProductId() + '/reviews/write_review');
				});
			},
			
			/* -------------------- */
			/* form action handlers */
			/* -------------------- */
						
			action : {
			
				preview : function (){
				
					$.ajax({  
						url: "/en_US/products/dryer-bar/previewReview.jspx",
						type: "POST",
						data: Reviews.form.data.setDataStr(),
						cache: false,
						success: function (html) {    
							 Reviews.form.view.preview(html);
						}
					});
				},
				
				edit : function (){
					$.ajax({  
						url: "/en_US/products/dryer-bar/reviewForm.jspx",   
						type: "POST",  
						data: Reviews.form.data.setDataStr(),       
						cache: false,  
						success: function (html) {    
							Reviews.form.view.edit.review(html);
						}         
					});  
				},
				
				submit : function (){
					$.ajax({  
						url: "/en_US/products/dryer-bar/submitReview.jspx",   
						type: "POST",  
						data: Reviews.form.data.setDataStr('submit'),       
						cache: false,  
						success: function (html) {    
							Reviews.form.view.submit(html);
						}         
					});  
				}
			},
			
			/* ------------------ */
			/* form view handlers */
			/* ------------------ */
			 
			view : {
			
				// preview form data
				preview: function (html){
				
					$('#form').html(html);
					
					Reviews.form.view.showRating();
					
					$('#edit-btn').click(function(){
						Reviews.form.action.edit();
					});
										
					$('#submit-btn').click(function(event){
						event.preventDefault();
						Reviews.form.data.validate.terms();
					});
				},
				
				// add/edit form view
				edit: {
				
					review : function (html) { 
					
						$('#form').html(html);
						$('#form-container').show();
						
						Reviews.form.view.showRating();
						Reviews.form.view.showRecommend();						
						Reviews.form.view.edit.newsletter.toggleFields();
							
						$('#close-form').click(function(){
							Reviews.form.view.hide();
						});	
						
						$('#rating span').click(function(){
							$('#input-rating').val($(this).text());
							Reviews.form.view.showRating();
						});
						
						$('#recommend span').click(	function(){
							$('#input-recommend').val($(this).text());
							Reviews.form.view.showRecommend();
						});	
						
						$('#opt-in input').click(function(){						    
							Reviews.form.view.edit.newsletter.toggleFields();
						});
			
						$('#preview-btn').click(function(event){
							event.preventDefault();							
							Reviews.form.data.validate.fields();
							//Reviews.form.action.preview();
						});
					},
					
					newsletter : { 
					
						toggleFields : function () {
						    						
							if($('#input-optDryerBar').attr("checked")){
							      Reviews.form.view.edit.newsletter.enableFields();
								  document.reviewFrm.optSource.value="DRYERBAR";								  
							}
							else 	
{								Reviews.form.view.edit.newsletter.disableFields();
								document.reviewFrm.optSource.value="";								 
							}
						},
					
						enableFields : function () {
						
							// enable the newsletter signup fields
							$('#newsletter').removeClass('disabled');
							$('#newsletter *').removeAttr("disabled")
														
							// populate the city
							if ($("#input-city")[0].value != "" && $("#input-contactCity")[0].value == "") 
								$('#input-contactCity').val($("#input-city").val());
							
							// populate the state
							var stateIdx = $("#input-state")[0].selectedIndex;
							var contactStateIdx = $("#input-contactState")[0].selectedIndex;
							
							if (stateIdx > 0 && contactStateIdx == 0)
								$("#input-contactState")[0].selectedIndex = stateIdx;
							
							// add required field indicator
							$('#newsletter .newsletter-req').append('<span class="req">*<span>');
							//$('#newsletter input:not[name=foo],#newsletter select').addClass('required');
							
						},
						
						disableFields : function () {
							$('#newsletter').addClass('disabled');
							$('#newsletter *').removeClass('form-error');
							$('#newsletter *').attr("disabled", true);
							$('span.req').remove();
						}
					}
				},
				
				showRating : function () {
				
					//debugger;
					
					ratingVal = $('#input-rating').val();
					$('#rating span').removeClass('on');
					for (i=1; i<=ratingVal; i++){
						$('#rating'+i).addClass('on');
					}
				},
				
				showRecommend : function () {
					recVal = $('#input-recommend').val();
					$('#recommend span').removeClass('on');
					$('#recommend-'+recVal.toLowerCase()).addClass('on');
				},
				
				submit: function (html){
				
					$('#form').html(html);
					$('#close-form, #close-btn').click(function(){
						Reviews.form.view.hide();
					});
					
					trackPage('/' + Page.getLocale() + '/products/' + Page.getProductId() + '/reviews/write_review/thanks');
					trackSpotlight('http://ad.doubleclick.net/activity;src=2278269;type=bounc984;cat=bounc472;ord=1');
					
				},
				
				hide : function (){
					$('#form-container').hide();
					$('#write-review, form#sortForm select').show();
					$('.pager').css('visibility','visible');
				},
				
				displayError : function (errCode){
				
					var errMsgs = new Array();
					errMsgs[1] = "Please correct the errors in the above form.";
					errMsgs[2] = "You have already submitted a review for this product";
					errMsgs[3] = "You may not use inappropriate language in the review";
					errMsgs[4] = "unknown";
					errMsgs[5] = "You must be over 13 years opt-in for the newsletter";
					errMsgs[6] = "To submit your review, please check the T&C box above";
					
					$('#error-msg').html(errMsgs[errCode]).show();
				}
			},
			
			/* ------------------ */
			/* form data handlers */
			/* ------------------ */
			
			data : {
			
				validate : {
				
					fields : function (){
					
						errCode = 0;
				
						$('#write-review-form *').removeClass('form-error');
						$('#error-msg').hide();
											
																	
						Reviews.form.data.getFormData();
						
						// 1. validate the standard form fields listed below
						$.validator.setDefaults({
					 		errorClass: "", 
							errorElement: "span",
					 		messages: {
					 			nickname: {required: ""},
								email: {required: "", email: ""},
								rating: {required: ""},
								recommend: {required: ""},
								firstName: {required: ""},
								lastName: {required: ""},
								address1: {required: ""},
								state: {required: ""},
								contactCity: {required: ""},
								contactState: {required: ""},
								zip: {required: ""}
							},
							rules: {
								email: {
									required: true,
									email: true
								}
							}
						});
								
						var validatorObj = $("#write-review-form").validate();
											
						if (!$("#write-review-form").valid()) {
							for ( var i=0; i < validatorObj.invalidElements().length; i++ ){
								var elmId = $(validatorObj.invalidElements()[i])[0].name;
								$('#'+elmId).addClass('form-error');
								errCode = 1;
							} 
						}
						//if($('#input-optDryerBar').attr("checked")){
							if (birthMonth == '' || birthDay == '' || birthYear ==''){
								$('#birthdate').addClass('form-error');
								errCode = 1;
							}
						//}
							if (state == ''){
								$('#state').addClass('form-error');
								errCode = 1;
							}
						
						if (errCode == 0) 
						{
						    if(state!='')
						    {						    
						      eligibility.isEligibile(birthYear,birthMonth,birthDay,state,checkForBelow18);
						    }
						    if($('#input-optDryerBar').attr("checked"))
						    {
						      var subscriptionState = $("#input-contactState option:selected").text();						    
							  if(subscriptionState!='')
							  {						    
							    eligibility.isEligibile(birthYear,birthMonth,birthDay,subscriptionState,checkForBelow18);
							  }
						    
						    }

						    Reviews.form.data.validate.review();

						   							
						}
							//Reviews.form.action.preview();
						else 	
							Reviews.form.view.displayError(errCode);
					},
					
					review : function () {
					
						errCode = 0;
						errMsg = "";
						bazaarVoice.validateReview(Page.getLocale(),Page.getProductId(),title,email,state,rating,review,city,recommend,nickname,function(response){
							// 2. backend service call, dup reviews not permitted 
							if (response.responseView == "duplicateReview")
								errCode = 2;
							else if (response.responses.length > 0){
								for(i=0;i<response.responses.length;i++){
									if(response.responses[i].hasError){
											errMsg = errMsg + response.responses[i].errorMessage +"\n";	// 4. we never expect to get to this point, but just in case...
											errCode = 3;
										}
									}	        
								}
							
							
							if (errCode == 0) 
								Reviews.form.data.validate.age();
							else 
							{
							    if(errMsg!='')
							    {
							       alert(errMsg);
							    }
								Reviews.form.view.displayError(errCode);
							} 
						});
					},	
					
					age : function () {
					
						errCode = 0;
						
						if($('#input-optDryerBar').attr("checked")){
							// 5. backend service call, user must be over 13yrs
							subscriberService.isTooYoung(birthYear,birthMonth,birthDay,function(tooYoung){
						    	if (tooYoung) {
						    		Reviews.form.view.displayError(5);
						    		Reviews.form.view.edit.newsletter.disableFields();
						    		$('#input-optDryerBar').attr("checked",false);
						    		document.reviewFrm.optSource.value="";
						    	}
						    	else 	
						    		Reviews.form.action.preview();
						    });
						}
						else {
							Reviews.form.action.preview();
						}
					},
					
					terms : function () {
						if($('#terms-agree').attr("checked"))
							Reviews.form.action.submit();
						else 
							Reviews.form.view.displayError(6); 
					}	
				},
				
				getFormData : function () {
					
					
					nickname = $('#input-nickname').val(); 
					city = $('#input-city').val();
					title = $('#input-title').val();
					review = $('#input-review').val();
					email = $('#input-email').val();
					rating = $('#input-rating').val();
					recommend = $('#input-recommend').val();
					firstName = $('#input-firstName').val(); 
					lastName = $('#input-lastName').val();
					address1 = $('#input-address1').val();
					address2 = $('#input-address2').val();
					contactCity = $('#input-contactCity').val();
					zip = $('#input-zip').val();
					optSource = $('#input-opt').val();
					country = $('#input-country').val();
					

					if 	($('select#input-state').length > 0) {
						// get values from SELECTS on add/edit form
						state=$('#input-state option:selected').val();
						contactState=$('#input-contactState option:selected').val();
						birthMonth=$('#input-birthMonth option:selected').val();
						birthDay=$('#input-birthDay option:selected').val();
						birthYear=$('#input-birthYear option:selected').val(); 
					}		
					else { 	
						// get values from HIDDEN fields on preview form
						state = $('#input-state').val();
						contactState = $('#input-contactState').val();
						birthMonth = $('#input-birthMonth').val();
						birthDay = $('#input-birthDay').val();
						birthYear = $('#input-birthYear').val();
					}	
					
				},
				
				setDataStr : function () {
			
					 var data = 
						'nickname=' + nickname +
						'&email=' + email +
						'&city=' + city +
						'&state=' + state +
						'&title=' + title +
						'&review=' + review +
						'&rating=' + rating + 
						'&recommend=' +  recommend +
						'&birthMonth=' + birthMonth +
						'&birthDay=' + birthDay +
						'&birthYear=' + birthYear +								
						'&optSource=' + optSource; 
						
						
					if (optSource == 'DRYERBAR'){	
						data = data +				
							'&firstName=' +  firstName + 
							'&lastName=' +  lastName +
							'&address1=' +  address1 +
							'&address2=' +  address2 +
							'&contactCity=' +  contactCity +
							'&contactState=' + contactState +
							'&zip=' +  zip +					
							'&country=' + country;
					}						
					return data;
				}
			},
			
			util : {
			
				setMaxLength : function () {
					$("textarea.checkMax").each(function(i){
				    	intMax = $(this).attr("maxlength");
				    	$(this).after("<div>Please type your review in the space above. 1500 characters maximum. <span id='"+this.id+"Counter'>"+intMax+"</span> characters remaining</div>");
					});
				},
				
				checkMaxLength : function (strID) {
					intCount = $("#"+strID).val().length;
				  	intMax = $("#"+strID).attr("maxlength");
				  	strID = "#"+strID+"Counter";
				  	$(strID).text(parseInt(intMax) - parseInt(intCount));
				  	if (intCount < (intMax * .8)) {$(strID).css("color", "#006600"); } //good
				  	if (intCount > (intMax * .8)) { $(strID).css("color", "#FF9933"); } //warning at 80%
				  	if (intCount > (intMax)) { 
				  		$(strID).text(0).css("color", "#990000");
				  		$("textarea.checkMax").val($("textarea.checkMax")[0].value.substring(0,intMax));
				  	}
				}
			}
		}	
	};
}();

var Video = function() {
	
	return {
	
		init : function (){
		
			var productId = Page.getProductId();
			var locale = Page.getLocale();
		
			var so = new SWFObject("/standalone/bounceVideoPlayer.swf", "Videos", "685", "295", "9", "#FFFFFF");
			so.addParam("AllowScriptAccess", "sameDomain");
			so.addParam("wmode", "transparent");
			so.addVariable("assetsPath", '/flash/en_US/products/dryer-bar/');
			so.addVariable("region", ''+locale+'');
			so.addVariable("cssPath", '/flash/'+locale+'/products/'+productId+'/css/flash_styles.css');
			so.addVariable("xmlPath", '/flash/'+locale+'/products/'+productId+'/bounceVideoPlayer.html');
			so.addVariable("videoPath", '/flash/'+locale+'/products/'+productId+'/media/videos/');
			so.addVariable("videoToPlay", '0');
			so.addVariable("assetsXmlPath", '/flash/'+locale+'/products/'+productId+'/xml/videoPlayerAssets.xml');
			
			so.write("video-player-content");
			
			$('#video-player-content').show();
			
			$('#ask-more a').click(function(){
				trackPage('/' + Page.getLocale() + '/products/' + Page.getProductId() + '/video/ask_bounce');
			});			
			/*document.getElementById("footer").style.paddingTop='0'; 
			document.getElementById("intro-disclaimer").style.paddingTop='0'; 
			document.getElementById("tab-interface").style.background="transparent url(/images/en_US/products/six-tab-bg.jpg) no-repeat scroll left top"; 
			document.getElementById("tab-interface").style.height="550px"; **/
			
		
		}
	};
}();


var AskBounce = function() {
	
	return {
	
		init : function (){
		
			trackSpotlight('http://ad.doubleclick.net/activity;src=2278269;type=bounc984;cat=bounc477;ord=1');
			/*document.getElementById("footer").style.paddingTop='0'; 
			document.getElementById("intro-disclaimer").style.paddingTop='0'; 
			document.getElementById("tab-interface").style.background="transparent url(/images/en_US/products/six-tab-bg.jpg) no-repeat scroll left top"; 
			document.getElementById("tab-interface").style.height="550px";	*/
			
		}
	};
}();

var Satisfaction = function() {
	
	return {
	
		init : function (){
		
			trackSpotlight('http://ad.doubleclick.net/activity;src=2278269;type=bounc984;cat=bounc600;ord=1');
			/*document.getElementById("footer").style.paddingTop='0'; 
			document.getElementById("intro-disclaimer").style.paddingTop='0';
			
			document.getElementById("tab-interface").style.background="transparent url(/images/en_US/products/six-tab-bg.jpg) no-repeat scroll left top"; 
			document.getElementById("tab-interface").style.height="550px";	*/
			
		}
	};
}();


var Install = function() {
	
	return {
	
		init : function (){
		
			trackSpotlight('http://ad.doubleclick.net/activity;src=2278269;type=bounc984;cat=bounc700;ord=1');
		  	var IE6 = false,  AUTRE = false;
		    var strChUserAgent = navigator.userAgent;
		    var intSplitStart = strChUserAgent.indexOf("(",0);
		    var intSplitEnd = strChUserAgent.indexOf(")",0);
		    var strChStart = strChUserAgent.substring(0,intSplitStart);
		    var strChMid = strChUserAgent.substring(intSplitStart, intSplitEnd);
		    var strChEnd = strChUserAgent.substring(strChEnd);
		   
		    if(strChMid.indexOf("MSIE 6") != -1){								
				 IE6 = true;
				 document.getElementById("footer").style.paddingTop='395px'; 					
			}else{					
				document.getElementById("footer").style.paddingTop='375px'; 					
			}						
			//document.getElementById("footer").style.paddingTop='375px'; 			
		//	document.getElementById("intro-disclaimer").style.paddingTop='375px'; 
		//	document.getElementById("tab-interface").style.background="transparent url(/images/en_US/products/six-tab-bg.jpg) no-repeat scroll left top";						 
		//	document.getElementById("tab-interface").style.height="905px";	
			
		}
	};
}();

var Betterhomes = function() {
	
	return {
	
		init : function (){	
		trackSpotlight('http://ad.doubleclick.net/activity;src=2278269;type=bounc984;cat=bounc700;ord=1');		
		/*	document.getElementById("footer").style.paddingTop='165px';		
			document.getElementById("tab-interface").style.width="744px";
			document.getElementById("tab-interface").style.top="329px";
			document.getElementById("tab-interface").style.left="117px";
			document.getElementById("tab-interface").style.background="transparent url(/images/en_US/products/six-tab-bg-medium.jpg) no-repeat scroll left top"; 
			document.getElementById("tab-interface").style.height="708px";	*/			
		}
	};
}();



var ProdInfo = function() {
	
	return {
	
		init : function (){
		
			$('#prodinfo-content a').click(function(){
				trackPage('/' + Page.getLocale() + '/products/' + Page.getProductId() + '/info/video');
			});
			
			trackSpotlight('http://ad.doubleclick.net/activity;src=2278269;type=bounc984;cat=bounc850;ord=1');
			/*document.getElementById("footer").style.paddingTop='0'; 
			document.getElementById("intro-disclaimer").style.paddingTop='0'; 
			document.getElementById("tab-interface").style.background="transparent url(/images/en_US/products/six-tab-bg.jpg) no-repeat scroll left top"; 
			document.getElementById("tab-interface").style.height="550px";*/
			
		}
	};
}();








$().ready(function() {
	main.init();
});



function reviewFeedback(locale,productId,reviewId,feedbackHelpfulnes) {
  bazaarVoice.submitReviewHelpful(locale,productId,reviewId,feedbackHelpfulnes,function(data){
	
	/*if(data)
    	alert("Feedback submitted successfully. Thanks you.");
  	else
  	  alert("Could not submit the Feedback. Sorry"); */
  });
}



