<!-- fonction retournant un tableau contenant tous les éléments html ayant la classe donnée en param -->
function getElementsByClassName(classname){
        var rl = new Array();
        var re = new RegExp('(^| )'+classname+'( |$)');
        var ael = document.getElementsByTagName('*');
        var op = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
        if (document.all && !op) ael = document.all;
        for(i=0, j=0 ; i<ael.length ; i++) {
			if(re.test(ael[i].className)) {
				rl[j]=ael[i];
				j++;
			}
        }
        return rl;
}

var tab_frais;
tab_frais = new Array();

function calcul(id, prix){
	if(document.getElementById('departement').value==""){
		alert("Veuillez tout dabord selectionner votre département pour le calcul des frais de port");
		document.getElementById('qte_'+id).value =0;
		document.getElementById('departement').focus();
	} else {
		if(!isNaN( parseFloat(document.getElementById('qte_'+id).value) ) ){
			var qte = parseFloat(document.getElementById('qte_'+id).value);
			} else{
				var qte = 0;
				document.getElementById('qte_'+id).value =0;
			} 
		document.getElementById('ss_total_'+id).value = (qte*prix).toFixed(2);	
		init('not_event');
	}
}

function init(action){
	if(action=='demarrer'){
		document.getElementById('departement').onchange = function(){
			charger_tarifs(this.value);
		}
	} else {
		if(tab_frais.length==0) charger_tarifs(document.getElementById('departement').value);
		var tab_total = getElementsByClassName('ss_total');
		var total=0;
		for(var i=0;i<tab_total.length;i++) total += parseFloat(tab_total[i].value);
		calculer_ports();
		document.getElementById('total').value = (total+parseFloat(document.getElementById('ports').value)).toFixed(2);
	}
}


function calculer_ports(){
	var tab_qte =  getElementsByClassName('qte');
	var qte = 0;
	for(var i=0;i<tab_qte.length;i++) qte += parseFloat(tab_qte[i].value);
	if(qte>0){
		for(key in tab_frais){
			if(parseInt(key)>=parseInt(qte)){
				document.getElementById('ports').value = tab_frais[key];
				break;
			}
		}
	} else {
		document.getElementById('ports').value = "0.00";
	}
}


<!-- Fonction de vérification formulaire
function verif_commande(email)
{
	var arobase = email.indexOf("@")
	var point = email.lastIndexOf(".")
	if((arobase < 2)||(point + 2 > email.length)||(point < arobase+2)) 
	{ 
		alert("Cet Email est erroné !");
		return false; 
	}
	else 
	{ 
		if (document.devis.nom.value=="" || document.devis.prenom.value=="" || document.devis.adresse.value=="" || document.devis.ville.value=="" || document.devis.code_postal.value=="" || document.devis.tel.value=="")
		{
			alert("Veuillez remplir tous les champs marqués d'une étoile");
			return false;
		}
		else
		{
			return true;
		}
	}
}
var xhr;
function getXhr()
{
	if(window.XMLHttpRequest)xhr = new XMLHttpRequest();			   
	else if(window.ActiveXObject)
	{ 
		try {xhr = new ActiveXObject("Msxml2.XMLHTTP");} 
		catch (e){xhr = new ActiveXObject("Microsoft.XMLHTTP");}
	}
	else // XMLHttpRequest non supporté par le navigateur 
	{ 
		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
		xhr = false; 
	} 
}

function charger_tarifs(dept){
	if(dept!=''){
		getXhr();
		xhr.onreadystatechange = function(){
			if(xhr.readyState == 4 && xhr.status == 200){
				var retour = xhr.responseText;	
				alert(retour);
				var tab_temp = retour.split('|');
				tab_frais = new Array();
				for(var i=0; i<tab_temp.length; i++){
					var tab_temp2 = tab_temp[i].split(';');
					tab_frais[tab_temp2[0]] = tab_temp2[1];
				}
				init('not_event');
			}
		}
		xhr.open("POST","include/frais_port.ajax.php",true);
		xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		var send= "dept="+dept;
		xhr.send(send);
	} else {
		var tab_qte =  getElementsByClassName('qte');
		for(key in tab_qte)tab_qte[key].value = 0;
		var tab_total = getElementsByClassName('ss_total');
		for(key in tab_total)tab_total[key].value = "0.00";
		init('not_event');
	}
}