// =================================
// 		FONCTIONS  SECONDAIRES
// ---------------------------------

// get elements by class
function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (var i = 0,j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

// instanceOf pour les objets définis
function instanceOf(object, constructor) {
   while (object != null) {
      if (object == constructor.prototype)
         return true;
      object = object.__proto__;
   }
   return false;
}

// fonction search dans l'objet arguments
function searchArg(arg,string){
	var found = false;
	for (var i=0;i<arg.length;i++){
		if (arg[i] == string ) {
			found=true;
		}
	}
	return found;
}

// teste si une valeur est numérique
function isNumeric(s){
	var regex= /^-?[0-9\.]+$/;
	if(! regex.test(s)){
   		return false
	}else{
		return true;
	}
}
 
// vérifie que la valeur user-input est numérique
function checkValue(field){
	if (isNumeric(field.value)){
		return true;
	}else{
		alert('valeur non numerique');
		return false;
	}
} 

// ajuste la taille du texte d'un champ input (en fonction de son contenu)
function ajustField(field){
	if(field.value.length<3)field.style.fontSize= "18px";
	if(field.value.length==3)field.style.fontSize= "16px";
	if(field.value.length==4)field.style.fontSize= "15px";
	if(field.value.length>=5)field.style.fontSize= "12px";	
}

// identifie la matrice à modifier
function identifyMatrix(field){
	var notFound = true;
	var k=0;
	while (notFound){
		if (field.form.id == matrices[k].formID){
			notFound = false;
			return matrices[k];
		}
		k++;
	}
	return null;
}

// caclule l'élément i,j de la matrice produit
function computeElement(i,j,product){
	var sum = 0;
	//alert('product '+product.p.formID+' i,j :'+i+','+j);
	for (var k=0;k<product.m1.n;k++){
		// somme des produits, ligne de A par colonne de B
		sum += product.m1.values[i][k] * product.m2.values[k][j];	
	}
	product.p.values[i][j] = sum;
}

// calcule le produit de 2 matrices
function computeProduct(matrix1,matrix2){
	var lignes = matrix1.product.p.m;
	var colonnes = matrix1.product.p.n;
	for (var i=0; i<lignes; i++){
		for (var j=0;j<colonnes; j++){
			// calcul de chaque élément de la matrice produit
			computeElement(i,j,matrix1.product);
		}
	}
}

