var bomAds = {
	displayedAds: 0
};

/**
 * Return a displayable string
 * @param string str
 * @return string
 */
bomAds.ConvertString = function (str)
{
	str = unescape (str);

	str = str.replace (/&amp;/gi,		"&");
	str = str.replace (/&#38;/gi,		"&");

	str = str.replace (/&apos;/gi,		"\'");
	str = str.replace (/&#39;/gi,		"\'");

	str = str.replace (/&quot;/gi,		"\"");
	str = str.replace (/&#34;/gi,		"\"");

	str = str.replace (/&gt;/gi,		">");
	str = str.replace (/&#62;/gi,		">");

	str = str.replace (/&lt;/gi,		"<");
	str = str.replace (/&#60;/gi,		"<");

	str = str.replace (/\+/gi,			" ");

	return str;
}

/**
 * Return a displayable string only for AFC
 * @param string str
 * @return string
 */
bomAds.ConvertStringAFC = function(str){
	str = str.replace (/&amp;/gi,		"&");
	return str;
}

/**
 * Get textes fields
 * @param DOMObject oneAd node of one ad
 * @return array
 */
bomAds.GetText = function (oneAd)
{
	var result = new Array ();

	var textNodes = oneAd.getElementsByTagName ("text");
	for (var i = 0; i < textNodes.length; i++)
	{
		var text = textNodes[i].firstChild.data;
		//result[result.length] = bomAds.ConvertString (text);
		result[result.length] = text;
	}

	return result;
}

/**
 * Get url field
 * @param DOMObject oneAd node of one ad
 * @return string
 */
bomAds.GetUrl = function (oneAd)
{
	var url = '';
	var node = oneAd.getElementsByTagName ("url");

	if (node.length == 1)
	{
		url = node[0].firstChild.data;
	}

	//return bomAds.ConvertString (url);
	return url;
}

/**
 * Get visible_url field
 * @param DOMObject oneAd node of one ad
 * @return string
 */
bomAds.GetVisibleUrl = function (oneAd)
{
	var url = '';
	var node = oneAd.getElementsByTagName ("visible_url");

	if (node.length == 1)
	{
		url = node[0].firstChild.data;
	}

	return url;
}

/**
 * Parse the XML document
 * @param DOMObject xmlDoc
 * @return array
 */
bomAds.GetArray = function (xmlDoc)
{
	var result = new Array ();

	var ads = xmlDoc.getElementsByTagName ("bomad");

	for (var i = 0; i < ads.length; i++)
	{
		var ad = ads[i];
		var url = bomAds.GetUrl (ad);
		var visible_url = bomAds.GetVisibleUrl (ad);
		var text = bomAds.GetText (ad);

		oneResult = {
			url: url,
			visible_url: visible_url,
			text: text
		}

		result[result.length] = oneResult;
	}
	return result;
}

/**
 * bomAds.CreateLinkElement
 * Create the anchor element with attributes
 * @param string url
 * @param string visible_url
 * @param string content
 * @return DOMObject
 */
bomAds.CreateLinkElement = function (url, visible_url, content)
{
	var link = document.createElement ("a");
	link.setAttribute ("href", url);
	link.setAttribute ("onmouseover", "window.status=\'Afficher la page " + visible_url + "\'; return true;");
	link.setAttribute ("onmouseout", "window.status=\'\'; return true;");
	link.setAttribute ("target", "_blank");
	link.innerHTML = content;
	return link;
}

/**
 * bomAds.CreateLinkElement
 * Create the anchor element with attributes
 * @return DOMObject
 */
bomAds.CreateFeedbackElement = function ()
{
	var div = document.createElement ("div");
	div.setAttribute ("class", "feedback");
	var feedback = document.createElement ("a");
	feedback.setAttribute ("href", "https://adwords.google.fr/select/Login");
	feedback.setAttribute ("target", "_blank");
	feedback.innerHTML = "Et pourquoi pas votre propre message?";
	div.appendChild (feedback);
	return div;
}

/**
 * bomAds.FeedZone
 * Feed zone with ads
 * @param array zoneOpt Zone definition
 * @param array ads Listing of ads to display
 * @return void
 */
bomAds.FeedZone = function (zoneOpt, ads, displayFeedBack)
{
	if (displayFeedBack == null) {
		displayFeedBack = true;
	}

	var zone = document.getElementById (zoneOpt.zoneUniq);

	if (ads.length == 0)
	{
		//zone.parentNode.parentNode.removeChild (zone.parentNode);
	}
	else
	{
		for (var i = 0; i < ads.length; i++)
		{
			var ad = ads[i];
			var oneAd = document.createElement ("div");
			oneAd.setAttribute ("class", "oneAd");
			oneAd.setAttribute ("className", "oneAd");

			if (zoneOpt.format && zoneOpt.format == 'w')
			{
				ad.text[1] += ' ' + ad.text[2];
				//ad.text.pop();
				ad.text[2] = '';
			}

			for (var j = 0; j < ad.text.length; j++)
			{
				var oneLine = document.createElement ("div");
				oneLine.appendChild (bomAds.CreateLinkElement (ad.url, ad.visible_url, ad.text[j]));
				oneLine.setAttribute ("class", "line_" + (j + 1));
				oneLine.setAttribute ("className", "line_" + (j + 1));
				oneAd.appendChild (oneLine);
			}

			var oneLine = document.createElement ("div");
			oneLine.appendChild (bomAds.CreateLinkElement (ad.url, ad.visible_url, ad.visible_url));
			oneLine.setAttribute ("class", "line_" + (j + 1));
			oneLine.setAttribute ("className", "line_" + (j + 1));
			oneAd.appendChild (oneLine);
			zone.appendChild (oneAd);
		}

		if (displayFeedBack == true)
		{
			zone.appendChild (bomAds.CreateFeedbackElement ());
		}

		zone.parentNode.style.display = "block";
	}
}

/**
 * bomAds.Display
 * Controleur d\'affichage AFS
 * @param	DOMObject t	Ajax response
 * @return void
 */
bomAds.Display = function (t)
{
	var ads = bomAds.GetArray (t.responseXML);
	for (var i = 0; i < bomAds.zones.length; i++)
	{
		bomAds.FeedZone (bomAds.zones[i], ads.slice (bomAds.displayedAds, bomAds.displayedAds + bomAds.zones[i].nb));
		bomAds.displayedAds += bomAds.zones[i].nb;
	}
}

/**
 * google_ad_request_done
 * Callback function for displaying google AFC
 * @param array google_ads
 * @return void
 */
function google_ad_request_done(google_ads) {
	/*
	 * This function is required and is used to display
	 * the ads that are returned from the JavaScript
	 * request. You should modify the document.write
	 * commands so that the HTML they write out fits
	 * with your desired ad layout.
	 */
	var i;
	var ads = new Array ();

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

	if ( google_ads[0].type == "text" ) {
		if ( google_ads.length > 0 ) {
			/*
			* For text ads, append each ad to array.
			*/
			for(i=0; i < google_ads.length; ++i) {
				var ad = new Array ();
				ad['url'] = bomAds.ConvertStringAFC(google_ads[i].url);
				ad['visible_url'] = google_ads[i].visible_url;
				ad['text'] = new Array (google_ads[i].line1, google_ads[i].line2, google_ads[i].line3);
				ads[ads.length] = ad;
			}
		}
	}

	for (var i = 0; i < bomAds.zonesAFC.length; i++)
	{
		bomAds.FeedZone (bomAds.zonesAFC[i], ads.slice (bomAds.displayedAds, bomAds.displayedAds + bomAds.zonesAFC[i].nb), false);
		bomAds.displayedAds += bomAds.zonesAFC[i].nb;
	}
}