
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * Indiemerchandising javascript file
 *
 * JavaScript version ?
 *
 * @copyright  2005-2008 Indie Merchandising, LLC. ALL RIGHTS RESERVED
 * @version    SVN: $Id: indie.js 5059 2008-05-12 16:13:45Z zero $
 * @package    indiemerch
 * @subpackage indiemerchandising.com
 */

/******************************** LOGINLOGOUT *********************************/

// {{{ LoginLogout

// {{{ constructor

/**
 * Constructor
 *
 * @access public
 * @since  0.1
 */
function LoginLogout()
{
}

// }}}
// {{{ tagMatchOpenLogin()

/**
 * Match the open login link
 *
 * @access public
 * @since  0.1
 * @static
 */
LoginLogout.tagMatchOpenLogin = function(el)
{
    return Nontoxic.classMatch(el, 'openLogin');
}

// }}}
// {{{ tagMatchOpenLogout()

/**
 * Match the open logout link
 *
 * @access public
 * @since  0.1
 * @static
 */
LoginLogout.tagMatchOpenLogout = function(el)
{
    return Nontoxic.classMatch(el, 'openLogout');
}

// }}}
// {{{ tagMatchCloseLogin()

/**
 * Match the close login link
 *
 * @access public
 * @since  0.1
 * @static
 */
LoginLogout.tagMatchCloseLogin = function(el)
{
    return Nontoxic.classMatch(el, 'closeLogin');
}

// }}}
// {{{ tagMatchCloseLogout()

/**
 * Match the close logout link
 *
 * @access public
 * @since  0.1
 * @static
 */
LoginLogout.tagMatchCloseLogout = function(el)
{
    return Nontoxic.classMatch(el, 'closeLogout');
}

// }}}
// {{{ tagAddOpenLogin()

/**
 * Add the open login event
 *
 * @access public
 * @since  0.1
 * @static
 */
LoginLogout.tagAddOpenLogin = function(el)
{
    Nontoxic.addEvent(el, 'click', LoginLogout.showLogin);
    el.onclick = function () { return false; };
    el.href = '#';
}

// }}}
// {{{ tagAddOpenLogout()

/**
 * Add the open logout link
 *
 * @access public
 * @since  0.1
 * @static
 */
LoginLogout.tagAddOpenLogout = function(el)
{
    Nontoxic.addEvent(el, 'click', LoginLogout.showLogout);
    el.onclick = function () { return false; };
    el.href = '#';
}

// }}}
// {{{ tagAddCloseLogin()

/**
 * Add the close login event
 *
 * @access public
 * @since  0.1
 * @static
 */
LoginLogout.tagAddCloseLogin = function(el)
{
    Nontoxic.addEvent(el, 'click', LoginLogout.hideLogin);
    el.onclick = function () { return false; };
    el.href = '#';
}

// }}}
// {{{ tagAddCloseLogout()

/**
 * Add the close logout link
 *
 * @access public
 * @since  0.1
 * @static
 */
LoginLogout.tagAddCloseLogout = function(el)
{
    Nontoxic.addEvent(el, 'click', LoginLogout.hideLogout);
    el.onclick = function () { return false; };
    el.href = '#';
}

// }}}
// {{{ showLogin()

/**
 * Shows the login box
 *
 * @access public
 * @since  0.1
 * @static
 */
LoginLogout.showLogin = function()
{
    DOMElementShow('login');
}

// }}}
// {{{ hideLogin()

/**
 * Hides the login box
 *
 * @access public
 * @since  0.1
 * @static
 */
LoginLogout.hideLogin = function()
{
    DOMElementHide(getDOMElement('login'));
}

// }}}
// {{{ showLogout()

/**
 * Shows the logout box
 *
 * @access public
 * @since  0.1
 * @static
 */
LoginLogout.showLogout = function()
{
    DOMElementShow('logout');
}

// }}}
// {{{ hideLogout()

/**
 * Hides the logout box
 *
 * @access public
 * @since  0.1
 * @static
 */
LoginLogout.hideLogout = function()
{
    DOMElementHide(getDOMElement('logout'));
}

// }}}

// }}}

/****************************** SUBMITONCHANGE ********************************/

// {{{ submitParentForm()

function submitParentForm(e) {
    var target = Nontoxic.getEventTarget(e);
    if (!target) {
        return;
    }
    target.parentNode.submit();
}

// }}}

/************************* UPDATE ORDER FORM TOTALS ***************************/

// {{{ updateTotals()

