var lettre = new Array();

lettre['A'] = 1; lettre['B'] = 2; lettre['C'] = 3; lettre['D'] = 4;
lettre['E'] = 5; lettre['F'] = 6; lettre['G'] = 7; lettre['H'] = 8;

var chiffre = new Array();

chiffre[1] = 'A'; chiffre[2] = 'B'; chiffre[3] = 'C'; chiffre[4] = 'D';
chiffre[5] = 'E'; chiffre[6] = 'F'; chiffre[7] = 'G'; chiffre[8] = 'H';

var nom_piece = new Array();

nom_piece['Tb'] = 'La tour blanche'; nom_piece['Cb'] = 'Le cavalier blanc'; nom_piece['Pb'] = 'Le pion blanc';
nom_piece['Fb'] = 'Le fou blanc'; nom_piece['Rb'] = 'Le roi blanc'; nom_piece['Db'] = 'La dame blanche';

nom_piece['Tn'] = 'La tour noire'; nom_piece['Cn'] = 'Le cavalier noir'; nom_piece['Pn'] = 'Le pion noir';
nom_piece['Fn'] = 'Le fou noir'; nom_piece['Rn'] = 'Le roi noir'; nom_piece['Dn'] = 'La dame noire';

nom_piece[''] = "le vide";

var piece_deplacable = new Array();

piece_deplacable_nb = 0;
piece_deplacable_v = new Array();
piece_deplacable_h = new Array();

var avant_dernier_i2 = 0;
var avant_dernier_i1 = 0;

var roi_v;
var roi_h;

var couleur;

echiquier['case_deplacee'] = new Array();
var bon_coup = new Array();

echiquier['grand_deplacement_pion'] = new Array();

var v1 = 1, h1 = 1, v2 = 1, h2 = 1;

for (i = 1; i <= 8; i++) {

	echiquier['case_deplacee'][i] = new Array();
	bon_coup[i] = new Array();
}

echiquier['grand_roc_blanc'] = 0;
echiquier['petit_roc_blanc'] = 0;
echiquier['grand_roc_noir'] = 0;
echiquier['petit_roc_noir'] = 0;
echiquier['echec'] = 0;
echiquier['mat'] = 0;
echiquier['nom_piece_echec'] = '';

var transformation = 0;

var piece_blanche = new Array();
var piece_noire = new Array();

// piece_blanche
piece_blanche['Pb'] = 1; piece_blanche['Tb'] = 1; piece_blanche['Cb'] = 1;
piece_blanche['Rb'] = 1; piece_blanche['Db'] = 1; piece_blanche['Fb'] = 1;

piece_blanche['Pn'] = 0; piece_blanche['Tn'] = 0; piece_blanche['Cn'] = 0;
piece_blanche['Rn'] = 0; piece_blanche['Dn'] = 0; piece_blanche['Fn'] = 0;

// piece_noir
piece_noire['Pb'] = 0; piece_noire['Tb'] = 0; piece_noire['Cb'] = 0;
piece_noire['Rb'] = 0; piece_noire['Db'] = 0; piece_noire['Fb'] = 0;

piece_noire['Pn'] = 1; piece_noire['Tn'] = 1; piece_noire['Cn'] = 1;
piece_noire['Rn'] = 1; piece_noire['Dn'] = 1; piece_noire['Fn'] = 1;

function sauvegarder_echiquier() {
	
		var piece_deplacable2 = new Array();
		
		piece_deplacable2['grand_deplacement_pion'] = new Array();
		piece_deplacable2['case_deplacee'] = new Array();
		
		for (var i=1; i <= 8; i++) {
			
				piece_deplacable2[i] = new Array(); 
				piece_deplacable2['case_deplacee'][i] = new Array();
			
				piece_deplacable2['grand_deplacement_pion'][i]		= echiquier['grand_deplacement_pion'][i];
		
				for (var j=1; j <= 8; j++) {
					
						piece_deplacable2[i][j] = echiquier[i][j];						
						piece_deplacable2['case_deplacee'][i][j] = echiquier['case_deplacee'][i][j];
				}
		}
		
		piece_deplacable2['aux_blancs']											= echiquier['aux_blancs'];
		piece_deplacable2['echec'] 													= echiquier['echec'];
		
		piece_deplacable2['prise_en_passant']								= echiquier['prise_en_passant'];
		piece_deplacable2['grand_roc_blanc']								= echiquier['grand_roc_blanc'];
		piece_deplacable2['petit_roc_blanc'] 								= echiquier['petit_roc_blanc'];
		piece_deplacable2['grand_roc_noir'] 								= echiquier['grand_roc_noir'];
		piece_deplacable2['petit_roc_noir']									= echiquier['petit_roc_noir'];
		piece_deplacable2['mat']														= echiquier['mat'];
		piece_deplacable2['nom_piece_echec'] 								= echiquier['nom_piece_echec'];		
			
		return piece_deplacable2;
}

