// JavaScript Document
// Скрипт написан летом 2011 года
// Ввод спектральных данных - февраль 2012 года
// Автор Михаил Сартаков: mihas@rudtp.pp.ru

var Lab1 = {L:0.0, a:0.0, b:0.0};
var Lab2 = {L:0.0, a:0.0, b:0.0};
var LCh1 = {L:0.0, C:0.0, h:0.0};
var LCh2 = {L:0.0, C:0.0, h:0.0};
var Dh = 0.0;
var DH = 0.0;
var DE1976 = 0.0;
var DE1994_Textiles = 0.0;
var DE1994_GraphicArts = 0.0;
var DE2000 = 0.0;
var DE2011 = 0.0;
var DECMC_11 = 0.0;
var DECMC_21 = 0.0;
var nuh = 0.0;

var Dhar = new Array();
var DHar = new Array();
var DE1976ar = new Array();
var DE1994_Textilesar = new Array();
var DE1994_GraphicArtsar = new Array ();
var DE2000ar = new Array ();
var DE2011ar = new Array ();
var DECMC_21ar = new Array();
var DECMC_11ar = new Array();
var Lab1Lar = new Array();
var Lab1aar = new Array();
var Lab1bar = new Array();
var Lab2Lar = new Array();
var Lab2aar = new Array();
var Lab2bar = new Array();
var LCh1Car = new Array();
var LCh1har = new Array();
var LCh2Car = new Array();
var LCh2har = new Array();
var hexcode1ar = new Array();
var hexcode2ar = new Array();
var hyperlink = new Array();
var warningaar = new Array();
var warningbar = new Array();
var warningar = new Array();
var warningYar = new Array();
var warningYendar = new Array();
var warningY2011ar = new Array();
var warningYend2011ar = new Array();
var warningaaar = new Array();
var warningbbar = new Array();

var Lab1Lars = new Array();
var Lab1aars = new Array();
var Lab1bars = new Array();
var Lab2Lars = new Array();
var Lab2aars = new Array();
var Lab2bars = new Array();

var Lab1LarHH = new Array();
var Lab1aarHH = new Array();
var Lab1barHH = new Array();
var Lab2LarHH = new Array();
var Lab2aarHH = new Array();
var Lab2barHH = new Array();

var normalCMYK = new Array();
var normalCMYK_C = new Array();
var normalCMYK_M = new Array();
var normalCMYK_Y = new Array();
var normalCMYK_K = new Array();
var normalMTSCMYK = new Array();
var normalMTSCMYK_C = new Array();
var normalMTSCMYK_M = new Array();
var normalMTSCMYK_Y = new Array();
var normalMTSCMYK_K = new Array();

var columMTarr = new Array();
var acolumMTSarr = new Array();

var nanometr = new Array(340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830);  // length 491
WPD = {X:0.96422,Y:1.0,Z:0.82521};
var epsilon = 216/24389;
var kappa = 24389/27;
var X1 = new Array();
var X2 = new Array();
var X = new Array();
var Y1 = new Array();
var Y = new Array();
var Z1 = new Array();
var Z = new Array();
var X100 = new Array();
var Y100 = new Array();
var Z100 = new Array();
var Xr1 = new Array();
var Yr1 = new Array();
var Zr1 = new Array();
var Xr = new Array();
var Yr = new Array();
var Zr = new Array();
var xr = new Array();
var yr = new Array();
var zr = new Array();
var fx = new Array();
var fy = new Array();
var fz = new Array();
var Lab_L = new Array();
var Lab_a = new Array();
var Lab_b = new Array();
var format_spct_arr = new Array();
var data_spct_arr = new Array();
var data_spct_string_arr = new Array();
var data_spct_cell_arr = new Array();
var Illuminant = new Array();
var nanometr_number = new Array();
var xObs = new Array();
var yObs = new Array();
var zObs = new Array();
var string12 = new Array();

function columdefine()
{
	cmykR = 2;
	labR = 9;
	cmykS = 2;
	labS = 9;
BEGIN_DATA_FORMAT = MT.indexOf("BEGIN_DATA_FORMAT\n");
END_DATA_FORMAT = MT.lastIndexOf("\nEND_DATA_FORMAT");
columMT = MT.slice(BEGIN_DATA_FORMAT+18, END_DATA_FORMAT);
BEGIN_DATA_FORMATMTS = MTS.indexOf("BEGIN_DATA_FORMAT\n");
END_DATA_FORMATMTS = MTS.lastIndexOf("\nEND_DATA_FORMAT");
columMTS = MTS.slice(BEGIN_DATA_FORMATMTS+18, END_DATA_FORMATMTS);

var columMTarr = columMT.split(/[" "\t]/g);
columMTarrlen=columMTarr.length;
var columMTSarr = columMTS.split(/[" "\t]/g);
columMTSarrlen=columMTSarr.length;
//alert(columMTarrlen+" / "+columMTSarrlen);

for (var i=0; i<columMTarrlen; i++) {
	if (columMTarr[i] == "CMYK_C") {
		cmykR = i+1;
	}
	if (columMTarr[i] == "LAB_L") {
		labR = i+1;
	}
	if (columMTarr[i] == "Lab_L") {
		labR = i+1;
	}
}

for (var i=0; i<columMTSarrlen; i++) {
	if (columMTSarr[i] == "CMYK_C") {
		cmykS = i+1;
	}
	if (columMTSarr[i] == "LAB_L") {
		labS = i+1;
	}
	if (columMTSarr[i] == "Lab_L") {
		labS = i+1;
	}
}
//alert(cmykR+" / "+labR+" / "+cmykS+" / "+labS);
	
}

function magicfunction() {
	if (document.forms[0].magic.checked)
	{
var magicDiv = document.createElement('div'); 
var magicnum = document.getElementById('magicdiv').getElementsByTagName('div').length+1;
magicDiv.innerHTML = '<table width="100%" border="0"><tr><td colspan="2" class="sup">* Альтернативный алгоритм позволяет сравнить данные из таблиц с разной длиной и шириной. Алгоритм может перебрать и сравнить по цвету все совпадающие поля CMYK в обеих таблицах. Поля CMYK и заголовки таблиц должны присутствовать. <br>Если скрипт не найдет в альтернативном режиме указания в шапке таблицы на столбцы CMYK_C и Lab_L то примет за эти значения второй и девятый столбец соответственно.<br>Альтернативный алгоритм задействуется тогда, когда количество строк в таблицах не совпадает или когда поставлена галочка в чекбоксе и развернут этот текст.</td></tr><tr><td class="center" colspan="2"><input type="button" value="Пример: Fogra39 (1617) vs Fogra27MW2 (46)" onClick="primer3();"/>&nbsp;&nbsp;&nbsp;<input type="button" value="Ввести данные" onClick="input_data();"/></td></tr></table>';
document.getElementById('magicdiv').appendChild(magicDiv);
	}
	else {
	document.getElementById('magicdiv').removeChild(document.getElementById('magicdiv').getElementsByTagName('div')[document.getElementById('magicdiv').getElementsByTagName('div').length-1]);
	}
}


function replace_string(txt,cut_str,paste_str)
{
var f=0;
var ht='';
ht = ht + txt;
f=ht.indexOf(cut_str);
while (f!=-1){
//цикл для вырезания всех имеющихся подстрок
f=ht.indexOf(cut_str);
if (f>0){
ht = ht.substr(0,f) + paste_str + ht.substr(f+cut_str.length);
}
}
return ht
}

function input_data(){
	ref_spec = 0;
	sample_spec = 0;
	MT = document.forms[0].mt.value;
	MTS = document.forms[0].mts.value;
var patt1=new RegExp("SPECTRAL_NM");
if (patt1.test(MT) == true){
	ref_spec = 1;
}
var patt2=new RegExp("NM_");
if (patt2.test(MT) == true){
	ref_spec = 1;
}
var patt3=new RegExp("\tnm");
if (patt3.test(MT) == true){
	ref_spec = 1;
}
var patt3a=new RegExp(" nm");
if (patt3a.test(MT) == true){
	ref_spec = 1;
}
var patt4=new RegExp("SPEC_");
if (patt4.test(MT) == true){
	ref_spec = 1;
}
var patt5=new RegExp("SPECTRAL_NM");
if (patt5.test(MTS) == true){
	sample_spec = 1;
}
var patt6=new RegExp("NM_");
if (patt6.test(MTS) == true){
	sample_spec = 1;
}
var patt7=new RegExp("\tnm");
if (patt7.test(MTS) == true){
	sample_spec = 1;
}
var patt7a=new RegExp(" nm");
if (patt7a.test(MTS) == true){
	sample_spec = 1;
}
var patt8=new RegExp("SPEC_");
if (patt8.test(MTS) == true){
	sample_spec = 1;
}
	GetMT(ref_spec, sample_spec);
}

