//CROSS BROWSER

// variables
// version of library
LCB_version = 2.8;
// _mac : true = macintosh, false = other os
_mac=navigator.userAgent.indexOf('Mac')!=-1;
// _ie512 : true = MSIE 5.12(mac), false = others
_ie512=navigator.userAgent.indexOf('MSIE 5.12')!=-1;
// _dom : kind of DOM.
//        IE4 = 1, IE5+ = 2, NN4 = 3, NN6+ = 4, others = 0
_dom = document.all?(document.getElementById?2:1)
                   :(document.getElementById?4:(document.layers?3:0));
_createLayerNo = 0;                    // layer no.


function initCrossBrowserLib(){
  _mac=navigator.userAgent.indexOf('Mac')!=-1;
  _ie512=navigator.userAgent.indexOf('MSIE 5.12')!=-1;
  _dom=document.all?(document.getElementById?2:1)
                     :(document.getElementById?4:(document.layers?3:0));
  _createLayerNo=0;
}
initCrossBrowserLib();


/* _____________________________________________________________________ */
function getWindowWidth (){
  if(_dom==4 || _dom==3) return window.innerWidth;
  if(_dom==2 || _dom==1) return document.body.clientWidth;
  return 0;
}

function getWindowHeight(){
  if(_dom==4 || _dom==3) return window.innerHeight;
  if(_dom==2 || _dom==1) return document.body.clientHeight;
  return 0;
}

function getWinXOffset(){
  if(_dom==4)            return window.scrollX;
  if(_dom==2 || _dom==1) return document.body.scrollLeft;
  if(_dom==3)            return window.pageXOffset;
  return 0;
}

function getWinYOffset(){
  if(_dom==4)            return window.scrollY;
  if(_dom==2 || _dom==1) return document.body.scrollTop;
  if(_dom==3)            return window.pageYOffset;
  return 0;
}

function getDivFromName(nm){
  if(_dom==4 || _dom==2) return document.getElementById(nm);
  if(_dom==1)            return document.all(nm);
  if(_dom==3){
    var s='';
    for(var i=1; i<arguments.length; i++) s+='document.layers.'+arguments[i]+'.';
    return eval(s+'document.layers.'+nm);
  }
  return null;
}

function getDivName(div){
  if(_dom==4 || _dom==2 || _dom==1) return div.id;
  if(_dom==3)                       return div.name;
  return '';
}

function createLayer(left,top,width,height,parentDiv){
  var s='';
  if(arguments.length>5){
    for(var i=5; i<arguments.length; i++) s+=arguments[i];
  }
  if(_dom==4){
    var divName= '_js_layer_'+_createLayerNo; _createLayerNo++;
    var pDiv   =parentDiv?parentDiv:document.body;
    var div    =document.createElement('DIV');
    div.id=divName;
    div.setAttribute('style',
       'position:absolute;left:'+left+';top:'+top
      +(width >0?(';width:' +width ):'')
      +(height>0?(';height:'+height):'')
      +';visibility:hidden');
    var range=document.createRange();
    range.selectNodeContents(div);
    range.collapse(true);
    var cf=range.createContextualFragment(s);
    div.appendChild(cf);
    pDiv.appendChild(div);
    return div;
  }
  if(_dom==2 || _dom==1){
    var adj    =(_mac&&!_ie512)?' ':'';
    var divName= '_js_layer_'+_createLayerNo; _createLayerNo++;
    var ha     =(height>0)?(';height:'+height):'';
    var pDiv   =parentDiv?parentDiv:document.body;
    pDiv.insertAdjacentHTML('BeforeEnd',
       '<div id="'+divName
      +'" style="position:absolute;left:'+left+';top:'+top
      +(width >0?(';width:' +width ):';width:1')
      +(height>0?(';height:'+height):'')
      +';visibility:hidden;">'+s+'<\/div>'+adj);
    return document.all(divName);
  }
  if(_dom==3){
    var div=parentDiv?(new Layer(width,parentDiv)):(new Layer(width));
    if(height>0) div.resizeTo(width,height);
    div.moveTo(left,top);
    if(s!=''){
      div.document.open('text/html','replace');
      div.document.write(s);
      div.document.close();
    }
    return div;
  }
  return null;
}

function createExLayer(url,left,top,width,height,parentDiv){
  if(_dom==4){
    var divName= '_js_layer_'+_createLayerNo; _createLayerNo++;
    var pDiv   =parentDiv?parentDiv:document.body;
    var div    =document.createElement('IFRAME');
    div.id=divName;
    div.name=divName;
    div.setAttribute('style',
       'position:absolute;left:'+left+';top:'+top
      +';width:'+width+(height>0?(';height:'+height):'')
      +';visibility:hidden');
    div.setAttribute('src',url);
    div.setAttribute('frameborder',0);
    div.setAttribute('scrolling','no');
    pDiv.appendChild(div);
    return div;
  }
  if(_dom==2 || _dom==1){
    var adj=(_mac&&_ie512)?' ':'';
    var bd, divName='_js_layer_'+_createLayerNo;
    _createLayerNo++;
    var ha=(height>0)?(';height:'+height):'';
    if(arguments.length>5 && parentDiv)
         bd=parentDiv;
    else bd=document.body;
    bd.insertAdjacentHTML('BeforeEnd',
       '<div id="'+divName
      +'" style="position:absolute;left:'+left+';top:'+top
      +';width:'+width+ha+';visibility:hidden;">'
      +'<iframe src="'+url+'" name="'+divName+'_if" '
      +'width='+width+' height='+height
      +'marginwidth=0 marginheight=0 '
      +'scrolling="no" frameborder="no">'
      +'<\/iframe>'
      +'<\/div>'+adj);
    return document.all(divName);
  }
  if(_dom==3){
    var div=parentDiv?(new Layer(width,parentDiv)):(new Layer(width));
    if(height>0) div.resizeTo(width,height);
    div.moveTo(left,top);
    div.load(url,width);
    return div;
  }
  return null;
}

function getDivImage(div,imgName){
  if(_dom==4)            return document.images[imgName];
  if(_dom==2 || _dom==1) return document.images(imgName);
  if(_dom==3)            return div.document.images[imgName];
  return null;
}

function getDivForm(div,frmName){
  if(_dom==4)            return document.forms[frmName];
  if(_dom==2 || _dom==1) return document.forms(frmName);
  if(_dom==3)            return div.document.forms[frmName];
  return null;
}

function initDivPos(div){
  if(_dom==4){
    div.style.left=div.offsetLeft+'px';
    div.style.top =div.offsetTop +'px';
  }
  else if(_dom==2 || _dom==1){
    div.style.pixelLeft=div.offsetLeft;
    div.style.pixelTop =div.offsetTop;
  }
  return div;
}

function getDivLeft(div){
  if(_dom==4 || _dom==2) return div.offsetLeft;
  if(_dom==1)            return div.style.pixelLeft;
  if(_dom==3)            return div.left;
  return 0;
}

function getDivTop(div){
  if(_dom==4 || _dom==2) return div.offsetTop;
  if(_dom==1)            return div.style.pixelTop;
  if(_dom==3)            return div.top;
  return 0;
}

