var locker				= new Locker();
var motif_table_locker	= new Locker();

var labels = $H({'1' : $H({'initiated' : false, 'chars_notification' : false, 'current_product' : '', 'current_color' : '', 'stamp_width' : '', 'stamp_height' : ''})});

var disc_table = new Hash();

var payment_costs	 = new Hash();
var payment_identifiers = new Array();
var payment_costs_loaded = false;

var products 		= new Hash();
var product_identifiers = new Array();
var products_loaded = false;

var sizes		 = new Hash();
var sizes_identifiers = new Array();
var sizes_loaded = false;

var colors	 	  = new Hash();
var color_identifiers = new Array();
var colors_loaded = false;

var fonts_table	 = new Hash();
var fonts_loaded = false;

var msgs_table	 = new Hash();
var messages_loaded = false;

var optim_texts	 = new Hash();
var optim_texts_loaded = false;

var design_parameters = $H({'1' : $H({'section_index' : '1', 'txt_lines_amount' : '0', 'txt_lines_index' : '0', 'selected_image' : ''})});
var txt_lines_parameters = $H({'1' : $H({'1' : $H({'index' : '0'})})});

var config_table = new Hash();

var save_logo_path = '';
var save_logo_height = '';
var save_logo_width = '';
var save_image_approved = '';

var editor_obj_width  = '515';
var editor_obj_height = '249';

/**
* initialization procedure on page loaded
*/ 
function initial_loading() 
{
	var current_label_index = parseInt(labels.keys().max()).toString();
	
	var flashvars = {};
	var params = {movie : 'flash/designer_03.swf', swliveconnect : true, allowScriptAccess : 'always'};
	var attributes = {id : 'editor_'+current_label_index, name : 'swf_editor' }; // , allowScriptAccess : 'sameDomain'
	
	swfobject.embedSWF("flash/designer_03.swf", "flash_designer_"+current_label_index, editor_obj_width, editor_obj_height, "9.0.0", "flash/expressInstall.swf", flashvars, params, attributes);
	
	/*
	flashvars = {config_file : 'xml/flash_uploader.xml', section_no : current_label_index};
	params = {movie : 'flash/flash_uploader.swf', quality : 'high', allowScriptAccess : 'sameDomain', allowFullScreen : 'false', bgcolor : '#ffffff'};
	attributes = {id : 'flash_uploader_'+current_label_index, name : 'flash_uploader', align : 'middle'};
	
	swfobject.embedSWF("flash/flash_uploader.swf", "flash_uploader_"+current_label_index, "433", "65", "9.0.0", "flash/expressInstall.swf", flashvars, params, attributes);
	*/
	
	new AjaxUpload('file_uploader_'+current_label_index, {
															action: 'scripts/upload.php',
															onSubmit : function(file , ext)
																	   {
																			if (! (ext && /^(jpg|png|jpeg|gif)$/.test(ext)))
																			{
																					alert(get_msg_by_id('uploader_wrong_file_type'));
																					return false;
																			} else {
																				if ($('logo_preview_'+current_label_index)) 
																				{
																					save_logo_path = $('logo_preview_'+current_label_index).src;
																					save_logo_height = $('logo_preview_'+current_label_index).getStyle('height');
																					save_logo_width = $('logo_preview_'+current_label_index).getStyle('width');
																					
																					$('logo_preview_'+current_label_index).src = 'images/loading.gif';
																					$('logo_preview_'+current_label_index).setStyle({'height': '35px', 'width': ''});
																				}
																				
																				if ($('image_approval_'+current_label_index))
																				{
																					save_image_approved = $('image_approval_'+current_label_index).value;
																					$('image_approval_'+current_label_index).value = 0;
																				}
																			}
																	   },
															onComplete: function(file, response) 
																		{
																			set_uploaded_filename(current_label_index, response);
																		}
														 });
	
	load_messages();
}

/**
* send request to load project properties
*/ 
function load_project_props() 
{
	new Ajax.Request(ajax_path+'project_props.php',{method:"post", parameters : $H({'site_cpath' : site_cpath}).toQueryString(), onSuccess:onSusccessLoadProjectProps});
}

/**
* loading project properties from xml string
*/ 
function onSusccessLoadProjectProps(transport)
{
	//alert(transport.responseText);
	
	var data = eval('(' + transport.responseText + ')');

	if (data.result == 'ok')
	{
		for (var key in data) 
		{
			if (key == 'result') 
			{
				continue;
			}
			
			config_table.set(key, data[key]);
		}
		
		var current_label_index = parseInt(labels.keys().max());
	
		set_design_parameter(current_label_index, 'image_output_path', config_table.get('output_path'));
		set_design_parameter(current_label_index, 'image_script_name', config_table.get('img_receiver'));
		set_design_parameter(current_label_index, 'design_script_name', config_table.get('design_receiver'));
		set_design_parameter(current_label_index, 'image_output_name', '');

		load_sizes();
	}
}

/**
* send request to load sizes table
*/ 
function load_sizes() 
{
	new Ajax.Request(root_prefx+'xml/sizes.xml',{method:"get", onSuccess:onSusccessLoadSizes});
}

/**
* loading sizes table from json
*/ 
function onSusccessLoadSizes(transport)
{
	//alert(transport.responseText);
	
	var size_xml = transport.responseXML.getElementsByTagName('size');
	
	var identifier = '';

	if (size_xml.length > 0)
	{
		for (var i = 0; i < size_xml.length; i++)
		{
			var atts = size_xml[i].attributes;
			
			var size_item = new Hash();
			
			for (j = 0; j < atts.length; j++) 
			{
				var att = atts.item(j);
				var att_key = att.nodeName.toLowerCase();
				var att_value = att.nodeValue;
				
				size_item.set(att_key, att_value);
			}
			
			sizes.set((i + 1).toString(), size_item);
		}
		
		sizes_loaded = true;
	}
	
	//alert(sizes.inspect());
	
	load_products();
}

/**
* send request to load products table
*/ 
function load_products() 
{
	new Ajax.Request(root_prefx+'xml/products.xml',{method:"get", onSuccess:onSusccessLoadProducts});
}

/**
* loading products table from xml
*/ 
function onSusccessLoadProducts(transport)
{
	//alert(transport.responseText);
	
	var products_xml = transport.responseXML.getElementsByTagName('product');
	
	if (products_xml.length > 0)
	{
		for (var i = 0; i < products_xml.length; i++)
		{
			var atts = products_xml[i].attributes;
			
			var product_data = new Hash();
			
			var identifier = 'product_'+i.toString();
			for (j = 0; j < atts.length; j++) 
			{
				var att = atts.item(j);
				var att_key = att.nodeName.toLowerCase();
				var att_value = att.nodeValue;
				
				switch (att_key)
				{
					case 'id':
						identifier = att_value;
						product_data.set('description', products_xml[i].firstChild.nodeValue);
						break;
					default:
						product_data.set(att_key, att_value);
						break;
				}
			}
			
			products.set(identifier, product_data);
		}
	}
	
	products_loaded = true;
	product_identifiers = products.keys();
		
	//load_categories(1);
	//load_discounts();
	load_payment_costs();
	
}

/**
* send request to load colors table
*/ 
function load_colors() 
{
	new Ajax.Request(root_prefx+'xml/colors.xml',{method:"get", onSuccess:onSusccessLoadColors});
}

/**
* loading colors table from xml
*/ 
function onSusccessLoadColors(transport)
{
	//alert(transport.responseText);
	
	var colors_xml = transport.responseXML.getElementsByTagName('color');
	
	if (colors_xml.length > 0)
	{
		for (var i = 0; i < colors_xml.length; i++)
		{
			var atts = colors_xml[i].attributes;
			
			var color_data = new Hash();
			
			var identifier = 'color_'+i.toString();
			for (j = 0; j < atts.length; j++) 
			{
				var att = atts.item(j);
				var att_key = att.nodeName.toLowerCase();
				var att_value = att.nodeValue;
				
				switch (att_key)
				{
					case 'id':
						identifier = att_value;
						color_data.set('description', colors_xml[i].firstChild.nodeValue);
						break;
					default:
						color_data.set(att_key, att_value);
						break;
				}
			}
			
			colors.set(identifier, color_data);
		}
	}
	
	var current_label_index = parseInt(labels.keys().max());
	
	colors_loaded = true;
	color_identifiers = colors.keys();
	labels.set(current_label_index, labels.get(current_label_index).merge({'current_product' : product_identifiers[0]}));
	
	//alert(colors.inspect());
	
	change_size(current_label_index, true);
	change_color(current_label_index, color_identifiers[0]);
	change_border(current_label_index, 0);
	change_alignment(current_label_index);
	load_categories(current_label_index);
	get_image_name(current_label_index);
	change_payment_type(payment_identifiers[0]);
}

/**
* send request to load fonts list
*/ 
function load_fonts() 
{
	new Ajax.Request(root_prefx+'xml/fonts.xml',{method:"get", onSuccess:onSusccessLoadFonts, onFailure:onFailureLoadFonts});
}

/**
* loading fonts list from xml
*/ 
function onSusccessLoadFonts(transport)
{
	//alert(transport.responseText);
	
	var fonts_xml = transport.responseXML.getElementsByTagName('font');
	
	if (fonts_xml.length > 0)
	{
		for (var i = 0; i < fonts_xml.length; i++)
		{
			var atts = fonts_xml[i].attributes;
			
			var font_data = new Hash();
			
			var identifier = '';
			
			for (j = 0; j < atts.length; j++) 
			{
				var att = atts.item(j);
				var att_key = att.nodeName.toLowerCase();
				var att_value = att.nodeValue;
				
				switch (att_key)
				{
					case 'id':
						identifier = att_value;
						break;
					default:
						font_data.set(att_key, att_value);
						break;
				}
			}
			
			if (identifier.length > 0)
			{
				fonts_table.set(identifier, font_data);
			}
		}
	}
	
	fonts_loaded = true;
	
	//alert(fonts_table.inspect());
	
	load_colors();
}

/**
* despite fonts loading failed, the process must go on
*/
function onFailureLoadFonts()
{
	load_colors();
}

/**
* send request to load messages table
*/ 
function load_messages() 
{
	new Ajax.Request(root_prefx+'xml/messages.xml',{method:"get", onSuccess:onSusccessLoadMessages, onFailure:onFailureLoadMessages});
}

