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

var refineSelection = {
		init		:	function (){
							var obj = this;
							if($('#refineSelection').length > 0){
								
								this.controls();
								this.update('?n=' + $('#ajaxPagingBarOpt option:selected').val() + '&page=1&imageSize=2&category=' + categoryID);
							};
						},
		mask		:	$('<div id="ajaxMask" />'),
		img			:	$('<img id="ajaxLoadingImg" src="/static-images/ajax-loader.gif" />'),
		controls	:	function (){
							var obj = this;
							
							//	filtering tags
							$('#refineSelection h4').click(function (){
								if($(this).hasClass('closed')){
									$(this)
										.removeClass('closed')
										.next().slideDown();
								}else{
									$(this)
										.addClass('closed')
										.next().slideUp();
								};
							});
							
							$('#refineSelection p').click(function (){
								$('#leftCol div.panels.category').append(obj.mask).append(obj.img);
								obj.startTimer();
								if(obj.state === false){
									obj.state = obj.process();
								};
								if($(this).hasClass('selected')){
									$(this).removeClass('selected');
								}else{
									$(this).addClass('selected');
								};
							});
							
							//	page number links
							$('.pagingSelector-mid a.pageLink').live('click',function (event){
								event.preventDefault();
								if(!$(this).hasClass('active')){
									$('.pagingSelector-mid a.pageLink.active').removeClass('active');
									$(this).addClass('active');
									obj.update(obj.process() + '&page=' + $(this).text());
								};
							});
							
							//	prev
							$('.pagingSelector-left .prev').click(function (event){
								event.preventDefault();
								if(obj.data.currentPage > 1){
									obj.update(obj.process() + '&page=' + (obj.data.currentPage - 1));
								};
							});
							//	prevBlock
							$('.pagingSelector-leftBlock .prev').click(function (event){
								event.preventDefault();
								if(obj.data.currentPage > 10){
									obj.update(obj.process() + '&page=' + (obj.data.currentPage - 10));
								}else{
									obj.update(obj.process() + '&page=1');
								};
							});
							
							//	next
							$('.pagingSelector-right .next').click(function (event){
								event.preventDefault();
								if(obj.data.currentPage < obj.data.totalPages){
									obj.update(obj.process() + '&page=' + (obj.data.currentPage + 1));
								};
							});
							
							//	nextBlock
							$('.pagingSelector-rightBlock .next').click(function (event){
								event.preventDefault();
								if(obj.data.currentPage < obj.data.totalPages - 10){
									obj.update(obj.process() + '&page=' + (obj.data.currentPage + 10));
								}else{
									obj.update(obj.process() + '&page=' + obj.data.totalPages);
								};
							});
							
							//	items per page
							$('#perPgSelect').change(function (){
								// track changes to number of products
								_gaq.push(['_trackEvent', 'Products Per Category', $('#ajaxPagingBarOpt option:selected').val()]);
								
								obj.update(obj.process() + '&page=1');
							});
						},
		timer		:	false,
		state		:	false,
		data		:	{},
		startTimer	:	function (){
							//	start timer here
							var obj = this;
							if(this.timer !== false){
								clearTimeout(this.timer);
							};
							this.timer = setTimeout(function(){
								obj.timer = false;
								var currentState = obj.process();
								if(obj.state !== currentState){
									//	the state of the selector has changed so continue with the ajax.
									obj.update(currentState + '&page=1');
									obj.state = false;
								};
							},1000);
						},
		process		:	function (){
							//	process panel, to build request url returns the querystring
							var queryString = '?n=' + $('#ajaxPagingBarOpt option:selected').val() + '&category=' + categoryID;
							var tags = '';
							$('#refineSelection .selectionGroup').each(function (i,ele){
								var $set = $(this).find('.options p.selected')
								if(i !== 0 && $set.length > 0 && tags.length !== 0){
									tags += '-';
								};
								$set.each(function (i,ele){
									if(i !== 0){
										tags += '|'
									};
									tags += this.id.replace('tag_','');
								});
							});
							
							if(tags !== ''){
								queryString += '&tags=' + tags;
							}
							queryString += '&imageSize=2';
							return queryString;
						},
		update		:	function (query){
							var obj = this;
							var block = 20;
							$.ajax({
								url			:	/product-filter/ + query,
								cache		:	false,
								dataType	:	'xml',
								type		:	'GET',
								success		:	function (data){
													if($(data).find('error').length > 0){
														alert('ERROR: ' + $(data).find('error').text());
													}else{
														obj.data={
															currentPage :	parseInt($(data).find('currentPage').text()),
															totalPages	:	parseInt($(data).find('totalPages').text())
														};
														var $target = $('div.panels.category');
														$target.html(''); 
														$('#ajaxPagingBar .pagingSelector-mid').html('');
														
														var loopStart,loopEnd,addControls;
														if(obj.data.totalPages <= 11){
															loopStart = 1;
															loopEnd = obj.data.totalPages;
														}else if(obj.data.currentPage <= 5){
															loopStart = 1;
															loopEnd = 11;
															addControls = true;
														}else if(obj.data.currentPage >= obj.data.totalPages - 5){
															loopStart = obj.data.totalPages - 11;
															loopEnd = obj.data.totalPages;
															addControls = true;
														}else{
															loopStart = obj.data.currentPage - 5;
															loopEnd = obj.data.currentPage + 5;
															addControls = true;
														};
														for(i = loopStart ; i <= loopEnd ; i++){														
															$('#ajaxPagingBar .pagingSelector-mid').append('<a class="pageLink' + (i === obj.data.currentPage ? ' active' : '') + '" href="#' + i + '">' + i + '</a>');
														};
														
														$.each($(data).find('productVariantSearchResult'),function (){
															$target.append(format(panelHTML,[
																$(this).find('productVariantUrl').text(),
																$(this).find('imageReferenceAlternativeUrl').text(),
																$(this).find('imageAltTag').text(),
																$(this).find('title').text(),
																$(this).find('productVariantExternalSku').text()
															]));
														});
													};
													
													
													// fire analytics when all selections updated
													var trackEventArr = new Array();
													$('#refineSelection .selectionGroup p.selected').each(function(s, i) {
														trackEventArr.push($(this).parents('.selectionGroup').find('h4').eq(0).text() + ' > ' + $(this).text());
														
													});
													
													if(trackEventArr.length > 0) {
														trackEventArr = trackEventArr.join(',');
														_gaq.push(['_trackEvent',  'Filter Usage', trackEventArr]);
													}
													
													// track impressions
													$('.category .panel').each(function() {
														
														var prodCode = $(this).find('p span:first').text().replace(/code: /i, "");
														var prodPos = parseInt($(this).parent().find('.panel').index($(this)), 10)+1;
														
														// _gaq.push(['_trackEvent', 'Product Position', 'impression', prodCode, prodPos]);
														
														// track clicks
														$(this).find('a').click(function(e) {
															e.preventDefault();
															_gaq.push(['_trackEvent', 'Product Position', 'click', prodCode, prodPos]);	
															setTimeout('document.location = "' + $(this).attr('href') + '"', 100);
														});
														
													});
													
												}
							});
						}
	}/* refineSelection */

var panelHTML = [
     /**	EDITABLE REGIONS
      * 0 = url 
      * 1 = image url
      * 2 = image alt tag
      * 3 = item description
      * 4 = product code
      */
	'<div class="panel">',
	'	<a href="{0}"><img src="/{1}" border="0" width="299" height="132" alt="{2}" /></a>',
	'	<p><a href="{0}">{3}</a><span><span>Code: </span>{4}</span></p>',
	'</div>'
].join('');
/* panelHTML */

//	helper function
format = function(source, params) {
	if ( arguments.length == 1 ){
		return function() {
			var args = $.makeArray(arguments);
			args.unshift(source);
			return $.validator.format.apply( this, args );
		};
	};
	if ( arguments.length > 2 && params.constructor != Array  ) {
		params = $.makeArray(arguments).slice(1);
	};
	if ( params.constructor != Array ) {
		params = [ params ];
	};
	$.each(params, function(i, n) {
		source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
	});
	return source;
};/* format */
