
// ==================================================
// 		fonction appelée sur onChange (user input)
// --------------------------------------------------

function makeChanges(field){
	if (checkValue(field)){
		// la valeur utilsateur est numérique
		ajustField(field);
		var matrix= identifyMatrix(field);
		// insertion de la nouvelle valeur
		matrix.insertElement(field);
		// mise a jour des higlights de la matrice
		matrix.miseAJour();
		// calcul du nouveau produit
		computeProduct(matrix.product.m1,matrix.product.m2);
		matrix.product.p.showValues();
		// si d'autres opérations dépendent du résultat de cette opération, on les ajustent aussi
		if (matrix.product.p.product){
			var prod = matrix.product.p.product;
			// mise a jour des valeurs des matrices dépendantes (si nécessaires) et des highlights
			prod.m1.miseAJour(); 
			prod.m2.miseAJour();
			computeProduct(prod.m1,prod.m2);
			prod.m1.showValues();	
			prod.m2.showValues();
			prod.p.showValues();
		}
	}else{
		// valeur utilisateur pas numérique: on garde l'ancienne valeur	(et on l'affiche)
		// recupération des indices	et de la matrice 
		var i = field.name.substr(7,1)-1;
		var j = field.name.substr(9,1)-1;
		var matrix= identifyMatrix(field);
		// affichage de la valeur précédente	
		field.value = matrix.values[i][j];
	}
}
	  

// =====================================
// 			Produit Matriciel  
// -------------------------------------

function ProduitMatriciel(matrix1,matrix2){
// vérifie les dimensions et crée la matrice produit (#col de A = # lignes de B)
	var dim = matrix1.n;
	if ( dim == matrix2.m){
		var product = new Product(matrix1,matrix2);
		// création du code html des matrices à multiplier (ordre important pour affichage)
		document.write('<table id="global" cellspacing="0" cellpadding="0"><tr><td rowspan="2" valign="bottom" align="right">');
		matrix1.createHtml('M1');
		document.write('</td><td align="left">');
		matrix2.createHtml('M2');
		document.write('</td></tr><tr><td align="left">');
		// calcul et affichage du produit
		computeProduct(matrix1,matrix2);
		matrix1.product.p.createHtml('P');
		document.write('</td></tr></table>');
	}else{
		alert('matrices non compatibles');
	}
}

// =================================================
//	 Multiplication d'une ligne par une Constante
// -------------------------------------------------

function MultLigneParConstante(matrixDgnl,matrix){
	var dim = matrixDgnl.n;
	if (dim== matrix.m){
		// calcul des matrices
		var product1 = new Product(matrixDgnl,matrix);
		computeProduct(matrixDgnl,matrix);
		window.inverse= new MatrixDiagInverse(matrixDgnl);
		var product2 = new Product(inverse,matrix.product.p);
		computeProduct(inverse,matrix.product.p);
		// affichage des matrices
		document.write('<table id="global" cellspacing="0" cellpadding="0"><tr><td rowspan="2" valign="bottom" align="right">');
		matrixDgnl.createHtml('M1');
		document.write('</td><td align="left">');
		matrix.createHtml('M2');
		document.write('</td></tr><tr><td align="left">');
		matrix.product.p.createHtml('P');
		document.write('</td></tr><tr><td align="right">');
		inverse.createHtml('M1 readonly');
		document.write('</td><td align="left">');
		inverse.product.p.createHtml('P green');
		document.write('</td></tr></table>');
	}else{
		alert('matrices non compatibles');
	}
}

// =================================================
// 	Multiplication d'une colonne par une Constante  
// -------------------------------------------------
	
function MultColParConstante(matrix,matrixDgn){
	var dim = matrixDgn.m;
	if (dim== matrix.n){
		// calcul des matrices
		var product1 = new Product(matrix,matrixDgn);
		computeProduct(matrix,matrixDgn);
		var inverse = new MatrixDiagInverse(matrixDgn);
		var product2 = new Product(matrix.product.p,inverse);
		computeProduct(matrix.product.p,inverse);
		// affichage des matrices
		document.write('<table id="global" cellspacing="0" cellpadding="0"><tr><td rowspan="2" valign="bottom" align="right">');
		matrix.createHtml('M1');
		document.write('</td><td align="left">');
		matrixDgn.createHtml('M2');
		document.write('</td><td align="left">');
		inverse.createHtml('M2 readonly');
		document.write('</td></tr><tr><td align="left">');
		matrix.product.p.createHtml('P');
		document.write('</td><td align="left">');
		inverse.product.p.createHtml('P red');
		document.write('</td></tr></table>');
	}else{
		alert('matrices non compatibles');
	}
}


// =========================================
// 		  Permutation de 2 lignes
// -----------------------------------------

function PermutationLignes(matrix,l1,l2){
 	var permut= new MatrixPermut(matrix.m,l1,l2,'ligne');
	if (matrix.m== permut.n){
		// 1er produit matriciel
		var product1 = new Product(permut,matrix);
		computeProduct(permut,matrix);
		product1.p.heriteHighlight=true;
		product1.p.highlightLine=permut.highlightLine;
		// 2eme matrice de permutation
		var permut2= new MatrixPermut(matrix.m,l1,l2,'ligne','copie',permut);
		// 2eme produit matriciel
		var product2 = new Product(permut2,matrix.product.p);
		computeProduct(permut2,matrix.product.p);
		// affichage des matrices
		document.write('<table id="global" cellspacing="0" cellpadding="0"><tr><td rowspan="2" valign="bottom" align="right">');
		permut.createHtml('M1');
		document.write('</td><td align="left">');
		matrix.createHtml('M2');
		document.write('</td></tr><tr><td align="left">');
		matrix.product.p.createHtml('P');
		document.write('</td></tr><tr><td align="right">');
		permut2.createHtml('M1 readonly');
		document.write('</td><td align="left">');
		permut2.product.p.createHtml('P green');
		document.write('</td></tr></table>');
	}else{
		alert('matrices non compatibles');
	}
}
 
// =========================================
// 		  Permutation de 2 Colonnes
// -----------------------------------------

function PermutationColonnes(matrix,col1,col2){
 	var permut= new MatrixPermut(matrix.n,col1,col2,'colonne');
	if (matrix.n== permut.m){
		// 1er produit matriciel
		var product1 = new Product(matrix,permut);
		computeProduct(matrix,permut);
		product1.p.heriteHighlight=true;
		product1.p.highlightCol=permut.highlightCol;
		// 2eme matrice de permutation
		var permut2= new MatrixPermut(matrix.n,col1,col2,'colonne','copie',permut);
		// 2eme produit matriciel
		var product2 = new Product(matrix.product.p,permut2);
		computeProduct(matrix.product.p,permut2);
		// affichage des matrices
		document.write('<table id="global" cellspacing="0" cellpadding="0"><tr><td rowspan="2" valign="bottom" align="right">');
		matrix.createHtml('M1');
		document.write('</td><td>');
		permut.createHtml('M2');
		document.write('</td><td>');
		permut2.createHtml('M2 readonly');
		document.write('</td></tr><tr><td>');
		matrix.product.p.createHtml('P');
		document.write('</td><td>');
		permut2.product.p.createHtml('P blue');
		document.write('</td></tr></table>');
	}else{
		alert('matrices non compatibles');
	}
}