/**
* loading messages table from xml
*/ 
function onSusccessLoadMessages(transport)
{
	//alert(transport.responseText);
	
	var msg_xml = transport.responseXML.getElementsByTagName('message');
	
	//alert('number of messages = '+msg_xml.length);
	
	if (msg_xml.length > 0)
	{
		for (var i = 0; i < msg_xml.length; i++)
		{
			var atts = msg_xml[i].attributes;
			var value = msg_xml[i].firstChild.nodeValue
			
			for (j = 0; j < atts.length; j++) 
			{
				var key = atts.item(j).nodeValue;
				
				//alert(key+' = '+value);
				
				msgs_table.set(key, value);
				break;
			}
		}
		
		messages_loaded = true;
	}
	
	//alert(msgs_table.inspect());
	
	//if (config_table.get('project_id') != 'navnestempel')
	//{
		load_optim_text();
	//}
	//else
	//{
	//	load_project_props();
	//}
}

/**
* despite messages loading failed, the process must go on
*/
function onFailureLoadMessages()
{
	if (config_table.get('project_id') != 'navnestempel')
	{
		load_optim_text();
	}
	else
	{
		load_project_props();
	}
}

/**
* getting message text by message id
* @param msg_id string identifier of message 
*/
function get_msg_by_id(msg_id)
{
	return msgs_table.get(msg_id);
}

/**
* send request to load optimization permissions options table
*/ 
function load_optim_text() 
{
	new Ajax.Request(root_prefx+'xml/optimization.xml',{method:"get", onSuccess:onSusccessLoadOptText, onFailure:onFailureLoadOptText});
}

/**
* loading optimization permissions options table from xml
*/ 
function onSusccessLoadOptText(transport)
{
	//alert(transport.responseText);
	
	var opt_xml = transport.responseXML.getElementsByTagName('opt_text');
	
	if (opt_xml.length > 0)
	{
		for (var i = 0; i < opt_xml.length; i++)
		{
			var atts = opt_xml[i].attributes;
			var value = opt_xml[i].firstChild.nodeValue
			
			for (j = 0; j < atts.length; j++) 
			{
				var key = atts.item(j).nodeValue;
				optim_texts.set(key, value);
				break;
			}
		}
		
		optim_texts_loaded = true;
	}
	
	//alert(optim_texts.inspect())
	
	load_project_props();
}

/**
* despite messages loading failed, the process must go on
*/
function onFailureLoadOptText()
{
	load_project_props();
}

/**
* send request to load discounts table from xml
*/ 
function load_discounts() 
{
	new Ajax.Request(root_prefx+'xml/discounts.xml', {method:"get", onSuccess:onSusccessLoadDiscounts, onFailure:onFailureLoadDiscounts});
}

/**
* loading discounts table from xml
*/ 
function onSusccessLoadDiscounts(transport) 
{
	//alert(transport.responseText);
	
	var disc_xml = transport.responseXML.getElementsByTagName('discount');
	
	if (disc_xml.length > 0)
	{
		for (var i = 0; i < disc_xml.length; i++)
		{
			var atts = disc_xml[i].attributes;
			var h_key = '', h_value = '';

			for (j = 0; j < atts.length; j++) 
			{
				var att = atts.item(j);
				var att_key = att.nodeName.toLowerCase();
				var att_value = parseInt(att.nodeValue);
				
				switch (att_key)
				{
					case 'quantity_value':
						h_key = att_value;
						
						break;
					case 'percent_value':
						h_value = att_value;
						
						if (h_key != 0)
						{
							disc_table.set(h_key, h_value);
						}
						
						break;
				}
			}
		}
	}
	
	//alert(disc_table.inspect());
	
	if (config_table.get('use_colors') == true)
	{
		load_fonts();
	}
	else
	{
		change_price(parseInt(labels.keys().max()));
	}
}

/*
* despite discounts loading failed, process must go on
*/
function onFailureLoadDiscounts()
{
	if (config_table.get('use_colors') == true)
	{
		load_colors();
	}
	else
	{
		change_price(parseInt(labels.keys().max()));
	}
}

/**
* send request to load payment and their costs 
*/ 
function load_payment_costs() 
{
	new Ajax.Request(ajax_path+'payment_costs.php',{method:"post", parameters : $H({site_cpath : site_cpath}), onSuccess:load_payment_costs_actions, onFailure:load_payment_costs_failure});
}

/**
* loading payment costs table from json
*/ 
function load_payment_costs_actions(transport)
{
	//alert(transport.responseText);
	
	var data = eval('(' + transport.responseText + ')');

	if (data.result == 'ok')
	{
		var t_costs = data.costs;
		
		for (i = 0; i < t_costs.length; i++)
		{
			payment_costs.set(t_costs[i].method_id, t_costs[i].method_cost);
		}
		
		payment_identifiers = payment_costs.keys();
		
		payment_costs_loaded = true;
	}
	
	//alert(payment_costs.inspect())
	
	load_discounts();
}

/**
* on error when loading payment costs table from json
*/ 
function load_payment_costs_failure(transport)
{
	load_discounts();
}

/*
* change payment type
* @param payment_identifier integer payment type identifier
*/
function change_payment_type(payment_identifier)
{
	payment_costs.each(function(payment_data) 
	{
		if ($('payment_button_'+payment_data.key.toString()).readAttribute('type') == "radio")
		{
			if (payment_data.key == payment_identifier)
			{
				var checked_state = 'checked';	
			}
			else
			{
				var checked_state = '';	
			}
			
			if ($('payment_button_'+payment_data.key.toString()))
			{
				($('payment_button_'+payment_data.key.toString())).checked = checked_state;
			}
		}
	});
	
	new Ajax.Request(ajax_path+'change_payment.php',{ method:'post', parameters:$H({payment_method_id : payment_identifier, site_cpath : site_cpath}), onSuccess:change_payment_type_actions });
}

/**
*
*/
function change_payment_type_actions(transport)
{
	//alert(transport.responseText);
	
	var data = eval('(' + transport.responseText + ')');
	
	if (data.result == 'ok')
	{
		$('payment_form_container').update(data.form_text);
		
		$('payment_form').action = data.process_url;
	}
	
	update_total();
}

/*
* label size processing
* @param n integer identifier of section
*/
function change_size(n, initial)
{
	if ($('size_selector_'+n))
	{
		if ($('size_'+n))
		{
			var s = $('size_selector_'+n).selectedIndex;
			
			$('size_'+n).value = $('size_selector_'+n).options[s].text;
		}
		
		var size_max_lines = get_current_size_parameter(n.toString(), 'size_max_lines');
		var cur_size_lines = parseInt(get_design_parameter(n.toString(),'txt_lines_amount'));
		
		var lines_status = size_max_lines - cur_size_lines;
		
		if (lines_status > 0)
		{
			add_line(n, lines_status, initial);
		}
		
		var size_item_no = get_current_size_index(n);
		
		if (size_item_no >= 0)
		{
			sizes.get(size_item_no.toString()).each(function(pair){apply_size_parameters(n, pair.key, pair.value);});

			rebuild_font_selectors(n, cur_size_lines, sizes.get(size_item_no.toString()).get('font_size'));
		}
		
		set_design_parameter(n, 'line_max_len_notif', false);

		update_design(n, 'design', '');
		change_price(n);
	}
}

/*
* rebuild size selectors options set
*
* @param n integer identifier of section
* @param process_lines integer number of lines to be processed
* @param sizes_set string new set of options
*/
function rebuild_font_selectors(n, process_lines, sizes_set)
{
	if (parseInt(process_lines) > 0)
	{
		var sizes = sizes_set.split(',');
		// 1 - extract selectors elements up to process_lines index
		var size_selectors = $$('#lines_block_'+n.toString()+' select.font_size_select');
		size_selectors.each(function(sel) {
			// get selector index
			var line_index = $(sel).readAttribute('id').replace('line_font_size_'+n.toString()+'_','');
			line_index = parseInt(line_index);
			// check if processed only previously existing selectors
			if (line_index > process_lines)	{
				$break;
			}
			// 2 - delete existing options set
			var selected = null;
			var select_options = $(sel).childElements();
			select_options.each(function(opt){
				var is_selected = $(opt).readAttribute('selected');
				if (is_selected != null) {
					selected = $(opt).value;
				}
				$(opt).remove();
			});
			// 3 - create new options set
			sizes.each(function(val){
				var new_option = new Element('option', {value: val});
				if (val == selected) {
					new_option.writeAttribute('selected', 'selected');
				}
				new_option.update(val);
				$(sel).insert({bottom: new_option});
			});
		});
	}
}

/*
* getting current size item number in sizes list for section specified
* @param n integer identifier of section
* @output integer current size item number
*/
function get_current_size_index(n)
{
	var item_no = -1;
	
	if ($('size_selector_'+n))
	{
		var item_no = parseInt($('size_selector_'+n).value);
	}
	
	return item_no;
}

/*
* getting named parameter value for current size of specified section
* @param n integer identifier of section
* @param parameter_name string parameter name (alias)
* @output string parameter value
*/
function get_current_size_parameter(n, parameter_name)
{
	var cur_size = get_current_size_index(n);
	
	if (cur_size >= 0)
	{
		var parameter_value = sizes.get(cur_size.toString()).get(parameter_name);
	}
	else
	{
		var parameter_value = '';
	}
	
	return parameter_value;
}

/*
* applying size-dependent parameters
* @param n integer identifier of section
* @param par_name string parameter name
* @param par_val string parameter value
*/
function apply_size_parameters(n, par_name, par_val)
{
	switch (par_name.toLowerCase())
	{
		case 'label_width':
		case 'label_height':
//		case 'label_grid_pitch':
		case 'font_min_size':
		case 'line_min_width':
		case 'line_min_height':
//		case 'image_max_width':
//		case 'image_max_height':
			set_design_parameter(n, par_name.toLowerCase(), par_val);
			break;
		case 'size_max_lines':
			set_design_parameter(n, par_name.toLowerCase(), par_val);
			check_excess_lines(n, parseInt(par_val));
			break;
		case 'font_size':
			//rebuild_font_selectors(n, par_val);
			break;
	}
}

/*
* check for excessive lines on size selection
* @param n integer identifier of section
* @param size_lines integer a maximal allowed number of lines for selected size
*/
function check_excess_lines(n, size_lines)
{
	var lines_amt = parseInt(get_design_parameter(n, 'txt_lines_amount'));
	
	if (lines_amt > size_lines)
	{
		for (var k = lines_amt; k > size_lines; k--)
		{
			remove_line_block(n,k,true);
		}
	}
}

