var MAX_ADS = 4;

jQuery(document).ready(function() {				
	jQuery('#ad-id-field').val("");		
	setCharacterCount();
	updatePreviewAd();	
	loadSavedAds();
	//setSaveButtonState()
	
	jQuery('#ad-section td:nth-child(even) input').each(function(n) {
		jQuery(this).bind('keyup', function(event) {
			updateCharacterCount(jQuery(this));
			updatePreviewAd();
			//setSaveButtonState()
		});
	});
	
	jQuery('#match-type-bids input').each(function(n) {
		jQuery(this).blur(function(event) {
			var num = parseFloat(jQuery(this).val());
			if (isNaN(num))
				num = 0.0;
			
			jQuery(this).val(num.toFixed(2));
		});
	});
	
	jQuery('#kw-adgroup').blur(function(event) {
		var num = parseInt(jQuery(this).val());
		if (isNaN(num))
			num = 0;
		jQuery(this).val(num);
	});
});	

function loadSavedAds() {

	var index = 1;
	
	for (var i = 1; i <= MAX_ADS; i++)
	{
		var ad = jQuery.cookie('savedAd'+i);
		if (ad == null)
			continue;
		
		var adParts = ad.split("::");
		var ad = {
			id: index,
			headline: adParts[0],
			line1: adParts[1],
			line2: adParts[2],
			displayUrl: adParts[3],
			destinationUrl: adParts[4]
		}

		if (i > index) {
			createAdCookie(ad);
			jQuery.cookie('savedAd'+i, null);
		}
		
		jQuery("#saved-ads tr:last").append(createSavedAd(ad));	
		bindDelete(index);
		bindEdit(index);
		index++;
	}
	
	if (jQuery('#saved-ads td').length > 0)
		jQuery('#no-ads-msg').hide();
}

function setSaveButtonState() {
	var headline = jQuery('#ad-headline').val();		
	var line1 = jQuery('#ad-line1').val();		
	var line2 = jQuery('#ad-line2').val();		
	var displayUrl = jQuery('#ad-display-url').val();		
	var destinationUrl = jQuery('#ad-destination-url').val();	
	
	if (headline == "" || line1 == "" || line2 == "" || displayUrl == "" || destinationUrl == "")
	{
		jQuery("#saveAdBtn").attr("disabled", true);
	}
	else
	{
		jQuery("#saveAdBtn").attr("disabled", false);
	}
}

function setCharacterCount() {
	jQuery('#ad-section td:nth-child(even) input').each(function(n) {
		updateCharacterCount(jQuery(this));
	});
}

function updateCharacterCount(input) {

	var limit = input.attr('id') == 'ad-headline' ? 25 : 35;
	var numChars = input.val().length;
	input.parent().next().text(numChars + "/" + limit);
}

function updatePreviewAd() {		
	var headline = jQuery('#ad-headline').val();		
	jQuery('.preview-headline a').text(headline != "" ? headline : "Ad Headline");				
	var line1 = jQuery('#ad-line1').val();		
	jQuery('.preview-line1').text(line1 != "" ? line1 : "Ad Line 1");				
	var line2 = jQuery('#ad-line2').val();		
	jQuery('.preview-line2').text(line2 != "" ? line2 : "Ad Line 2");				
	var displayUrl = jQuery('#ad-display-url').val();		
	jQuery('.preview-display-url').text(displayUrl != "" ? displayUrl : "Display URL");				
	var destinationUrl = jQuery('#ad-destination-url').val();		
	jQuery('.preview-headline a').attr('href', destinationUrl);	
	jQuery('.preview-headline a').attr('target', "_blank");	
}

function clearAd() {	
	jQuery('#ad-section td:nth-child(even) input').each(function(n) {
		jQuery(this).val("");
	});
	jQuery('#ad-id-field').val("");	
	jQuery('.savedAd').each(function(n) {
		jQuery(this).removeClass('editing');
	}); 
	setCharacterCount();
	updatePreviewAd();
	//setSaveButtonState();
}	

function resetSavedAdIds() {
	var id = 1;
	jQuery("#saved-ads td").each(function(n) {
		if (n % 2 == 0)
		{
			jQuery(this).removeClass().addClass('colA-'+id);
			var editImage = jQuery(this).find('img').eq(0);
			editImage.unbind('click');
			editImage.attr('id', 'edit-'+id);
			bindEdit(id);
			
			var delImage = jQuery(this).find('img').eq(1);
			delImage.unbind('click');
			delImage.attr('id', 'delete-'+id);
			bindDelete(id);
			/*
			jQuery(this).find('img').eq(0).attr('id', 'edit-'+id);
			jQuery(this).find('img').eq(1).attr('id', 'delete-'+id);*/
		}
		else 
		{
			jQuery(this).removeClass().addClass('colB-'+id).addClass('savedAd');
			id++;
		}
	});
}

function createSavedAd(ad) 
{
	return "<td class='colA-"+ad.id+"' valign='top'><img alt='Edit Ad' id='edit-"+ad.id+"' src='../images/pencil.png'/><br/>"+
		"<img alt='Delete Ad' id='delete-"+ad.id+"' src='../images/cancel.png'/></td>"+				
		"<td class='colB-"+ad.id+" savedAd'><a class='saved-headline' target='_blank' href='"+ad.destinationUrl+"'>"+ad.headline+"</a><br/>" +
		"<span class='saved-line1'>"+ad.line1+"</span>"+ " " + "<span class='saved-line2'>"+ad.line2+"</span><br/>"+				
		"<span class='saved-display-url'>"+ad.displayUrl+"</span></td>";	
}	

function bindDelete(id) {
	jQuery('#delete-'+id).bind('click', function(event) {	
	
		if (confirm('Are you sure you want to delete this ad?'))
		{
			jQuery(this).parent().next().fadeOut("slow", function() {
				jQuery(this).remove();
			});	
			
			jQuery(this).parent().fadeOut("slow", function() {
				jQuery(this).remove();
				resetSavedAdIds();
			});			

			if (jQuery('#saved-ads td').length == 0)
				jQuery('#no-ads-msg').show();
				
			// If we delete an edited ad, switch back to 'new' mode
			if (jQuery('#ad-id-field').val() == id)
				jQuery('#ad-id-field').val("");
			
			jQuery.cookie('savedAd'+id, null);
		}
	});				
}

function bindEdit(id) {
	jQuery('#edit-'+id).bind('click', { adId : id }, function(event) {		
	
		var adId = event.data.adId;			
		var headline = jQuery(this).parent().next().find('.saved-headline').text();			
		var line1 = jQuery(this).parent().next().find('.saved-line1').text();			
		var line2 = jQuery(this).parent().next().find('.saved-line2').text()			
		var displayUrl = jQuery(this).parent().next().find('.saved-display-url').text();			
		var destinationUrl = jQuery(this).parent().next().find('.saved-headline').attr('href');						
		jQuery('#ad-id-field').val(adId);						
		jQuery('#ad-headline').val(headline);			
		jQuery('#ad-line1').val(line1);			
		jQuery('#ad-line2').val(line2);			
		jQuery('#ad-display-url').val(displayUrl);			
		jQuery('#ad-destination-url').val(destinationUrl);		
		jQuery('#ad-editor').effect("highlight", {}, 1000);		
		
		jQuery('.savedAd').each(function(n) {
			jQuery(this).removeClass('editing');
		});

		jQuery('.colB-'+adId).addClass('editing');
	});	
}

function createAdCookie(ad) {
	var adCookie = ad.headline + "::" + ad.line1 + "::" + ad.line2 + "::" + 
					ad.displayUrl + "::" + ad.destinationUrl;
  	
	jQuery.cookie('savedAd'+ad.id, adCookie);
}

function saveAd() {		
	
	jQuery('#no-ads-msg').hide();
					
	var isNew = jQuery('#ad-id-field').val() == "";		
	var ad = {
		id: jQuery("#saved-ads td").size() / 2 + 1,
		headline: jQuery('#ad-headline').val(),
		line1: jQuery('#ad-line1').val(),
		line2: jQuery('#ad-line2').val(),
		displayUrl: jQuery('#ad-display-url').val(),
		destinationUrl: jQuery('#ad-destination-url').val()
	};
		
	if (isNew) {	
	
		if (ad.id > MAX_ADS) {
			alert("Sorry, but you can only save up to " + MAX_ADS + " ads at a time.");
			return;
		}
		
		createAdCookie(ad);
		jQuery("#saved-ads tr:last").append(createSavedAd(ad));	
		bindDelete(ad.id);
		bindEdit(ad.id);
	}		
	else 
	{		
		
		var adCookie = ad.headline + "::" + ad.line1 + "::" + ad.line2 + "::" + 
						ad.displayUrl + "::" + ad.destinationUrl;
		
		jQuery.cookie('savedAd'+ad.id, adCookie);
		
		var adId = jQuery('#ad-id-field').val();			
		jQuery('.colB-'+adId + ' .saved-headline').text(ad.headline);			
		jQuery('.colB-'+adId + ' .saved-line1').text(ad.line1);			
		jQuery('.colB-'+adId + ' .saved-line2').text(ad.line2);			
		jQuery('.colB-'+adId + ' .saved-display-url').text(ad.displayUrl);			
		jQuery('.colB-'+adId + ' .saved-headline').attr('href', ad.destinationUrl)
		jQuery('.colB-'+adId + ' .saved-headline').attr('target', "_blank");	
		jQuery('.colB-'+adId).effect("highlight", {}, 2000);	
	}						
	
	/*
	var numCols = jQuery("#saved-ads td").size();		
	var maxCols = 8;		
	if (numCols % maxCols == 0) {			
		jQuery('#saved-ads').append("<tr></tr>");		
	}		
*/	
}

