/**
 * Données générales par défaut
 * @var objects
 *    - string		client			Numéro de clients (default : pub-3196120498181971)
 *    - string		channel			Code channel associé
 *    - int			max				Nombre maximum d'annonces affichable
 *    - int			skip			Nombre d'annonce à ne pas afficher
 *    - int			page			Page d'annonce en cours
 *    - string		id				Id permettant d'identifier le groupe d'annonce
 *    - string		class			Classe permettant d'identifier le groupe d'annonce
 *    - bool		test			Mode test
 *    - string		mode			Mode d'affichage 'line' en lignes ou 'col' en colonnes
 *    - int			fontSize		Taille (px) la plus petite
 *    - string		width			Chaine pour spécifier la largeur du groupe. '100%' par défaut
 *    - string		search			Chaine pour la recherche. Fonctionne également pour les "content"  
 *    - int			fontSize		Taille (px) la plus petite
 *    - int			fontSizeAdjust	Multiplicateur pour l'ajustement de la taille. 
 *    - function	insertion		Fonction appelé pour l'insertion. Un paramêtre est passé contenant le code html des annonces
 *    
 *
 *  
 *	L'ajustement de la taille du texte
 *	----------------------------------
 *	La taille du texte est définie à 12px de base par défaut.
 *	Cette taille est changeable via l'attribut 'fontSize'.
 *	La taille du texte augmente automatiquement si le nombre d'annonce est inférieur au seuil défini (3 par défaut et changeable via l'attribut 'fontSizeThreshold').
 *	La différence est donc ajoutée à la taille initiale et multipliée par l'indice d'ajustement 'fontSizeAdjust' 
 */
var google_ads_datas_default = {
	client				: 'pub-3196120498181971',
	channel				: '',
	max					: 1,
	skip				: 0,
	page				: 1,
	id					: '',
	classe				: '',
	test				: false,
	mode				: 'line',
	width				: '100%',
	search				: '',
	fontSize			: 12,
	insertion			: function(content) {
		document.write(content);
	}
};

/**
 * Affiche le texte dans la status bar
 * @param String text
 */ 
function setSatus(text) {
	window.status = text;
}

/**
 * Affiche les annonces
 * @param Object google_ads Objets contenant les annonces 
 */ 
google_ads_display = function(google_ads) {
	var dts = google_ads_datas;
	var nbElems = google_ads.length-dts.skip;
	
	if(!nbElems) return;
		
	var id = dts.id;
	var skip = dts.skip;
	var channel = dts.channel;
	var mode = nbElems < 2 ? 'line' : dts.mode;
	var nbCols = mode == 'line' ? 1 : nbElems;
	var fontSize = dts.fontSize;
	var width = dts.width;
	var feedback = google_info.feedback_url ? google_info.feedback_url : false;
	var classe = jQuery.trim('googleAds '+mode+' ads_'+channel+' count'+nbElems+' '+dts.classe);
	
	google_ads.splice(0, skip);	
	
	var content = '';
	content += '<div style="clear:both;font-size:0;height:0;overflow:hidden"></div>';
	content += '<div id="'+id+'" class="'+classe+'" style="width:'+width+'">';
	content += '	<div class="googleAds_header">';
	
	if(feedback) {
		content += '<a href="'+feedback+'">Annonces <span>Google</span></a>';
	} else {
		content += 'Annonces <span>Google</span>';
	}
	
	
	content += '	</div>';
	content += '	<div class="googleAds_list" style="font-size:'+fontSize+'px">';
	content += '		<table cellspacing="0" cellpadding="0">';
	content += '			<tr>';
	
	$.each(google_ads, function(i,e) {	
		if(i && mode == 'line') {
			content += '</tr></tr>';
		}
		
		position = $.trim((!i ? 'first' : '')+' '+(i == nbElems-1 ? 'last' : ''));
		
		content += '<td class="googleAds_item '+position+'" style="width:'+parseInt(100/nbCols)+'%">';
		content += '	<div>';
		content += '		<a class="googleAds_itemTitle" href="'+this.url+'" onmouseover="setSatus(\''+this.visible_url+'\')" onmouseoout="setSatus(\'\')">';
		content += '			'+this.line1;
		content += '		</a>';
		content += '	</div>';
		content += '	<p class="googleAds_itemContent">';
		content += '		'+ this.line2+' '+(this.line3 ? this.line3 : '');
		content += '	</p>';
		content += '	<a class="googleAds_itemLink" href="'+this.url+'" onmouseover="setSatus(\''+this.visible_url+'\')" onmouseoout="setSatus(\'\')">';
		content += '		'+this.visible_url;
		content += '	</a>';
		content += '</td>';
		
		if(this.bidtype == 'CPC') {
			google_ads_datas_default.skip++;
		}
	});
	       
	content += '			</tr>';
	content += '		</table>';
	content += '	</div>'
	content += '</div>'
	
	google_ads_datas.insertion(content);
}

/**
 * Données générales en cours. Voir google_ads_datas_default plus haut
 */
var google_ads_datas = {};

/**
 * Initialisation d'un objet qui est implémenté par Google uniquement pour
 * les annonces "content"
 */  
var google_info = {};

/**
 * Applique aux données générales les données transmises
 * @param Object datas 
 */ 
function set_google_ads_datas(datas) {
	google_ads_datas = $.extend({}, google_ads_datas_default, datas);
	google_info = {};
}

/**
 * Gère l'affichage d'une annonce de type "content"
 */ 
$.google_ads_content = function(datas) {
	set_google_ads_datas(datas);
	
	google_ad_client  = google_ads_datas.client;
	google_ad_channel = google_ads_datas.channel;
	google_max_num_ads = google_ads_datas.max;
	google_hints = google_ads_datas.search;
	google_skip = google_ads_datas.skip;
	google_ads_datas.skip = 0;
	google_adtest = google_ads_datas.test ? 'on' : 'off';
	google_feedback = google_ads_datas.test ? 'off' : 'on';
	
	google_ad_output = 'js';
	google_ad_type = 'text';
	google_encoding = 'utf8';
	
	google_ad_request_done = google_ads_display;
	
	// Appel du script
	document.write('<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>');
}

/**
 * Gère l'affichage d'une annonce de type "search"
 */ 
$.google_ads_search = function(datas) {
	set_google_ads_datas(datas);
	
	if(!google_ads_datas.test) {
		google_info.feedback_url = 'https://www.google.com/adsense/support/bin/request.py?contact=afs_violation';
	}
	
	google_afs_client = google_ads_datas.client;
	google_afs_channel = google_ads_datas.channel;
	google_afs_query = google_ads_datas.search;
	google_hints = google_ads_datas.search;
	google_afs_ad = 'w'+google_ads_datas.max;
	google_afs_adpage = google_ads_datas.page;
	google_afs_adtest = google_ads_datas.test ? 'on' : 'off';
	google_afs_hl = 'fr';
	google_afs_ie = 'latin1';
	google_afs_oe = 'latin1';
	
	google_afs_request_done = google_ads_display;
	
	// Appel du script
	document.write('<script type="text/javascript" src="http://www.google.com/afsonline/show_afs_ads.js"></script>');
}