function restaurer_echiquier(piece_deplacable2) {
	
		for (var i=1; i <= 8; i++) {
		
				echiquier['grand_deplacement_pion'][i] = piece_deplacable2['grand_deplacement_pion'][i];
		
				for (var j=1; j <= 8; j++) {
		
						echiquier[i][j] = piece_deplacable2[i][j];
						
						echiquier['case_deplacee'][i][j] = piece_deplacable2['case_deplacee'][i][j];
				}
		}
		
		echiquier['aux_blancs']					= piece_deplacable2['aux_blancs'];
		echiquier['echec']							=	piece_deplacable2['echec'];
		
		echiquier['prise_en_passant'] 	= piece_deplacable2['prise_en_passant'];
		echiquier['grand_roc_blanc'] 		= piece_deplacable2['grand_roc_blanc'];
		echiquier['petit_roc_blanc'] 	  = piece_deplacable2['petit_roc_blanc'];
		echiquier['grand_roc_noir']			= piece_deplacable2['grand_roc_noir'];
		echiquier['petit_roc_noir']			= piece_deplacable2['petit_roc_noir'];
		echiquier['mat']								= piece_deplacable2['mat'];
		echiquier['nom_piece_echec']		= piece_deplacable2['nom_piece_echec'];	
				
		return echiquier;
}

function pas_de_piece_v(h1,v1,v2) {

	var pas_piece = 1;

	if (v1 > v2) {	

		for (iv = v1-1; iv >= v2 + 1; iv--) {

			if (echiquier[h1][iv]) {

				pas_piece = 0;
			}
		}

	} else if (v2 > v1) {

		for (iv = v1+1; iv <= v2 - 1; iv++) {

			if (echiquier[h1][iv]) {

				pas_piece = 0;
			}
		}
	
	} else {
		
		pas_piece = 1;
	}

	return pas_piece;
}

function pas_de_piece_h(v1,h1,h2) {

	var pas_piece = 1;

	if (h1 > h2) {	

		for (ih = h1-1; ih >= h2+1; ih--) {

			if (echiquier[ih][v1]) {

				pas_piece = 0;
			}
		}

	} else if (h2 > h1) {

		for (ih = h1+1; ih <= h2-1; ih++) {

			if (echiquier[ih][v1]) {

				pas_piece = 0;
			}
		}
	
	} else {
		
		pas_piece = 1;
	}

	return pas_piece;
}


function pas_de_piece_d_hg_bd(h1,v1,h2,v2) {

	var pas_piece = 1;

	nb_cases = Math.abs(v2-v1)-1;

	if (v1 > v2) {

		iv = v1 - 1;
		ih = h1 + 1;

		for (i = 1; i <= nb_cases; i++) {

			if (echiquier[ih][iv]) {

				pas_piece = 0;
			}

			iv--;

			ih++;
		}

	} else if (v2 > v1) {

		iv = v1 + 1;
		ih = h1 - 1;

		for (i = 1; i <= nb_cases; i++) {

			if (echiquier[ih][iv]) {

				pas_piece = 0;
			}

			iv++;

			ih--;
		}

	} else {

		pas_piece = 1;
	}

	return pas_piece;
}

function pas_de_piece_d_bg_hd(h1,v1,h2,v2) {

	var pas_piece = 1;

	nb_cases = Math.abs(v2-v1)-1;

	if (v1 > v2) {

		iv = v1 - 1;
		ih = h1 - 1;

		for (i = 1; i <= nb_cases; i++) {

			if (echiquier[ih][iv]) {

				pas_piece = 0;
			}

			iv--;

			ih--;
		}

	} else if (v2 > v1) {

		iv = v1 + 1;
		ih = h1 + 1;

		for (i = 1; i <= nb_cases; i++) {

			if (echiquier[ih][iv]) {

				pas_piece = 0;
			}

			iv++;

			ih++;
		}

	} else {

		pas_piece = 1;
	}

	return pas_piece;
}

function mauvais_deplacement_cavalier(is_blanc, h1, v1, h2, v2) {

	if (is_blanc)  { piece = piece_blanche[echiquier[h2][v2]];}
	else 		{ piece = piece_noire[echiquier[h2][v2]];}

	if ( (Math.abs(v2-v1) == 2) && (Math.abs(h2-h1) == 1)) {

			if (piece) { return 1; } else { return 0; }
	
		} else if ( (Math.abs(v2-v1) == 1) && (Math.abs(h2-h1) == 2)) {

			if (piece) { return 1; } else { return 0; }
	
	} else return 1;
}

function mauvais_deplacement_tour(is_blanc, h1, v1, h2, v2) {

	if (is_blanc)  { piece = piece_blanche[echiquier[h2][v2]];}
	else 		{ piece = piece_noire[echiquier[h2][v2]];}

	if ((h2 == h1) && (pas_de_piece_v(h1,v1,v2))) {

			if (piece) { return 1; } else { return 0; }
	
	} else if ((v2 == v1) && (pas_de_piece_h(v1,h1,h2))) {

			if (piece) { return 1; } else { return 0; }
	
	} else return 1;
}

