/****************************************************************************************
Filename:           bag.js
Author:             Jon Dunfee (jdunfee@icconline.com)
Create Date:        21-SEP-2005

Description:        Sliding shopping bag logic, place linked js file immediately after
                    after the bag in the page.

                    There must be a div for the bag and an iframe to load the contents within
                    the bag.

                    User Called Functions:

                    bagOpen("URL") = Opens the bag and opens the URL passed, when no URL
                                     is passed the bag will open with bagStartPage.
                    
                    bagClose("URL") = Follows same process as bagOpen() only it closes the
                                      bag.
                    
                    bagLocation("URL") = Simply opens the URL passed with no bag activity.

Change Log:
=========================================================================================
Date            Author                    Description of Change
-----------     ------------              -----------------------------------------------
21-SEP-2005     J. Dunfee (NTX3901)       Initial Release
****************************************************************************************/

/***** Shopping Bag Variables ******/
var bagID                  = "shoppingBag";	// Shopping bag container
var bagSlideSpeed          = 25;			// Speed in milliseconds of position calculating
var bagSlideStepLeft       = .25;			// Allows for soft positioning left movement
var bagSlideStepTop        = .25;			// Allows for soft positioning top movement
var bagAnchorID            = "bagAnchor";	// Bag anchor on page
var bagFollowAnchor        = true;			// Set relative to anchor on page (good for centered sites)
var bagScrollLeftOffset    = true;			// Allows bag to always be in horizontal view
var bagScrollTopOffset     = true;			// Allows bag to always be in vertical view
var bagDefaultAnchorLeft   = 0;				// Left point of reference for bag
var bagDefaultAnchorTop    = 0;				// Top point of reference for bag
var bagOffsetStartLeft     = -165;			// Starting left position for bag from anchor
var bagOffsetStartTop      = -400;			// Starting top position for bag from anchor
var bagOffsetEndLeft       = -165;			// Ending left position for bag from anchor
var bagOffsetEndTop        = 22;			// Ending top position for bag from anchor
var bagStartPage           = "bag.asp";		// What page loads and returns to when closing
/***********************************/

/******** Legacy Functions *********/
var cartLeft = 0;
var cartDelay = 0;
var cartDrop = 0;
var cartStep = 0;
function cartOut() { bagOpen("ssi-result.html"); }
function cartLocation(loc) { bagLocation(loc); }
function cartSlide(direction,loc)
{
    if(direction) { bagOpen(loc) }
    else { bagClose(loc) }
}
function cartAdd(f,page,slide)
{
    if(f.qty.value.length == 0)
    {
        alert("Please enter a quantity!");
        f.qty.focus();
        return;
    }
    page = page + '?action=add&ProductCode=' + f.ProductCode[f.ProductCode.selectedIndex].value + '&qty=' + f.qty.value;
    bagOpen(page);
}
function cartInit() { return; }
var buildBag = "";
/***********************************/

// Shopping bag system variables
var currentBagLoc = bagStartPage;

// Initialize shopping bag
function initBag()
{
    d = document;
    bag = d.getElementById(bagID);
    if(!bag) return;
    bag.anchorLeft = function()
                  {
                    return ((bagFollowAnchor && d.getElementById(bagAnchorID))?getBagLeft(0,d.getElementById(bagAnchorID)):bagDefaultAnchorLeft) + ((bagScrollLeftOffset)?((d.body.scrollLeft)?d.body.scrollLeft:0):0);
                  }
    bag.anchorTop = function()
                  {
                    return ((bagFollowAnchor && d.getElementById(bagAnchorID))?getBagTop(0,d.getElementById(bagAnchorID)):bagDefaultAnchorTop) + ((bagScrollTopOffset)?((d.body.scrollTop)?d.body.scrollTop:0):0);
                  }
    bag.moveMe = function(x,y)
                  {
                    if(x) { this.x = x; this.style.left = x; }
                    if(y) { this.y = y; this.style.top = y; }
                  }
    bag.showHide = function(hide)
                  {
                    this.style.visibility = (hide)?"hidden":"inherit";
                    if(this.style.display) this.style.display = (hide)?"none":"inherit";
                  }
    bag.showHide(1);
    bag.moveMe(Math.ceil(bag.anchorLeft() + bagOffsetStartLeft),Math.ceil(bag.anchorTop() + bagOffsetStartTop));
    bag.showHide(0);
    bag.closing = false;
    bag.opening = false;
}

