//This function is used to asynchronously load a file on a distant domain, and then trigger a callback function
//Src is the link of your distant script, wich must be a php/asp javascript generator. 
//This distant script have to call the function Callback
//Args is a string to pass to your script

if (document.location.host == "dev.gcomment.com" || document.location.host == "code-int.revolunet.com")
	var gcomment_host = 'http://dev.gcomment.com/distant';
else
	var gcomment_host = 'http://www.gcomment.com/distant';

function  ajajs(Src, Callback, Args)
{
	var s = document.createElement('script');
	s.src = Src+"?callback="+Callback+Args;
	s.type = 'text/javascript';
	document.body.appendChild(s);
}

var gcom = new Array();

function gCom(Key, Ref){ this.key = Key;
						this.ref = Ref;
						this.idx = gCom.index;
						this.lang = false;
						this.nick = false;
						this.email = false;
						this.website = false;
						gCom.index++;}
gCom.index = 0;

function gcom_reload(Index)
{	
	if (typeof(Index) == "object" || typeof(Index) == "undefined") //Moz puis IE
	{
		for(idx=0; idx < gcom.length; idx++)
		{	
			var opts = '&key='+gcom[idx].key+'&index='+idx+"&ref="+gcom[idx].ref;
			if (gcom[idx].lang) opts += "&lang="+gcom[idx].lang;
			if (gcom[idx].nick) opts += "&user="+gcom[idx].nick;
			if (gcom[idx].email) opts += "&email="+gcom[idx].email;
			if (gcom[idx].website) opts += "&site="+gcom[idx].website;
			ajajs(gcomment_host + '/gcom_listcom.php', 'gcom_callBack', opts);
		}
	}
	else
	{
		var opts = '&key='+gcom[Index].key+'&index='+Index+"&ref="+gcom[Index].ref;
		if (gcom[Index].lang) opts += "&lang="+gcom[Index].lang;
		if (gcom[Index].nick) opts += "&nick="+gcom[Index].nick;
		if (gcom[Index].email) opts += "&email="+gcom[Index].email;
		if (gcom[Index].website) opts += "&website="+gcom[Index].website;
		ajajs(gcomment_host + '/gcom_listcom.php', 'gcom_callBack', opts);
	}
}

function buildGCom(Key, Ref)
{
	if (!Key)
	{
		alert('Vous devez spécifier votre clé de domaine !');
		return;
	}
	var cssNode = document.createElement('link');
	cssNode.type = 'text/css';
	cssNode.rel = 'stylesheet';
	cssNode.href = gcomment_host + '/style.php?key=' + Key;
	cssNode.media = 'screen';
	cssNode.title = 'dynamicLoadedSheet';
	document.getElementsByTagName("head")[0].appendChild(cssNode);

	var ref = "";
	if (Ref) ref = Ref;
	else ref = window.location.pathname;
	var idx = gCom.index;
	gcom[idx] = new gCom(Key, ref);
	if (Ref) gcom[idx].isref = true;
	else gcom[idx].isref = false;
	
	//on créé un élément qui contiendra les infos
	//on ajoute la table pour eviter un bug dans IE
	document.write("<table width='100%'><tr><td><div id='gcombox"+idx+"'>Loading...</div></td></tr></table>");
	
	//document.getElementById('gcombox0').onload = gcom_reload;
	
	return gcom[idx];
}

function setCookie(Name,Value) 
{
	var date = new Date();
	date.setTime(date.getTime()+(365*24*60*60*1000));
	var expires = "; expires="+date.toGMTString();
	document.cookie = Name+"="+Value+expires+"; path=/";
}

function getCookie(Name)
{
	if (document.cookie.length>0)
	{
		Start=document.cookie.indexOf(Name+"=");
		if (Start!=-1)
		{ 
			Start+=Name.length+1; 
			End=document.cookie.indexOf(";",Start);
			if (End==-1) End=document.cookie.length;
			return unescape(document.cookie.substring(Start,End));
		}
	}
	return "";
}

var smileys = new Array();
smileys[';\\)'] = gcomment_host + '/images/smileys/wink.gif';
smileys[';\\('] = gcomment_host + '/images/smileys/sad.gif';
smileys[':\\('] = gcomment_host + '/images/smileys/sad.gif';
smileys[':\\)'] = gcomment_host + '/images/smileys/drool.gif';
smileys[';p'] = gcomment_host + '/images/smileys/tongue_smilie.gif';
smileys[':p'] = gcomment_host + '/images/smileys/tongue_smilie.gif';
smileys[':D'] = gcomment_host + '/images/smileys/biggrin.gif';
smileys[';D'] = gcomment_host + '/images/smileys/biggrin.gif';
smileys[':/'] = gcomment_host + '/images/smileys/closedeyes.gif';

function unstripSmileys(str) {
	for (key in smileys) {
		smiley = new RegExp('<img src=\"'+smileys[key]+'\">', 'g');
		str = str.replace(smiley, key.replace(/(\\)/g, ""));
	}
	return str;
}

function stripSmileys(str) {
	for (key in smileys) {
		smiley = new RegExp(key + '([\\s<]|($))', 'g'); //waho !!
		str = str.replace(smiley, "<img src='"+smileys[key]+"'/>$1");
	}
	return str;
}

function unstripUrls(str)
{
	re = new RegExp('<a href=\"http://(.*)\" target=\"_blank\">(.*)</a>', 'gi');
	str = str.replace(re, "http://$1");
	
	return str;
}

function stripUrls(str) 
{	
	re = new RegExp('((http://)(([^\\s<])*)|(http://)?(w{3}\.([^\\s<])*))', 'gi');
	if (str.indexOf("http://") == -1) str = str.replace(re, "<a href='http://$1' target='_blank'>$1</a>");
	else str = str.replace(re, "<a href='http://$3' target='_blank'>$3</a>");
	return str;
}

function gcom_callBack(Index)
{
	if (!Index)
		alert("gcomment zone not found !");
	else
	{
		if (gcom[Index].domain != '' && window.location.href.indexOf(gcom[Index].domain) != -1)
		{
			if (!(combox = document.getElementById('gcombox'+Index)))
				alert('\nUne erreur est survenue dans le script gcomment !');
			else
			{
				combox.innerHTML = gcom[Index].content;
				//replacement des smileys et des urls ..
				var idx = 1;
				while ((comtext = document.getElementById('comment'+Index+'_text'+idx)))
				{
					comtext.innerHTML= stripSmileys(stripUrls(comtext.innerHTML));
					idx++;
				}
			}
			var form = document.getElementById('gcomform'+Index);
			if (gcom[Index].nick) form.nick.value = gcom[Index].nick;
			else if (form && form.nick) form.nick.value = getCookie('nick');
			if (gcom[Index].email) form.email.value = gcom[Index].email;
			else if (form && form.email) form.email.value = getCookie('email');
			if (gcom[Index].website) form.website.value = gcom[Index].website;
			else if (form && form.website) form.website.value = getCookie('website');
		}	
		else
			alert("Le nom de domaine ne correspond pas à celui identifié par le serveur !");
	}
	var form = document.getElementById('gcomform'+Index);
	if (form) form.com_submit.disabled = false;
}

function is_invalid(field, invalid)
{
	if (invalid) addClassToObject(field, "invalid") ;
	else removeClassToObject(field, "invalid") ;
	return invalid;
}

function addClassToObject(obj, className) {
	if (obj.className.length>2 && obj.className.indexOf(className)==-1) {
		var items = obj.className.split(" ");
		items.push(className);
		obj.className = items.join(" ");
	}
}

function removeClassToObject(obj, className) {
	if (obj.className.indexOf(className)>-1) {
		obj.className = obj.className.replace(className, " ");
	}
}

function antispam_error(Index) {
	var form = document.getElementById('gcomform'+Index);
	addClassToObject(form.answer, "invalid");
}

function gcom_checkform(Index)
{	
	var form = document.getElementById('gcomform'+Index);
	var ret = true;
	ret &= !is_invalid(form.nick, form.nick.value == '');
	var at = form.email.value.indexOf('@');
	ret &= !is_invalid(form.email, (form.email.value!='' && (at==-1 || form.email.value.indexOf('.', at)==-1)));
	ret &= !is_invalid(form.website, (form.website.value!='' && (form.website.value.indexOf('.')==-1)));
	if (gcom[Index].antispam)
		ret &= !is_invalid(form.answer, form.answer.value == '');
	ret &= !is_invalid(form.comtext, form.comtext.value == '');
	
	gcom[Index].nick = form.nick.value;
	gcom[Index].title = form.title.value;
	gcom[Index].email = form.email.value;
	gcom[Index].website = form.website.value;
	gcom[Index].comtext = form.comtext.value;
	if (gcom[Index].antispam)
		gcom[Index].answer = form.answer.value;
	
	//on set les cookies
	setCookie("nick", form.nick.value);
	setCookie("email", form.email.value);
	setCookie("website", form.website.value);
	
	return ret;
}

function gcom_submit(Index)
{
	//vérification de la validité du formulaire
	if (!gcom_checkform(Index)) return false;
		
	text = escape(gcom[Index].comtext);
	var opts = '&key='+gcom[Index].key+'&index='+Index+"&ref="+gcom[Index].ref+'&nick='+gcom[Index].nick+'&title='+gcom[Index].title+'&comtext='+text+'&email='+gcom[Index].email+'&website='+gcom[Index].website;
	if (gcom[Index].antispam)
		opts += '&antispam='+gcom[Index].antispam+'&answer='+gcom[Index].answer;
		
	//post en ajajs
	ajajs(gcomment_host + '/gcom_submit.php', 'gcom_callBack', opts);
	
	//désactivation du bouton envoyer
	var form = document.getElementById('gcomform'+Index);
	form.com_submit.disabled = true;
	
	return false;
}

function getInnerText(elt) {
	var _innerText = elt.innerText;
	if (_innerText == undefined) {
	_innerText = elt.innerHTML.replace("/<[^>]+>/g","");
	}
	return _innerText;
}

function gcomment_quote(index, commentPos) {
	var form = document.getElementById('gcomform'+index);

	var tgt = document.getElementById("gcomform_container"+index);
	if (tgt && (tgt.style.display=="none" || tgt.style.display=="")) tgt.style.display="block";
	var tgt = document.getElementById('comment'+index+'_text'+commentPos);
	var quote = tgt.innerHTML;
	//while(quote.indexOf("<br>")>0) quote=quote.replace("<br>","\n");
	
	//remplacement des smileys ..
	quote = unstripUrls(unstripSmileys(quote));
	
	br = new RegExp('<br>', 'gi'); //waho !!
	quote = quote.replace(br, "\n");
	
	//br = new RegExp('<quote>', 'gi'); //waho !!
	//quote = quote.replace(br, "\n");
	
	var nick = getInnerText(document.getElementById("comment"+index+"_author"+commentPos));
	//quote = nick + " said : \n" + quote;
	form.comtext.value += "\n"+nick + " said : \n<blockquote>" + quote + "</blockquote>\n\n";
	form.comtext.focus();
	setCaretPos(form.comtext, form.comtext.value.length);
}

function setCaretPos(obj, position)
{
	obj.focus();
	if (obj.setSelectionRange)
		obj.setSelectionRange(position, position);
	else if (document.selection) {
		var range = obj.createTextRange();
		range.moveStart('character', position);
		range.moveEnd('character', - obj.value.length + position);
		range.select();
	}
}

var iconMoins = gcomment_host + "/images/moins.gif";
var iconPlus = gcomment_host + "/images/plus.gif";

function switchComments(index) {
	var tgt = document.getElementById('gcom_whole_'+index);
	var icon = document.getElementById('img_wholedisp_'+index);
	if (tgt.style.display=="block" || tgt.style.display=="") {
		tgt.style.display="none";
		icon.src=iconPlus;
	}
	else {
		tgt.style.display="block";
		icon.src=iconMoins;
	}
}

function addLoadEvent(func) 
{
 if (window.addEventListener)
	 window.addEventListener("load", func, false);
 else if (window.attachEvent)
	 window.attachEvent("onload", func);
}

addLoadEvent(function () { gcom_reload(); });
