// 
// This will get all of the ads from google
// and then populate our ad fields with the data.
// 
// Each block will look like this
// 
// <div class="ad_block">
//    <div class="ads_by">Ads by Google</div>
//    <div class="ad">
//       <div class="line1"></div>
//       <div class="line2"></div>
//       <div class="line3"></div>
//       <div class="url"></div>
//    </div>
//    <div class="ad">
//       <div class="line1"></div>
//       <div class="line2"></div>
//       <div class="line3"></div>
//       <div class="url"></div>
//    </div>
//    <div class="ad">
//       <div class="line1"></div>
//       <div class="line2"></div>
//       <div class="line3"></div>
//       <div class="url"></div>
//    </div>
// </div>
//

var block_index = 0;
var google_adnum = 0;

var ad_arr = new Array();
var ad_arr_counter = 0; 

var google_bid;
var google_ad_type;
var google_max_num_ads;
var google_image_size;
var google_ad_client;
var google_ad_channel;
var google_ad_output;
var google_safe;
var google_encoding;
var google_ad_section;
var google_skip;

function print_google_ad(ad_order, num_ads, type, channels) {
	var unique_id = ad_order;

	ad_arr[ad_arr_counter] = {
					"unique_id":unique_id,
					"css":"",
					"num_ads":Number(num_ads),
					"type":type,
					"bid":"cpc",
					"category_title":"",
					"safe":"high",
					"display_order":ad_order,
					"channel":channels };

	if(typeof(class_name) == "undefined") {
		class_name = "";
	} 

	if(typeof(image_size) == "string") {
		ad_arr[ad_arr_counter]["image_size"] = image_size;
	} 

	if(typeof(ad_client) == "string") {
		ad_arr[ad_arr_counter]["ad_client"] = ad_client;
		delete ad_client;
	} 

	if(typeof(ad_label) == "string") {
		ad_arr[ad_arr_counter]["ad_label"] = ad_label;
	} 

	if(typeof(page) == "string") {
		ad_arr[ad_arr_counter]["page"] = page;
	} 

	if(typeof(search_query) == "string") {
		ad_arr[ad_arr_counter]["search_query"] = search_query;
	} 

	if(typeof(ad_keywords) != 'undefined') {
		ad_arr[ad_arr_counter]["keywords"] = ad_keywords;
	}

	if(typeof(kw_type) == "string") {
		ad_arr[ad_arr_counter]["kw_type"] = kw_type;
	} 

	if(typeof(hints) == "string") {
		ad_arr[ad_arr_counter]["hints"] = hints;
	} 

	if(typeof(contents) == "string") {
		ad_arr[ad_arr_counter]["contents"] = contents;
	} 

	if(typeof(google_rt) == "string") {
		ad_arr[ad_arr_counter]["google_rt"] = google_rt;
	} 

	if(typeof(google_page_url) == "string") {
		ad_arr[ad_arr_counter]["google_page_url"] = google_page_url;
	} 

	// unset this, so other ad tags don't inherit it... trust me
	// Removed by Alex on Feb 23, because it was breaking in IE6
	// delete image_size; 
	// delete ad_label; 
	// delete page; 
	// delete search_query; 
	// delete keywords;
	// delete kw_type;
	// delete hints;
	// delete contents;

	// Search you can only do one request.
	ad_arr_counter++;

	document.write('<span name="KonaFilter"><div id="googlead_' + unique_id + '" class="ad_block ' + class_name + '"></div></span>');
}