function moveDivTo(div,left,top){
  if(_dom==4){
    div.style.left=left+'px';
    div.style.top =top +'px';
    return;
  }
  if(_dom==2 || _dom==1){
    div.style.pixelLeft=left;
    div.style.pixelTop =top;
    return;
  }
  if(_dom==3){
    div.moveTo(left,top);
    return;
  }
}

function moveDivBy(div,left,top){
  if(_dom==4){
    div.style.left=div.offsetLeft+left;
    div.style.top =div.offsetTop +top;
    return;
  }
  if(_dom==2){
    div.style.pixelLeft=div.offsetLeft+left;
    div.style.pixelTop =div.offsetTop +top;
    return;
  }
  if(_dom==1){
    div.style.pixelLeft+=left;
    div.style.pixelTop +=top;
    return;
  }
  if(_dom==3){
    div.moveBy(left,top);
    return;
  }
}

function scrollExlHItTo(exdiv,x){
  if(_dom==4){
    frames[exdiv.id].scrollTo(x,frames[exdiv.id].scrollY);
    return;
  }
  if(_dom==2 || _dom==1){
    frames(exdiv.id+'_if').scrollTo(x,frames(exdiv.id+'_if').document.body.scrollTop);
    return;
  }
  if(_dom==3){
    var dx=x-exdiv.clip.left, ch=exdiv.clip.width;
    exdiv.left-=dx;
    exdiv.clip.left=x; exdiv.clip.width=ch;
    return;
  }
  return;
}

function scrollExlVItTo(exdiv,y){
  if(_dom==4){
    frames[exdiv.id].scrollTo(frames[exdiv.id].scrollX,y);
    return;
  }
  if(_dom==2 || _dom==1){
    frames(exdiv.id+'_if').scrollTo(frames(exdiv.id+'_if').document.body.scrollLeft,y);
    return;
  }
  if(_dom==3){
    var dy=y-exdiv.clip.top, ch=exdiv.clip.height;
    exdiv.top-=dy;
    exdiv.clip.top=y; exdiv.clip.height=ch;
    return;
  }
  return;
}

function initDivSize(div){
  if(_dom==4){
    // getComputedStyle is buggy in NN6, and wrong in Mozilla 0.8/9
    //
    // var style=document.defaultView.getComputedStyle(div,null);
    // div.style.width =style.getPropertyValue('width' );
    // div.style.height=style.getPropertyValue('height');
    //
    div.style.width =div.offsetWidth +'px';
    div.style.height=div.offsetHeight+'px';
    //
    // need border-width=0px, margin-width:0px
  }
  else if(_dom==2 || _dom==1){
    div.style.pixelWidth =div.offsetWidth;
    div.style.pixelHeight=div.offsetHeight;
  }
  return div;
}

function getDivWidth (div){
  if(_dom==4 || _dom==2) return div.offsetWidth;
  if(_dom==1)            return div.style.pixelWidth;
  if(_dom==3)            return div.clip.width;
  return 0;
}

function getDivHeight(div){
  if(_dom==4 || _dom==2) return div.offsetHeight;
  if(_dom==1)            return div.style.pixelHeight;
  if(_dom==3)            return div.clip.height;
  return 0;
}

function resizeDivTo(div,width,height){
  if(_dom==4){
    div.style.width =width +'px';
    div.style.height=height+'px';
    return;
  }
  if(_dom==2 || _dom==1){
    div.style.pixelWidth =width;
    div.style.pixelHeight=height;
    return;
  }
  if(_dom==3){
    div.resizeTo(width,height);
    return;
  }
}

function resizeDivBy(div,width,height){
  if(_dom==4){
    div.style.width =(div.offsetWidth +width )+'px';
    div.style.height=(div.offsetHeight+height)+'px';
    return;
  }
  if(_dom==2){
    div.style.pixelWidth =div.offsetWidth +width;
    div.style.pixelHeight=div.offsetHeight+height;
    return;
  }
  if(_dom==1){
    div.style.pixelWidth +=width;
    div.style.pixelHeight+=height;
    return;
  }
  if(_dom==3){
    div.resizeBy(width,height);
    return;
  }
}

function getExlWidth (exdiv){
  if(_dom==4)
    // NN6 is buggy( same exdiv.offsetWidth )
    return exdiv.contentDocument.body.offsetWidth;
  if(_dom==2 || _dom==1)
    return _mac?frames(exdiv.id+'_if').document.body.offsetWidth
               :frames(exdiv.id+'_if').document.body.scrollWidth;
  if(_dom==3)
    return exdiv.document.width;
  return 0;
}

function getExlHeight(exdiv){
  if(_dom==4)
    return exdiv.contentDocument.body.offsetHeight;
  if(_dom==2 || _dom==1)
    return _mac?frames(exdiv.id+'_if').document.body.offsetHeight
               :frames(exdiv.id+'_if').document.body.scrollHeight;
  if(_dom==3)
    return exdiv.document.height;
  return 0;
}

function setDivVisibility(div,visible){
  if(_dom==4 || _dom==2 || _dom==1){
    div.style.visibility=(visible)?'inherit':'hidden';
    return;
  }
  if(_dom==3){
    div.visibility      =(visible)?'inherit':'hide';
    return;
  }
}

function setDivVisibilities(divs,visible){
  if(_dom==4 || _dom==2 || _dom==1){
    for(var i=0; i<divs.length; i++)
      divs[i].style.visibility=(visible)?'inherit':'hidden';
  }
  if(_dom==3){
    for(var i=0; i<divs.length; i++)
      divs[i].visibility      =(visible)?'inherit':'hide';
  }
  return divs;
}

function setDivClip(div,top,right,bottom,left){
  if(_dom==4 || _dom==2 || _dom==1){
    div.style.clip='rect('+top+'px '+right+'px '+bottom+'px '+left+'px)';
    return;
  }
  if(_dom==3){
    div.clip.top   =top;   div.clip.right=right;
    div.clip.bottom=bottom;div.clip.left =left;
    return;
  }
}

function writeDivHTML(div,op,cl){
  var s='';
  for(var i=3; i<arguments.length; i++) s+=arguments[i];
  if(_dom==4){
    if(op){ while(div.hasChildNodes()) div.removeChild(div.lastChild); }
    var range=document.createRange();
    range.selectNodeContents(div);
    range.collapse(true);
    var cf=range.createContextualFragment(s);
    div.appendChild(cf);
    return;
  }
  if(_dom==2 || _dom==1){
    if(op)   div.innerHTML='';
    if(_mac&&!_ie512) div.innerHTML+=s;
    else     div.insertAdjacentHTML('BeforeEnd',s);
    return;
  }
  if(_dom==3){
    if(op) div.document.open('text/html','replace');
    div.document.write(s);
    if(cl) div.document.close();
    return;
  }
}

function setDivBackgroundColor(div,color){
  if(color==null) color='transparent';
  if(_dom==3) div.bgColor=color;
  else        div.style.backgroundColor=color;
}

function setDivBackgroundImage(div,url){
  if(_dom==3) div.background.src=url?url:null;
  else        div.style.backgroundImage=url?('url('+url+')'):'none';
}

function setDivZIndex(div,order){
  if(_dom==4 || _dom==2 || _dom==1){
    div.style.zIndex=order;
    return;
  }
  if(_dom==3){
    div.zIndex      =order;
    return;
  }
}

