function fly(){ this.flyDelay = 2; this.divFactor = 30; this.moveIndex = 0; this.startFly = startFly; this.moveObj = moveObj; this.moveX = moveX; this.moveY = moveY; this.waiting = waiting; this.flyStopFn = new Array(); this.flyX = new Array(); this.flyY = new Array(); this.flyTime = new Array(); this.flyId = ''; this.stopId = 'cart'; this.dummyId = ''; this.dummyref = 'flydummy'; this.waitAxis = 'x'; // x | y this.axisFactor = 300; this.currency = '£'; } function findPosX(obj) { var curleft = 0; if (obj.offsetParent) { while (obj.offsetParent) { curleft += obj.offsetLeft obj = obj.offsetParent; } } else if (obj.x) { curleft += obj.x; } return curleft; } function findPosY(obj) { var curtop = 0; if (obj.offsetParent) { while (obj.offsetParent) { curtop += obj.offsetTop obj = obj.offsetParent; } } else if (obj.x) { curtop += obj.x; } return curtop; } function startFly(){ var flyObj = document.getElementById(this.flyId); var refDummyObj = document.getElementById(this.dummyref); var flyDummyObj = document.getElementById(this.dummyId); if(flyDummyObj) { alert('Previous request is still in queue.'); return false; }else{ var flyDummyObj = document.createElement('DIV'); flyDummyObj.style.position ="absolute"; refDummyObj.parentNode.appendChild(flyDummyObj); flyDummyObj.id = this.dummyId; } flyDummyObj.style.zIndex = 1; flyDummyObj.innerHTML = flyObj.innerHTML; flyDummyObj.style.top = findPosY(flyObj); flyDummyObj.style.left = findPosX(flyObj); var flyStopObj = document.getElementById(this.stopId); var distX = findPosX(flyStopObj) - findPosX(flyObj); var distY = findPosY(flyStopObj) - findPosY(flyObj); var startX = findPosX(flyObj); var startY = findPosY(flyObj); var stopX = findPosX(flyStopObj); var stopY = findPosY(flyStopObj); var stepX = distX / this.divFactor; var stepY = distY / this.divFactor; this.flyX.length = 0; this.flyY.length = 0; for(var i=0; i<= this.divFactor; i++) { this.flyX[i] = Math.round(startX + (stepX*i)); this.flyY[i] = Math.round(startY + (stepY*i)); } this.moveIndex = 0; clearTimeout(this.flyTime[this.flyId]); var flyObject = this; this.flyTime[this.flyId] = setTimeout(function(evt) { moveObj(flyObject); }, this.flyDelay); } function moveObj(obj){ var flyingObj = document.getElementById(obj.dummyId); flyingObj.style.left = obj.flyX[obj.moveIndex] + 'px'; flyingObj.style.top = obj.flyY[obj.moveIndex] + 'px'; var flyStopObj = document.getElementById(obj.stopId); obj.moveIndex++; if(obj.moveIndex == obj.flyX.length) { if((findPosX(flyStopObj) != findPosX(flyingObj)) || (findPosY(flyStopObj) != findPosY(flyingObj))){ var flyObject = obj; var flyObj = document.getElementById(obj.dummyId); var distX = findPosX(flyStopObj) - findPosX(flyObj); var distY = findPosY(flyStopObj) - findPosY(flyObj); var startX = findPosX(flyObj); var startY = findPosY(flyObj); var stopX = findPosX(flyStopObj); var stopY = findPosY(flyStopObj); var stepX = distX / obj.divFactor; var stepY = distY / obj.divFactor; for(var i=0; i<= obj.divFactor; i++) { obj.flyX[i] = Math.round(startX + (stepX*i)); obj.flyY[i] = Math.round(startY + (stepY*i)); } clearTimeout(obj.flyTime[obj.flyId]); obj.flyTime[obj.flyId] = setTimeout(function(evt) { flyObject.moveIndex=0; moveObj(flyObject); }, obj.flyDelay); }else{ var flyObj = document.getElementById(obj.dummyId); var distX = (obj.waitAxis == 'x') ? obj.axisFactor : 0; var distY = (obj.waitAxis == 'y') ? obj.axisFactor : 0; var startX = 0; var startY = 0; var stopX = startX + distX; var stopY = startY + distY; var stepX = distX / obj.axisFactor; var stepY = distY / obj.axisFactor; for(var i=0; i<= obj.axisFactor; i++) { obj.flyX[i] = Math.round(startX + (stepX*i)); obj.flyY[i] = Math.round(startY + (stepY*i)); } obj.moveIndex=0; obj.waiting(); for(var i=0; i