function google_radlink_request_done(radlinks) {
	var current_index = block_index;
	block_index++;

	// If there are more ads to display call them now.
	if(block_index < ad_arr.length) {
		request_google_ads();
	}	

	// Verify that there are actually ads to display.
	if(radlinks.length <= 0) { return; }

	var ad_block = document.getElementById("googlead_" + (ad_arr[current_index].unique_id));
	
	// Add in the "Related Ads"
	var ads_by = document.createElement("span");
	ads_by.className = "ads_by";

	if(typeof(ad_arr[current_index].ad_label) == "string") {
		ads_by.innerHTML = ad_arr[current_index].ad_label + " Ads";
	} else {
		ads_by.innerHTML = "Related Ads";
	}

	ad_block.appendChild(ads_by);

	var radlink_results = radlinks[0].line1;
	for(i=1; i<radlinks.length; i++) {
		radlink_results += ","+radlinks[i].line1;
	}

	// keep track of the index
	var ad_index = 0;
	for(i=0; i<radlinks.length; i++) {
		var ad = document.createElement("span");

		var line1 = radlinks[ad_index].line1;
		var term = radlinks[ad_index].term;
		var url_escaped_term = radlinks[ad_index].url_escaped_term;

		ad.innerHTML += '<a href="/related-ads.php?term='+url_escaped_term+'&channel='+ad_arr[current_index].channel+'&category='+ad_arr[current_index].category_title+'&links='+radlink_results+'&google_rt='+radlinks[ad_index].radlink_token+'" class="rad" onmouseover="window.status=\''+term+'\'; return true;" onmouseout="window.status=\'\'; return true;">'+line1+'</a>';

		// Add the current set of ads to the current AD Block
		ad_block.appendChild(ad);
		ad_index++;
	}

	// Once the radlinks are displayed, then displayed the category results below.
	// this is to prevent that wierd bouncing effect
	// when the google ads pop in after the page has been drawn out.
	var side_bar = document.getElementById("side_bar_content");
	if(side_bar) { 
		side_bar.style.visibility = "visible";
	}

	return;
}

function google_ad_request_done(google_ads) {

	// Verify that there are actually ads to display.
    if (google_ads.length == 0) { return; }

	var ad_block = document.getElementById("googlead_" + (ad_arr[block_index].unique_id));

	// keep track of the index
	var ad_index = 0;

	if (google_ads[0].type == "image") {
		ad_block.className = ad_block.className.trim() + "_image";
		ad_block.style.width = google_ads[0].image_width + "px";

		var ad = document.createElement("div");
		ad.className = "ad";

		ad.innerHTML += '<a href="'+google_ads[0].url +
						'" title="go to '+google_ads[0].visible_url +
						'" target="_blank" >' +
						'<img src="'+google_ads[0].image_url +
						'" width="'+google_ads[0].image_width +
						'" height="'+google_ads[0].image_height +
						'" border="0" /></a>';

		// Add the current set of ads to the current AD Block
		ad_block.appendChild(ad);

	} else if (google_ads[0].type == "flash") {
		ad_block.className = ad_block.className.trim() + "_flash";
		ad_block.style.width = google_ads[0].image_width + "px";

		var ad = document.createElement("div");
		ad.className = "ad";

		ad.innerHTML += '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' +
						' codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"' +
						' WIDTH="' + google_ads[0].image_width +
						'" HEIGHT="' + google_ads[0].image_height + '">' +
						'<PARAM NAME="movie" VALUE="' + google_ads[0].image_url + '">' +
						'<PARAM NAME="quality" VALUE="high">' +
						'<PARAM NAME="AllowScriptAccess" VALUE="never">' +
						'<EMBED src="' + google_ads[0].image_url +
						'" WIDTH="' + google_ads[0].image_width +
						'" HEIGHT="' + google_ads[0].image_height +
						'" TYPE="application/x-shockwave-flash"' +
						' AllowScriptAccess="never" ' +
						' PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED></OBJECT>';

		// Add the current set of ads to the current AD Block
		ad_block.appendChild(ad);

	} else { // if (google_ads[0].type == "text") { // althought I have seen type = "unknown"

		ad_block.className = ad_block.className.trim() + " " + ad_block.className.trim()+"_"+google_ads.length;

		// Add in the "ads by google"
		var ads_by = document.createElement("div");
		ads_by.className = "ads_by";
		ads_by.innerHTML = "Sponsored Links";
		ad_block.appendChild(ads_by);

		for(i=0; i<google_ads.length; i++) {
			var ad = document.createElement("div");
			ad.className = "ad ad"+(i+1);

			ad.url = google_ads[ad_index].url;
			ad.style.cursor = "pointer";
			ad.onclick = function() {
				window.location = html_entity_decode(this.url);
			}
			ad.innerHTML += add_line(google_ads[ad_index].line1, google_ads[ad_index].url, google_ads[ad_index].visible_url, "line1");
			ad.innerHTML += '<span class="line2">' + google_ads[ad_index].line2 + '</span> ';
			ad.innerHTML += '<span class="line3">' + google_ads[ad_index].line3 + '</span> ';
			ad.innerHTML += add_line(google_ads[ad_index].visible_url, google_ads[ad_index].url, google_ads[ad_index].visible_url, "url");
			
			// Add the current set of ads to the current AD Block
			ad_block.appendChild(ad);
			ad_index++;
		}
    }

	google_adnum = google_adnum + google_ads.length;

	return;
}

