function gid($co) {return document.getElementById($co);}

function c_color_ed($tent,$restrict_colors,$lang)
	{
	var $i,$tnode,$ee;
	
	this.select_color=select_color;
	this.check_colors=check_colors;
	this.update_picture=update_picture;
	this.get_color_values=get_color_values;
	this.set_color_values=set_color_values;
	this.assign_color=assign_color;
	this.lang=$lang;
	
	this.tent=$tent;
	this.restrict_colors=$restrict_colors;
	this.selected_color=false;
	this.color_values=new Array();
	this.node=gid("color-editor");
	this.selector_node=gid("color-selectors");
	this.selector_node.className=("colors-"+this.restrict_colors);
	this.area_nodes=this.node.getElementsByTagName("area");
	this.color_nodes=this.selector_node.getElementsByTagName("li");
	this.base_color=this.color_nodes[0].id.substr(6);
	this.picture=gid("tent-picture");
	this.loading_preview=gid("loading-preview");
	
	for($i=0;$i<this.area_nodes.length;$i++)
		{
		$tnode=this.area_nodes[$i];
		this.color_values[$tnode.className.split("-")[1]]=false;
		add_event_listener($tnode,"click",h_assign_color);
		try{$tnode.style.cursor="pointer";} catch($ee){}
		}
	
	for($i=0;$i<this.color_nodes.length;$i++) add_event_listener(this.color_nodes[$i],"click",h_select_color);
	
	if(document.cookie.indexOf("color_values")>-1)
		{
		var $cookies=document.cookie.split(";");
		for($i=0;$i<$cookies.length;$i++) if($cookies[$i].substr(0,12)=="color_values") 
			{
			this.set_color_values($cookies[$i].substr(13).replace(/@/g,";"));
			break;
			}
		}
	}
	
	function update_picture()
		{
		this.check_colors();
		this.picture.src="../edit-colors/get-image.php?lang="+this.lang+"&id="+this.tent+"&color="+this.get_color_values();
		this.loading_preview.style.visibility="visible";
		add_event_listener(this.picture,"load",h_loaded);
		document.cookie="color_values="+this.get_color_values().replace(/;/g,"@");
		}

	function check_colors()
		{
		var $i,$colors=new Array();
		if(this.restrict_colors!=-1)
			{
			for($i in this.color_values)
				{
				if(this.color_values[$i]!=this.base_color)
					{
					$colors[$colors.length]=$i;
					}
				}
			for($i=0;$i<$colors.length-this.restrict_colors;$i++)delete(this.color_values[$colors[$i]]);
			}
		}
	
	function set_color_values($colors)
		{
		var $i,$c;
		$colors=$colors.split(";")
		this.color_values=new Array();
		for($i=0;$i<$colors.length;$i++)
			{
			$c=$colors[$i].split(":");
			this.color_values[$c[0]]=$c[1];
			}
		this.update_picture();
		}
	
	function get_color_values()
		{
		var $part,$t_array=new Array();
		for($part in this.color_values) if(this.color_values[$part]) $t_array[$t_array.length]=$part+":"+this.color_values[$part];
		return $t_array.join(";");
		}
	
	function select_color($e)
		{
		var $target=$e.currentTarget;
		if(!$target.id) $target=$target.parentNode;
		if(this.selected_color)
			{
			gid("color-"+this.selected_color).className="";
			gid("color-"+this.selected_color).style.borderColor="black";
			}
		this.selected_color=$target.id.split("-")[1];
		gid("color-"+this.selected_color).className="selected";
		gid("color-"+this.selected_color).style.borderColor="red";
		}

	function assign_color($e)
		{
		if(!this.selected_color) alert("No color selected, please choose a color by clicking it.");
		else
			{
			this.color_values[$e.currentTarget.className.split("-")[1]]=this.selected_color;
			this.update_picture();
			}
		}

function h_loaded($e)
	{
	$color_ed.loading_preview.style.visibility="hidden";
	}

function h_select_color($e)
	{
	$e=repair_event($e);
	$color_ed.select_color($e);
	}

function h_assign_color($e)
	{
	var $ee;
	$e=repair_event($e);
	$color_ed.assign_color($e);
	try{$e.preventDefault()}catch($ee){}
	return false;
	}

function add_event_listener($object,$event_type,$handler)
	{
	var $ee;
	try {$object.addEventListener($event_type,$handler,false);}
	catch($ee) {$object.attachEvent("on"+$event_type,$handler);}
	}

function remove_event_listener($object,$event_type,$handler)
	{
	var $ee;
	try {$object.removeEventListener($event_type,$handler,false);}
	catch($ee) {$object.detachEvent("on"+$event_type,$handler);}
	}

function repair_event($e) // opraví potřebné vlastnosti mrkvosoftího objektu event na DOM standard
	{
	if(!$e.currentTarget) $e.currentTarget=$e.srcElement;
	if(!$e.target) $e.target=$e.srcElement;
	if(isNaN($e.pageX)) {$e.pageX=$e.clientX+document.body.scrollLeft; $e.pageY=$e.clientY+document.body.scrollTop;}
	if(isNaN($e.layerX)) {$e.layerX=$e.offsetX; $e.layerY=$e.offsetY;}
	return $e;
	}