function spectral_calc(spct){
spct = replace_string(spct,'       ','\t');
spct = replace_string(spct,'      ','\t');
spct = replace_string(spct,'     ','\t');
spct = replace_string(spct,'    ','\t');
spct = replace_string(spct,'   ','\t');
spct = replace_string(spct,'  ','\t');
spct = replace_string(spct,' \t','\t');
spct = replace_string(spct,' \n','\n'); //argill
spct = replace_string(spct,'\t ','\t');
spct = replace_string(spct,'\t\t\t\t\t\t\t','\t');
spct = replace_string(spct,'\t\t\t\t\t\t','\t');
spct = replace_string(spct,'\t\t\t\t\t','\t');
spct = replace_string(spct,'\t\t\t\t','\t');
spct = replace_string(spct,'\t\t\t','\t');
spct = replace_string(spct,'\t\t','\t');
spct = replace_string(spct,'\n\n','\n');
spct = replace_string(spct,'\t\n','\n');
spct = replace_string(spct,'\n\t','\n');
spct = replace_string(spct,',','.');
spct = replace_string(spct,'"',''); //PO
//function columdefine(){
BEGIN_DATA_FORMAT = spct.indexOf("BEGIN_DATA_FORMAT\n");
END_DATA_FORMAT = spct.lastIndexOf("\nEND_DATA_FORMAT");
format_spct = spct.slice(BEGIN_DATA_FORMAT+18, END_DATA_FORMAT);
//проверка на спектры argill
var patt1=new RegExp("SPEC_");
if (patt1.exec(format_spct) == "SPEC_"){
	argill_check_koef = 0.01;
}
else {
	argill_check_koef = 1.0;
}
// спектры в argill в 100 раз больше
format_spct = replace_string(format_spct,'SPECTRAL_NM_','');  // MT, Print Open, Color Toolbox
format_spct = replace_string(format_spct,'SPECTRAL_NM','');  // i1Profiler - X-Rite, Inc.
format_spct = replace_string(format_spct,'NM_','');  // Print Open, Color Toolbox
format_spct = replace_string(format_spct,'nm','');  // MT, Print Open, Color Toolbox
format_spct = replace_string(format_spct,'SPEC_','');  //argill

format_spct_arr = format_spct.split(/[" "\t]/g);
format_spct_arr_length = format_spct_arr.length;
finish_nm = format_spct_arr_length;

for (var i=0; i<format_spct_arr_length; i++) {
	if (format_spct_arr[i] == "SAMPLE_ID") {    // Print Open, Color Toolbox, argill
		start_nm = i+1;
	}
	if (format_spct_arr[i] == "SampleID") {  // MT
		start_nm = i+1;
	}
	if (format_spct_arr[i] == "SAMPLE_NAME") {  // MT
		start_nm = i+1;
	}
}
for (var i=0; i<format_spct_arr_length; i++) {
	if (format_spct_arr[i] == "XYZ_Z") {  //argill
		start_nm = i+1;
	}
}
	for (var i=0; i<format_spct_arr_length; i++) {
	if (format_spct_arr[i] == "CMYK_K") {  // MT, Print Open, Color Toolbox
		start_nm = i+1;
	}
	if (format_spct_arr[i] == "XYZ_Z") {  //argill
		start_nm = i+1;
	}
}
for (var i=0; i<format_spct_arr_length; i++) {
	if (format_spct_arr[i] == "D_VIS") {  //Print Open, Color Toolbox
		start_nm = i+1;
	}
	if (format_spct_arr[i] == "RGB_B") {  //MT
		start_nm = i+1;
	}
}
nano_num_finish = finish_nm - start_nm;

spkt_length = format_spct_arr_length - start_nm -1;

for (var j=0; j<spkt_length; j++){
	if (nanometr[j] == parseInt(format_spct_arr[start_nm])){
		nano_num = j;
	}
}
proverka340_830 = parseInt(format_spct_arr[start_nm]);
if (proverka340_830 < 340) {
	alert('Калькулятор считывает спектры в диапазоне 340-830 nm. \nКак вариант - обрежьте Ваши данные за пределом видимого диапазона волн. \nТекущие данные могут быть посчитаны некорректно.');
}
if (proverka340_830 > 830) {
	alert('Калькулятор считывает спектры в диапазоне 340-830 nm. \nКак вариант - обрежьте Ваши данные за пределом видимого диапазона волн. \nТекущие данные могут быть посчитаны некорректно.');
}
//}  function cellsdefine(){
BEGIN_DATA = spct.indexOf("BEGIN_DATA\n");
END_DATA = spct.lastIndexOf("\nEND_DATA");
if (BEGIN_DATA == END_DATA){}
else {
data_spct = spct.slice(BEGIN_DATA+11, END_DATA);
}
data_spct_string_arr = data_spct.split(/[\n]/g);
data_spct_string_arr_length = data_spct_string_arr.length;

for (var i=0; i<data_spct_string_arr_length; i++){
data_spct_cell_arr[i] = data_spct_string_arr[i].split(/[" "\t]/g);
//nanometr_number[i] = data_spct_cell_arr[i];
}
//}  function spectrdefine(){
	for (i=0; i<data_spct_string_arr_length; i++){
		nanometr_number[i] = new Array();
		count = 0;
		for (j=0; j<format_spct_arr_length; j++){
			if(j >= start_nm){
		nanometr_number[i][count] = data_spct_cell_arr[i][j] * argill_check_koef;
		count++
			}
		}
	}
//}  function StandardObservers(){				
count = 0;
	for (i=0; i<nano_num_finish; i++){
		for (j=0; j<491; j++){
			if (format_spct_arr[i+start_nm] == nanometr[j]){
			xObs[count] = xObsIN[j];
			yObs[count] = yObsIN[j];
			zObs[count] = zObsIN[j];
			Illuminant[count] = IlluminantIN[j];
			count++
			}
		}
	}
spkt_length = count;
//} function XYZ(){
for (i=0; i<data_spct_string_arr_length; i++){
X1[i] = new Array(data_spct_string_arr_length);
X2[i] = new Array(data_spct_string_arr_length);
Y1[i] = new Array(data_spct_string_arr_length);
Z1[i] = new Array(data_spct_string_arr_length);
Xr1[i] = new Array(data_spct_string_arr_length);
Yr1[i] = new Array(data_spct_string_arr_length);
Zr1[i] = new Array(data_spct_string_arr_length);
var X1a = 0.0;
var X2a = 0.0;
var Y1a = 0.0;
var Z1a = 0.0;
var Xr1a = 0.0;
var Yr1a = 0.0;
var Zr1a = 0.0;
		for (j=0; j<spkt_length; j++){
		X1[i][j] = parseFloat(nanometr_number[i][j]) * parseFloat(xObs[j]) * parseFloat(Illuminant[j]);
		Y1[i][j] = parseFloat(nanometr_number[i][j]) * parseFloat(yObs[j]) * parseFloat(Illuminant[j]);
		Z1[i][j] = parseFloat(nanometr_number[i][j]) * parseFloat(zObs[j]) * parseFloat(Illuminant[j]);
		Xr1[i][j] = parseFloat(xObs[j]) * parseFloat(Illuminant[j]);
		Yr1[i][j] = parseFloat(yObs[j]) * parseFloat(Illuminant[j]);
		Zr1[i][j] = parseFloat(zObs[j]) * parseFloat(Illuminant[j]);
		X1a = X1a + X1[i][j];
		Y1a = Y1a + Y1[i][j];
		Z1a = Z1a + Z1[i][j];
		Xr1a = Xr1a + Xr1[i][j];
		Yr1a = Yr1a + Yr1[i][j];
		Zr1a = Zr1a + Zr1[i][j];
		X2[i][j] = parseFloat(yObs[j]) * parseFloat(Illuminant[j]);
		X2a = X2a + X2[i][j];
		}
		X[i] = X1a / X2a;
		Y[i] = Y1a / X2a;
		Z[i] = Z1a / X2a;
		X100[i] = X[i] * 100;
		Y100[i] = Y[i] * 100;
		Z100[i] = Z[i] * 100;
}
//function Lab(){
	for (i=0; i<data_spct_string_arr_length; i++){
		xr[i] = X[i] / WPD.X;
		yr[i] = Y[i] / WPD.Y;
		zr[i] = Z[i] / WPD.Z;
		if (xr[i] > epsilon){
			fx[i] = Math.pow(xr[i],1/3)
		}
		else {
			fx[i] = (kappa * xr[i] + 16) / 116;
		}
		if (yr[i] > epsilon){
			fy[i] = Math.pow(yr[i],1/3)
		}
		else {
			fy[i] = (kappa * yr[i] + 16) / 116;
		}
		if (zr[i] > epsilon){
			fz[i] = Math.pow(zr[i],1/3)
		}
		else {
			fz[i] = (kappa * zr[i] + 16) / 116;
		}
		Lab_L[i] = 116 * fy[i] - 16;
		Lab_a[i] = 500 * (fx[i] - fy[i]);
		Lab_b[i] = 200 * (fy[i] - fz[i]);	
		// getLCh();
	}
//}	function MadeOutput(){
	string7b = '\n'
	if (data_spct_string_arr_length == 1485){
		string1 = 'LOGO_ECI2002\n';
		if (data_spct_string_arr_length == 1617){
		string1 = 'ISO12642-2\n';
	}
	}
	else{
		string1 ='';
	}
	string2 = 'ORIGINATOR\t"http://rudtp.pp.ru/spectralcalc.php"\n';
	string3 = 'DESCRIPTOR\t"Output Characterisation"\n';
	string4 = '';
	string5 = '';
	string6 = 'ILLUMINATION_NAME';
	string7 = 'OBSERVER_ANGLE';
	srting7a = 'CHROMATIC_ADAPTATION\t"';
	
	if (start_nm == 2){  //undef MT
	ccor = '\nKEYWORD\t"SAMPLE_NAME"\n';
	ccors = 'SAMPLE_ID\t';
	ccorsn = 'SAMPLE_NAME\t';
	ccorsnn = '';
	cor = 2;
	}
	if (start_nm == 5){ //rgb MT
	ccor = '\nKEYWORD\t"SAMPLE_NAME"\n';
	ccors = 'SAMPLE_ID\t';
	ccorsn = 'SAMPLE_NAME\t';
	ccorsnn = 'RGB_R\tRGB_G\tRGB_B\t';
	cor = 5;
	}
	if (start_nm == 6){ //MT, PO
	ccor = '\nKEYWORD\t"SAMPLE_NAME"\n';
	ccors = 'SAMPLE_ID\t';
	ccorsn = 'SAMPLE_NAME\t';
	ccorsnn = 'CMYK_C\tCMYK_M\tCMYK_Y\tCMYK_K\t';
	cor = 6;
	}
	if (start_nm == 16){ //PO
	ccor = '\nKEYWORD\t"SAMPLE_NAME"\n';
	ccors = 'SAMPLE_ID\t';
	ccorsn = 'SAMPLE_NAME\t';
	ccorsnn = 'CMYK_C\tCMYK_M\tCMYK_Y\tCMYK_K\t';
	cor = 6;
	}
	if (start_nm == 15){ //Color Toolbox
	ccor = '\n';
	ccors = 'SAMPLE_ID\t';
	ccorsn = '';
	ccorsnn = 'CMYK_C\tCMYK_M\tCMYK_Y\tCMYK_K\t';
	cor = 5;
	}
	if (start_nm == 8){ //Argill
	ccor = '\n';
	ccors = 'SAMPLE_ID\t';
	ccorsn = '';
	ccorsnn = 'CMYK_C\tCMYK_M\tCMYK_Y\tCMYK_K\t';
	cor = 5;
	}
	
	string8 = 'KEYWORD\t"SAMPLE_ID"'+ccor;
	string9 = 'NUMBER_OF_FIELDS\t'+parseInt(6+cor)+'\n';
	string10 = 'BEGIN_DATA_FORMAT\n'+ccors+ccorsn+ccorsnn+'XYZ_X\tXYZ_Y\tXYZ_Z\tLAB_L\tLAB_A\tLAB_B\nEND_DATA_FORMAT\n';
	string11 = 'NUMBER_OF_SETS\t'+data_spct_string_arr_length+'\n'+'BEGIN_DATA\n';
	// string12 = new Array(); перемещен в начало скрипта
	string14 = '';
	for (i=0; i<data_spct_string_arr_length; i++){
		if (start_nm == 2){ //undef
		string12[i] = data_spct_cell_arr[i][start_nm-2] + '\t' + data_spct_cell_arr[i][start_nm-1] + '\t';
		}
		if (start_nm == 5){ //rgb
		string12[i] = data_spct_cell_arr[i][start_nm-5] + '\t' + data_spct_cell_arr[i][start_nm-4] + '\t' + data_spct_cell_arr[i][start_nm-3] + '\t' + data_spct_cell_arr[i][start_nm-2] + '\t' + data_spct_cell_arr[i][start_nm-1] + '\t';
		}
		if (start_nm == 6){ // MT, PO
		string12[i] = data_spct_cell_arr[i][start_nm-6] + '\t' + data_spct_cell_arr[i][start_nm-5] + '\t' + data_spct_cell_arr[i][start_nm-4] + '\t' + data_spct_cell_arr[i][start_nm-3] + '\t' + data_spct_cell_arr[i][start_nm-2] + '\t' + data_spct_cell_arr[i][start_nm-1] + '\t';
		}
		if (start_nm == 16){ //PO
		string12[i] = data_spct_cell_arr[i][start_nm-16] + '\t' + data_spct_cell_arr[i][start_nm-15] + '\t' + data_spct_cell_arr[i][start_nm-14] + '\t' + data_spct_cell_arr[i][start_nm-13] + '\t' + data_spct_cell_arr[i][start_nm-12] + '\t' + data_spct_cell_arr[i][start_nm-11] + '\t';
		}
		if (start_nm == 15){ //Color Toolbox
		string12[i] = data_spct_cell_arr[i][start_nm-15] + '\t' + data_spct_cell_arr[i][start_nm-14] + '\t' + data_spct_cell_arr[i][start_nm-13] + '\t' + data_spct_cell_arr[i][start_nm-12] + '\t' + data_spct_cell_arr[i][start_nm-11] + '\t';
		}
		if (start_nm == 8){ //Argill
		string12[i] = data_spct_cell_arr[i][start_nm-8] + '\t' + data_spct_cell_arr[i][start_nm-7] + '\t' + data_spct_cell_arr[i][start_nm-6] + '\t' + data_spct_cell_arr[i][start_nm-5] + '\t' + data_spct_cell_arr[i][start_nm-4] + '\t';
		}
		
		string14 = string14 + string12[i] + X100[i].toFixed(4) +'\t'+ Y100[i].toFixed(4) +'\t'+ Z100[i].toFixed(4) +'\t'+ Lab_L[i].toFixed(4) +'\t'+ Lab_a[i].toFixed(4) +'\t'+ Lab_b[i].toFixed(4) + '\n';
		
	}
	string15 = 'END_DATA';
	output_data = string1+string2+string3+string4+string5+string6+string7+srting7a+string8+string9+string10+string11+string14+string15;
return output_data;
//}
}