function updateTotals(e) {
    var target = Nontoxic.getEventTarget(e);
    if (!target) {
        return;
    }
    var myRow = target.parentNode.parentNode;
    if (myRow.nodeName != 'TR') {
        return;
    }
    var myCells = myRow.getElementsByTagName('td');
    var myQtyCell = null;
    var myTotalCell = null;
    var myPriceCell = null;
    for (var i = 0; i < myCells.length; i++) {
        if (Nontoxic.classMatch(myCells[i], 'catalogItemQuantity')) {
            myQtyCell = myCells[i];
        }
        if (Nontoxic.classMatch(myCells[i], 'catalogItemTotal')) {
            myTotalCell = myCells[i];
        }
        if (Nontoxic.classMatch(myCells[i], 'catalogItemPrice')) {
            myPriceCell = myCells[i];
        }
    }
    if (myQtyCell == null || myTotalCell == null || myPriceCell == null) {
        return;
    }
    var myInputs = myRow.getElementsByTagName('input');
    var newQty = 0;
    for (var i = 0; i < myInputs.length; i++) {
        if (myInputs[i].type == 'text' && Nontoxic.classMatch(myInputs[i], 'catalogInputItem')) {
            var cellQty = parseInt(myInputs[i].value);
            if (isNaN(cellQty) || cellQty != myInputs[i].value) {
                myInputs[i].value = '';
            } else {
                newQty = newQty + parseInt(myInputs[i].value);
            }
        }
    }

    var rowQty  = parseInt(myQtyCell.innerHTML);
    var rowPrice = parseFloat(myPriceCell.innerHTML.replace('$',''));
    var rowTotal = parseFloat(myTotalCell.innerHTML.replace('$',''));

    var newTotal = newQty * rowPrice;
    var myTotalDiff = newTotal - rowTotal;

    myQtyCell.innerHTML = newQty;
    myTotalCell.innerHTML = '$'+newTotal.toFixed(2);

    var divElements = myRow.parentNode.parentNode.parentNode;
    var divSpans = divElements.getElementsByTagName('span');
    var myOrderTotalCell = null;
    for (var i = 0; i < divSpans.length; i++) {
        if (Nontoxic.classMatch(divSpans[i], 'catalogTotalPrice')) {
            myOrderTotalCell = divSpans[i];
        }
    }
    if (myOrderTotalCell == null) {
        return;
    }
    var myOrderTotal = parseFloat(myOrderTotalCell.innerHTML.replace('$',''));
    myOrderTotalCell.innerHTML = '$' + (myOrderTotal + myTotalDiff).toFixed(2);
}

// }}}

/*************************** ITEM IMAGE ROLLOVERS *****************************/

// {{{ Item Image

// {{{ constructor

ItemImage = function()
{
}

new ItemImage();

// }}}
// {{{ toString()

ItemImage.prototype.toString = function()
{
    return 'delaymouseoverobject: ' + this.delMO + ' and test: ' + this.test;
}

// }}}
// {{{ match()

ItemImage.prototype.match = function(el, myname)
{
    return Nontoxic.classMatch(el, 'itemImageRollover');
}

// }}}
// {{{ add()

ItemImage.prototype.add = function(el, myname)
{
    // uses the global delayer
    eval('delayer.register(' + myname + '.show, ' + myname + '.hide, el, ' + defaultDelay + ');');
    delayer.addEvents(el, 'delayer');
}

// }}}
// {{{ show()

ItemImage.prototype.show = function(target)
{
    var myRow = target.parentNode.parentNode;
    if (myRow.nodeName != 'TR') {
        return;
    }
    var x = findPosX(target);
    var y = findPosY(target);
    var innerDivs = myRow.getElementsByTagName('div');
    for (var i=0; i<innerDivs.length; i++) {
        if (Nontoxic.classMatch(innerDivs[i], 'itemImage')) {
            ItemImage.openImage(innerDivs[i], x, y);
        }
    }
}

// }}}
// {{{ hide()

ItemImage.prototype.hide = function(target)
{
    var myRow = target.parentNode.parentNode;
    if (myRow.nodeName != 'TR') {
        return;
    }
    var innerDivs = myRow.getElementsByTagName('div');
    for (var i=0; i<innerDivs.length; i++) {
        if (Nontoxic.classMatch(innerDivs[i], 'itemImage')) {
            ItemImage.closeImage(innerDivs[i]);
        }
    }
}

// }}}
// {{{ openImage()