// Open shopping bag [loc = page to serve up when bag is in position]
function bagOpen(loc)
{
    if(!bag.closing)
    {
        if(!bag.opening)
        {
            currentBagLoc = (loc)?loc:bagStartPage;
        }
        bag.opening = true;
        // Slide bag horizontally
        var leftWorking = false;
        var endLeftPos = bag.anchorLeft() + bagOffsetEndLeft;
        if(bag.x < endLeftPos)
        {
            bag.x += Math.ceil((endLeftPos - bag.x) * bagSlideStepLeft);
        }
        else if(bag.x > endLeftPos)
        {
            bag.x -= Math.ceil((bag.x - endLeftPos) * bagSlideStepLeft);
        }
        else
        {
            leftWorking = false;
        }
        // Slide bag vertically
        var topWorking = true;
        var endTopPos = bag.anchorTop() + bagOffsetEndTop;
        if(bag.y < endTopPos)
        {
            bag.y += Math.ceil((endTopPos - bag.y) * bagSlideStepTop);
        }
        else if(bag.y > endTopPos)
        {
            bag.y -= Math.ceil((bag.y - endTopPos) * bagSlideStepTop);
        }
        else
        {
            topWorking = false;
        }

        bag.showHide(1);
        bag.moveMe(bag.x,bag.y);
        bag.showHide(0);
        if(leftWorking || topWorking)
        {
            setTimeout("bagOpen()",bagSlideSpeed);
        }
        else
        {
            bag.opening = false;
            bagLocation(currentBagLoc);
        }
    }
}

// Close shopping bag [loc = page to serve up when bag is in position]
function bagClose(loc)
{
    if(!bag.opening)
    {
        if(!bag.closing)
        {
            currentBagLoc = (loc)?loc:bagStartPage;
        }
        bag.closing = true;
        // Slide bag horizontally
        var leftWorking = false;
        var startLeftPos = bag.anchorLeft() + bagOffsetStartLeft - ((bagScrollLeftOffset)?((d.body.scrollLeft)?d.body.scrollLeft:0):0);;
        if(bag.x < startLeftPos)
        {
            bag.x += Math.ceil((startLeftPos - bag.x) * bagSlideStepLeft);
        }
        else if(bag.x > startLeftPos)
        {
            bag.x -= Math.ceil((bag.x - startLeftPos) * bagSlideStepLeft);
        }
        else
        {
            leftWorking = false;
        }
        // Slide bag vertically
        var topWorking = true;
        var startTopPos = bag.anchorTop() + bagOffsetStartTop - ((bagScrollTopOffset)?((d.body.scrollTop)?d.body.scrollTop:0):0);
        if(bag.y < startTopPos)
        {
            bag.y += Math.ceil((startTopPos - bag.y) * bagSlideStepTop);
        }
        else if(bag.y > startTopPos)
        {
            bag.y -= Math.ceil((bag.y - startTopPos) * bagSlideStepTop);
        }
        else
        {
            topWorking = false;
        }

        bag.showHide(1);
        bag.moveMe(bag.x,bag.y);
        bag.showHide(0);
        if(leftWorking || topWorking)
        {
            setTimeout("bagClose()",bagSlideSpeed);
        }
        else
        {
            bag.closing = false;
            bagLocation(currentBagLoc);
        }
    }
}

// Get left position of bag
function getBagLeft (x, item)
{
    if (!document.layers)
    {
        var onWindows = (navigator.platform)?(navigator.platform == "Win32"):false;
        var macIE45 = (document.all && !onWindows && getBrowserVersion() == 4.5);
        var par = item;
        var lastOffset = 0;
        while(par)
        {
            if(par.leftMargin && ! onWindows) x += parseInt(par.leftMargin);
            if((par.offsetLeft != lastOffset) && par.offsetLeft) x += parseInt(par.offsetLeft);
            if(par.offsetLeft != 0) lastOffset = par.offsetLeft;
            par = (macIE45)?par.parentElement:par.offsetParent;
        }
    } else if (item.x) x += item.x;
    return x;
}

// Get top position of bag
function getBagTop (y,item)
{
    if(!document.layers)
    {
        var onWindows = (navigator.platform)?(navigator.platform == "Win32"):false;
        var macIE45 = (document.all && !onWindows && getBrowserVersion() == 4.5);
        var par = item;
        var lastOffset = 0;
        while(par)
        {
            if(par.topMargin && !onWindows) y += parseInt(par.topMargin);
            if((par.offsetTop != lastOffset) && par.offsetTop) y += parseInt(par.offsetTop);
            if(par.offsetTop != 0) lastOffset = par.offsetTop;
            par = (macIE45)?par.parentElement:par.offsetParent;
        }
    } else if (item.y >= 0) y += item.y;
    return y;
}

// Load page in bag
function bagLocation(where)
{
    var frame = document.getElementById("bagContents");
    if(frame)
    {
        frame.src = where;
        currentBagLoc = where;
    }
}

initBag();