/*
* set design parameters array element
* @param n integer identifier of section
* @param alias string parameter alias
* @param value string parameter value
*/
function set_design_parameter(n,alias,value)
{
	if (alias.length == 0)
	{
		return;
	}
	
	var add_param = new Hash();
	
	add_param.set(alias, value);
	
	design_parameters.set(n.toString(), design_parameters.get(n.toString()).merge(add_param));
	
	return;
}

/*
* set design parameters array element
* @param n integer identifier of section
* @param alias string parameter alias
* @output string parameter value
*/
function get_design_parameter(n,alias)
{
	if (alias.length == 0)
	{
		return '';
	}
	
	//return design_params[parseInt(n)].get(alias);
	return design_parameters.get(n.toString()).get(alias);
}

/*
* updating flash designer input parameters
* @param n integer identifier of section
* @param alias string parameter alias (name)
* @param value string parameter value
*/
function update_design(n,alias,value)
{
//	if (!locker.locked())
//	{
//		locker.lock();
		
		var img_selected = get_design_parameter(n, 'selected_image');
		var txt_entered  = is_text_entered(n);
/*
		var txt_entered  = false;
		
		var section_lines = new Hash();
		section_lines = txt_lines_parameters.get(n.toString());
		
		//alert('section lines content: '+section_lines.inspect());
		
		section_lines.each(function(line_data) 
		{
			var line_props = new Hash();
			line_props = line_data.value;
			
			line_props.each(function(prop_item)
			{
				//alert('key = '+prop_item.key+', val = '+prop_item.value);
				if ((prop_item.key == 'text') && (prop_item.value != '') && (prop_item.value != undefined))
				{
					txt_entered = true;
					
					throw $break;
				}
			});
		});
*/		
		if ( (img_selected == '') && !txt_entered )
		{
			current_label_state = false;
		}
		else
		{
			current_label_state = true;	
		}
		
		//alert('label initiated = '+current_label_state);
		
		labels.set(n.toString(), labels.get(n.toString()).merge({'initiated' : current_label_state}));
		
		var obj = swfobject.getObjectById("editor_"+n.toString());
		
		if (obj && typeof obj.post_label_parameters != "undefined") 
		{
			switch (alias)
			{	
				case 'design':
					//alert(design_parameters.get(n.toString()).inspect());
					obj.post_label_parameters(design_parameters.get(n.toString()).keys(),design_parameters.get(n.toString()).values());
					//alert('after design updated');
					break;
				case 'text':
					//alert(txt_lines_parameters.get(n.toString()).get(value.toString()).values().inspect());
					obj.post_text_data(txt_lines_parameters.get(n.toString()).get(value.toString()).values(), parseInt(value));
					break;
			}
		}
		else
		{
			/*
			if (obj == null)
			{
				alert('swf object error 1');
			}
			else if (typeof obj.post_label_parameters == "undefined")
			{
				alert('function undefined 1');
			}
			*/
			alert(get_msg_by_id('flash_obj_init_err'));
		}
		
		//alert('update completed');
//	}
}

/*
* check if text in section entered
* @param n integer identifier of section
*/
function is_text_entered(n)
{
	var txt_entered  = false;
	
	var section_lines = new Hash();
	section_lines = txt_lines_parameters.get(n.toString());
	
	//alert('section lines content: '+section_lines.inspect());
	
	section_lines.each(function(line_data) 
	{
		var line_props = new Hash();
		line_props = line_data.value;
		
		line_props.each(function(prop_item)
		{
			//alert('key = '+prop_item.key+', val = '+prop_item.value);
			if ((prop_item.key == 'text') && (prop_item.value != '') && (prop_item.value != undefined))
			{
				txt_entered = true;
				
				throw $break;
			}
		});
	});
	
	return txt_entered;
}

/**
* gets image name for specified section
* @param n integer identifier of section 
*/
function get_image_name(n)
{
	//alert('set section image name');
	
	var current_image_name = '';
	
	if ($('label_name_'+n))
	{
		current_image_name = $('label_name_'+n).value;
	}
	
	new Ajax.Request(ajax_path+'get_img_name.php', {method:"post", parameters : $H({section_no : n, image_name : current_image_name, site_cpath : site_cpath}), onSuccess:get_image_name_actions});
}

// callback on successful image name getting 
function get_image_name_actions(transport)
{
	//alert(transport.responseText);
	
	var data = eval('(' + transport.responseText + ')');
	
	if (data.result == 'ok')
	{
		if ($('label_name_'+data.sect_no))
		{
			$('label_name_'+data.sect_no).value = data.img_name;
			
			set_design_parameter(data.sect_no, 'image_output_name', data.img_name);
			
			//alert('set name = '+data.img_name);
		}

		set_design_parameter(parseInt(data.sect_no), 'image_output_path', config_table.get('output_path'));
		set_design_parameter(parseInt(data.sect_no), 'image_script_name', config_table.get('img_receiver'));
		set_design_parameter(parseInt(data.sect_no), 'design_script_name', config_table.get('design_receiver'));
		
		update_design(data.sect_no, 'design', '');
	}
}

/**
* increase value of updater field for image updating
* @param n integer section number
* @param stamp_width integer resulting stamp width
* @param stamp_height integer resulting stamp height
*/
function update_section_cart(n, stamp_width, stamp_height)
{
	if (labels.get(n.toString()).get('initiated') == true)
	{
		if ($('label_status_'+n))
		{
			$('label_status_'+n).value = n;
		}
		
		/*
		if ($('output_updater_'+n))
		{
			$('output_updater_'+n).value = parseInt($('output_updater_'+n).value) + 1;
		}
		
		if ($('debug_updater'))
		{
			$('debug_updater').update($('output_updater_'+n).value.toString());
		}
		*/
		
		labels.set(n.toString(), labels.get(n.toString()).merge({'stamp_width' : stamp_width.toString(), 'stamp_height' : stamp_height.toString()}));
		
		//new Ajax.Request(ajax_path+'update_label.php', {method:"post", parameters : $H({section_no : n.toString(), filename: $('label_name_'+n.toString()).value + '_p.jpg', stamp_width: stamp_width, stamp_height: stamp_height, rel_output: config_table.get('rel_output_path'), abs_output: config_table.get('output_path'), site_cpath: site_cpath}), onSuccess:update_section_cart_actions});

//		if (locker.locked())
//		{
//			locker.unlock();
//		}

		//alert(labels.get(n.toString()).inspect());
	}
	
	new Ajax.Request(ajax_path+'update_label.php', {method:"post", parameters : $H({section_no : n.toString(), filename: $('label_name_'+n.toString()).value + '.jpg', stamp_width: stamp_width, stamp_height: stamp_height, rel_output: config_table.get('rel_output_path'), abs_output: config_table.get('output_path'), site_cpath: site_cpath}), onSuccess:update_section_cart_actions});
}

function update_section_cart_actions(transport)
{
	//alert(transport.responseText);
	
	var data = eval('(' + transport.responseText + ')');

	if (data.result == "ok")
	{
		$('image_cell_'+data.sect_no).update(data.content);
		/*
		if ( $('debug_request') )
		{
			var tmp_str = data.content.replace('>', ' ');
			tmp_str = tmp_str.replace('<', ' ');
			
			$('debug_request').update(tmp_str);
		}
		*/
	}
}

/** 
* send ajax request for picture removal
* @param label_section integer identifier of section 
* @param label_name string name of label image to be removed 
*/
function remove_label(label_section, label_name)
{
	//alert(label_name);
	new Ajax.Request(ajax_path+'remove_label.php', {method:"post", parameters : $H({'label_section' : label_section.toString(), 'label_name' : label_name, site_apath : site_apath, 'site_cpath' : site_cpath}), onSuccess:remove_label_response });
}

function remove_label_response(transport)
{
	//alert(transport.responseText);
	
	var data = eval('(' + transport.responseText + ')');

	if (data.result == "ok")
	{
		if ($('image_cell_'+data.sect_no))
		{
			$('image_cell_'+data.sect_no).update(config_table.get('snap_placeholder'));
		}
	}
}

/**
* send AJAX request to categories list 
* @param n identifier of section 
*/
function load_categories(n)
{
	new Ajax.Request(ajax_path+'categories.php', {method:"post", parameters : $H({section_no : n.toString()}), onSuccess:build_categories_list});
}

function build_categories_list(transport)
{
	//alert(transport.responseText);
	
	var data = eval('(' + transport.responseText + ')');
	
	if (data.result == "ok")
	{
		if ($('category_tabs_' + data.section_no.toString()))
		{
			$('category_tabs_'+ data.section_no.toString()).update(data.selector);
		}
		
		select_category(data.section_no,data.first_cat);
	}
}

/** 
* function generates icons grid for motif table
* @param n integer number of current section
* @param category_name string name of category containing images  
*/
function select_category(n, category_name)
{
	if (!motif_table_locker.locked())
	{
		motif_table_locker.lock();

		new Ajax.Request(ajax_path+'motif_table.php', {method:"post", parameters : $H({'section_no' : n, 'category_name' : category_name, 'site_cpath' : site_cpath}), onSuccess : select_category_actions, onFailure : safe_motif_unlock });
	}
	else
	{
		alert('locked!');
	}
}

/**
* form icons grid
*/
function select_category_actions(transport)
{
	motif_table_locker.unlock();
	
	//alert(transport.responseText);
	
	var data = eval('(' + transport.responseText + ')');
	
	if ((data.result == 'ok') && (data.section_no != '') && (data.category != ''))
	{
		$('icons_grid_'+data.section_no).update(data.icons_grid);
	
		//var selected_tabs = $('tabs_'+data.section_no).getElementsBySelector('[class="tab_selected"]')
		var selected_tabs = $$('#tabs_'+data.section_no+' a.tab_selected');
		
		if (selected_tabs.length > 0)
		{
			selected_tabs.each(function(tab_element) {tab_element.className = 'tab';});
		}
		
		if ($(data.category + '_' + data.section_no))
		{
			$(data.category + '_' + data.section_no).className = 'tab_selected';
		}
 	}
}

/**
* function disable locker case of ajax request for motif table generation failed
*/
function safe_motif_unlock()
{
	//alert('select cat failure');
	motif_table_locker.unlock();
}

/**
* function disable locker case of ajax request for picture generation failed
*/
function safe_failure()
{
	locker.unlock();
}