function setDivStyleAttribute(div,nm,value){
  if(_dom!=0 && _dom!=3) eval('div.style.'+nm+'=value');
  return div;
}

function changeExlURL(exdiv,url){
  if(_dom==4){
    exdiv.setAttribute('src',url);
    return;
  }
  if(_dom==2 || _dom==1){
    frames(exdiv.id+'_if').location.replace(url);
    return;
  }
  if(_dom==3){
    exdiv.load(url,exdiv.clip.width);
    return;
  }
  return;
}

function getLeftFromEvent(e){
  if(_dom==4)          return e.clientX+window.scrollX;
  if(_dom==2||_dom==1) return document.body.scrollLeft+window.event.clientX;
  if(_dom==3)          return e.pageX;
  return 0;
}
function getTopFromEvent(e){
  if(_dom==4)          return e.clientY+window.scrollY;
  if(_dom==2||_dom==1) return document.body.scrollTop+window.event.clientY;
  if(_dom==3)          return e.pageY;
  return 0;
}


//EVENT HANDLER

_grabObj = null;             

function EventCtrl(div){
  this.div   = div;
  this.type  = ''; this.mask  = 0;
  this.pageX = 0;  this.pageY = 0;
}


EventCtrl.prototype.linkCtrl = function(obj){
  if(obj && !obj.eventCtrl) obj.eventCtrl=this;
  return this;
}


EventCtrl.prototype.setThreshold = function(threshold){
  this.threshold = threshold;
  return this;
}

function getCtrlFromElementIE(el,tagName){
  for(;el;el=el.parentElement)
    if((tagName==null || el.tagName==tagName) && el.eventCtrl)
      return el.eventCtrl;
  return null;
}

function getCtrlFromEventIE(e,tagName){     // IE—p
  var ctrl=_grabObj;
  var event=window.event;
  var fromCtrl, toCtrl;
  if (ctrl==null){
    var mask=0, type=event.type;
    switch(type){
    case 'mouseover':
      fromCtrl = getCtrlFromElementIE(event.fromElement,tagName);
      toCtrl   = getCtrlFromElementIE(event.toElement,  tagName);
      if(fromCtrl!=toCtrl) ctrl=toCtrl;
      if(!ctrl || (ctrl.mask&1)==0) ctrl=null;
      break;
    case 'mouseout':
      fromCtrl = getCtrlFromElementIE(event.fromElement,tagName);
      toCtrl   = getCtrlFromElementIE(event.toElement,  tagName);
      if(fromCtrl!=toCtrl) ctrl=fromCtrl;
      if(!ctrl || (ctrl.mask&1)==0) ctrl=null;
      break;
    case 'mousedown': 
    case 'mousemove': 
    case 'mouseup':
      ctrl = getCtrlFromElementIE(event.srcElement,tagName);
      if(ctrl && (ctrl.mask&2)!=0) break;
    default: ctrl=null; break;
    }
  }
  if(ctrl){
    ctrl.pageX = document.body.scrollLeft+event.clientX;
    ctrl.pageY = document.body.scrollTop +event.clientY;
    ctrl.type  = event.type;
  }
  return ctrl;
}
function getCtrlFromEventNN4(e,tagName){    // NN4—p
  var ctrl=_grabObj;
  if(ctrl==null) ctrl=e.target.eventCtrl;
  if(ctrl){
    var mask=0;
    switch(e.type){
    case 'mouseover': case 'mouseout':
      mask|=1; break;
    case 'mousedown': case 'mousemove': case 'mouseup':
      mask|=2; break;
    }
    if((ctrl.mask&mask)!=0){
      ctrl.pageX = e.pageX; ctrl.pageY = e.pageY;
      ctrl.type  = e.type;
    } else ctrl=null;
  }
  return ctrl;
}
function getCtrlFromEventMz(e,tagName){     // Mozilla—p
  var ctrl=_grabObj;
  if(ctrl==null){
    for(var t=e.target; t!=null; t=t.parentNode){
      if((  tagName==null
         ||(t.nodeType==Node.ELEMENT_NODE && t.tagName==tagName))
         && ('undefined' != typeof(t.eventCtrl)) ){
        ctrl=t.eventCtrl;
        break;
      }
    }
  }
  if(ctrl){
    ctrl.pageX = e.clientX+window.scrollX;
    ctrl.pageY = e.clientY+window.scrollY;
    ctrl.type  = e.type;
  }
  return ctrl;
}
function getCtrlFromEventNop(e,tagName){ return null; } // Dummy
getCtrlFromEvent=(_dom==1||_dom==2)?getCtrlFromEventIE:
                   (_dom==3?getCtrlFromEventNN4:
                    (_dom==4?getCtrlFromEventMz:
                     getCtrlFromEventNop));

// mouseover
function ech_mouseover(e){
  var ctrl = getCtrlFromEvent(e,null);
  if(ctrl && ctrl.mouseover && !ctrl.mouseoverState){
    ctrl.mouseoverState = true;
    if(ctrl.mouseover) ctrl.mouseover(ctrl,ctrl.mouseoverClient);
  }
}

// mouseout
function ech_mouseout(e){
  var ctrl = getCtrlFromEvent(e,null);
  if(ctrl && ctrl.mouseover && ctrl.mouseoverState){
    ctrl.mouseoverState = false;
    if(ctrl.mouseout) ctrl.mouseout(ctrl,ctrl.mouseoutClient);
  }
}

// mousedown
function ech_mousedown(e){
  var ctrl = getCtrlFromEvent(e,null);
  if(ctrl && !ctrl.dragging){
    _grabObj = ctrl; ctrl.dragging=true; ctrl.dragged = false;
    ctrl.startX = ctrl.curX = ctrl.pageX;
    ctrl.startY = ctrl.curY = ctrl.pageY;
    if(ctrl.mousedown) ctrl.mousedown(ctrl,ctrl.mousedownClient);
    return false;
  }
  return true;
}

// mousemove
function ech_mousemove(e){
  var ctrl = getCtrlFromEvent(e,null);
  if(ctrl && ctrl.dragging){
    if(ctrl.curX!=ctrl.pageX || ctrl.curY!=ctrl.pageY){
      if(Math.abs(ctrl.pageX-ctrl.startX)>ctrl.threshold || Math.abs(ctrl.pageY-ctrl.startY)>ctrl.threshold)
        ctrl.dragged = true;
      if(ctrl.mousemove) ctrl.mousemove(ctrl,ctrl.mousemoveClient);
      ctrl.curX = ctrl.pageX; ctrl.curY = ctrl.pageY;
    }
    return false;
  }
  return true;
}

// mouseup
function ech_mouseup(e){
  var ctrl = getCtrlFromEvent(e,null);
  if(ctrl && ctrl.dragging){
    _grabObj = null; ctrl.dragging = false;
    if(ctrl.mouseup) ctrl.mouseup(ctrl,ctrl.mouseupClient);
    if(!ctrl.dragged && ctrl.mouseclick)
      ctrl.mouseclick(ctrl,ctrl.mouseclickClient);
    ctrl.curX = ctrl.pageX; ctrl.curY = ctrl.pageY;
    return false;
  }
  return true;
}