function mauvais_deplacement_fou(is_blanc, h1, v1, h2, v2) {

	if (is_blanc)  { piece = piece_blanche[echiquier[h2][v2]];}
	else 		{ piece = piece_noire[echiquier[h2][v2]];}

	if (Math.abs(h1-h2) == Math.abs(v1-v2)) {
			
		// vérifie s'il y a une pièce dans la diagonale haut-gauche bas-droite

		if (((v1 > v2) && (h1 < h2)) || ((v1 < v2) && (h1 > h2))) {

			if (pas_de_piece_d_hg_bd(h1,v1,h2,v2)) {

				if (piece) { return 1; } else { return 0; }

				// vérifie s'il y a une pièce dans la diagonale haut-gauche bas-droite			
			
			} else { return 1; }

		} else if (((v1 > v2) && (h2 < h1)) || ((v1 < v2) && (h2 > h1))) {

			if (pas_de_piece_d_bg_hd(h1,v1,h2,v2)) {

				if (piece) { return 1; } else { return 0; }

				// vérifie s'il y a une pièce dans la diagonale bas-gauche haut-droite			
			
			} else { return 1; }

		} else return 1;
	
	} else return 1;
}

function renvoi_piece_deplacable() {

	piece_deplacable_nb  = 0;
	
	for (var i1 = 1 ; i1 <= 8 ; i1++) {

		for (var j1 = 1 ; j1 <= 8 ; j1++) {

			if (echiquier['aux_blancs']) {

				if (piece_blanche[echiquier[i1][j1]]) {

					piece_deplacable_nb ++;

					piece_deplacable_v[piece_deplacable_nb ] = j1;
					piece_deplacable_h[piece_deplacable_nb ] = i1;
				}

			} else {

				if (piece_noire[echiquier[i1][j1]]) {

					piece_deplacable_nb ++;

					piece_deplacable_v[piece_deplacable_nb ] = j1;
					piece_deplacable_h[piece_deplacable_nb ] = i1;
				}
			}
		}
	}
}

function mauvais_deplacement_roi(is_blanc, h1, v1, h2, v2) {

	if (is_blanc)  { piece = piece_blanche[echiquier[h2][v2]];}
	else 		{ piece = piece_noire[echiquier[h2][v2]];}

	if (!echiquier['grand_roc_blanc'] ) {

		if ((is_blanc) && (h1 == 5) && (h2 == 3) && (v1 == 1) && (v2 == 1) && (!echiquier['case_deplacee'][5][1]) 
		&& (!echiquier['case_deplacee'][1][1]) && (!echiquier[4][1]) && (!echiquier[3][1]) && (!echiquier[2][1])) {
	
			if ((!echec_case_vide(5,1)) && (!echec_case_vide(4,1)) && (!echec_case_vide(3,1)) && (!echec_case_vide(2,1))) {		

				return 0;	

			} else return 1;
		}
	} 

	if (!echiquier['petit_roc_blanc'] ) {

		if ((is_blanc) && (h1 == 5) && (h2 == 7) && (v1 == 1) && (v2 == 1) && (!echiquier['case_deplacee'][5][1]) 
		&& (!echiquier['case_deplacee'][8][1]) && (!echiquier[6][1]) && (!echiquier[7][1])) {
	
			if ((!echec_case_vide(5,1)) && (!echec_case_vide(6,1)) && (!echec_case_vide(7,1))) {			
		
				return 0;	
		
			} else return 1;
		}	
	}
		
	if (!echiquier['grand_roc_noir']) {

		if ((!is_blanc) && (h1 == 5) && (h2 == 3) && (v1 == 8) && (v2 == 8) && (!echiquier['case_deplacee'][5][8]) 
		&& (!echiquier['case_deplacee'][1][8]) && (!echiquier[4][8]) && (!echiquier[3][8]) && (!echiquier[2][8])) {
	
			if ((!echec_case_vide(5,8)) && (!echec_case_vide(4,8)) && (!echec_case_vide(3,8)) && (!echec_case_vide(2,8))) {
		
				return 0;	
	
			} else return 1;
		}
	}
	
	if (!echiquier['petit_roc_noir'] ) {

		if ((!is_blanc) && (h1 == 5) && (h2 == 7) && (v1 == 8) && (v2 == 8) && (!echiquier['case_deplacee'][5][8]) 
		&& (!echiquier['case_deplacee'][8][8]) && (!echiquier[6][8]) && (!echiquier[7][8])) {
	
			if ((!echec_case_vide(5,8)) && (!echec_case_vide(6,8)) && (!echec_case_vide(7,8))) {
			
				return 0;	
		
			} else return 1;
		} 
	}

	if ( (Math.abs(v2-v1) == 1) && ( Math.abs(h2-h1) == 1) ) {

		if (piece) { return 1; } else { return 0; } 
	}
		
	else if ( (Math.abs(v2-v1) == 1) && ( Math.abs(h2-h1) == 0) ) {

		if (piece) { return 1; } else { return 0; } 
	}			
		
	else if ( (Math.abs(v2-v1) == 0) && ( Math.abs(h2-h1) == 1) ) {

		if (piece) { return 1; } else { return 0; } 
	
	} else { return 1; }
}

