/* test comment */

function limitCharacters(element,limit,counter) {

	var counterElem = document.getElementById(counter);
	var charCount = element.value.length;
	
	if(charCount > limit) {
		element.value = element.value.substring(0,limit);
		return;
	}
	
	counterElem.innerHTML = charCount;
}

jQuery(document).ready(function() {
	jQuery('.accountSection .section-switch').click(function() {
		var accountSummary = jQuery(this).parent().parent().find('.accountSummary');
		var accountBody = jQuery(this).parent().parent().find('.accountBody');
		
		if(accountSummary.css('display') == 'block') {
			jQuery(this).html('hide');

			accountSummary.slideUp();
			accountBody.slideDown();
		} else {
			jQuery(this).html('change');
			
			accountSummary.slideDown();
			accountBody.slideUp();
		}
	});
	
	if(PROPERTIES.pollId) {
		jQuery.post('/poll', { 'id': PROPERTIES.pollId }, function(data) {
			jQuery('#pollContent').html(data);
		}, 'html');		
	}
});

function toggleAccountSection(sectionName) {
	jQuery('#' + sectionName + ' .section-switch').click();	
}

function getElementsByClass(searchClass,node,tag) {
  	var classElements = new Array();
  	if (node == null) {
		node = document;
	}
  	if (tag == null) {
  	  	tag = '*';
	}
  	var els = node.getElementsByTagName(tag);
  	var elsLen = els.length;
  	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
  	for (i = 0, j = 0; i < elsLen; i++) {
    	if (pattern.test(els[i].className) ) {
      		classElements[j] = els[i];
      		j++;
    	}
  	}
  	return classElements;
}

function updateAndSubmit(newval,targetTex) {
	targetTex.value = newval;	
	targetTex.form.page.value = 0;
}

function updateAndSubmitB(lForm,newval,targetTex) {
	targetTex.value = newval;
	lForm.page.value = 0;
	
}

function submitPoll(f) {
	
	var response = getRadioValue(f.response);
	var pollId = f.pollId.value;
	var freetext = '';
	
	if(f.freetext && f.freetext.disabled == false) {
		freetext = f.freetext.value;
	}
	
	var parameters = { 'id': pollId, 'response': response, 'freetext': freetext };
	var callback = function(data) { jQuery('#pollContent').html(data); };
	jQuery.post('/poll', parameters, callback, 'html');	
		
	// new Ajax.Updater('pollContent','/poll',{ method: 'post', parameters: { id: pollId, response: response, freetext: freetext }});
}

function loadResults(pollId, panel) {
	jQuery.post('/poll/results', { id: pollId }, function(data) { jQuery('#pollContent').html(data); }, 'html');

	//new Ajax.Updater('pollContent','/poll/results',{ method: 'post', parameters: { id: pollId }});
}

function updateFreetext(r,f) {
	var t = f.freetext;
	var fval = f.freetextOrig.value;
	var rid = f.freetextResponse.value;
	
	if(r.value == rid) {
		t.disabled=false;
		if(t.value == fval) {
			t.value = '';
		}
		t.focus();
	} else {
		t.disabled=true;
		t.value = fval;
	}
}

	

function getRadioValue(r) {
	for(var i = 0; i < r.length; i++) {
		if(r[i].checked) {
			return r[i].value;
		}
	}
	
	return false;
}

function pageTrans(lForm,jump) {

	
	lForm.page.value = parseInt(lForm.page.value) + parseInt(jump);
	if(lForm.page.value < 0) {
		lForm.page.value = 0;
	}
	
	lForm.submit();
}

function setSort(lForm,column) {
	if(lForm.sortacol.value == column) {
		switch(lForm.sortadir.value) {
			case('ASC'):
				lForm.sortadir.value = 'DESC';
				break;
			case('DESC'):
				lForm.sortadir.value = 'ASC';
				break;
			default:
				lForm.sortadir.value = 'ASC';
		}
	} else {
		lForm.sortbcol.value = lForm.sortacol.value;
		lForm.sortbdir.value = lForm.sortadir.value;
		lForm.sortacol.value = column;
		lForm.sortadir.value = 'ASC';
	}
	
	lForm.page.value = 0;
	lForm.submit();
}