// mouseover/mouseout
function ech_attachMouseOverOut(div,ovrf,ovrc,outf,outc){
  if(!div.eventCtrl) div.eventCtrl = new EventCtrl(div);
  var ctrl = div.eventCtrl;
  ctrl.mouseoverState = false;
  ctrl.mouseover  = ovrf; ctrl.mouseoverClient = ovrc;
  ctrl.mouseout   = outf; ctrl.mouseoutClient  = outc;
  div.onmouseover = ech_mouseover;
  div.onmouseout  = ech_mouseout;
  ctrl.mask|=1;
  return ctrl;
}

// mouseover/mouseout
function ech_detachMouseOverOut(div){
  var ctrl = div.eventCtrl;
  if(ctrl){
    ctrl.div.onmouseover = null;
    ctrl.div.onmouseout  = null;
    ctrl.mask=~1;
  }
}

function ech_attachMouseDrag(div,dwnf,dwnc,movf,movc,upf,upc,clkf,clkc){
  var doc;
  if(_dom==1||_dom==2){
    doc = div;
    doc.onmousedown      = ech_mousedown;
    document.onmousemove = ech_mousemove;
    document.onmouseup   = ech_mouseup;
  } else if(_dom==3){
    doc = div.document;
    doc.onmousedown = ech_mousedown;
    doc.onmousemove = ech_mousemove;
    doc.onmouseup   = ech_mouseup;
    doc.captureEvents(Event.MOUSEDOWN|Event.MOUSEMOVE|Event.MOUSEUP);
  } else if(_dom==4){
    doc = div;
    div.onmousedown           = ech_mousedown;
    document.body.onmousemove = ech_mousemove;
    document.body.onmouseup   = ech_mouseup;
  } else return null;
  if(!doc.eventCtrl) doc.eventCtrl = new EventCtrl(div);
  var ctrl=doc.eventCtrl;
  ctrl.dragging  = false; ctrl.dragged   = false;
  ctrl.startX    = 0;     ctrl.startY    = 0;
  ctrl.curX      = 0;     ctrl.curY      = 0;
  ctrl.mousedown = dwnf; ctrl.mousedownClient = dwnc;
  ctrl.mousemove = movf; ctrl.mousemoveClient = movc;
  ctrl.mouseup   = upf;  ctrl.mouseupClient   = upc;
  ctrl.mouseclick= clkf; ctrl.mouseclickClient= clkc;
  ctrl.threshold = 5;
  ctrl.mask|=2;
  return ctrl;
}

function ech_detachMouseDrag(div){
  var ctrl = null;
  if(_dom==1||_dom==2){
    ctrl=div.eventCtrl;
    if(ctrl) ctrl.div.onmousedown=null;
  } else if(_dom==3){
    ctrl = div.document.eventCtrl;
    if(ctrl){
      var doc = ctrl.div.document;
      doc.releaseEvents(Event.MOUSEDOWN|Event.MOUSEMOVE|Event.MOUSEUP);
      doc.onmousedown = null;
      doc.onmousemove = null;
      doc.onmouseup   = null;
    }
  } else if(_dom==4){
    ctrl = div.eventCtrl;
    if(ctrl) ctrl.div.onmousedown=null;
  }
  if(ctrl) ctrl.mask&=~2;
}


//FORM UTIL

function bsFormToggleCheckbox(formName, fieldName) {
	if (document.forms[formName].elements[fieldName].checked) {
		document.forms[formName].elements[fieldName].checked = false;
	} 
	else
	{
		document.forms[formName].elements[fieldName].checked = true;
	}
}

function bsFormToggleContainer(containerName) {
	if (document.all[containerName].style.display == "none") {
		document.all[containerName].style.display = "";
	}
	else
	{
		document.all[containerName].style.display = "none";
	}
}

function bsFormCheckMail(url, fieldObj, checkType) {
	var fieldName = fieldObj.name;
	var fieldID   = fieldObj.id;
	var email     = fieldObj.value;
	var iFrameObj = document.getElementById('bsMailCheck' + fieldName);
	url += "?email=" + email + "&checkType=" + checkType;
	var zeit = new Date();
	url += "&random=" + zeit.getMilliseconds();
	iFrameObj.src = url;
}

function bsFormJumpToFirstError(fieldName, formName, doSelect) {
	if (document.forms[formName].elements[fieldName]) {
		if (doSelect && (document.forms[formName].elements[fieldName].value != '')) {
			if (document.forms[formName].elements[fieldName].select) {
				document.forms[formName].elements[fieldName].select();
			}
		}
		if (document.forms[formName].elements[fieldName].focus) {
			document.forms[formName].elements[fieldName].focus();
		}
	}
}


function bsFormEnterSubmit(ev, myForm) {
	var ev = ('object' == typeof(window.event)) ? window.event : ev;
	if (ev && ev.keyCode == 13) {
		myForm.submit();
	}
	return true;
}


function bsFormNoEnter(ev) {
	var ev = ('object' == typeof(window.event)) ? window.event : ev;
	if (ev) return (ev.keyCode != 13);
	return true;
}

function bsFormEnterToTab(ev) {
	ev = ('object' == typeof(window.event)) ? window.event : ev;
	if (ev && ev.keyCode == 13) ev.keyCode = 9;
	return true;
}

function bsFormHandleEnter(ev, functionName) {
	var ev = ('object' == typeof(window.event)) ? window.event : ev;
	if (ev && ev.keyCode == 13) {
		return eval(functionName + '();');
	}
	return true;
}


function bsFormFieldSetFocusAndSelect(field, force) {
	if (typeof(field) == 'string') {
		field = document.getElementById(field);
	}
	if (!field) return false;
	try {
		if (force || !field.hasFocus) {
			field.focus();
			field.select();
		}
	} 
	catch (e) {
		return false;
	}
	return true;
}

function bsFormDoHiddenSubmit(exitScreen, exitAction, nextScreen, nextAction, dataHash, submitToAction) {
	var formOutArray =  new Array();
	var ii=0;
	formOutArray[ii++] = '<form name="smSubmitForm" action="' + submitToAction + '" method="post">';
	formOutArray[ii++] = '<input type="hidden" name="bs_todo[nextScreen]" value="' + nextScreen + '">';
	formOutArray[ii++] = '<input type="hidden" name="bs_todo[exitScreen]" value="' + exitScreen + '">';
	switch (typeof(nextAction)) {
		case 'string':
			formOutArray[ii++] = '<input type="hidden" name="bs_todo[nextAction]" value="' + nextAction + '">';
			break;
		case 'object':
			for (var key in nextAction) {
				formOutArray[ii++] = '<input type="hidden" name="bs_todo[nextAction][' + key + ']" value="' + nextAction[key] + '">';
			}
			default:
	}
	

	switch (typeof(exitAction)) {
		case 'string':
			formOutArray[ii++] = '<input type="hidden" name="bs_todo[exitAction]" value="' + exitAction + '">';
			break;
		case 'object':
			for (var key in exitAction) {
				formOutArray[ii++] = '<input type="hidden" name="bs_todo[exitAction][' + key + ']" value="' + exitAction[key] + '">';
			}
			default:
	}
	

	dataHash = _recursiveObj2Hash(dataHash);
	for (var matrixStr in dataHash) {
		if (typeof(dataHash[matrixStr]) == 'function') continue;
		var valStr = bs_filterForHtml(dataHash[matrixStr] + '');
		formOutArray[ii++] = '<input type="hidden" name="' + "bs_todo[dataHash]" + matrixStr + '" value="' + valStr +  '">';
	}

	formOutArray[ii++] = '</form>';
	var body = document.getElementsByTagName('body').item(0);
	body.innerHTML = formOutArray.join('');
	var form = document.smSubmitForm;form.submit();
}