function verifier_prise_en_passant(h1, v1, h2, v2) {

	if ((echiquier[h1][v1] == 'Pn') && (v1 == 4) && (v2 == 3) && (Math.abs(h1-h2) == 1)
	&& (echiquier['grand_deplacement_pion'][h2])) {		

		return 1;
	
	} else if ((echiquier[h1][v1] == 'Pb') && (v1 == 5) && (v2 == 6) && (Math.abs(h1-h2) == 1) 
	&& (echiquier['grand_deplacement_pion'][h2])) {
	 	
		return 1;	
	
	} else { return 0; }
}

function mauvais_deplacement_piece(h1, v1, h2, v2) {

	if (echiquier[h1][v1] == 'Pb') {

		// DEPLACEMENTS DU PION BLANC

		if (verifier_prise_en_passant(h1, v1, h2, v2)) { return 0; }

		else if (h2 == h1) {

			if (v2 == v1+1) {

				if (echiquier[h2][v2]) { return 1; } else { return 0; }
			
			} else if ((v1 == 2) && (v2 == 4)) {

				if (echiquier[h2][v2]) { return 1; } else if (echiquier[h2][3]) { return 1; } else { return 0; }

			} else return 1;

		} else if ((v2 == v1+1) && (Math.abs(h2-h1) == 1)) {

			if (piece_noire[echiquier[h2][v2]]) { return 0; } else { return 1; }
	
		} else return 1;

	} else if (echiquier[h1][v1] == 'Pn') {

		// DEPLACEMENTS DU PION NOIR

		if (verifier_prise_en_passant(h1, v1, h2, v2)) { return 0; }

		else if (h2 == h1) {

			if (v2 == v1-1) {

				if (echiquier[h2][v2]) { return 1; } else { return 0; }
			
			} else if ((v1 == 7) && (v2 == 5)) {

				if (echiquier[h2][v2]) { return 1; } else if (echiquier[h2][6]) { return 1; } else { return 0; }

			} else return 1;
	
		} else if ((v2 == v1-1) && (Math.abs(h2-h1) == 1)) {

			if (piece_blanche[echiquier[h2][v2]]) { return 0; } else { return 1; }
	
		} else return 1;

	} else if (echiquier[h1][v1] == 'Rb') {

		// DEPLACEMENTS DU ROI BLANC

		return mauvais_deplacement_roi(1, h1, v1, h2, v2);	

	} else if (echiquier[h1][v1] == 'Rn') {

		// DEPLACEMENTS DU ROI NOIR

		return mauvais_deplacement_roi(0, h1, v1, h2, v2);
	
	} else if (echiquier[h1][v1] == 'Cb') {

		// DEPLACEMENTS DU CAVALIER BLANC

		return mauvais_deplacement_cavalier(1, h1, v1, h2, v2);
	
	} else if (echiquier[h1][v1] == 'Cn') {

		// DEPLACEMENTS DU CAVALIER NOIR

		return mauvais_deplacement_cavalier(0, h1, v1, h2, v2);
	
	} else if (echiquier[h1][v1] == 'Tb') {

		// DEPLACEMENTS DE LA TOUR BLANCHE

		return mauvais_deplacement_tour(1, h1, v1, h2, v2);
	
	} else if (echiquier[h1][v1] == 'Tn') {

		// DEPLACEMENTS DE LA TOUR NOIRE

		return mauvais_deplacement_tour(0, h1, v1, h2, v2);
	
	} else if (echiquier[h1][v1] == 'Fb') {

		// DEPLACEMENTS DU FOU BLANC

		return mauvais_deplacement_fou(1, h1, v1, h2, v2);

	} else if (echiquier[h1][v1] == 'Fn') {

		// DEPLACEMENTS DU FOU NOIR
		
		return mauvais_deplacement_fou(0, h1, v1, h2, v2);

	}  else if (echiquier[h1][v1] == 'Db') {

		// DEPLACEMENTS DE LA REINE BLANCHE
		
		return mauvais_deplacement_fou(1, h1, v1, h2, v2) && mauvais_deplacement_tour(1, h1, v1, h2, v2);

	}  else if (echiquier[h1][v1] == 'Dn') {

		// DEPLACEMENTS DE LA REINE NOIRE
		
		return mauvais_deplacement_fou(0, h1, v1, h2, v2) && mauvais_deplacement_tour(0, h1, v1, h2, v2);

	} else return 1;
}

function mauvaise_couleur(h1, v1) {

	if ((!echiquier['aux_blancs']) && (piece_blanche[echiquier[h1][v1]])) {

		return 1;

	} else if ((echiquier['aux_blancs']) && (piece_noire[echiquier[h1][v1]])) {

		return 1;

	} else return 0;
}

function roi_blanc_present() {

	var is_roi = 0;
	
	for (i = 1 ; i <= 8 ; i++) {

		for (j = 1 ; j <= 8 ; j++) {

			if (echiquier[i][j] == 'Rb') {

				is_roi = 1;

				roi_v = j;
				roi_h = i;
			}
		}
	}

	return is_roi;
}