function GetMT(ref_spec, sample_spec){
		if (ref_spec == 0) {
		MT = document.forms[0].mt.value;
		}
		else {
		MTspec = document.forms[0].mt.value;
		MT = spectral_calc(MTspec);
		}
		if (sample_spec == 0) {
		MTS = document.forms[0].mts.value;
		}
		else {
		MTSspec = document.forms[0].mts.value;
		MTS = spectral_calc(MTSspec);
		}	
MT = replace_string(MT,'       ','\t');
//alert(MT);
MT = replace_string(MT,'      ','\t');
MT = replace_string(MT,'     ','\t');
MT = replace_string(MT,'    ','\t');
MT = replace_string(MT,'   ','\t');
MT = replace_string(MT,'  ','\t');
MT = replace_string(MT,' \t','\t');
MT = replace_string(MT,'\t ','\t');
MT = replace_string(MT,'\t\t\t\t\t\t\t','\t');
MT = replace_string(MT,'\t\t\t\t\t\t','\t');
MT = replace_string(MT,'\t\t\t\t\t','\t');
MT = replace_string(MT,'\t\t\t\t','\t');
MT = replace_string(MT,'\t\t\t','\t');
MT = replace_string(MT,'\t\t','\t');
MT = replace_string(MT,'\n\n','\n');
MT = replace_string(MT,'\t\n','\n');
MT = replace_string(MT,'\n\t','\n');
MT = replace_string(MT,',','.');

MTS = replace_string(MTS,'       ','\t');
MTS = replace_string(MTS,'      ','\t');
MTS = replace_string(MTS,'     ','\t');
MTS = replace_string(MTS,'    ','\t');
MTS = replace_string(MTS,'   ','\t');
MTS = replace_string(MTS,'  ','\t');
MTS = replace_string(MTS,' \t','\t');
MTS = replace_string(MTS,'\t ','\t');
MTS = replace_string(MTS,'\t\t\t\t\t\t\t','\t');
MTS = replace_string(MTS,'\t\t\t\t\t\t','\t');
MTS = replace_string(MTS,'\t\t\t\t\t','\t');
MTS = replace_string(MTS,'\t\t\t\t','\t');
MTS = replace_string(MTS,'\t\t\t','\t');
MTS = replace_string(MTS,'\t\t','\t');
MTS = replace_string(MTS,'\n\n','\n');
MTS = replace_string(MTS,'\t\n','\n');
MTS = replace_string(MTS,'\n\t','\n');
MTS = replace_string(MTS,',','.');

columdefine();

BEGIN_DATA = MT.indexOf("BEGIN_DATA\n");
END_DATA = MT.lastIndexOf("\nEND_DATA");
if (BEGIN_DATA == END_DATA){}
else {
MT = MT.slice(BEGIN_DATA+11, END_DATA);
}

BEGIN_DATAMTS = MTS.indexOf("BEGIN_DATA\n");
END_DATAMTS = MTS.lastIndexOf("\nEND_DATA");
if (BEGIN_DATAMTS == END_DATAMTS){}
else {
MTS = MTS.slice(BEGIN_DATAMTS+11, END_DATAMTS);
}

var arr = (MT.substr(0)).split(/[\n\t]/g);
var arrMTS = (MTS.substr(0)).split(/[\n\t]/g);
var arrstr = (MT.substr(0)).split(/\n/g);
var arrstrMTS = (MTS.substr(0)).split(/\n/g);

len=arr.length;
lenMTS=arrMTS.length;
lenstr=arrstr.length;
lenstrMTS=arrstrMTS.length;
cols = len / lenstr;
colsMTS = lenMTS / lenstrMTS;
col=cols-3
colMTS=colsMTS-3
//col=labR;
//colMTS=labS;
//cols = col + 3;
//colsMTS = colMTS + 3;
magicfunc = 0;
if (lenstr != lenstrMTS){
	magicfunc = 1;
	}
if (document.forms[0].magic.checked){
	magicfunc = 1;
	}

if (magicfunc == 1)
{
	for (var is=0; is<lenstr; is++) {
	  arrrows = (arrstr[is].substr(0)).split(/\t/g)
	  	normal = arrrows.slice(labR-1,labR+2);
		normalstr=normal.length;
		normalCMYK_C[is] = parseInt(arrrows.slice(cmykR-1,cmykR));
		normalCMYK_M[is] = parseInt(arrrows.slice(cmykR,cmykR+1));
		normalCMYK_Y[is] = parseInt(arrrows.slice(cmykR+1,cmykR+2));
		normalCMYK_K[is] = parseInt(arrrows.slice(cmykR+2,cmykR+3));
		//alert(normalCMYK_C[is]);
		normalCMYK[is] = normalCMYK_C[is]+"\t"+normalCMYK_M[is]+"\t"+normalCMYK_Y[is]+"\t"+normalCMYK_K[is];
		normalCMYKstr=normalCMYK.length;
		//alert(normal);
		
		jr=0; 
		for (var js=0; js<normalstr; js=+3) {
			 jr = jr+1;
			Lab1Lars = Lab1Lars+normal[js]+'&';
		}
		var Lab1LarHH = (Lab1Lars.substr(0)).split('&');
		var Lab1LarHH = Lab1LarHH.slice(jr-1,jr-2);
		//alert(Lab1LarHH);
		
		jr=0; 
		for (var js=1; js<normalstr; js=+3) {
			 jr = jr+1;
			Lab1aars = Lab1aars+normal[js]+'&';
			//alert(Lab1aars);
		}
		var Lab1aarHH = (Lab1aars.substr(0)).split('&');
		var Lab1aarHH = Lab1aarHH.slice(jr-1,jr-2);
		
		jr=0; 
		for (var js=2; js<normalstr; js=+3) {
			 jr = jr+1;
			Lab1bars = Lab1bars+normal[js]+'&';
		}
		var Lab1barHH = (Lab1bars.substr(0)).split('&');
		var Lab1barHH = Lab1barHH.slice(jr-1,jr-2);
  }
	//alert(Lab1Lars);
  //alert(Lab1LarHH);
  //alert(normalCMYK[1]);

for (var is=0; is<lenstrMTS; is++) {
	  arrrowsMTS = (arrstrMTS[is].substr(0)).split(/\t/g)
	  	normalMTS = arrrowsMTS.slice(labS-1,labS+2);
		normalstrMTS=normalMTS.length;
		
		normalMTSCMYK_C[is] = parseInt(arrrowsMTS.slice(cmykS-1,cmykS));
		normalMTSCMYK_M[is] = parseInt(arrrowsMTS.slice(cmykS,cmykS+1));
		normalMTSCMYK_Y[is] = parseInt(arrrowsMTS.slice(cmykS+1,cmykS+2));
		normalMTSCMYK_K[is] = parseInt(arrrowsMTS.slice(cmykS+2,cmykS+3));
		//alert(normalCMYK_C[is]);
		normalMTSCMYK[is] = normalMTSCMYK_C[is]+"\t"+normalMTSCMYK_M[is]+"\t"+normalMTSCMYK_Y[is]+"\t"+normalMTSCMYK_K[is];
		normalMTSCMYKstr=normalMTSCMYK.length;
		
		jr=0; 
		for (var js=0; js<normalstrMTS; js=+3) {
			 jr = jr+1;
			Lab2Lars = Lab2Lars+normalMTS[js]+'&';
		}
		var Lab2LarHH = (Lab2Lars.substr(0)).split('&');
		var Lab2LarHH = Lab2LarHH.slice(jr-1,jr-2);
		
			jr=0; 
		for (var js=1; js<normalstrMTS; js=+3) {
			 jr = jr+1;
			Lab2aars = Lab2aars+normalMTS[js]+'&';
		}
		var Lab2aarHH = (Lab2aars.substr(0)).split('&');
		var Lab2aarHH = Lab2aarHH.slice(jr-1,jr-2);
		
				jr=0; 
		for (var js=2; js<normalstrMTS; js=+3) {
			 jr = jr+1;
			Lab2bars = Lab2bars+normalMTS[js]+'&';
		}
		var Lab2barHH = (Lab2bars.substr(0)).split('&');
		var Lab2barHH = Lab2barHH.slice(jr-1,jr-2); 
  }
  //alert(normalCMYK);
  //alert(normalMTSCMYK);
hyperu = new Array();
hyper = '';
us = -1;
  for (var u=0; u<normalCMYKstr; u++)
  {
	  strokaRef = String(normalCMYK[u]);
	for (var ug=0; ug<normalMTSCMYKstr; ug++)  
	{
		strokaSample = String(normalMTSCMYK[ug]);
		//alert(strokaRef+"   /   "+strokaSample);
		if(strokaRef == strokaSample)
		{
			us = us+1;
			hyperu[us] = Lab1LarHH[u]+"&"+Lab1aarHH[u]+"&"+Lab1barHH[u]+"&"+Lab2LarHH[ug]+"&"+Lab2aarHH[ug]+"&"+Lab2barHH[ug]+"&";
			}
	}
  }
  hyperulength = hyperu.length;
  
  //вырезаем повторяющиеся строки
  //alert(hyperulength);
 for (var x=0; x<us+1; x++)
 {
	 for (var y=x+1; y<us+1; y++)
	 {
		 if (hyperu[x] == hyperu[y])
		 {
			 hyperu[x] = '';
		 }
	 }
 }
 //все повторения обращены в ничто но длина массива прежняя
 for (var z=0; z<hyperulength; z++)
 {
	 //alert(hyperu[z]);
 hyper += hyperu[z];
 }
 
//alert(hyperulength+"   "+hyper);

if (hyper == '') {alert("Не найдено совпадений полей CMYK");}

else{
END_HYPER = MT.lastIndexOf("&");
hyper = hyper.slice(0, END_HYPER);

hyperlength = hyper.length;
//alert(hyperlength);
  //alert(hyper);
  

	if (hyperlength > 4104) {
document.post.X1.value = "?"+hyper;
document.post.submit(); }
else
{
	  	  window.location="http://rudtp.pp.ru/colordiff.php"+"?"+hyper+"#colors"
	  // или локально
	   //window.location=location.href+"?"+hyper
}

}
}


else {
proverka = "ok";
allert = '';
//if (lenstr != lenstrMTS)
//{proverka = "error";
//allert += 'количество строк в таблицах Reference и Sample не совпадает\n';}
//if (lenstr > 114)
//{proverka = "error";
//allert += 'строк в таблице Reference более 114\n';}
//if (lenstrMTS > 114)
//{proverka = "error";
//allert += 'строк в таблице Sample более 114\n';}
/*if (cols > 16)
{proverka = "error";
allert += 'колонок в таблице Reference более 16\n';}
if (colsMTS > 16)
{proverka = "error";
allert += 'колонок в таблице Sample более 16\n';}*/
if (cols < 3)
{proverka = "error";
allert += 'колонок в таблице Reference менее 3\n';}
if (colsMTS < 3)
{proverka = "error";
allert += 'колонок в таблице Sample менее 3\n';}

if (proverka == "error"){
alert("Ошибка во введенных данных:\n"+allert+"");}

else {

for (var is=0; is<lenstr; is++) {
	  arrrows = (arrstr[is].substr(0)).split(/\t/g)
	  	normal = arrrows.slice(labR-1,labR+2);
		normalstr=normal.length;
		normalCMYK_C[is] = parseInt(arrrows.slice(cmykR-1,cmykR));
		normalCMYK_M[is] = parseInt(arrrows.slice(cmykR,cmykR+1));
		normalCMYK_Y[is] = parseInt(arrrows.slice(cmykR+1,cmykR+2));
		normalCMYK_K[is] = parseInt(arrrows.slice(cmykR+2,cmykR+3));
		//alert(normalCMYK_C[is]);
		normalCMYK[is] = normalCMYK_C[is]+"\t"+normalCMYK_M[is]+"\t"+normalCMYK_Y[is]+"\t"+normalCMYK_K[is];
		normalCMYKstr=normalCMYK.length;
		//alert(normal);
		
		jr=0; 
		for (var js=0; js<normalstr; js=+3) {
			 jr = jr+1;
			Lab1Lars = Lab1Lars+normal[js]+'&';
		}
		var Lab1LarHH = (Lab1Lars.substr(0)).split('&');
		var Lab1LarHH = Lab1LarHH.slice(jr-1,jr-2);
		//alert(Lab1LarHH);
		
		jr=0; 
		for (var js=1; js<normalstr; js=+3) {
			 jr = jr+1;
			Lab1aars = Lab1aars+normal[js]+'&';
			//alert(Lab1aars);
		}
		var Lab1aarHH = (Lab1aars.substr(0)).split('&');
		var Lab1aarHH = Lab1aarHH.slice(jr-1,jr-2);
		
		jr=0; 
		for (var js=2; js<normalstr; js=+3) {
			 jr = jr+1;
			Lab1bars = Lab1bars+normal[js]+'&';
		}
		var Lab1barHH = (Lab1bars.substr(0)).split('&');
		var Lab1barHH = Lab1barHH.slice(jr-1,jr-2);
  }

for (var is=0; is<lenstrMTS; is++) {
	  arrrowsMTS = (arrstrMTS[is].substr(0)).split(/\t/g)
	  	normalMTS = arrrowsMTS.slice(labS-1,labS+2);
		normalstrMTS=normalMTS.length;
		
		normalMTSCMYK_C[is] = parseInt(arrrowsMTS.slice(cmykS-1,cmykS));
		normalMTSCMYK_M[is] = parseInt(arrrowsMTS.slice(cmykS,cmykS+1));
		normalMTSCMYK_Y[is] = parseInt(arrrowsMTS.slice(cmykS+1,cmykS+2));
		normalMTSCMYK_K[is] = parseInt(arrrowsMTS.slice(cmykS+2,cmykS+3));
		//alert(normalCMYK_C[is]);
		normalMTSCMYK[is] = normalMTSCMYK_C[is]+"\t"+normalMTSCMYK_M[is]+"\t"+normalMTSCMYK_Y[is]+"\t"+normalMTSCMYK_K[is];
		normalMTSCMYKstr=normalMTSCMYK.length;
		
		jr=0; 
		for (var js=0; js<normalstrMTS; js=+3) {
			 jr = jr+1;
			Lab2Lars = Lab2Lars+normalMTS[js]+'&';
		}
		var Lab2LarHH = (Lab2Lars.substr(0)).split('&');
		var Lab2LarHH = Lab2LarHH.slice(jr-1,jr-2);
		
			jr=0; 
		for (var js=1; js<normalstrMTS; js=+3) {
			 jr = jr+1;
			Lab2aars = Lab2aars+normalMTS[js]+'&';
		}
		var Lab2aarHH = (Lab2aars.substr(0)).split('&');
		var Lab2aarHH = Lab2aarHH.slice(jr-1,jr-2);
		
				jr=0; 
		for (var js=2; js<normalstrMTS; js=+3) {
			 jr = jr+1;
			Lab2bars = Lab2bars+normalMTS[js]+'&';
		}
		var Lab2barHH = (Lab2bars.substr(0)).split('&');
		var Lab2barHH = Lab2barHH.slice(jr-1,jr-2); 
  }

hyperu = new Array();
hyper = '';
us = -1;
  for (var u=0; u<normalCMYKstr; u++)
  {
	  //strokaRef = String(normalCMYK[u]);
	//for (var ug=0; ug<normalMTSCMYKstr; ug++)  
	//{
		//strokaSample = String(normalMTSCMYK[u]);
		//alert(strokaRef+"   /   "+strokaSample);
		//if(strokaRef == strokaSample)
		//{
			us = us+1;
			hyperu[us] = Lab1LarHH[u]+"&"+Lab1aarHH[u]+"&"+Lab1barHH[u]+"&"+Lab2LarHH[u]+"&"+Lab2aarHH[u]+"&"+Lab2barHH[u]+"&";
			//}
	//}
  }
  hyperulength = hyperu.length;
  
 //все повторения обращены в ничто но длина массива прежняя */
 for (var z=0; z<hyperulength; z++)
 {
	 //alert(hyperu[z]);
 hyper += hyperu[z];
 }
 
//alert(hyperulength+"   "+hyper);

if (hyper == '') {alert("Не найдено совпадений полей CMYK");}
else{
END_HYPER = MT.lastIndexOf("&");
hyper = hyper.slice(0, END_HYPER);

hyperlength = hyper.length;
//alert(hyperlength);
  //alert(hyper);
  

	if (hyperlength > 4104) {
document.post.X1.value = "?"+hyper;
document.post.submit(); }
else
{
	  	  window.location="http://rudtp.pp.ru/colordiff.php"+"?"+hyper+"#colors"
	  // или локально
	  // window.location=location.href+"?"+hyper
}
}
}
}	
}