function google_afs_request_done(google_ads) {
	// Verify that there are actually ads to display.
    if (google_ads.length == 0) { return; }

	// keep track of the index
	var ad_index = 0;

	for(var block_id=0; block_id<ad_arr.length; block_id++) {
		var ad_block = document.getElementById("googlead_" + (ad_arr[block_id].unique_id));

		ad_block.className = ad_block.className.trim() + " " + ad_block.className.trim()+"_"+google_ads.length;

		// Add in the "ads by google"
		var ads_by = document.createElement("div");
		ads_by.className = "ads_by";
		ads_by.innerHTML = "Sponsored Links";
		ad_block.appendChild(ads_by);

		for(var i=0; i<ad_arr[block_id].num_ads; i++) {
			if(google_ads[ad_index] == undefined) {
				break;
			}

			var ad = document.createElement("div");
			ad.className = "ad ad"+(i+1);
			
			ad.url = google_ads[ad_index].url;
			ad.style.cursor = "pointer";
			ad.onclick = function() {
				window.location = html_entity_decode(this.url);
			}

			ad.innerHTML += add_line(google_ads[ad_index].line1, google_ads[ad_index].url, google_ads[ad_index].visible_url, "line1");
			ad.innerHTML += '<span class="line2">' + google_ads[ad_index].line2 + '</span> ';
			if (google_ads[ad_index].type == "text/narrow") { 
				ad.innerHTML += '<span class="line3">' + google_ads[ad_index].line3 + '</span> ';
			}
			ad.innerHTML += add_line(google_ads[ad_index].visible_url, google_ads[ad_index].url, google_ads[ad_index].visible_url, "url");
			
			// Add the current set of ads to the current AD Block
			ad_block.appendChild(ad);
			ad_index++;
		}

		// Note that google_adnum is only incremented for text ads
		google_adnum = google_adnum + google_ads.length;
	}
	
	return;
}

function sort_ads(a, b) {
	return a["display_order"] - b["display_order"];
}