function roi_noir_present() {

	var is_roi = 0;
	
	for (i = 1 ; i <= 8 ; i++) {

		for (j = 1 ; j <= 8 ; j++) {

			if (echiquier[i][j] == 'Rn') {

				is_roi = 1;
				
				roi_v = j;
				roi_h = i;
			}
		}
	}

	return is_roi;
}

function verifier_pion_passant(h1, v1, h2, v2) {

	for (ih = 1; ih <= 8; ih++) {
		
		echiquier['grand_deplacement_pion'][ih] = 0;
	}

	if ((echiquier[h2][v2] == 'Pb') && ((v1 == 2) && (v2 == 4))) {

	 	echiquier['grand_deplacement_pion'][h1] = 1;
	
	} else if ((echiquier[h2][v2] == 'Pn') && ((v1 == 7) && (v2 == 5))) {

		echiquier['grand_deplacement_pion'][h1] = 1;

	}
}

function echec_case_vide(h, v, pecv, peem, pc, pvee, pmc, pve) {

	if (pecv 	== undefined) 	{ pecv 	= 1; }
	if (peem 	== undefined)  { peem 	= 1; }
	if (pc 		== undefined) 	{ pc 		= 2; }
	if (pvee	== undefined) 	{ pvee 	= 1; }
	if (pmc 	== undefined)  { pmc 	= 2; }
	if (pve 	== undefined)  { pve 	= 1; }
	
	var tmp_echiquier = sauvegarder_echiquier();
	
	if (pecv > 0) {		

		pecv--;
		
		echiquier['aux_blancs'] = 1-echiquier['aux_blancs'];

		renvoi_piece_deplacable();		
		
		echiquier['aux_blancs'] = 1-echiquier['aux_blancs'];
	 
	 	 // sauvegarde piece déplacable
	 	var piece_deplacable2_v = new Array();
		var piece_deplacable2_h = new Array();
		
		var piece_deplacable2_nb = piece_deplacable_nb ;	
		
		for (var i=1; i <= piece_deplacable_nb; i++) {				
		
			piece_deplacable2_v[i] = piece_deplacable_v[i];
			piece_deplacable2_h[i] = piece_deplacable_h[i];
		}	
		
		// sauvegarde piece déplacable

		for (var i = 1; i <= piece_deplacable2_nb; i++) {

			i1 = piece_deplacable2_v[i]; 
			j1 = piece_deplacable2_h[i]; 
 			
 			echiquier = restaurer_echiquier(tmp_echiquier);	
 			
 			echiquier['aux_blancs'] = 1-tmp_echiquier['aux_blancs'];
 			
	  	if (!mauvais_coup(j1, i1, h, v, pecv, peem, pc, 0, pmc, pve)) {
	  		
	  			echiquier = restaurer_echiquier(tmp_echiquier);	
	  							
				  return 1;
			}		
			
			echiquier = restaurer_echiquier(tmp_echiquier);	
		}		

		return 0;
	
	} else {
		
			return 1;
	}
}

function echec_et_mat(pecv, peem, pc, pvee, pmc, pve) {

	if (pecv 	== undefined) 	{ pecv 	= 1; }
	if (peem 	== undefined)  { peem 	= 1; }
	if (pc 		== undefined) 	{ pc 		= 2; }
	if (pvee	== undefined) 	{ pvee 	= 1; }
	if (pmc 	== undefined)  { pmc 	= 2; }
	if (pve 	== undefined)  { pve 	= 1; }
	
	var tmp_echiquier = sauvegarder_echiquier();
	
	if (peem > 0) {

		peem--;	
		
		var bool = 0;
		var nb_echec = 0;
		var nb_echec_total = 0;

		renvoi_piece_deplacable();
	 
	 	 // sauvegarde piece déplacable
	 	var piece_deplacable2_v = new Array();
		var piece_deplacable2_h = new Array();
		
		var piece_deplacable2_nb = piece_deplacable_nb ;	
		
		for (var i=1; i <= piece_deplacable_nb; i++) {				
		
			piece_deplacable2_v[i] = piece_deplacable_v[i];
			piece_deplacable2_h[i] = piece_deplacable_h[i];
		}	
		
		// sauvegarde piece déplacable

		for (i = 1; i <= piece_deplacable2_nb; i++) {

			i1 = piece_deplacable2_v[i]; 
			j1 = piece_deplacable2_h[i]; 

			for (i2 = 1 ; i2 <= 8 ; i2++) {

				for (j2 = 1 ; j2 <= 8 ; j2++) {	

					if ((i1 != i2) || (j1 != j2)) {						
						
						bool = mauvais_coup(j1, i1, j2, i2, pecv, peem, pc, pvee, pmc, pve);
						
						echiquier['aux_blancs'] = 1-echiquier['aux_blancs'];
							
						verif_echec = verifier_est_en_echec(j1, i1, j2, i2, pecv, peem, pc, pvee, pmc, pve);
									
						echiquier['aux_blancs'] = 1-echiquier['aux_blancs'];
						
						if (!bool) {
							
									if (!verif_echec) {
									
											//echo "PAS MAT en {j1}{i1}-{j2}{i2} "; 			
											
											echiquier = restaurer_echiquier(tmp_echiquier);	
			
											return 0;		
									
									}
															
						}	else if (verif_echec) {
							
								echiquier = restaurer_echiquier(tmp_echiquier);	
							
								return 0;
						}				
					}	
				}	
			}
		}	

		echiquier = restaurer_echiquier(tmp_echiquier);	

		return 1;

	} else { 
		
			echiquier = restaurer_echiquier(tmp_echiquier);	
			return 0;
	}
}

