var oldv1;
var oldv0;
var mindifference=7;

function imgslider(args){
   //min max value scale
   var min = args.min;
   var max = args.max;
   var range = max - min;

   //current value scale
   var value0 = args.value0;
   var value1 = args.value1;
   oldv0=value0;
   oldv1=value1;

   //what we do when moving and changing...
   var onChange = args.onChange;
   var onMove = args.onMove;

   //get the pointers to important objects
   var path = document.getElementById(args.idPath);
   var control0 = document.getElementById(args.idLeft);
   var control1 = document.getElementById(args.idRight);
   var area = document.getElementById(args.idArea);

   //distance from the start and end of path
   var pathLeft;
   var pathRight;
   var pathLength;

   //in order to remember position
   var curPosControl0;
   var curPosControl1;

   var halfControl0;
   var halfControl1;

   var control0Offset;
   var control1Offset;

   this.init = function(){
     control0.style.position = 'absolute';
     control1.style.position = 'absolute';
     area.style.position = 'absolute';

     control0.style.left= '0px';
     control1.style.left= '0px';
     area.style.left= '0px';

     halfControl0 = control0.clientWidth/2;
     halfControl1 = control1.clientWidth/2;

     pathLeft = findPos(path);
     pathRight = path.clientWidth + pathLeft;
     pathLength = path.clientWidth - control0.clientWidth;

     control0Offset = pathLeft - findPos(control0);
     control1Offset = pathLeft - findPos(control1);;

     control0.style.left = control0Offset+'px';
     control1.style.left = control1Offset+'px';
	 
	 

     if(value0 != null) this.setValue0(value0);
     if(value1 != null) this.setValue1(value1);
  }

  function mouseMoveL(e){
      e = e || window.event;
      setHandleL(e.clientX-pathLeft);
  }
   
  function mouseMoveR(e){
      e = e || window.event;
      setHandleR(e.clientX-pathLeft);
  }
    

    function mouseMoveArea(e){
        e = e || window.event;
        setHandleArea(e.clientX-pathLeft);
    }
    
    var startClickPos;
        
    function mouseMoveDown(e){
        e = e || window.event;
        startClickPos = e.clientX-pathLeft;
    }
    
    function setHandleL(pos){
        var diff = startClickPos-pos;
        if(curPosControl0 - diff - control0Offset + halfControl0>= 0
			&& curPosControl0 - diff<curPosControl1-mindifference) {
            curPosControl0 = curPosControl0 - diff;
            control0.style.left = curPosControl0+'px';;
            area.style.left = (curPosControl0 + control0.clientWidth)+'px';;
            value1 = (range*(curPosControl1 - control1Offset)/pathLength) + min;
            value0 = (range*(curPosControl0 - control0Offset)/pathLength) + min;
            area.style.width = (curPosControl1-curPosControl0)+'px';
        }
        startClickPos=pos;
 		onMove(value0,value1);
    }
    
    function setHandleR(pos){
        var diff = startClickPos-pos;
        if(curPosControl1 - diff - control1Offset + halfControl1<= pathRight-pathLeft
			&& curPosControl1 - diff>curPosControl0+mindifference) {
            curPosControl1 = curPosControl1 - diff;
            control1.style.left = curPosControl1+'px';;
            area.style.right = (curPosControl1 + control1.clientWidth)+'px';;
            area.style.width = (curPosControl1-curPosControl0)+'px';
            value1 = (range*(curPosControl1 - control1Offset)/pathLength) + min;
            value0 = (range*(curPosControl0 - control0Offset)/pathLength) + min;
        }
        startClickPos=pos;
        onMove(value0,value1);
    }
    

    
    function setHandleArea(pos){
        var diff = startClickPos-pos;
        if(curPosControl0 - diff - control0Offset + halfControl0>= 0 &&
            curPosControl1 - diff - control1Offset + halfControl1<= pathRight-pathLeft){
            curPosControl1 = curPosControl1 - diff;
            curPosControl0 = curPosControl0 - diff;
            control1.style.left = curPosControl1+'px';;
            control0.style.left = curPosControl0+'px';;
            area.style.left = (curPosControl0 + control0.clientWidth)+'px';;
            value1 = (range*(curPosControl1 - control1Offset)/pathLength) + min;
            value0 = (range*(curPosControl0 - control0Offset)/pathLength) + min;
        }
        startClickPos=pos;
        onMove(value0,value1);
    }

    this.setValue0 = function(val){
        if(val >= min && val <= max)
            value0 = val;
        else if(val < min)
            value0 = min;
        else if(val > max)
            value0 = max;

        curPosControl0 = control0Offset+(((value0-min)/range)*pathLength);
        control0.style.left = curPosControl0+'px';
        area.style.left = (curPosControl0+control0.clientWidth)+'px';;
        onMove(value0,value1);
    }
    
    this.setValue1 = function(val){
        if(val >= min && val <= max)
            value1 = val;
        else if(val < min)
            value1 = min;
        else if(val > max)
            value1 = max;

        curPosControl1 = control1Offset+(((value1-min)/range)*pathLength);
        control1.style.left = curPosControl1+'px';
        area.style.width = (curPosControl1-curPosControl0)+'px';;
        onMove(value0,value1);
        
		//alert("val: "+curPosControl1+" pos: "+control1.style.left);
        //alert("valuue1: "+value1 +" min: "+min+"max: "+max+"control1ofset: "+control1Offset+"\n"+
        //(control1Offset+((value1-min)/range)*pathLength)+"\n"+
       // curPosControl1+"\n"+
       // control1.style.left);
    }
    


    function attachMouseUp(){
       attachEvent(document, "mouseup", function(){onChange(value0,value1);document.onmousemove = null;});
    }
    
    function findPos(obj){
        var curleft = 0;
        if (obj.offsetParent) {
            curleft = obj.offsetLeft
            while (obj == obj.offsetParent) {
                curleft += obj.offsetLeft
            }
        }
        return curleft;
    }

    function attachEvent(element, type, event){
        if(element.attachEvent){
            element.attachEvent('on' + type, event);
        }
        else{
            element.addEventListener(type, event, false);
        }
    }

    this.init();

    attachEvent(control0,"mousedown",function(e){attachMouseUp();document.onmousemove = mouseMoveL;});
    attachEvent(control1,"mousedown",function(e){attachMouseUp();document.onmousemove = mouseMoveR;});
    attachEvent(area,"mousedown",function(e){attachMouseUp();document.onmousemove = mouseMoveArea;document.onmousedown = mouseMoveDown;});
}
/*****
 ***/