function ButtonClear(theForm)
{
	theForm.Lab1_L.value = "";
	theForm.Lab1_a.value = "";
	theForm.Lab1_b.value = "";
	
	theForm.Lab2_L.value = "";
	theForm.Lab2_a.value = "";
	theForm.Lab2_b.value = "";
	
	theForm.LCh1_L.value = "";
	theForm.LCh1_C.value = "";
	theForm.LCh1_h.value = "";
	
	theForm.LCh2_L.value = "";
	theForm.LCh2_C.value = "";
	theForm.LCh2_h.value = "";
	
	theForm.DELTAh.value = "";
	theForm.DELTA_H.value = "";
	
	theForm.DE1976.value = "";
	theForm.DE1994_GraphicArts.value = "";
	theForm.DE1994_Textiles.value = "";
	
	theForm.DE2000.value = "";
	theForm.DE2011.value = "";
	theForm.DECMC_11.value = "";
	theForm.DECMC_21.value = "";
}

function ButtonCalculate(theForm)
{
	GetLab1(theForm);
	GetLab2(theForm);
	nulnul();
	getLCh();
	DeltaH();
	DeltaE1976();
	DeltaE1994(true);
	DeltaE1994(false);
	DeltaE2000();
	DeltaE2011();
	DeltaECMC(1.0, 1.0);
	DeltaECMC(2.0, 1.0);
	FillAllCells();
	LabtoXYZtosRGB();
	create_table();
}

function ButtonCalculate2(theForm)
{
	GetLCHab(theForm);
	LCHab2Lab();
	nulnul();
	DeltaH();
	DeltaE1976();
	DeltaE1994(true);
	DeltaE1994(false);
	DeltaE2000();
	DeltaE2011();
	DeltaECMC(1.0, 1.0);
	DeltaECMC(2.0, 1.0);
	FillAllCells(theForm);
	LabtoXYZtosRGB();
	create_table();
}

function FillAllCells(theForm)
{
	document.forms[0].Lab1_L.value = Lab1.L.toFixed(5);
	document.forms[0].Lab1_a.value = Lab1.a.toFixed(5);
	document.forms[0].Lab1_b.value = Lab1.b.toFixed(5);
	
	document.forms[0].Lab2_L.value = Lab2.L.toFixed(5);
	document.forms[0].Lab2_a.value = Lab2.a.toFixed(5);
	document.forms[0].Lab2_b.value = Lab2.b.toFixed(5);
	
	document.forms[0].LCh1_L.value = LCh1.L.toFixed(5);
	document.forms[0].LCh1_C.value = LCh1.C.toFixed(5);
	document.forms[0].LCh1_h.value = LCh1.h.toFixed(5);
	
	document.forms[0].LCh2_L.value = LCh2.L.toFixed(5);
	document.forms[0].LCh2_C.value = LCh2.C.toFixed(5);
	document.forms[0].LCh2_h.value = LCh2.h.toFixed(5);
	
	document.forms[0].DELTAh.value = Dh.toFixed(5);
	document.forms[0].DELTA_H.value = DH.toFixed(5);
	
	document.forms[0].DE1976.value = DE1976.toFixed(5);
	document.forms[0].DE1994_Textiles.value = DE1994_Textiles.toFixed(5);
	document.forms[0].DE1994_GraphicArts.value = DE1994_GraphicArts.toFixed(5);
	document.forms[0].DE2000.value = DE2000.toFixed(5);
	document.forms[0].DE2011.value = DE2011.toFixed(5);
	document.forms[0].DECMC_11.value = DECMC_11.toFixed(5);
	document.forms[0].DECMC_21.value = DECMC_21.toFixed(5);
}

function GetLab1(theForm)
{
	Lab1.L = GetNumber(theForm.Lab1_L.value);
	Lab1.a = GetNumber(theForm.Lab1_a.value);
	Lab1.b = GetNumber(theForm.Lab1_b.value);
	
	Lab1.L = (Lab1.L < 0.0) ? 0.0 : (Lab1.L > 100.0) ? 100.0 : Lab1.L;
}

function GetLab2(theForm)
{
	Lab2.L = GetNumber(theForm.Lab2_L.value);
	Lab2.a = GetNumber(theForm.Lab2_a.value);
	Lab2.b = GetNumber(theForm.Lab2_b.value);
	
	Lab2.L = (Lab2.L < 0.0) ? 0.0 : (Lab2.L > 100.0) ? 100.0 : Lab2.L;
}

function GetNumber(s)
{
	var van = replace_string(s,',','.');
	var val = parseFloat(van);
	return(isNaN(val) ? 0.0 : val);
}

function nulnul()
{
	if (Lab1.a == Lab1.b && Lab1.a == 0.0)
	{
		Lab1.a = 0.000000000000001;
	}
	if (Lab2.a == Lab2.b && Lab2.a == 0.0)
	{
		Lab2.a = 0.000000000000001;
	}
}

function GetLCHab(theForm)
{
	LCh1.L = GetNumber(theForm.LCh1_L.value);
	LCh1.C = GetNumber(theForm.LCh1_C.value);
	LCh1.h = GetNumber(theForm.LCh1_h.value);
	
	LCh1.L = (LCh1.L < 0.0) ? 0.0 : (LCh1.L > 100.0) ? 100.0 : LCh1.L;
	LCh1.C = (LCh1.C < 0.0) ? 0.0 : LCh1.C;
	while (LCh1.h < 0.0)
	{
		LCh1.h += 360.0;
	}
	while (LCh1.h >= 360.0)
	{
		LCh1.h -= 360.0;
	}
	
	LCh2.L = GetNumber(theForm.LCh2_L.value);
	LCh2.C = GetNumber(theForm.LCh2_C.value);
	LCh2.h = GetNumber(theForm.LCh2_h.value);
	
	LCh2.L = (LCh2.L < 0.0) ? 0.0 : (LCh2.L > 100.0) ? 100.0 : LCh2.L;
	LCh2.C = (LCh2.C < 0.0) ? 0.0 : LCh2.C;
	while (LCh1.h < 0.0)
	{
		LCh2.h += 360.0;
	}
	while (LCh2.h >= 360.0)
	{
		LCh2.h -= 360.0;
	}
	if (LCh1.h == 275.0 && LCh1.h == LCh2.h)
	{
		LCh1.h = 275.000000000000001;
	}
}

function LCHab2Lab()
{
	Lab1.L = LCh1.L;
	Lab1.a = LCh1.C * Math.cos(LCh1.h * Math.PI / 180.0);
	Lab1.b = LCh1.C * Math.sin(LCh1.h * Math.PI / 180.0);
	Lab2.L = LCh2.L;
	Lab2.a = LCh2.C * Math.cos(LCh2.h * Math.PI / 180.0);
	Lab2.b = LCh2.C * Math.sin(LCh2.h * Math.PI / 180.0);
}

function getLCh()
{
	var LCh1_L = Lab1.L;
	var LCh2_L = Lab2.L;
	var LCh1_C = Math.sqrt(Math.pow(Lab1.a, 2) + Math.pow(Lab1.b, 2));
	var LCh2_C = Math.sqrt(Math.pow(Lab2.a, 2) + Math.pow(Lab2.b, 2));
	var LCh1_h = Math.atan2(Lab1.b, Lab1.a) * 180.0 / Math.PI;
	if (LCh1_h < 0) 
	LCh1_h=LCh1_h+360;
	if (LCh1_h >= 360)
	LCh1_h=LCh1_h-360;
	var LCh2_h = Math.atan2(Lab2.b, Lab2.a) * 180.0 / Math.PI;
	if (LCh2_h < 0) 
	LCh2_h=LCh2_h+360;
	if (LCh2_h >= 360)
	LCh2_h=LCh2_h-360;
	LCh1.L = GetNumber(LCh1_L);
	LCh2.L = GetNumber(LCh2_L);
	LCh1.C = GetNumber(LCh1_C);
	LCh2.C = GetNumber(LCh2_C);
	LCh1.h = GetNumber(LCh1_h);
	LCh2.h = GetNumber(LCh2_h);

}

function DeltaH()
{
	Dh = Math.abs(LCh1.h - LCh2.h);
	if (Dh > 180)
	{Dh = 360 - Dh};
	var deltaL = Math.abs(Lab1.L - Lab2.L);
	var deltaC = Math.abs(LCh1.C - LCh2.C);
	var delL = parseFloat(Lab1.L - Lab2.L);
	var dela = parseFloat(Lab1.a - Lab2.a);
	var delb = parseFloat(Lab1.b - Lab2.b);
	DE1976 = parseFloat(Math.sqrt(delL * delL + dela * dela + delb * delb));
	DH = GetNumber(Math.sqrt(DE1976 * DE1976 - deltaL * deltaL - deltaC * deltaC));
}

function DeltaE1976()
{
	var delL = Lab1.L - Lab2.L;
	var dela = Lab1.a - Lab2.a;
	var delb = Lab1.b - Lab2.b;
	DE1976 = Math.sqrt(delL * delL + dela * dela + delb * delb);
	
}

function DeltaE1994(textiles)
{
	var k1 = (textiles == true) ? 0.048 : 0.045;
	var k2 = (textiles == true) ? 0.014 : 0.015;
	var kL = (textiles == true) ? 2.0 : 1.0;
	var kC = 1.0;
	var kH = 1.0;

	var C1 = Math.sqrt(Lab1.a * Lab1.a + Lab1.b * Lab1.b);
	var C2 = Math.sqrt(Lab2.a * Lab2.a + Lab2.b * Lab2.b);
	
	var delA = Lab1.a - Lab2.a;
	var delB = Lab1.b - Lab2.b;
	var delC = C1 - C2;
	var delH = Math.sqrt(delA * delA + delB * delB - delC * delC);
	var delL = Lab1.L - Lab2.L;
	
	var sL = 1.0;
	var sC = 1.0 + k1 * C1;
	var sH = 1.0 + k2 * C1;
	
	var vL = delL / (kL * sL);
	var vC = delC / (kC * sC);
	var vH = delH / (kH * sH);
	
	if (textiles == true)
	{
		DE1994_Textiles = Math.sqrt(vL * vL + vC * vC + vH * vH);
	}
	else
	{
		DE1994_GraphicArts = Math.sqrt(vL * vL + vC * vC + vH * vH);
	}
}

