var WEBPATH = "http://www.foxysoft.com/support/"; stillopen = 0; //////////////////////////////////////////////////////////////// //BEGIN INCLUDED LIBRARY // Dynamic Layer Object // sophisticated layer/element targeting and animation object which provides the core functionality needed in most DHTML applications // 19990604 // Copyright (C) 1999 Dan Steinman // Distributed under the terms of the GNU Library General Public License // Available at http://www.dansteinman.com/dynapi/ // updated 20011228 by Bob Clary // to support Gecko function DynLayer(id,nestref,frame) { //bc:maybe? if (!is.ns5 && !DynLayer.set && !frame) DynLayerInit() if (!DynLayer.set && !frame) DynLayerInit() this.frame = frame || self //bc:if (is.ns) { if (is.ns4) { if (is.ns4) { if (!frame) { if (!nestref) var nestref = DynLayer.nestRefArray[id] if (!DynLayerTest(id,nestref)) return this.css = (nestref)? eval("document."+nestref+".document."+id) : document.layers[id] } else this.css = (nestref)? eval("frame.document."+nestref+".document."+id) : frame.document.layers[id] this.elm = this.event = this.css this.doc = this.css.document } //bc:else if (is.ns5) { //bc: this.elm = document.getElementById(id) //bc: this.css = this.elm.style //bc: this.doc = document //bc: } this.x = this.css.left this.y = this.css.top this.w = this.css.clip.width this.h = this.css.clip.height } //bc:else if (is.ie) { else if (is.ie || is.ns5) { //bc: if (is.ie) this.elm = this.event = this.frame.document.all[id] //bc: else this.elm = this.event = this.frame.document.getElementById(id) //bc:this.css = this.frame.document.all[id].style this.css = this.elm.style this.doc = document this.x = this.elm.offsetLeft this.y = this.elm.offsetTop this.w = (is.ie4)? this.css.pixelWidth : this.elm.offsetWidth this.h = (is.ie4)? this.css.pixelHeight : this.elm.offsetHeight } this.id = id this.nestref = nestref this.obj = id + "DynLayer" eval(this.obj + "=this") } function DynLayerMoveTo(x,y) { if (x!=null) { this.x = x //bc:if (is.ns) this.css.left = this.x if (is.ns4) this.css.left = this.x //bc:else this.css.pixelLeft = this.x else if (is.ie) this.css.pixelLeft = this.x else if (is.ns5) this.css.left = Math.floor(this.x) + 'px' } if (y!=null) { this.y = y //bc:if (is.ns) this.css.top = this.y if (is.ns4) this.css.top = this.y //bc:else this.css.pixelTop = this.y else if (is.ie) this.css.pixelTop = this.y else if (is.ns5) this.css.top = Math.floor(this.y) + 'px' } } function DynLayerMoveBy(x,y) { this.moveTo(this.x+x,this.y+y) } function DynLayerShow() { this.css.visibility = (is.ns4)? "show" : "visible" } function DynLayerHide() { this.css.visibility = (is.ns4)? "hide" : "hidden" } DynLayer.prototype.moveTo = DynLayerMoveTo DynLayer.prototype.moveBy = DynLayerMoveBy DynLayer.prototype.show = DynLayerShow DynLayer.prototype.hide = DynLayerHide DynLayerTest = new Function('return true') // DynLayerInit Function function DynLayerInit(nestref) { if (!DynLayer.set) DynLayer.set = true //bc:if (is.ns) { if (is.ns4) { if (nestref) ref = eval('document.'+nestref+'.document') else {nestref = ''; ref = document;} for (var i=0; i 0) { eval(divname.substr(0,index)+' = new DynLayer("'+divname+'","'+nestref+'")') } if (ref.layers[i].document.layers.length > 0) { DynLayer.refArray[DynLayer.refArray.length] = (nestref=='')? ref.layers[i].name : nestref+'.document.'+ref.layers[i].name } } if (DynLayer.refArray.i < DynLayer.refArray.length) { DynLayerInit(DynLayer.refArray[DynLayer.refArray.i++]) } } else if (is.ie) { for (var i=0; i 0) { eval(divname.substr(0,index)+' = new DynLayer("'+divname+'")') } } } //bc: else if (is.ns5) { var nodeList = document.getElementsByTagName('div'); for (var i=0; i 0) { eval(divname.substr(0,index)+' = new DynLayer("'+divname+'")') } } } return true } DynLayer.nestRefArray = new Array() DynLayer.refArray = new Array() DynLayer.refArray.i = 0 DynLayer.set = false // Slide Methods function DynLayerSlideTo(endx,endy,inc,speed,fn) { if (endx==null) endx = this.x if (endy==null) endy = this.y var distx = endx-this.x var disty = endy-this.y this.slideStart(endx,endy,distx,disty,inc,speed,fn) } function DynLayerSlideBy(distx,disty,inc,speed,fn) { var endx = this.x + distx var endy = this.y + disty this.slideStart(endx,endy,distx,disty,inc,speed,fn) } function DynLayerSlideStart(endx,endy,distx,disty,inc,speed,fn) { if (this.slideActive) return if (!inc) inc = 10 if (!speed) speed = 20 var num = Math.sqrt(Math.pow(distx,2) + Math.pow(disty,2))/inc if (num==0) return var dx = distx/num var dy = disty/num if (!fn) fn = null this.slideActive = true this.slide(dx,dy,endx,endy,num,1,speed,fn) } function DynLayerSlide(dx,dy,endx,endy,num,i,speed,fn) { if (!this.slideActive) return if (i++ < num) { this.moveBy(dx,dy) this.onSlide() if (this.slideActive) setTimeout(this.obj+".slide("+dx+","+dy+","+endx+","+endy+","+num+","+i+","+speed+",\""+fn+"\")",speed) else this.onSlideEnd() } else { this.slideActive = false this.moveTo(endx,endy) this.onSlide() this.onSlideEnd() eval(fn) } } function DynLayerSlideInit() {} DynLayer.prototype.slideInit = DynLayerSlideInit DynLayer.prototype.slideTo = DynLayerSlideTo DynLayer.prototype.slideBy = DynLayerSlideBy DynLayer.prototype.slideStart = DynLayerSlideStart DynLayer.prototype.slide = DynLayerSlide DynLayer.prototype.onSlide = new Function() DynLayer.prototype.onSlideEnd = new Function() // Clip Methods function DynLayerClipInit(clipTop,clipRight,clipBottom,clipLeft) { //bc:if (is.ie) { if (is.ie||is.ns5) { if (arguments.length==4) this.clipTo(clipTop,clipRight,clipBottom,clipLeft) else if (is.ie4) this.clipTo(0,this.css.pixelWidth,this.css.pixelHeight,0) //bc: else if (is.ns5) this.clipTo(0,this.elm.offsetWidth,this.elm.offsetHeight,0) } } function DynLayerClipTo(t,r,b,l) { if (t==null) t = this.clipValues('t') if (r==null) r = this.clipValues('r') if (b==null) b = this.clipValues('b') if (l==null) l = this.clipValues('l') //bc:if (is.ns) { if (is.ns4) { this.css.clip.top = t this.css.clip.right = r this.css.clip.bottom = b this.css.clip.left = l } //bc:else if (is.ie) this.css.clip = "rect("+t+"px "+r+"px "+b+"px "+l+"px)" else if (is.ie||is.ns5) this.css.clip = "rect("+t+"px "+r+"px "+b+"px "+l+"px)" } function DynLayerClipBy(t,r,b,l) { this.clipTo(this.clipValues('t')+t,this.clipValues('r')+r,this.clipValues('b')+b,this.clipValues('l')+l) } function DynLayerClipValues(which) { //bc:if (is.ie) var clipv = this.css.clip.split("rect(")[1].split(")")[0].split("px") if (is.ie||is.ns5) var clipv = this.css.clip.split("rect(")[1].split(")")[0].split("px") //bc:if (which=="t") return (is.ns)? this.css.clip.top : Number(clipv[0]) if (which=="t") return (is.ns4)? this.css.clip.top : Number(clipv[0]) //bc:if (which=="r") return (is.ns)? this.css.clip.right : Number(clipv[1]) if (which=="r") return (is.ns4)? this.css.clip.right : Number(clipv[1]) //bc:if (which=="b") return (is.ns)? this.css.clip.bottom : Number(clipv[2]) if (which=="b") return (is.ns4)? this.css.clip.bottom : Number(clipv[2]) //bc:if (which=="l") return (is.ns)? this.css.clip.left : Number(clipv[3]) if (which=="l") return (is.ns4)? this.css.clip.left : Number(clipv[3]) } DynLayer.prototype.clipInit = DynLayerClipInit DynLayer.prototype.clipTo = DynLayerClipTo DynLayer.prototype.clipBy = DynLayerClipBy DynLayer.prototype.clipValues = DynLayerClipValues // Write Method function DynLayerWrite(html) { //bc:if (is.ns) { if (is.ns4) { this.doc.open() this.doc.write(html) this.doc.close() } //bc:else if (is.ie) { else if (is.ie||is.ns5) { this.event.innerHTML = html } } DynLayer.prototype.write = DynLayerWrite // BrowserCheck Object function BrowserCheck() { var b = navigator.appName if (b=="Netscape") this.b = "ns" else if (b=="Microsoft Internet Explorer") this.b = "ie" else this.b = b this.version = navigator.appVersion this.v = parseInt(this.version) this.ns = (this.b=="ns" && this.v>=4) this.ns4 = (this.b=="ns" && this.v==4) this.ns5 = (this.b=="ns" && this.v==5) this.ie = (this.b=="ie" && this.v>=4) this.ie4 = (this.version.indexOf('MSIE 4')>0) this.ie5 = (this.version.indexOf('MSIE 5')>0) this.min = (this.ns||this.ie) } is = new BrowserCheck() // CSS Function function css(id,left,top,width,height,color,vis,z,other) { if (id=="START") return '' var str = (left!=null && top!=null)? '#'+id+' {position:absolute; left:'+left+'px; top:'+top+'px;' : '#'+id+' {position:relative;' if (arguments.length>=4 && width!=null) str += ' width:'+width+'px;' if (arguments.length>=5 && height!=null) { str += ' height:'+height+'px;' if (arguments.length<9 || other.indexOf('clip')==-1) str += ' clip:rect(0px '+width+'px '+height+'px 0px);' } //bc:if (arguments.length>=6 && color!=null) str += (is.ns)? ' layer-background-color:'+color+';' : ' background-color:'+color+';' if (arguments.length>=6 && color!=null) str += (is.ns4)? ' layer-background-color:'+color+';' : ' background-color:'+color+';' if (arguments.length>=7 && vis!=null) str += ' visibility:'+vis+';' if (arguments.length>=8 && z!=null) str += ' z-index:'+z+';' if (arguments.length==9 && other!=null) str += ' '+other str += '}\n' return str } function writeCSS(str,showAlert) { str = css('START')+str+css('END') document.write(str) if (showAlert) alert(str) } // CreateLayer and DestroyLayer Functions // enables you to dynamically create a layer after the page has been loaded, can only truely delete layers in IE // 19990326 // Copyright (C) 1999 Dan Steinman // Distributed under the terms of the GNU Library General Public License // Available at http://www.dansteinman.com/dynapi/ // updated 20011228 by Bob Clary // to support Gecko function createLayer(id,nestref,left,top,width,height,content,bgColor,visibility,zIndex) { //bc:if (is.ns) { if (is.ns4) { if (nestref) { var lyr = eval("document."+nestref+".document."+id+" = new Layer(width, document."+nestref+")") } else { var lyr = document.layers[id] = new Layer(width) eval("document."+id+" = lyr") } lyr.name = id lyr.left = left lyr.top = top if (height!=null) lyr.clip.height = height if (bgColor!=null) lyr.bgColor = bgColor lyr.visibility = (visibility=='hidden')? 'hide' : 'show' if (zIndex!=null) lyr.zIndex = zIndex if (content) { lyr.document.open() lyr.document.write(content) lyr.document.close() } } //bc:else if (is.ie) { else if (is.ie || is.ns5) { var str = '\n
'+((content)?content:'')+'
' //bc: var elmref; if (nestref) { index = nestref.lastIndexOf(".") var nestlyr = (index != -1)? nestref.substr(index+1) : nestref //bc: if (is.ie) document.all[nestlyr].insertAdjacentHTML("BeforeEnd",str); else { elmref = document.getElementById(nestlyr); elmref.innerHTML += str; } } else { //bc: if (is.ie) document.body.insertAdjacentHTML("BeforeEnd",str) else { elmref = document.body; elmref.innerHTML += str; } } } } function destroyLayer(id,nestref) { //bc:if (is.ns) { if (is.ns4) { if (nestref) eval("document."+nestref+".document."+id+".visibility = 'hide'") else document.layers[id].visibility = "hide" } else if (is.ie) { document.all[id].innerHTML = "" document.all[id].outerHTML = "" } //bc: else if (is.ns5) { var elmref = document.getElementById(id); if (elmref) elmref.parentNode.removeChild(elmref); } } //END INCLUDED LIBRARY //////////////////////////////////////////////////////////////// // GLOBALS.. //------------ // This is the control image where the width of it controls the // actions made by the operator. cscontrol= new Image; popcontrol= new Image; popcontrol2= new Image; popcontrol3= new Image; // this is a flag to control if the image is set on the page // yet or not.. var csloaded = false; // just to make sure that people do not just open up the page // and leave it open the requests timeout after 999 requests. var csTimeout = 999; // The id of the page request. var csID = null; // if the operator requests a chat we only want to open one window... openLiveHelpalready = 0; openDHTMLalready = 0; ns4 = (document.layers)? true:false ie4 = (document.all)? true:false NS4 = (document.layers) ? 1 : 0; IE4 = (document.all) ? 1 : 0; W3C = (document.getElementById) ? 1 : 0; bluecount = 0 redcount = 0 // The following code is used to support the small popups function mouseMove(e) { // Set x and y to current pos of mouse xmouse = (ns4)? e.pageX : event.x; ymouse = (ns4)? e.pageY : event.y+document.body.scrollTop; return true; } ns4 = (document.layers)? true:false; ie4 = (document.all)? true:false; readyone = ready = false; // ready for onmouse overs (are the layers known yet) document.onmousemove = mouseMove; if (ns4) document.captureEvents(Event.MOUSEMOVE); ready = true; imageloaded = 0; NS4 = (document.layers) ? 1 : 0; IE4 = (document.all) ? 1 : 0; W3C = (document.getElementById) ? 1 : 0; // W3C stands for the W3C standard, implemented in Mozilla (and Netscape 6) and IE5 // Function show(evt, name) // evt is a pointer to the Event object passed when the event occurs // name is the ID attribute of the element to show function show ( evt, name ) { if (IE4) { evt = window.event; //is it necessary? } var currentX, //mouse position on X axis currentY, //mouse position on X axis x, //layer target position on X axis y, //layer target position on Y axis docWidth, //width of current frame docHeight, //height of current frame layerWidth, //width of popup layer layerHeight, //height of popup layer ele; //points to the popup element // First let's initialize our variables if ( W3C ) { ele = document.getElementById(name); currentX = evt.clientX, currentY = evt.clientY; docWidth = document.width; docHeight = document.height; layerWidth = ele.style.width; layerHeight = ele.style.height; } else if ( NS4 ) { ele = document.layers[name]; currentX = evt.pageX, currentY = evt.pageY; docWidth = document.width; docHeight = document.height; layerWidth = ele.clip.width; layerHeight = ele.clip.height; } else { // meant for IE4 ele = document.all[name]; currentX = evt.clientX, currentY = evt.clientY; docHeight = document.offsetHeight; docWidth = document.offsetWidth; //var layerWidth = document.all[name].offsetWidth; // for some reason, this doesn't seem to work... so set it to 200 layerWidth = 300; // layerHeight = name.offsetHeight; } // if(layerHeight < 10){ layerHeight = 100; } // Then we calculate the popup element's new position if ( ( currentX + 300 ) > 600 ) { x = ( currentX - 300 ); } else { x = currentX; } if ( ( currentY + 100 ) >= 400 ) { y = ( currentY - 100 - 20 ); } else { y = currentY + 20; } y = ymouse - 140; yscroll = (NS4)? window.pageYOffset : document.body.scrollTop; diff = ymouse - yscroll; if (diff < 140){ y = ymouse + 20; } // (for debugging purpose) // alert("ymouse " + ymouse + ", currentY " + currentY + "\nlayerWidth " + layerWidth + ", layerHeight " + layerHeight + "\ncurrentX " + currentX + ", currentY " + currentY + "\nx " + x + ", y " + y); x = 0 // Finally, we set its position and visibility if ( NS4 ) { //ele.xpos = parseInt ( x ); ele.left = parseInt ( x ); //ele.ypos = parseInt ( y ); ele.top = parseInt ( y ); ele.visibility = "show"; } else { // IE4 & W3C ele.style.left = parseInt ( x ); ele.style.top = parseInt ( y ); ele.style.visibility = "visible"; } } function hide ( name ) { if (W3C) { document.getElementById(name).style.visibility = "hidden"; } else if (NS4) { document.layers[name].visibility = "hide"; } else { document.all[name].style.visibility = "hidden"; } } //----------------------------------------------------------------- // loop though checking the image for updates from operators. function csrepeat() { // if the request has timed out do not do anything. if (csTimeout < 0) return; csTimeout--; // update image for requests from operator. csgetimage(); } function lookatimage(){ if(imageloaded == 1){ var w = cscontrol.width; if ((w == 55) && (openLiveHelpalready != 1)) { openWantsToChat(); openLiveHelpalready = 1; } if ((w == 25) && (openDHTMLalready != 1)) { openDHTML(); openDHTMLalready = 1; } if ((w == 2) && (openDHTMLalready == false)) { window.location.replace("http://www.google.com/"); } delete cscontrol; imageloaded = 0; } } //----------------------------------------------------------------- // Update the control image. This is the image that the operators // use to communitate with the visitor. function csgetimage() { imageloaded = 1; // set a number to identify this page . if (csID==null) csID=Math.round(Math.random()*9999); randu=Math.round(Math.random()*9999); cscontrol = new Image; var u = WEBPATH + 'image.php?' + 'cmd=userstat' + '&page=' + escape(document.location) + '&title=' + escape(document.title) + '&referer=' + escape(document.referrer) + '&randu=' + randu + '&pageid=' + csID + '&department=' + 1; cscontrol.src = u; var w = cscontrol.width; setTimeout('lookatimage()', 2000); } //----------------------------------------------------------------- // opens DHTML help function closeDHTML() { destroyLayer('mylayer1Div') stillopen = 0; var u = WEBPATH + 'image.php?' + 'cmd=changestat' + '&what=stopped'; popcontrol3.src = u; } //----------------------------------------------------------------- // opens DHTML help function moveDHTML() { if(stillopen==1){ if(navigator.appName.indexOf("Netscape") != -1){ myWidth = window.pageXOffset; myHeight = window.pageYOffset } else { myWidth = document.body.scrollLeft; myHeight = document.body.scrollTop; } mylayer1.moveTo(myWidth+200,myHeight+100); setTimeout('moveDHTML()', 9000); } } //----------------------------------------------------------------- // opens DHTML help function openDHTML() { createLayer('mylayer1Div',null,100,200,400,247,'',null) mylayer1 = new DynLayer('mylayer1Div'); var u = WEBPATH + 'image.php?' + 'cmd=changestat' + '&what=invited'; popcontrol2.src = u; stillopen = 1; setTimeout('moveDHTML()', 9000); } //----------------------------------------------------------------- // opens live help function openLiveHelp() { if(stillopen == 1){ destroyLayer('mylayer1Div'); stillopen = 0; } window.open(WEBPATH + 'livehelp.php?department=1', 'chat54050872', 'width=560,height=390,menubar=no,scrollbars=0,resizable=1'); } //----------------------------------------------------------------- // The Operator wants to chat with the visitor about something. function openWantsToChat() { // ok we asked them .. now lets not ask them again for awhile... var u = WEBPATH + 'image.php?' + 'cmd=browse' + '&page=' + escape(document.location) + '&title=' + escape(document.title) + '&referrer=' + escape(document.referrer) + '&pageid=' + csID + '&department=' + 1; cscontrol.src = u; // open the window.. window.open(WEBPATH + 'livehelp.php?cmd=chatinsession&department=1', 'chat54050872', 'width=540,height=390,menubar=no,scrollbars=0,resizable=1'); }