function verif_transform(h2) {

	return ((h2 == 'Tb') || (h2 == 'Cb') || (h2 == 'Fb') || (h2 == 'Rb') || (h2 == 'Db')

		|| (h2 == 'Tn') || (h2 == 'Cn') || (h2 == 'Fn') || (h2 == 'Rn') || (h2 == 'Dn'));
}

function trouver_un_pion_en_derniere_ligne() {

	for (i = 1; i <= 8; i++) {
			
		if ((echiquier['aux_blancs']) && (echiquier[i][8] == 'Pb')) {

			v1 = 8;
			h1 = i;
			couleur = 'blanc';

			return 1;
		}
	
		if ((!echiquier['aux_blancs']) && (echiquier[i][1] == 'Pn')) {

			v1 = 1;
			h1 = i;
			couleur = 'noir';

			return 1;
		}
	}

	return 0;
}

function coup(bool, h1, v1, h2, v2, pecv, peem, pc, pvee, pmc, pve) {	

	avant_dernier_i2 = dernier_i2;
	avant_dernier_i1 = dernier_i1;
	
	dernier_i1 = v1;
	dernier_i2 = v2;
	dernier_j1 = h1;
	dernier_j2 = h2;
	
	if ((v1 == blanc) && (v2 == abandon)) { 
		
				return 'Les blancs ont perdu par abandon.';
	}
	
	if ((v1 == noir) && (v2 == abandon)) { 
		
				return 'Les noirs ont perdu par abandon.';
	}
	
	if (v2 == nul) {
		
				bool = (((v1 == noir) && (avant_dernier_i1 == blanc)) || ((avant_dernier_i1 == noir) && (v1 == blanc)));
		
				if ((bool) && (avant_dernier_i2 == nul)) { 
						
						match_nul = true;
						
						return 'Match nul.';
				}				
					
				return 'Proposition de match nul.';
	}
	
	if (v2 == recommencer) {
		
				bool = (((v1 == noir) && (avant_dernier_i1 == blanc)) || ((avant_dernier_i1 == noir) && (v1 == blanc)));
		
				if ((bool) && (avant_dernier_i2 == recommencer)) { 
						
						match_recommencer = true;
						
						return 'Recommencer partie.';
				}				
					
				return 'Proposition de recommencer.';
	}
		
	if (pecv 	== undefined) 	{ pecv 	= 1; }
	if (peem 	== undefined)  { peem 	= 1; }
	if (pc 		== undefined) 	{ pc 		= 2; }
	if (pvee	== undefined) 	{ pvee 	= 1; }
	if (pmc 	== undefined)  { pmc 	= 2; }
	if (pve 	== undefined)  { pve 	= 1; }
	
	//alert3("<br>appel de <font color=red><b>coup (bool=" + bool + ", h1=" + h1 + ", v1=" + v1 + ", h2=" + 
	//h2 + ", v2=" + v2 + ", pecv=" + pecv + ", peem=" + peem + ", pc=" + pc + ", pvee=" + pvee + ", pmc=" 
	//+ pmc + ", pve=" + pve + ")- </b></font>");

	if (h1 == 9) ("Alert bug de limite : h1 = 9");

	if ((pc > 0) && (h1 != 9)) { // ya un bug ça doit jamais retourner h1=9

		pc--;
		
		if (bool) {
			bad_coup = !mauvais_coup(h1, v1, h2, v2, pecv, peem, pc, pvee, pmc, pve);
		} else bad_coup = 0;
			
		var transformation = verif_transform(h2);
			
		if (!bad_coup) {
		
			echiquier['case_deplacee'][h1][v1] = 1;

			if (transformation ) {
				
				//alert('h1 = ' + h1 + ',h2 = ' + h2);

				echiquier[h1][v1] = h2;				
			} 

			if (verifier_prise_en_passant(h1, v1, h2, v2)) { 

				echiquier[h2][v1] = ''; 
				
				echiquier['prise_en_passant'] = true;			
			
			} else echiquier['prise_en_passant'] = false;			
			
			if ((echiquier[h1][v1] == 'Rb') && (h1-h2 == -2)) { 

				echiquier[6][1] = echiquier[8][1]; 
				echiquier[8][1] = '';	

				echiquier['petit_roc_blanc'] = 1;
				
				//alert('petit roc blanc : coup J1 = ' + 	h1 + ', i1 = ' + v1 + ', j2 = ' + h2 + ', i2 = ' + v2);
				
			} else if ((echiquier[h1][v1] == 'Rb') && (h1-h2 == 2)) { 

				echiquier[4][1] = echiquier[1][1]; 
				echiquier[1][1] = '';	

				echiquier['grand_roc_blanc']  = 1;

			} else if ((echiquier[h1][v1] == 'Rn') && (h1-h2 == -2)) { 

				echiquier[6][8] = echiquier[8][8]; 
				echiquier[8][8] = '';	

				echiquier['petit_roc_noir']  = 1;

			} else if ((echiquier[h1][v1] == 'Rn') && (h1-h2 == 2)) { 

				echiquier[4][8] = echiquier[1][8]; 
				echiquier[1][8] = '';	

				echiquier['grand_roc_noir'] = 1;
			}
		
			if ((!transformation) && (echiquier[h2] != undefined)) {

				echiquier['nom_piece_echec']	= nom_piece[echiquier[h2][v2]] + " " + chiffre[h2] + v2;
				
				ancien_ancienne_case_dest = ancienne_case_dest;				
				
				ancienne_case_dest = echiquier[h2][v2];

				echiquier[h2][v2] = echiquier[h1][v1];
				echiquier[h1][v1] = '';

				verifier_pion_passant(h1, v1, h2, v2);	
		
			} else {

				echiquier['nom_piece_echec']	= nom_piece[h2] + " " + chiffre[h1] + v2;				
			}		
			
			if (echiquier[h2] != undefined) {
				
					if (((echiquier[h2][v2] == 'Pb') && (v2 == 8)) || ((echiquier[h2][v2] == 'Pn') && (v2 == 1))) { 
				
						echiquier['aux_blancs'] 	= 1-echiquier['aux_blancs'];
					}
			}
			
			echiquier['aux_blancs'] 	= 1-echiquier['aux_blancs'];	
			
			return 1;
		}
	} 
	
	return 0;
}