function launchPurchase(asin) {
	var pArray = new Array();
	pArray['asin'] = asin;
	
	tryLogin(null,null,pArray);
	
}

function launchDownload() {
	var pArray = new Array();
	pArray['download'] = 1;
	
	tryLogin('begin','downloads',pArray);
}

function tryLogin(action,controller,lparams) {
	var s = jQuery(window).scrollTop();

	jQuery('.login-overlay .overlay').css('top', (s + 200) + 'px');
	
	var f = jQuery('.login-overlay form');
	
//	console.log(f.find('input[name=action]'));
	
	if(action != null && f.find('input[name=action]').length != 0) {	
		f.find('input[name=action]').val(action);
	}
	
	if(controller != null && f.find('input[name=controller]').length != 0) {
		f.find('input[name=controller]').val(controller);
	}
	
	for(var lparam in lparams){
		var input = f.find('input[name=loginparam_'+lparam+']'); 
		if(input.length != 0){
			input.val(lparams[lparam]);
		} else{
			f.append('<input type="hidden" name="loginparam_'+lparam+'" value="'+lparams[lparam]+'" />');
		}
	}	

	   
	jQuery('.login-overlay').fadeIn(200);
}

function startPurchase(asin) {

	jQuery('.asin-'+asin).click();
}

function startDownload() {
	document.location.href='/downloads/download';
}