function DeltaE2000()
{
	var kL = 1.0;
	var kC = 1.0;
	var kH = 1.0;
	var lBarPrime = 0.5 * (Lab1.L + Lab2.L);
	var c1 = Math.sqrt(Lab1.a * Lab1.a + Lab1.b * Lab1.b);
	var c2 = Math.sqrt(Lab2.a * Lab2.a + Lab2.b * Lab2.b);
	var cBar = 0.5 * (c1 + c2);
	var cBar7 = cBar * cBar * cBar * cBar * cBar * cBar * cBar;
	var g = 0.5 * (1.0 - Math.sqrt(cBar7 / (cBar7 + 6103515625.0)));	/* 6103515625 = 25^7 */
	var a1Prime = Lab1.a * (1.0 + g);
	var a2Prime = Lab2.a * (1.0 + g);
	var c1Prime = Math.sqrt(a1Prime * a1Prime + Lab1.b * Lab1.b);
	var c2Prime = Math.sqrt(a2Prime * a2Prime + Lab2.b * Lab2.b);
	var cBarPrime = 0.5 * (c1Prime + c2Prime);
	var h1Prime = (Math.atan2(Lab1.b, a1Prime) * 180.0) / Math.PI;
	if (h1Prime < 0.0)
		h1Prime += 360.0;
	var h2Prime = (Math.atan2(Lab2.b, a2Prime) * 180.0) / Math.PI;
	if (h2Prime < 0.0)
		h2Prime += 360.0;
	var hBarPrime = (Math.abs(h1Prime - h2Prime) > 180.0) ? (0.5 * (h1Prime + h2Prime + 360.0)) : (0.5 * (h1Prime + h2Prime));
	var t = 1.0 -
			0.17 * Math.cos(Math.PI * (      hBarPrime - 30.0) / 180.0) +
			0.24 * Math.cos(Math.PI * (2.0 * hBarPrime       ) / 180.0) +
			0.32 * Math.cos(Math.PI * (3.0 * hBarPrime +  6.0) / 180.0) -
			0.20 * Math.cos(Math.PI * (4.0 * hBarPrime - 63.0) / 180.0);
	if (Math.abs(h2Prime - h1Prime) <= 180.0) 
		dhPrime = h2Prime - h1Prime;
	else 
		dhPrime = (h2Prime <= h1Prime) ? (h2Prime - h1Prime + 360.0) : (h2Prime - h1Prime - 360.0);
	var dLPrime = Lab2.L - Lab1.L;
	var dCPrime = c2Prime - c1Prime;
	var dHPrime = 2.0 * Math.sqrt(c1Prime * c2Prime) * Math.sin(Math.PI * (0.5 * dhPrime) / 180.0);
	var sL = 1.0 + ((0.015 * (lBarPrime - 50.0) * (lBarPrime - 50.0)) / Math.sqrt(20.0 + (lBarPrime - 50.0) * (lBarPrime - 50.0)));
	var sC = 1.0 + 0.045 * cBarPrime;
	var sH = 1.0 + 0.015 * cBarPrime * t;
	var dTheta = 30.0 * Math.exp(-((hBarPrime - 275.0) / 25.0) * ((hBarPrime - 275.0) / 25.0));
	var cBarPrime7 = cBarPrime * cBarPrime * cBarPrime * cBarPrime * cBarPrime * cBarPrime * cBarPrime;
	var rC = Math.sqrt(cBarPrime7 / (cBarPrime7 + 6103515625.0));
	var rT = -2.0 * rC * Math.sin(Math.PI * (2.0 * dTheta) / 180.0);
	DE2000 = Math.sqrt(
				(dLPrime / (kL * sL)) * (dLPrime / (kL * sL)) +
				(dCPrime / (kC * sC)) * (dCPrime / (kC * sC)) +
				(dHPrime / (kH * sH)) * (dHPrime / (kH * sH)) +
				(dCPrime / (kC * sC)) * (dHPrime / (kH * sH)) * rT);
}

function DeltaE2011()
{
	var kL = 0.67;
	var kC = 0.67;
	var kH = 0.67;
	var lBarPrime = 0.5 * (Lab1.L + Lab2.L);
	var c1 = Math.sqrt(Lab1.a * Lab1.a + Lab1.b * Lab1.b);
	var c2 = Math.sqrt(Lab2.a * Lab2.a + Lab2.b * Lab2.b);
	var cBar = 0.5 * (c1 + c2);
	var cBar7 = cBar * cBar * cBar * cBar * cBar * cBar * cBar;
	var g = 0.5 * (1.0 - Math.sqrt(cBar7 / (cBar7 + 6103515625.0)));	/* 6103515625 = 25^7 */
	var a1Prime = Lab1.a * (1.0 + g);
	var a2Prime = Lab2.a * (1.0 + g);
	var c1Prime = Math.sqrt(a1Prime * a1Prime + Lab1.b * Lab1.b);
	var c2Prime = Math.sqrt(a2Prime * a2Prime + Lab2.b * Lab2.b);
	var cBarPrime = 0.5 * (c1Prime + c2Prime);
	var h1Prime = (Math.atan2(Lab1.b, a1Prime) * 180.0) / Math.PI;
	if (h1Prime < 0.0)
		h1Prime += 360.0;
	var h2Prime = (Math.atan2(Lab2.b, a2Prime) * 180.0) / Math.PI;
	if (h2Prime < 0.0)
		h2Prime += 360.0;
	var hBarPrime = (Math.abs(h1Prime - h2Prime) > 180.0) ? (0.5 * (h1Prime + h2Prime + 360.0)) : (0.5 * (h1Prime + h2Prime));
	var t = 1.0 -
			0.17 * Math.cos(Math.PI * (      hBarPrime - 30.0) / 180.0) +
			0.24 * Math.cos(Math.PI * (2.0 * hBarPrime       ) / 180.0) +
			0.32 * Math.cos(Math.PI * (3.0 * hBarPrime +  6.0) / 180.0) -
			0.20 * Math.cos(Math.PI * (4.0 * hBarPrime - 63.0) / 180.0);
	if (Math.abs(h2Prime - h1Prime) <= 180.0) 
		dhPrime = h2Prime - h1Prime;
	else 
		dhPrime = (h2Prime <= h1Prime) ? (h2Prime - h1Prime + 360.0) : (h2Prime - h1Prime - 360.0);
	var dLPrime = Lab2.L - Lab1.L;
	var dCPrime = c2Prime - c1Prime;
	var dHPrime = 2.0 * Math.sqrt(c1Prime * c2Prime) * Math.sin(Math.PI * (0.5 * dhPrime) / 180.0);
	var sL = 1.0 + ((0.015 * (lBarPrime - 50.0) * (lBarPrime - 50.0)) / Math.sqrt(20.0 + (lBarPrime - 50.0) * (lBarPrime - 50.0)));
	var sC = 1.0 + 0.045 * cBarPrime;
	var sH = 1.0 + 0.015 * cBarPrime * t;
	var dTheta = 30.0 * Math.exp(-((hBarPrime - 275.0) / 25.0) * ((hBarPrime - 275.0) / 25.0));
	var cBarPrime7 = cBarPrime * cBarPrime * cBarPrime * cBarPrime * cBarPrime * cBarPrime * cBarPrime;
	var rC = Math.sqrt(cBarPrime7 / (cBarPrime7 + 6103515625.0));
	var rT = -2.0 * rC * Math.sin(Math.PI * (2.0 * dTheta) / 180.0);
	DE2011 = Math.sqrt(
				(dLPrime / (kL * sL)) * (dLPrime / (kL * sL)) +
				(dCPrime / (kC * sC)) * (dCPrime / (kC * sC)) +
				(dHPrime / (kH * sH)) * (dHPrime / (kH * sH)) +
				(dCPrime / (kC * sC)) * (dHPrime / (kH * sH)) * rT);
	
	if (DE2011 >= 5)
	{warningY2011 = "<span class='alertY'>";
	warningYend2011 = "</span>";}
	else {warningY2011 = "";
	warningYend2011 = "";}
}

function DeltaECMC(L, C)
{
	var c1 = Math.sqrt(Lab1.a * Lab1.a + Lab1.b * Lab1.b);
	var c2 = Math.sqrt(Lab2.a * Lab2.a + Lab2.b * Lab2.b);
	var sl = (Lab1.L < 16.0) ? (0.511) : ((0.040975 * Lab1.L) / (1.0 + 0.01765 * Lab1.L));
	var sc = (0.0638 * c1) / (1.0 + 0.0131 * c1) + 0.638;
	var h1 = (c1 < 0.000001) ? 0.0 : ((Math.atan2(Lab1.b, Lab1.a) * 180.0) / Math.PI);
	while (h1 < 0.0)
		h1 += 360.0;
	while (h1 >= 360.0)
		h1 -= 360.0;
	var t = ((h1 >= 164.0) && (h1 <= 345.0)) ? (0.56 + Math.abs(0.2 * Math.cos((Math.PI * (h1 + 168.0)) / 180.0))) : (0.36 + Math.abs(0.4 * Math.cos((Math.PI * (h1 + 35.0)) / 180.0)));
	var c4 = c1 * c1 * c1 * c1;
	var f = Math.sqrt(c4 / (c4 + 1900.0));
	var sh = sc * (f * t + 1.0 - f);
	var delL = Lab1.L - Lab2.L;
	var delC = c1 - c2;
	var delA = Lab1.a - Lab2.a;
	var delB = Lab1.b - Lab2.b;
	var dH2 = delA * delA + delB * delB - delC * delC;
	var v1 = delL / (L * sl);
	var v2 = delC / (C * sc);
	var v3 = sh;
	if (L == 2.0)
	{
		DECMC_21 = Math.sqrt(v1 * v1 + v2 * v2 + (dH2 / (v3 * v3)));
	}
	else
	{
		DECMC_11 = Math.sqrt(v1 * v1 + v2 * v2 + (dH2 / (v3 * v3)));
	}
}