function verifier_est_en_echec(h1, v1, h2, v2, pecv, peem, pc, pvee, pmc, pve) {
	
	//alert3("<br>appel de <font color=blue><b>verifier est en echec(h1=" + h1 + ", v1=" + v1 + ", h2=" + 
	//h2 + ", v2=" + v2 + ", pecv=" + pecv + ", peem=" + peem + ", pc=" + pc + ", pvee=" + pvee + ", pmc=" 
	//+ pmc + ", pve=" + pve + ")- </b></font>");
	
	if (pecv 	== undefined) 	{ pecv 	= 1; }
	if (peem 	== undefined)  { peem 	= 1; }
	if (pc 		== undefined) 	{ pc 		= 2; }
	if (pvee	== undefined) 	{ pvee 	= 1; }
	if (pmc 	== undefined)  { pmc 	= 2; }
	if (pve 	== undefined)  { pve 	= 1; }

	if (pvee > 0) {	// mettre > 0

		pvee--;
		
		var tmp_echiquier = sauvegarder_echiquier();
		
		if (!mauvais_coup(h1, v1, h2, v2, pecv, peem, pc, pvee, pmc, pve)) {
			
			tmp_echiquier2 = sauvegarder_echiquier();
			
			coup(0, h1, v1, h2, v2, pecv, peem, pc, pvee, pmc, pve);
			
			echiquier['aux_blancs'] = 1-echiquier['aux_blancs'];
	
			var is_echec = verifier_echec(pecv, peem, pc, 0, pmc, pve);
			
			echiquier = restaurer_echiquier(tmp_echiquier2);
			
		} else var is_echec = 0;
			
		if (is_echec) {
				
					if (pvee = 1) { alert3("<br>appel de <font color=blue><b>verifier est en echec BON ici : (h1=" + h1 + ", v1=" + v1 + ", h2=" + 
					h2 + ", v2=" + v2 + ", pecv=" + pecv + ", peem=" + peem + ", pc=" + pc + ", pvee=" + pvee + ", pmc=" 
				+ pmc + ", pve=" + pve + ")- </b></font>"); }
		}
		
		echiquier = restaurer_echiquier(tmp_echiquier);
   	
   	return is_echec;

	} else return 0;
}

function mauvais_coup(h1, v1, h2, v2, pecv, peem, pc, pvee, pmc, pve) {

	if (h1 == undefined) { return 'BUG de programmation : h1 est non défini 1'; }
	if (v1 == undefined) { return 'BUG de programmation : v1 est non défini 1'; }
	
	if (hors_limite) { return 'Votre sélection est en dehors des limites !'; }
		
	if (pecv 	== undefined) 	{ pecv 	= 1; }
	if (peem 	== undefined)  { peem 	= 1; }
	if (pc 		== undefined) 	{ pc 		= 2; }
	if (pvee	== undefined) 	{ pvee 	= 1; }
	if (pmc 	== undefined)  { pmc 	= 2; }
	if (pve 	== undefined)  { pve 	= 1; }
	
	//alert3("<br>appel de mauvais coup(h1=" + h1 + ", v1=" + v1 + ", h2=" + 
	//h2 + ", v2=" + v2 + ", pecv=" + pecv + ", peem=" + peem + ", pc=" + pc + ", pvee=" + pvee + ", pmc=" 
	//+ pmc + ", pve=" + pve + ")- ");	

	if (pmc > 0) {

		pmc--;	

		if ((h2 == 'Pb') || (h2 == 'Tb') || (h2 == 'Cb') || (h2 == 'Fb') || (h2 == 'Rb') || (h2 == 'Db')) {

			if ((echiquier[h1][v1] == 'Pb') && (v2 == 8)) {

				return 0;

			} else {
				
				return nom_piece[echiquier[h1][v1]] + " " + chiffre[h1] + v1 + " ne peut pas se transformer en " + nom_piece[h2] + " : la pièce à changer doit être un pion blanc en [ V = 8 ]";	
			}
		}	

		if ((h2 == 'Pn') || (h2 == 'Tn') || (h2 == 'Cn') || (h2 == 'Fn') || (h2 == 'Rn') || (h2 == 'Dn')) {

			if ((echiquier[h1][v1] == 'Pn') && (v2 == 1)) {

				return 0;
		
			} else {
				
				return nom_piece[echiquier[h1][v1]] + " " + chiffre[h1] + v1 + " ne peut pas se transformer en {nom_piece[h2]} : la pièce à changer doit être un pion noir en [ V = 1 ]";	
			}
		}
		
		if (verifier_est_en_echec(h1, v1, h2, v2, 0, peem, pc, pvee, pmc, pve))
 {

			if (echiquier['aux_blancs']) {

				roi_present = roi_blanc_present();
	
			} else {
		
				roi_present = roi_noir_present();	
			}			
			
			return "Le roi " + chiffre[roi_h] + roi_v + " est en echec si vous jouez ce coup !"; 
	
		} else if (mauvaise_couleur(h1, v1)) {
			
			return nom_piece[echiquier[h1][v1]] + " " + chiffre[h1] + v1 + " ne peut pas se déplacer : ce n'est pas à son tour de jouer !";
	
		} else if (!echiquier[h1][v1]) {
			
			return "la case de départ " + chiffre[h1] + v1 + " est vide";

		} else if (mauvais_deplacement_piece(h1, v1, h2, v2)) {
			
			return nom_piece[echiquier[h1][v1]] + " " + chiffre[h1] + v1 + " ne peut pas se déplacer en " + chiffre[h2] + v2 + " !";
	
		} else {

			return 0;
		}

	} else {
		
		return 1;
	 }
}

function verifier_echec(pecv, peem, pc, pvee, pmc, pve) {

	//alert3("<br>appel de verifier echec(pecv=" + pecv + ", peem=" + peem 
	//+ ", pc=" + pc + ", pvee=" + pvee + ", pmc=" 
	//+ pmc + ", pve=" + pve + ")- ");
	
	echiquier['aux_blancs'] = 1 - echiquier['aux_blancs'];
	
	if (pecv 	== undefined) 	{ pecv 	= 1; }
	if (peem 	== undefined)  { peem 	= 1; }
	if (pc 		== undefined) 	{ pc 		= 2; }
	if (pvee	== undefined) 	{ pvee 	= 1; }
	if (pmc 	== undefined)  { pmc 	= 2; }
	if (pve 	== undefined)  { pve 	= 1; }

	if (pve > 0) {
		
		pve--;
	
		if (echiquier['aux_blancs']) {

			roi_present = roi_noir_present();
	
		} else {
		
			roi_present = roi_blanc_present();	
		}

		renvoi_piece_deplacable();
	 
	 	  // sauvegarde piece déplacable
	 	var piece_deplacable2_v = new Array();
		var piece_deplacable2_h = new Array();
		
		var piece_deplacable2_nb = piece_deplacable_nb ;	
		
		for (var i=1; i <= piece_deplacable_nb; i++) {				
		
			piece_deplacable2_v[i] = piece_deplacable_v[i];
			piece_deplacable2_h[i] = piece_deplacable_h[i];
		}	
		
		// sauvegarde piece déplacable

		for (ic = 1; ic <= piece_deplacable2_nb; ic++) {
			
			i = piece_deplacable2_v[ic]; 
			j = piece_deplacable2_h[ic];			
			
			if (!mauvais_coup(j, i, roi_h, roi_v, pecv, peem, pc, 0, pmc, 0)) {	
				
				echiquier['aux_blancs'] = 1 - echiquier['aux_blancs'];		
				return 1;
			}	
		}
		
		echiquier['aux_blancs'] = 1 - echiquier['aux_blancs'];

		return 0;
	
	} else { 
		
		echiquier['aux_blancs'] = 1 - echiquier['aux_blancs'];
		
			return 0;
	}
}

function renvoyer_bon_coups(h1, v1) {
	
		for (var h2 = 1; h2 <= 8; h2++) {
			
					for (var v2 = 1; v2 <= 8; v2++) {
						
						var tmp_echiquier = sauvegarder_echiquier();
			
						if (!mauvais_coup(h1, v1, h2, v2)) {
			
							bon_coup[h2][v2] = 1;
				
						} else {
			
							bon_coup[h2][v2] = 0;
						}
						
						echiquier = restaurer_echiquier(tmp_echiquier);
					}
		}
		
		return false;
}
