// JScript source code

// Basic measurements definition

// Машины:
// 0 - Доминант
// 1 - Планета
var pForm = new Array();

pForm[0] = new Array();
pForm[0][0] = 900;
pForm[1] = new Array();
pForm[1][0] = 1700;
pForm[1][1] = 1700;

// Формат печ. формы
var fFormat = new Array();

fFormat[0] = 2;
fFormat[1] = 1;

var printing = new Array();
// Планета
printing[0] = new Array();
printing[0][0] = new Array();
printing[0][1] = new Array();
printing[0][0][0] = 500;
printing[0][0][1] = 500;
printing[0][1][0] = 500;
printing[0][1][1] = 500;

// Доминант
printing[1] = new Array();
printing[1][0] = new Array();
printing[1][1] = new Array();
printing[1][0][0] = 600;
printing[1][0][1] = 600;
printing[1][1][0] = 1200;
printing[1][1][1] = 1200;

// Фальцовка
var falc = new Array();
falc[0] = new Array();
falc[1] = new Array();
falc[2] = new Array();
falc[3] = new Array();
falc[4] = new Array();

falc[0][0] = 0.12;
falc[0][1] = 0.24;
falc[1][0] = 60;
falc[1][1] = -1;
falc[2][0] = 191;
falc[2][1] = 201;
falc[3][0] = 0.24;
falc[3][1] = 0.48;
falc[4][0] = 165.6;

// Цена на бумагу за кг.
// 0 - Офсетная
// 1 - Мелованная
var paper = new Array();

paper[0] = 45;
paper[1] = 48;

// Форматы:
// 0 - 70x100
// 1 - A1
// 2 - A2
// 3 - A3
// 4 - A4
// 5 - A5

var spaper = new Array();

spaper[0] = 0.7488;
spaper[1] = 0.5828;
spaper[2] = 0.3055;
spaper[3] = 0.12474;
spaper[4] = 0.06237;
spaper[5] = 0.03108;

// Возвращает коэффициент брака
function mag_defectPercent(qty, rotate) {
	if (rotate) {
		if (qty > 5000)
			return 0.1;
		else if (qty > 2000)
			return 0.1;
		else if (qty > 1000)
			return 0.1;
		else
			return 0.1;
	} else {
		if (qty > 5000)
			return 0.05;
		else if (qty > 2000)
			return 0.1;
		else if (qty > 1000)
			return 0.1;
		else
			return 0.1;
	}
}

// Возвращает коэффициент брака
function defectPercent(qty, rotate) {
	if (rotate) {
		if (qty > 5000)
			return 0.1;
		else if (qty > 3000)
			return 0.1;
		else
			return 0.1;
	} else {
		if (qty > 5000)
			return 0.05;
		else if (qty > 3000)
			return 0.1;
		else
			return 0.1;
	}
}


// Возвращает тип машины в зависимости от формата и красочности
function machType(frmt, colorness) {
	if (frmt < 2) {
		return 1;
	}
	if (colorness > 2) {
		return 0;
	}
	else {
		return 1;
	}
}

// Возвращает общую стоимость печати
function totalPrice(formPrice, printPrice, paperPrice, packPrice, falcPrice) {
//	alert("Формы - "+formPrice +": Печать - "+ printPrice +": Бумага - "+ paperPrice +": Упаковка - "+ packPrice+": Фальцовка - "+falcPrice);
	return formPrice + printPrice + paperPrice + packPrice + falcPrice;
}

// Возвращает количество листов
function sheetQty(srcFormat, destFormat, qty) {
	if (srcFormat < destFormat)
		return -1;	// Not supported
	if ((srcFormat != 0) && (destFormat == 0))
		return -1;	// Not supported
	var c = Math.pow(2,srcFormat - destFormat);
	return (Math.floor(qty/c) + ((qty%c>0)?1:0));
}

// Возвращает стоимость формы
function formPrice(format, machine, colorness) {
	if ((machine==1)&&(format==0))
		return pForm[1][1]*colorness;
	else
		return pForm[machine][0]*colorness;
}

// Возвращает стоимость печати
function printPrice(colorness, varnish, sheets, machtype) {
	var totalColors = colorness + varnish;
	var t_sheets = Math.floor(sheets/1000) + ((sheets%1000>0)?1:0);
	var colortype = ((colorness<3)?0:1);
	var price_scheme = ((sheets>10000)?1:0);
	return totalColors*t_sheets*printing[machtype][colortype][price_scheme];
//	return totalColors*t_sheets*printing[machtype][colortype][0];
}

// Возвращает стоимость печати
function magazine_printPrice(colorness, varnish, sheets, machtype, qty, mult) {
	var totalColors = colorness + varnish;
	var t_sheets = (Math.floor(qty/1000) + ((qty%1000>0)?1:0))*mult;
	var colortype = ((colorness<3)?0:1);
	var price_scheme = ((qty>10000)?1:0);
	//alert(totalColors+":"+t_sheets);
	return totalColors*t_sheets*printing[machtype][colortype][price_scheme];
//	return totalColors*t_sheets*printing[machtype][colortype][0];
}

// Возвращает стоимость бумаги
function paperPrice(type, format, density, sheets) {
//	alert(type+":"+ format+":"+ density+":"+ sheets);
	return paper[type]*spaper[format]*density*sheets/1000;
}

// Возвращает стоимость упаковки
function packPrice(sheets) {
	var t_sheets = Math.floor(sheets/1000) + ((sheets%1000>0)?1:0);
	return t_sheets * 120;	// 120 is the thing to change here :)
}

// Возвращает стоимость фальцовки/биговки
function falcPrice(type, bends, format, sheets, qty) {
//	alert(type+":"+bends+":"+format);
	if (format < 3)
		return -1;		// Not supported
	if ((bends > 2)||(bends < 1))
		return -1;		// Not supported
	if ((format==4)&&(type==0))
		return (falc[type][bends-1]*qty);
	var t_sheets = Math.floor(sheets/1000) + ((sheets%1000>0)?1:0);
	var t_qty = Math.floor(qty/1000) + ((qty%1000>0)?1:0);
	if ((format==3)&&(type==1)) {
		if (bends != 1)
			return -1;	// Not supported
		return (falc[type][bends-1]*t_sheets);
	}
	if (((format==4)||(format==5))&&(type==2))
		return (falc[type][format-4]*t_sheets);
	if (type==3)
		return (falc[type][bends-1]*qty);
	if (type==4)
		return (falc[type][0]*t_qty);
	return -1;	// Anything else is not supported
}

// Возвращает цену в руб.коп
function normalizePrice(price) {
	var tp_c = Math.floor(price);
	var tp_r = Math.floor((price - tp_c)*100);
	return(tp_c + "." + ((tp_r==0)?"00":((tp_r<10)?("0"+tp_r):tp_r)));
}