jQuery(document).ready(function() {
	
	/*
	=========================================================================
	A generic "close overlay" button
	=========================================================================
	*/
	jQuery('.overlay .overlay-close, .overlay .cancel-button').click(function(ev) {

		// in case of multiple overlays (unlikely, but possible),
		// we need to make sure we're hiding the right one.
		var that = this;
		jQuery('.overlay-container').each(function() {
			var cancelButton = jQuery(this).find('.cancel-button').get(0);
			var closeButton = jQuery(this).find('.overlay-close').get(0);
			
			if(that == closeButton || that == cancelButton) { jQuery(this).fadeOut(200); }
		});		
	});
	
	
	/*
	=========================================================================
	Confirm purchase overlay on the home page.
	=========================================================================
	*/
	jQuery('.album .column-body').click(function(e) {
		if(PROPERTIES.loggedIn) {
			var overlay = jQuery('.purchase-overlay');
			var trackInfo = PROPERTIES.tracks[(/track-id-(.+)/).exec(this.id)[1]];
			var parsePrice = function(p) { return parseFloat((/\$(.+)$/).exec(p)[1],10); };
			var page = encodeURIComponent(window.location.href);
			// the following is to get around an ugly rounding bug in FF3
			var discount = "- $" + Math.round((parsePrice(trackInfo.priceOriginal) -
				parsePrice(trackInfo.priceGenerated)) * 100)/100;
				
			// generate the track duration from the integer seconds count
			var minutes = Math.floor(trackInfo.duration / 60);
			var seconds = trackInfo.duration - (minutes * 60) + "";
			if(seconds.length == 1) { seconds = "0" + seconds; }
			var duration = minutes + ":" + seconds;
			
			// generate the purchase URL
			var buyUrl = "/purchase/index/asin/" + trackInfo.asin + 
				"/price/" + trackInfo.priceGeneratedId +
				"/fromPage/" + page;
			if(PROPERTIES.isCampaignPage){
				buyUrl += "/isCampaignPage/1";
			}

			var toolbarUrl = buyUrl + "/isToolbarRequest/1";				
						
			overlay.find('.album-cover-container img').attr('src',trackInfo.albumCover);
			overlay.find('.album-cover-container img').attr('alt',trackInfo.title);
			overlay.find('.album-cover-container img').attr('title',trackInfo.title);

			overlay.find('.track-name').html(trackInfo.title);
			overlay.find('.track-artist').html("<i>by</i> " + trackInfo.artist);
			overlay.find('.track-compilation').html("<i>From the Album</i> " +trackInfo.album);

			//overlay.find('.album-field .field').html(trackInfo.album);
			overlay.find('.label-field .field').html(trackInfo.label);
			overlay.find('.track-time .field').html(duration);
			overlay.find('.genres .field').html(trackInfo.genres);
			
			if(trackInfo.salesRank < 1000) {
				overlay.find('.sales-rank').css('display','');
				overlay.find('.sales-rank .field').html(trackInfo.salesRank);				
			} else {
				overlay.find('.sales-rank').css('display', 'none');
			}

			overlay.find('.retail-price .field').html(trackInfo.priceOriginal);
			overlay.find('.price-reduction .field').html(discount);
			overlay.find('.dympol-price .field').html(trackInfo.priceGenerated);

			if(trackInfo.sponsorImage) {
				overlay.find('.sponsor img').show();
				overlay.find('.sponsor img').attr('src',trackInfo.sponsorImage);
				overlay.find('.sponsor .sponsorName').html('');		
			} else {
				overlay.find('.sponsor img').hide();
				overlay.find('.sponsor .sponsor-name').html(trackInfo.sponsorName);					
			}
			overlay.find('.sponsor a').attr('href',trackInfo.sponsorUrl);
			
			overlay.find('.buy-button .specialsDisabled a').attr('href', escape(buyUrl));
			overlay.find('.buy-button .specialsDisabled').attr('id', 'disabled_' + trackInfo.asin);

			overlay.find('.buy-button .specialsEnabled a').attr('href', toolbarUrl);
			overlay.find('.buy-button .specialsEnabled').attr('id', 'enabled_' + trackInfo.asin);
			
			var s = jQuery(window).scrollTop();

			jQuery('.purchase-overlay .overlay').css('top', (s + 200) + 'px');
			jQuery('.purchase-overlay').fadeIn(200);
		} else {
			launchPurchase((/asin-(.+)/).exec(this.className)[1]);
		}
		
		return false;
	});	

	/*
	=========================================================================
	Confirmation login dialog
	=========================================================================
	*/
	if(/\/activity?/.test(window.location)) {
		jQuery('.confirm-panel .confirm-button').click(function(e) {
			
			jQuery('.confirm-overlay .overlay-inner').addClass('loading');
			jQuery('.confirm-overlay').fadeIn(200);
			
			var updateForm = function(data) {
				if(longLoadTimeout !== null) {
					clearTimeout(longLoadTimeout);
					longLoadTimeout = null;					
				}
				
				if(data == 'confirm_success') {
					window.location.reload();
				} else {
					jQuery('.confirm-overlay .overlay-body').html(data);

					jQuery('.confirm-overlay .overlay-inner').removeClass('loading');
					jQuery('.confirm-overlay .overlay').removeClass('long-load');

					jQuery('.confirm-overlay .overlay .loading-message').fadeOut(200);					
				}
			};
			
			var ajaxConnection = null;
			var longLoadTimeout = null;
			
			jQuery('.confirm-overlay').click(function(e) {
				if(e.target.id == 'confirm') {
					if(jQuery('.confirm-overlay .overlay-inner').hasClass('loading')) {
						return false; // disable multiple clicks
					}
					
					var form = jQuery('.confirm-overlay form').get(0);
					var data = {};
					
					for(var i = 0; i < form.elements.length; i++) {
						var element = form.elements[i];
						data[element.name] = element.value;
					}
					
					longLoadTimeout = setTimeout(function() {
						jQuery('.confirm-overlay .overlay').addClass('long-load');							
						jQuery('.confirm-overlay .overlay .loading-message').fadeIn(500);
					}, 3000);
					
					jQuery('.confirm-overlay .overlay-inner').addClass('loading');
					
					ajaxConnection = jQuery.post(form.action, data, updateForm, 'html');
										
					return false;
				}
				if(jQuery(e.target).hasClass('cancel-long-load')) {
					if(ajaxConnection !== null) {
						ajaxConnection.abort();

						jQuery('.confirm-overlay .overlay-inner').removeClass('loading');
						jQuery('.confirm-overlay .overlay').removeClass('long-load');

						jQuery('.confirm-overlay .overlay .loading-message').fadeOut(200);
					}
				}
			});
			
			jQuery.get('/activity/confirm', {}, updateForm, 'html');
		
			return false;
		});
		
		
		jQuery('.clear-transactions-button').click(function() {
			var s = jQuery(window).scrollTop();
			
			jQuery('.delete-pending-transaction-warning .overlay').css('top', (s + 200) + 'px');
			jQuery('.delete-pending-transaction-warning').fadeIn(200);
			
			return false;
		})
	}
	
	/*
	=========================================================================
	Register page check for firefox: if the browser isn't firefox, hide the
	install toolbar checkbox.
	=========================================================================
	*/
	if(jQuery('.register-form .toolbar-checkbox').length > 0) {
		if(jQuery.browser.mozilla) {
			jQuery('.register-form .toolbar-checkbox').css('display','block');
			jQuery('.register-form .toolbar-info').css('display','inline');
			jQuery('.register-form .toolbar-checkbox input').attr('checked','checked');
		}
	}
	
	/*
	=========================================================================
	Campaign breakout slider code
	=========================================================================
	*/
	if(jQuery('.campaign-breakout').length > 0) {
		var isAnimating = false;
		var endAnim = function() {
			isAnimating = false;

			var left = parseInt(jQuery('.campaign-breakout .breakout-slider .breakout-slider-inner').css('left'), 10);
			var breakoutWidth = parseInt(jQuery('.campaign-breakout .breakout-slider .breakout-slider-inner').css('width'), 10);
			var trackWidth = parseInt(jQuery('.campaign-breakout .breakout-slider .breakout-track').css('width'), 10);
			
			if(left == 0) { jQuery('.campaign-breakout .slide-left').css('display', 'none'); }
			else { jQuery('.campaign-breakout .slide-left').css('display','block'); }
			
			if(Math.abs(left) >= breakoutWidth - (trackWidth) * 2) {
				jQuery('.campaign-breakout .slide-right').css('display','none');
			} else {
				jQuery('.campaign-breakout .slide-right').css('display','block');
			}
		}
		
		jQuery('.campaign-breakout>div').click(function(e) {
			var t = jQuery(e.target), trackInfo;
			if(t.hasClass(".slide-right") || t.hasClass(".slide-left")) { return; }
			
			if(this.id && (/track-id-(.+)/).test(this.id)) {
				trackInfo = PROPERTIES.breakoutTracks[(/track-id-(.+)/).exec(this.id)[1]];
			} else {
				for(var p in PROPERTIES.breakoutTracks) {
					trackInfo = PROPERTIES.breakoutTracks[p];
					break;
				}
			}
			
			document.location.href=trackInfo.campaignUrl;				
			
			return false;

		});	
		
		jQuery('.campaign-breakout .slide-right').click(function() {
			if(isAnimating) { return; }			
			isAnimating = true;
			
			var left = parseInt(jQuery('.campaign-breakout .breakout-slider .breakout-slider-inner').css('left'), 10);
			var breakoutWidth = parseInt(jQuery('.campaign-breakout .breakout-slider .breakout-slider-inner').css('width'), 10);
			var trackWidth = parseInt(jQuery('.campaign-breakout .breakout-slider .breakout-track').css('width'), 10);
			
			if(isNaN(left)) { left = 0; }
			if(Math.abs(left) >= breakoutWidth - (trackWidth) * 2) { endAnim(); return; }

			var amountToSlide = parseInt(left) - parseInt(trackWidth);
						
			jQuery('.campaign-breakout .breakout-slider .breakout-slider-inner').animate({ left: amountToSlide + 'px' }, 200,
				"swing", endAnim);
		});
		jQuery('.campaign-breakout .slide-left').click(function() {
			if(isAnimating) { return; }			
			isAnimating = true;

			var left = parseInt(jQuery('.campaign-breakout .breakout-slider .breakout-slider-inner').css('left'), 10);
			var breakoutWidth = parseInt(jQuery('.campaign-breakout .breakout-slider .breakout-slider-inner').css('width'), 10);
			var trackWidth = parseInt(jQuery('.campaign-breakout .breakout-slider .breakout-track').css('width'), 10);

			if(isNaN(left)) { left = 0; }			
			if(parseInt(left) == 0) { endAnim(); return; }
			
			var amountToSlide = parseInt(left) + parseInt(trackWidth);
						
			jQuery('.campaign-breakout .breakout-slider .breakout-slider-inner').animate({ left: amountToSlide + 'px' }, 200,
				"swing", endAnim);
		});
		
		endAnim();
	}
	
	/*
	=========================================================================
	Registration popup code
	=========================================================================
	*/
	jQuery('.register-link').click(function() {
		var s = jQuery(window).scrollTop();

		var injectForm = function(data) {
			jQuery('.register-overlay .overlay .overlay-body').html(data)
			
			/*
			=================================================================
			Register overlay check for firefox: if the browser isn't firefox,
			hide the install toolbar checkbox.
			=================================================================
			*/
			if(jQuery('.register-overlay .toolbar-checkbox').length > 0) {
				if(jQuery.browser.mozilla && typeof PROPERTIES.campaign == "undefined") {
					jQuery('.register-overlay .toolbar-checkbox').css('display','block');
					jQuery('.register-overlay .toolbar-info').css('display','inline');
					jQuery('.register-overlay .toolbar-checkbox input').attr('checked','checked');
				}
			}
			if(PROPERTIES.campaign != null){
				jQuery('#origin_sponsor').val(PROPERTIES.campaign);
			}

			jQuery('.register-overlay .overlay').css('top', (s + 200) + 'px');
			jQuery('.register-overlay').fadeIn(200);
		};

		jQuery.get('/user/ajaxreg', {}, injectForm, 'html');

		return false;
	});
	
	jQuery('.login-overlay .overlay-close').click(function() {
		delete PROPERTIES.viewing;
	});
	
    if(!PROPERTIES.loggedIn && PROPERTIES.campaign != null && !PROPERTIES.seenRegisterWindow) {
		var s = jQuery(window).scrollTop();
		jQuery('.login-overlay .overlay').css('top', (s + 200) + 'px');
		jQuery('.login-overlay').fadeIn(200);
    }
	
	/*
	=========================================================================
	Rebates page overlays and warnings
	=========================================================================
	*/
	if((/\/redemption/).test(window.location)) {
		var showRebateOverlay = function(rebateLink) {		
			var s = jQuery(window).scrollTop();
			
			var f = function(data) {
				jQuery('.rebate-overlay .overlay-body').html(data);
				
				jQuery('.rebate-overlay .overlay').css('top', (s + 200) + 'px');
				jQuery('.rebate-overlay').fadeIn(200);
			};			
			
			jQuery.get(rebateLink, {}, f, 'html');
		};
		
		jQuery('.redemption-table .redemption-row .redeem-offer').click(function() {

			if(jQuery(this).hasClass('not-redeemed')) {
				var s = jQuery(window).scrollTop();
				var href = this.href;
				jQuery('.redeem-offer-warning .overlay').css('top', (s + 200) + 'px');
				jQuery('.redeem-offer-warning').fadeIn(200);
				jQuery('.redeem-offer-warning .continue-button').attr('link', href);
			} else {
				showRebateOverlay(this.href);
			}

			return false;
		});
		
		jQuery('.redeem-offer-warning .continue-button').click(function() {
			var l = jQuery(this).attr('link')
			jQuery('.redeem-offer-warning .overlay-close').click();
			
			jQuery('.redemption-table .redemption-row .redeem-offer').each(function() {
				if(this.href == l) {
					jQuery(this).addClass('redeemed');
					jQuery(this).removeClass('not-redeemed');
					var p = jQuery(this).parents('tr');
					jQuery('.text',this).html('Show Offer Details');
					
					console.log(p);
					p.addClass('redeemed');
					p.removeClass('not-redeemed');
					
					console.log(p.prev());
					p.prev().addClass('redeemed');
					p.prev().removeClass('not-redeemed');
				}
			});
			showRebateOverlay(l);
		});
	}
	
	/*
	=========================================================================
	Campaign landing page redirect warning
	=========================================================================
	*/
	if(PROPERTIES.campaign) {
		if(jQuery('.leaving-campaign-warning').size() > 0) {
			jQuery(".dympol-link").click(function() {
				var s = jQuery(window).scrollTop();
				var o = jQuery('.leaving-campaign-warning').eq(0);
				var t = jQuery(this);

				if(t.find('img').size()) {
					o.find('.visiting').html(t.find('img').attr('alt'));
				} else {
					o.find('.visiting').html(t.html());
				}
				o.find('.continue-button').attr('href',t.attr('href'));

				o.find('.overlay').css('top', (s + 200) + 'px');
				o.fadeIn(200);

				return false;
			});

			jQuery(".leaving-campaign-warning .continue-button").click(function() {
				jQuery(".leaving-campaign-warning .overlay-close").click();
				return true;
			});			
		}
	}
	
	/*
	=====================================================================
	Integrate with widget on toolbar install page
	=====================================================================
	*/
	if((/\/downloads\/toolbarinstalled/).test(window.location)) {
		jQuery(window).load(function() {
			if(jQuery('#toolbar-installed-container').hasClass('toolbar-install-confirm')) {
				jQuery('#toolbar-installed-container .success-message').fadeIn();
			} else {
				jQuery('#toolbar-installed-container .unconfirmed-message').fadeIn();
			}
		});

		setTimeout(function() {
			var s = jQuery(window).scrollTop();
						
			if(jQuery(document.body).hasClass('requires-login')) {
				var message = "You need to register an account before you";
				message += " can use the toolbar to receive rebates from ";
				message += " dympol. Log in or register below, it only";
				message += " takes a few seconds!";
			
				
				jQuery('.login-overlay .overlay-body>p').html(message);
				jQuery('.login-overlay .overlay').css('top', (s + 200) + 'px');
				jQuery('.login-overlay').fadeIn(200);
			}
		}, 1000);
	}
	
	/*
	=========================================================================
	Facebook Connect code
	=========================================================================
	*/
	if(typeof FB !== 'undefined') {
	    FB.init(PROPERTIES.facebookApiKey, "/xd_receiver.htm");		
	}
});

