// JavaScript Document
HEARST.ff = {
	
	_home_path: "/fragrance-finder/",
	_varpage: 1,
	_vardisp: 25,
	_cacheBust: Math.floor( Math.random() * 100001),
	// Search result vars
	sr_obj: [],
	_results_obj: [],
	_total_results: 0,
	_results_loaded: false,
	
	init: function() {
		
		// Set up tooltips
		if($('a.help').length) {
			$(function() {
				$('a.help').tooltip({
					track: true,
					delay: 0,
					showURL: false,
					showBody: " - ",
					opacity: 0.75
				});
			});
		}
		
		// Get full brand list
		if( $('.dd_content.brand').length ) {	
			
			$.ajax({
				type: "GET",		
				url: "/api/js/House/letter/-",
				dataType: 'json',
				error: function(){
					// Error message
				},
				success: function( brands ) {				
					// Populate brand subnav dropdown
					/*if( $('.ff_nav_dd brands') ) {
						
						var _list_string = "";
						var _cur_letter = "0"; // Track current letter for header displat purposes
						var _specials = new Array(); // Special handling for special characters
						
						$('.ff_nav_dd.brands ul').append("<li class='letter_A'>#</li>"); // Attach first letter
						
						$.each (brands, function(i, val) {
												 
							var _start_letter = val.title.charAt(0).toUpperCase();
							
							if( _start_letter == "&" ) {
								
								var _title_url = new Array(val.title, val.url)
								_specials.push( _title_url );
								
							} else {
							
								if( _start_letter != _cur_letter ) {
									_cur_letter = _start_letter;
									if( isNaN( _cur_letter ) ) _list_string += "<li class='letter_" + _start_letter + "'>" + _start_letter + "</li>";
								}
								
								_list_string += "<li><a href='/fragrance-finder/brand/" + val.url + "'>" + val.title + "&nbsp;&#187;</a></li>";	
								
							}						
							
						});							
						
						$('.ff_nav_dd.brands ul').append( _list_string );		
						
						// Temporary fix for special characters
						$.each (_specials, function(j, term) { // Place special characters
						
							var _char = term[0].substr( 0,6 )
							
							if( _char == "&#201;" ){
								$('.ff_nav_dd.brands ul li.letter_E').after("<li><a href='/fragrance-finder/brand/" + term[1] + "'>" + term[0] + " &#187;</a></li>");
							}
						
						});	
						
					}*/
					// Populate search brand option dropdown
					//if( $('.dd_content.brand') ) {
							
						var _list_string = "<li><input type='checkbox' name='Any' id='Any' value='Any' /> <label for='Any'>Any</label></li>";				
						
						$.each (brands, function(i, val) {
							
							if( val.title.charAt(0) != "&" ) { // Temporary special character fix
								var _title = val.title;
								_list_string += "<li><input id='" + _title + "' type='checkbox' value='" + _title + "' name='" + _title + "' /><label for='" + _title + "'>" + _title + "</label></li>";	
							}
							
						});
						
						$('.dd_content.brand ul').html( _list_string );
							
					//}
				
				}
			}); 
			
		}
		
		// Bind actions for tabs
		$('#ff_landing_tabs a').bind('click', function(){ 			
			
			$('#ff_tabbed_content').children().hide();
				
			$('#ff_landing_tabs a').removeClass();
			$('#ff_landing_tabs li').removeClass();
			
			$('#ff_landing_tabs a:first').addClass('first');	
			
			if( ( HEARST.site.prefix == "seventeen" ) && ( HEARST.site.template.fileName != "st_ff_index" ) ) {
				$(this).parent().parent().removeClass();
				$(this).parent().parent().addClass("nav_" + $(this).attr('id'));
			}
			
			HEARST.ff.changeTab( $(this) );
			
		});
		
		// Bind click to advanced search expand
		$('.ff_search .exp button').bind('click', function(){ 			
						
			$('#ff_search_expnaded').slideToggle('fast');		
			//$('#ff_search_expnaded').show();
			($(this).attr('class') == "expand") ? $(this).attr('class','expanded') : $(this).attr('class','expand');
			
		});	
		// Bind mouse out events to the checkbox dropdowns	
		/*$('.dd_btn').bind('mouseout.collapse', function(){ $('.dd_content').hide(0, HEARST.ff.getSelected($(this))); });	
		$('.selected_container').bind('mouseout.collapse', function(){ $('.dd_content').hide(0, HEARST.ff.getSelected($(this))); });	
		$('.dd_content').bind('mouseout.collapse', function(){ $('.dd_content').hide(0, HEARST.ff.getSelected($(this))); });*/
		$('.dd_btn').bind('mouseout.collapse', function(){
			$('.dd_content').css('visibility','hidden');
			HEARST.ff.getSelected($(this));
		});	
		/*$('.selected_container').bind('mouseout.collapse', function(){ 
			$('.dd_content').css('visibility','hidden');
			HEARST.ff.getSelected($(this));															
		});*/	
		$('.dd_content').bind('mouseout.collapse', function(){ 
			$('.dd_content').css('visibility','hidden');
			HEARST.ff.getSelected($(this));													
		});
		// Submit search
		$('button.submit_options').bind('click', function(){HEARST.ff.submitSearch('adv'); });
		$('button#search_go').bind('click', function(){HEARST.ff.submitSearch('reg'); });

		// Default enter submit
		$("#search_term").keyup(function(e) {
			if(e.keyCode == 13) {HEARST.ff.submitSearch('reg');}
		}); 

		// Bing click event to "start now" button to initiate wizard
		$('.start_wizard').bind('click', function(){ HEARST.ff.initiateWizard( $(this).attr('class'), $(this).attr('title') ) });
		
	},
	
	// Changes the tabs based on the link received
	changeTab: function( tab ) {	
		
		// Apply 'on' calss to the a and li
		$(tab).addClass('on');
		$(tab).parent().addClass('on');
		// Add 'next' class to get rid of extra line
		$(tab).parent().prev().children().addClass('next');
		
		// If tabs are on the A-Z pages, fire the appropriate handler
		( $(tab).parent().parent().attr('class') === "az" ) ? HEARST.ff.azTabHandler( tab ) : $('#ff_tabbed_content .ff_tabbed_content.' + $(tab).attr('id')).fadeIn();
	
	},
	
	// For advanced search dropdown
	getSelected: function( dd ) {

		// Determine list of selected elements
		if($(dd).attr('class').indexOf('content') != -1) {		
			
			var terms = new Array();
			var inputs = $(dd).find('input:checked');
			
			// Find checked item values
			$(inputs).each(function(i, val){	

				if( $(dd).parent().attr('class') == "adv_option year_dd" ) {
					// Special handling for year drop down
					var year_term = $(val).val();
					
					if( year_term == "2000,max") year_term = "2000 - Newest";
					if( year_term == "min,1899") year_term = "Before 1899";					
					year_term = year_term.replace(/,/, " - ");	
					
					terms.push(year_term);
					
				} else {
					terms.push($(val).val());
				}
				
			});		
			
			if(terms.length > 0) {
				
				$(dd).parent().find('td.example').hide();
				$(dd).parent().find('td.selected').show();
			
				$(dd).parent().find('span').empty();
			
				// Update 'selected' span
				$(terms).each(function(i, val){	
					$(dd).parent().find('span').append(val + '<br />');
				});	
				
				// Update dropdown state
				(terms.length > 1) ? $(dd).parent().find('.selected_container').text(terms[0] + ", ...") : $(dd).parent().find('.selected_container').text(terms[0]);
				
			} else {
				
				$(dd).parent().find('td.example').show();
				$(dd).parent().find('td.selected').hide();
				
				$(dd).parent().find('span').text('Any');
				$(dd).parent().find('.selected_container').text('Any');
				
			}
			
		}		
	
	},
	
	submitSearch: function( type ) {
		
		var search_string = "/search/fast_search?search_content=fragrances";
		if( $('input#search_term').val() ) search_string += "&search_term=" + $('input#search_term').val();
		

		$("#adv_search_options span").each(function(i, val){
			
			var _filter_name = $(val).attr('title');
			var _filter_values = $(val).html().split('<br>');			

			if( _filter_name == "gender" ) { // Special handling for gender .. || is for IE purposes
				if ( (_filter_values[0] == "Woman") || (_filter_values[0] == "Woman<BR>") ) _filter_values[0] = "female";
				if ( (_filter_values[0] == "Man") || (_filter_values[0] == "Man<BR>") ) _filter_values[0] = "male";
			}
			
			$(_filter_values).each(function(j, term){	
				// Special handling for year							
				if( term == "Before 1899") term = "min,1899";
				term = term.replace(/ - /, ",");	
				term = term.replace(/Newest/, "max");					
				
				// *** Fix for incorrect IE splits ***
				if( term.indexOf("<BR>") != -1){
					term = term.slice( 0, term.indexOf("<BR>") );					
				}
			
				if( term && ( term != "Any" ) ) search_string += "&" + _filter_name + "=" + term;			
													
			});		
			
		});	
		
		//if( ! $('input#discontinued:checked').length )  search_string += "&availability=available" ;
		
		if( $('input#discontinued:checked').length ) search_string += "&availability=discontinued" ;
		
		( type == "adv" ) ? window.location = search_string : window.location = "/search/fast_search?search_content=fragrances&search_term=" + $('input#search_term').val() ;
		
	},
	
	// Handler for A-Z list tab change
	azTabHandler: function( az_tab ) {		
		
		var type;	
		// Determine if it's a list of Fragrances or Houses
		if( HEARST.site.section.prefix == "brand" ) {
			type = "House";
			$('#az_tab_content').html('<p>Loading brands...</p>');
		} else {
			type = "Fragrance";
			$('#az_tab_content').html('<p>Loading fragrances...</p>');
		}
		
		// Special handler for numbers
		if( az_tab.text() == "#" ) {
			
			var _null_results = 0;
			
			for( i = 0; i <= 9 ; i++ ){
				
				$('#az_tab_content').empty();
				$('#az_tab_content').html("<ul></ul>");
				
				$.ajax({
					type: "GET",		
					url: "/api/js/" + type + "/letter/" + i,
					dataType: 'json',
					error: function(x){
						// Attach messaging if there are no results
						if( x.status == 404 ) _null_results++;
						if( _null_results == 10 ) $('#az_tab_content').html('<p>No results for brands that start with a number.</p>');
					},
					success: function( frags ) {					
						
						$.each (frags, function(i, val) {
							$('#az_tab_content ul').append( "<li><a href='/fragrance-finder/" + val.url + "'>" + val.title + " &#187;</a></li>" );			   
						});					
						
					}
				});
				
			}
			
		} else {
		
			$.ajax({
				type: "GET",		
				url: "/api/js/" + type + "/letter/" + az_tab.text(),
				dataType: 'json',
				error: function(){
					// Error message
				},
				success: function( frags ) {				
			
					var _list_string = "<ul>";
					
					$.each (frags, function(i, val) {
						_list_string += "<li><a href='/fragrance-finder/" + val.url + "'>" + val.title + " &#187;</a></li>";			   
					});
			
					_list_string += "</ul>";
				
					$('#az_tab_content').html(_list_string);
					
				}
			});
			
		}	
		
	},

	// Handler for wizard initiation
	initiateWizard: function( loc, href ) {

		window.location = HEARST.ff._home_path + "wizard/" + href + "?q1=" + $('.first_question input:checked').val();
		
	},

	getComments: function( mode ) {
		
		var api_path = (mag_user.logged_in) ? "/api/js/" : "/api_static/js/";

		$.ajax({
			type: "GET",
			url: api_path + "CommentsByArticle/" + HEARST.site.article.id + "_" + this._varpage + "_" + this._vardisp,
			data: { cachebust: Math.floor( Math.random() * 100001) },
			error: function(){
				// Error message
				
			},
			success: function( data ) {	
			
				var _highest = new Array();			
				var commentsObject = eval('(' + data + ')');
				
				var _comment_num = commentsObject.length;				
				
				if( _comment_num == 1 ) {
					$('p.reviews a').text("1 Review")
				} else if ( _comment_num == 0 ) {
					$('#reviews_hdr p.rating').remove();
					$('#reviews_hdr ul').remove();
					$('p.reviews a').text( "No ratings or reviews yet -- be the first!" );
				} else {
					$('p.reviews a').text( _comment_num + " Reviews");
				}
				
				if( _comment_num <= 1 ) {
					
					$('#read_all a').remove();
					$('#read_all').html("<div class='clear' style='height:14px;'></div>");
					
				}
				
				$('#review_container').empty();
			
				$.each (commentsObject, function(i, item) {	

					var _rating = item.article_rating;

					var _review_string = "";
					_review_string = "<div class='review _" + i + "'><div class='review_info'>";
					_review_string += "<ul class='rating'><li class='off'></li><li class='off'></li><li class='off'></li><li class='off'></li><li class='off'></li></ul>";					
					_review_string += "<div class='clear'></div><p class='by'>Posted by:<br />" + item.user_name + "</p>";
					_review_string += "<p class='date'>" + item.post_date + "</p>";
					_review_string += "</div><div class='review_content'>";
					_review_string += "<h5> </h5>";
					_review_string += "<p>" + item.comment_text + "</p>";
					_review_string += "</div><div class='clear'></div></div>";
					
					// Attach review
					$('#review_container').append( _review_string );
						
					// Set ratings
					if( (_rating == 0) || (_rating == null) || (_rating == "undefined") ) {
						$('.review._' + i + ' ul').remove();
						$('.review._' + i + ' p.by').css('padding-top','2px');
						_rating = 0;
					} else {
						for( j = 0; j < _rating; j++ ) {
							$('.review._' + i + ' ul li:eq(' + j + ')').attr('class','on');			
						}
					}	

					_highest.push( _rating );
					
				});
				
				// Find the highese rated review and then display it at top
				var findHighest = function ( arr ) {
					// Store highest value and highest index
					var _hv = 0;
					var _hi = 0;
					
					$.each (arr, function(i, val) {						
						if( val > _hv ) {							
							_hv = val;
							_hi = i;							
						}					
					});	
					
					$('#review_container .review:eq(' + _hi + ')').addClass('top_review');
					
				}
				
				findHighest(_highest);
				
				if( mode == "new" ) HEARST.ff.detail.readAll($('#read_all a'));
				
			}
			
		});
	
	},
	
	postComment: function() {
		
		var api_path = (mag_user.logged_in) ? "/api/js/" : "/api_static/js/";
		
		var _rating = $('#form_container ul.rating li.on').length;
		//var _title = $('#review_subject').val();
		var _comment_text = $('#form_container textarea').val();

		if(_comment_text==""){

			alert("Please enter a comment.");

		} else {

			$.ajax({
				type: "POST",
				url: api_path + "Comment",
				data: {
					article_id: HEARST.site.article.id,
					article_rating: _rating,
					comment_title: _rating, // *KLUDGE / LEGACY* comment_title is used for article rating in FragranceComment api
					comment_text:_comment_text,
					per_page: this._vardisp
				},
				error: function(){
					//alert("that didn't work.");
				},

				success: function(){				

					HEARST.ff.getComments('new');

					$('#review_subject').val('');
					$('#form_container textarea').val('');

				}
			});

		}

	}, 

	getSearchResults: function( num_results, page, title, type, section ) {

		var htmlToText = function ( htmlMarkup ) {
			var div = document.createElement('div');
			div.innerHTML = htmlMarkup;
			if (typeof div.innerText != 'undefined') {
				return div.innerText;
			} else if (typeof div.ownerDocument != 'undefined' && typeof div.ownerDocument.createRange != 'undefined') {
				var range = div.ownerDocument.createRange();
				range.selectNodeContents(div);
				return range.toString();
			} else if (typeof div.textContent != 'undefined') {
				return div.textContent;
			}
		}

		var _call;		
		//( type == "brand" ) ? _call = "/search/fast_search?search_content=fragrances&search_mode=results&house=" + title : _call = "/search/fast_search?search_content=fragrances&search_mode=results&family=" + title ;

		switch( section ) {
			case null:
				// An exception needs to be made for ampersands to match house titles in search
				_call = "/search/fast_search?search_content=fragrances&hits=50&search_mode=results&house=" + escape(htmlToText(title)).replace('%26', '%26amp;');
				break;
			case "family":
				_call = "/search/fast_search?search_content=fragrances&hits=50&search_mode=results&family=" + title;
				break;
			case "tone":
				_call = "/search/fast_search?search_content=fragrances&hits=50&search_mode=results&note=" + title;
				break;
		}
	
		var buildList = function(){
		
			// Build random order array for use on family pages
			var _order_array = new Array( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 );
			_order_array.sort( function() { return 0.5 - Math.random() } );
			_order_array = _order_array.slice( 0, num_results );
			
			// Build and append results
			var _results_string = "";
	
			$.each ( HEARST.ff._results_obj, function(i, val) {						

				if( type == "brand" ) {	
					if( ( i >= (num_results * (page - 1)) ) && ( i < (num_results * (page - 1) + num_results ) ) ) {	
						( ( i == ( HEARST.ff._results_obj.length - 1 )) || ( i % num_results == ( num_results - 1 ) ) ) ? _results_string += "<div class='result last'>" : _results_string += "<div class='result'>";						
						_results_string += $(val).html();
						_results_string += "</div>";
					}
				} else if( type == "category" ) {
					_results_string += "<div class='result' style='display:none'>";						
					_results_string += $(val).html();
					_results_string += "</div>";
				}
						
			});	
			
			$("#reco_container").html( _results_string );
			// Reveil random fragrances
			if( type == "category" ) {
				$.each ( _order_array, function(i, val) {					
				
					$('.result:eq(' + ( val - 1 ) + ')').show();
					
				});
			}	
			
		}
		// Call in data if it hasen't been done yet. Otherwise referance global object
		if( HEARST.ff_results_loaded ) {
			
			buildList();
			
		} else {		

			$.ajax({
				type: "GET",		
				url: _call,
				dataType: 'html',
				error: function(){
					// Error message
				},
				success: function( results ) {					
					
					HEARST.ff.sr_obj = results;				
					// Extract results and determine length of results
					HEARST.ff._results_obj = $(HEARST.ff.sr_obj).find('div.result');
					HEARST.ff._total_results = HEARST.ff._results_obj.length;
					
					buildList();
					
					if( type == "brand" ) {
						// Initialize search results info
						var _page_to = num_results * page;		
						if( _page_to > HEARST.ff._total_results ) _page_to = HEARST.ff._total_results;					
						$('table.ff_sr_nav td.sr_info').html("1-" + _page_to + " of " + HEARST.ff._total_results + " <span>" + title + "</span> Fragrances" );
						// If pagination is needed
						if( HEARST.ff._total_results > num_results ) {						
							
							for( i=0; i<Math.ceil( HEARST.ff._total_results / num_results ); i++ ) {
								$('table.ff_sr_nav td.page').append("<a class='page' name='" + (i + 1) + "'>" + (i + 1) + "</a> ");
							}
							
							$("a.page[name='1']").css('font-weight','bold');
							
							$('table.ff_sr_nav td.page').append("<a class='nextpage'>Next &#187;</a>");
							$('table.ff_sr_nav td.page').prepend("<a class='prevpage' style='display:none;'>&#171; Previous </a>");
							
							$('table.ff_sr_nav td.page .page').bind('click', function(){ HEARST.ff.pageResults( num_results, $(this).attr('name'), title ); });
							$('table.ff_sr_nav td.page .nextpage').bind('click', function(){ HEARST.ff.pageResults( num_results, (page + 1), title ); });
						}		
					}
				
					HEARST.ff_results_loaded = true;
				
				}
			});
			
		}
		
		if( HEARST.ff_results_loaded ) {
			$('a.page').css('font-weight','normal');
			$("a.page[name='"+(page)+"']").css('font-weight','bold');
		}
		
	},
	
	pageResults: function( per_page, page, term ) {

		$('table.ff_sr_nav td.page .nextpage').unbind('click');
		$('table.ff_sr_nav td.page .prevpage').unbind('click');
		// Increment "next" button
		// Set up pagination
		if( page < Math.ceil( HEARST.ff._total_results / per_page ) ) {
			$('table.ff_sr_nav td.page a.nextpage').show();
			$('table.ff_sr_nav td.page .nextpage').bind('click', function(){ HEARST.ff.pageResults( per_page, ( parseInt( page ) + 1 ), term ); });
		} else {
			$('table.ff_sr_nav td.page a.nextpage').hide();
		}
		
		if( page > 1 ) {		
			$('table.ff_sr_nav td.page .prevpage').show();
			$('table.ff_sr_nav td.page .prevpage').bind('click', function(){ HEARST.ff.pageResults( per_page, ( parseInt( page ) - 1 ), term ); });
		} else {
			$('table.ff_sr_nav td.page .prevpage').hide();
		}
		
		// Update sr_info
		var _page_to = per_page * page;
		
		if( _page_to > HEARST.ff._total_results ) _page_to = HEARST.ff._total_results;
				
		$('table.ff_sr_nav td.sr_info').html( ( per_page * (page - 1) + 1 ) + "-" + _page_to + " of " + HEARST.ff._total_results + " <span>" + term + "</span> Fragrances" );
		
		HEARST.ff.getSearchResults( per_page, page, term, "brand", null );
		
	}
	
};