function updateGraph(id,txt,url,v0,v1){
  v0=Math.floor(v0);
  v1=Math.floor(v1);
  if (oldv1!=v1 || oldv0!=v0){
    var imgsrc = url + "&from="+v0+"&to="+v1;
	var img = new Image();
    img.src = imgsrc;
    document.getElementById(id).src = img.src;

 	//some loading control display waiting thing
    document.getElementById(txt).style.visibility="visible";
    lighten(document.getElementById(id),40);
  }
  oldv0=v0;
  oldv1=v1;
}

//called when loading of img has finished.
function imgLoaded(id,text){
  document.getElementById(text).style.visibility="hidden";
  lighten(document.getElementById(id),100);
}

function lighten(img, op){
 if (navigator.appName.indexOf("Netscape")!=-1
     && parseInt(navigator.appVersion)>=5){
    img.style.MozOpacity=op/100;
 }
 else if (navigator.appName.indexOf("Microsoft")!= -1 
          &&parseInt(navigator.appVersion)>=4){
    img.style.filter='alpha(opacity=' + op + ')';
 }
}

function updateTime(idfrom,idto,v1,v2){
  var date1 = new Date(v1*60*60*24*1000);
  document.getElementById(idfrom).innerHTML = format(date1);
  var date2 = new Date(v2*60*60*24*1000);
  document.getElementById(idto).innerHTML = format(date2);
}

function format(date){
  return min2digit(date.getDate()) +"."+min2digit(date.getMonth()+1)+"."+date.getFullYear();
}

function min2digit(num){
  if (num<10) return "0"+num;
  else return num;
}