function LabtoXYZtosRGB()
{
	var gamma = 1/2.2;
	var Xwp = 96.42;
	var Ywp = 100;
	var Zwp = 82.49;
	//var Xwp = 0.846;
	//var Ywp = 0.877;
	//var Zwp = 0.747;
	/D50/
	var e = 216/24389;
	var k = 24389/27;
	var ke = k * e;
	var fY1 = (Lab1.L + 16) / 116;
	var fY2 = (Lab2.L + 16) / 116;
	var fZ1 = fY1 - Lab1.b/200;
	var fZ2 = fY2 - Lab2.b/200;
	var fX1 = Lab1.a/500 + fY1;
	var fX2 = Lab2.a/500 + fY2;
	var fX1_3 = fX1 * fX1 * fX1;
	var fX2_3 = fX2 * fX2 * fX2;
	var fZ1_3 = fZ1 * fZ1 * fZ1;
	var fZ2_3 = fZ2 * fZ2 * fZ2;
	if (fX1_3 > e)
	{
		xr1 = fX1_3;
	}
	else
	{
		xr1 = (116 * fX1 - 16) / k;
	}
	if (fX2_3 > e)
	{
		xr2 = fX2_3;
	}
	else
	{
		xr2 = (116 * fX2 - 16) / k;
	}
	if (Lab1.L > ke)
	{
		yr1 = ((Lab1.L + 16) / 116) * ((Lab1.L + 16) / 116) * ((Lab1.L + 16) / 116);
	}
	else
	{
		yr1 = Lab1.L / k;
	}
		if (Lab2.L > ke)
	{
		yr2 = ((Lab2.L + 16) / 116) * ((Lab2.L + 16) / 116) * ((Lab2.L + 16) / 116);
	}
	else
	{
		yr2 = Lab2.L / k;
	}
	if (fZ1_3 > e)
	{
		zr1 = fZ1_3;
	}
	else
	{
		zr1 = (116 * fZ1 - 16) / k;
	}
	if (fZ2_3 > e)
	{
		zr2 = fZ2_3;
	}
	else
	{
		zr2 = (116 * fZ2 - 16) / k;
	}
	X1 = Xwp * xr1;
	X2 = Xwp * xr2;
	Y1 = Ywp * yr1;
	Y2 = Ywp * yr2;
	Z1 = Zwp * zr1;
	Z2 = Zwp * zr2;
	//X1 = X1/100;
	//X2 = X2/100;
	//Y1 = Y1/100;
	//Y2 = Y2/100;
	//Z1 - Z1/100;
	//Z2 = Z2/100;
	//alert('XYZ Ref= ' + X1 + '    ' + Y1 + '    ' + Z1 + '   ' + '\nXYZ Sample= ' + X2 + '   ' + Y2 + '   ' + Z2);
	/sRGB D65/
	var RX = {r:3.2404541621, g:-1.5371385128, b:-0.4985314096};
	var GY = {r:-0.9692660305, g:1.8760108454, b:0.0415560175};
	var BZ = {r:0.0556434310, g:-0.2040259135, b:1.0572251882};
	/bradford/
	var MtxAdaptMa = {m00:0.8951, m01:-0.7502, m02:0.0389, m10:0.2664, m11:1.7135, m12:-0.0685, m20:-0.1614, m21:0.0367, m22:1.0296};
	var MtxAdaptMaI = {m00:0.986993, m01:0.432305, m02:-0.00852866, m10:-0.147054, m11:0.518360, m12:0.0400428, m20:0.159963, m21:0.0492912, m22:0.968487};
	var RefWhite = {X:0.96422, Y:1.00000, Z:0.82521};
/d65/
	var RefWhiteRGB = {X:0.95047, Y:1.00000, Z:1.08883};
		var As = RefWhite.X * MtxAdaptMa.m00 + RefWhite.Y * MtxAdaptMa.m10 + RefWhite.Z * MtxAdaptMa.m20;
		var Bs = RefWhite.X * MtxAdaptMa.m01 + RefWhite.Y * MtxAdaptMa.m11 + RefWhite.Z * MtxAdaptMa.m21;
		var Cs = RefWhite.X * MtxAdaptMa.m02 + RefWhite.Y * MtxAdaptMa.m12 + RefWhite.Z * MtxAdaptMa.m22;
		var Ad = RefWhiteRGB.X * MtxAdaptMa.m00 + RefWhiteRGB.Y * MtxAdaptMa.m10 + RefWhiteRGB.Z * MtxAdaptMa.m20;
		var Bd = RefWhiteRGB.X * MtxAdaptMa.m01 + RefWhiteRGB.Y * MtxAdaptMa.m11 + RefWhiteRGB.Z * MtxAdaptMa.m21;
		var Cd = RefWhiteRGB.X * MtxAdaptMa.m02 + RefWhiteRGB.Y * MtxAdaptMa.m12 + RefWhiteRGB.Z * MtxAdaptMa.m22;
		var X1a = X1 * MtxAdaptMa.m00 + Y1 * MtxAdaptMa.m10 + Z1 * MtxAdaptMa.m20;
		var X2a = X2 * MtxAdaptMa.m00 + Y2 * MtxAdaptMa.m10 + Z2 * MtxAdaptMa.m20;
		var Y1a = X1 * MtxAdaptMa.m01 + Y1 * MtxAdaptMa.m11 + Z1 * MtxAdaptMa.m21;
		var Y2a = X2 * MtxAdaptMa.m01 + Y2 * MtxAdaptMa.m11 + Z2 * MtxAdaptMa.m21;
		var Z1a = X1 * MtxAdaptMa.m02 + Y1 * MtxAdaptMa.m12 + Z1 * MtxAdaptMa.m22;
		var Z2a = X2 * MtxAdaptMa.m02 + Y2 * MtxAdaptMa.m12 + Z2 * MtxAdaptMa.m22;
		X1a *= (Ad / As);
		Y1a *= (Bd / Bs);
		Z1a *= (Cd / Cs);
		X2a *= (Ad / As);
		Y2a *= (Bd / Bs);
		Z2a *= (Cd / Cs);
		X1b = X1a * MtxAdaptMaI.m00 + Y1a * MtxAdaptMaI.m10 + Z1a * MtxAdaptMaI.m20;
		Y1b = X1a * MtxAdaptMaI.m01 + Y1a * MtxAdaptMaI.m11 + Z1a * MtxAdaptMaI.m21;
		Z1b = X1a * MtxAdaptMaI.m02 + Y1a * MtxAdaptMaI.m12 + Z1a * MtxAdaptMaI.m22;
		X2b = X2a * MtxAdaptMaI.m00 + Y2a * MtxAdaptMaI.m10 + Z2a * MtxAdaptMaI.m20;
		Y2b = X2a * MtxAdaptMaI.m01 + Y2a * MtxAdaptMaI.m11 + Z2a * MtxAdaptMaI.m21;
		Z2b = X2a * MtxAdaptMaI.m02 + Y2a * MtxAdaptMaI.m12 + Z2a * MtxAdaptMaI.m22;
	R1a = (RX.r*X1b + RX.g*Y1b + RX.b*Z1b) *255/100;
	R2a = (RX.r*X2b + RX.g*Y2b + RX.b*Z2b) *255/100;
	G1a = (GY.r*X1b + GY.g*Y1b + GY.b*Z1b) *255/100;
	G2a = (GY.r*X2b + GY.g*Y2b + GY.b*Z2b) *255/100;
	B1a = (BZ.r*X1b + BZ.g*Y1b + BZ.b*Z1b) *255/100;
	B2a = (BZ.r*X2b + BZ.g*Y2b + BZ.b*Z2b) *255/100;
	R1b = R1a/255;
	R2b = R2a/255;
	G1b = G1a/255;
	G2b = G2a/255;
	B1b = B1a/255;
	B2b = B2a/255;
	
	if (document.forms[0].radio1[0].checked){
	if (R1b>=0) {R1 = Math.round((Math.pow(R1b, gamma))*255);}
	else {R1 = Math.round((-Math.pow(-R1b, gamma))*255);}
	if (R2b>=0) {R2 = Math.round((Math.pow(R2b, gamma))*255);}
	else {R2 = Math.round((-Math.pow(-R2b, gamma))*255);}
	if (G1b>=0) {G1 = Math.round((Math.pow(G1b, gamma))*255);}
	else {G1 = Math.round((-Math.pow(-G1b, gamma))*255);}
	if (G2b>=0) {G2 = Math.round((Math.pow(G2b, gamma))*255);}
	else {G2 = Math.round((-Math.pow(-G2b, gamma))*255);}
	if (B1b>=0) {B1 = Math.round((Math.pow(B1b, gamma))*255);}
	else {B1 = Math.round((-Math.pow(-B1b, gamma))*255);}
	if (B2b>=0) {B2 = Math.round((Math.pow(B2b, gamma))*255);}
	else {B2 = Math.round((-Math.pow(-B2b, gamma))*255);}
	}
	
	else{
		//gamma sRGB Companding
	if (R1b <= 0.0031308){R1 = Math.round(12.92 * R1b * 255);}
	else {R1 = Math.round((1.055 * Math.pow(R1b, 1.0 / 2.4) - 0.055)*255);}
	if (R2b <= 0.0031308){R2 = Math.round(12.92 * R2b * 255);}
	else {R2 = Math.round((1.055 * Math.pow(R2b, 1.0 / 2.4) - 0.055)*255);}
	if (G1b <= 0.0031308){G1 = Math.round(12.92 * G1b * 255);}
	else {G1 = Math.round((1.055 * Math.pow(G1b, 1.0 / 2.4) - 0.055)*255);}
	if (G2b <= 0.0031308){G2 = Math.round(12.92 * G2b * 255);}
	else {G2 = Math.round((1.055 * Math.pow(G2b, 1.0 / 2.4) - 0.055)*255);}
	if (B1b <= 0.0031308){B1 = Math.round(12.92 * B1b * 255);}
	else {B1 = Math.round((1.055 * Math.pow(B1b, 1.0 / 2.4) - 0.055)*255);}
	if (B2b <= 0.0031308){B2 = Math.round(12.92 * B2b * 255);}
	else {B2 = Math.round((1.055 * Math.pow(B2b, 1.0 / 2.4) - 0.055)*255);}
	}
	
	nullcontrol = 1;
	nullcontrola = 1;
	nullcontrolb = 1;
	warning = "";
	warninga = "";
	warningb = "";
	warningaa = "Reference ";
	warningbb = "Sample ";
	if (R1>255){R1=255; 
	nullcontrol = 0;
	nullcontrola = 0;};
	if (R2>255){R2=255; 
	nullcontrol = 0;
	nullcontrolb = 0;};
	if (G1>255){G1=255; 
	nullcontrol = 0;
	nullcontrola = 0;};
	if (G2>255){G2=255; 
	nullcontrol = 0;
	nullcontrolb = 0;};
	if (B1>255){B1=255; 
	nullcontrol = 0;
	nullcontrola = 0;};
	if (B2>255){B2=255; 
	nullcontrol = 0;
	nullcontrolb = 0;};
	if (R1<0){R1=0;
	nullcontrol = 0;
	nullcontrola = 0;};
	if (R2<0){R2=0;
	nullcontrol = 0;
	nullcontrolb = 0;};
	if (G1<0){G1=0;
	nullcontrol = 0;
	nullcontrola = 0;};
	if (G2<0){G2=0;
	nullcontrol = 0;
	nullcontrolb = 0;};
	if (B1<0){B1=0;
	nullcontrol = 0;
	nullcontrola = 0;};
	if (B2<0){B2=0;
	nullcontrol = 0;
	nullcontrolb = 0;};
	
	if (nullcontrol == 0){
		//alert2();
	warning = "<br>Внимание! Некоторые Lab-координаты находятся за границами цветового охвата sRGB!";};
	
	if (nullcontrola == 0) 
	{warninga = "<br>Warning! Out of Gamut!<br>Оттенок передан недостоверно";
	warningaa = "Out of gamut! ";};
	
	if (nullcontrolb == 0) 
	{warningb = "<br>Warning! Out of Gamut!<br>Оттенок передан недостоверно";
	warningbb = "Out of gamut! ";};
	
	if (DE1976 >= 5)
	{warningY = "<span class='alertY'>";
	warningYend = "</span>";}
	else {warningY = "";
	warningYend = "";}
	
var hexarray= new Array(256);
hexarray[0]="00"; hexarray[1]="01"; hexarray[2]="02"; hexarray[3]="03"; hexarray[4]="04"; hexarray[5]="05"; hexarray[6]="06"; hexarray[7]="07"; hexarray[8]="08"; hexarray[9]="09"; hexarray[10]="0A"; hexarray[11]="0B"; hexarray[12]="0C"; hexarray[13]="0D"; hexarray[14]="0E"; hexarray[15]="0F"; hexarray[16]="10"; hexarray[17]="11"; hexarray[18]="12"; hexarray[19]="13"; hexarray[20]="14"; hexarray[21]="15"; hexarray[22]="16"; hexarray[23]="17"; hexarray[24]="18"; hexarray[25]="19"; hexarray[26]="1A"; hexarray[27]="1B"; hexarray[28]="1C"; hexarray[29]="1D"; hexarray[30]="1E"; hexarray[31]="1F"; hexarray[32]="20"; hexarray[33]="21"; hexarray[34]="22"; hexarray[35]="23"; hexarray[36]="24"; hexarray[37]="25"; hexarray[38]="26"; hexarray[39]="27"; hexarray[40]="28"; hexarray[41]="29"; hexarray[42]="2A"; hexarray[43]="2B"; hexarray[44]="2C"; hexarray[45]="2D"; hexarray[46]="2E"; hexarray[47]="2F"; hexarray[48]="30"; hexarray[49]="31"; hexarray[50]="32"; hexarray[51]="33"; hexarray[52]="34"; hexarray[53]="35"; hexarray[54]="36"; hexarray[55]="37"; hexarray[56]="38"; hexarray[57]="39"; hexarray[58]="3A"; hexarray[59]="3B"; hexarray[60]="3C"; hexarray[61]="3D"; hexarray[62]="3E"; hexarray[63]="3F"; hexarray[64]="40"; hexarray[65]="41"; hexarray[66]="42"; hexarray[67]="43"; hexarray[68]="44"; hexarray[69]="45"; hexarray[70]="46"; hexarray[71]="47"; hexarray[72]="48"; hexarray[73]="49"; hexarray[74]="4A"; hexarray[75]="4B"; hexarray[76]="4C"; hexarray[77]="4D"; hexarray[78]="4E"; hexarray[79]="4F"; hexarray[80]="50"; hexarray[81]="51"; hexarray[82]="52"; hexarray[83]="53"; hexarray[84]="54"; hexarray[85]="55"; hexarray[86]="56"; hexarray[87]="57"; hexarray[88]="58"; hexarray[89]="59"; hexarray[90]="5A"; hexarray[91]="5B"; hexarray[92]="5C"; hexarray[93]="5D"; hexarray[94]="5E"; hexarray[95]="5F"; hexarray[96]="60"; hexarray[97]="61"; hexarray[98]="62"; hexarray[99]="63"; hexarray[100]="64"; hexarray[101]="65"; hexarray[102]="66"; hexarray[103]="67"; hexarray[104]="68"; hexarray[105]="69"; hexarray[106]="6A"; hexarray[107]="6B"; hexarray[108]="6C"; hexarray[109]="6D"; hexarray[110]="6E"; hexarray[111]="6F"; hexarray[112]="70"; hexarray[113]="71"; hexarray[114]="72"; hexarray[115]="73"; hexarray[116]="74"; hexarray[117]="75"; hexarray[118]="76"; hexarray[119]="77"; hexarray[120]="78"; hexarray[121]="79"; hexarray[122]="7A"; hexarray[123]="7B"; hexarray[124]="7C"; hexarray[125]="7D"; hexarray[126]="7E"; hexarray[127]="7F"; hexarray[128]="80"; hexarray[129]="81"; hexarray[130]="82"; hexarray[131]="83"; hexarray[132]="84"; hexarray[133]="85"; hexarray[134]="86"; hexarray[135]="87"; hexarray[136]="88"; hexarray[137]="89"; hexarray[138]="8A"; hexarray[139]="8B"; hexarray[140]="8C"; hexarray[141]="8D"; hexarray[142]="8E"; hexarray[143]="8F"; hexarray[144]="90"; hexarray[145]="91"; hexarray[146]="92"; hexarray[147]="93"; hexarray[148]="94"; hexarray[149]="95"; hexarray[150]="96"; hexarray[151]="97"; hexarray[152]="98"; hexarray[153]="99"; hexarray[154]="9A"; hexarray[155]="9B"; hexarray[156]="9C"; hexarray[157]="9D"; hexarray[158]="9E"; hexarray[159]="9F"; hexarray[160]="A0"; hexarray[161]="A1"; hexarray[162]="A2"; hexarray[163]="A3"; hexarray[164]="A4"; hexarray[165]="A5"; hexarray[166]="A6"; hexarray[167]="A7"; hexarray[168]="A8"; hexarray[169]="A9"; hexarray[170]="AA"; hexarray[171]="AB"; hexarray[172]="AC"; hexarray[173]="AD"; hexarray[174]="AE"; hexarray[175]="AF"; hexarray[176]="B0"; hexarray[177]="B1"; hexarray[178]="B2"; hexarray[179]="B3"; hexarray[180]="B4"; hexarray[181]="B5"; hexarray[182]="B6"; hexarray[183]="B7"; hexarray[184]="B8"; hexarray[185]="B9"; hexarray[186]="BA"; hexarray[187]="BB"; hexarray[188]="BC"; hexarray[189]="BD"; hexarray[190]="BE"; hexarray[191]="BF"; hexarray[192]="C0"; hexarray[193]="C1"; hexarray[194]="C2"; hexarray[195]="C3"; hexarray[196]="C4"; hexarray[197]="C5"; hexarray[198]="C6"; hexarray[199]="C7"; hexarray[200]="C8"; hexarray[201]="C9"; hexarray[202]="CA"; hexarray[203]="CB"; hexarray[204]="CC"; hexarray[205]="CD"; hexarray[206]="CE"; hexarray[207]="CF"; hexarray[208]="D0"; hexarray[209]="D1"; hexarray[210]="D2"; hexarray[211]="D3"; hexarray[212]="D4"; hexarray[213]="D5"; hexarray[214]="D6"; hexarray[215]="D7"; hexarray[216]="D8"; hexarray[217]="D9"; hexarray[218]="DA"; hexarray[219]="DB"; hexarray[220]="DC"; hexarray[221]="DD"; hexarray[222]="DE"; hexarray[223]="DF"; hexarray[224]="E0"; hexarray[225]="E1"; hexarray[226]="E2"; hexarray[227]="E3"; hexarray[228]="E4"; hexarray[229]="E5"; hexarray[230]="E6"; hexarray[231]="E7"; hexarray[232]="E8"; hexarray[233]="E9"; hexarray[234]="EA"; hexarray[235]="EB"; hexarray[236]="EC"; hexarray[237]="ED"; hexarray[238]="EE"; hexarray[239]="EF"; hexarray[240]="F0"; hexarray[241]="F1"; hexarray[242]="F2"; hexarray[243]="F3"; hexarray[244]="F4"; hexarray[245]="F5"; hexarray[246]="F6"; hexarray[247]="F7"; hexarray[248]="F8"; hexarray[249]="F9"; hexarray[250]="FA"; hexarray[251]="FB"; hexarray[252]="FC"; hexarray[253]="FD"; hexarray[254]="FE"; hexarray[255]="FF";  

hexcode1 = "#" + hexarray[R1] + hexarray[G1] + hexarray[B1];
hexcode2 = "#" + hexarray[R2] + hexarray[G2] + hexarray[B2];

// alert(R1 +'  /  '+ G1 +'  /  ' + B1+ '  :  ' +R2+'  /  ' + G2+'  /  '+ B2);
}