ItemImage.openImage = function e(d, x, y)
{
    d.style.display = 'block';
    d.style.visibility = 'visible';
    d.visibility = 'visible';
    d.style.top  = (y - 65) + 'px';
    d.style.left = (x - 150) + 'px';
    d.zIndex = 20;
}

// }}}
// {{{ closeImage()

ItemImage.closeImage = function (d)
{
    DOMElementHide(d);
}

// }}}

// }}}

/*********************** ITEM CART CONTENTS ROLLOVERS *************************/

// {{{ Cart Contents

// {{{ constructor

CartContents = function()
{
}

new CartContents();

// }}}
// {{{ toString()

CartContents.prototype.toString = function()
{
    return 'delaymouseoverobject: ' + this.delMO + ' and test: ' + this.test;
}

// }}}
// {{{ match()

CartContents.prototype.match = function(el, myname)
{
    return Nontoxic.classMatch(el, 'showItemsInCart');
}

// }}}
// {{{ add()

CartContents.prototype.add = function(el, myname)
{
    // uses the global delayer
    eval('delayer.register(' + myname + '.show, ' + myname + '.hide, el, ' + defaultDelay + ');');
    delayer.addEvents(el, 'delayer');
}

// }}}
// {{{ show()

CartContents.prototype.show = function(target)
{
    var x = findPosX(target);
    var y = findPosY(target);
    CartContents.open(target.nextSibling.nextSibling, x, y);
}

// }}}
// {{{ hide()

CartContents.prototype.hide = function(target)
{
    CartContents.close(target.nextSibling.nextSibling);
}

// }}}
// {{{ open()

CartContents.open = function e(d, x, y)
{
    d.style.display = 'block';
    d.style.visibility = 'visible';
    d.visibility = 'visible';
    d.style.top  = (y - 33) + 'px';
    d.style.left = (x - 200) + 'px';
    d.zIndex = 20;
}

// }}}
// {{{ close()

CartContents.close = function (d)
{
    Nontoxic.DOMElementHide(d);
}

// }}}

// }}}

/**************************** SWITCH IMAGE SOURCE *****************************/

// {{{ switchImage()

function switchImage(e) {

    var target = Nontoxic.getEventTarget(e);
    if (!target) {
        return;
    }

    var primaryImageID = 'largeViewImage';
    var primaryImageSize = 369;
    var altImageSize = 120;

    var newSrc = target.src.replace(altImageSize, primaryImageSize);
    getDOMElement(primaryImageID).src = newSrc;
}

// }}}

/***************************** REMOVE CC SUBFORM ******************************/

// {{{ removeCCSubform()

function removeCCSubform(e) {
    var target = Nontoxic.getEventTarget(e);
    if (!target) {
        return;
    }
    var subForm = getDOMElement('subform_' + target.name);
    if (target.value == 'CreditCard') {
        Nontoxic.DOMElementShow(subForm);
    } else {
        Nontoxic.DOMElementHide(subForm);
    }
}

// }}}

/******************************** ADD EVENTS **********************************/

// {{{ globals

var delayer = new Nontoxic.DelayMouseover();
var defaultDelay = 1000;

// }}}
// {{{ add events

Nontoxic.addEvent(window, 'load', function()
    {
        var tagger = new Nontoxic.EventTagger();
        tagger.register('img', Nontoxic.Rollover.tagMatchImage, Nontoxic.Rollover.tagAdd);
        tagger.register('input', Nontoxic.Rollover.tagMatchInput, Nontoxic.Rollover.tagAdd);
        tagger.tagSimple('select', 'submitonchange', 'change', submitParentForm);
        tagger.tagSimple('img', 'switchSrc', 'click', switchImage);
        tagger.tagSimple('select', 'removeCCSubform', 'change', removeCCSubform);
        tagger.tagSimpleType('input', 'text', 'catalogInputItem', 'change', updateTotals);
        tagger.register('a', LoginLogout.tagMatchOpenLogin, LoginLogout.tagAddOpenLogin);
        tagger.register('a', LoginLogout.tagMatchOpenLogout, LoginLogout.tagAddOpenLogout);
        tagger.register('a', LoginLogout.tagMatchCloseLogin, LoginLogout.tagAddCloseLogin);
        tagger.register('a', LoginLogout.tagMatchCloseLogout, LoginLogout.tagAddCloseLogout);

        /*
        var itemImage = new ItemImage();
        tagger.registerObject('a', itemImage, 'match', 'add');

        var cartContents = new CartContents();
        tagger.registerObject('img', cartContents, 'match', 'add');
        */

        tagger.addAll();
    });

// }}}