/*
* change label color processing
* @param n integer identifier of section
* @param color string identifier of color
*/
function change_color(n, color_identifier)
{
	colors.each(function(color_data) 
	{
		if (color_data.key == color_identifier)
		{
			var selected_state = '_selected';	
			
			if ($('label_color_'+n.toString()))
			{
				($('label_color_'+n.toString())).value = color_data.value.get('alias');
			}
			
			labels.set(n.toString(), labels.get(n.toString()).merge({'current_color' : color_identifier}));
		}
		else
		{
			var selected_state = '';	
		}
		
		//alert(color_data.key+' / state = '+selected_state);
	
		if ($('color_'+color_data.value.get('alias')+'_'+n.toString()))
		{
			($('color_'+color_data.value.get('alias')+'_'+n.toString())).src = 'images/clr_'+color_data.value.get('alias')+selected_state+'.gif';
		}

		if ($('btm_color_'+color_data.value.get('alias')+'_'+n.toString()))
		{
			($('btm_color_'+color_data.value.get('alias')+'_'+n.toString())).src = 'images/clr_'+color_data.value.get('alias')+selected_state+'.gif';
		}
	});
	
	change_price(n);
	
	if ($('label_color_'+n.toString()))
	{
		set_design_parameter(n, 'label_color', $('label_color_'+n.toString()).value);
		//get_image_name(n, '', 'design', 0);
		update_design(n, 'design', '');
	}
}

/*
* label border processing
* @param n integer identifier of section
* @param b integer border option selected
*/
function change_border(n,b)
{
	var use_border = 'no';
	
	if (b > 0)
	{
		use_border = 'yes';
		
		if ($('has_no_border_'+n))
		{
			$('has_no_border_'+n).checked = false;
		}
	}
	else
	{
		if ($('has_border_'+n))
		{
			$('has_border_'+n).checked = false;
		}
	}

	set_design_parameter(n, 'label_border', use_border);
	update_design(n, 'design', '');
}

/*
* label blocks alignment
* @param n integer identifier of section
* @param val string alignment option to be set
*/
function change_alignment(n, val) {
	if ($('blocks_alignment_'+n.toString())) {
		
		if ((val != undefined) && (val != null)) {
			$$('blocks_alignment_'+n.toString()+' option').each(function(o){
				if (o.value == val) {
					  o.selected = true;
					  throw $break;
				}
			});
		}
	
		set_design_parameter(n, 'blocks_alignment', $('blocks_alignment_'+n.toString()).value);
		update_design(n, 'design', '');
	}
}

/**
* prepare motiv selector
* @param n integer identifier of section
* @param s integer identifier of selector ( 1 == motiv selector; 2 == motiv uploader )
*/
function motif_selector(n,s)
{
	switch (s)
	{
		case 1:
			motifs_table(n,true);
			upload_motif(n,false);
			break;
		case 2:
			motifs_table(n,false);
			upload_motif(n,true);
			break;
	}
}

/**
* motivs selector show / hide
* @param n integer identifier of section
* @param show bolean 
*/
function motifs_table(n,show)
{
	if ($('motif_selector_'+n).style.display == 'none' && show)
	{
		$('motif_selector_'+n).style.display = 'block';
	}
	else if ($('motif_selector_'+n).style.display == 'block' && !show)
	{
		$('motif_selector_'+n).style.display = 'none';
	}
}

/**
* motiv uploader show / hide
* @param n integer identifier of section
* @param show bolean 
*/
function upload_motif(n,show)
{
	if ($('motif_uploader_'+n).style.display == 'none' && show)
	{
		$('motif_uploader_'+n).style.display = 'block';
	}
	else if ($('motif_uploader_'+n).style.display == 'block' && !show)
	{
		$('motif_uploader_'+n).style.display = 'none';
	}
	/*
	if ($('uploaded_image_'+n))
	{
		$('uploaded_image_'+n).value = '';
	}
	*/
}

/**
* set successfully uploaded filename
* @param n string section number
* @param file_name string uploded file name
* @param name_prefix string unique name prefix
*/
function set_uploaded_filename(n, response)
{
//	alert(response);
	
	var data = eval('(' + response + ')');
	
	if ((data.result == 'ok'))
	{
		if ($('uploaded_image_'+n))
		{
			$('uploaded_image_'+n).value = data.img_filename;
		}
		
		if ($('selected_image_'+n))
		{
			$('selected_image_'+n).value = '';
		}
	
		if ($('logo_preview_'+n)) 
		{
			$('logo_preview_'+n).src = ''
			
			if (parseInt(data.img_width) > 400)
			{
				$('logo_preview_'+n).setStyle({'width': '400px', 'height': ''});
			}
			else if (parseInt(data.img_height) > 150) 
			{
				$('logo_preview_'+n).setStyle({'height': '150px', 'width': ''});
			} 
			else 
			{
				$('logo_preview_'+n).setStyle({'height': data.img_height.toString()+'px', 'width': ''});
			}

			$('logo_preview_'+n).src = config_table.get('uploads_path')+$('uploaded_image_'+n).value;
		}
	
		if ($('image_approval_'+n))
		{
			$('image_approval_'+n).value = 1;
		}
		
		if (data.img_filename != '')
		{
			labels.set(n.toString(), labels.get(n.toString()).merge({'initiated' : true}));
			
			if ($('label_status_'+n.toString()))
			{
				$('label_status_'+n.toString()).value = n.toString();
			}
		}
		
		//set_design_parameter(n, 'selected_image', config_table.get('uploads_path')+$('uploaded_image_'+n).value);
		//update_design(n, 'design', '');
	}
	else if (data.result == 'error')
	{
		if ($('logo_preview_'+n)) 
		{
			$('logo_preview_'+n).src = save_logo_path;
			
			if (save_logo_width != '')
			{
				$('logo_preview_'+n).setStyle({'height': '', 'width': save_logo_width});
			}
			else
			{
				$('logo_preview_'+n).setStyle({'height': save_logo_height, 'width': ''});
			}
		}
		
		if ($('image_approval_'+n))
		{
			$('image_approval_'+n).value = save_image_approved;
		}

		alert(get_msg_by_id('uploader_file_upload_error'));
	}

	save_logo_path = '';
	save_logo_height = '';
	save_logo_width = '';
	save_image_approved = '';
}

/**
* change picture on the label
* @param n integer current section number
* @param category_name string current category name
* @param motifpic string current picture
*/
function change_motif(n, category_name, motifpic)
{
	/*
	if (config_table.get('project_id') == 'navnestempel')
	{
		if (check_newby_block_exists(n) && ($('selected_image_'+n).value == '') && ($('uploaded_image_'+n).value == ''))
		{
			alert(get_msg_by_id('flash_ca_block_exists_on_insert'));
			return;
		}
	}
	*/
	new Ajax.Request(ajax_path+'motif_change.php', {method:"post", parameters : $H({'section_no' : n, 'category_name' : category_name, 'motif_img' : motifpic, 'site_cpath' : site_cpath}), onSuccess : change_motif_actions });

}

/**
* selected image highlighting
*/
function change_motif_actions(transport)
{
	//alert(transport.responseText);
	
	var data = eval('(' + transport.responseText + ')');
	
	if ((data.result == 'ok') && (data.category_name != ''))
	{
		if ($('selected_image_'+data.section_no))
		{
			$('selected_image_'+data.section_no).value = data.motif_img;
		}
		
		if ($('uploaded_image_'+data.section_no))
		{
			$('uploaded_image_'+data.section_no).value = '';
		}

		if ($('logo_preview_'+data.section_no)) 
		{
			$('logo_preview_'+data.section_no).src = 'images/no_logo.png';
			$('logo_preview_'+data.section_no).setStyle({'height': '', 'width': ''});
		}
		
		if ($('image_approval_'+data.section_no))
		{
			$('image_approval_'+data.section_no).value = 1;
		}
		
		if (data.motif_img != '')
		{
			labels.set(data.section_no.toString(), labels.get(data.section_no.toString()).merge({'initiated' : true}));

			if ($('label_status_'+data.section_no.toString()))
			{
				$('label_status_'+data.section_no.toString()).value = data.section_no.toString();
			}
		}

		/*
		//var selected_motifs = $('icons_grid_'+data.section_no).getElementsBySelector('[class="SELECTED"]');
		var selected_motifs = $$('#icons_grid_'+data.section_no+' div.SELECTED');
		
		//alert('selected motifs amt = '+selected_motifs.length);
		
		if (selected_motifs.length > 0)
		{
			selected_motifs.each(function(motif_element) 
								 {
									 //alert('initial class name = '+motif_element.className);
									motif_element.className = 'OFF';
									 //alert('resulting class name = '+motif_element.className);
									 
									//alert(motif_element.id);
									
									if (motif_element.addEventListener)
									{
										//alert('branch 1');
										motif_element.addEventListener('mouseover',function(){this.className='ON';},false);
										motif_element.addEventListener('mouseout',function(){this.className='OFF';},false);
									}
									else if (motif_element.attachEvent)
									{
										//alert('branch 2'); // .setAttribute(name, value);
										//alert();
										motif_element.detachEvent('onmouseover',function(){motif_element.className='ON';}); // bugfx
										motif_element.attachEvent('onmouseover',function(){motif_element.className='ON';});
										
										motif_element.detachEvent('onmouseout',function(){motif_element.className='OFF';}); // bugfix
										motif_element.attachEvent('onmouseout',function(){motif_element.className='OFF';});
									}
									else
									{
										//alert('branch 3');
										motif_element.onmouseover = function(){this.className='ON';};
										motif_element.onmouseout = function(){this.className='OFF';};
									}

								 });
		}
		*/
		
		clear_motif_selector(data.section_no);
		
		var current_image_identifier = data.motif_img.slice(0, -4)+'_'+data.section_no;
		
		if ($(current_image_identifier)) 
		{	
			$(current_image_identifier).update(data.selector);
		}
		
		//alert('before update design');
		
//		set_design_parameter(data.section_no, 'selected_image', config_table.get('prn_motifs_path')+data.motif_img);
//		update_design(data.section_no,'design', '');
		
		//render_label(active_label);
		
		if ((parseInt(config_table.get('max_text_length')) > 0) && (labels.get(parseInt(data.section_no)).get('chars_notification') == false) && ($('selected_image_'+data.section_no) || $('uploaded_image_'+data.section_no)))
		{
			var selected_image = $('selected_image_'+data.section_no).value;
			var uploaded_image = $('uploaded_image_'+data.section_no).value;
			
			if ((selected_image.length > 0) || (uploaded_image.length > 0))
			{
				var section_data = txt_lines_parameters.get(data.section_no);
				
				filled_txt_lines = section_data.findAll(function(line_data) { return line_data.value.get('text').length > parseInt(config_table.get('max_text_length')); } );
				
				if (filled_txt_lines.length > 0)
				{
					labels.set(parseInt(data.section_no), labels.get(parseInt(data.section_no)).merge({'chars_notification' : true}));
					alert(get_msg_by_id('max_text_length_reached'));
				}
			}
		}
	}
}