function create_table()
{
  /html table/
var newDiv = document.createElement('div'); 
//alert(newDiv);
  var num = document.getElementById('myDiv').getElementsByTagName('div').length+1;
//alert(num);
Dhar[num] = Dh;
DHar[num] = DH;
DE1976ar[num] = DE1976;
DE1994_Textilesar[num] = DE1994_Textiles;
DE1994_GraphicArtsar[num] = DE1994_GraphicArts;
DE2000ar[num] = DE2000;
DE2011ar[num] = DE2011;
DECMC_21ar[num] = DECMC_21;
DECMC_11ar[num] = DECMC_11;
Lab1Lar[num] = Lab1.L;
Lab1aar[num] = Lab1.a;
Lab1bar[num] = Lab1.b;
Lab2Lar[num] = Lab2.L;
Lab2aar[num] = Lab2.a;
Lab2bar[num] = Lab2.b;
LCh1Car[num] = LCh1.C;
LCh1har[num] = LCh1.h;
LCh2Car[num] = LCh2.C;
LCh2har[num] = LCh2.h;
hexcode1ar[num] = hexcode1;
hexcode2ar[num] = hexcode2;
warningaar[num] = warninga;
warningbar[num] = warningb;
warningar[num] = warning;
warningYar[num] = warningY;
warningYendar[num] = warningYend;
warningY2011ar[num] = warningY2011;
warningYend2011ar[num] = warningYend2011;

newDiv.innerHTML = '<input type="hidden" value="0"><a href="javascript:openWin('+num+');"><table width="100%" border="0" class="tablenonemargin"><tr><td  width="43%" height="20px" bgcolor="'+hexcode1+'"><span class="white">'+warningaa+'</span><span class="norm">'+warningaa+'</span></td><td class="right" width="43%" bgcolor="'+hexcode2+'"><span class="norm">'+warningbb+'</span><span class="white">'+warningbb+'</span></td><td  width="14%"><span class="sup">&Delta;E='+DE1976.toFixed(2)+'</span></td></tr></table></a>';
document.getElementById('myDiv').appendChild(newDiv);

if (num == 1) {
var histDiv = document.createElement('div'); 
var histnum = document.getElementById('hist').getElementsByTagName('div').length+1;
histDiv.innerHTML = '<input type=button value="Показать вcе патчи крупным планом" onClick="openHistory(this.form);"><input type=button value="Создать отчёт" onClick="report('+num+');">';
document.getElementById('hist').appendChild(histDiv);
}
if (num > 1) {
	//delete old num
document.getElementById('hist').removeChild(document.getElementById('hist').getElementsByTagName('div')[document.getElementById('hist').getElementsByTagName('div').length-1]);
//document.getElementById('hist').removeChild(document.getElementById('hist').getElementsByTagName('div')[1]);
	//new num
var histDiv = document.createElement('div'); 
var histnum = document.getElementById('hist').getElementsByTagName('div').length+1;
histDiv.innerHTML = '<input type=button value="Показать вcе патчи крупным планом" onClick="openHistory(this.form);"><input type=button value="Создать отчёт" onClick="report('+num+');">';
document.getElementById('hist').appendChild(histDiv);
}
//alert("ups   "+num);
nuh = num+1;
}

function create_new_table()
{
	
	//удаляем старые цвета
   var oneChild;
   var mainObj = document.getElementById("myDiv");
   while (mainObj.childNodes.length > 1) {
      oneChild = mainObj.lastChild;
      mainObj.removeChild(oneChild);
   }
   
	//alert("ups   "+nun);
	for(var i=1; i < nuh; i++) {
Lab1.L = Lab1Lar[i];
Lab1.a = Lab1aar[i];
Lab1.b = Lab1bar[i];
Lab2.L = Lab2Lar[i];
Lab2.a = Lab2aar[i];
Lab2.b = Lab2bar[i];
		
LabtoXYZtosRGB();
hexcode1ar[i] = hexcode1;
hexcode2ar[i] = hexcode2;
warningaaar[i] = warningaa;
warningbbar[i] = warningbb;

DeltaE1976()
DE1976ar[i] = DE1976;

//добавляем новые цвета

var newDiv = document.createElement('div'); 
var num = document.getElementById('myDiv').getElementsByTagName('div').length+1;
newDiv.innerHTML = '<input type="hidden" value="0"><a href="javascript:openWin('+i+');"><table width="100%" border="0" class="tablenonemargin"><tr><td  width="43%" height="20px" bgcolor="'+hexcode1ar[i]+'"><span class="white">'+warningaaar[i]+'</span><span class="norm">'+warningaaar[i]+'</span></td><td class="right" width="43%" bgcolor="'+hexcode2ar[i]+'"><span class="norm">'+warningbbar[i]+'</span><span class="white">'+warningbbar[i]+'</span></td><td  width="14%"><span class="sup">&Delta;E='+DE1976ar[i].toFixed(2)+'</span></td></tr></table></a>';
document.getElementById('myDiv').appendChild(newDiv);
	}
}

function openWin(n) {
	width1 = (screen.width - 644)/2;
	height1 = (screen.height - 478)/2;
  myWin= open("", "newWindow"+n+"", "width=644, height=478, top="+height1+", left="+width1+", menubar=0, toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0");
  myWin.document.open();
  myWin.document.write('<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><title>R U D T P . P P . R U - Калькулятор Color Difference на JavaScript');
  myWin.document.writeln("</title>");
  myWin.document.writeln("<style type='text/css'>BODY{FONT-FAMILY: Verdana, Arial, Helvetica, Geneva, Sans-Serif;  FONT-SIZE: 10pt; margin-top: 0em; margin-right: 0em; margin-left: 0em;} A:link { color: #FFF; text-decoration: none } A:visited { color: #FFF; text-decoration: none } A:active { color: #FFF; text-decoration: none } A:hover { color: #FFF; text-decoration: underline; font-style: italic }");
  myWin.document.writeln("TABLE{border-style: none; border-spacing: 0px; border-collapse: collapse; padding: 0px; table-layout: fixed; width: 640px; margin-bottom: 0pt; margin-left: 0em; margin-right: 0em; TEXT-ALIGN: left; TEXT-INDENT: 0em; }");
  myWin.document.writeln("TH, TH P{vertical-align:text-top; FONT-SIZE: 9pt; margin-top: 0pt; margin-left: 4pt; margin-right: 4pt;}");
  myWin.document.writeln("TD, TD P{text-align: right; vertical-align:text-top; font-weight: bold; FONT-SIZE: 9pt; margin-top: 0pt; margin-left: 4pt; margin-right: 4pt;}");
  myWin.document.writeln("*.white {color: #FFF; text-align: center;}");
  myWin.document.writeln("*.alert {color: #F00; text-align: center;}");
  myWin.document.writeln("*.alertY {color: #FF0; text-align: center;}");
  myWin.document.writeln("</style>");
  myWin.document.writeln("</head><body bgcolor='#000000'>");
  myWin.document.writeln("<div align='center'><table id='container' width='640' border='0'>");
  myWin.document.writeln("<tr><th width='320' height='320' bgcolor='"+hexcode1ar[n]+"'>Reference:&nbsp;&nbsp;L "+Lab1Lar[n].toFixed(2)+"&nbsp;&nbsp;a "+Lab1aar[n].toFixed(2)+"&nbsp;&nbsp;b "+Lab1bar[n].toFixed(2)+"<br>C "+LCh1Car[n].toFixed(2)+"&nbsp;&nbsp;h "+LCh1har[n].toFixed(2)+warningaar[n]+"<br><span class='white'>Reference:&nbsp;&nbsp;L "+Lab1Lar[n].toFixed(2)+"&nbsp;&nbsp;a "+Lab1aar[n].toFixed(2)+"&nbsp;&nbsp;b "+Lab1bar[n].toFixed(2)+"<br>C "+LCh1Car[n].toFixed(2)+"&nbsp;&nbsp;h "+LCh1har[n].toFixed(2)+warningaar[n]+"</span></th><td width='320' height='320' bgcolor='"+hexcode2ar[n]+"'>&nbsp;&nbsp;Sample:&nbsp;&nbsp;L "+Lab2Lar[n].toFixed(2)+"&nbsp;&nbsp;a "+Lab2aar[n].toFixed(2)+"&nbsp;&nbsp;b "+Lab2bar[n].toFixed(2)+"<br>C "+LCh2Car[n].toFixed(2)+"&nbsp;&nbsp;h "+LCh2har[n].toFixed(2)+warningbar[n]+"<span class='white'><br>Sample:&nbsp;&nbsp;L "+Lab2Lar[n].toFixed(2)+"&nbsp;&nbsp;a "+Lab2aar[n].toFixed(2)+"&nbsp;&nbsp;b "+Lab2bar[n].toFixed(2)+"<br>C "+LCh2Car[n].toFixed(2)+"&nbsp;&nbsp;h "+LCh2har[n].toFixed(2)+warningbar[n]+"</span></td></tr></table></div>");
   myWin.document.writeln("<p class='white'>"+warningYar[n]+"Delta E 1976 = "+DE1976ar[n].toFixed(2)+warningYendar[n]+";&nbsp; Delta h = "+Dhar[n].toFixed(2)+"&#176;;&nbsp; Delta H = "+DHar[n].toFixed(2)+";&nbsp; <br>Delta E 1994 (Graphic Arts) = "+DE1994_GraphicArtsar[n].toFixed(2)+";&nbsp; Delta E 1994 (Textiles) = "+DE1994_Textilesar[n].toFixed(2)+";&nbsp; <br>Delta E 2000 = "+DE2000ar[n].toFixed(2)+";&nbsp; Delta CMC (1:1) = "+DECMC_11ar[n].toFixed(2)+";&nbsp; Delta CMC (2:1) = "+DECMC_21ar[n].toFixed(2)+"<br>"+warningY2011ar[n]+"Delta E 2000 (Offset) = "+DE2011ar[n].toFixed(2)+warningYend2011ar[n]+"<br><a href='http://rudtp.pp.ru/colordiff.php"+"?"+Lab1Lar[n].toFixed(2)+"&"+Lab1aar[n].toFixed(2)+"&"+Lab1bar[n].toFixed(2)+"&"+Lab2Lar[n].toFixed(2)+"&"+Lab2aar[n].toFixed(2)+"&"+Lab2bar[n].toFixed(2)+"#colors"+"' target='_blank'>http://rudtp.pp.ru/colordiff.php"+"?"+Lab1Lar[n].toFixed(2)+"&"+Lab1aar[n].toFixed(2)+"&"+Lab1bar[n].toFixed(2)+"&"+Lab2Lar[n].toFixed(2)+"&"+Lab2aar[n].toFixed(2)+"&"+Lab2bar[n].toFixed(2)+"</a><span class='alert'>"+warningar[n]+"</span></p>");
  
  myWin.document.writeln("<script language='JavaScript'>");
  myWin.document.writeln("function closeIt() {close();}");
  myWin.document.writeln("</script><center><form><input type=button value='Закрыть' onClick='closeIt()'></form></center>");
  myWin.document.writeln("</body></html>");
  myWin.document.close();  
}