var handleFacebookLogin = function() {
	var injectForm = function(data) {
		if((/LOGIN/).test(data)) {
			
			if((document.location.href.search('user/login') !== -1)) {
				document.location = '/';
				return;
			}
			
			var f = document.createElement('form');
			f.action = document.location + "";
			f.method = 'post';
			f.style.display = 'none';
			for(var param in PROPERTIES.viewing) {
				var p = document.createElement('input');
				p.type = 'hidden';
				p.name = param;
				p.value = PROPERTIES.viewing[param];
				f.appendChild(p);
			}
			document.body.appendChild(f);
			f.submit();
		} else {
			var s = jQuery(window).scrollTop();
			jQuery('.register-overlay .overlay .overlay-body').html(data);

			jQuery('.register-overlay .overlay').css('top', (s + 200) + 'px');
			jQuery('.register-overlay').fadeIn(200);			
		}
	};
	
	var handleClose = function() {

		FB_RequireFeatures(['Api'], function() {
			FB.Facebook.init(PROPERTIES.facebookApiKey, '/xd_receiver.htm');
			
			var api = FB.Facebook.apiClient;
			FB.Connect.requireSession(function(ex) {
				
				api.revokeAuthorization(api.get_session().uid, function() {
					/* to get around the "hey, do you want to resubmit post data" popup. */
					var f = document.createElement('form');
					f.action = document.location.toString();
					f.method = "post";
					document.body.appendChild(f);
					f.submit();
					
				});
			});
		});
		
		jQuery('.register-overlay .overlay-close').unbind('click', handleClose);
	};
	
	jQuery('.register-overlay .overlay-close').click(handleClose);

	var data = {};
	if(PROPERTIES.viewing) {
		for(param in PROPERTIES.viewing) {
			data[param] = PROPERTIES.viewing[param];
		}
	}

	jQuery.post('/user/facebooklogin', data, injectForm);	
};

var handleFacebookMerge = function() {
	jQuery.post('/user/facebookmerge', {}, function() {
		window.location.reload(0);
	});
};