function GfxSlider(image_holder,controls,label, effect) {
	var effect = effect;
  var label = label;
	var image_paths = new Array();
	var image_holder = image_holder;
	var controls = controls;
	var imageCounter = $("#" + image_holder + " img").length;
	var position = 1;
	var $holder = $("#" + image_holder);
	var $controlholder = (controls)? $("#gfx_control"):null;
	var slidetimer = null;
	var tickertimeout = null;
	var text = null;
	var self = this;
	var runninggfx = 0; // pocet soucasne bezicich fadeInu
	//promena kontrolujici kolizi vice fadeInu kdy obrazek ZE ktereho se faduje se ma 
	//zaroven DO neho fadovat tzn fadeIn 
	var fadefrom = new Array(); 
	var nothide = false;
	this.init = function() {
		$element =  $holder.find("img:first-child");
		$labelel = null;
		if (label) {
			$labelel = $("#"+label + " div:first-child");
			text = $labelel.html();
			 $("#"+label).append("<div id=\"gfx_label_container\">" + text + "</div>");
			 $("#gfx_label_container").show();
		}
		for(i=1;i<=imageCounter;i++){
			if (label) {
				$labelel.attr("id","gfx_label_" + i).hide();
				$labelel = $labelel.next();
			}
			image_paths.push($element.attr("src"));
		   switch(effect)
          {
          case 1:
            $element.attr("id","gfx_img_" + i);
      			$element.css("z-index","5"); //better to set in css file
      			$element.css("position","absolute"); //better to set in css file
      			if(i==1) $element.show();
      			else  $element.hide();
      			$element = $element.next();
            break;
          case 2:
            $element.attr("id","gfx_img_" + i);
      			$element.css("z-index","5"); //better to set in css file
      			$element.css("position","absolute"); //better to set in css file
      			$element.css("left","" + (1000 * (i-1)) + "px");
            $holder.css("overflow","hidden") ;
      			$element = $element.next();
            break;
          default:
             	$element.attr("id","gfx_img_" + i);
      			$element.css("z-index","5"); //better to set in css file
      			$element.css("position","absolute"); //better to set in css file
      			if(i==1) $element.show();
      			else  $element.hide();
      			$element = $element.next();
          }
		
		} 
		if(controls){
			for(i=1;i<=imageCounter;i++){
				if (i==1) $('<a id="gfx_control_' + i + '"><img  src="/img/jizdni-horska-kolas-sel' + i  + '.jpg" alt="slide" /></a>').appendTo($controlholder);
				else $('<a id="gfx_control_' + i + '"><img  src="/img/jizdni-horska-kolas' + i  + '.jpg" alt="slide" /></a>').appendTo($controlholder);
			}
			this.makecontrols();
		}
	}
	this.textShower = function(el,pos){
		ctext=text.substring(0,pos)+(pos%2?'-':'_');
		  $(el).html(ctext);
		  if(pos>=(text.length-2))
		   $(el).html(text);
		  else
		   tickertimeout = setTimeout(function(){
			   self.textShower(el,pos+1);
		   },25);
	}
	this.slideControl = function(from,to) {
		if($.browser.msie && parseFloat($.browser.version) < 7){
			$controlholder.find("a#gfx_control_" + from + " img").replaceWith('<img  src="/img/jizdni-horska-kolas' + from + '.jpg" alt="slide" />');
			$controlholder.find("a#gfx_control_" + to + " img").replaceWith('<img  src="/img/jizdni-horska-kolas-sel' + to + '.jpg" alt="slide" />');
		}else{
			$controlholder.find("a#gfx_control_" + from + " img").attr("src","/img/jizdni-horska-kolas" + from + ".jpg");
			$controlholder.find("a#gfx_control_" + to + " img").attr("src","/img/jizdni-horska-kolas-sel" + to + ".jpg");
		}
	}
	
	this.slideImage = function(from,to) {
		runninggfx++;
		fadefrom.push(from);
		//if(runninggfx == 2) alert(fadefrom[0] + ";" + fadefrom[1]); 
		
		if (runninggfx > 1) $holder.find("img#gfx_img_" + to).css("z-index",(parseInt($holder.find("img#gfx_img_" + from).css("z-index"))+1)+ "");
		$holder.find("img#gfx_img_" + to).fadeIn("slow",function(){
			$holder.children("#gfx_img_kill_" + from).remove();
			fadefrom.shift();
			if(($holder.find("img#gfx_img_" + from).attr("class"))!="new"){
				$holder.find("img#gfx_img_" + to).css("z-index","-5");
				$holder.find("img#gfx_img_" + from).css("z-index","5");
				$holder.find("img#gfx_img_" + from).hide();
			}
			else $holder.find("img#gfx_img_" + from).removeAttr("class");
			runninggfx--;
		});
		
	}
	this.rollImage = function(from,to){
	      $holder.find("img").animate({"left":  "+=" + ((from - to) * 1000)+"px"}, 1200);
  }
	this.run = function() {
		
		nextpos = (position == imageCounter)? 1:position + 1;
		switch(effect)
    {
    case 1:
       this.slideImage(position,nextpos);
      break;
    case 2:
      this.rollImage(position,nextpos);
      break;
    default:
       this.slideImage(position,nextpos);
    }
    
   
		if(controls) self.slideControl(position,nextpos);
		if(label) {
			clearTimeout(tickertimeout);
			text = $("#" + label+" div#gfx_label_" + nextpos).html();
			self.textShower("#" + label+" div#gfx_label_container",3);
		}
		position = nextpos;
		slidetimer = setTimeout(function(){
			self.run();
		},7000);
	}
	this.start = function() {
		slidetimer = setTimeout(function() {
			self.run();
		},4000);
	
	}
	
	this.fadefromtest = function(value){
		for (i=0; i < fadefrom.length; i++) {
			if (fadefrom[i] == value) return true;
		}
		return false;
	}
	this.makecontrols = function(){
		switch(effect)
		{
			case 1:
				$controlholder.find("a").live("click",function(){
					clearTimeout(slidetimer);

					nextpos = parseInt($(this).attr("id").substr(12));
					fadetest = self.fadefromtest(nextpos);
					if ((nextpos!=position)&&(!fadetest)){
						self.slideImage(position,nextpos );
						self.slideControl(position, nextpos);
						if(label) {
							clearTimeout(tickertimeout);
							text = $("#" + label+" div#gfx_label_" + nextpos).html();
							self.textShower("#" + label+" div#gfx_label_container",4);
						}
						position = nextpos;
					}else if (fadetest) {
						if(!($holder.find("img#gfx_img_kill_" + nextpos ).length)){
							path = $holder.find("img#gfx_img_" + nextpos).attr("src");
							$holder.find("img#gfx_img_" + nextpos).attr("id","gfx_img_kill_"  + nextpos);
							$holder.find("img#gfx_img_kill_" + nextpos).before($('<img  src="'+ path +'" class="new" alt="slide" id="gfx_img_' + nextpos + '" />').css({"position":"absolute"}).hide());
							//$("#nadpis").html($("#nadpis").html() + "jo");
							self.slideImage(position,nextpos );
							self.slideControl(position, nextpos);
							if(label) {
								clearTimeout(tickertimeout);
								text = $("#" + label+" div#gfx_label_" + nextpos).html();
								self.textShower("#" + label+" div#gfx_label_container",4);
							}
							position = nextpos;
						}
					}
				});
				break;
			case 2:
				$controlholder.find("a").live("click",function(){
					clearTimeout(slidetimer);
					nextpos = parseInt($(this).attr("id").substr(12));
					self.rollImage(position,nextpos);
					 self.slideControl(position,nextpos);
							position = nextpos;
					});
				break;
			default:
				break;
		}

	}
	
	
} 