function generateCampaign() {
	var savedAds = [];
	jQuery('#saved-ads td:nth-child(even)').each(function(n) {
		savedAds.push(
			{ 
				headline: jQuery(this).find('.saved-headline').text(),
				line1: jQuery(this).find('.saved-line1').text(),
				line2: jQuery(this).find('.saved-line2').text(),
				displayUrl: jQuery(this).find('.saved-display-url').text(),
				destinationUrl: jQuery(this).find('.saved-headline').attr('href')
			}
		);
	});
	
	var campaignInput = {
		campaignName: jQuery('#campaign-name').val(),
		keywordUrl: jQuery('#keyword-url').val(),
		adgroupName: jQuery('#adgroup-name').val(),
		broadBid: jQuery('#broad').val(),
		exactBid: jQuery('#exact').val(),
		phraseBid: jQuery('#phrase').val(),
		keywords: jQuery("#keywords").val().split("\n"),
		useSingleAdGroup: jQuery("#adgroup-option2:checked").length == 1,
		adGroupName: jQuery("#adgroup-name").val(),
		savedAds: savedAds
	}
	
	
	var isAdwords = jQuery("#adwords:checked").length == 1;
	if (isAdwords)
		generateAdwordsOutput();
	else
		generateMSNOutput(campaignInput);

}

function generateMSNOutput(input) {
	jQuery('#campaign-output').empty();
	jQuery('#campaign-output').prepend('<h3>MSN Adcenter Output</h3><textarea id="keyword-output" name="keyword-output" cols="80" rows="10" wrap="off" readonly="yes"></textarea>');
	var kwPerAdGroup = jQuery("#kw-adgroup").val();
	
	var buffer = [];
	
	buffer.push("Campaign,Ad Group,Keyword,Keyword Matching,Current Maximum CPC,Keyword Destination URL,Headline,Description Line 1,Description Line 2,Display URL,Destination URL\n");
	var adGroupNum = 1;
	for (var i = 0; i < input.keywords.length; i++)
	{
		if (kwPerAdGroup == 0 || kwPerAdGroup == "")
			adGroupNum = "";
			
		var keyword = input.keywords[i];
		
		var commonStr = input.campaignName+','+(input.useSingleAdGroup ? input.adGroupName+adGroupNum : keyword)+','+keyword+',';
		
		if (input.broadBid > 0.0) {
			var commonStr2 = commonStr + 'broad,'+input.broadBid+','+input.keywordUrl+',';
			for (var j = 0; j < input.savedAds.length; j++)
			{
				buffer.push(commonStr2 + input.savedAds[j].headline + ',' +
					input.savedAds[j].line1 + ',' + input.savedAds[j].line2 + ',' +
					input.savedAds[j].displayUrl + ',' + input.savedAds[j].destinationUrl + '\n');
			}
		}
		
		if (input.exactBid > 0.0) {
			var commonStr2 = commonStr + 'exact,'+input.exactBid+','+input.keywordUrl+',';
			for (var j = 0; j < input.savedAds.length; j++)
			{
				buffer.push(commonStr2 + input.savedAds[j].headline + ',' +
					input.savedAds[j].line1 + ',' + input.savedAds[j].line2 + ',' +
					input.savedAds[j].displayUrl + ',' + input.savedAds[j].destinationUrl + '\n');
			}
		}
		
		if (input.phraseBid > 0.0) {
			var commonStr2 = commonStr + 'phrase,'+input.phraseBid+','+input.keywordUrl+',';
			for (var j = 0; j < input.savedAds.length; j++)
			{
				buffer.push(commonStr2 + input.savedAds[j].headline + ',' +
					input.savedAds[j].line1 + ',' + input.savedAds[j].line2 + ',' +
					input.savedAds[j].displayUrl + ',' + input.savedAds[j].destinationUrl + '\n');
			}
		}
		
		if ((i+1) % kwPerAdGroup == 0)
			adGroupNum++;
	}
	jQuery("#keyword-output").val(buffer.join(""));
	
}

function generateAdwordsOutput() {

	var campaignName = jQuery('#campaign-name').val();
	var keywordUrl = jQuery('#keyword-url').val();
	var broadBid = jQuery('#broad').val();
	var exactBid = jQuery('#exact').val();
	var phraseBid = jQuery('#phrase').val();
	
	jQuery('#campaign-output').empty();
	jQuery('#campaign-output').prepend('<h3>Google Adwords Keyword Output</h3><textarea id="keyword-output" name="keyword-output" cols="80" rows="10" wrap="off" readonly="yes"></textarea><h3>Ad Output</h3><textarea id="ad-output" name="ad-output" cols="80" rows="10" wrap="off" readonly="yes"></textarea>');

	var keywords = jQuery("#keywords").val().split("\n");
	var useSingleAdGroup = jQuery("#adgroup-option2:checked").length == 1;
	var kwPerAdGroup = jQuery("#kw-adgroup").val();
	
	var savedAds = [];
	jQuery('#saved-ads td:nth-child(even)').each(function(n) {
		savedAds.push(
			{ 
				headline: jQuery(this).find('.saved-headline').text(),
				line1: jQuery(this).find('.saved-line1').text(),
				line2: jQuery(this).find('.saved-line2').text(),
				displayUrl: jQuery(this).find('.saved-display-url').text(),
				destinationUrl: jQuery(this).find('.saved-headline').attr('href')
			}
		);
	});
	
	var keywordBuffer = [];
	var adBuffer = [];
	var adGroupNum = 1;
	for (var i = 0; i < keywords.length; i++)
	{
		var keyword = keywords[i];
		if (kwPerAdGroup == 0 || kwPerAdGroup == "")
			adGroupNum = "";
			
		var adGroupName = useSingleAdGroup ? jQuery("#adgroup-name").val() + adGroupNum : keyword;
		
		var commonStr = '"'+campaignName+'","'+adGroupName+'",';
		if (broadBid > 0.0) {
			keywordBuffer.push(commonStr + '"'+keyword+'",' + '"broad","'+broadBid+'",'+'"'+keywordUrl+'"\n');
		}
		
		if (exactBid > 0.0) {
			keywordBuffer.push(commonStr + '"'+keyword+'",' + '"exact","'+exactBid+'",'+'"'+keywordUrl+'"\n');
		}
		
		if (phraseBid > 0.0) {
			keywordBuffer.push(commonStr + '"'+keyword+'",'+ '"phrase","'+phraseBid+'",'+'"'+keywordUrl+'"\n');
		}
		
		if (broadBid == 0.0 && exactBid == 0.0 && phraseBid == 0.0) {
		
			keywordBuffer.push(commonStr + '"'+keyword+'",'+ '"","",'+'"'+keywordUrl+'"\n');
		}
		
		if (!useSingleAdGroup)
		{
			var commonStr = '"'+campaignName+'","'+adGroupName+'",';
			for (var j = 0; j < savedAds.length; j++)
			{
				adBuffer.push(commonStr + '"'+savedAds[j].headline + '","' +
					savedAds[j].line1 + '","' + savedAds[j].line2 + '","' +
					savedAds[j].displayUrl + '","' + savedAds[j].destinationUrl + '"\n');
			}
		}
		
		if ((i+1) % kwPerAdGroup == 0)
			adGroupNum++;
	}
	
	if (useSingleAdGroup)
	{
		for (var j = 0; j < savedAds.length; j++)
		{
			for (var k = 0; k < adGroupNum; k++)
			{
				adBuffer.push('"'+campaignName+'","'+jQuery("#adgroup-name").val()+(k+1)+'",' + '"'+savedAds[j].headline + '","' +
							savedAds[j].line1 + '","' + savedAds[j].line2 + '","' +
							savedAds[j].displayUrl + '","' + savedAds[j].destinationUrl + '"\n');
			}
		}
	}
	
	jQuery("#keyword-output").val(keywordBuffer.join(""));
	jQuery("#ad-output").val(adBuffer.join(""));
}