//
// This is also recursively called in
// google_radlink_request_done
//
function request_google_ads() {
	if(block_index == 0) {
		ad_arr.sort(sort_ads);
	}

	if(ad_arr[block_index]) {
		if(ad_arr[block_index]["ad_client"]) {
			var ad_client = ad_arr[block_index]["ad_client"];
		} 

		if(ad_arr[block_index]["type"] == "radlinks") 
		{ 
			document.write('<script type="text/javascript" language="JavaScript">');

/*
			if(ad_arr[block_index]["keywords"]) 
			{
				document.write('google_kw = "' + ad_arr[block_index]["keywords"] + '";');
				if(ad_arr[block_index]["kw_type"]) 
				{
					// When you get ads for a clicked related terms, google_kw_type should be set to 'radlink', not 'broad'.
					document.write('google_kw_type = "'+ad_arr[block_index]["kw_type"]+'";');
				} 
				else 
				{
					document.write('google_kw_type = "broad";');
				}
			}
*/
			
			if(ad_arr[block_index]["hints"]) 
			{
				document.write('google_hints = "' + ad_arr[block_index]["hints"] + '";');
			}

			document.write('google_safe = "high";');
			document.write('google_ad_output = "js";');
			document.write('google_encoding = "utf8";');
			document.write('google_ad_section = "default";');
			document.write('google_ad_client = "' + ad_client + '";');
			document.write('google_max_num_ads = "' + 0 + '";');
			document.write('google_max_radlink_len = 27;'); // hard coded.
			document.write('google_kw_type = "radlink";');
			document.write('google_num_radlinks = ' + ad_arr[block_index]["num_ads"] + ';');
			document.write('google_ad_channel = "' + ad_arr[block_index]["channel"] + '";');
			document.write('</script>');
			document.write('<script language="JavaScript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>'); 
		}
		else if(ad_arr[block_index]["type"] == "search") 
		{
			var num_ads = 0;
			for(i=0; i<ad_arr.length; i++) {
				num_ads += Number(ad_arr[i]["num_ads"]);
			}

			document.write('<script type="text/javascript" language="JavaScript">');
			document.write('google_afs_query = "' + ad_arr[block_index]["search_query"] + '";'); // Search Query
			document.write('google_afs_adpage = "' + ad_arr[block_index]["page"] + '";'); // Pagination
			document.write('google_afs_ad = "w' + num_ads + '";'); // Only requesting wide ads
			document.write('google_afs_client = "' + ad_client + '";'); 
			document.write('google_afs_channel = "' + ad_arr[block_index]["channel"] + '";'); 
			document.write('google_afs_adsafe = "high";'); 
			document.write('google_afs_ie = "utf8";');
			document.write('google_afs_oe = "utf8";'); 
//			document.write('google_afs_gcs = "";'); // City Name
//			document.write('google_afs_gl = "";'); // Country Code
//			document.write('google_afs_gm = "";'); // Metropolitan Area
//			document.write('google_afs_gr = "";'); // Region Code
			document.write('</script>');
			document.write('<script language="JavaScript" src="http://www.google.com/afsonline/show_afs_ads.js"></script>'); 
		} 
		else
		{
			document.write('<script type="text/javascript" language="JavaScript">');

			if(ad_arr[block_index]["keywords"]) 
			{
				document.write('google_kw = "' + ad_arr[block_index]["keywords"] + '";');
				if(ad_arr[block_index]["kw_type"]) 
				{
					// When you get ads for a clicked related terms, google_kw_type should be set to 'radlink', not 'broad'.
					document.write('google_kw_type = "'+ad_arr[block_index]["kw_type"]+'";');
				} 
				else 
				{
					document.write('google_kw_type = "broad";');
				}
			}

			if(ad_arr[block_index]["hints"]) 
			{
				document.write('google_hints = "' + ad_arr[block_index]["hints"] + '";');
			}

			if(ad_arr[block_index]["contents"]) 
			{
				document.write('google_contents = "' + ad_arr[block_index]["contents"] + '";');
			}

			if(ad_arr[block_index]["google_rt"]) 
			{
				document.write("google_rt = '" + ad_arr[block_index]["google_rt"] + "';");
				document.write("google_page_url = '" + ad_arr[block_index]["google_page_url"] + "';");
				document.write('google_prev_ad_formats_by_region = "adlinks";');
			}

			// document.write('google_bid = "cpc";');
			document.write('google_safe = "high";');
			document.write('google_ad_output = "js";');
			document.write('google_encoding = "utf8";');
			document.write('google_ad_section = "default";');
			document.write('google_ad_client = "' + ad_client + '";');
			document.write('google_max_num_ads = ' + ad_arr[block_index]["num_ads"] + ';');
			document.write('google_ad_type = "' + ad_arr[block_index]["type"] + '";');
			document.write('google_ad_channel = "' + ad_arr[block_index]["channel"] + '";');
			document.write('google_image_size = "' + ad_arr[block_index]["image_size"] + '";');
			document.write('google_skip = google_adnum;');
			document.write('</script>');
			document.write('<script language="JavaScript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>'); 
		}
	}
}

// Not allowed to open in a new window.
function add_line(line, url, visible_url, class_name) {
	var str = "";
	str += '<div class="'+class_name+'">' +
		      '<a href="'+url+'" onmouseover="window.status=\'go to '+visible_url+'\'; return true;" onmouseout="window.status=\'\'; return true;" rel="nofollow">' +
			  line + 
		      '</a>' + 
		   '</div>';
	return(str);
}

function html_entity_decode(str)
{
	var htmlDecode = document.createElement('textarea');
	htmlDecode.innerHTML = str; 
	return htmlDecode.value;
}

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };

