/****************************************************/
/* Définition des variables:						*/
/****************************************************/
var MaxMsgLen;
var PubLen=20;
var Identified;

var maxChiffreNb=5;
var iMsgNum=0;

var NbMsg=1;

/****************************************************/
/* Modifie le nb de caractères restants.			*/
/****************************************************/
function SetCharLeft()
{
	var CharLeft;
	var Message=document.forms[FormName].elements["Message"];
	var NoPub=document.forms[FormName].elements['NoPub'];
	var MsgLen=GetMsgLength(Message.value);
	var WantMulti=document.forms[FormName].elements["WantMulti"];
	var MaxMsgLenLoc;

	if((AllowMulti)&&(WantMulti.checked))
		MaxMsgLenLoc=MaxMultiMsgLen;
	else
		MaxMsgLenLoc=MaxMsgLen;
	
	if(!NoPub.checked)MaxMsgLenLoc-=PubLen;
	
	if(MsgLen>MaxMsgLenLoc)
	{
		var NewLen=MaxMsgLenLoc-(MsgLen-Message.value.length);
		Message.value=Message.value.substr(0,NewLen);
		MsgLen=MaxMsgLenLoc;
	}
	CharLeft=MaxMsgLenLoc-MsgLen;
	
	WriteInElem("CharLeft",CharLeft);
	WriteInElem("CharLeftPluriel",CharLeft>1?"s":"");
	
	if(!AllowMulti)return;
	
/*---------------------------*/
/* Calcule le nb de message: */
/*---------------------------*/
	NbMsg=0;
	var NewText=Message.value;

// Si on veut une pub, on ajoute celle ci au message:
	if(!NoPub.checked)
	{
		MsgLen+=PubLen;
		for(a=0;a<PubLen;a++)
			NewText+="x";
	}

// Si ca tient en un message:
	if(MsgLen<=MaxMsgLen)
	{
		NbMsg=1;
	}
// Sinon, il faut le découper (en tenant compte des caractères doubles):
	else
	{
		while(NewText!="")
		{
			zeText=NewText.substr(0,MaxMultiMsgStep);
			Len=GetMsgLength(zeText);
			if(Len>MaxMultiMsgStep)
			{
				NewLen=MaxMultiMsgStep-(Len-zeText.length);
				zeText=zeText.substr(0,NewLen);
			}
			
		// Recalcule le message restant:
			NewText=NewText.substr(zeText.length);
			NbMsg++;
		}
	}
	
	WriteInElem("NbMsg",NbMsg);
	GetTotalCost();
}

/********************************************/
/* Calcule la longueur réelle d'un message.	*/
/********************************************/
function GetMsgLength(Msg)
{
	var CharList="€|^{}[~]\\%";
	var a;

	Len=Msg.length;
	for(a=0;a<CharList.length;a++)
		Len+=SubStr_Count(Msg,CharList.charAt(a));
	
	return Len;
}

/****************************************************************/
/* Compte le nombre d'occurence d'une chaine dans une autre.	*/
/****************************************************************/
function SubStr_Count(Str,SubStr)
{
	var a=0;
	var Pos=-1;
	
	while(1)
	{
		Pos=Str.indexOf(SubStr,Pos+1);
		if(Pos==-1)break;
		a++;
	}
	
	return a;
}

/****************************************/
/* Filtre les ';'						*/
/****************************************/
function DestNumFilter(Complete)
{
	var Form=document.forms[FormName];
	var DestNum=Form.elements.DestNum;
	var TmpTxt=new String();
	var a,b,c;
	
/* Filtre les caractères invalides: */
/*----------------------------------*/
	TmpTxt="";
	for(a=0;a<DestNum.value.length;a++)
	{
		c=DestNum.value.charAt(a);
		if( ((c>='0')&&(c<='9')) || (c==';'))
			TmpTxt+=DestNum.value.substr(a,1);
	}
	if(DestNum.value!=TmpTxt)
		DestNum.value=TmpTxt;
	
/* Teste si la longueur est non nulle: */
/*-------------------------------------*/
	if(DestNum.value.length<=0)return "";
	
/* Enlève les ';' inutils: */
/*-------------------------*/
	TmpTxt="";
	c=0;
	while(DestNum.value.charAt(c)==';')c++;
	
	b=0;
	for(a=c;a<DestNum.value.length;a++)
	{
		if(DestNum.value.charAt(a)==';')
		{
			if(b==0)
			{
				b=1;
				TmpTxt+=DestNum.value.substr(a,1);
			}
		}
		else if(DestNum.value.charAt(a)!=' ')
		{
			b=0;
			TmpTxt+=DestNum.value.substr(a,1);
		}
	}
				
	if(TmpTxt.charAt(TmpTxt.length-1)==';')
		TmpTxt=TmpTxt.substr(0,TmpTxt.length-1);

	if(Complete)
		DestNum.value=TmpTxt;
	else
		return TmpTxt;
}

/****************************************/
/* Si le répertoire change:				*/
/****************************************/
var RepMask=new Array();
function OnRepChange()
{
	var Form=document.forms[FormName];
	var Rep=Form.elements.Repertoire;
	
	if(Rep==null)return;
	
	var Len=Rep.options.length;
	var DestNum=Form.elements.DestNum;
	var Num= new String;
	var a,Pos;
	
	DestNumFilter(true);
	
	for(a=0;a<Len;a++)
	{
	// Si l'option a été modifiée:
		if(Rep.options[a].selected!=RepMask[a])
		{
			Num=Rep.options[a].value;
			Pos=DestNum.value.indexOf(Num);
			
		// Si l'option vient d'être sélectionnée:
			if((Rep.options[a].selected)&&(Pos==-1))DestNum.value+= ";" + Num + ";";

		// Si l'option vient d'être désélectionnée:
			if((!Rep.options[a].selected)&&(Pos!=-1))
			{
				var Tmp=new String;
				Tmp  = DestNum.value.substr(0,Pos);
				Tmp += DestNum.value.substr(Pos+Num.length);
				DestNum.value=Tmp;
			}
			
		// Met le mask à jour:
			RepMask[a]=Rep.options[a].selected;
		}
	}
	DestNumFilter(true);

	GetTotalCost();
}

/****************************************/
/* Si l'utilisateur efface le message.	*/
/****************************************/
function OnClear()
{
	var Form=document.forms[FormName];
	var Msg=Form.elements.Message;
	var DestNum=Form.elements.DestNum;
	
	Msg.value="";
	DestNum.value="";
	
	SetCharLeft();
	OnNumChange();
}

/****************************************/
/* Envoie le SMS si tout est ok.		*/
/****************************************/
function SmsSend()
{
	var Form=document.forms[FormName];
	var PopName="SMS"+iMsgNum;
	var SizeX=550;
	var SizeY=250;
	var DestArray;
	var TmpTxt;
	var a;
	
	DestArray=GetDestArray();

/* Vérifie qu'il y a au moins un destinataire: */
/*---------------------------------------------*/
	if(DestArray["Nb"]==0)
	{
		window.alert(Message["ERR_NO_DEST"]);
		Form.elements["DestNum"].focus();
		return;
	}
	

/* Vérifie qu'il y a au moins un destinataire: */
/*---------------------------------------------*/
	if(Form.elements["Message"].value=="")
	{
		window.alert(Message["ERR_NO_MSG"]);
		Form.elements["Message"].focus();
		return;
	}
	
/* Vérifie la signature: */
/*-----------------------*/
	if(!CheckSign())
	{
		window.alert(Message["ERR_BAD_SIGN"]);
		Form.elements["SignText"].focus();
		return;
	}
	
/* Demande confirmation si gros envoi: */
/*-------------------------------------*/
	if((DestArray["Nb"]>1)||(!DestArray["Tarif"]))
	{
		TmpTxt=Message["Msg_Will_Be_Sent"] + ":\r\n";
		for(a=0;a<DestArray["Nb"];a++)
		{
			Tarif=GetSmsCost(DestArray[a]);
			Tarif=parseInt(Tarif*100)/100;
			TmpTxt += "   - " + DestArray[a] + " [ " + Tarif + " " + Message["crédit(s)"] + " ]\r\n";
		}
		if(!window.confirm(TmpTxt))return;
	}

/* Vérifie si le membre est identifié: */
/*-------------------------------------*/
	if((Identified===false)||(!Identified))
	{
		window.alert(Message["ERR_NO_ID"]);
		return;
	}
	
	TmpTxt="scrollbars=no,location=no,menubar=no,width="+SizeX+",height="+SizeY;
	
	iMsgNum=iMsgNum+1;

	Form.action=FormAction;
//	Form.target=PopName;
//	window.open("",PopName,TmpTxt);
	Form.submit();
}

/****************************************/
/* Vérifie la signature.				*/
/****************************************/
function CheckSign()
{
	var Form=document.forms[FormName];
	var SignTypeEl=Form.elements.SignType[1];
	var SignType;
	if(SignTypeEl!=null)
		SignType=SignTypeEl.checked;
	else
		SignType=true;
		
	var Signature=Form.elements['SignText'].value;
	
	if(!SignType)return true;
	
	nCount=0;
	cCount=0;
	for(a=0;a<Signature.length;a++)
	{
		c=Signature.charAt(a);
		if((c>='0')&&(c<='9'))
			nCount++;
		else
			cCount++;
	}
	if(nCount<cCount)return true;
	return false;	
}

/****************************************/
/* Extrait les numéros de GSM.			*/
/****************************************/
function GetDestArray()
{
	var DestArray=new Array();
	var a;
	var Tarif;
	
	var Form=document.forms[FormName];
	var DestNum=DestNumFilter(false);

	DestArray=DestNum.split(";");
	DestArray["Cost"]=0;
	
	a=0;
	while(DestArray[a]!=null)a++;
	DestArray["Nb"]=a;
	DestArray["Tarif"]=true;
	
	if((DestArray["Nb"]==1)&&(DestArray[0].length==0))DestArray["Nb"]=0;
	
	for(a=0;a<DestArray["Nb"];a++)
	{
		Tarif=GetSmsCost(DestArray[a]);
		if(Tarif>2.1)DestArray["Tarif"]=false;
		
		if(Tarif>0)DestArray["Cost"]-=0-Tarif;
	}
	
	return DestArray;
}

/****************************************/
/* Renvoie le coût d'un sms.			*/
/****************************************/
function GetSmsCost(DestNum)
{
	var Form=document.forms[FormName];

	if(DestNum.substr(0,2)=="04")
		DestNum="32"+DestNum.substr(1);
		
	Tarif=PfxGetTarif(DestNum);
/*
	if(Form.elements["Voc"].checked)
	{
		Tarif-=0-Voc_PfxGetTarif(DestNum);
	}
	else
	{
*/
		if(Form.elements["Ack"].checked)Tarif-=0-Ack_PfxGetTarif(DestNum);
		
		if(Form.elements["NoPub"].checked)
			Tarif-=0-NoPubCost;
		else
			Tarif-=0-PubCost;
			
	Tarif*=NbMsg;
			
//	}
	return Tarif;
}


/****************************************/
/* Si les numéros de gsm changent...	*/
/****************************************/
function OnNumChange()
{
	var Form=document.forms[FormName];
	var Rep=Form.elements.Repertoire;

	GetTotalCost();

	if(Rep==null)return;

	var RepLen=Rep.options.length;
	var DestNum=Form.elements.DestNum.value;
	var a,Pos;
	
	for(a=0;a<RepLen;a++)
	{
		Num=Rep.options[a].value;
		Pos=DestNum.indexOf(Num);
			
	// Si ce numéro est présent:
		if(Pos!=-1)
			Rep.options[a].selected=true;
	// Si ce numéro n'est pas présent:
		else
			Rep.options[a].selected=false;

		RepMask[a]=Rep.options[a].selected;
	}
}

/****************************************************/
/* Calcul le coût total.							*/
/****************************************************/
function GetTotalCost()
{
	DestArray=GetDestArray();
	WriteInElem("SendCost",parseInt(DestArray["Cost"]*100)/100);
	WriteInElem("SendCostPluriel",DestArray["Cost"]>1?"s":"");
}