function _recursiveObj2Hash(aObject, matrixStr, flatObjHash) {
	if (!flatObjHash) {
		flatObjHash = new Object();
		matrixStr = '';
	}

	if (typeof(aObject) != 'object') {
		flatObjHash[matrixStr] = aObject;
	}
	else 
	{
		for (var key in aObject) {
			var newMatrixStr = matrixStr + '['+key+']';
			_recursiveObj2Hash(aObject[key], newMatrixStr, flatObjHash);
		}
	}
	return flatObjHash;
}


//SLIDER

if (!Bs_Objects) {
	var Bs_Objects = [];
};

function Bs_Slider(theFieldnamePrefix) {
	this._objectId;
	this.fieldName;
	this._disabled = false;
	this.direction = 0;
	this.width = 100;
	this.height = 20;
	this.minVal = 0;
	this.maxVal = 100;
	this.valueDefault = 0;
	this.arrowAmount = 1;
	this.colorbar;this.baseZindex = 1000;
	this.moveX = 0;
	this.moveY = 0;
	this.imgBasePath;
	this.imgDir  = '/_bsJavascript/components/slider/img/';
	this._bgImgSrc;this._bgImgRepeat;this._sliderImgSrc;
	this._sliderImgWidth;
	this._sliderImgHeight;
	this.styleContainerClass;
	this.styleValueFieldClass = 'smalltxt spanSliderField';
	this.styleValueTextClass  = 'smalltxt spanSliderText';
	this.bgColor;this._arrowIconLeftSrc;
	this._arrowIconLeftWidth = 0;
	this._arrowIconLeftHeight = 0;
	this._IconLeftCssStyle  = 0;
	this._arrowIconRightSrc;
	this._arrowIconRightWidth = 0;
	this._arrowIconRightHeight = 0;
	this._IconRightCssStyle = 0;
	this.valueInterval   = 1;
	this.useInputField = 2;
	this.inputTextFieldEvent = 'over';
	this.ctrl;this._valueInternal;
	this._display = 2;
	this._arrowLeftContainerId;
	this._arrowLeftContainerObj;
	this._arrowLeftIconId;
	this._arrowLeftIconObj;
	this._arrowRightContainerId;
	this._arrowRightContainerObj;
	this._arrowRightIconId;
	this._arrowRightIconObj;
	this._valueContainerId;
	this._valueContainerObj;
	this._handleId;
	this._handleObj;
	this._valueFieldId;
	this._valueFieldObj;
	this._valueTextId;
	this._valueTextObj;
	this._slideBarId;
	this._slideBarObj;
	this._colorbarId;
	this._colorbarObj;
	this._posUpperLeftX;
	this._posUpperLeftY;
	this._posSlideStart;
	this._posSlideEnd;
	this._slideWidth;
	this._attachedEvents;
	this.eventOnChange;
	this.slideStartCB;
	this.slideMoveCB;
	this.slideEndCB;
	this.attachedfield;
	
	this._constructor = function(theFieldnamePrefix) {
		this._id = Bs_Objects.length;
		Bs_Objects[this._id] = this;
		this._objectId = "Bs_Slider_"+this._id;
		this.objectName = this._objectId;
		if (typeof(theFieldnamePrefix) == 'string')
		{
			this.fieldName = theFieldnamePrefix + '_value';
			this.objectName = theFieldnamePrefix;
		}
	}
	this._checkup = function() {
		if (typeof(this.minVal) == 'undefined') this.minVal = 0;
		if (typeof(this.maxVal) == 'undefined') this.maxVal = 10;
		if (typeof(this.valueDefault) == 'undefined') this.valueDefault = this.minVal;
		this._valueInternal = this.valueDefault;
		if (typeof(this.imgBasePath) == 'string')  this.imgDir = this.imgBasePath;
	}
	this.render = function(tagId) {
		this._checkup();
		this._containerId  = 'co'  + tagId;
		this._handleId     = 'po'  + tagId;
		this._arrowLeftContainerId  = 'alc'  + tagId;
		this._arrowLeftIconId  = 'ali'  + tagId;
		this._arrowRightContainerId = 'arc'  + tagId;
		this._arrowRightIconId  = 'ari'  + tagId;
		this._valueContainerId = 'vc'  + tagId;
		this._valueFieldId = 'vf'  + tagId;
		if (typeof(this.fieldName) == 'undefined') this.fieldName = tagId + '_value';
		this._valueTextId = 'vt'  + tagId;
		this._slideBarId = 'bar' + tagId;
		this._colorbarId = 'cb'  + tagId;
		var divWidth  = this.width;
		var divHeight = this.height;
		var completeWidth = this.width + this._arrowIconLeftWidth + this._arrowIconRightWidth + this._sliderImgWidth +15;
		var out = new Array();
		var outI = 0;
		var localOffset = 0;
		out[outI++] = '<div id="' + this._containerId + '"';
		if (this.styleContainerClass) {
			out[outI++] = ' class="' + this.styleContainerClass + '"';
		}
		out[outI++] = ' style="position:relative;';
		if (this._display == 0) {
			out[outI++] = ' display:none;';
		}
		else if (this._display == 1)
		{
			out[outI++] = ' visibility:hidden;';
		}
		out[outI++] = '">';
		out[outI++] = '<div style="position:absolute; left:' + this.moveX + '; top:' + this.moveY + ';">';
		out[outI++] = '<div style="position:absolute; display:none; z-index:5000;" id="' + this._handleId     + '">';
		out[outI++] = '<img name="bsslidericonname" src="' + this.imgDir + this._sliderImgSrc + '" border=0 width=' + this._sliderImgWidth + ' height=' + this._sliderImgHeight + '>';
		out[outI++] = '</div>';
		if ((this.arrowAmount > 0) && this._arrowIconLeftSrc) {
			out[outI++] = '<div id="' + this._arrowLeftContainerId + '" style="position:absolute; left:' + localOffset + '; top:0;">';
			out[outI++] = '<a href="javascript:void(false);" onClick="Bs_Objects['+this._id+'].onChangeByArrow(false); return false;">';
			out[outI++] = '<img id="' + this._arrowLeftIconId + '" src="' + this.imgDir + this._arrowIconLeftSrc + '" border="0" width="' + this._arrowIconLeftWidth + '" height="' + this._arrowIconLeftHeight + '"';
			if (typeof(this.arrowIconLeftCssStyle) != 'undefined') {
				out[outI++] = ' style="' + this.arrowIconLeftCssStyle + '"';
			}
			out[outI++] = '>';
			out[outI++] = '</a></div>';
			localOffset += this._arrowIconLeftWidth;
		}
		if (this.colorbar) {
			out[outI++] = '<div id="' + this._colorbarId + '" onClick="Bs_Objects['+this._id+'].onChangeByClick(event);"';
			if (this.colorbar['cssClass']) {
				out[outI++] = ' class="' + this.colorbar['cssClass'] + '"';
			}
			out[outI++] = ' style="position:absolute; z-index:4000; width:0;';
			if ('undefined' != typeof(this.colorbar['color'])) {
				out[outI++] = ' background-color:' + this.colorbar['color'] + ';';
			} 
			else if ('undefined' == typeof(this.colorbar['cssClass']))
			{
				out[outI++] = ' background-color:orange;';
			}
			
			if ('undefined' != typeof(this.colorbar['offsetLeft']))
			{
				out[outI++] = ' left:' + (localOffset + this.colorbar['offsetLeft']) + ';';
			}
			
			if ('undefined' != typeof(this.colorbar['offsetTop'])) {
				out[outI++] = ' top:' + this.colorbar['offsetTop'] + ';';
			}

			if ('undefined' != typeof(this.colorbar['height'])) {
				out[outI++] = ' height:' + this.colorbar['height'] + ';';
			}

			out[outI++] = '">';
			out[outI++] = '<img src="/_bsImages/spacer.gif" width="1" height="5"></div>';
		}

		out[outI++] = '<div id="' + this._slideBarId + '" onClick="Bs_Objects['+this._id+'].onChangeByClick(event);" style="position:absolute; left:' + localOffset + '; top:0; width:' + this.width + '; height: ' + divHeight + '; clip:rect(0 ' + divWidth + '  ' + divHeight + ' 0);';
		if (this.bgColor) {
			out[outI++] = 'background-color:' + this.bgColor + ';layer-background-color:' + this.bgColor + ';';
		}

		if (this._bgImgSrc) {
			out[outI++] = ' background: url(' + this.imgDir + this._bgImgSrc + ') ' + this._bgImgRepeat + ';';
		}

		out[outI++] = '"></div>';
		localOffset += this.width;
		
		if ((this.arrowAmount > 0) && this._arrowIconRightSrc) 
		{
			out[outI++] = '<div id="' + this._arrowRightContainerId + '" style="position:absolute; left:' + localOffset + '; top:0;">';
			out[outI++] = '<a href="javascript:void(false);" onClick="Bs_Objects['+this._id+'].onChangeByArrow(true); return false;">';
			out[outI++] = '<img id="' + this._arrowRightIconId + '" src="' + this.imgDir + this._arrowIconRightSrc + '" border="0" width="' + this._arrowIconRightWidth + '" height="' + this._arrowIconRightHeight + '"';
			if (typeof(this.arrowIconRightCssStyle) != 'undefined') {
				out[outI++] = ' style="' + this.arrowIconRightCssStyle + '"';
			}
			out[outI++] = '>';
			out[outI++] = '</a></div>';
			localOffset += this._arrowIconRightWidth;
		}
		
		var styleValueFieldClass = (this.styleValueFieldClass) ? ' class="' + this.styleValueFieldClass + '"' : '';
		var styleValueTextClass  = (this.styleValueTextClass)  ? ' class="' + this.styleValueTextClass  + '"' : '';
		out[outI++] = '<div id="' + this._valueContainerId + '" style="position:absolute; left:' + localOffset + ';top:0px;">';
		if (this.useInputField == 1) {
			out[outI++] = '<span' + styleValueTextClass + ' id="' + this._valueTextId + '">' + this.valueDefault  + '</span>';
			out[outI++] = '<input type="hidden" name="' + this.fieldName + '" id="' + this._valueFieldId + '" value="' + this.valueDefault + '">';
		}
		else if (this.useInputField == 2) 
		{
			out[outI++] = '<input type="text"' + styleValueFieldClass + ' onMouseOver="bsFormFieldSetFocusAndSelect(this, false);" name="' + this.fieldName + '" id="' + this._valueFieldId + '" value="' + this.valueDefault + '" size="2"';
			if (styleValueFieldClass == '') {
				out[outI++] = ' style="vertical-align:text-top; width:30; height:' + this.height + ';"';
			}
			out[outI++] = ' onKeyUp="Bs_Objects['+this._id+'].onChangeByInput(this.value, false);" onBlur="Bs_Objects['+this._id+'].onChangeByInput(this.value, true);">';
		}
		else if (this.useInputField == 3) 
		{
			out[outI++] = '<input type="text"' + styleValueFieldClass + ' onMouseOver="bsFormFieldSetFocusAndSelect(this, false);" name="' + this.fieldName + '" id="' + this._valueFieldId + '" value="' + this.valueDefault + '" size="2"';
			
			if (styleValueFieldClass == '') {
				out[outI++] = ' style="display:none; vertical-align:text-top; width:30; height:' + this.height + ';"';
			}
			else 
			{
				out[outI++] = ' style="display:none;"';
			}
			
			out[outI++] = ' onKeyUp="Bs_Objects['+this._id+'].onChangeByInput(this.value, false);" onBlur="var _bss = Bs_Objects['+this._id+']; _bss.onChangeByInput(this.value, true);_bss.textboxEdit(false)">';
			out[outI++] = '<span' + styleValueTextClass + ' style="" id="' + this._valueTextId   + '" ';
			if (this.inputTextFieldEvent == 'click')
			{
				out[outI++] = 'onClick="Bs_Objects['+this._id+'].textboxEdit(true);"';
			}
			else
			{
				out[outI++] = 'onMouseOver="Bs_Objects['+this._id+'].textboxEdit(true);"';
			}
			out[outI++] = '>' + this.valueDefault  + '</span>';
		}
		else {
			out[outI++] = '<input type="hidden" name="' + this.fieldName + '" id="' + this._valueFieldId + '" value="' + this.valueDefault + '">';
		}
		out[outI++] = '</div>';
		out[outI++] = '</div>';
		out[outI++] = '</div>';
		document.getElementById(tagId).innerHTML = out.join('');
		this._containerObj = document.getElementById(this._containerId);
		this._handleObj = document.getElementById(this._handleId);
		this._valueContainerObj = document.getElementById(this._valueContainerId);
		this._arrowLeftContainerObj = document.getElementById(this._arrowLeftContainerId);
		this._arrowLeftIconObj = document.getElementById(this._arrowLeftIconId);
		this._arrowRightContainerObj = document.getElementById(this._arrowRightContainerId);
		this._arrowRightIconObj = document.getElementById(this._arrowRightIconId);
		this._valueFieldObj = document.getElementById(this._valueFieldId);
		this._valueTextObj  = document.getElementById(this._valueTextId);
		this._slideBarObj = document.getElementById(this._slideBarId);
		this._colorbarObj = document.getElementById(this._colorbarId);
		this._posSlideStart = getDivLeft(this._slideBarObj);
		this._slideWidth = this.width - this._sliderImgWidth;
		this._posSlideEnd = this._posSlideStart + this._slideWidth;
		this._currentRelSliderPosX = this._posSlideStart;
		if (this.valueDefault > this.minVal) {
			var hundertPercent = this.maxVal - this.minVal;
			var myPercent = (this.valueDefault-this.minVal) * 100 / hundertPercent;
			this._currentRelSliderPosX += (myPercent * this._slideWidth / 100);
			this._updateColorbar(this._currentRelSliderPosX);
		}
			
		this._handleObj.style.left = this._currentRelSliderPosX;
		this._handleObj.style.display = 'block';
		temp = ech_attachMouseDrag(this._handleObj,this.slideStart,null,this.slideMove,null,this.slideEnd,null,null,null);
		temp = temp.linkCtrl(getDivImage('','bsslidericonname'));
		this.ctrl = temp;
		this.ctrl.sliderObj = this;
		var x = getDivLeft(this._handleObj);
		var y = getDivTop(this._handleObj);
		y = 0;
		if (this.direction == 0) {
			this.ctrl.minX = this._posSlideStart;
			this.ctrl.maxX = this._posSlideEnd;
			this.ctrl.minY = y;
			this.ctrl.maxY = y;
		}
		else
		{
			alert('not implemented');
		}
	}

	this.drawInto = function(tagId) {
		this.render(tagId);
		if (this._disabled) this.setDisabled(true);
	}

	this.draw = function(tagId) {
		this.render(tagId);
		if (this._disabled) this.setDisabled(true);
	}

	this.attachEvent = function(trigger, yourEvent) {
		if (typeof(this._attachedEvents) == 'undefined') {
			this._attachedEvents = new Array();
		}
		if (typeof(this._attachedEvents[trigger]) == 'undefined') {
			this._attachedEvents[trigger] = new Array(yourEvent);
		}
		else
		{
			this._attachedEvents[trigger][this._attachedEvents[trigger].length] = yourEvent;
		}
	}

	this.hasEventAttached = function(trigger) {
		return (this._attachedEvents && this._attachedEvents[trigger]);
	}

	this.fireEvent = function(trigger) {
		if (this._attachedEvents && this._attachedEvents[trigger]) {
			var e = this._attachedEvents[trigger];
			if ((typeof(e) == 'string') || (typeof(e) == 'function')) {
				e = new Array(e);
			}
			for (var i=0; i<e.length; i++) {
				if (typeof(e[i]) == 'function') {
					e[i](this);
				} 
				else if (typeof(e[i]) == 'string') {
					eval(e[i]);
				}
			}
		}
	}
	

	this.attachOnChange = function(functionName) {
		this.eventOnChange = functionName;
	}
	
	this.attachOnSlideStart = function(functionName) {
		this.slideStartCB = functionName;
	}
	

	this.attachOnSlideMove = function(functionName) {
		this.slideMoveCB = functionName;
	}
	

	this.attachOnSlideEnd = function(functionName) {
		this.slideEndCB = functionName;
	}

	this.attachOnArrow = function(functionName) {
		this.eventOnArrow = functionName;
	}

	this.attachOnInputChange = function(functionName) {
		this.eventOnInputChange = functionName;
	}
	
	this.attachOnInputBlur = function(functionName) {
		this.eventOnInputBlur = functionName;
	}

	this.setSliderIcon = function(imgName, width, height) {
		this._sliderImgSrc = imgName;this._sliderImgWidth  = width;this._sliderImgHeight = height;
	}

	this.setArrowIconLeft = function(imgName, width, height) {
		this._arrowIconLeftSrc = imgName;this._arrowIconLeftWidth  = width;this._arrowIconLeftHeight = height;
	}

	this.setArrowIconRight = function(imgName, width, height) {
		this._arrowIconRightSrc = imgName;
		this._arrowIconRightWidth = width;
		this._arrowIconRightHeight = height;
	}

	this.setBackgroundImage = function(src, repeat) {
		this._bgImgSrc = src;this._bgImgRepeat = repeat;
	}

	this.setDisplay = function(display) {
		this._display = display;
		if (this._containerObj) {
			switch (display) {
				case 0:
					this._containerObj.style.display = 'none';
					break;
				case 1:
					this._containerObj.style.visibility = 'hidden';
					break;
				case 2:
					this._containerObj.style.visibility = 'visible';
					this._containerObj.style.display = 'block';
					break;
					default:
			}
		}
	}

	this.setDisabled = function(b) {
		if (typeof(b) == 'undefined') b = !this._disabled;
		if (b) {
			var filter = 'progid:DXImageTransform.Microsoft.BasicImage(grayScale=1);progid:DXImageTransform.Microsoft.BasicImage(opacity=.5)';
			var cursor = 'default';
		} 
		else
		{
			var filter = null;
			var cursor = 'hand';
		}
		
		var t = new Array(this._containerId, this._arrowLeftContainerId, this._arrowRightContainerId, this._valueFieldId, this._valueTextId,this._slideBarId, this._colorbarId, this._handleId);
		for (var i=0; i<t.length; i++) {
			var elm = document.getElementById(t[i]);
			if (elm != null) elm.style.filter = filter;
		}
		
		var elm = document.getElementById(this._arrowLeftIconId);
		if (elm != null) elm.style.cursor = cursor;
		var elm = document.getElementById(this._arrowRightIconId);
		if (elm != null) elm.style.cursor = cursor;
		var elm = document.getElementById(this._valueFieldId);
		if (elm != null) elm.disabled = b;
		this._disabled = b;
	}

	this.getValue = function() {
		return this._valueInternal;
	}

	this.getSliderPos = function() {
		var absLeng = (this.direction==0) ? getDivLeft(this.ctrl.div) - this.ctrl.minX : getDivTop (this.ctrl.div) - this.ctrl.minY;
		var absRang = this.maxVal - this.minVal;
		return (absLeng * absRang/this._slideWidth) + this.minVal;
	}

	this.onChangeBySlide = function() {
		if (this._disabled) return;
		var newPos = this._getNewLocationFromCursor();
		var val = this._getValueByPosition(newPos);
		val = this._roundToGrid(val);
		if (val != this._valueInternal) {
			this._valueInternal = val;
			this.updateHandle(newPos);
			this.updateValueField(val);
			this.updateValueText(val);
			this._updateColorbar(newPos);
			if ('undefined' != typeof(this.eventOnChange)) this.eventOnChange(this, val, newPos);
			this.fireEvent('onChange');
		}
	}

	this.onChangeByClick = function(event) {
		if (this._disabled) return;
		var newPos = 0;
		if ('undefined' != typeof(event.offsetX)) {
			newPos = event.offsetX + this._posSlideStart;
		} 
		else if ('undefined' != typeof(event.layerX))
		{
			newPos = event.layerX + this._posSlideStart;
		}
		else {
			return;
		}

		var val = this._getValueByPosition(newPos);
		val = this._roundToGrid(val);
		if (val != this._valueInternal) {
			this._valueInternal = val;
			this.updateHandle(newPos);
			this.updateValueField(val);
			this.updateValueText(val);
			this._updateColorbar(newPos);
			if ('undefined' != typeof(this.eventOnChange)) this.eventOnChange(this, val, newPos);
			this.fireEvent('onChange');
		}
	}

	this.onChangeByInput = function(val, isBlur) {
		if (this._disabled) return;
		if (val == '') {
			val = this.minVal;
		}
		
		val = this._roundToGrid(val);
		var newPos = this._getPositionByValue(val);
		if (val != this._valueInternal) {
			this._valueInternal = val;
			this.updateHandle(newPos);
			this._updateColorbar(newPos);
			if ('undefined' != typeof(this.eventOnChange)) this.eventOnChange(this, val, newPos);
			this.fireEvent('onChange');
			if (isBlur) {
				this.updateValueField(val);
				this.updateValueText(val);
			}
		}
		else if (isBlur) {
			this.updateValueField(val);
			this.updateValueText(val);
		}
	}
	

	this.onChangeByArrow = function(leftOrRight) {
		if (this._disabled) return;
		var val = parseFloat(this._valueInternal);
		if (leftOrRight) {
			val += this.arrowAmount;
		}
		else 
		{
			val -= this.arrowAmount;
		}
		val = this._roundToGrid(val);
		if (val != this._valueInternal) {
			this._valueInternal = val;
			var newPos = this._getPositionByValue(val);
			this.updateHandle(newPos);
			this.updateValueField(val);
			this.updateValueText(val);
			this._updateColorbar(newPos);
			if ('undefined' != typeof(this.eventOnChange)) this.eventOnChange(this, val, newPos);
			this.fireEvent('onChange');
		}
	}

	this.setValue = function(val) {
		val = this._roundToGrid(val);
		var newPos = this._getPositionByValue(val);
		if (val != this._valueInternal) {
			this._valueInternal = val;
			this.updateHandle(newPos);
			this._updateColorbar(newPos);
			if ('undefined' != typeof(this.eventOnChange)) this.eventOnChange(this, val, newPos);
			this.fireEvent('onChange');
			this.updateValueField(val);
			this.updateValueText(val);
		}
	}

	this.onChangeByApi = function(val) {
		this.setValue(val);
	}
	
	this._updateColorbar = function(newPos) {
		if (this._colorbarObj) {
			var newWidth = newPos + this.colorbar['widthDifference'];
			if (newWidth < 0) newWidth = 0;
			this._colorbarObj.style.width = newWidth;
		}
	}

	this._getValueByPosition = function(pos) {
		pos -= this.ctrl.minX;
		var hundertPercent = this.ctrl.maxX - this.ctrl.minX;
		var myPercent = pos / hundertPercent;
		var val = this.minVal + ((this.maxVal - this.minVal) * myPercent);
		return val;
	}


	this._getPositionByValue = function(val) {
		val = val - this.minVal;
		var hundertPercent = this.maxVal - this.minVal;
		var myPercent = val / hundertPercent;
		var pos = this.ctrl.minX + ((this.ctrl.maxX - this.ctrl.minX) * myPercent);
		return pos;
	}

	this._roundToGrid = function(val) {
		val = parseFloat(val);
		if (isNaN(val)) return this.minVal;
		val = Math.round(val / this.valueInterval) * this.valueInterval;
		val = Math.round(val*10000)/10000;
		if (val < this.minVal) val = this.minVal;
		if (val > this.maxVal) val = this.maxVal;
		return val;
	}
	

	this._getNewLocationFromCursor = function() {
		var ox = this._posEventSlideStartX;
		var oy = this._posEventSlideStartY;
		switch(this.direction) {
			case 0:
				var t = this.ctrl.pageX - ox;
				var x = parseInt(this._posObjSlideStartX) + t;
				if (x > this.ctrl.maxX) x = this.ctrl.maxX;
				if (x < this.ctrl.minX) x = this.ctrl.minX;
				return x;
				if (this.ctrl.pageX > this.ctrl.maxX) {
					x=this.ctrl.maxX;
				} 
				else if (this.ctrl.pageX < this.ctrl.minX) {
					x=this.ctrl.minX;
				} 
				else {
					x = this.ctrl.pageX;
					if (x < this.ctrl.minX) x = this.ctrl.minX;
					if (x > this.ctrl.maxX) x = this.ctrl.maxX;
				}
				return x;
				break;
			case 1:
				if(this.ctrl.pageY>this.ctrl.maxY) y=this.ctrl.maxY;
				else if(this.ctrl.pageY<this.ctrl.minY) y=this.ctrl.minY;else {
					y+=this.ctrl.pageY-this.ctrl.curY;
					if(y<this.ctrl.minY) y=this.ctrl.minY;
					if(y>this.ctrl.maxY) y=this.ctrl.maxY;
				}
				return y;
				break;
		}
	}

	this.updatePointer = function(newPos) {
		this.updateHandle(newPos);
	}

	this.updateHandle = function(newPos) {
		this._currentRelSliderPosX = newPos;
		this.ctrl.div.style.left = newPos;
		return;switch(this.direction) {
			case 0:
				moveDivTo(this.ctrl.div, newPos, getDivTop(this.ctrl.div));
				break;
			case 1:
				moveDivTo(this.ctrl.div, getDivTop(this.ctrl.div), newPos);
				break;
		}
	}

	this.updateValueField = function(val) {
		if (this._valueFieldObj) {
			this._valueFieldObj.value = val;
		}
	}

	this.updateValueText = function(val) {
		if (this._valueTextObj) {
			this._valueTextObj.innerHTML = val;
		}
	}
	

	this.arrowOnClick = function() {
	}

	this.onChange = function(val) {
		this.setValue(val);
	}

	this.updateInputBox = function(val) {
		this.setValue(val);
	}

	this.textboxEdit = function(editMode) {
		if (this._disabled) return;
		if (editMode) {
			if ('undefined' != typeof(this._valueFieldObj)) {
				this._valueTextObj.style.display = 'none';
				this._valueFieldObj.style.display = 'block';
				bsFormFieldSetFocusAndSelect(this._valueFieldObj, false);
			}
		}
		else
		{
			if ('undefined' != typeof(this._valueTextObj)) {
				this._valueFieldObj.style.display = 'none';
				this._valueTextObj.style.display  = 'block';
			}
		}
	}

	this.slideMove = function(ctrl, client) {
		ctrl.sliderObj.onChangeBySlide(ctrl);
	}
	

	this.slideStart = function(ctrl,client) {
		ctrl.sliderObj._posEventSlideStartX = ctrl.startX;
		ctrl.sliderObj._posEventSlideStartY = ctrl.startY;
		ctrl.sliderObj._posObjSlideStartX = ctrl.sliderObj._handleObj.style.left;
		ctrl.sliderObj._posObjSlideStartY = ctrl.sliderObj._handleObj.style.top;
		var pos = ctrl.sliderObj.getSliderPos();
		ctrl.sliderObj.setValue(pos);
		if ('undefined' != typeof(ctrl.sliderObj.slideStartCB)) {
			ctrl.sliderObj.slideStartCB(ctrl.sliderObj, ctrl.sliderObj.getValue(), pos);
		}
	}
	

	this.slideEnd = function(ctrl,client){
		var pos = ctrl.sliderObj.getSliderPos();
		if ('undefined' != typeof(ctrl.sliderObj.slideEndCB)) {
			ctrl.sliderObj.slideEndCB(ctrl.sliderObj, ctrl.sliderObj.getValue(), pos);
		}
		return;
	}
	this._constructor(theFieldnamePrefix);
}

function fieldchanged(SliderObj,NewVal)
{
	if (NewVal >= SliderObj.minVal&&NewVal<=SliderObj.maxVal) {
		SliderObj._currentRelSliderPosX = SliderObj._posSlideStart;
		var hundertPercent = SliderObj.maxVal - SliderObj.minVal;
		var myPercent = (NewVal-SliderObj.minVal) * 100 / hundertPercent;
		SliderObj._currentRelSliderPosX += (myPercent * SliderObj._slideWidth / 100);
		SliderObj._updateColorbar(SliderObj._currentRelSliderPosX);
		SliderObj._handleObj.style.left = SliderObj._currentRelSliderPosX;
	}
}

function bsSliderChange(sliderObj, val, newPos){
	sliderObj.attachedfield.value = val;
}