/**
* clear motif selector
* @param n integer identifier of section
*/
function clear_motif_selector(n)
{
	var selected_motifs = $$('#icons_grid_'+n+' div.SELECTED');
	
	if (selected_motifs.length > 0)
	{
		 selected_motifs.each(function(motif_element) 
		 {
			motif_element.className = 'OFF';
			 
			if (motif_element.addEventListener)
			{
				motif_element.addEventListener('mouseover',function(){this.className='ON';},false);
				motif_element.addEventListener('mouseout',function(){this.className='OFF';},false);
			}
			else if (motif_element.attachEvent)
			{
				motif_element.detachEvent('onmouseover',function(){motif_element.className='ON';}); // bugfx
				motif_element.attachEvent('onmouseover',function(){motif_element.className='ON';});
				
				motif_element.detachEvent('onmouseout',function(){motif_element.className='OFF';}); // bugfix
				motif_element.attachEvent('onmouseout',function(){motif_element.className='OFF';});
			}
			else
			{
				motif_element.onmouseover = function(){this.className='ON';};
				motif_element.onmouseout = function(){this.className='OFF';};
			}
	
		 });
	}
}

/**
* clear motiv image name
* @param n integer identifier of section
*/
function clear_motif(n)
{
	if ($('current_image_'+n))
	{
		$('current_image_'+n).remove();
	}

	if ($('selected_image_'+n))
	{
		$('selected_image_'+n).value = '';
	}
	
	if ($('uploaded_image_'+n))
	{
		$('uploaded_image_'+n).value = '';
	}

	if ($('logo_preview_'+n)) 
	{
		$('logo_preview_'+n).src = 'images/no_logo.png';
		$('logo_preview_'+n).setStyle({'height': '', 'width': ''});
	}
	
	if ($('image_approval_'+n))
	{
		$('image_approval_'+n).value = 0;
	}
	
	clear_motif_selector(n);
	
	var txt_entered = is_text_entered(n);

	if ( !txt_entered )
	{
		current_label_state = false;
	}
	else
	{
		current_label_state = true;	
	}

	labels.set(n.toString(), labels.get(n.toString()).merge({'initiated' : current_label_state}));

	if ($('label_status_'+n) && (current_label_state == false))
	{
		$('label_status_'+n).value = '0';
	}

	//set_design_parameter(n, 'selected_image', $('selected_image_'+n).value);
	//update_design(n, 'design', '');
}

/**
* changing price for a cell
* @param n integer identifier of section to be changed
*/
function change_price(n)
{
	var price = 0;
	var price_color = 0;
	
	price = get_current_size_parameter(n, 'size_price');
	
	if (config_table.get('use_colors') == true)
	{
		color_identifier = labels.get(n.toString()).get('current_color');
		
		colors.each(function(color_data) 
		{
			if (color_data.key == color_identifier)
			{
				price_color = color_data.value.get('price');
			}
		});
	}
	
	var quantity_used = 1;
	
	if ($('quantity_'+n.toString()))
	{
		quantity_used = parseInt($('quantity_'+n.toString()).value);
	}
	
	if (config_table.get('fract_price')) // price is not integer
	{
		price = parseFloat(price);
		price_color = parseFloat(price_color);
		price = (price + price_color).toFixed(2);
	}
	else
	{
		price = parseInt(price);
		price_color = parseInt(price_color);
		price = price + price_color;
	}

	//alert('section = '+n+', color price = '+price_color+', price = '+price+', qty = '+quantity_used);

	var discount_used = 0;
	
	if (config_table.get('use_discounts'))
	{
		var discount_items = disc_table.findAll(function(d){return quantity_used >= parseInt(d.key);});
		
		if ((discount_items != undefined) && (discount_items.length > 0))
		{
			discount_used = discount_items.pop().value;
		}
	
		if (isNaN(discount_used) || (discount_used == undefined))
		{
			discount_used = 0;
		}
	}
	
	var multiplier = ((100 - discount_used) / 100);
	
	if (config_table.get('fract_price')) // price is not integer
	{
		var amount = (price * multiplier).toFixed(2);
		var result_price = (amount * quantity_used).toFixed(2);
	}
	else
	{
		var amount = Math.ceil(price * multiplier);
		var result_price = amount * quantity_used;
	}
	
	//alert('amount = '+amount+', result_price = '+result_price);
	//alert(result_price);
	
	if ($('price_whole'+n.toString())) // if discounts block exists
	{
		$('price_whole'+n.toString()).value = price;
	}

	if ($('price_hidden'+n.toString()))
	{
		$('price_hidden'+n.toString()).value = result_price;
	}
	
	if ($('amount_'+n.toString()))
	{
		$('amount_'+n.toString()).value = amount;
	}
	
	if ($('price_label_'+n.toString()))
	{
		//$('price_label_'+n.toString()).innerHTML = result_price;
		$('price_label_'+n.toString()).update(result_price);
	}
	
	update_total();
	//update_section(n);
}

/**
* updating total
*/
function update_total()
{
	totalinnerHTML = 0;
	
	if ($('disc_amt'))
	{
		full_totalinnerHTML = 0;
	}
	
	var payment_cost = 0;

	payment_costs.each(function(payment_data)
	{
		if ( $('payment_button_'+payment_data.key.toString()) )
		{
			if ( $('payment_button_'+payment_data.key.toString()).readAttribute('type') != "hidden" ) 
			{
				if ( $('payment_button_'+payment_data.key.toString()).checked )
				{
					payment_cost = payment_data.value;
					throw $break;
				}
			}
			else if ( $('payment_button_'+payment_data.key.toString()).value = payment_data.key.toString())
			{
				payment_cost = payment_data.value;
				throw $break;
			}
		}
	});
	
	if (config_table.get('fract_price')) // price is not integer
	{
		payment_cost = payment_cost.toFixed(2);
	}
	else
	{
		payment_cost = parseInt(payment_cost);
	}
	
	//alert(payment_cost);

	labels.each(function(label_data)
	{
		if (config_table.get('fract_price')) // price is not integer
		{
			totalinnerHTML = totalinnerHTML + parseFloat($('price_hidden' + label_data.key).value);
		}
		else
		{
			totalinnerHTML = totalinnerHTML + parseInt($('price_hidden' + label_data.key).value);
		}
		
		var quantity_used = 1;
		
		if ((config_table.get('project_id') != 'idband') && $('quantity_' + label_data.key))
		{
			quantity_used = parseInt($('quantity_' + label_data.key).value);
		}
		
		if ($('disc_amt'))
		{
			var price_whole = 0;
			
			if (config_table.get('fract_price')) // price is not integer
			{
				price_whole = (quantity_used * $('price_whole' + label_data.key).value).toFixed(2);
			}
			else
			{
				price_whole = quantity_used * parseInt($('price_whole' + label_data.key).value);
			}
			
			full_totalinnerHTML = full_totalinnerHTML + price_whole;
		}
	});
	
	//alert(full_totalinnerHTML);
	
	//$('total').innerHTML = totalinnerHTML + payment_cost;//.toFixed(2);
	$('total').update( totalinnerHTML + payment_cost );
	
	if ($('disc_amt'))
	{
		if (config_table.get('fract_price')) // price is not integer
		{
			//$('disc_amt').innerHTML = (full_totalinnerHTML - totalinnerHTML).toFixed(2);
			$('disc_amt').update( (full_totalinnerHTML - totalinnerHTML).toFixed(2) );
		}
		else
		{
			//$('disc_amt').innerHTML = (full_totalinnerHTML - totalinnerHTML);
			$('disc_amt').update( full_totalinnerHTML - totalinnerHTML );
		}
	}
	
	$('shipping').value = payment_cost;

	if (payment_cost == 0)
	{
		//$('payment_fee_currency').innerHTML = '';
		//$('payment_fee_sum').innerHTML = config_table.get('free_shipping');
		$('payment_fee_currency').update('');
		$('payment_fee_sum').update( config_table.get('free_shipping') );
	}
	else
	{
		//$('payment_fee_currency').innerHTML = config_table.get('currency_name') + ' ';
		//$('payment_fee_sum').innerHTML = payment_cost;
		$('payment_fee_currency').update( config_table.get('currency_name') + ' ' );
		$('payment_fee_sum').update( payment_cost );
	}
}

/**
* remove label
* @param n integer identifier of section 
*/
function del_design(n)
{
	if (confirm(get_msg_by_id('design_deleting_confirmation')))
	{
		//remove_label(n, $F('label_name_'+n.toString()));
		
		//clearing item from the cart	
		if ($('order_label_'+n.toString()))
		{
			remove_label(n.toString(), $('label_name_'+n.toString()).value);
			
			total_labels_active = labels.findAll(function(label_data) { return label_data.value.get('initiated'); } );
			
			if (labels.size() > 1)
			//if (total_labels_active.size() > 1)
			{
				if ($('order_label_'+n.toString()))
				{
					$('order_label_'+n.toString()).remove();
				}
				
				if ($('navnelapper_'+n.toString()))
				{
					swfobject.removeSWF('editor_'+n.toString());
					//swfobject.removeSWF('file_uploader_'+n.toString());
					
					$('navnelapper_'+n.toString()).remove();	
				}
				
				labels.unset(n.toString());
				design_parameters.unset(n.toString());
				txt_lines_parameters.unset(n.toString());
			}
			else if (labels.get(n.toString()).get('initiated') == true)
			{
				if ($('label_status_'+n.toString()))
				{
					$('label_status_'+n.toString()).value = '0';
				}
				
				if ($('selected_image_'+n.toString()))
				{
					$('selected_image_'+n.toString()).value = '';
				}
				
				if ($('uploaded_image_'+n.toString()))
				{
					$('uploaded_image_'+n.toString()).value = '';
				}
				
				// delete previous snapshot & make new snapshot saving impossible
				remove_label(n.toString(), $('label_name_'+n.toString()).value);
				
				$('label_name_'+n.toString()).value = '';

				set_design_parameter(n, 'image_output_name', '');
				/////////////////////////////////////////////////////////////////
				
				clear_design_params(n);
				
				labels.set(n.toString(), labels.get(n.toString()).merge({'initiated' : false, 'chars_notification' : false}));
				design_parameters.set(n.toString(), design_parameters.get(n.toString()).merge({'section_index' : n.toString(), 'txt_lines_amount' : '0', 'txt_lines_index' : '0'}));
				txt_lines_parameters.set(n.toString(), txt_lines_parameters.get(n.toString()).merge({'1' : $H({'index' : '0', 'seq_no' : '0'})}));
				
				change_color(n.toString(), color_identifiers[0]);
				change_border(n.toString(), 0);
				change_alignment(n.toString());
				
				get_image_name(n.toString());
			}
		}
		
		update_total();
	}
}

