

    //--------------------------------------------------------------------------------------------------------
    // cpu / browser speed testing
    //--------------------------------------------------------------------------------------------------------
    var cpubrowserbenchmark = function(count) {
      var date1 = new Date()
      var start = date1.getTime()
      for (var i=1; i<=count; i++)  {}
      date1 = new Date()
      var finish = date1.getTime()
      var speedmulti = Math.round(((finish-start)/1000)/ 0.084);
      // set minimum multip
      if (speedmulti < 1){
        speedmulti = 1;
      }
      return speedmulti;
    }
    
    
    // report add to cart to google
    var zrReportAddToCart = function(){
      var imgSrc = 'http://www.googleadservices.com/pagead/conversion/1051527892/?label=2kvaCIi6wgEQ1JW09QM&amp;guid=ON&amp;script=0';
      document.getElementById('googleReportAddToCart').src = imgSrc;
    }
    
    //--------------------------------------------------------------------------------------------------------
    // prevent right click - Disabled per request by Don 12-29
    //--------------------------------------------------------------------------------------------------------
    //var zaneray = document;
    //var isNS=(navigator.appName=="Netscape")? 1 : 0;
    //if(navigator.appName=="Netscape"){
    //  zaneray.captureEvents(Event.MOUSEDOWN||Event.MOUSEUP);
    //}
    //function nothing(){
    //  return false;
    //}
    //function nothingm(e){
    //  var myevent=(isNS)? e : event;
    //  var eventbutton=(isNS)? myevent.which : myevent.button;
    //  
    //  if((eventbutton==2)||(eventbutton==3)){
    //    return false;
    //  }
    //}
    //
    //    zaneray.oncontextmenu = nothing;
    //    zaneray.onmousedown = nothingm;
    //    zaneray.onmouseup = nothingm;
    //  
    
    var adjustlivezindex = function(){
      // do nothing
      //mydivs = document.getElementsByTagName('div');
      //setTimeout(function(){adjustlivezindexnow();}, 2000);
    }
    
    var adjustlivezindexnow = function(){
      mydivs[0].style.zIndex = '1900';
    }
    
    //--------------------------------------------------------------------------------------------------------
    // preloading
    //--------------------------------------------------------------------------------------------------------
    
    // small shadow background
    var shadowsmall = new Image();
    shadowsmall.src = '//images.competitivecyclist.com/images/global/shadow_background_color_chips.png';
    
    // medium shadow background
    var shadowmedium = new Image();
    shadowmedium.src = '//images.competitivecyclist.com/images/global/shadow_background_size_chart.png';
    
    // large shadow background
    var shadowlarge = new Image();
    shadowlarge.src = '//images.competitivecyclist.com/images/global/shadow_background_policy.png';
    
    // xlarge shadow background
    var shadowxlarge = new Image();
    shadowxlarge.src = '//images.competitivecyclist.com/images/global/shadow_background.png';
    
    var loadinganim = new Image();
    loadinganim.src = '//images.competitivecyclist.com/images/global/loading.gif';
    
    function loadedimage(){
      alert('loaded');
    }
    
    
    var pointerImgs = new Array;
    var dragimageImgs = new Array;

    //--------------------------------------------------------------------------------------------------------
    // ZZoomDrag v. 0.2
    // Copyright 2008 by Zaneray Inc.
    // Written by: Flori Seeger
    //--------------------------------------------------------------------------------------------------------
    
    // globals
    var xratio = 0;
    var yratio = 0; 
    var xoff = 0;
    var yoff = 0;
    var totaloffsetleft = 0;
    var totaloffsettop = 0;
    
    var disablex = false;
    var disabley = false;
    
    var ZZoomDragInit = false;
    var imageshowing = 0;
    var dostrip = false;
    
    var pointerdone = false;
    var dragdone = false;
    var pointerimage = new Image;
    var dragimage = new Image;
    
    function pointerimgdone(){
      pointerdone = true;
    }
    
    function dragimgdone(){
      dragdone = true;
    }
    
    function reportImageLoadError(){
      //alert ('image error');
      //var pars = "PAGE=REPORT_BROKEN_IMAGE";
      //pars += "&pointerimage=" + pointerImgs[imageshowing];
      //pars += "&dragimage=" + dragimageImgs[imageshowing];
      //pars += "&r=" + Math.random();
      //var url = "/za/CCY";
      //var myAjax = new Ajax.Request( url, { method: 'post', parameters: pars, onComplete: reportedImageLoadError});
    }
    
    function reportedImageLoadError(){
      // do nothing
    }
    
    var firstrunzzd = true
    var ZZoomDrag = function(){
      // start preloading images, set flag
      if (firstrunzzd == true){
        firstrunzzd = false;
        
        if (pointerimage.complete == true){
          pointerimgdone;
        }
        pointerimage.onload = pointerimgdone;
        pointerimage.onerror = reportImageLoadError;
        pointerimage.src = pointerImgs[imageshowing];
        
        if (dragimage.complete == true){
          dragimgdone;
        }
        dragimage.onload = dragimgdone;
        dragimage.onerror = reportImageLoadError;
        dragimage.src = dragimageImgs[imageshowing];
        
        
      }
      
      if (pointerdone == true && dragdone == true){
        var pointerimgmargintop = (340 - pointerimage.height) / 2;
        clearTimeout(checkloading);
        
        $('pointerimgcontainer').innerHTML = '<img src="' + pointerimage.src + '" id="pointerimg" onmouseover="ZZoomDragUpdate(event);" style="cursor: crosshair" />';
        
        $('pointerimg').style.marginTop = pointerimgmargintop + 'px';
        $('bigbox').innerHTML = '<img src="' + dragimage.src + '" id="dragimage" style="position: absolute; cursor: move" onmousedown="ZZoom.init(event,this)">';
        
        zfade ($('pointerimg'), 0, 100, 500, true);
        zfade ($('dragimage'), 0, 100, 500, true);
        $('dragimage').style.margin = '0px';
        
        var smallx = $('pointerimg').offsetWidth;
        var smally = $('pointerimg').offsetHeight;
        var bigx = $('dragimage').offsetWidth;
        var bigy = $('dragimage').offsetHeight;
        var bigboxx = $('bigbox').offsetWidth;
        var bigboxy = $('bigbox').offsetHeight;
        
        // flag drag image < drag container
        // disable panning
        //builddebug (bigx +"/"+ bigboxx);
        if (bigx < bigboxx){
          disablex = true;
          $('dragimage').style.marginLeft = (bigboxx - bigx) / 2 + "px";
        }
        else {
          disablex = false;
        }
        if (bigy < bigboxy){
          disabley = true;
          //builddebug((bigboxy - bigy) / 2);
          $('dragimage').style.marginTop = (bigboxy - bigy) / 2 + "px";
        }
        else {
          disabley = false;
        }
        
        xratio = bigx / smallx;
        yratio = bigy / smally;
        xoff = bigboxx / 2;
        yoff = bigboxy / 2;
        totaloffsetleft = 0;
        totaloffsettop = 0;
        imageshowing = 0;
        
        pointerdone = false;
        dragdone = false;
        firstrunzzd = true;
        
        var ele = $('pointerimg');
        if (ele.offsetParent) {
          do {
            totaloffsetleft += ele.offsetLeft;
            totaloffsettop += ele.offsetTop;
          } 
          while (ele = ele.offsetParent);  
        }
        $('pointerimg').onmousemove = ZZoomDragUpdate;
      }
      else {
        var checkloading = setTimeout(function () { ZZoomDrag(); }, 500);
      }
    }
    
    var ZZoomDragUpdate = function(e) {
      getmouseposition(e);
    }
    
    var getmouseposition = function(e) {
      if (!e){
        var e = window.event;
      }
      if (e){ 
        if (e.pageX || e.pageY){
          mousexpos = e.pageX;
          mouseypos = e.pageY;
          algor = '[e.pageX]';
        }
        else { 
          if (e.clientX || e.clientY){
            mousexpos = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
            mouseypos = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
            algor = '[e.clientX]';
            if (e.pageX || e.pageY) algor += '[e.pageX]';
          }
        }
        mousexpos = mousexpos - totaloffsetleft - 4;
        mouseypos = mouseypos - totaloffsettop -4;
      }
      
      //builddebug(disablex +"/"+ disabley);
      
      if (disablex == false){
        if (Math.round(xoff + (mousexpos * xratio * -1)) <= 0 && Math.round(xoff * -1 + mousexpos * xratio * -1) >= $('dragimage').offsetWidth * -1){
          $('dragimage').style.left = Math.round(xoff + (mousexpos * xratio * -1)) + 'px';
        }
        
        if (Math.round(xoff + (mousexpos * xratio * -1)) > 0){
          $('dragimage').style.left = '0px';             
        }
        
        if(Math.round(xoff * -1 + mousexpos * xratio * -1) < $('dragimage').offsetWidth * -1){
          $('dragimage').style.left = ($('dragimage').offsetWidth - xoff * 2) * -1 + 'px';
        }
      }
      
      if (disabley == false){
        if (Math.round(yoff + (mouseypos * yratio * -1)) <= 0&& Math.round(yoff * -1 + mouseypos * yratio * -1) >= $('dragimage').offsetHeight * -1){
          $('dragimage').style.top = Math.round(yoff + (mouseypos * yratio * -1)) + 'px';
        }
        
        if (Math.round(yoff + (mouseypos * yratio * -1)) > 0){
          $('dragimage').style.top = '0px';             
        }
        
        if(Math.round(yoff * -1 + mouseypos * yratio * -1) < $('dragimage').offsetHeight * -1){
          $('dragimage').style.top = ($('dragimage').offsetHeight - yoff * 2) * -1 + 'px';
        }
      }
    }
    
    var reinitpointerimg = function(){
      if ($('pointerimg')){
        totaloffsetleft = 0;
        totaloffsettop = 0;
        var ele = $('pointerimg');
        if (ele.offsetParent) {
          do {
            totaloffsetleft += ele.offsetLeft;
            totaloffsettop += ele.offsetTop;
          } 
          while (ele = ele.offsetParent);  
        }
      }
    }
    
    var ZZoomDragNextColor = function (imagetoshow){
      if (firstrunzzd == true){
        $('pointerimg').src = '//images.competitivecyclist.com/images/global/none.gif';
        $('dragimage').src = '//images.competitivecyclist.com/images/global/loading.gif';
        $('dragimage').style.left = '0px';
        $('dragimage').style.top = '0px';
        $('dragimage').style.marginLeft = '168px';
        $('dragimage').style.marginTop = '170px';
        imageshowing = imagetoshow;
        ZZoomDrag();
      }
    }

    ZZoom = {
      // init ZZoom 
      init: function(e, object){  
        document.onmousedown = ZZoom.fixff;
        document.onmousemove = ZZoom.dragupdate;
        document.onmouseup = ZZoom.dropupdate;
        // namespace var to carry object
        myobject = object;
        // calculate mouse pointer over drag object offset
        offsetx = ZZoom.coordinates(e).x - ZZoom.dragobjectoffset().xdragoffset;
        offsety = ZZoom.coordinates(e).y - ZZoom.dragobjectoffset().ydragoffset;
        // calculate drag area
        xmin = myobject.parentNode.offsetWidth - myobject.offsetWidth - 3;
        ymin = myobject.parentNode.offsetHeight - myobject.offsetHeight - 3;
      },
      
      // return mouse pointer x y position
      coordinates: function(e){
        if (!e){
          var e = window.event;
        }
          
        if (e){ 
          if (e.pageX || e.pageY){
            return {x: e.pageX, y: e.pageY};
          }
          else { 
            if (e.clientX || e.clientY){
              return {
                x: e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft,
                y: e.clientY + document.body.scrollTop + document.documentElement.scrollTop};
            }
          }
        }
      },
      
      // get position of drag object
      dragobjectoffset: function(){
        return {
          xdragoffset: myobject.offsetLeft,
          ydragoffset: myobject.offsetTop
        };
      },
      
      // move drag object
      dragupdate: function(e){
        xcurrent = ZZoom.coordinates(e).x - offsetx;
        ycurrent = ZZoom.coordinates(e).y - offsety;
        
        if (xcurrent < 1 && xcurrent > xmin){
          myobject.style.left = xcurrent + "px";
        }
        if (ycurrent < 1 && ycurrent > ymin){
          myobject.style.top = ycurrent + "px";
        }
        return false;
      },
      
      // drop drag object
      dropupdate: function(){
        document.onmousemove = null;
      },
      
      // prevent image dragging in FF
      fixff: function(){
        return false;
      }
  
    }
    
    
    //--------------------------------------------------------------------------------------------------------
    // EZ-XY Scroll v. 1.5
    // Copyright 2008 by Zaneray Inc.
    // Written by: Flori Seeger
    //--------------------------------------------------------------------------------------------------------
    var scrolldone = true;
    var scrollstepy = 0;
    var scrollstepx = 0;
    var scrollmaxx;
    var scrollmaxy;
    var easearrayy= new Array();
    easearrayy=[4,16,32,64,128,130,100,64,64,32,16,16,8,7,4,2,2,2,2,2,1,1,1,1,1];
    
    var easearrayx= new Array();
    easearrayx=[4,16,32,64,128,130,100,64,64,32,16,16,8,7,4,2,2,2,2,2,1,1,1,1,1];
    
    function easyscroll(direction,user,cnum,vh){
      
      var allowscrolly = false;
      var allowscrollx = false;
      
      if (user == true && scrolldone == true || user == false){
        var execute = true;
      }
      if (execute == true){
        
        var currenty= parseFloat($('sc' + cnum).offsetTop);
        var currentx = parseFloat($('sc' + cnum).offsetLeft);
  
        if (direction == 'up' || direction == 'left'){
          if(eval('current'+ vh + '* -1') + eval('easearray' + vh)[eval('scrollstep' + vh)] < eval('scrollmax' + vh)){
            eval('current' + vh + '-=' + eval('easearray' + vh)[eval('scrollstep' + vh)]);
            eval('allowscroll' + vh + '= true');
          }
          else {
            if (vh == 'x'){
              eval ('current' + vh + '= scrollmax' + vh + '* -1');
              $('sc' + cnum).style.left = scrollmaxx * -1 + 'px';
            }
            else {
              eval ('current' + vh + '= scrollmax' + vh + '* -1');
              $('sc' + cnum).style.top = scrollmaxy * -1 + 'px';
            }
            eval('scrollstep' + vh + '= 0');
            scrolldone = true;
          }
        }
        if (direction == 'down' || direction == 'right'){
          if(eval('current' + vh + '* -1') - eval('easearray' + vh)[eval('scrollstep' + vh)] > 0){
            eval('current' + vh + '+=' + eval('easearray' + vh)[eval('scrollstep' + vh)]);
            eval ('allowscroll' + vh + '= true');
          }
          else {
            if (vh == 'x'){
              eval ('current' + vh + '= 0');
              $('sc' + cnum).style.left = '0px';
            }
            else {
              eval ('current' + vh + '= 0');
              $('sc' + cnum).style.top = '0px';
            }
            eval('scrollstep' + vh + '= 0');
            scrolldone = true;
          }
        }
        
        // ------------------------------------------
        // show hide arrow elements
        // ------------------------------------------
        
        // downarrow
        if (currenty == 0){
          $('downarrow' + cnum).style.display = 'none';
        }
        else {
          $('downarrow' + cnum).style.display = 'block';
        }
        
        // uparrow
        if ((currenty * -1) >= scrollmaxy){
          $('uparrow' + cnum).style.display = 'none';
        }
        else {
          $('uparrow' + cnum).style.display = 'block';
        }
        
        // right arrow
        if (currentx == 0){
          $('rightarrow' + cnum).style.display = 'none';
          //$('scs' + cnum).style.marginLeft = '0px';
        }
        else {
          $('rightarrow' + cnum).style.display = 'block';
          //$('scs' + cnum).style.marginLeft = '30px';
        }
        // left arrow
        if ((currentx * -1) == scrollmaxx){
          $('leftarrow' + cnum).style.display = 'none';
        }
        else {
          $('leftarrow' + cnum).style.display = 'block';
        }
        
        if (eval('allowscroll' + vh) == true){
          if (eval('scrollstep'+vh) < (eval('easearray'+vh).length - 1)){
            eval('scrollstep' + vh + '++');
            $('sc' + cnum).style.top = currenty + 'px';
            $('sc' + cnum).style.left = currentx + 'px';
            scrolldone = false;
            setTimeout(function () { easyscroll(direction,false,cnum,vh); }, 33);
          }
          else {
            eval('scrollstep' + vh + '= 0');
            scrolldone = true;
          }
        }
      }
    }
    
    //--------------------------------------------------------------------------------------------------------
    // EZ-XY Scroll Init
    //--------------------------------------------------------------------------------------------------------
    var scrolliniter = function(cnum){    
      if ($('sc' + cnum) && $('scs' + cnum)){
        var scsheight = $('scs' + cnum).offsetHeight;
        var scheight = $('sc' + cnum).offsetHeight;
        var scswidth = $('scs' + cnum).offsetWidth;
        var scwidth = $('sc' + cnum).offsetWidth;
        scrollmaxx = scwidth - scswidth;
        scrollmaxy = scheight - scsheight;
        if($('downarrow' + cnum) && $('uparrow' + cnum)){
          if (scrollmaxy <= 0){
            $('downarrow' + cnum).style.display = 'none';
            $('uparrow' + cnum).style.display = 'none';
          }
          else {
            $('downarrow' + cnum).style.display = 'none';
          }
        }
        if($('leftarrow' + cnum) && $('rightarrow' + cnum)){
          if (scrollmaxx <= 0){          
            $('leftarrow' + cnum).style.display = 'none';
            $('rightarrow' + cnum).style.display = 'none';
          }
          else {
            $('rightarrow' + cnum).style.display = 'none';
          }
        }
      }
    }
    
    //--------------------------------------------------------------------------------------------------------
    // Z-Fade v. 1.01
    // Copyright 2008 by Zaneray Inc.
    // Written by: Flori Seeger
    //--------------------------------------------------------------------------------------------------------
    var zfade = function (element, start, end, duration, init, callback) {
      if (init == true){
        if (start < end){
          element.direction = 'in';
        }
        if (start > end){
          element.direction = 'out';
        }
        if (start == end){
          clearTimeout(element.fade);
          return;
        }
        element.speed = Math.round(100 / (duration / 33));
        element.timeout = Math.round(duration / 100);
        clearTimeout(element.fade);
      }
      element.opacity = start;
      element.fire = false;
      switch (element.direction){
        
        case 'in':
          if ((element.opacity + element.speed) >= 100){
            element.fire = false;
          }
          else {
            element.opacity = element.opacity + element.speed;
            element.fire = true;
          }
        break;
        
        case 'out':
          if (element.opacity - element.speed <= 0){
            element.fire = false;
          }
          else {
            element.opacity = element.opacity - element.speed;
            element.fire = true;
          }
        break;
        
      }
      element.zopacity = function (opacity,element) {     
        element.style.filter = "alpha(opacity=" + opacity + ")";
        element.style.opacity = (opacity / 100);
      }
      if (element.fire == true){
        element.zopacity (element.opacity, element);
        element.fade = setTimeout(function () { zfade(element, element.opacity, end, duration,false,callback);}, element.timeout);
      }
      else {
        element.style.filter = '';
        clearTimeout(element.fade);
      }
    }
    
    // stop event bubbling
    function stopbubble(e){
      if (!e) var e = window.event;
      e.cancelBubble = true;
      if (e.stopPropagation) e.stopPropagation();
    }
    
    //--------------------------------------------------------------------------------------------------------
    // Z-Zoom v. 1.50
    // Copyright 2008 by Zaneray Inc.
    // Written by: Flori Seeger
    //--------------------------------------------------------------------------------------------------------
    // todo: 
    // cleanup parent function
    //--------------------------------------------------------------------------------------------------------
    // params:
    // element = object 
    // xstart = x start size
    // ystart = y start size
    // xend = x end size
    // yend = y end size
    // ease = name of ease array
    // callbackfunction = function that called
    // who = additional element pass
    
    // ease arrays and speed calculations
    var speedmulti = cpubrowserbenchmark(1000000);
    
    // start nav menu ease
    var menuease = new Array;
    menuease = [200 * speedmulti];
    
    var menueaseapcom = new Array;
    menueaseapcom = [500 * speedmulti];
    
    var menueasebrand = new Array;
    menueasebrand = [120 * speedmulti];
    // end nav menu ease
    
    var demozoomease = new Array;
    demozoomease = [60 * speedmulti];
    
    var czoomease = new Array;
    czoomease = [60 * speedmulti];
  
    var sideslideease = new Array;
    sideslideease = [60  * speedmulti];
    
    var bikezoomease = new Array;
    bikezoomease = [eval(10 * speedmulti)];
    var isRunninginFrame;
    var loopspeed = 35; // function recall after 40ms = 25fps
    var currentelement;
    
    function checkForIFrame(){
      if (window.location != window.parent.location){
        // we are in a iframe
        return true;
      }
      else {
        // we are not in a iframe
        return false;
      }
    }
    
    var zzoom = function (element, xstart, ystart, xend, yend, ease, callbackfunction, delay) {
      
      if(checkForIFrame() == true){
        if (xend == 0){
          window.parent.document.getElementById('the_deal_container').style.display = 'block';
        }
        else {
          window.parent.document.getElementById('the_deal_container').style.display = 'none';
        }
      }
      if (delay != ''){
        element.delaytimer = setTimeout(function () { zzoom(element, xstart, ystart, xend, yend, ease, callbackfunction, ''); }, delay);
        return;
      }
      element.varsetup = false;
                                  
      element.zoom = function (element){
        
        if (element.varsetup == false){
          

          // element position
          element.xp = element.offsetLeft;
          element.yp = element.offsetTop;
          
          // check if element has border
          var version = navigator.userAgent;
          if (element.style.borderWidth.indexOf('1px') > -1){
            element.xyoffset = 2;
          }
          else {
            element.xyoffset = 0;
          }
          
          // element width / height
          element.xw = element.offsetWidth;
          element.yh = element.offsetHeight;
          
          // clear timer if running
          clearTimeout(element.zoomtimer);
          
          // setup end zoom size
          element.xe = xend; 
          element.ye = yend;
          
          // setup current height and width properties
          if (currentelement == element && element.zoomxdone == false || element.zoomydone == false){
            if (xstart < 0){
              element.xc = element.offsetWidth * -1;
            }
            else {
              element.xc = element.offsetWidth;
            }
            if (ystart < 0){
              element.yc = element.offsetHeight * -1;
            }
            else {
              element.yc = element.offsetHeight;
            }
          
          }
          else {
            element.xc = xstart;
            element.yc = ystart;
          }
          currentelement = element;
          
          // enable zoom functions
          element.zoomxdone = false;
          element.zoomydone = false;
          
          // run setup only once
          element.varsetup = true;
          
          // reset array counter
          element.loopcounter = 0;
          
          // get total zoom distances, convert neg to pos
          if (element.xe < 0){
            var xe = -element.xe;
          }
          else {
            var xe = element.xe;
          }
          if (element.xc < 0){
            var xc = -element.xc;
          }
          else {
            var xc = element.xc;
          }
          if (element.ye < 0){
            var ye = -element.ye;
          }
          else {
            var ye = element.ye;
          }
          if (element.yc < 0){
            var yc = -element.yc;
          }
          else {
            var yc = element.yc;
          }
          element.xt = xe - xc;
          element.yt = ye - yc;
          //set zoom aspect ratio
          element.ratio =  element.xt / element.yt;
          if (element.ratio < 0){
            element.ratio = -element.ratio;
          }
          
          // catch 0 ratio or ration set to infinity caused by devision by zero
          // and negative or invalid ratio
          if (element.ratio <= 0 || element.ratio == 'Infinity'){
            element.ratio = 1;
          }
          
          // x check if zoom-in or zoom-out
          if (element.xt != 0){
            if (element.xc > element.xe){
            element.xd = 'zoomoutx';
            }
            else {
              element.xd = 'zoominx';
            }
          }
          else {
            element.xd = 'noxzoom';
            element.zoomxdone = true;
          }
          
          // y check if zoom-in or zoom-out
          if (element.yt != 0){  
            if (element.yc > element.ye){
              element.yd = 'zoomouty';
            }
            else {
              element.yd = 'zoominy';
            }
          }
          else {
            element.yd = 'noyzoom';
            element.zoomydone = true;
          }
          
          // check if negative zoom direction
          if (element.xc < 0){
            element.xn = true;
            element.xc = element.xc * -1;
          }
          if (element.yc < 0){
            element.yn = true;
            element.yc = element.yc * -1;
          }

        }
  
        // ---------- X DIRECTION ----------
        // zoom x direction / switch for zoom in and zoom out
        if (element.zoomxdone == false){
          switch (element.xd){
            case 'zoominx':
              if (element.xn == true){
                
                element.xc = element.xc - eval(ease)[element.loopcounter] * element.ratio;
                
                if (element.xc * -1 < element.xe){
                  element.style.width = element.xc + "px";
                  element.style.left =  element.xp + element.xw - element.xc - element.xyoffset + "px";
                }
                
                if (-1 * element.xc + eval(ease)[element.loopcounter] * element.ratio >= element.xe){
                  element.style.width = -1 * element.xe + "px";
                  element.style.left = element.xp + element.xw - element.xe * -1 - element.xyoffset + "px";
                  element.zoomxdone = true;
                }
                
              }
              else {
                
                element.xc = element.xc + (eval(ease)[element.loopcounter] * element.ratio);
            
                if (element.xc < element.xe){
                  element.style.width = element.xc + "px";
                }
                
                if (element.xc + eval(ease)[element.loopcounter] * element.ratio >= element.xe){
                  element.style.width = element.xe + "px";
                  element.zoomxdone = true;
                }
                
              }
            break;
      
            case 'zoomoutx':
              
              if (element.xn == true){
                
                element.xc = element.xc + eval(ease)[element.loopcounter] * element.ratio;
              
                if (element.xc > element.xe){
                  element.style.width = element.xc + "px";
                  element.style.left = element.xp - element.xc + element.xw - element.xyoffset + "px";
                }
                
                if (-1 * element.xc - eval(ease)[element.loopcounter] * element.ratio <= element.xe){
                  element.style.width = -1 * element.xe + "px";
                  element.style.left = element.xp + element.xe + element.xw - element.xyoffset + "px";
                  element.zoomxdone = true;
                }
                
              }
              else {
                
                element.xc = element.xc - eval(ease)[element.loopcounter] * element.ratio;
                
                if (element.xc > element.xe){
                  element.style.width = element.xc + "px";
                }
                
                if (element.xc - eval(ease)[element.loopcounter] * element.ratio <= element.xe){
                  element.style.width = element.xe + "px";
                  element.zoomxdone = true;
                }
                
              }
            break;
          }
        }
        
        // ---------- Y DIRECTION ----------
        // zoom y direction / switch for zoom in and zoom out
        if (element.zoomydone == false){
          switch (element.yd){
            case 'zoominy':
              if (element.yn == true){
                
                element.yc = element.yc - eval(ease)[element.loopcounter];
                
                if ((element.yc * -1) < element.ye){
                  element.style.height = element.yc + "px";
                  element.style.top =  element.yp + element.yh - element.yc - element.xyoffset + "px";
                }
                
                if (-1 * (element.yc + eval(ease)[element.loopcounter]) >= element.ye){
                  element.style.height = -1 * element.ye + "px";
                  element.style.top = element.yp + element.yh - element.ye * -1 - element.xyoffset + "px";
                  element.zoomydone = true;
                }
                
              }
              else {
                
                element.yc = element.yc + eval(ease)[element.loopcounter];
              
                if (element.yc < element.ye){
                  element.style.height = element.yc + "px";
                }
                
                if (element.yc + eval(ease)[element.loopcounter] >= element.ye){
                  element.style.height = element.ye + "px";
                  element.zoomydone = true;
                }
                
              }
            break;
      
            case 'zoomouty':
              if (element.yn == true){
                
                element.yc = element.yc + eval(ease)[element.loopcounter];
                
                if (element.yc > element.ye){
                  element.style.height = element.yc + "px";
                  element.style.top = element.yp - element.yc + element.yh - element.xyoffset + "px";
                }
                
                if (-1 * element.yc - eval(ease)[element.loopcounter] <= element.ye){
                  element.style.height = -1 * element.ye + "px";
                  element.style.top = element.yp + element.ye + element.yh - element.xyoffset + "px";
                  element.zoomydone = true;
                }
                
              }
              else {
                
                element.yc = element.yc - eval(ease)[element.loopcounter];
              
                if (element.yc > element.ye){
                  element.style.height = element.yc + "px";
                }
                
                if (element.yc - eval(ease)[element.loopcounter] <= element.ye){
                  element.style.height = element.ye + "px";
                  element.zoomydone = true;
                }
                
              }
            break;
          }
        }
        
        // check on flags
        if (element.zoomxdone == false || element.zoomydone == false){
          if (eval(ease).length - 1 > element.loopcounter){
            element.loopcounter++;
          }
          element.zoomtimer = setTimeout(function () { element.zoom(element); }, loopspeed);
        }
        else {
          //-----------------------------------------------------------------------
          // use switch below ONLY if you need x/y specific end of function triggers
          //-----------------------------------------------------------------------
          //switch (element.xd){
          //  case 'zoominx':
          //  break;
          //  
          //  case 'zoomoutx':
          //  break;
          //}
          
          //switch (element.yd){
          //  case 'zoominy':  
          //  break;
          //  
          //  case 'zoomouty':
          //  break;
          //}
          
          // callbacks
          if (callbackfunction == 'ml'){
            try{
              who.mldone(element);
            }
            catch(err){}
          }
          if (callbackfunction == 'hideinfoslideclose'){
            hideinfoslideclose();
          }
          
          if (callbackfunction == 'hidepictureslideclose'){
            hidepictureslideclose();
          }
          
          if (callbackfunction == 'pictureslidedone'){
            pictureslidedone();
          }
          
          if (callbackfunction == 'hidepictureslideclosedone'){
            hidepictureslideclosedone();
          }
          
          if (callbackfunction == 'hideczoomclose'){
            hideczoomclose();
          }
          
          clearTimeout(element.zoomtimer);
          element.varsetup = false;
        }
      }
      element.zoom(element);
    }
  
    
    //--------------------------------------------------------------------------------------------------------
    // show / hide menu's
    //--------------------------------------------------------------------------------------------------------
    var browser=navigator.userAgent;
    var ml = function (e,who,menueaseexept,delay,type){
      if (ZRMobileDetectCommon.check() == true){ return false }
      // get even trigger (mouseover / mouseout)
      if (!e) var e = window.event;
      try{
        who.eventtype = e.type;
      }
      catch(err){
       // ignore, this is a ie bug
      } 

      if (delay && who.eventtype == 'mouseover') {
        var shopdelay = delay;
        delaytimer = window.setTimeout(function () { ml(e, who, menueaseexept); }, shopdelay);
        return;
      } 
      if (typeof delaytimer != 'undefined'){
        clearTimeout(delaytimer);
      }
      
      if (menueaseexept == undefined){
          menueaseexept = '';
      }
      
  
      // find element to work with
      who.menu = function(){
        for (i = 0; i < who.childNodes.length; i ++){
          if (who.childNodes[i].nodeName == 'UL' || who.childNodes[i].nodeName == 'DIV'){
            return (who.childNodes[i]);
            break;
          }  
        }
      }

      // create element specific info
      who.menu = who.menu();
      
      // check on safari and chrome and attach stopbubble() function to <li> elements
      if (browser.indexOf('Safari') > -1){
        for (li = 0; li < who.menu.childNodes.length; li ++){
          if (who.menu.childNodes[li].nodeName == 'LI'){
            //who.menu.childNodes[li].addEventListener('mouseout',function(e){stopbubble(e);},false);
            //who.menu.childNodes[li].addEventListener('mouseover',function(e){},false);
          }
        }
      }
      
      // handle menu visual action
      who.handler = function(objpass) {    
        if (who.eventtype == 'mouseover'){
          if (type == 'upper'){
            who.style.backgroundPosition = '50% -17px';
          }
          else {
            who.style.backgroundPosition = '50% -25px';
          }
          if (who.menu){
            who.menu.style.display = 'block';
            who.menu.style.height = '';
            who.menu.elementheight = who.menu.offsetHeight;
            //who.menu.style.height = '0px';
            //who.menu.style.overflow = 'hidden';
            //zfade (who.menu, 0, 100, 'future duration', true);
            //alert (who.menu.elementheight);
            if (getwindowsize() - 173 < who.menu.elementheight){
              who.menu.style.overflow = 'auto';
              try { 
                if(menueaseexept == 'apcom'){
                  who.menu.style.width = '309px';
                }
                who.menu.style.height = getwindowsize() - 203 + 'px';
              }
              catch(err){
                // nothing for now
              }
            }
            else {
              if(menueaseexept == 'apcom'){
                who.menu.style.width = '293px';
              }
            }
          }
        }
        if (who.eventtype == 'mouseout'){
          who.style.backgroundPosition = '50% 0px';
          if(menueaseexept == 'apcom'){
            if (getwindowsize() - 173 < who.menu.elementheight){
              who.menu.style.width = '309px';
            }
            else {
              who.menu.style.width = '293px';
            }
          }
          if (who.menu){
            storescrolltop = 0;
            who.menu.style.display = 'none'
          }
        }
      }
      
      // call handler
      who.handler(who.menu);
      
      // recall properties
      who.mldone = function (who) {
        who.style.height = '';
        if (getwindowsize() < who.offsetHeight){
          who.style.overflow = 'auto';
          who.style.height = getwindowsize() - 100 + 'px';
        }
        else {
          who.style.overflow = '';
          who.style.height = '';
        }
      }
      
    }
    
    
    // store current scroll position for safari and chrome
    var storescrolltop = 0;
    var getscrolltop = function(element){
      if (browser.indexOf('Safari') > -1){
        try {
          storescrolltop = element.scrollTop;
        }
        catch(e){}
      }
    }
    
    var setscrolltop = function (element) {
      if (browser.indexOf('Safari') > -1){
        try {
          element.scrollTop = storescrolltop;
        }
        catch(e){}
      }
    }
    
    //--------------------------------------------------------------------------------------------------------
    // build debug display and population
    //--------------------------------------------------------------------------------------------------------
    var builddebug = function(debugcontent){
      if (!$('debugcontainer')){
        var buildbody = document.getElementsByTagName('body').item(0);
        debugelement = document.createElement('div');
        debugelement.id = 'debugcontainer';
        buildbody.appendChild(debugelement);
      }
      $('debugcontainer').innerHTML = debugcontent;
    }
    
    //--------------------------------------------------------------------------------------------------------
    // image slider automatic sizing
    //--------------------------------------------------------------------------------------------------------
    var movieslide = function(src,width,height){
      $('zoomposition').style.display = 'block';
      $('zoomcontainer').style.border = '1px solid #000000';
      $('zoominnercontainer').innerHTML = '<div id="noFlash"> If you are seeing this message you either have javascript disabled or do not have a browser with flash installed or a recent enough version of flash installed. To get the latest flash go <a href="http://www.macromedia.com/go/getflashplayer">here</a>.</div>';
        
      var so = new SWFObject("/swf/movie.swf?video=" + src, "myMovie", width , height , "8", "#666666");
      so.addParam("wmode", "opaque");
      so.addVariable("auto", "false");
      so.addVariable("showLogo", "true");
      so.addParam("base", "/swf/");    
      so.write("zoominnercontainer");
      
      var imagesizex = width;
      var imagesizey = height + 37;
      closewindow = '<div id="slidezoomclose" style="top:' + (imagesizey - 35) + 'px" onclick="zzoom($(\'zoomcontainer\'),' + imagesizex + ',' + imagesizey + ',0,' + imagesizey +',\'sideslideease\',\'hidepictureslideclose\',\'\');"><img src="//images.competitivecyclist.com/images/global/close_window.gif"></div>';
      $('zoominnercontainer').innerHTML = $('zoominnercontainer').innerHTML + closewindow;
      
      var toppos = getyscrollpos();
      $('zoomposition').style.top = toppos + 'px';
      $('zoomcontainer').style.height = imagesizey + "px"; 
      zzoom($('zoomcontainer'),0,imagesizey,imagesizex,imagesizey,'sideslideease','','');
    }
    
    //--------------------------------------------------------------------------------------------------------
    // image slider automatic sizing
    //--------------------------------------------------------------------------------------------------------
    var slideimage = new Image();
    var pictureslide = function(src){
      slideimage.onload = getslideimagedims;
      slideimage.src = src;
    }
    
    var getslideimagedims = function(){
      $('zoomposition').style.display = 'block';
      $('zoominnercontainer').innerHTML = '<img id="sliderimage" style="filter:alpha(opacity=0); -moz-opacity:0.0; opacity:0.0;" src="' + slideimage.src +'">';
      var imagesizex = $('sliderimage').offsetWidth;
      var imagesizey = $('sliderimage').offsetHeight + 37;
      closewindow = '<div id="slidezoomclose" style="top:' + (imagesizey - 35) + 'px" onclick="hidepictureslideclose(' + imagesizex + ',' + imagesizey + ');"><img src="//images.competitivecyclist.com/images/global/close_window.gif"></div>';
      $('zoominnercontainer').innerHTML = $('zoominnercontainer').innerHTML + closewindow;
      
      var toppos = getyscrollpos();
      $('zoomposition').style.top = toppos + 'px';
      $('zoomcontainer').style.height = imagesizey + "px"; 
      zzoom($('zoomcontainer'),0,imagesizey,imagesizex,imagesizey,'sideslideease','pictureslidedone','');
    }
    
    var pictureslidedone = function(){
      zfade ($('sliderimage'), 0, 100, 500, true);
    }
    
    var hidepictureslideclose = function(imagesizex, imagesizey){
      $('zoominnercontainer').innerHTML = '';
      zzoom($('zoomcontainer'), imagesizex, imagesizey, 0, imagesizey,'sideslideease','hidepictureslideclosedone','');
    }
    
    var hidepictureslideclosedone = function(){
      $('zoomposition').style.display = "none";
      $('zoomcontainer').style.width = '0px';
    }
    
    
    //--------------------------------------------------------------------------------------------------------
    // show hide info slide
    //--------------------------------------------------------------------------------------------------------
    var buyaddtocartstorage = '';
    var closewindow;
    var opensize = '';
    var showinfoslide = function(loadpage, direction, fullpage, grabhtml, size, dostriper, fromcartslide, toWidth, toHeight, noDelay){

      $('zoominnercontainer').innerHTML = '';
      sizePassToComplete = '';
      
      var startx = 0;
      var starty = 520;
      var endx = 800;
      var endy = 520;
      
      if (size === 'policynewsize'){
        var startx = 0;
        var starty = 380;
        var endx = 800;
        var endy = 380;
      }
      
      if (size === 'aponewsize'){
        var startx = 0;
        var starty = 180;
        var endx = 550;
        var endy = 180;
      }
      
      if (size === 'instorepickupnewsize'){
        var startx = 0;
        var starty = 580;
        var endx = 850;
        var endy = 580;
      }
      
        if (size === 'benefitsnewsize'){
        var startx = 0;
        var starty = 190;
        var endx = 550;
        var endy = 190;
      }
      
      if (size === 'chips1newsize'){
        var startx = 0;
        var starty = 310;
        var endx = 510;
        var endy = 310;
      }
      
      if (size === 'chips2newsize'){
        var startx = 0;
        var starty = 520;
        var endx = 510;
        var endy = 520;
      }
      
      if (size === 'giftcardnewsize'){
        var startx = 0;
        var starty = 390;
        var endx = 510;
        var endy = 390;
      }
      
      if (size === 'chips'){
        var startx = 0;
        var starty = 520;
        var endx = 510;
        var endy = 520;
      }
      
      if (size === 'whyweneedthis'){
        var startx = 0;
        var starty = 280;
        var endx = 550;
        var endy = 280;
      }
      
      if (size === 'charts'){
        var startx = 0;
        var starty = 340;
        var endx = 800;
        var endy = 340;
        dostrip = true;
      }
      
      if (size === 'policy'){
        var startx = 0;
        var starty = 340;
        var endx = 550;
        var endy = 340;
      }
      
      if (size === 'shippingEstimate'){
        var startx = 0;
        var starty = 520;
        var endx = 800;
        var endy = 520;
      }
      
      
      if (size === 'videoslide'){
        var startx = 0;
        var starty = 477;
        var endx = 908;
        var endy = 477;
        sizePassToComplete = size;
      }
      
      if (size === 'cartslide'){
        var startx = 0;
        var starty = 340;
        var endx = 800;
        var endy = 340;
      }
      
      if (size === 'cartslideskudim'){
        var startx = 0;
        var starty = 340;
        var endx = 400;
        var endy = 340;
      }
      
      if (size === 'cartslidecarttoskudim'){
        var startx = 800;
        var starty = 340;
        var endx = 400;
        var endy = 340;
      }
      
      if (size === 'cartslideskudimtocart'){
        var startx = 400;
        var starty = 340;
        var endx = 800;
        var endy = 340;
      }

      if (size === 'promo'){
        var startx = 0;
        var starty = 180;
        var endx = 430;
        var endy = 180;
      }

      if (size === 'giftcard'){
        var startx = 0;
        var starty = 310;
        var endx = 550;
        var endy = 310;
      }
      
      if (size === 'checkoutlogin'){
        var startx = 0;
        var starty = 240;
        var endx = 300;
        var endy = 240;
      }
      
      if (direction == 'out'){
        if (document.getElementById('buyaddtocart') && buyaddtocartstorage != ''){
          document.getElementById('buyaddtocart').innerHTML = buyaddtocartstorage;
        }
      }
      
      if (dostriper == ''){
        dostrip = false;
      }
      else {
        dostrip = dostriper;
      }

      if (direction === 'in'){
        var toppos = getyscrollpos();
        $('zoomposition').style.display = 'block';
        $('zoomposition').style.top = toppos + 'px';
        
        $('zoomcontainer').style.height = endy + "px"; 
        if (fromcartslide == true){
          closewindow = '';
        }
        else {
          closewindow = '<div id="slidezoomclose" style="top:' + (endy - 35) + 'px" onclick="showinfoslide(\'\',\'out\',\'\',\'\',\''+size+'\');"><img src="//images.competitivecyclist.com/images/global/close_window.gif"></div>';
        }
        if (fullpage) {
          $('zoominnercontainer').innerHTML = '<iframe src="' + loadpage + '" scrolling="auto" style="border: none; background:#FFFFFF; z-index: 9999; width:' + endx + 'px; height:' + (endy - 36) + 'px; border: none;" allowtransparency="false" frameborder="0"></iframe>' + closewindow;
        }
        
        // if same size as before do not close sliding layer
        if (opensize != size){
          zzoom($('zoomcontainer'),startx,starty,endx,endy,'sideslideease','','');
        }
        opensize = size;
        // not needed for right now
        if (grabhtml){
          $('zoominnercontainer').innerHTML = $(grabhtml).innerHTML;
          siFRInit();
        }
        else if (fullpage == '' || fullpage == null){
          var pars = "PAGE=" + loadpage;
          if (size != null) {
            pars += "&SIZE=" + size;
          }
          pars += "&r=" + Math.random();
          var url = "/za/CCY";
          if (noDelay == 'true') {
            if (loadpage == 'CART_SLIDE_BLANK'){
              var myAjax = new Ajax.Request( url, { method: 'post', parameters: pars, onComplete: zrDoNothing});  
            } 
            else {
              var myAjax = new Ajax.Request( url, { method: 'post', parameters: pars, onComplete: pageloaded});
            }
          }
          else {
            setTimeout(function(){var myAjax = new Ajax.Request( url, { method: 'post', parameters: pars, onComplete: pageloaded});}, 600);  
          }
        }
      }
      else {
        zzoom($('zoomcontainer'),document.getElementById('zoomcontainer').offsetWidth,document.getElementById('zoomcontainer').offsetHeight,0,document.getElementById('zoomcontainer').offsetHeight,'sideslideease','hideinfoslideclose','');
        opensize = '';
      }
    }
    
    // show ajax response
    var pageloaded = function (request){
      
      var head = document.getElementsByTagName("head")[0];
      $('zoominnercontainer').innerHTML = request.responseText + closewindow;
      
      if (dostrip == true){
         stripe($('zoomcontainer'), '#fff', '#f5f5f5');
      }
      siFRInit();
      
      // delete existing javascript
      if ($('ajaxjavascript')){
        var elementtofind = document.getElementsByTagName('script');
        for (var e = 0; e < elementtofind.length; e++){
          if (elementtofind[e].id == 'ajaxjavascript'){
            head.removeChild(elementtofind[e]);
          }
        }
      }
      
      // add javascript loaded via ajax
      var ajaxScript = request.responseText;
      var firstIndex = ajaxScript.indexOf('<script id="ajaxJSinclude">');
      var lastIndex = ajaxScript.lastIndexOf('<\/script>');
      
      if (firstIndex == -1 && lastIndex == -1){
        ajaxScript = '';
      }
      else {
        ajaxScript = ajaxScript.substring(firstIndex + 28,lastIndex);
      }
      if (ajaxScript != ''){  
        var script = document.createElement('script');
        script.id = 'ajaxjavascript';
        script.type = 'text/javascript';
        script.text = ajaxScript;
        head.appendChild(script);
      }
      
      if (sizePassToComplete != ''){
        //setTimeout(function(){zrVideoSlideOpen();}, 1000);
      }
      
    }
    
    // reinit sIFR 
    var siFRInit = function(){
      sIFR.replace(gothambook, {
            selector: 'h2.sifr',
            css: [
              '.sIFR-root { font-size: 14px; font-weight: bold; color:#494949; }',
              '.gry { color: #929292; }',
              '.red { color: #CC0000; }'
            ],
            wmode: 'opaque'
      });
    }
    
    // hide slide after complete
    var hideinfoslideclose = function(){
      $('zoomposition').style.display = "none";
      $('zoomcontainer').style.width = '0px';
      $('zoomcontainer').style.height = '520px';
      $('zoominnercontainer').innerHTML = '';
    }
    
    // move slide on window scroll
    var movetoppos = function(){
      var toppos = getyscrollpos();
      if ($('zoomposition')){
        $('zoomposition').style.top = toppos + 'px';
      }
    }
    
    // get initial top position
    var getyscrollpos = function(){
      var yscroll = 0;
      yscroll = window.pageYOffset ||
                document.body.scrollTop ||
                document.documentElement.scrollTop;
      return yscroll + 29;                
    }
    
    
    //--------------------------------------------------------------------------------------------------------
    // show / hide bike zoom
    //--------------------------------------------------------------------------------------------------------
    var firstrun = true;
    var bikezoomopen = false;
    var showbikezoom = function(direction) {
      if (direction == 'in'){
        if (bikezoomopen == false){
          zzoom($('bikezoomcontainer'),877,302,877,489,bikezoomease,'','');  
          bikezoomopen = true;
        }
        //$('zoomicondiv').style.display = 'none';
        if (firstrun == false){
          switchimage('next');
        }
        firstrun = false;
      }
      if (direction == 'out' && bikezoomopen == true){
        zzoom($('bikezoomcontainer'),877,489,877,302,bikezoomease,'','');  
        //$('zoomicondiv').style.display = 'block';
        firstrun = true;
        bikezoomopen = false;
      }
    }
    
    var currentimage = 0;
    var switchimage = function(direction){
      // show next image
      if (direction == 'next'){
        if (currentimage + 1 == zoomimgarray.length){
          currentimage = 0;
        }
        else {
          currentimage ++;
        }
      }
      
      // show prev image
      if (direction == 'prev'){
        if (currentimage == 0){
          currentimage = (zoomimgarray.length - 1);
        }
        else {
          currentimage --;
        }
      }
      // call helper function
      zoomimgswitch();
    }
    var zfadeworking = false;
    var loadanimshowing = false;
    function zoomimgswitch(){
      if (eval("img" + currentimage).complete == true){
        clearTimeout(checkifloaded);
        loadanimshowing = false;
        if (zfadeworking == false){
          zfadeworking = true;
          zfade ($('zoomimage'), 100, 0, 300, true);
          $('zoomimage').style.paddingTop = '0px';
          $('zoomimage').style.paddingLeft = '0px';
          $('zoomimage').src = zoomimgarray[currentimage];
          zfade ($('zoomimage'), 0, 100, 500, true);
          zfadeworking = false;
        }
      }
      else {
        if (loadanimshowing == false){
          $('zoomimage').style.paddingTop = '228px';
          $('zoomimage').style.paddingLeft = '422px';
          $('zoomimage').src = '//images.competitivecyclist.com/images/global/loading.gif';
        }
        loadanimshowing = true;
        var checkifloaded = setTimeout(function () { zoomimgswitch(); }, 50);
      }
    }
    
    
    //--------------------------------------------------------------------------------------------------------
    // show / hide Czoom
    //--------------------------------------------------------------------------------------------------------
    function hideczoombox(element,productid){
      document.getElementById('zoominnercontainer').innerHTML = '';
      if (document.getElementById('buyaddtocart') && buyaddtocartstorage != ''){
        document.getElementById('buyaddtocart').innerHTML = buyaddtocartstorage;
      }

      zzoom(element,800,520,0,520,czoomease,'hideczoomclose','');
    }
    function hideczoomclose(){
      $('zoomposition').style.display = "none";
      $('zoomcontainer').style.width = '0px';
      $('zoomcontainer').style.height = '520px';
      $('zoominnercontainer').innerHTML = '';
    }
    
     //check if apple mobile browser
     //take out shadow and replace with solid
    
    ZRMobileDetectCommon = {
        
      browserAgent : navigator.userAgent.toLowerCase(),
    
      agentIds : new Array('iphone','ipod','ipad'),
      
      check : function(){
        var redirectedToMobile = false;
        for (a = 0; a < ZRMobileDetectCommon.agentIds.length; a++){
          if (ZRMobileDetectCommon.browserAgent.search(ZRMobileDetectCommon.agentIds[a]) > -1){
            redirectedToMobile = true;
          }
        }
        if (redirectedToMobile == true){
          return true;
        }
        
      }
      
    }
    
    var showzoombox = function(elementpass, productid, imagecode) {
      opensize = '';
      var startx = 0;
      var starty = 520;
      var endx = 800;
      var endy = 520;
      
      var toppos = getyscrollpos();
      
      if (ZRMobileDetectCommon.check() == true){
        document.getElementById('leftTopCorner').style.background = "none";
        document.getElementById('rightTopCorner').style.background = "none";
        document.getElementById('leftBottomCorner').style.background = "none";
        document.getElementById('rightBottomCorner').style.background = "none";
        document.getElementById('zoomcontainer').style.background = '#FFF';
        document.getElementById('zoomcontainer').style.border = '1px solid #ACACAC';
        document.getElementById('zoomcontainer').style.overflow = 'hidden';  
      }
      
      $('zoomcontainer').style.height = endy + "px"; 
      
      closewindow = '<div id="slidezoomclose" style="top:' + (endy - 35) + 'px" onclick="showinfoslide(\'\',\'out\',\'\',\'\',\'\');"><img src="//images.competitivecyclist.com/images/global/close_window.gif"></div>';
      
      $('zoomposition').style.display = 'block';
      $('zoomposition').style.top = toppos + 'px';
      if (imagecode != undefined){
        zzoom(elementpass,402,520,800,520,czoomease,'','');
      }
      else {
        zzoom(elementpass,elementpass.offsetWidth,520,800,520,czoomease,'','');
      }
      
      var pars = "PAGE=AJAX_ZOOM";
      pars += "&PRODUCT.ID=" + productid;
      pars += "&IMAGECODE=" + imagecode;
      pars += "&r=" + Math.random();
      var url = "/za/CCY";
      var myAjax = new Ajax.Request( url, { method: 'post', parameters: pars, onComplete: zoomloaded});
    }
  
    var zoomloaded = function(request){
      
      $('zoominnercontainer').innerHTML = request.responseText;

      var head = document.getElementsByTagName("head")[0];

      // delete existing javascript
      if ($('ajaxjavascript')){
        var elementtofind = document.getElementsByTagName('script');
        for (var e = 0; e < elementtofind.length; e++){
          if (elementtofind[e].id == 'ajaxjavascript'){
            head.removeChild(elementtofind[e]);
          }
        }
      }
      
      // add javascript loaded via ajax
      var ajaxScript = request.responseText;
      var firstIndex = ajaxScript.indexOf('<script id="ajaxJSinclude">');
      var lastIndex = ajaxScript.lastIndexOf('<\/script>');
      
      if (firstIndex == -1 && lastIndex == -1){
        ajaxScript = '';
      }
      else {
        ajaxScript = ajaxScript.substring(firstIndex + 28,lastIndex);
      }
      if (ajaxScript != ''){  
        var script = document.createElement('script');
        script.id = 'ajaxjavascript';
        script.type = 'text/javascript';
        script.text = ajaxScript;
        head.appendChild(script);
      }
      
      firstrunzzd = true;
      scrolliniter(1);
      ZZoomDrag();
    }
    
    
    // attach events on scroll and resized
    // window.onresize=function() { movetoppos(); reinitpointerimg(); }
    // window.onscroll=function() { movetoppos(); reinitpointerimg(); }
    
    // get window size
    var getwindowsize = function (){
      if( typeof( window.innerWidth ) == 'number' ) {
        var windowsize = window.innerHeight;
      }
      else {
        if (document.documentElement){
          var windowsize = document.documentElement.clientHeight;
        }
      }
      return windowsize;
    }
    
    
    //--------------------------------------------------------------------------------------------------------
    // custom drop down menu
    //--------------------------------------------------------------------------------------------------------
    var customdropdown = function (e) {
      if (!e) var e = window.event;
      var eventtype = e.type;
      if (eventtype == 'click'){
        if ($('custom_drop').style.display == 'block'){
          $('custom_drop').style.display = 'none';
        }
        else {
          $('custom_drop').style.display = 'block';
        }
      }
      if (eventtype == 'mouseout'){
        $('custom_drop').style.display = 'none';  
      }
      if (eventtype == 'mouseover'){
        $('custom_drop').style.display = 'block';  
      }
    }
    
    var setsubmitdropvalue = function (selectedvalue) {
      var sortRG = null;
      $('customdropdowntext').innerHTML = selectedvalue.firstChild.innerHTML;
      $('CATEGORY_SORT_BY').value = selectedvalue.id;
      if (selectedvalue.id.indexOf("|") != (-1)) {
        sortRG = selectedvalue.id.split("|");
        $('SORT_BY').value = sortRG[0];
        $('DESC').value = sortRG[1];
      }
      else {
        $('SORT_BY').value = selectedvalue.id;
        $('DESC').value = '';
      }
      document.sortform1.submit()
    }
    
    
    //--------------------------------------------------------------------------------------------------------
    // table striper
    //--------------------------------------------------------------------------------------------------------
    
    var hasClass = function (obj) {
      var result = false;
      if  (obj.getAttributeNode("class") != null) {
        result = obj.getAttributeNode("class").value;
      }
      return result;
    }   

    var stripe = function (id) {
      // the flag we'll use to keep track of 
      // whether the current row is odd or even
      var even = false;
    
      // if arguments are provided to specify the colours
      // of the even & odd rows, then use the them;
      // otherwise use the following defaults:
      var evenColor = arguments[1] ? arguments[1] : "#f5f5f5";
      var oddColor = arguments[2] ? arguments[2] : "#eee";
    
      // obtain a reference to the desired table
      // if no such table exists, abort
      var table = id;
      if (! table) { return; }
      
      // by definition, tables can have more than one tbody
      // element, so we'll have to get the list of child
      // &lt;table&gt;s 
      var tbodies = table.getElementsByTagName("table");
  
      // and iterate through them...
      for (var h = 0; h < tbodies.length; h++) {
       even = false; 
       // find all the &lt;tr&gt; elements... 
        var trs = tbodies[h].getElementsByTagName("tr");
        
        // ... and iterate through them
        for (var i = 0; i < trs.length; i++) {

        if (even == true) {
          trs[i].style.backgroundColor = oddColor;
        }
        else {
          trs[i].style.backgroundColor = evenColor;
        }
        if (i != 0) {
          // flip from odd to even, or vice-versa
          even =  ! even;
        }
      }
    }
  }  
  
  //--------------------------------------------------------------------------------------------------------
  // capture key stroke
  //--------------------------------------------------------------------------------------------------------
  function checkkey(e){
    var code;
    if (!e) var e = window.event;
    if (e.keyCode) code = e.keyCode;
    else if (e.which) code = e.which;
    if (code == 13){
      document.form1.submit();
    }
  }
  
  //--------------------------------------------------------------------------------------------------------
  // zr Generic Flash Video Integration
  //--------------------------------------------------------------------------------------------------------
  var zrFlashVideo = {
    // ---------------------------------
    // Init Flash Video
    // ---------------------------------
    // autoStart takes boolean value
    // autoBuffer takes boolean value
    // 
    // autoStart overrides autoBuffer if set to 'true'
    //
    // finishFunction name of function no ()
    // ---------------------------------
    init: function(videoObjectId, flashContainer, videoSource, framePath, playOnLoad, bufferOnLoad, callback, videoWidth, videoHeight){
      var newDiv = document.createElement('div');
      var myParentDiv = document.getElementById(flashContainer + '_outer');
      if(document.getElementById('myVideoObject')){
        myParentDiv.removeChild(document.getElementById('myVideoObject'));
      }
      newDiv.id = flashContainer;
      newDiv.name = flashContainer;
      myParentDiv.appendChild(newDiv);

      
      // create random number
      var randNum = Math.random();
      
      var flashVars = {
        videoPath: videoSource,
        framePath: framePath,
        autoBuffer: bufferOnLoad,
        autoStart: playOnLoad,
        watermarkPath: '/images/global/ccy_watermark.png',
        loaderColor: "0x634D38",
        displayColor: "0xFFFFFF",
        backFillColor: "0x634D38",
        backFillAlpha: "0.40",
        autoPlayButton: "false",
        playPause_checkbox: "true",
        displayPlayPause: "true",
        displayTimeline: "true",
        displayTimeClock: "true",
        displayVolume: "true",
        finishFunction: callback,
        errorFunction: "errorFunc",
        displayFullScreen: "true"
      };
      
      
      var flashParams = {
        wmode: "transparent",
        allowFullScreen: "true",
        allowScriptAccess: "samedomain" 
      };
      
      var flashAttributes = {
         id: videoObjectId,
         name: videoObjectId
      };
      swfobject.embedSWF("/js/flv/gen_flv_player.swf?rn=" + randNum, flashContainer, videoWidth, videoHeight, "9.0.0","/js/flv/expressInstall.swf", flashVars, flashParams, flashAttributes);
      //swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0","expressInstall.swf", flashvars, params, attributes);
    }
  }
  
  var zrDoNothing = function(){
    // simply do nothing
  }
  
  var zrDeleteSlidingCartItem = function(zoi_id){
    document.getElementById('customAlertTitle').innerHTML = 'CONFIRM';
    document.getElementById('customAlertContent').innerHTML= 'Are you sure you want to remove this<br> item from the cart?<div style="clear: both; height: 17px;"></div><input type="button" value="Yes" onclick="zrDeleteSlidingCartItemNow('+ zoi_id +')" /> <input style="margin-left: 6px;" type="button" value="No" onclick="document.getElementById(\'customAlert\').style.display = \'none\';" />';
    var toppos = getyscrollpos();
    $('customAlert').style.top = toppos + 210 + 'px';
    document.getElementById('customAlert').style.display = 'block';
  }
  
  var zrDeleteSlidingCartItemNow = function(zoi_id){
    document.getElementById("delete_" + zoi_id).innerHTML = 'deleting...';
    var url = "/za/CCY";
    var param = "PAGE=CART_SLIDE_DELETE";
    param += "&OPTION=EDITCART"
    param += "&zoi_save=1";
    param += "&zoi_id-1=" + zoi_id;
    param += "&zoi_delete-1=TRUE"; 
    var myAjax = new Ajax.Request( url, { method: 'post', parameters: param, onComplete: zrDeletedSlideCartItem});
    return false;
  }
  
  var zrDeletedSlideCartItem = function(){
    document.getElementById('customAlert').style.display = 'none';
    if (document.getElementById('buyaddtocart')){
      document.getElementById('buyaddtocart').innerHTML = buyaddtocartstorage;
    }
    showinfoslide('CART_SLIDE_BLANK','OUT','','','cartslide','');
    //setTimeout(function(){document.getElementById('customAlertContent').innerHTML= 'Item has been removed from your cart.<br /><br /><input type="button" value="OK / CLOSE" onclick="document.getElementById(\'customAlert\').style.display = \'none\';" />';}, 750);
    
  }
  
  var zrDeleteSlidingCartSavedITem = function(zo_id, zoi_id){
    document.getElementById('customAlertTitle').innerHTML = 'CONFIRM';
    document.getElementById('customAlertContent').innerHTML= 'Are you sure you want to remove\n this item from saved items?<br /><br /><input type="button" value="YES" onclick="zrDeleteSlidingCartSavedITemNow('+ zo_id +','+ zoi_id +')" /> <input type="button" value="NO" onclick="document.getElementById(\'customAlert\').style.display = \'none\';" />';
    document.getElementById('customAlert').style.display = 'block';
  }
  
  var zrDeleteSlidingCartSavedITemNow = function(zo_id, zoi_id){
    var url = "/za/CCY";
    var param = "PAGE=CART_SLIDE_DELETE";
    param += "&OPTION=LOAD_SAVED";
    param += "&zo_id=" + zo_id;
    param += "&zoi_save=1";
    param += "&zoi_id-1=" + zoi_id;
    param += "&zoi_delete-1=TRUE";
    var myAjax = new Ajax.Request( url, { method: 'post', parameters: param, onComplete: zrDeletedSlideCartSavedItem});
    return false;
  }
  
  var zrDeletedSlideCartSavedItem = function(){
    showinfoslide('CART_SLIDE_BLANK','OUT','','','cartslide','');
    setTimeout(function(){document.getElementById('customAlertContent').innerHTML= 'Item has been removed from saved items.<br /><br /><input type="button" value="OK / CLOSE" onclick="document.getElementById(\'customAlert\').style.display = \'none\';" />';}, 750);
  }
  
  var zrCheckoutLogin = function(){
    var url = "/za/CCY";
    var param = "OPTION=LOGONUSERTOCARTSLIDE";
    param += "&WDS_USER.USERID=" + document.getElementById('userid').value;
    param += "&WDS_USER.PASSWORD=" + document.getElementById('password').value;
    param += "&WDS_USER.COMPANY_ID=" + document.getElementById('company').value;
    var myAjax = new Ajax.Request( url, { method: 'post', parameters: param, onComplete: zrCheckoutLoginDone});
  }
  
  var zrCheckoutLoginDone = function(request){
    if(request.responseText == "FALSEFALSE"){
      document.getElementById('loginerrormessage').style.display = 'block';
    }
    if(request.responseText == "TRUEFALSE"){
      document.getElementById('loginerrormessage').style.display = 'none';
      window.location.href = "/za/CCY?PAGE=ONE_PAGE_CHECKOUT";
    }
    if(request.responseText == "TRUETRUE"){
      alert ('Your previous cart has been merged with your current one.\n\nWe are going to redirect you to your cart to review the merger.\n\n Thank you.');
      window.location.href = "/za/CCY?PAGE=CART";
    }
  }
  
  var userIsLoggedIn = false;
  var globalProductId = '';
  var globalImageCode = '';
  var zrCartSlideLoginUser = function(productid, imagecode, origin){  
    globalProductId = productid;
    globalImageCode = imagecode;
    globalOrigin = origin
    document.getElementById('loginerrormessage').style.display = 'none';
    var url = "/za/CCY";
    var param = "OPTION=LOGONUSERTOCARTSLIDE";
    param += "&WDS_USER.COMPANY_ID=" + document.getElementById('company').value;
    param += "&WDS_USER.USERID=" + document.getElementById('userid').value;
    param += "&WDS_USER.PASSWORD=" + document.getElementById('password').value;
    param += "&KEEP_LOGGED_IN=" + document.getElementById('keepmeloggedin').value;
    param += "&IMAGECODE=" + imagecode;
    var myAjax = new Ajax.Request( url, { method: 'post', parameters: param, onComplete: zrCartSlideLoginStatus});
    return false;
  }
  
  var zrCartSlideLoginStatus = function(request){
    
    if(request.responseText == "FALSEFALSE"){
      document.getElementById('loginerrormessage').style.display = 'block';
    }
    if(request.responseText == "TRUEFALSE"){
      saveuserIsLoggedIn = true;
      userIsLoggedIn = true;
      document.getElementById('loginerrormessage').style.display = 'none';
      if (globalOrigin == 'BUY'){
        handleAddToCart('cartslide','buy'); return false;
      }
      else {
        eval(showinfoslide('CART_SLIDE_SKU_DIM&PRODUCT.ID=' + globalProductId + '&IMAGECODE=' + globalImageCode,'in','','','cartslidecarttoskudim',''));
      }
    }
    if(request.responseText == "TRUETRUE"){
      saveuserIsLoggedIn = true;
      userIsLoggedIn = true;
      document.getElementById('loginerrormessage').style.display = 'none';
      alert("We have merged previously added items to your cart.");
      if (globalOrigin == 'BUY'){
        handleAddToCart('cartslide','buy'); return false;
      }
      else {
        eval(showinfoslide('CART_SLIDE_SKU_DIM&PRODUCT.ID=' + globalProductId + '&IMAGECODE=' + globalImageCode,'in','','','cartslidecarttoskudim',''));
      }
    }
    
    var url = "/za/CCY";
    var pars = "&PAGE=LOGON_AJAX_RESULTS";
    var myAjax = new Ajax.Request( url, { method: 'post', parameters: pars, onComplete: zrCartSlidezoid });
  }
  
  var zrCartSlidezoid = function(request){
    $('logonAjaxResults').innerHTML = originalRequest.responseText;
    $('zo_id').value = $('savedCartId').innerHTML;
    savedOrderId = $('zo_id').value;
    

  }
  
  var zrCartSlideCreateAccount = function(productid, imagecode, origin){
    globalProductId = productid;
    globalImageCode = imagecode;
    globalOrigin = origin;
    var url = "/za/CCY";
    var param = $('accountcreation').serialize();
    var myAjax = new Ajax.Request( url, { method: 'post', parameters: param, onComplete: zrCartSlideAccountStatus});
    return false;
  }
  
  var zrCartSlideAccountStatus = function(request){
    if (request.responseText.indexOf('&bull;') > 0){
      document.getElementById('accounterrormsg').innerHTML = request.responseText;
    }
    //if(request.responseText == "FALSEFALSE"){
    //}
    if(request.responseText == "TRUEFALSE"){
      userIsLoggedIn = true;
      saveuserIsLoggedIn = true
      if (globalOrigin == 'SAVEFORLATER'){
        handleSaveForLater(globalProductId, globalImageCode,'accountcreated');
      }
      else {
        if (globalOrigin == 'BUY'){
          handleAddToCart('cartslide','buy'); return false;
        }
        eval(showinfoslide('CART_SLIDE_SKU_DIM&PRODUCT.ID=' + globalProductId + '&IMAGECODE=' + globalImageCode,'in','','','cartslidecarttoskudim',''));
      }
    }
    if(request.responseText == "TRUETRUE"){  
      userIsLoggedIn = true;
      saveuserIsLoggedIn = true;
      alert("We have merged previously added items to your cart.");
      if (globalOrigin == 'SAVEFORLATER'){
        handleSaveForLater(globalProductId, globalImageCode);
      }
      else {
        eval(showinfoslide('CART_SLIDE_SKU_DIM&PRODUCT.ID=' + globalProductId + '&IMAGECODE=' + globalImageCode,'in','','','cartslidecarttoskudim',''));
      }
    }
  }
  
  var zrCartSlideForgotPassword = function(){
    var url = "/za/CCY";
    var param = "PAGE=CART_SLIDE_FORGOT_PASSWORD_RESULTS";
    param += "&EMAIL=" + document.getElementById('email').value;
    var myAjax = new Ajax.Request( url, { method: 'post', parameters: param, onComplete: zrCartSlideForgotPasswordStatus});
  }
  
  var zrCartSlideForgotPasswordStatus = function(request){
    
    if(request.responseText == "OK"){
      document.getElementById('forgotpasswordform').style.display = 'none';
      document.getElementById('forgotpasswordmessage').style.display = 'none';
      document.getElementById('forgotpassworderror').style.display = 'none';
      document.getElementById('forgotpasswordsuccess').style.display = 'block';
    }
    
    if(request.responseText == "PROBLEM"){
      document.getElementById('forgotpasswordform').style.display = 'block';
      document.getElementById('forgotpasswordmessage').style.display = 'none';
      document.getElementById('forgotpassworderror').style.display = 'block';
      document.getElementById('forgotpasswordsuccess').style.display = 'none';
      document.getElementById('email').value = '';
    }
    
  }
  
  var onlineStatusImage = new Image();
  var checkOnlineOffline = function(){
    var elementExists = document.getElementById('navlivechat');
    if (elementExists != null){
      if (typeof document.getElementById('navlivechat').currentStyle != 'undefined'){ 
        var CSSProperty = document.getElementById('navlivechat').currentStyle.backgroundImage;
        CSSProperty = CSSProperty.replace('url("','');
        CSSProperty = CSSProperty.replace('")','');
      }
      else {
        var CSSProperty = window.getComputedStyle(document.getElementById('navlivechat'),null).getPropertyValue("background-image"); 
        CSSProperty = CSSProperty.replace('url(','');
        CSSProperty = CSSProperty.replace(')','');
      }
    }
    var url = CSSProperty;
    
    if (onlineStatusImage.complete == true){
      checkOnlineOfflineRequest;
    }
    
    onlineStatusImage.onload = checkOnlineOfflineRequest;
    onlineStatusImage.src = url;
  }
  
  var checkOnlineOfflineRequest = function(request){
    if (onlineStatusImage.width == 1){
      document.getElementById('liveChatBlocker').style.display = 'block';
    }
    else {
      // do nothing
    }
  }
  
  var zrHeightEase = function (elem,startheight,endheight,steps,intervals,powr) { 
    if (elem.heightChangeMemInt){
      window.clearInterval(elem.heightChangeMemInt);
    }
    var actStep = 0;
    elem.heightChangeMemInt = window.setInterval(
      function() { 
        elem.currentHeight = easeInOut(startheight,endheight,steps,actStep,powr);
        elem.style.height= elem.currentHeight + "px"; 
        actStep++;
        if (actStep > steps) window.clearInterval(elem.heightChangeMemInt);
      } 
      ,intervals)
  }
    
  var easeInOut = function(minValue,maxValue,totalSteps,actualStep,powr) { 
    var delta = maxValue - minValue; 
    var stepp = minValue+(Math.pow(((1 / totalSteps) * actualStep), powr) * delta); 
    return Math.ceil(stepp) 
  } 

  var zrEaseItHeight = function(element, direction){
    var divHeight = element.offsetHeight;
    element.style.height = 'auto';
    var endHeight = element.offsetHeight;
    element.style.height = divHeight + 'px';
    if (direction == 'in'){
      zrHeightEase(element,divHeight,endHeight,50,10,5);
    }
    if (direction == 'out'){
      zrHeightEase(element,divHeight,0,50,10,5);
    }
  }
  var elementToCheck = new Array();
  var addressValueStorage = '';
  var zrAddressCheckShipCalc = function(origin){
    if (!document.getElementById('billshipflag')) return;
    if (origin == 'onload'){
      addressValueStorage = 'forcecalc';     // force it to load onload
    }
    if (document.getElementById('billshipflag').value == 0){
      elementsTocheck = ["zo_bill_first_name","zo_bill_last_name","zo_bill_addr1","zo_bill_city","zo_bill_state","zo_bill_country_code","zo_bill_postal_code","zo_bill_phone","zo_bill_email","zo_ship_first_name","zo_ship_last_name","zo_ship_addr1","zo_ship_city","zo_ship_state","zo_ship_country_code","zo_ship_postal_code","zo_ship_phone"];
      if (addressValueStorage != document.getElementById('zo_ship_state').value + document.getElementById('zo_ship_country_code').value + document.getElementById('zo_ship_postal_code').value){
        if (document.getElementById('zo_ship_state').value != '' && document.getElementById('zo_ship_country_code').value != '' && document.getElementById('zo_ship_postal_code').value != ''){
          zrLoadShipping();
          addressValueStorage = document.getElementById('zo_ship_state').value + document.getElementById('zo_ship_country_code').value + document.getElementById('zo_ship_postal_code').value;
        }
        else {
          //document.getElementById('shippingDisplay').style.height = "0px";
          document.getElementById('shippingLoading').style.display = 'none';
          //document.getElementById('paymentDisplay').style.height = '0px';
          document.getElementById('paymentLoading').style.display = 'none';
          addressValueStorage = '';
        }
      }
    } 
    else {
      elementsTocheck = ["zo_bill_first_name","zo_bill_last_name","zo_bill_addr1","zo_bill_city","zo_bill_state","zo_bill_country_code","zo_bill_postal_code","zo_bill_phone","zo_bill_email"];
      if (addressValueStorage != document.getElementById('zo_bill_state').value + document.getElementById('zo_bill_country_code').value + document.getElementById('zo_bill_postal_code').value){
        if (document.getElementById('zo_bill_state').value != '' && document.getElementById('zo_bill_country_code').value != '' && document.getElementById('zo_bill_postal_code').value != ''){
          zrLoadShipping();
          addressValueStorage = document.getElementById('zo_bill_state').value + document.getElementById('zo_bill_country_code').value + document.getElementById('zo_bill_postal_code').value;
        }
        else {
          //document.getElementById('shippingDisplay').style.height = "0px";
          document.getElementById('shippingLoading').style.display = 'none';
          //document.getElementById('paymentDisplay').style.height = '0px';
          document.getElementById('paymentLoading').style.display = 'none';
          addressValueStorage = '';
        }
      }
    }
  }
  
  var zrLoadShipping = function(){
    //document.getElementById('shippingDisplay').style.height = "0px";
    document.getElementById('shippingLoading').style.display = 'block';
    document.getElementById('shippingSelect').innerHTML = '';
    var url = "/za/CCY?PAGE=SHIPPING";
    var param = $('addressform').serialize();
    var myAjax = new Ajax.Request( url, { method: 'post', parameters: param, onComplete: zrLoadShippingDone});
  }
  
  var zrLoadShippingDone = function(request){
    var head = document.getElementsByTagName("head")[0];
    // add javascript loaded via ajax
    var ajaxScript = request.responseText;
    var firstIndex = ajaxScript.indexOf('<script id="ajaxJSinclude">');
    var lastIndex = ajaxScript.lastIndexOf('<\/script>');
    if (firstIndex == -1 && lastIndex == -1){
      ajaxScript = '';
    }
    else {
      ajaxScript = ajaxScript.substring(firstIndex + 28,lastIndex);
    }
    
    if (ajaxScript != ''){  
      var script = document.createElement('script');
      script.id = 'ajaxjavascript';
      script.type = 'text/javascript';
      script.text = ajaxScript;
      head.appendChild(script);
    }
    
    var requestOutput = request.responseText;
    var startRequest = requestOutput.lastIndexOf('<\/script>');
    var endRequest = requestOutput.length;
    requestOutput = requestOutput.substring(startRequest + 9,endRequest);
    document.getElementById('shippingLoading').style.display = 'none';
    document.getElementById('shippingSelect').innerHTML = requestOutput;
    
    if (document.getElementById('initShippingCharges')){
      if (document.getElementById('initShippingCharges').value == 'true'){
        setInitialCharges();
      }
    }
    document.getElementById('shippingDisplay').style.height = 'auto';
    var endHeight = document.getElementById('shippingDisplay').offsetHeight;
    document.getElementById('shippingDisplay').style.height = '0px';
    //window.location.href = window.location.href + "#shippingoptions";
    if (document.getElementById('shippingErrorHappened')) {
      //zrHeightEase(document.getElementById('shippingDisplay'),0,endHeight,50,10,5);
			document.getElementById('shippingDisplay').style.height = endHeight + 'px';
    }
    else {
      //zrHeightEase(document.getElementById('shippingDisplay'),0,endHeight - 25,50,10,5);
			document.getElementById('shippingDisplay').style.height = endHeight + 'px';
    }

    var shippingOptionSelected = false;
    var shippingInputElements = document.getElementById('shippingSelect').getElementsByTagName('INPUT');
    for (a = 0; a < shippingInputElements.length; a++){
      if (shippingInputElements[a].type == "radio" && shippingInputElements[a].checked == true){
        shippingOptionSelected = true;
        setTimeout(function(){
        zrLoadPayment  ('');  
      }, 1000);                                    
      }
    }
    if (shippingOptionSelected) {
      document.getElementById('shippingInstruction').style.display = 'none';
      document.getElementById('shippingInstructionShow').style.display = 'block';
    }
    else {
      document.getElementById('shippingInstruction').style.display = 'block';
      document.getElementById('shippingInstructionShow').style.display = 'none';
      //document.getElementById('paymentDisplay').style.height = '0px';
    }
  }
  
  var zrLoadPayment = function(){
    //document.getElementById('paymentDisplay').style.height = '0px';
    document.getElementById('paymentLoading').style.display = 'block';
    var url = "/za/CCY?PAGE=PAYMENT";
    var param = $('shippingSelect').serialize();
    var myAjax = new Ajax.Request( url, { method: 'post', parameters: param, onComplete: zrLoadPaymentDone});
  }
  
  var zrLoadPaymentDone = function(request){
    var head = document.getElementsByTagName("head")[0];
    // add javascript loaded via ajax
    var ajaxScript = request.responseText;
    var firstIndex = ajaxScript.indexOf('<script id="ajaxJSinclude">');
    var lastIndex = ajaxScript.lastIndexOf('<\/script>');
    
    if (firstIndex == -1 && lastIndex == -1){
      ajaxScript = '';
    }
    else {
      ajaxScript = ajaxScript.substring(firstIndex + 28,lastIndex);
    }
    if (ajaxScript != ''){  
      var script = document.createElement('script');
      script.id = 'ajaxjavascript';
      script.type = 'text/javascript';
      script.text = ajaxScript;
      head.appendChild(script);
    }
    document.getElementById('paymentLoading').style.display = 'none';
    document.getElementById('paymentDisplay').innerHTML = request.responseText;
    document.getElementById('paymentDisplay').style.height = 'auto';
    var endHeight = document.getElementById('paymentDisplay').offsetHeight;
    //document.getElementById('paymentDisplay').style.height = '0px';
    //window.location.href = window.location.href + "#payment";
    //zrHeightEase(document.getElementById('paymentDisplay'),0,endHeight + 25,50,10,5);
		document.getElementById('paymentDisplay').style.display = endHeight + 'px';
  }
  
  var applyPromoCode = function() {
    if (document.getElementById('PROMO_CODE').value == ''){
      alert ('Please enter your Promo Code.');
      return false;
    }
    document.ccform.elements['PROMO_CODE'].value = document.promocodeform.elements['PROMO_CODE'].value.toUpperCase();
    document.ccform.elements['PAGE'].value = 'PROMO_STATUS';
    document.ccform.elements['OPTION'].value = 'PROMO_CODE_ENTRY';
      
    var url = "/za/CCY";
    var param = $('ccform').serialize();
    var myAjax = new Ajax.Request( url, { method: 'post', parameters: param, onComplete: zrPromoApplied});
    $('promo_entry_error').style.display = 'none';
    $('promo_entry_form').style.display = 'none';
    $('promo_entry_process').style.display = 'block';
  }
  
  var zrPromoApplied = function(response) {
    if (response.responseText == 'SUCCESS') {
      showinfoslide('','out','','','promo');
      zrLoadShipping();
    }
    else {  // show promo error
      $('promo_entry_process').style.display = 'none';
      $('promo_entry_instr').style.display = 'none';
      $('promo_entry_form').style.display = 'block';
      $('promo_entry_error').innerHTML = response.responseText;
      $('promo_entry_error').style.display = 'block';
    }
  }
  
  function applyGiftCards() {
    
    $('gc_check_results').style.display = 'none';
    if (document.getElementById('GIFT_CARD_1').value == ""){
      $('gc_check_results').innerHTML = '<p style="color: #cc0000;">Please enter your Gift Card Number.</p>';
      $('gc_check_results').style.display = 'block';
      return false;
    }
    
    var haveGiftCardNumber = false;
    
    if (document.getElementById) {
      for (var i = 1; i < 4; i++) {
        targetId = "giftCard" + i;
        target = document.getElementById(targetId);
        if (target.style.display != "none") {
          if (document.giftcardform.elements['GIFT_CARD_' + i].value.trim() != '') {
            haveGiftCardNumber = true;
          }
        }
        else {
          // set non-visible cards to a blank value
          document.giftcardform.elements['GIFT_CARD_' + i].value = '';
        }
      }
    }
    if (!haveGiftCardNumber || checkGiftCardNumbers()) {
      // move the gift cards entered in the slider to the main form
      for (var i = 1; i < 4; i++) {
        document.ccform.elements['GIFT_CARD_' + i].value = document.giftcardform.elements['GIFT_CARD_' + i].value;
      }
      document.ccform.elements['PAGE'].value = 'ONE_PAGE_CHECKOUT';
      document.ccform.elements['OPTION'].value = 'GIFT_CARD_ENTRY';
      
      var url = "/za/CCY";
      var param = $('ccform').serialize();
      var myAjax = new Ajax.Request( url, { method: 'post', parameters: param, onComplete: zrGiftCardApplied});
      document.getElementById('giftCardsBlock').innerHTML = '<img src="//images.competitivecyclist.com/images/products/loading.gif" style="vertical-align: middle" /> <span style="font-size: 11px;">Applying Gift Card(s)</span>';
    }
  }
  
  var zrGiftCardApplied = function(){
    showinfoslide('','out','','','giftcard');
    // set value so load of payment does not cause second hammering of POS CW SVC server
    $('SKIP_GC_CHECK').value = 'TRUE';
    zrLoadPayment();
    $('SKIP_GC_CHECK').value = '';
  }

  var zrLoadAddress = function() {
    var url = "/za/CCY?PAGE=ONE_PAGE_OPT_VAL_RECORD";
    smRadio = document.form2.elements['zo_shipping_method_id'];
    for (i = 0; smRadio != null && i < smRadio.length; i++) {
      if (smRadio[i].checked) {
        document.form1.elements['zo_shipping_method_id'].value = smRadio[i].value;
      }
    }
    document.form1.elements['OPTION'].value = "ONEPAGEADDRESSSHIPENTRY";
    document.form1.elements['zosc_save'].value = '1';
    document.form1.elements['zosc_descr-1'].value = document.form2.elements['zosc_descr-1'].value;
    document.form1.elements['zosc_charge-1'].value = document.form2.elements['zosc_charge-1'].value;
    var param = $('addressform').serialize();
    var myAjax = new Ajax.Request( url, { method: 'post', parameters: param, onComplete: zrLoadAddressDone});
  }
  
  var zrLoadAddressDone = function(request) {
    document.form1.elements['OPTION'].value = "ONEPAGEADDRESSENTRY";
    zrLoadShipping();
  }
  
