/*
Druckvo
calc.js
Martin Hozík - martin.hozik@vlado.cz
Graphic studio VLADO - www.vlado.cz
Mon, 16 July 2007 13:43:15 GMT
UTF-8
*/

var calcHandler = {

	instant			: false,
	identifier		: 'onlinecalc',
	digital			: false,
	

	init:function(){
	
		function calcInit(){
			var inputs = document.calcform.getElementsByTagName('input');
			var selects = document.calcform.getElementsByTagName('select');
			var textareas = document.calcform.getElementsByTagName('textarea');
			
			for(var i=0; i<inputs.length; i++){
				if(calcHandler.hasClassName('showHintFromTitle',inputs[i])){												
					calcHandler.fillHint(inputs[i]);
				}
			}
			for(var i=0; i<textareas.length; i++){
				if(calcHandler.hasClassName('showHintFromTitle',textareas[i])){												
					calcHandler.fillHint(textareas[i]);
				}
			}
			
		}
		
		if(!calcHandler.instant){
			calcHandler.addEvent(window,'load',calcInit);
		}else{
			calcInit();
		}
		
	},
		
	addEvent:function(element, eventName, func){
		if(element.addEventListener){
			element.addEventListener(eventName, func, false);
		}else if (element.attachEvent){
			element.attachEvent('on'+eventName, func);
		}
	},
	removeClassName:function(cName,node){
		node.className = node.className.replace(new RegExp("\\s?"+cName+"\\b"), "");		
	},
	addClassName:function(cName,node){
		node.className += (node.className == "" ? cName : " "+cName);		
	},
	hasClassName:function(cName,node){
		return (node.className.match(new RegExp("\\s?"+cName+"\\b")));		
	},	
	getFirstChildByName:function(cName,node){
	var nodes = node.childNodes;
		for(var j=0;j<nodes.length;j++){
			if(nodes[j].nodeName == cName){
				return nodes[j];
			}
		}	
		return false;
	},
	validate:function(node){
		return true;
	},
	eraseHint:function(node){
		if(node.title == node.value){
			node.value = '';
			node.style.color = 'black';
			node.style.fontStyle = 'normal';
		}
	},
	fillHint:function(node){
		if(node.value == ''){
			node.style.color = 'silver';
			node.style.fontStyle = 'italic';
			node.value = node.title;
		}
	},
	forceInt:function(node){
		val = node.value;
		val = parseInt(val);
		val = val>0 ? val : '';
		
		node.value = val;
	},
	showHelp:function(node,HTML){
	
		document.getElementById('calchelp').innerHTML = '';
		document.getElementById('calcarrow').style.display = 'none';
		
		
		var yoffset = calcHandler.findPos(node)[1];
		var refyoffset = calcHandler.findPos(document.getElementById('calcinputs'))[1];
		var reloffset = yoffset - refyoffset;
		
		if(HTML != ''){
			document.getElementById('calcarrow').style.display = 'block';
			document.getElementById('calcarrow').style.top = (reloffset+2)+'px';
			document.getElementById('calchelp').innerHTML = HTML;
			document.getElementById('calchelp').style.paddingTop = (reloffset - 30)+'px';
		}
		
	},
	findPos:function(obj) {
		var curleft = curtop = 0;
		if (obj.offsetParent) {
			curleft = obj.offsetLeft
			curtop = obj.offsetTop
			while (obj = obj.offsetParent) {
				curleft += obj.offsetLeft
				curtop += obj.offsetTop
			}
		}
		return [curleft,curtop];
	},
	number_format:function(number, decimals, dec_point, thousands_sep){
	  var exponent = "";
	  var numberstr = number.toString ();
	  var eindex = numberstr.indexOf ("e");
	  if (eindex > -1)
	  {
	    exponent = numberstr.substring (eindex);
	    number = parseFloat (numberstr.substring (0, eindex));
	  }
	  
	  if (decimals != null)
	  {
	    var temp = Math.pow (10, decimals);
	    number = Math.round (number * temp) / temp;
	  }
	  var sign = number < 0 ? "-" : "";
	  var integer = (number > 0 ? 
	      Math.floor (number) : Math.abs (Math.ceil (number))).toString ();
	  
	  var fractional = number.toString ().substring (integer.length + sign.length);
	  dec_point = dec_point != null ? dec_point : ".";
	  fractional = decimals != null && decimals > 0 || fractional.length > 1 ? 
	               (dec_point + fractional.substring (1)) : "";
	  if (decimals != null && decimals > 0)
	  {
	    for (i = fractional.length - 1, z = decimals; i < z; ++i)
	      fractional += "0";
	  }
	  
	  thousands_sep = (thousands_sep != dec_point || fractional.length == 0) ? 
	                  thousands_sep : null;
	  if (thousands_sep != null && thousands_sep != "")
	  {
		for (i = integer.length - 3; i > 0; i -= 3)
	      integer = integer.substring (0 , i) + thousands_sep + integer.substring (i);
	  }
	  
	  return sign + integer + fractional + exponent;
	},	
	placeHTML:function(str,id){
		document.getElementById(id).innerHTML = str;
	},
	calcPrice:function(){
		
		switch (calcHandler.digital) {
			case 1:
			

				// letáky, pozvánky
				// prices
				var material_price = Array(0,0,2,2,4,4,3,3,3,6,6,5,1.5);
				var paperformat_modifier = Array(0,1,2,1,1,1);
				var color_price = Array(0,0,3,2,3.5);
				var borders_modifier = Array(0,1);
								
				
				// gather
				var qty = document.calcform.qty.value*1;
				var paperformat = document.calcform.paperformat.selectedIndex;
				var material = document.calcform.material.selectedIndex;
				var barevnost = document.calcform.barevnost.selectedIndex;
				var dokraju = document.calcform.dokraju.selectedIndex;		
				
		
				
				if(!qty || !paperformat){
					document.getElementById('calcdrop').innerHTML = 'nedostatek údajů<input type="hidden" name="kalkulace" value="nedostatek údajů" />';
					document.getElementById('calcdrop').style.color = 'gray';
					document.getElementById('calcdrop').style.fontStyle = 'italic';					
					return false;
				}
				
				if(qty > 300){
					document.getElementById('calcdrop').innerHTML = 'příliš mnoho kusů!<input type="hidden" name="kalkulace" value="příliš mnoho kusů!" />';
					document.getElementById('calcdrop').style.color = 'red';
					document.getElementById('calcdrop').style.fontStyle = 'italic';					
					return false;					
					
				}
				

				var a4base = (qty == 1 ? 25 : (qty <= 20 ? 18 : 14));			
				var subtotal_print = a4base * paperformat_modifier[paperformat] * qty;
				var subtotal_material = material_price[material] * paperformat_modifier[paperformat] * qty;
				
				color_price[1] = a4base;
				var subtotal_color = color_price[barevnost] * paperformat_modifier[paperformat] * qty;
				
				var subtotal_borders = (subtotal_print + subtotal_material + subtotal_color) * borders_modifier[dokraju];
								
				var total = subtotal_borders + subtotal_print + subtotal_material + subtotal_color;
				

								
			
				break;
				
				
				
			case 2:
			
			
				// brožura
				
				// prices
				var material_price = Array(0,0,2,2,4,3,3,3);
				var paperformat_modifier = Array(0,2,4,1,1,1);
				var color_price = Array(0,0,3,2,3.5);
				var color_price_inside = Array(3.5,0);				
				
				// gather
				var qty = document.calcform.qty.value*1;
				var pages = document.calcform.pages.value*1;				
				var paperformat = document.calcform.paperformat.selectedIndex;
				var material_envelope = document.calcform.material_envelope.selectedIndex;
				var barevnost_envelope = document.calcform.barevnost_envelope.selectedIndex;
				var material_inside = document.calcform.material_inside.selectedIndex;				
				var barevnost_inside = document.calcform.barevnost_inside.selectedIndex;	
				
				if(!qty || !paperformat){
					document.getElementById('calcdrop').innerHTML = 'nedostatek údajů<input type="hidden" name="kalkulace" value="nedostatek údajů" />';
					document.getElementById('calcdrop').style.color = 'gray';
					document.getElementById('calcdrop').style.fontStyle = 'italic';					
					return false;
				}				
							

				var a4base = (qty == 1 ? 25 : (qty <= 20 ? 18 : 14));
				color_price[1] = a4base;
				color_price_inside[1] = a4base;
				
				
				
			
				
				var subtotal_envelope = (a4base * paperformat_modifier[paperformat] + material_price[material_envelope] + color_price[barevnost_envelope]) * qty;
				var subtotal_inside = (paperformat_modifier[paperformat] * color_price_inside[barevnost_inside]) * ((pages - 4) / 4) * qty;

				var total = subtotal_envelope+subtotal_inside;
				
			
			
				break;
				
			case 3:
			
			
				// vizitky
				
				// prices
				var color_modifier = Array(1,2,2,1,2);
							
				
				var qty = document.calcform.qty.value*1;
				var barevnost = document.calcform.barevnost.selectedIndex;
				var dokraju = document.calcform.dokraju.selectedIndex;	
				
				if(!qty){
					document.getElementById('calcdrop').innerHTML = 'nedostatek údajů<input type="hidden" name="kalkulace" value="nedostatek údajů" />';
					document.getElementById('calcdrop').style.color = 'gray';
					document.getElementById('calcdrop').style.fontStyle = 'italic';					
					return false;
				}					
				
				if(barevnost<=2){
					// color
					var base = qty < 200 ? 4 : (qty < 300 ? 2.75 : (qty < 500 ? 2.2 : (qty < 1000 ? 1.7 : 1.35)));				
				}else{
					var base = qty < 200 ? 3 : (qty < 300 ? 2 : (qty < 500 ? 1.6 : (qty < 1000 ? 1.3 : 0.95)));					
				}
				base *= color_modifier[barevnost];
				
				var subtotal = base*qty + (dokraju ? 500 : 0);
				var total = subtotal > 400 ? subtotal : 400;
				
				break;
				
			case 4:
			
				// samolepky
				
				var paperformat_modifier = Array(1,2,1,1);
				var material_price = Array(0,0,50,50);
				
				var qty = document.calcform.qty.value*1;
				var paperformat = document.calcform.paperformat.selectedIndex;
				var material = document.calcform.material.selectedIndex;
				
				var a4base = (qty == 1 ? 38 : (qty <= 27 ? 18 : 21));
				
				
				if(!qty){
					document.getElementById('calcdrop').innerHTML = 'nedostatek údajů<input type="hidden" name="kalkulace" value="nedostatek údajů" />';
					document.getElementById('calcdrop').style.color = 'gray';
					document.getElementById('calcdrop').style.fontStyle = 'italic';					
					return false;
				}
								
				var total = (a4base + material_price[material]) * paperformat_modifier[paperformat] * qty
				
			
		
		
		}	
		
		
		document.getElementById('calcdrop').innerHTML = calcHandler.number_format(total,2,',','&nbsp;') + '&nbsp;Kč vč. DPH<input type="hidden" name="kalkulace" value="'+calcHandler.number_format(total,2,',',' ')+' Kč vč. DPH" />';
		document.getElementById('calcdrop').style.color = 'black';
		document.getElementById('calcdrop').style.fontStyle = 'normal';		
		
		
		
		
		
		
			
		
	}
	
}

/* inicializace */
calcHandler.init();