/*
* clear section design parameters
*/
function clear_design_params(n)
{
	set_design_parameter(n, 'selected_image', '');

	update_design(n, 'design', '');
	
	var section_lines = new Hash();
	section_lines = txt_lines_parameters.get(n.toString());

	section_lines.each(function(line_data) 
	{
		if (line_data.value.get('index') != '0')
		{
			remove_line_block(n,line_data.key,false);
		}
	});
}

/**
* add new navigation panel
*/
function add_design()
{
	new_label_index = parseInt(labels.keys().max())+1;
	labels.set(new_label_index.toString(), $H({'initiated' : false, 'chars_notification' : false, 'current_product' : '', 'current_color' : '', 'stamp_width' : '', 'stamp_height' : ''}));	
	//active_label = new_label_index.toString();
	
	if (products_loaded == false)
	{
		load_products();	
	}
	
	if ((colors_loaded == false) && (config_table.get('use_colors') == true))
	{
		load_colors();	
	}
	
	new Ajax.Request(ajax_path+'add_design.php',{method:"post", parameters : $H({section_no : new_label_index, site_apath : site_apath, site_cpath : site_cpath}), onSuccess:onSusccessInsertDesign});

}

/**
* process succsessful design section request
*/
function onSusccessInsertDesign(transport)
{
	//alert(transport.responseText);
	
	var data = eval('(' + transport.responseText + ')');

	if (data.result == 'ok')
	{
		var divTag = document.createElement("div");
		
		divTag.innerHTML = data.design_item;
		//divTag.update(data.design_item);
		divTag.setAttribute('id','navnelapper'+data.sect_no);
		
		$("navnelapperdiv").appendChild(divTag);
		
		var flashvars = {};
		var params = {movie : 'flash/designer_03.swf', swliveconnect : true, allowScriptAccess : 'always'};
		var attributes = {id : 'editor_'+data.sect_no, name : 'swf_editor'};
		
		swfobject.embedSWF("flash/designer_03.swf", "flash_designer_"+data.sect_no, editor_obj_width, editor_obj_height, "9.0.0", "flash/expressInstall.swf", flashvars, params, attributes);
		
		/*
		flashvars = {config_file : 'xml/flash_uploader.xml', section_no : data.sect_no};
		params = {movie : 'flash/flash_uploader.swf', quality : 'high', allowScriptAccess : 'sameDomain', allowFullScreen : 'false', bgcolor : '#ffffff'};
		attributes = {id : 'flash_uploader_'+data.sect_no, name : 'flash_uploader', align : 'middle'};
		
		swfobject.embedSWF("flash/flash_uploader.swf", "flash_uploader_"+data.sect_no, "433", "65", "9.0.0", "flash/expressInstall.swf", flashvars, params, attributes);
		*/
		
		new AjaxUpload('file_uploader_'+data.sect_no, {
														action: 'scripts/upload.php',
														onSubmit : function(file , ext)
																   {
																		if (! (ext && /^(jpg|png|jpeg|gif)$/.test(ext)))
																		{
																				alert(get_msg_by_id('uploader_wrong_file_type'));
																				return false;
																		} else {
																			if ($('logo_preview_'+data.sect_no)) 
																			{
																				save_logo_path = $('logo_preview_'+data.sect_no).src;
																				save_logo_height = $('logo_preview_'+data.sect_no).getStyle('height');
																				save_logo_width = $('logo_preview_'+data.sect_no).getStyle('width');
																				
																				$('logo_preview_'+data.sect_no).src = 'images/loading.gif';
																				$('logo_preview_'+data.sect_no).setStyle({'height': '35px', 'width': ''});
																			}
																			
																			if ($('image_approval_'+data.sect_no))
																			{
																				save_image_approved = $('image_approval_'+data.sect_no).value;
																				$('image_approval_'+data.sect_no).value = 0;
																			}
																		}
																   },
														onComplete: function(file, response) 
																	{
																		set_uploaded_filename(data.sect_no, response);
																	}
													  });
		
		
		new Ajax.Request(ajax_path+'add_cart_item.php',{method:"post", parameters : $H({section_no : data.sect_no, site_apath : site_apath, site_cpath : site_cpath}), onSuccess:onSusccessInsertCartItem});
	}
	else
	{
		alert(get_msg_by_id('design_adding_error'));
	}
}

/**
* process succsessful cart item request
*/
function onSusccessInsertCartItem(transport)
{
	//alert(transport.responseText);
	
	var data = eval('(' + transport.responseText + ')');

	if (data.result == 'ok')
	{
		Insertion.Bottom('shopping_cart', data.cart_item);
		
		design_parameters.set(data.sect_no, $H({'section_index' : data.sect_no.toString(), 'txt_lines_amount' : '0', 'txt_lines_index' : '0', 'selected_image' : ''}));
		txt_lines_parameters.set(data.sect_no, $H({'1' : $H({'index' : '0'})}));
		
		//swfobject.registerObject("editor_"+data.sect_no.toString(), "9.0.0", "flash/expressInstall.swf");
		
		load_categories(data.sect_no);
		change_size(data.sect_no, true);
		change_color(data.sect_no, color_identifiers[0]);
		change_border(data.sect_no, 0);
		change_alignment(data.sect_no);
		get_image_name(data.sect_no);
	}
	else
	{
		alert(get_msg_by_id('design_adding_error'));
	}
}