function openHistory(theForm) {
	var num = document.getElementById('myDiv').getElementsByTagName('div').length
	nun = num+1000;
	//alert(num);
	//alert(Lab1Lar[13]);
	//alert(DE1976ar[num]);
	width1 = (screen.width - 660)/2;
	height1 = (screen.height - 768)/2;
  myWin= open("", "newWindow"+nun+"", "width=660, height=768, top="+height1+", left="+width1+", menubar=0, toolbar=0, location=0, directories=0, status=0, scrollbars=1, resizable=1");
  myWin.document.open();
  myWin.document.write('<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><title>R U D T P . P P . R U - Калькулятор Color Difference на JavaScript');
  myWin.document.writeln("</title>");
  myWin.document.writeln("<style type='text/css'>BODY{FONT-FAMILY: Verdana, Arial, Helvetica, Geneva, Sans-Serif;  FONT-SIZE: 10pt; margin-top: 0em; margin-right: 0em; margin-left: 0em;} A:link { color: #FFF; text-decoration: none } A:visited { color: #FFF; text-decoration: none } A:active { color: #FFF; text-decoration: none } A:hover { color: #FFF; text-decoration: underline; font-style: italic }");
  myWin.document.writeln("TABLE{border-style: none; border-spacing: 0px; border-collapse: collapse; padding: 0px; table-layout: fixed; width: 640px; margin-bottom: 0pt; margin-left: 0em; margin-right: 0em; TEXT-ALIGN: left; TEXT-INDENT: 0em; }");
  myWin.document.writeln("TH, TH P{vertical-align:text-top; FONT-SIZE: 9pt; margin-top: 0pt; margin-left: 4pt; margin-right: 4pt;}");
  myWin.document.writeln("TD, TD P{text-align: right; vertical-align:text-top; font-weight: bold; FONT-SIZE: 9pt; margin-top: 0pt; margin-left: 4pt; margin-right: 4pt;}");
  myWin.document.writeln("*.white {color: #FFF; text-align: center;}");
  myWin.document.writeln("*.alert {color: #F00; text-align: center;}");
    myWin.document.writeln("*.alertY {color: #FF0; text-align: center;}");
  myWin.document.writeln("</style>");
  myWin.document.writeln("</head><body bgcolor='#000000'>");
  
  hyperlink = '';
  
  DE1976aver = 0;
  Dhaver = 0;
  DHaver = 0;
  DE1994_GraphicArtsaver = 0;
  DE1994_Textilesaver = 0;
  DE2000aver = 0;
  DE2011aver = 0;
  DECMC_11aver = 0;
  DECMC_21aver = 0;
  
  for(var j=1; j <= num; j++) {
	  DE1976aver = DE1976aver+DE1976ar[j];
	  Dhaver = Dhaver+Dhar[j];
	  DHaver = DHaver+DHar[j];
	  DE1994_GraphicArtsaver = DE1994_GraphicArtsaver+DE1994_GraphicArtsar[j];
	  DE1994_Textilesaver = DE1994_Textilesaver+DE1994_Textilesar[j];
	  DE2000aver = DE2000aver+DE2000ar[j];
	  DE2011aver = DE2011aver+DE2011ar[j];
	  DECMC_11aver = DECMC_11aver+DECMC_11ar[j];
	  DECMC_21aver = DECMC_21aver+DECMC_21ar[j];
	  
	  //alert(Lab1Lar+'    '+Lab2Lar);
  myWin.document.writeln("<div align='center'><table id='container' width='640' border='0'>");
  myWin.document.writeln("<tr><th width='320' height='320' bgcolor='"+hexcode1ar[j]+"'>Reference:&nbsp;&nbsp;L "+parseFloat(Lab1Lar[j].toFixed(2))+"&nbsp;&nbsp;a "+parseFloat(Lab1aar[j].toFixed(2))+"&nbsp;&nbsp;b "+parseFloat(Lab1bar[j].toFixed(2))+"<br>C "+LCh1Car[j].toFixed(2)+"&nbsp;&nbsp;h "+LCh1har[j].toFixed(2)+warningaar[j]+"<br><span class='white'>Reference:&nbsp;&nbsp;L "+parseFloat(Lab1Lar[j].toFixed(2))+"&nbsp;&nbsp;a "+parseFloat(Lab1aar[j].toFixed(2))+"&nbsp;&nbsp;b "+parseFloat(Lab1bar[j].toFixed(2))+"<br>C "+LCh1Car[j].toFixed(2)+"&nbsp;&nbsp;h "+LCh1har[j].toFixed(2)+warninga+"</span></th><td width='320' height='320' bgcolor='"+hexcode2ar[j]+"'>&nbsp;&nbsp;Sample:&nbsp;&nbsp;L "+parseFloat(Lab2Lar[j].toFixed(2))+"&nbsp;&nbsp;a "+parseFloat(Lab2aar[j].toFixed(2))+"&nbsp;&nbsp;b "+parseFloat(Lab2bar[j].toFixed(2))+"<br>C "+LCh2Car[j].toFixed(2)+"&nbsp;&nbsp;h "+LCh2har[j].toFixed(2)+warningbar[j]+"<span class='white'><br>Sample:&nbsp;&nbsp;L "+parseFloat(Lab2Lar[j].toFixed(2))+"&nbsp;&nbsp;a "+parseFloat(Lab2aar[j].toFixed(2))+"&nbsp;&nbsp;b "+parseFloat(Lab2bar[j].toFixed(2))+"<br>C "+LCh2Car[j].toFixed(2)+"&nbsp;&nbsp;h "+LCh2har[j].toFixed(2)+warningb+"</span></td></tr></table></div>");
   /* myWin.document.writeln("<tr><th width='320' height='320' bgcolor='"+hexcode1ar[j]+"'>Reference:&nbsp;&nbsp;L "+Lab1Lar[j].toFixed(2)+"&nbsp;&nbsp;a "+Lab1aar[j].toFixed(2)+"&nbsp;&nbsp;b "+Lab1bar[j].toFixed(2)+"<br>C "+LCh1Car[j].toFixed(2)+"&nbsp;&nbsp;h "+LCh1har[j].toFixed(2)+warningaar[j]+"<br><span class='white'>Reference:&nbsp;&nbsp;L "+Lab1Lar[j].toFixed(2)+"&nbsp;&nbsp;a "+Lab1aar[j].toFixed(2)+"&nbsp;&nbsp;b "+Lab1bar[j].toFixed(2)+"<br>C "+LCh1Car[j].toFixed(2)+"&nbsp;&nbsp;h "+LCh1har[j].toFixed(2)+warninga+"</span></th><td width='320' height='320' bgcolor='"+hexcode2ar[j]+"'>&nbsp;&nbsp;Sample:&nbsp;&nbsp;L "+Lab2Lar[j].toFixed(2)+"&nbsp;&nbsp;a "+Lab2aar[j].toFixed(2)+"&nbsp;&nbsp;b "+Lab2bar[j].toFixed(2)+"<br>C "+LCh2Car[j].toFixed(2)+"&nbsp;&nbsp;h "+LCh2har[j].toFixed(2)+warningbar[j]+"<span class='white'><br>Sample:&nbsp;&nbsp;L "+Lab2Lar[j].toFixed(2)+"&nbsp;&nbsp;a "+Lab2aar[j].toFixed(2)+"&nbsp;&nbsp;b "+Lab2bar[j].toFixed(2)+"<br>C "+LCh2Car[j].toFixed(2)+"&nbsp;&nbsp;h "+LCh2har[j].toFixed(2)+warningb+"</span></td></tr></table></div>");*/
   myWin.document.writeln("<p class='white'>"+warningYar[j]+"Delta E 1976 = "+DE1976ar[j].toFixed(2)+warningYendar[j]+";&nbsp; Delta h = "+Dhar[j].toFixed(2)+"&#176;;&nbsp; Delta H = "+DHar[j].toFixed(2)+";&nbsp; <br>Delta E 1994 (Graphic Arts) = "+DE1994_GraphicArtsar[j].toFixed(2)+";&nbsp; Delta E 1994 (Textiles) = "+DE1994_Textilesar[j].toFixed(2)+";&nbsp; <br>Delta E 2000 = "+DE2000ar[j].toFixed(2)+";&nbsp; Delta CMC (1:1) = "+DECMC_11ar[j].toFixed(2)+";&nbsp; Delta CMC (2:1) = "+DECMC_21ar[j].toFixed(2)+"<br>"+warningY2011ar[j]+"Delta E 2000 (Offset) = "+DE2011ar[j].toFixed(2)+warningYend2011ar[j]+"<span class='alert'>"+warningar[j]+"</span></p>");
  if (j < num){
  hyperlink += parseFloat(Lab1Lar[j].toFixed(2))+"&"+parseFloat(Lab1aar[j].toFixed(2))+"&"+parseFloat(Lab1bar[j].toFixed(2))+"&"+parseFloat(Lab2Lar[j].toFixed(2))+"&"+parseFloat(Lab2aar[j].toFixed(2))+"&"+parseFloat(Lab2bar[j].toFixed(2))+"&";
  }
  else{
	  hyperlink += parseFloat(Lab1Lar[j].toFixed(2))+"&"+parseFloat(Lab1aar[j].toFixed(2))+"&"+parseFloat(Lab1bar[j].toFixed(2))+"&"+parseFloat(Lab2Lar[j].toFixed(2))+"&"+parseFloat(Lab2aar[j].toFixed(2))+"&"+parseFloat(Lab2bar[j].toFixed(2));
  }
  }
 var hiperlinklength = hyperlink.length;
 if (hiperlinklength > 4104) {
	 hyperlink = '';
 }
  
      DE1976aver = DE1976aver/num;
	  Dhaver = Dhaver/num;
	  DHaver = DHaver/num;
	  DE1994_GraphicArtsaver = DE1994_GraphicArtsaver/num;
	  DE1994_Textilesaver = DE1994_Textilesaver/num;
	  DE2000aver = DE2000aver/num;
	  DE2011aver = DE2011aver/num;
	  DECMC_11aver = DECMC_11aver/num;
	  DECMC_21aver = DECMC_21aver/num;
  
  myWin.document.writeln("<p class='white'><br>Средняя Delta E 1976 = "+DE1976aver.toFixed(2)+"<br>Средняя Delta h = "+Dhaver.toFixed(2)+"&#176;<br>Средняя Delta H = "+DHaver.toFixed(2)+"<br>Средняя Delta E 1994 (Graphic Arts) = "+DE1994_GraphicArtsaver.toFixed(2)+"<br>Средняя Delta E 1994 (Textiles) = "+DE1994_Textilesaver.toFixed(2)+"<br>Средняя Delta E 2000 = "+DE2000aver.toFixed(2)+"<br>Средняя Delta CMC (1:1) = "+DECMC_11aver.toFixed(2)+"<br>Средняя Delta CMC (2:1) = "+DECMC_21aver.toFixed(2)+"<br>Средняя Delta E 2000 (Offset) = "+DE2011aver.toFixed(2)+"</p>");
  
  myWin.document.writeln("<p class='white'><br><a href='http://rudtp.pp.ru/colordiff.php"+"?"+hyperlink+"#colors"+"' target='_blank'>Скопировать ссылку на все эти патчи (кликните правой кнопкой)</a></p>");
  
  myWin.document.writeln("<script language='JavaScript'>");
  myWin.document.writeln("function closeIt() {close();}");
  myWin.document.writeln("</script><center><form><input type=button value='Закрыть' onClick='closeIt()'></form></center>");
  myWin.document.writeln("</body></html>");
  myWin.document.close();  
}


function report(num) {
	num = parseInt(num);
  hyperlink = '';
  for(var j=1; j <= num; j++) {
  if (j < num){
  hyperlink += parseFloat(Lab1Lar[j].toFixed(2))+"&"+parseFloat(Lab1aar[j].toFixed(2))+"&"+parseFloat(Lab1bar[j].toFixed(2))+"&"+parseFloat(Lab2Lar[j].toFixed(2))+"&"+parseFloat(Lab2aar[j].toFixed(2))+"&"+parseFloat(Lab2bar[j].toFixed(2))+"&";
  }
  else{
	  hyperlink += parseFloat(Lab1Lar[j].toFixed(2))+"&"+parseFloat(Lab1aar[j].toFixed(2))+"&"+parseFloat(Lab1bar[j].toFixed(2))+"&"+parseFloat(Lab2Lar[j].toFixed(2))+"&"+parseFloat(Lab2aar[j].toFixed(2))+"&"+parseFloat(Lab2bar[j].toFixed(2));
  }
  }
  
  
  hyperlinklength = hyperlink.length;

	if (hyperlinklength > 4104) {
document.post2.X2.value = "?"+hyperlink;
document.post2.submit();}
else
{
		window.location="http://rudtp.pp.ru/report.php"+"?"+hyperlink 
}
}

function alert1(theForm)
{
	alert('XYZ Ref = ' + X1b + '    ' + Y1b + '    ' + Z1b + '   ' + '\nXYZ Sample = ' + X2b + '   ' + Y2b + '   ' + Z2b +'\n\nsRGB gamma 1 ref = ' + R1a + '   ' + G1a + '   ' + B1a + '\nsRGB gamma 1 sample = ' + R2a + '   ' + G2a + '   ' + B2a + '\n\nsRGB gamma 2.2 ref = ' + R1 + '   ' + G1 + '   ' + B1 + '\nsRGB gamma 2.2 sample = ' + R2 + '   ' + G2 + '   ' + B2 + '\n\nRGB hex ref = ' + hexcode1 +'\nRGB hex sample = '+ hexcode2);
}