/**
* increases or decreases quantity of labels
* @param n integer identifier of section 
* @param direction integer flag of increasing or decreasing action
*/
function change_quantity(n, direction)
{
	var curr_quant = parseInt($('quantity_'+n).value);

	switch (direction)
	{
		case -1:
			if (curr_quant > 1)
			{
				$('quantity_'+n).value = curr_quant - 1;
			}
			
			change_price(n);
			
			break;
		case 1:
			if (curr_quant < 99)
			{
				$('quantity_'+n).value = curr_quant + 1;
			}
			
			change_price(n);
			
			break;
		default:
			update_total();
			
			break;
	}
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// text lines processor                                                                                                    //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
* set text line parameters hash element
* @param n integer identifier of section
* @param l integer identifier of text line
* @param alias string parameter alias
* @param value string parameter value
*/
function set_txt_line_parameter(n, l, alias, value)
{
	if (alias.length == 0)
	{
		return;
	}
	
	var section_props = new Hash();
	section_props = txt_lines_parameters.get(n.toString());
	
	if (section_props == undefined)
	{
		section_props = new Hash();
	}
	
	var line_props = new Hash();
	line_props = section_props.get(l.toString());

	if (line_props == undefined)
	{
		line_props = new Hash();
		line_props.set('index', l.toString());
		
		section_props.set(l.toString(), line_props);
	}
	
	line_props.set(alias, value);
	
	section_props.get(l.toString()).merge(line_props);
	
	//alert(section_props.inspect());
	
	try
	{
		txt_lines_parameters.set(n.toString(), txt_lines_parameters.get(n.toString()).merge(section_props));
	} catch (e) {
		alert(e.toString() + '\n Section = ' + n + ', Line = ' + l + ', Alias = ' + alias);
	}
	
	return;
}

/*
* set text line parameters hash element value
* @param n integer identifier of section
* @param l integer identifier of text line
* @param alias string parameter alias
* @output string parameter value
*/
function get_txt_line_parameter(n, l, alias)
{
	if (alias.length == 0)
	{
		return '';
	}
	
	try
	{
		var value = txt_lines_parameters.get(n.toString()).get(l.toString()).get(alias);
	} catch (e) {
		alert(e.toString() + '\n Section = ' + n + ', Line = ' + l + ', Alias = ' + alias);
	}
	
	return value;
}

/*
* clear text line parameters hash
* @param n integer identifier of section
* @param l integer identifier of text line
*/
function clear_txt_line_data(n, l)
{
	var section_params = new Hash();
	
	section_params = txt_lines_parameters.get(n.toString());
	
	section_params.unset(l.toString());
	
	try
	{
		txt_lines_parameters.set(n.toString(), section_params);
	} catch (e) {
		alert(e.toString() + '\n Section = ' + n + ', Line = ' + l);
	}
	
	return;
}

/*
* adding a line of text for current label design
* @param n integer identifier of section
* @param q integer amount of lines to be added
* @param include_sample boolean whether to include sample text into text line or not
*/
function add_line(n, q, include_sample)
{
	// max lines for stamp size check
	// if more than - cancel operation
	var max_lines = parseInt(get_current_size_parameter(n.toString(), 'size_max_lines'));
	var cur_lines = parseInt(get_design_parameter(n.toString(),'txt_lines_amount'));
	
	//alert('max_lines = '+max_lines+', cur_lines = '+cur_lines+', q = '+q);
	
	if ((max_lines > 0) && (max_lines < (cur_lines + q)))
	{
		alert(get_msg_by_id('max_lines_number_reached'));
		return;
	}
	
	//alert(design_parameters.inspect())
	//alert(txt_lines_parameters.inspect());
	
	var line_index = parseInt(get_design_parameter(n.toString(),'txt_lines_index')) + 1;
	var size_item_no = get_current_size_index(n);
	var include_sample_num = (include_sample == true) ? 1 : 0;
	
	//cur_lines++;
	
	new Ajax.Request(ajax_path+'add_line.php',{method:"post", parameters : $H({section_no : n, line_no : line_index, lines_amt : q, line_seq : line_index, size_idx: size_item_no, include_sample : include_sample_num, site_apath : site_apath, site_cpath : site_cpath}), onSuccess:onSuccessInsertLine});
}

/*
* callback processing of line adding
*/
function onSuccessInsertLine(transport)
{
	//alert(transport.responseText);
	
	var data = eval('(' + transport.responseText + ')');

	if (data.result == 'ok')
	{	
		for (var idx in data.line_items)
		{
			var divTag = document.createElement("div"); 
			
			divTag.style.display = 'block';
			divTag.style.margin  = '0px 0px 0px 0px';
			divTag.style.clear   = 'both';
			divTag.id            = 'line_block_'+data.sect_no.toString()+'_'+idx.toString();
			
			divTag.innerHTML = data.line_items[idx];	
		
			var block_name = 'lines_block_' + data.sect_no;
			
			/*if (parseInt(idx) % 2 == 1) {
				block_name = 'lines_block_' + data.sect_no+'_left';
			} else {
				block_name = 'lines_block_' + data.sect_no+'_right';
			}*/
			
			$(block_name).appendChild(divTag);
			
			if ($('lines_' + data.sect_no))
			{
				$('lines_' + data.sect_no).value = idx;
			}
			
			var sect_lines_amount = parseInt(get_design_parameter(data.sect_no.toString(),'txt_lines_amount')) + 1;
			
			set_design_parameter(data.sect_no.toString(), 'txt_lines_amount', sect_lines_amount);
			set_design_parameter(data.sect_no.toString(), 'txt_lines_index', idx);
	
			set_txt_line_parameter(data.sect_no, idx, 'index', idx);
			set_txt_line_parameter(data.sect_no, idx, 'seq_no', idx);
			
			if ($('line_status_'+data.sect_no.toString()+'_'+idx.toString()))
			{
				$('line_status_'+data.sect_no.toString()+'_'+idx.toString()).value = idx;
			}

			set_font_styles_appearance(data.sect_no, idx);
			
			//alert(data.include_sample+' / '+data.sample_lines+' / '+idx+' / '+data.sample_text);
			
			if ((parseInt(data.include_sample) == 1) && (idx <= parseInt(data.sample_lines)))
			{
				if ($("textfield"+data.sect_no.toString()+"_"+idx.toString()).value == '')
				{
					$("textfield"+data.sect_no.toString()+"_"+idx.toString()).value = data.sample_text;
					line_process(data.sect_no,idx);
				}
			}
		}
	}
	else
	{
		alert(get_msg_by_id('line_adding_error'));
	}
}

/**
* remove text line from current label design
* @param n integer identifier of section
* @param l integer identifier of text line
*/
function del_line(n,l)
{
	if (confirm(get_msg_by_id('line_deleting_confirmation')))
	{
		remove_line_block(n,l,true);
	}
}

/**
* remove single line block
* @param n integer identifier of section
* @param l integer identifier of text line
* @param a boolean true if line block must be deleted from layout
*/
function remove_line_block(n,l,a)
{
	if (a == undefined)
	{
		a = false;
	}
	
	if ($('textfield'+n+'_'+l))
	{
		$('textfield'+n+'_'+l).value = '';
	}
	if ($('line_font_'+n+'_'+l))
	{
		$('line_font_'+n+'_'+l).selectedIndex = 0;
	}
	if ($('line_italic_'+n+'_'+l))
	{
		$('line_italic_'+n+'_'+l).checked = false;
	}
	if ($('line_bold_'+n+'_'+l))
	{
		$('line_bold_'+n+'_'+l).checked = false;
	}
	
	var line_seq_no       = parseInt(get_txt_line_parameter(n, l, 'seq_no'));
	var sect_last_index   = parseInt(get_design_parameter(n, 'txt_lines_index'));
	var sect_lines_amount = parseInt(get_design_parameter(n, 'txt_lines_amount'));
	
	//alert('last index = '+sect_last_index+', deleted seq # = '+line_seq_no); // txt_lines_amount // txt_lines_index
	
	if ((sect_lines_amount - 1) <= 0)
	{
		set_design_parameter(n, 'txt_lines_index', 0)
	}
	else if (sect_last_index == line_seq_no)
	{
		set_design_parameter(n, 'txt_lines_index', sect_last_index - 1)
	}
	
	if ((sect_lines_amount - 1) <= 0)
	{
		set_design_parameter(n, 'txt_lines_amount', 0)
	}
	else
	{
		set_design_parameter(n, 'txt_lines_amount', sect_lines_amount - 1)
	}

	//alert(design_parameters.inspect());

	line_process(n, l);
	
	if (a == true)
	{
		clear_txt_line_data(n, l);
	
		$('line_block_'+n+'_'+l).remove();
	}
}

/**
* process line text input
* @param n integer identifier of section
* @param l integer identifier of text line
*/
function line_process(n, l)
{
	// check of used fonts props
	set_font_styles_appearance(n,l);
	
	// text
	set_txt_line_parameter(n, l, 'text', $('textfield'+n+'_'+l).value);
	// font
	set_txt_line_parameter(n, l, 'font', $('line_font_'+n+'_'+l).value);
	// bold style
	set_txt_line_parameter(n, l, 'bold', $('line_bold_'+n+'_'+l).checked);
	// italic style
	set_txt_line_parameter(n, l, 'italic', $('line_italic_'+n+'_'+l).checked);
	// font size
	set_txt_line_parameter(n, l, 'size', $('line_font_size_'+n+'_'+l).value);
	// block aspect ratio saving
	//set_txt_line_parameter(n, l, 'ar_save', $('line_ratio_'+n+'_'+l).checked);
	
	update_design(n, 'text', l);
}

/*
* set appearance of font styles selector
* @param n integer identifier of section
* @param l integer identifier of text line
*/
function set_font_styles_appearance(section, line)
{
	if ($('line_font_'+section+'_'+line))
	{
		var font_id = $('line_font_'+section+'_'+line).value;
		
		var font_data = new Hash();
		
		font_data = fonts_table.get(font_id);
		
		if (font_data.get('bold').toString() == 'true')
		{
			$('line_bold_'+section+'_'+line).disabled = false;
		}
		else
		{
			$('line_bold_'+section+'_'+line).checked = false;
			$('line_bold_'+section+'_'+line).disabled = true;
		}
		
		if (font_data.get('italic').toString() == 'true')
		{
			$('line_italic_'+section+'_'+line).disabled = false;
		}
		else
		{
			$('line_italic_'+section+'_'+line).checked = false;
			$('line_italic_'+section+'_'+line).disabled = true;
		}
	}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/**
* checks symbols entered in quantity
* @param e integer identifier of section 
*/
function check_symb(e)
{
	// Make sure to use event.charCode if available
	var p_key = (typeof e.charCode == 'undefined' ? e.keyCode : e.charCode);

	// Ignore special keys
	if (e.ctrlKey || e.altKey || p_key < 32)
	{
		return true;
	}
  
	p_key = String.fromCharCode(p_key);
  
	return /[\d]/.test(p_key);
}

/**
* checks entered value in range allowed
* @param n integer identifier of section 
*/
function check_val(n)
{
	var curr_quant = parseInt($('quantity_'+n).value);
	
	if ((curr_quant < 1) || (isNaN(curr_quant)))
	{
		$('quantity_'+n).value = '1';
	}
	else if (curr_quant > 99)
	{
		$('quantity_'+n).value = '99';
	}
	
	change_price(n);
}

/**
* check conditions on line text input allowed
* @param n integer section number
* @param l integer text line number
* @param e integer window event
*/
function check_chr_count(n, l, e)
{
	// check on first entered symbol that Flash Creation Area is not empty
	/*
	if ($('textfield'+n+'_'+l).value == '' && check_newby_block_exists(n))
	{
		alert(get_msg_by_id('flash_ca_block_exists_on_insert'));
		return false;
	}
	*/
	// check on first entered symbol that required font already downloaded by flash editor
	if ( ($('textfield'+n+'_'+l).value == '') && (font_is_usable(n, l) == false) )
	{
		alert(get_msg_by_id('flash_font_inaccessible'));
		return false;
	}
	
	// if user already notified
	if (labels.get(n.toString()).get('chars_notification') == true) 
	{
		return true;
	}
	else
	{
		//alert('not notified yet');
	}
	
	e = e || window.event;
	var target = e.target || e.srcElement;
	var code = e.keyCode ? e.keyCode : (e.which ? e.which : e.charCode)

	switch (code){
		case 13:
		case 8:
		case 9:
		case 46:
		case 37:
		case 38:
		case 39:
		case 40:
			return true;
	}

	var input_allowed = true;
	
	// check for the state of CHAR_CAN_BE_ADDED flag
	// if CHAR_CAN_BE_ADDED == false, input_allowed = false too
	if ($('textfield'+n+'_'+l) && $('selected_image_'+n))
	{
		var text = $('textfield'+n+'_'+l).value;
		var selected_image = $('selected_image_'+n).value;
		
		max_len = get_current_size_parameter(n, 'line_max_length');
		
		//alert('limit = '+max_len);
		
		if ((max_len > 0) && (text.length >= max_len) && (selected_image.length > 0))
		{
			alert(get_msg_by_id('max_text_length_reached'));
			labels.set(n.toString(), labels.get(n.toString()).merge({'chars_notification' : true})); 
			//input_allowed = false;
		}
	}

	return input_allowed;
}

/**
* process form of order
*/
function process_form()
{
	if (emailCheck() == true)
	{
		saved = design_parameters_saving();
	
		if (saved)
		{
			var form_data = $('order_form').serialize();
			
			form_data = form_data + '&' + $H({site_cpath:site_cpath}).toQueryString();
			
			new Ajax.Request(ajax_path+'process_form_action.php',{ method:'post', parameters:form_data, onSuccess:process_form_actions });
		}
	}
}

function process_form_actions(transport)
{
//	alert(transport.responseText);
	
	var data = eval('(' + transport.responseText + ')');
	
	if (data.result == 'ok')
	{
		if ($('payment_data_container'))
		{
			$('payment_data_container').update(data.payment_data);
		}
		
		if ($(data.order_id_transmitter))
		{
			$(data.order_id_transmitter).value = data.order_id;
		}
		
		if ($(data.order_certificate))
		{
			$(data.order_certificate).value = data.invoice_id;
		}
		
		if ($(data.order_total))
		{
			$(data.order_total).value = data.order_amount;
		}
		
		$('payment_form').submit();
	}
}

/**
* changing permission for label optimization
*/
function change_mod_permission()
{
	if (optim_texts_loaded == false)
	{
		load_optim_text();
		return false;
	}
	
	if ($('opt_allowed'))
	{	
		if ($('optimize_label').checked == false)
		{
			$('opt_allowed').value = optim_texts.get('unchecked');
		}
		else
		{
			$('opt_allowed').value = optim_texts.get('checked');
		}
	}
}

/*
* check for block existance in Creation Area
* @param n integer section number
* @return boolean 
*/
function check_newby_block_exists(n)
{
	var obj = swfobject.getObjectById("editor_"+n);
	var ret_val = false;
	
	if (obj && typeof obj.get_value != "undefined") 
	{
		var result = obj.get_value("newby_block_exists");
		
		if (result == 'true')
		{
			ret_val = true;
		}
	}
	else
	{
		/*
		if (obj == null)
		{
			alert('swf object error 2');
		}
		else if (typeof obj.post_label_parameters == "undefined")
		{
			alert('function undefined 2');
		}
		*/
		alert(get_msg_by_id('flash_obj_init_err'));
		
		ret_val = true;
	}
	
	return ret_val;
}

/*
* check for block existance in Preview Area
* @param n integer section number
* @return boolean 
*/
function check_label_block_exists(n)
{
	var obj = swfobject.getObjectById("editor_"+n);
	var ret_val = false;
	
	if (obj && typeof obj.get_value != "undefined") 
	{
		var result = obj.get_value("preview_block_exists");
		
		if (result == 'true')
		{
			ret_val = true;
		}
	}
	else
	{
		/*
		if (obj == null)
		{
			alert('swf object error 2');
		}
		else if (typeof obj.post_label_parameters == "undefined")
		{
			alert('function undefined 2');
		}
		*/
		alert(get_msg_by_id('flash_obj_init_err'));
		
		ret_val = true;
	}
	
	return ret_val;
}

/*
* check for needed font is already accessible
* @param n integer section number
* @param l integer text line number
* @return boolean 
*/
function font_is_usable(n, l)
{
	var obj = swfobject.getObjectById("editor_"+n.toString());
	var ret_val = false;
	
	if (obj && typeof obj.font_is_usable != "undefined") 
	{
		if ( $('line_font_'+n.toString()+'_'+l.toString()) )
		{
			var font_name = $('line_font_'+n.toString()+'_'+l.toString()).value;
			
			var result = obj.font_is_usable(font_name);
			
			if (result == true)
			{
				ret_val = true;
			}
		}
	}
	else
	{
		/*
		if (obj == null)
		{
			alert('swf object error 3');
		}
		else if (typeof obj.post_label_parameters == "undefined")
		{
			alert('function undefined 3');
		}
		*/
		
		alert(get_msg_by_id('flash_obj_init_err'));
	}
	
	return ret_val;
}

/**
* copy billing data as shipping data
*/
function copy_data()
{
	if ($('copy_billing_data'))
	{
		if ($('copy_billing_data').checked == true)
		{
			if ($('ship_address'))
			{
				$('ship_address').value = $('bill_address').value;
			}
			if ($('ship_postcode'))
			{
				$('ship_postcode').value = $('bill_postcode').value;
			}
			if ($('ship_city'))
			{
				$('ship_city').value = $('bill_city').value;
			}
		}
		else
		{
			if ($('ship_address'))
			{
				$('ship_address').value = '';
			}
			if ($('ship_postcode'))
			{
				$('ship_postcode').value = '';
			}
			if ($('ship_city'))
			{
				$('ship_city').value = '';
			}
		}
	}
}

function emailCheck() 
{
	 if ((products_loaded == false) || ((config_table.get('use_colors') == true) && (colors_loaded == false)) || (sizes_loaded == false) || (payment_costs_loaded == false))
	 {
		 if (messages_loaded == true)
		 {
	 	 	alert(get_msg_by_id('data_downloading'));
		 }
		 else
		 {
		 	alert('* Not all required data downloaded yet. Please wait until downloading completed. *');
		 }
		 
		 return false;
	 }
	 
	if ( $('bill_firm') && ( $('bill_firm').readAttribute('type') != "hidden" ) && ($('bill_firm').value == "") )
	{
		alert(get_msg_by_id('empty_ship_name'));
		$('bill_firm').focus();
		return false;
	}
	
	if ( $('bill_name') && ( $('bill_name').readAttribute('type') != "hidden" ) && ($('bill_name').value == "") )
	{
		alert(get_msg_by_id('empty_bill_name'));
		$('bill_name').focus();
		return false;
	}
	
	if ( $('bill_address') && ( $('bill_address').readAttribute('type') != "hidden" ) && ($('bill_address').value == "") )
	{
		alert(get_msg_by_id('empty_bill_address'));
		$('bill_address').focus();
		return false;
	}
	
	if ( $('bill_postcode') && ( $('bill_postcode').readAttribute('type') != "hidden" ) && ($('bill_postcode').value == "") )
	{
		alert(get_msg_by_id('empty_bill_postcode'));
		$('bill_postcode').focus();
		return false;
	}
	
	if ( $('bill_city') && ( $('bill_city').readAttribute('type') != "hidden" ) && ($('bill_city').value == "") )
	{
		alert(get_msg_by_id('empty_bill_city'));
		$('bill_city').focus();
		return false;
	}
	
	if ( $('bill_email') && ( $('bill_email').readAttribute('type') != "hidden" ) )
	{
		if ($('bill_email').value == "")
		{
			alert(get_msg_by_id('empty_bill_email'));
			$('bill_email').focus();
			return false;
		}
		
		if ($('bill_email').value.indexOf('\@', 0) == -1)
		{
			alert(get_msg_by_id('wrong_bill_email'));
			$('bill_email').focus();
			return false;
		}
		
		if ($('bill_email').value.indexOf('.', 0) == -1)
		{
			alert(get_msg_by_id('wrong_bill_email'));
			$('bill_email').focus();
			return false;
		}
	}
	
	if ( $('ship_address') && ( $('ship_address').readAttribute('type') != "hidden" ) && ($('ship_address').value == "") )
	{
		alert(get_msg_by_id('empty_ship_address'));
		$('bill_address').focus();
		return false;
	}
	
	if ( $('ship_postcode') && ( $('ship_postcode').readAttribute('type') != "hidden" ) && ($('ship_postcode').value == "") )
	{
		alert(get_msg_by_id('empty_ship_postcode'));
		$('ship_postcode').focus();
		return false;
	}
	
	if ( $('ship_city') && ( $('ship_city').readAttribute('type') != "hidden" ) && ($('ship_city').value == "") )
	{
		alert(get_msg_by_id('empty_ship_city'));
		$('ship_city').focus();
		return false;
	}
	 
	 if (labels.any(function(pair) { return pair.value.get('initiated'); }) == false)
	 {
	 	alert(get_msg_by_id('empty_label'));
		//$('textfield'+labels.keys().min().toString()+'_1').focus();
	 	return false;
	 }
	 
//	 alert(labels.inspect());
	 
	 var content_check = labels.all(function(pair) {
		 var blocks_exist = check_label_block_exists(pair.key.toString());
		 var image_exists = parseInt($('image_approval_'+pair.key.toString()).value) > 0;
		 return blocks_exist || image_exists; 
	 });
	 
	 if (content_check == false)
	 {
	 	alert(get_msg_by_id('empty_label'));
		//$('textfield'+labels.keys().min().toString()+'_1').focus();
	 	return false;
	 }


     return true;     
}

/**
* removing existing flash objects on page unload
*/
function design_parameters_saving()
{
//	tagList = document.getElementsByName('swf_editor');
	var tagList = $$('object[name="swf_editor"]');
	var result = true;
	
	for (var i = 0; i < tagList.length; i++)
	{
		//alert(tagList[i].id);
		
//		var obj = swfobject.getObjectById(tagList[i].id);
		var obj = swfobject.getObjectById($(tagList[i]).readAttribute('id'));
		
		if (obj && typeof obj.save_design != "undefined") 
		{
			var index = String($(tagList[i]).readAttribute('id')).replace('editor_', '');
			var text = 'source=JS&message=' + encodeURIComponent('design: '+$('label_name_'+index).value+', user agent: '+navigator.userAgent);
			
			log_append(text);
			
			var res = obj.save_design();
		}
		else
		{
			/*
			if (obj == null)
			{
				alert('swf object error 4');
			}
			else if (typeof obj.save_design == "undefined")
			{
				alert('function undefined 4');
			}
			*/

			log_append('source=JS&message='+encodeURIComponent('init_error_'+$(tagList[i]).readAttribute('id')));
			
			alert(get_msg_by_id('flash_obj_init_err'));

			result = false;
			
			break;
		}
	}
	
	return result;
}


/**
* removing existing flash objects on page unload
*/
function editors_deleting()
{
	//alert('unload');
	
	tagList = document.getElementsByName('swf_editor');
	
	for (var i = 0; i < tagList.length; i++)
	{
		swfobject.removeSWF(tagList[i].id);
	}
	/*
	tagList = document.getElementsByName('flash_uploader');
	
	for (var i = 0; i < tagList.length; i++)
	{
		swfobject.removeSWF(tagList[i].id);
	}
	*/
}

/**
* approve block placing into preview area
* @parameter section integer section index
* @parameter line integer line index
* @parameter state integer '1' if block placed into preview area, otherwise '0'
* @return void
*/
function approve_block_state(section, line, state)
{
	//alert('set state ('+state+') for block ['+section+','+line+']');
	
	if ( parseInt(line) > 0 )
	{
		if ($('line_approval_'+section.toString()+'_'+line.toString()))
		{
			$('line_approval_'+section.toString()+'_'+line.toString()).value = state;
		}
	}
	else
	{
		if ($('image_approval_'+section.toString()))
		{
			$('image_approval_'+section.toString()).value = state;
		}
	}
}

/**
* deletes layout of text line or clears values for image
* if correspondent block has been deleted from flash editor
* @parameter section integer section index
* @parameter line integer line index
* @return void
*/
function delete_block_layout(section, line)
{
	
	if ( parseInt(line) > 0 )
	{
		remove_line_block(section, line, false);
	}
	else
	{
		clear_motif(section);
	}
	
}

/**
* show message by message ID / flash interface
* @parameter message_id string required message ID
* @return void
*/
function show_msg_by_id(message_id)
{
	if ( message_id == '' )
	{
		alert('Empty message ID.');
		return;
	}
	
	alert(get_msg_by_id(message_id));
}

/**
* toggle grid lines visibility in editor's preview
* @parameter n integer section index
* @return void
*/
function toggle_grid_visibility(n)
{
	if ($('grid_visibility_'+n.toString()))
	{
		set_design_parameter(n, 'use_grid', $('grid_visibility_'+n.toString()).checked);
		update_design(n, 'design', '');
	}
}


function log_append(data)
{
	new Ajax.Request('scripts/log.php',{ method:'post', parameters:data });
}
