Need Help Call Now

1888-337-ABEC 1888-337-2232

Cart

Tieline Bridge-IT Pro Low-Cost Stereo IP Codec with AAC

Sale!
masterpostid1454

$1.00 $1,610.25

algorithms, and Multicasting and Multi-Unicasting for multiple connections. AAC-HE v.2 is capable of delivering high fidelity stereo IP audio at

SKU:   TLB5100PRO Categories: , ,

Product Description

  • $1,610.25
  • List Price: $1,695.00
  • You Save: 5.00%

Bridge-IT PRO is identical to the Bridge-IT BASIC but also includes AAC HE, AAC LC algorithms, and Multicasting and Multi-Unicasting for multiple connections. AAC-HE v.2 is capable of delivering high fidelity stereo IP audio at bit-rates as low as 24Kbps.

Tieline's Bridge-IT is the ultimate low-cost, high-performance, stereo IP audio codec solution for broadcast and professional applications. Designed to deliver point-to-point or point-to-multipoint connections, Bridge-IT transports audio streams reliably, simply and effectively over a range of IP data networks such as wired and wireless LANs, WANs, the internet, satellite IP, WiMAX and Wi-Fi.

Bridge-IT is EBU N/ACIP Tech 3326 compatible over IP and will connect to any SIP-enabled IP codec brand with industry standard algorithms, as well as VoIP devices supporting G.711 and G.722. Bridge-IT is also internet/satellite streaming and HD and digital radio compatible.

It is designed for desktop use or two units can be installed side-by-side in a purpose-built 1RU mounting bracket.

Broadcast LIVE from your iPhone!Report-IT

Introducing Report-IT Live - the world's first iPhone® application that turns your iPhone into a bidirectional wireless IP codec and recorder. With this app, broadcast networks can centrally manage multiple Report-IT Live users from the studio. Reporters and remote talent can download the app for free, enter a username and password, and connect to a Tieline IP codec in the studio (like Bridge-IT) in seconds! Learn more »

  • Compact design, with two codecs fitting into a 1RU mounting bracket.
  • Suitable for point-to-point and multi-point (multicast) IP connections over a variety of connection transports.
  • Linear audio with suite of high quality broadcast algorithms as standard, plus optional AAC-LC, AAC-HE v.1 and AAC-HE v.2.
  • Tieline's loss-tolerant MusicPLUS algorithm provides up to 22 kHz stereo audio quality with 20ms coding delay at bit rates as low as 96kbps - making it ideal for today's IP and 3G networks.
  • Tieline Music can deliver up to 15 kHz FM quality mono audio at bit-rates as low as 24Kbps, with only 20 milliseconds encoding delay.
  • QoS Performance Engine automatically manages jitter buffering, forward error correction and packet repair.
  • Full hardware front panel interface including navigation, LCD display, PPM metering and dialing key pad.
  • Web GUI for programming codec functionality and RS232 data connections.
  • TieServer for automatic software upgrades.
  • Broadcast quality analog XLR inputs/outputs.
  • XLR digital AES/EBU input/output.
  • Simultaneous analog and digital AES/EBU audio outputs.
  • Onboard SDHC card slot for audio failover
  • Studio-to-Transmitter Link (STL) applications
  • IP audio distribution
  • Simple remote broadcast links
  • Cable Head End IP Audio Distribution
  • Low-latency audio over IP bridging solutions
  • Multiple codec installations (2 codecs fit in 1 x 19" rack unit)
Affordable, High Quality IP Audio Solutions

Bridge-IT allows radio and television broadcasters to expand their IP network at a fraction of the cost of competing IP codecs without compromising on quality or broadcast quality features.

Bridge-IT comes with 16 Bit 22kHz uncompressed linear audio at less than 12 ms encode delay, as well as MPEG Layer 2, G.711, G.722 and Tieline Music. Tieline MusicPLUS is also standard and provides 22 kHz mono and stereo with 20ms encode delay at under 100 Kbps, offering huge savings on your IP data bills and outstanding audio quality. LC-AAC, HE-AAC v.1 and HE-AAC v.2 decoders are also included as standard.

Encode with AAC Algorithms...

Upgrade your Bridge-IT audio codecs today by purchasing and installing the optional AAC encode software licence and you will instantly have the ability to encode LC-AAC, HE-AAC v.1 and HE-AAC v.2 algorithms. HE-AAC v.2 is capable of delivering high fidelity stereo IP audio at bit-rates as low as 24Kbps.

Broadcast Quality Connectors

Unlike most low cost IP audio codecs, Bridge-IT has all the broadcast connectors you would expect on a full-featured codec. Simultaneous analog and digital AES/EBU audio outputs are provided on XLR connectors and it includes a 1/4" (6.35mm) stereo headphone output.

Simple to use

Compare Bridge-IT's superior programming functionality and simple user interface with other low cost codecs. Bridge-IT features a full hardware front panel interface including navigation, LCD display, PPM metering and dialing key pad. It can also be configured and controlled remotely using an optional web interface.

Simple non-technical IP connections and Onboard Audio Backup

Bridge-IT will be the first low cost IP audio codec to offer 3 different ways to connect over IP.

  1. If you only need a simple permanent point-to-point encoder and decoder, Bridge-IT is the only low cost IP codec that lets you connect without using a computer. Simply dial the IP address of the remote codec using the front panel keypad and LCD screen.
  2. Bridge-IT serves up a comprehensive graphical user interface in a standard web browser. Just type the IP address of the codec into your web browser for remote control, configuration and dialing.
  3. Purchase the optional TieServer PRO licence (coming soon) when you buy Bridge-IT and create IP connections simpler than making a telephone call. There's no need to figure out IP addresses or deal with firewalls. TieServer PRO does it all for you. Simply register your Bridge-IT with Tieline's global TieServer traversal server once only, give it a name (like Chicago Studio) and then watch your codec's address book automatically populate with other online Bridge-ITs in your network each time you connect it to the internet. It's just like launching Skype and watching your online buddies pop up in the address book on the Bridge-IT screen. Then you simply select the codec you wish to connect with and hit Dial to connect. It's perfect for non technical people.
';

if (bUseProductAliases) {

if (jQuery.trim(oProdInfo.pa_key) != '') {
sAtcHtml += '';
} //- if jQuery.trim(oProdInfo.pa_key) != '')

} //- if (bUseProductAliases)

if (bShowAtc) {
sAtcHtml += '';
} //- if (bShowAtc)

sAtcHtml += '

';

jQuery('#detail_mx1_sizeinfo').html(sAtcHtml);

} catch (oError) {
alert("fncDrawColorSizes" + oError.message);
document.getElementById('detail_mx1_sizeinfo').innerHTML = 'Error loading sizes found in this color!';
HideLoading()
}

HideLoading();

} //- function fncDrawColorSizes()

/**
* Update Qty for "Select List" Addon Products
*/
function fncUpdateAddonsSelectQty(oSelect) {
sPKey = jQuery(oSelect).val();
jQuery('#addon_qty_container').html('');
}

/**
* Ajax to process parent-child product nested drop list displays
*
* @author dand
* @internal refactored on 4/8/2010 - dand
*
* @param int vOpt int of the option to processed (1-4)
* @param bool vKeepGoing determines if function should recurse
* @param int vLast the total number of nested drop lists (1-4)
*/
function fncGetOptDroplist(vOpt, vKeepGoing, vLast) {
var oAjaxData = {
opts: vOpt,
maxopts: vLast,
detailpageaction: 'ajaxcall',
actiontype: 'getnestedopts',
key: '419FF584B7504FFF8FB66D3641759FDD',
parent_atc: '1',
parent_price: '1',
use_child_pics: 'false',
use_child_docs: 'false',
use_child_cart_opts: 'false',
use_child_ds: 'false',
parent_config_sections:'false'
};

switch (vOpt) {

/*
* Add mode case condition for 5 & 6 Droplist
* @author pijushb
* @since 5/17/2012
*/
case 6:
var sOpt5Key = jQuery('#prod_opt5').val();
var oOpt5Info = window.oChildProds[sOpt5Key];
var sVal = escapeUriQueryParens(jQuery("#prod_opt5 option[value='" + sOpt5Key + "']").text());

if (sChildProductOpt5 !== '') sVal = sChildProductOpt5

oAjaxData.opt5 = sVal;
//Drop Through

case 5:
var sOpt4Key = jQuery('#prod_opt4').val();
var oOpt4Info = window.oChildProds[sOpt4Key];
var sVal = escapeUriQueryParens(jQuery("#prod_opt4 option[value='" + sOpt4Key + "']").text());

if (sChildProductOpt4 !== '') sVal = sChildProductOpt4

oAjaxData.opt4 = sVal;
//Drop Through

case 4:
var sOpt3Key = jQuery('#prod_opt3').val();
var oOpt3Info = window.oChildProds[sOpt3Key];
var sVal = escapeUriQueryParens(jQuery("#prod_opt3 option[value='" + sOpt3Key + "']").text());

if (sChildProductOpt3 !== '') sVal = sChildProductOpt3

oAjaxData.opt3 = sVal;
//Drop Through

case 3:
var sOpt2Key = jQuery('#prod_opt2').val();
var oOpt2Info = window.oChildProds[sOpt2Key];
var sVal = escapeUriQueryParens(jQuery("#prod_opt2 option[value='" + sOpt2Key + "']").text());

if (sChildProductOpt2 !== '') sVal = sChildProductOpt2

oAjaxData.opt2 = sVal;
//Drop Through

case 2:
var sVal = escapeUriQueryParens(jQuery('#prod_opt1').val());
oAjaxData.opt1 = sVal;
break;

default:
break;

} //- switch (vOpt)

jQuery.ajax({
url: 'i_i_pc_product_detail.asp',
data: oAjaxData,
cache: false,
type: "GET",
dataType: "json",
beforeSend: ResizeLoadingBG,
success: function (oData) {
fncDrawOptDroplist(oData, vOpt, vKeepGoing, vLast)
}
});

} //- function fncGetOptDroplist(vOpt, vKeepGoing, vLast)

// EVENT FUNCTIONS ==================================================
function fncDrawOptDroplist(oData, vOpt, bKeepGoing, vLast) {

var iOpt = parseInt(vOpt);
var iLastOpt = parseInt(vLast);
var aUsedValues = new Array();
var sProdKey = '';
var sDisplayValue = '';
var oProdInfo;

window.oChildProds = oData;

if (document.getElementById('prod_opt' + (iOpt - 1))) {
document.getElementById('prod_opt' + (iOpt - 1)).disabled = false;
}

if (bKeepGoing) {
bKeepGoing = true;
} else {
bKeepGoing = false;
}

if (iLastOpt == iOpt) {
bKeepGoing = false;
}

try {

// removes all previous options
var oOptSelect = document.getElementById('prod_opt' + iOpt);
oOptSelect.options.length = 0;

try {

for (strPKey in window.oChildProds) {

oProdInfo = window.oChildProds[strPKey];

/*
* Updated logic for building the droplist options if their is a sku in the
* querystring that is an exact match to a child product sku so it can
* preselect the correct options to load the child product sku searched for
* johns - 06/27/2013
*/
if (sChildProductKey !== '') {

switch (iOpt) {

case 2 :
sDisplayValue = sChildProductOpt2;
break;

case 3 :
sDisplayValue = sChildProductOpt3;
break;

case 4 :
sDisplayValue = sChildProductOpt4;
break;

case 5 :
sDisplayValue = sChildProductOpt5;
break;

case 6 :
sDisplayValue = sChildProductOpt6;
break;

}

}

if (sDisplayValue === oProdInfo.opt) {
sProdKey = sChildProductKey;
} else if ((!InArray (aUsedValues, oProdInfo.opt) && InArray (aUsedValues, sDisplayValue)) || sDisplayValue !== oProdInfo.opt) {
sDisplayValue = oProdInfo.opt;
sProdKey = strPKey;
}

if (!InArray (aUsedValues, sDisplayValue) && sProdKey !== '') {

oOptSelect.options[oOptSelect.options.length] = new Option(jQuery('

').html(sDisplayValue).text(), sProdKey);

if (bValidateQtyControls && parseInt(vOpt) == parseInt(vLast)) {
//jsmotherman set qty controls on the final product options
//might remove this and use javascript to set it from window.ochildprods in fncProcessOptProduct instead
oOptSelect.options[oOptSelect.options.length - 1].setAttribute("data-min", window.oChildProds[sProdKey].min_order_qty);
oOptSelect.options[oOptSelect.options.length - 1].setAttribute("data-max", window.oChildProds[sProdKey].max_order_qty);
oOptSelect.options[oOptSelect.options.length - 1].setAttribute("data-step", window.oChildProds[sProdKey].qty_increment);
oOptSelect.options[oOptSelect.options.length - 1].setAttribute("data-initval", window.oChildProds[sProdKey].initval);

}

aUsedValues[aUsedValues.length] = jQuery('

').html(sDisplayValue).text();
}
}

// johns - 06/27/2013 added code to preselect options based on an exact child sku match passed in the querystring
if (sChildProductKey !== '') {
oOptSelect.value = sChildProductKey;
}

// Recursively Call fncGetOptDroplist untilc we're done getting all the drop lists
if (bKeepGoing) {

if (iOpt == 5) {
fncGetOptDroplist (iOpt + 1, false, iLastOpt);
} else {
fncGetOptDroplist (iOpt + 1, true, iLastOpt);
}

} else {

fncProcessOptProduct (iOpt);
HideLoading();

} //- if (bKeepGoing)

} catch (err) {
alert("fncDrawOptDroplist-" + err.message);
HideLoading();
}

if (oOptSelect.options.length ')
.attr('href', getModalUrl(sUrl))
.addClass('global-modal')
.attr('title', sTitle)
.text(sText);
}

function getModalUrl(sUrl) {
var sQueryStringChar = sUrl.indexOf('?') === -1 ? '?' : '&';

sUrl = sUrl.replace(/bi_i_/ig, '');

return sUrl;
}

function getInventoryWatchListUrl(sProductKey, sProductName, sProductSku) {
return 'prod_inv_watch_add.asp' + '?' +
'p_id=' + sProductKey + '&' +
'p_nm=' + encodeURIComponent(sProductName) + '&' +
'p_sku=' + encodeURIComponent(sProductSku);
}

function addFavoritesLink() {
if (jQuery('#addfavechild').length === 0) {
jQuery('#idp_container').append('

');
}

var $favoritesListLink = buildModalLink(
'i_i_add_product_to_favorites.asp?p_id=' + sPKey,
'Add to Favorites'
);

jQuery('#addfavechild').html($favoritesListLink);
initModalLinks('#addfavechild');
}

function buildLinkedImage(sTitle, sSmallImageUrl, sLargeImageUrl) {
var $image = $('')
.attr('src', sSmallImageUrl)
// .attr(oImageAttributes);

var oLinkAttributes = $.extend({
href: sLargeImageUrl,
title: sTitle
}, oImageLinkAttributes);

var $link = $('')
.attr(oLinkAttributes)
.addClass(sImageLinkClass);

return $link.append($image);
}

function fncProcessOptProduct(vOpt) {
var bUseInlineBreaks = false;

try {
var sPKey = jQuery('#prod_opt' + vOpt).val();
var oProdInfo = window.oChildProds[sPKey];

if (bUseInlineBreaks) {
jQuery.ajax({
url: "i_i_pc_product_detail.asp?pageaction=getbreaks&key=" + sPKey,
type: "GET",
cache: false,
dataType: "html",
success: function(sResponse) {
jQuery('#breaks_table_container').html(sResponse);
},
failure: function(sResponse) {
alert('Server Error in fncProcessOptProduct: ' + sResponse);
}
});
}

//Global scope the pkey
window.sChildPkey = sPKey;

/*
* Bail if no key or no product data
*/
if (sPKey == '' || typeof oProdInfo == "undefined") {
hideProductContainer();
return false;
}

if (jQuery('#qty_box').length > 0)
jQuery('#qty_box').attr('name', 'qty_' + sPKey);

jQuery('#keys').val(sPKey);

/*
* Update SKU
*/
if (bShowSku) {
jQuery('#sku_container').html(sSkuLabel + oProdInfo.sku);
/*'**
' Added link to sku on dropdown views
' @since 1/10/2004
' @author jferguson
'**/
if (bDroplistChildSkuLink) {
jQuery('#sku_container').wrapInner('
');
}
}

if (bShowName) {
jQuery('#child_nm_container').html('Name: ' + oProdInfo.name);
}

if (bUseChildDescriptionMain) {
jQuery('#child_ds_container').html('Description: ' + oProdInfo.description);
}

/*
* Cart
*/
if (oProdInfo.showCart) {

if (jQuery('#child_cart_section').length > 0)
jQuery('#child_cart_section').show();

/*
* Handle Cart Options defined on Child Product
*/
if (bUseChildCartOpts) {

if (oProdInfo.cartOptions != '' && jQuery('#pc_cart_options_' + vOpt).length > 0) {
buildCartOption(sPKey, oProdInfo.cartOptions, vOpt);
} else {
jQuery('#pc_cart_options_' + vOpt).html('');
}

} //- if (bUseChildCartOpts)

/*
* Cart Options defined on Parent (standard config)
* need to know if this is the "last" droplist being displayed...
*/
if (jQuery('#pc_cart_options_' + vOpt).length > 0) {

jQuery('#pc_cart_options_' + vOpt).slideDown();
// change the name of the hidden input so it will post to the item in the cart
jQuery('#cart_option_419FF584B7504FFF8FB66D3641759FDD').attr("name","cart_option_" + sPKey);

} //- if (jQuery('#pc_cart_options_' + vOpt).length > 0)

/*
* Updating name of Tax Exempt with current key
* @auther - vinayakj
* @since - 2/5/2013
*/

} else {
hideChildProductInputs();

} //- if (oProdInfo.showCart)

//Product Unit Display
if ('productUnit' in oProdInfo && oProdInfo.productUnit != '') jQuery('#product_unit_container').html('Unit: ' + oProdInfo.productUnit);

// Single Unit of Measure (products.unit)
if ('uomHTML' in oProdInfo && oProdInfo.uomHTML != '') {

jQuery('#detail_atc_standalone').html(oProdInfo.uomHTML);
jQuery('#child_cart_section').html(oProdInfo.uomHTML);

}

// Parent Addon Products
if (bShowParentAddonProds) {
jQuery('#addon_product_container').slideDown();
jQuery('#addon_products').attr('name','keys');
} else {
jQuery('#addon_product_container').slideUp();
jQuery('#addon_products').attr('name','keys_no_post');
}

// Child Addon Products
if (bShowChildAddonProds && 'showChildAddonProds' in oProdInfo) {
if (!oProdInfo.showChildAddonProds) {
jQuery('#addon_product_container').slideUp();
jQuery('#addon_products').attr('name','keys_no_post');
} else {
jQuery('#addon_product_container').slideDown();
jQuery('#addon_products').attr('name','keys');
}
}

// Price --------------------------------------------------------

/*
* Check for Price Display type
* @author pijushb
* @since 4/25/2011
*/
var bShowRegPrice = true;
var bShowATCQty = false;
var sShowMessage = '';

if (sShowPriceDisplayTypeDropList) {

switch (sPriceDisplayType) {

case 'hide':
bShowRegPrice = false;
bShowATCQty = true;
sShowMessage = '-';
break;

case 'show_message':
bShowRegPrice = false;
bShowATCQty = true;
sShowMessage = sPriceMessage;
break;

case 'require_atc':
bShowRegPrice = false;
bShowATCQty = true;
sShowMessage = sHelpText;
break;

case 'require_login_or_atc':

bShowRegPrice = false;
bShowATCQty = true;
sShowMessage = sHelpText

break;

case 'require_login_for_price_and_atc':

bShowRegPrice = false;
sShowMessage = sHelpTextLogin

break;

default:
bShowRegPrice = true;
break;

} //- switch (sPriceDisplayType)

} // if (sShowPriceDisplayTypeDropList)

if (bShowRegPrice) {

//Display standard

} else {

oProdInfo.showPrice=false;
jQuery('#price_display_type_message').html('

' + sShowMessage + '

');

if (!bShowATCQty) {
jQuery('#child_cart_section').hide();
}

} //- if (bShowRegPrice)

/*
* Set Dangerous Price Ratio
* @author vinayakj
* @since 4/25/2011
*/
if (bShowHazmatRatio) {

if (oProdInfo.dangerous_price_ratio > 0) {
jQuery('#dangerous_price_ratio').show();
jQuery('#dangerous_price_ratio_value').html(oProdInfo.dangerous_price_ratio);
} else {
jQuery('#dangerous_price_ratio').hide();
}
}

if (oProdInfo.showPrice) {

/*
* Draw full UOM section (products.uom_std, products.uom_sales,
* products.uom_sales_conversion and additional unit of measure
* conversions from the unit_of_measure table)
*/

sUomView = '';

if (bShowSalesUOM || bOnlyShowSalesUOM || bShowAdditionalSalesUOM) {
sUomView = fncDrawUOM (sPKey, oProdInfo);
}

if (sUomView != '') {
jQuery('#child_cart_section').html(sUomView);
jQuery('#child_cart_section').show();
} else {
if (jQuery('#price_container').length > 0 ) {

/*
* Add Qty Pricing Link for Child Product
*/
var sPriceBreakHTML = '';

if (bShowChildQtyPricing) {
if ('showPriceBreaks' in oProdInfo) {
sPriceBreakHTML = '

  • ';
    }
    }

    iRetailPrice = parseFloat(oProdInfo.retail_price.replace('$','').replace(',',''));
    iPrice = parseFloat(oProdInfo.price.replace('$','').replace(',',''));

    cRetailPrice = oProdInfo.retail_price;
    cListPrice = oProdInfo.listprice;
    cPrice = oProdInfo.price

    /*
    * code to compare final price to retail price or suggested retail price
    * depending on which values are populated and value are greater than
    * the final price returned by the oRs.GetPrice call
    *
    * @author johns
    * @since 12/22/2011
    *
    *
    * Modified code to always display the list price.
    * (if it's blank/zero, retail price is displayed
    * instead.
    * @author dcohen
    * @since 11/4/2013
    * @see task #42616
    */
    if (bShowPriceCompare) {

    if (oProdInfo.listprice != undefined) {
    iListPrice = parseFloat(oProdInfo.listprice.replace('$','').replace(',',''));
    } else {
    iListPrice = iRetailPrice;
    cListPrice = cRetailPrice;
    } //- if (oProdInfo.listprice)

    if (iPrice

  • ' + cPrice + '
  • ' + sPriceBreakHTML + '

  • List Price: ' + cListPrice + '
  • You Save: ' + Math.round(iPercentSaved * 100) / 100 + '%
  • ');
    } else {
    jQuery('#price_container').html('

    • ' + cPrice + '
    • ' + sPriceBreakHTML + '

    • List Price: ' + cListPrice + '
    • You Save: ' + Math.round(iPercentSaved * 100) / 100 + '%

    ');
    }
    } else {
    if (true) {
    jQuery('#price_container').html('

    • ' + cPrice + '
    • ' + sPriceBreakHTML + '

    • List Price: ' + cListPrice + '

    ');
    } else {
    jQuery('#price_container').html('

    • ' + cPrice + '
    • ' + sPriceBreakHTML + '

    • List Price: ' + cListPrice + '

    ');
    }
    }//- if (1)
    } else {
    jQuery('#price_container').html('

    • ' + FormatCurrency(oProdInfo.price, true) + '
    • ' + sPriceBreakHTML + '

    ');
    }
    } else {
    jQuery('#price_container').html('

    • ' + FormatCurrency(oProdInfo.price, true) + '
    • ' + sPriceBreakHTML + '

    ');
    } //- if (bShowPriceCompare)

    } //- if (jQuery('#price_container').length > 0)

    } //- if (sUomView != '')

    jQuery('#price_container').show();

    } else {

    jQuery('#price_container').hide();

    }//- if (oProdInfo.showPrice)

    /*
    * Add hidden field for qty available to check back order.
    * @author pijushb
    * @since 9/28/2011
    */
    if (bShowBackOrderMessage) {
    jQuery('.qtyavailable').remove();

    jQuery('#idp_container')
    .parent()
    .append('

    ')
    } //- if (bShowBackOrderMessage)

    /*
    * Inventory
    */
    if (oProdInfo.showInventory) {
    jQuery('#idp_container').html(oProdInfo.invMsg);

    /**
    * if status = out then show "add product to watch list" link
    *
    * @author johns
    * @since 12/11/2009
    */
    if (bShowInvWatchLink && oProdInfo.invStatus != 'in') {
    if (!oProdInfo.showCart) {
    hideChildProductInputs();
    }

    var selected_prod = document.getElementById('prod_opt'+ vOpt).selectedIndex;
    var selected_prod_nm = document.getElementById('prod_opt'+ vOpt).options[selected_prod].text.replace('#','%23');

    var $inventoryWatchListLink = buildModalLink(
    getInventoryWatchListUrl(sPKey, selected_prod_nm, oProdInfo.sku),
    'Add to Inventory Watch List'
    );
    jQuery('#idp_container').append(' ').append($inventoryWatchListLink);

    if (bUseETADate){
    var today = new Date();
    var etaDay = new Date(oProdInfo.idpETADate);
    if(oProdInfo.idpETADate != "" && etaDay > today){
    //trim the time - this is more cross-browser reliable than converting to Date and using built in functions
    //sDate = oProdInfo.idpETADate.substring(0, oProdInfo.idpETADate.length - 7);
    jQuery('#idp_container').append(' ETA Date: ' + oProdInfo.idpETADate);
    }
    else{
    jQuery('#idp_container').append(' ETA Date: No ETA. Please Call.');
    }
    }
    initModalLinks('#idp_container');
    } // if (bShowInvWatchLink && oProdInfo.invStatus != 'in')

    } // if (oProdInfo.showInventory)

    if (bShowInvByWarehouse) {
    jQuery.ajax({
    url: "?pageaction=inventorybywarehouse&key=" + sPKey
    , cache: false
    , dataType: "text"
    , success: function (sResponse) {
    jQuery('#pw_table').html(sResponse);
    }
    });
    }

    if (bShowFavoriteLink && bShowChildFavoriteLink) {
    addFavoritesLink();
    }

    if (bUseChildPics) {

    /**
    * Main Image & View Larger Link
    */
    if (oProdInfo.pic && oProdInfo.pic != '') {
    // Build Image & View Larger Link
    if (oProdInfo.lg_pic != '') {
    setImage(jQuery('#detail_photo_container a'), 'images/' + oProdInfo.lg_pic);
    }

    jQuery('#detail_photo_container img#prodpicthumb').attr('src', 'images/' + oProdInfo.pic);
    } else {
    setImage(jQuery('#detail_photo_container a'), sLargePic);
    jQuery('#detail_photo_container img#prodpicthumb').attr('src', sDetailPic);
    } //- if (oProdInfo.pic && oProdInfo.pic != '')

    /*
    * Additional Images
    */
    var $childImages = jQuery('.detail_multipic ul.child_prods');
    var $parentImages = jQuery('.detail_multipic ul').not('.child_prods');

    if (oProdInfo.additionalPics && oProdInfo.additionalPics.length > 0) {
    /*
    * Clear Child Additional Images
    */
    if ($childImages.length > 0) {
    $childImages.empty();
    } else {
    $childImages = $('

      ').hide();
      jQuery('.detail_multipic').append($childImages);
      } //- if ($childImages.length > 0)

      /*
      * Build Child Additional Images
      */
      for (var iCounter = 0; iCounter ').append(buildLinkedImage(
      oProdInfo.name,
      'images/' + oPics.thumb,
      'images/' + oPics.large
      ).addClass('detail_multipic_img'));

      $childImages.append($imageListItem);
      }

      /*
      * Hide Parent Images & Show Child Images
      */
      $parentImages.hide();
      $childImages.fadeIn(1000);

      initImagePopup('.detail_multipic ul.child_prods');
      } else {

      /*
      * Hide Child Images & Show Parent Images
      */
      $parentImages.fadeIn(1000);
      $childImages.hide();

      } //- if (oProdInfo.additionalPics && oProdInfo.additionalPics.length > 0)

      } //- if (bUseChildPics)

      /*
      * Child Product Documents
      *
      * @author dand
      * @since 4/6/2010
      */
      if (bUseChildDocs) {

      if (oProdInfo.documents.length > 0) {

      /*
      * Clear Child Documents
      */
      if (jQuery("#child_doc_download").length > 0) {
      jQuery("#child_doc_download").html('Downloads: ');
      } else {
      jQuery("#doc_download").parent().append('

    • Downloads:
    • ');
      } //- if (jQuery("#child_doc_download").length > 0)

      /*
      * Build Child Documents
      */
      for (var iCounter = 0, goTo = oProdInfo.documents.length - 1; iCounter ' + oDocConfig.link + ' ');
      } //- for (var iCounter = 0, goTo = oProdInfo.documents.length - 1; iCounter 0)

      } //- if (bUseChildDocs)

      /*
      * Child Product Qty Pricing
      *
      * @author johns
      * @since 11/6/2010
      */

      if (bShowChildQtyPricing && 'showPriceBreaks' in oProdInfo && oProdInfo.showPriceBreaks) {
      jQuery('#qtypricing').html(buildModalLink(
      getQtyPricingUrl(sPKey),
      sQtyPricingLinkLabel,
      'Qty Pricing'
      ));
      initModalLinks('#qtypricing');
      } //- if ( bShowChildQtyPricing )

      // Check for a child description override
      applyChildDescription(oProdInfo);

      /*
      * Add Code to show/hide review message and buttons.
      *
      * @author pijushb
      * @since 1/24/2012
      */
      if (bShowBackOrderMessage) {

      sPrevSku = jQuery('#previous_sku').val();
      bReviewMessage = jQuery('#review_message_' + sPrevSku).is(':visible')

      if (bReviewMessage) {
      jQuery("#review_message_"+sPrevSku).hide();
      } //- if (bReviewMessage)

      bSubmitButton = jQuery('#submit_button').is(':visible')

      if (!bSubmitButton) {
      jQuery('#submit_button').show();
      jQuery('#check_stock_button').show();
      jQuery('#checkout_button').hide();
      }

      } //- if (bShowBackOrderMessage)

      if (bUseProductAliases) {

      if ('pa_key' in oProdInfo) {

      if (oProdInfo.pa_key) {
      jQuery('#pa_id').html(oProdInfo.pa_key);
      } //- if (oProdInfo.pa_key)

      } //- if ('pa_key' in oProdInfo)

      } //- if (bUseProductAliases)

      /*
      * Displaying Config Data
      * @auther - vinayakj
      * @since - 5/2/2012
      */
      if (bShowProdConfig) {

      if ('prod_config_droplist' in oProdInfo) {
      jQuery('#config_sections_container').html(htmlDecode(oProdInfo.prod_config_droplist));
      } else {
      jQuery('#config_sections_container').html('');
      }

      /*
      * Put Config Keys
      */
      if ('config_keys' in oProdInfo) {
      jQuery('#config_keys').val(oProdInfo.config_keys);

      if (jQuery('#qty_box').length > 0)
      jQuery('#qty_box').attr('name', 'qty_' + oProdInfo.config_keys);
      }

      /*
      * Put use_parent_key
      */
      if ('use_parent_key' in oProdInfo) {
      jQuery('#use_parent_key').val(oProdInfo.use_parent_key);
      }

      /*
      * Put show_config_sections
      */
      if ('show_config_sections' in oProdInfo) {

      jQuery('#show_config_sections').val(oProdInfo.show_config_sections);
      if (oProdInfo.show_config_sections == "1")
      {
      jQuery.ajax({
      url: '?pageaction=getconfigdata&config_key=' + jQuery('#config_keys').val() + '&key='
      , cache: false
      , dataType: "html"
      , success: function (sResponse) {
      jQuery('#config_sections_container').html(htmlDecode(sResponse));
      }
      });
      } else {
      jQuery('#config_sections_container').html('');
      }
      }

      }

      if (bUsePromotions) {
      updateDroplistPromoDisplay(sPKey);
      }

      updateSmartListChildProduct();

      updateQtyControls(vOpt);

      } catch (oError) {
      alert('fncProcessOptProduct(' + vOpt + '): ' + oError.message);
      hideProductContainer();
      }

      } //- function fncProcessOptProduct(vOpt)

      //jsmotherman 3.7.2015
      function updateQtyControls(vOpt) {
      var sQtyControlsText = "";

      if (bValidateQtyControls && bUseChildQtyControls) {

      var optionQtyMessage = jQuery('#qty_controls_msg');
      var optionStep = Number(jQuery('#prod_opt' + vOpt + ' :selected').attr("data-step"));
      var optionMin = Number(jQuery('#prod_opt' + vOpt + ' :selected').attr("data-min"));
      var optionMax = Number(jQuery('#prod_opt' + vOpt + ' :selected').attr("data-max"));
      var optionInitVal = Number(jQuery('#prod_opt' + vOpt + ' :selected').attr("data-initval"));

      if (optionMin > 0) {
      jQuery('#qty_box').attr("min", optionMin);
      sQtyControlsText += sMinQtyMessage.replace("", optionMin) + " "
      } else {
      jQuery('#qty_box').attr("min", "0");
      }

      if (optionMax > 0) {
      jQuery('#qty_box').attr("max", optionMax);
      sQtyControlsText += sMaxQtyMessage.replace("", optionMax) + " "
      } else {
      jQuery('#qty_box').attr("max", "");
      }

      if (optionStep > 0) {
      jQuery('#qty_box').attr("step", optionStep);
      if (optionStep != 1) {
      sQtyControlsText += sIncrementQtyMessage.replace("", optionStep);
      }
      } else {
      jQuery('#qty_box').attr("step", "0");
      }

      jQuery("#qty_box").val(optionInitVal);

      optionQtyMessage.html(sQtyControlsText);

      } //if (bValidateQtyControls && bUseChildQtyControls) {
      } //function updateQtyControls() {

      function initModalLinks(sContainer) {

      }

      // This function should not be called directly; it should be used through initModalLinks or initImagePopup.
      function initializeThickbox(sContainer) {
      var aContainers = (sContainer || 'body').split(',');

      for (var i = 0; i ').html(value).text();
      } else {
      return '';
      }
      }

      /**
      * Draw UOM Table
      *
      * @author johns
      * @since 3/17/2011
      * @param sPKey string - the key of the product we are looking at
      * oData object - object containing the data from the ajax call
      *
      * @return UOM Table HTML
      */
      function fncDrawUOM(sPKey, oData) {
      try {

      /*
      * if the product price is blank, then exit the function
      */
      if (oData.price == ' ') {
      sUOMHtml = '';
      return sUOMHtml;
      }

      /*
      * var containing html table structure to displayed containing the data
      */
      var sUOMHtml = '';
      var sQtyPerUnitColumn = '';

      /*
      * make sure at least one of the show uom booleans is true
      */
      if (bShowSalesUOM || bOnlyShowSalesUOM || bShowAdditionalSalesUOM) {

      /*
      * display title and hidden fields for the product
      */
      sUOMHtml += '

      Add to Cart

      ';

      if ('uomStd' in oData) {
      sUOMHtml += '';
      }

      if ('uomSales' in oData) {
      sUOMHtml += '';
      sUOMHtml += '';
      sUOMHtml += '';
      }

      if (bShowNativeUOMinCart && 'uomSales' in oData) {
      sUOMHtml += '';
      }

      /*
      * determine whether or not to show the Qty Per Unit column
      */
      if (bShowQtyPerUnitColumn) {
      sQtyPerUnitColumn = '

      Qty Per Unit

      ';
      } //- if (bShowQtyPerUnitColumn)

      sUOMHtml += '

      ';
      sUOMHtml += '

      ' + sQtyPerUnitColumn + '

      ';

      if (bShowSalesUOM && !bOnlyShowSalesUOM) {

      /*
      * determine whether or not to show the Qty Per Unit column
      */
      if (bShowQtyPerUnitColumn) {
      sQtyPerUnitColumn = '

      ';
      } //- if (bShowQtyPerUnitColumn)

      /*
      * draw Standard UOM row
      */
      if ('uomStd' in oData) {

      sUOMHtml += '

      ' + sQtyPerUnitColumn + '

      ';

      } //- if ('uomStd' in oData)

      if ('uomSales' in oData) {

      if (oData.uomSales != '' && oData.uomSalesConversion > 1 && oData.uomSales != oData.uomStd) {

      /*
      * determine whether or not to show the Qty Per Unit column
      */
      if (bShowQtyPerUnitColumn) {
      sQtyPerUnitColumn = '

      ';
      } //- if (bShowQtyPerUnitColumn)

      if (typeof oData.uomSalesUnitPrice == 'undefined') {
      iUnitPrice = 0;
      } else {
      iUnitPrice = oData.uomSalesUnitPrice
      } //- if (typeof oUomConfig.uomSalesUnitPrice == 'undefined')

      /*
      * draw UOM Sales row
      */
      sUOMHtml += '

      ' + sQtyPerUnitColumn + '

      '

      } //- if ('uomSales' in oData && 'uomSalesConversion' in oData)3

      } //- if ('uomSales' in oData)

      if (bShowAdditionalSalesUOM) {

      if ('uomAdditional' in oData && oData.uomAdditional.length > 0) {

      /*
      * draw additional uom rows
      */
      for (var iCounter = 0, iGoTo = oData.uomAdditional.length; iCounter = 1) {
      iQty = iUOMConversion
      } //- if (iUOMConversion ' + iQty.toFixed() + '';
      } else {
      sQtyPerHTML = ''
      } //- if (bShowQtyPerUnitColumn)

      if (typeof oUomConfig.unitPrice == 'undefined') {
      iUnitPrice = 0;
      } else {
      iUnitPrice = oUomConfig.unitPrice;
      } //- if (typeof oUomConfig.unitPrice == 'undefined')

      /*
      * build the html w/ hidden inputs
      */
      sUnitHTML = oUomConfig.unit + '';
      sPriceHTML = '$' + parseFloat(iUnitPrice).toFixed(2) + '';

      sUOMHtml += '

      ' + sQtyPerHTML + '

      '

      } //- if (typeof oUomConfig != 'undefined' && typeof oUomConfig.conversion != 'undefined')

      } //- for (var i = 0, goTo = oProdInfo.documents.length - 1; i 1'
      }

      sUOMHtml += '

      ' + sQtyPerUnitColumn + '

      '

      } //- if (bShowSalesUOM)

      sUOMHtml += '

      ' + sUnitHeader + ' ' + sUnitPriceColumnLabel + ' Qty
      1
      ' + oData.uomStd + ' ' + oData.price + ' ';

      sUOMHtml += fncDrawQtyBox(sPKey, oData.qtyDisplayType, oData.uomStd, '');

      sUOMHtml += '

      ' + oData.uomSalesConversion + '
      ' + oData.uomSales + ' $' + parseFloat(iUnitPrice).toFixed(2) + ' ';

      sUOMHtml += fncDrawQtyBox(sPKey, oData.qtyDisplayType, oData.uomSales, 'sales_');

      sUOMHtml += '

      ' + sUnitHTML + ' ' + sPriceHTML + ' ';

      sUOMHtml += fncDrawQtyBox(sPKey, oData.qtyDisplayType, oUomConfig.conversion, 'uom' + sThisUom + '_');

      sUOMHtml += '

      ' + oData.uomSales + ' $' + parseFloat(oData.uomSalesUnitPrice * oData.uomSalesConversion).toFixed(2) + ' ';

      sUOMHtml += fncDrawQtyBox(sPKey, oData.qtyDisplayType, oData.uomSales);

      sUOMHtml += '

      '

      /*
      * Add to Cart button
      */
      if (bUseBootStrap) {
      sUOMBtn = "btn btn-primary"
      } else {
      sUOMBtn = "btn_addtocart chrome"
      }

      if (oData.showCart) {
      sUOMHtml += '';
      }

      } //- if (bShowSalesUOM || bOnlyShowSalesUOM || bShowAdditionalSalesUOM)

      return sUOMHtml;

      } catch (err) {

      alert('function: fncDrawUOM - ' + err.message);
      return '';

      }

      } //- function fncDrawUOM(sPKey, oData)

      /**
      * Draw Qty Box for UOM Table
      *
      * @author johns
      * @since 3/17/2011
      *
      * @returns void
      */
      function fncDrawQtyBox(sPKey, sQtyDisplayType, sEachField, sPrefix) {
      try {

      /**
      * Qty Input Display var
      */
      var sQtyInputHtml = '';
      if (typeof sPrefix === 'undefined') {
      sPrefix = '';
      }

      if (bUseQtyByUnitQtyDisplay) {

      if (sQtyDisplayType == 'sets') {

      sQtyInputHtml += ' @';

      sQtyInputHtml += ' ' + sEachField + ' (s) each.';

      } else {
      sQtyInputHtml += ''
      } //- if (oData.qtyDisplayType == 'sets')

      } else {
      sQtyInputHtml += ''
      }

      return sQtyInputHtml;

      } catch (err) {

      alert('function: fncDrawQtyBox ' + err.message);
      return '';

      }

      } //- function fncDrawQtyBox(sPKey, oData, sEachField)

      /*
      * This will build out the Cart Options with comments
      * @auther - vinayakj
      * @since - 8/28/2012
      */
      function buildCartOptWithComments(rowkey,sCartOptions,RowID) {

      if (jQuery('#parent_p_key').val() != '' && jQuery('#parent_p_key').val() !== undefined) {
      rowkey = jQuery('#parent_p_key').val();
      } else {
      rowkey = jQuery('#keys').val();
      }

      if (bUseChildCartOpts || bShowCartOpts) {
      buildCartOpt(rowkey);
      }
      } //- function buildCartOptWithComments(rowkey,sCartOptions,RowID)

      function buildCartOption(PKey, sOptions, Num) {

      /*
      * Get the cart options
      */
      aCartOpts = sOptions.split("|");

      /*
      * Clear the cart option container and start building it
      * with the new cart options
      */
      jQuery('#pc_cart_options_' + Num).remove('.atc').html('');

      var aOptInputs = Array();
      var aLimitIds = Array();

      /*
      * Loop all the cart options, and append each to the cart
      * option container.
      */
      for (var iOpt = 0, goTo = aCartOpts.length; iOpt = 4) {
      sCharLimit = aCartOpt[4];
      } //- if (aCartOpt.length >= 4)

      /*
      * Character Limit Logic
      */
      bUseLimit = (sCharLimit != '0' && sCharLimit != '' ? true : false);

      /*
      * Input Id
      */
      sOptId = 'cart_opt_' + iOpt + '_' + PKey;

      /*
      * Begin building this option
      */
      sHtml = '

      switch (sType) {

      case 'select':
      sJsEvent = 'change';

      sHtml += '';
      sHtml += getCartOptOptions(sAnswers);
      sHtml += '';
      break;

      case 'text-area':
      sJsEvent = 'blur';

      sHtml += '';
      break;

      default:
      sJsEvent = 'blur';

      sHtml += '';
      break;

      } //- switch (sType)

      /*
      * Add the character limit message
      */
      if (bUseLimit) {
      sHtml += '

      You have ' + sCharLimit + ' characters left.

      ';
      }

      sHtml += '';

      /*
      * Append the option to the container
      */
      jQuery('#pc_cart_options_' + Num).append(sHtml);

      /*
      * Register char counter event listener
      */
      if (bUseLimit) {
      jQuery('#' + sOptId).live('keyup', {optId: sOptId, optLimit: sCharLimit}, function (event) {
      limitChars(event.data.optId, event.data.optLimit, event.data.optId + '_limit');
      });
      }

      /*
      * Register input event listener
      */
      jQuery('#' + sOptId).live(sJsEvent, {optId: sOptId, pkey: PKey}, function (event) {
      buildCartOpt(event.data.pkey);
      });

      } //- for (var iOpt = 0, goTo = aCartOpts.length; iOpt ');

      } //- function buildCartOption(PKey, sOptions, Num)

      function getCartOptOptions(sAnswers) {

      aAnswers = sAnswers.split(";");

      sHtml = '[Select One]';
      for(i = 0, goTo = aAnswers.length; i ' + aAnswers[i] + '';
      }

      return sHtml;

      }//-getCartOptOptions

      function limitChars(textid, limit, infodiv) {
      var text = jQuery('#' + textid).val();
      var textlength = text.length;

      if (textlength > limit) {
      jQuery('#' + infodiv).html('You cannot write more then '+limit+' characters!');
      jQuery('#' + textid).val(text.substr(0,limit));
      return false;

      } else {

      jQuery('#' + infodiv).html('You have '+ (limit - textlength) +' characters left.');
      return true;
      }
      }//-function limitChars

      function fncProcessSizeProduct() {
      /*
      * if you need to use the thickbox for displaying, add the identifier to the list
      * at the bottom of this function to prevent "tb_init()" from being called multiple
      * times causing multiple instances of the window
      * @author johns
      * @since 01/31/2013
      *
      * @modified johns
      * @since 02/12/2013
      * @note If you are just updating an anchor tag, then just add the selector
      * to the list at the bottom of this function. If you are actually
      * building the anchor tag, then call the initModalLinks/initImagePopup function
      * and pass the specific selector in a call to the initModalLinks/initImagePopup
      * function.
      */

      try{

      var sPKey = jQuery('#prod_opt2').val();
      var oProdInfo = window.oChildProds[sPKey];

      if (sPKey == '') {
      hideProductContainer();
      return false;
      }

      jQuery('#qty_box').attr('name', 'qty_' + sPKey);
      jQuery('#keys').val(sPKey);

      /*
      * Test if this is the "last" droplist being displayed
      */
      if (jQuery('#pc_cart_options_2').length > 0) {

      jQuery('#pc_cart_options_2').slideDown();

      /*
      * Change name to post item to the cart
      */
      jQuery('#cart_option_419FF584B7504FFF8FB66D3641759FDD').attr('name','cart_option_' + sPKey);

      } //- if (jQuery('#pc_cart_options_2').length > 0)

      /*
      * SKU
      */
      if (bShowSku) {
      jQuery('#sku_container').html(sSkuLabel + oProdInfo.sku);
      }

      if (bShowName) {
      jQuery('#child_nm_container').html('Name: ' + oProdInfo.name);
      }

      if (bUseChildDescriptionMain) {
      jQuery('#child_ds_container').html('Description: ' + oProdInfo.description);
      }

      /*
      * Cart
      */
      if (oProdInfo.showCart) {
      jQuery('#atc_container').show();
      } else {
      jQuery('#atc_container').hide();
      } //- if (oProdInfo.showCart)

      /*
      * Unit of Measure
      */
      if ('uomHTML' in oProdInfo && oProdInfo.uomHTML != '') jQuery('#detail_atc_standalone').html(oProdInfo.uomHTML);

      /*
      * Price
      */

      if (oProdInfo.showPrice) {

      iRetailPrice = parseFloat(oProdInfo.retail_price.replace('$',''));
      iPrice = parseFloat(oProdInfo.price.replace('$',''));

      if (iPrice

    • ' + oProdInfo.price + '
    • List Price: ' + oProdInfo.retail_price + '
    • You Save: ' + Math.round(iPercentSaved * 100) / 100 + '%

    ');
    } else {
    jQuery('#price_container').html('

    • ' + oProdInfo.price + '
    • List Price: ' + oProdInfo.retail_price + '
    • You Save: ' + Math.round(iPercentSaved * 100) / 100 + '%

    ');
    }
    } else {
    if (true) {
    jQuery('#price_container').html('

    • ' + oProdInfo.price + '
    • List Price: ' + oProdInfo.retail_price + '

    ');
    } else {
    jQuery('#price_container').html('

    • ' + oProdInfo.price + '
    • List Price: ' + oProdInfo.retail_price + '

    ');
    }
    } //- if (1)
    } else {
    jQuery('#price_container').html('

    • ' + FormatCurrency(oProdInfo.price, true) + '

    ');
    } //- if (iPrice

    ')
    } //- if (bShowBackOrderMessage)

    // Check for a child description override
    applyChildDescription(oProdInfo);

    if (bUseProductAliases && jQuery.trim(oProdInfo.pa_key) != '') {

    jQuery('#pa_id').val(oProdInfo.pa_key);
    jQuery('#pa_id').attr('name','pa_id_' + sPKey);

    } //- if (bUseProductAliases && jQuery.trim(oProdInfo.pa_key) != '')

    /*
    * Inventory
    */
    if (oProdInfo.showInventory) {

    jQuery('#idp_container').html(oProdInfo.invMsg);

    } //- if (oProdInfo.showInventory)

    if (bShowFavoriteLink && bShowChildFavoriteLink) {
    addFavoritesLink();
    }

    /*
    * Displaying Config Data
    * @auther - vinayakj
    * @since - 5/2/2012
    */
    if (bShowProdConfig) {

    if ('prod_config_droplist' in oProdInfo) {
    jQuery('#config_sections_container').html(htmlDecode(oProdInfo.prod_config_droplist));
    } else {
    jQuery('#config_sections_container').html('');
    }

    /*
    * Put Config Keys
    */
    if ('config_keys' in oProdInfo) {
    jQuery('#config_keys').val(oProdInfo.config_keys);
    }

    /*
    * Put use_parent_key
    */
    if ('use_parent_key' in oProdInfo) {
    jQuery('#use_parent_key').val(oProdInfo.use_parent_key);
    }

    /*
    * Put show_config_sections
    */
    if ('show_config_sections' in oProdInfo) {
    jQuery('#show_config_sections').val(oProdInfo.show_config_sections);
    }

    } //- if (bShowProdConfig)

    /*
    * reinitialize Thickbox after modifying the DOM; make this call only once to
    * prevent multiple instances of the window from showing
    * @author johns
    * @since 01/31/2013
    */
    if (bInitThickbox) {
    initModalLinks('#idp_container,#qtypricing');
    initImagePopup('#detail_photo_container');
    bInitThickbox = false;
    }

    updateQtyControls(2);

    } catch (oError) {
    alert("fncProcessSizeProduct-" + oError.message);
    hideProductContainer();
    }

    }//-function fncProcessSizeProduct

    function fncSelectAddon() {
    //Update Design Key & Qty
    document.getElementById('design_keys_' + sGroup).value = sDesignKey;
    document.getElementById('design_qty_' + sGroup).name = 'ED8EF1597D7F4D0797F652145C64714C_' + sDesignKey + '_qty';
    }

    function InArray(vArray, vValue) {
    for (var iOpt = 0; iOpt document.body.offsetHeight) { // all but Explorer Mac
    oLBG.style.width = document.body.scrollWidth;
    oLBG.style.height = document.body.scrollHeight;
    } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
    oLBG.style.width = document.body.offsetWidth;
    oLBG.style.height = document.body.offsetHeight;
    }

    if (self.innerHeight) { // all except Explorer
    oLPic.style.left = (self.innerWidth / 2) - (popwidth / 2);
    oLPic.style.top = self.pageYOffset + (self.innerHeight / 4);
    } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
    oLPic.style.left = (document.documentElement.clientWidth / 2) - (popwidth / 2);
    oLPic.style.top = document.documentElement.scrollTop + (document.documentElement.clientHeight / 4);
    } else if (document.body) { // other Explorers
    oLPic.style.left = (document.body.clientWidth / 2) - (popwidth / 2);
    oLPic.style.top = document.body.scrollTop + (document.body.clientHeight / 4);
    }

    oLBG.style.display = 'block';
    oLPic.style.display = 'block';

    }

    function HideLoading() {
    document.getElementById('detailloadingbg').style.display = 'none';
    document.getElementById('detailloadingpic').style.display = 'none';
    fncEnableDroplistForm();
    }

    function createXMLDoc(XMLFile) {
    // code for IE
    if (window.ActiveXObject) {
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.loadXML(XMLFile);
    // code for Mozilla, Firefox, Opera, etc.
    } else if (document.implementation && document.implementation.createDocument) {
    //xmlDoc = document.implementation.createDocument("", "", null);
    var parser = new DOMParser();
    var xmlDoc = parser.parseFromString(XMLFile, "text/xml");
    } else {
    alert('Your browser cannot handle this script.');
    }

    return(xmlDoc);
    }

    function getNodeValue(xmlDoc, tagName, index) {
    if (xmlDoc.getElementsByTagName(tagName)[index].childNodes[0] != null)
    return xmlDoc.getElementsByTagName(tagName)[index].childNodes[0].nodeValue;
    else
    return '';
    }

    function MakeAJAXRequest(fncHandleData, strPage, bAsync, aShow, aHide, bDisable, errorMsg, xmlDoc, vID) {
    ResizeLoadingBG();
    xmlHttp = GetXmlHttpObject();
    if (xmlHttp == null) {
    alert ("Your browser does not support AJAX.");
    return;
    }

    if (bDisable == null) {
    bDisable = false;
    }

    var i;

    try{
    if (aShow != null) {
    for (i = 0; i -1) || (keychar == '.' && !bAllowDecimals)) {
    //alert('only one deicmal');
    return false;

    // numbers
    } else if (("0123456789.").indexOf(keychar) > -1) {
    //alert('numbers');
    return true;

    // isNaN
    } else if (isNaN(myfield.value)) {
    //alert('isNaN');
    myfield.value = '';
    return false;

    } else {
    //alert('Else');
    return false;
    }
    }

    // Open lightbox
    function fncDrawFindPopup(popwidth,popheight,searchtype,showsearch,key,qstring) {
    //document.getElementById('lb_open_type').value = searchtype;

    //var ckey = childkey.replace('?', '');

    lightbox_pageScrollX = document.body.scrollLeft;
    lightbox_pageScrollY = document.body.scrollTop;
    lightbox_bIsOpen = true;

    document.getElementById('popup').style.width=popwidth + 'px';
    document.getElementById('popup').style.height=popheight + 'px';

    document.getElementById('lostfocus').style.display = 'block';
    document.getElementById('popup').style.display = 'block';

    lightbox_Position();

    document.getElementById('searchtype').value=searchtype;
    //document.getElementById('lightbox_header').innerHTML=header;
    document.getElementById('popup_search_text').value='';
    document.getElementById('popupdesc').innerHTML='';

    if (showsearch == '0') {
    document.getElementById('popup_search_section').style.display='none';
    }

    // Fix IE for DTD 4.0
    if (ie && document.documentElement && document.compatMode == 'CSS1Compat') {
    document.getElementById('popup_search_results_container').style.height = (document.getElementById('popup_search_results_container').offsetHeight - 1 - (document.getElementById("popupheader").offsetHeight + document.getElementById("popupdesc").offsetHeight + document.getElementById("popup_search_section").offsetHeight)) + 'px';
    }

    document.getElementById('lostfocus').style.visibility = 'visible';
    document.getElementById('popup').style.visibility = 'visible';

    //document.getElementById('popup_search_results').innerHTML = ''
    GetResults('tieline-bridge-it-pro-low-cost-stereo-ip-codec-with-aac.asp',key,qstring);
    }

    // Create an XMLHttpRequest object
    function createRequestObject() {
    var request_o;
    var browser = navigator.appName;

    if (browser == "Microsoft Internet Explorer") {
    request_o = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
    request_o = new XMLHttpRequest();
    }
    return request_o;
    }

    // AJAX call for Lightbox
    function GetResults(pagename,key,qstring) {
    document.getElementById('popup_search_results').innerHTML = '

    Loading page. Please wait...

    ';
    var requestUrl = 'i_i_' + pagename + '?' + qstring + '&key=' + key;
    http = createRequestObject();
    http.open('get', requestUrl);
    http.onreadystatechange = WriteResults;
    http.send(null);
    }

    // Content for Lightbox
    function WriteResults() {
    if (http.readyState == 4) { //Finished loading the response
    var response = http.responseText;

    document.getElementById('popup_search_results').innerHTML = response;
    }
    }

    // Close Lightbox
    /* function lightbox_LostFocus() {
    lightbox_bIsOpen = false;
    document.getElementById('lostfocus').style.visibility='hidden';
    document.getElementById('popup').style.visibility='hidden';
    document.getElementById('lostfocus').style.display='none';
    document.getElementById('popup').style.display='none';
    //GetODTs(); //Use if refreshing a DDT.
    }
    */
    function FormatCurrency(num, useSign) {
    num = num.toString().replace(/$|,/g,'');
    if (isNaN(num))
    num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100+0.50000000001);
    cents = num%100;
    num = Math.floor(num/100).toString();
    if (cents ');

    //lroselli 2/21/2013 Enables Thumb Child Pic to show
    if (bShowThumbCartOpts) {
    var sHTML = "

    -

    ";
    } else {
    var sHTML = "";
    }

    sHTML = sHTML + '

    '; //qty
    sHTML = sHTML + '

    -

    '; //qty

    if (bShowCartOpts) {
    aCartOpts = sCartOptions.split("|");

    for (var iCartOptCounter = 0, iCartOptGoTo = aCartOpts.length - 1; iCartOptCounter ' + sCartOpts[1] + ''; //cart option
    } catch(err) {
    alert(err.message);
    }
    }
    }

    sHTML = sHTML + '

    -

    '; //price
    sHTML = sHTML + '

    Remove

    '; //remove

    jQuery('#' + rowkey).append(sHTML);

    }

    var row;
    var pSelect;
    var pOption;

    jQuery('#cart_option_rows').children().each(function () {

    /*
    * check for rows that have not had the Product drop list built
    * row = tbody.childNodes[i];
    */
    id = jQuery(this).attr('id');
    pSelect = '';

    if (!document.getElementById('keys_' + id)) {

    pSelect += '';
    pSelect += '';
    pSelect += '[Select One]';

    /*
    * starting at 1 because the first item in the array is an empty object so that we can keep the selectIndex matched up with the products
    */
    for (var x = 1; x ';
    pSelect += childItems[x].nm + '';
    } //- for (var x=1; x 0) {
    for (var r = rowsToRemove.length - 1; r >= 0; r--)
    {
    if (document.getElementById(rowsToRemove[r])) {
    tbody.removeChild(document.getElementById(rowsToRemove[r]));
    }
    }

    alert('All valid selections have been added to the cart. Please review the remaining items.');
    }

    HideLoading();
    return false;
    } else{
    setTimeout('gotoCart()',1000);
    //window.location = "showcart.asp";
    return false;
    }
    } catch (err) {
    alert('error: ' + err.mesage);
    return false;
    }
    }

    var goto_count = 0;
    function gotoCart() {

    if (ajax_count == 0 || goto_count == 2) {
    window.location = "https://proaudio.com/showcart.asp";

    }
    else{
    goto_count++;
    setTimeout('gotoCart()',1000);

    }
    }

    function randomString() {
    var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ";
    var string_length = 12;
    var randomstring = '';
    try
    {
    for (var i=0; i 0) {
    if (trim(childItems[document.getElementById('keys_' + vRowID).selectedIndex].qtybreaks)!='') {
    try{
    var xmlBreaks = createXMLDoc(childItems[document.getElementById('keys_' + vRowID).selectedIndex].qtybreaks);

    if (xmlBreaks.documentElement.childNodes.length > 0) {
    try{
    for (var iNode = 0; iNode = iNodeQty) {
    cFinalUnitPrice = getNodeValue(xmlBreaks, 'Price', iNode);
    } else if (iQty ';
    document.getElementById('price_' + vRowID).innerHTML = sHTML;
    }
    else
    {
    sTitle = "tip1"

    sHTML = '';
    document.getElementById('price_' + vRowID).innerHTML = sHTML;
    }
    }
    else
    {
    document.getElementById('price_' + vRowID).innerHTML = FormatCurrency(cFinalUnitPrice, true);
    }

    // - End pijushb - 03/04/2011 - identiphoto - Set the Price based on Price Display Type
    // and User Login session.

    }

    function loadOptions(oSelect) {

    //oSelect is the drop list of child products
    var rowkey = oSelect.id.substring(5); //extract the id, remove the "keys_" prefix

    //jQuery('#row_id' + rowkey).data('rowid', jQuery('#keys_' + rowkey).val());

    try {
    if (oSelect.selectedIndex ' + sCartOpt[1] + '';
    }
    }
    } else {
    var cinput;
    //load the selection
    // create qty input: named qty_

    sInputPKey = jQuery('#keys_' + rowkey).val();

    jQuery('#' + rowkey + '_rand_val').attr('name', sInputPKey + '_rand_val');

    jQuery('#td_' + rowkey).html('');

    /*
    * show price (use a bool option here?)
    */
    var cPrice = childItems[oSelect.selectedIndex].price;

    //lroselli 2/21/13 - Gets Thumb Picture
    if (bShowThumbCartOpts) {
    var sCartThumb = childItems[oSelect.selectedIndex].thumb;
    var sCartLargePic = childItems[oSelect.selectedIndex].lg_pic;
    var sCartOptName = childItems[oSelect.selectedIndex].nm;

    if (sCartThumb == "" || sCartThumb == "NULL") {
    jQuery('#thumb_' + rowkey).html("-");
    } else {
    if (sCartLargePic == "" || sCartLargePic == "NULL") {
    jQuery('#thumb_' + rowkey).html("");
    } else {
    jQuery('#thumb_' + rowkey).html(buildLinkedImage(sCartOptName, sCartThumb, sCartLargePic));
    initImagePopup('#thumb_' + rowkey);
    }
    }
    }

    //childItems[oSelect.selectedIndex].qtybreaks
    /*
    * Begin pijushb - 03/04/2011 - identiphoto - Set the Price based on Price Display Type
    * and User Login session.
    */
    var bShowATCPrice = false;
    var bShowRegPrice = false;
    var bShowATCQty = true;

    if (bShowPriceDisplayType) {

    switch (sPriceDisplayType) {
    case 'hide':
    jQuery('#price_' + rowkey).html("-");
    break;
    case 'show_message':
    jQuery('#price_' + rowkey).html(sPriceMessage);
    break;

    case 'require_atc':
    bShowATCPrice = true;
    break;

    case 'require_login_or_atc':

    bShowATCPrice = true;

    break;

    /*
    * pijushb 03/11/2011 - Add new case condition for IDENTIPHOTO
    */
    case 'require_login_for_price_and_atc':

    bShowATCPrice = false;
    bShowATCQty = false;

    break;

    default:
    bShowRegPrice = true;
    break;

    } //- switch (sPriceDisplayType)

    } //- if (bShowPriceDisplayType)

    if (bShowPriceDisplayType) {
    if (bShowRegPrice) {
    jQuery('#price_' + rowkey).html(FormatCurrency(cPrice, true));
    } else if (bShowATCQty) {

    sTitle = "tip1"

    sHTML = '';
    jQuery('#price_' + rowkey).html(sHTML);
    } else {
    sTitle = "tip1"

    sHTML = '';
    jQuery('#price_' + rowkey).html(sHTML);
    }
    } else {
    jQuery('#price_' + rowkey).html(FormatCurrency(cPrice, true));
    }

    if (bShowCartOpts) {
    aCartOpts = sCartOptions.split('|');

    if (aCartOpts.length > 0) {

    for (var iCartOptCounter = 0, iCartOptGoTo = aCartOpts.length - 1; iCartOptCounter ';
    } //- if (bCartOptionsRqd)

    /*
    * determine which html element to build for the current cart option
    */
    switch (sCartOpt[2]) {
    case 'select':
    sCartOptInput = '' + sRqdHiddenField;
    break;

    case 'text-area':
    sCartOptInput = '' + sRqdHiddenField;
    break;

    default:
    sCartOptInput = '' + sRqdHiddenField;
    break;
    } //- switch (sCartOpt[2])

    /*
    * add the current cart option to the table
    */
    jQuery('#cart_opt_td_' + iCartOptCounter + '_' + rowkey).html(sCartOptInput);
    } //- for (var iCartOptCounter = 0, iCartOptGoTo = aCartOpts.length - 1; iCartOptCounter ');

    } //- if (aCartOpts.length > 0)

    } //- if (bShowCartOpts)

    } //- if (oSelect.selectedIndex ');
    }

    if (aCartOpt[1].length > 0 && aCartOpt[1] !== '') {
    cinput += aCartOpt[1] + sCartOptDelim + cart_opt_value;
    } else {
    cinput += cart_opt_value;
    }

    } //- if (document.getElementById('cart_opt_' + iCOpt + '_' + rowkey).value != '')

    } //- for (var iCOpt = 0, goTo = aCartOpts.length - 1; iCOpt 0) {
    jQuery('#cart_option_' + rowkey).val(cinput);
    }

    } catch (err) {
    alert('Unable to build cart options. ' + err.mesage);
    //console.log('Unable to build cart options. ' + err.mesage);
    }
    }

    function hideProductContainer() {

    if (document.getElementById('sku_container'))
    document.getElementById('sku_container').innerHTML = '';

    if (document.getElementById('child_nm_container'))
    document.getElementById('child_nm_container').innerHTML = '';

    if (document.getElementById('child_ds_container'))
    document.getElementById('child_ds_container').innerHTML = '';

    if (document.getElementById('price_container'))
    document.getElementById('price_container').innerHTML = '';

    if (document.getElementById('idp_container'))
    document.getElementById('idp_container').innerHTML = '';

    if (document.getElementById('atc_container'))
    document.getElementById('atc_container').style.display = 'none';

    hideChildProductInputs();
    }

    function hideChildProductInputs() {

    if (document.getElementById('child_cart_section'))
    document.getElementById('child_cart_section').style.display = 'none';

    for (var iCO=0; iCO

    Loading Data...

    ');
    },
    success: function (sData) {
    if (sData !== '') {

    // if there are config sections with choices setup, insert the html into the new row
    jQuery('#config_sections_' + sKey + ' td').html(sData);
    $oLink.parent().prepend('');
    jQuery('#input_qty_config_sections_' + sKey).remove();

    } else {

    // if there are no config sections with choices setup, then remove the new row, remove the "Options" link, and draw out the input qty box
    jQuery('#config_sections_' + sKey).remove();
    $oLink.parent().prepend('');
    jQuery('#input_qty_config_sections_' + sKey).remove();

    }
    }
    });

    /*
    * global vars used in holding info about the production configurations (BOM) and their source
    * added for product configurations (BOM) support in the input-qty view
    * johns - 08/13/2013
    */
    oProdConfigData = { key: sKey, configkey: sConfigKey };
    aProdConfigData.push(oProdConfigData);
    } //- function fncLoadConfigSections(oLink)

    jQuery(function () { // dom ready

    var sProdOpt1 = '';

    if (sChildProductOpt1 !== '') {
    if (sChildDisplay == 'droplist-one') {
    sProdOpt1 = sChildProductKey;
    } else {
    sProdOpt1 = sChildProductOpt1;
    }
    } else {
    sProdOpt1 = '';
    }

    if (sProdOpt1 !== '') {
    jQuery('#prod_opt1').val(sProdOpt1);
    }

    /**
    * load the default # of rows for the add-row view
    * cart options
    */
    if (bIsParentProduct && sChildDisplay == 'add-row') {

    /*
    * initially add 2 rows
    */
    addChildRows(2);
    }

    /*
    * determine which view to load
    */
    switch (sChildDisplay) {
    case 'matrix-one':
    fncColorSizes(false);
    break;
    case 'droplist-one':

    fncProcessOptProduct(1);

    break;
    case 'droplist-two':
    fncGetOptDroplist(2, false, 2);
    break;
    case 'droplist-three':
    fncGetOptDroplist(2, true, 3);
    break;
    case 'droplist-four':
    fncGetOptDroplist(2, true, 4);
    break;
    case 'droplist-five':
    fncGetOptDroplist(2, true, 5);
    break;
    case 'droplist-six':
    fncGetOptDroplist(2, true, 6);
    break;
    default:
    break;
    }

    if (document.getElementById('pc_cart_options_0')) {
    jQuery('#pc_cart_options_0').slideDown();
    }

    /* ==============================================
    * Event Handlers
    * ============================================== */

    if (bProductConfiguratorShowBasePrice) {
    if (jQuery('#formbuilder_container :input:not(:text, textarea, :disabled)').length != 0) {
    if (jQuery('#qtypricing').length == 0) {
    jQuery('#formbuilder_container').after('

    • ' + sProductConfiguratorPriceText + ' (Calculating)

    ');
    } else {
    jQuery('#formbuilder_container').after('

    • ' + sProductConfiguratorPriceText + ' (Calculating)

    ');
    }
    }
    }

    addCommas = function (input) {
    // If the regex doesn't match, `replace` returns the string unmodified
    return (input.toString()).replace(
    // Each parentheses group (or 'capture') in this regex becomes an argument
    // to the function; in this case, every argument after 'match'
    /^([-+]?)(0?)(d+)(.?)(d+)$/g, function (match, sign, zeros, before, decimal, after) {
    // Less obtrusive than adding 'reverse' method on all strings
    var reverseString = function (string) {
    return string.split('').reverse().join('');
    };

    // Insert commas every three characters from the right
    var insertCommas = function (string) {
    // Reverse, because it's easier to do things from the left
    var reversed = reverseString(string);

    // Add commas every three characters
    var reversedWithCommas = reversed.match(/.{1,3}/g).join(',');

    // Reverse again (back to normal)
    return reverseString(reversedWithCommas);
    };

    // If there was no decimal, the last capture grabs the final digit, so
    // we have to put it back together with the 'before' substring
    return sign + (decimal ? insertCommas(before) + decimal + after : insertCommas(before + after));
    }
    );
    };

    /*
    * Register Addon Product select list
    */
    jQuery('#addon_products').change(function () {
    fncUpdateAddonsSelectQty(this);
    });

    /*
    * Update addon product (needed due to page caching)
    */
    if (bUseAddonProducts) {
    if (jQuery('#addon_products').length > 0) {
    fncUpdateAddonsSelectQty(jQuery('#addon_products')[0]);
    }
    }

    /*
    * Register Addon Product Checkboxes
    */
    jQuery('#addon_product_container input:checkbox').click(function () {
    jQuery('#addon_qty_container').html('');

    jQuery('#addon_product_container input:checked').each(function () {
    jQuery('#addon_qty_container').append('')
    });
    });

    /*
    * Register AJAX Add To Cart Window Close Button
    */
    jQuery('#atc_msg_close_win').click(function (event) {
    event.preventDefault();
    closeCartLightbox();
    });

    jQuery('a[id^="input_qty_config_sections_"]').click(function (event) {
    event.preventDefault();
    fncLoadConfigSections (this);
    });

    var sPageName = 'tieline-bridge-it-pro-low-cost-stereo-ip-codec-with-aac.asp';

    // event handlers for UOM logic for the input qty view
    // johns - 8/6/2013
    jQuery('select[name^="uom_selected"]').bind('change', function () {
    sSelectedVal = jQuery(this).val();
    sProdKey = jQuery(this).data('key');
    sUomStd = jQuery(this).data('uomstd');

    if (sSelectedVal !== sUomStd) {
    jQuery('#uom_sales_' + sProdKey).val(sSelectedVal);
    jQuery('#uom_std_' + sProdKey).val('');
    jQuery(this).parent().prev('td.qty_price_breaks_container').text(jQuery(this).data('uomconvprice'));

    // added to post uom to the new cart [johns - 04/21/2014] jQuery('#multiplier_on_qty_display_' + sProdKey).remove();
    } else {
    jQuery('#uom_sales_' + sProdKey).val('');
    jQuery('#uom_std_' + sProdKey).val(sSelectedVal);
    jQuery(this).parent().prev('td.qty_price_breaks_container').text(jQuery(this).data('price'));

    // added to post uom to the new cart [johns - 04/21/2014] jQuery(this).after('');
    }

    if (bShowNativeUOMinCart) {
    jQuery('#order_uom_' + sProdKey).val(sSelectedVal);
    }

    if (jQuery('#uom_sales_' + sProdKey).val() !== '' && jQuery('#qty_' + sProdKey).val() !== '') {
    jQuery('#sales_qty_' + sProdKey).val(jQuery('#qty_' + sProdKey).val());
    }
    });

    jQuery('.qty_input_table input[name^="qty_"]').bind('change keyup', function () {
    sProdKey = jQuery(this).data('key');
    if (jQuery('#uom_sales_' + sProdKey).val() !== '') {
    jQuery('#sales_qty_' + sProdKey).val(jQuery(this).val());
    }
    });

    if (bUsePromotions && bUsePromoBarAtcModal){
    jQuery('#atc_msg').on('shown', function () {
    // The ticker cannot be started until the elements are visible.
    jQuery('#atc_promo_bar .notification-center').trigger('notification-center-added');
    });
    }

    /**
    * Rating Stars
    * - gets score from data attribute on container
    * @author jonr
    * @since 1/27/2014
    */
    jQuery('.raty').raty({
    path: 'templates/gfx/',
    space: false,
    readOnly: true,
    width: 90,
    hints: ['Bad', 'Poor', 'Good', 'Very Good', 'Excellent'],
    score: function () {
    return jQuery(this).attr('data-score');
    }
    });

    toggleSmartListSection();

    if (bConfiguratorEdit) {
    fncLoadConfigEdit(oConfiguratorEditData, dblConfiguratorEditQty);
    }

    $('#formbuilder_container').on('change', ':input:not(:text, textarea, :disabled, :hidden)', updateConfigPrices);

    // force HTML5 validation for the "step" attribute to not fire if the form has at least 1 input with step attribute set to a value > 1 [johns - 02/26/2016] $('form input').each(function() {
    if ($(this)[0].hasAttribute('step') && ( $(this).attr('step') !== '' || $(this).attr('step') > 0 )) {
    $('form').attr('novalidate', 'novalidate');
    return false;
    }
    });
    });

    function updateConfigPrices() {
    var dConfigPrice = 0;

    $('#formbuilder_container')
    .find(':input:checked, select :selected')
    .filter(':not(:disabled)')
    .each(function () {
    dConfigPrice += $(this).data('price') || 0;
    });

    var $price = bProductConfiguratorShowBasePrice ? $('#configurator_price') : $('li[class=saleprice]');
    var sPrice = (dblBasePrice + dConfigPrice).toFixed(iProductConfiguratorPriceDecimals);
    $price.html(sProductConfiguratorPriceText + " $" + addCommas(sPrice));
    }

    function fncLoadConfigEdit(oData, dQty) {
    var $form = jQuery('#formbuilder_container');

    for (choiceKey in oData.choices) {
    var choice = oData.choices[choiceKey];
    var $inputs = $form.find('[name="' + choice.name + '"]');
    var inputType = $inputs.first().attr("type");

    if (inputType === "checkbox" || inputType === "radio") {
    $inputs.filter('[value="' + choice.answer + '"]').prop('checked', true);
    } else {
    $inputs.val(choice.answer);
    }

    // Update display activators.
    $inputs.change();
    }

    jQuery('.qtyinput').val(dQty);
    updateConfigPrices();
    }

    // Toggles the visibility of the smart list section (stand-alone, not in advanced tabs)
    // based on whether the product has any information to show.
    function toggleSmartListSection() {
    var sKey = $('#keys').val();
    var $smartListContainer = $('#detail_smart_list');
    var bHistoryExists = $smartListContainer.find('.smart-list[data-product=' + sKey + ']').length > 0;

    //Hide the children rather than the entire container so product tabs
    //can hide the container when a smart list tab is showing.
    $smartListContainer.children().toggle(bHistoryExists);
    }

    function updateSmartListChildProduct() {
    var sChildKey = $('#keys').val();
    $('.smart-lists-container[data-product=' + sPKey + ']').trigger('child-product-changed', sChildKey);
    toggleSmartListSection();
    }

    /*
    * This function checks the global variable bUseChildDescription to see if it
    * should substitute the child description (from oProdInfo) for the current description.
    *
    * @author johns, ddara
    * @since 11/6/2010
    */
    function applyChildDescription(oProdInfo) {
    if (bUseChildDescription) {
    if (typeof oProdInfo.description !== 'string' || oProdInfo.description.trim() === '') {
    $('.detail_desc_full').hide();
    } else {
    $('.detail_desc_full').show();
    jQuery('.detail_desc_content').html(oProdInfo.description);
    }
    }
    }

    /*
    Collates an array of data pairs into an object with the first value from the pairs being
    keys in the object with the value being an array of all of that value's pair partners.
    e.g.
    [['a', 1], ['b', 2], ['a', 8]] yields
    {'a': [1, 8], 'b': [2]}
    */
    function collateArrayIntoObject(aPairs) {
    var sKey
    var sValue
    var oMapping = {};

    for (var i = 0; i b[bi]) {
    bi++;
    } else { /* they're equal */
    result.push(a[ai]);
    ai++;
    bi++;
    }
    }

    return result;
    }

    function updateDroplistPromoDisplay(sProductKey) {
    var aApplicablePromos = oTargetPromos[sProductKey] || [];
    var $promoPanels = $('.detail_cart .promo-panel');

    aApplicablePromos.sort();

    $promoPanels.each(function(panelIndex, element) {
    var $panel = $(this);
    var aPromos = $panel.data('promos').split(',');

    aPromos.sort();

    var bApplicable = intersectArrays(aApplicablePromos, aPromos).length > 0;
    $panel.toggleClass('faded', !bApplicable);
    });
    }

    function fncAddToSavedCartClick(event) {
    if (!fncFormSubmit(false)) {
    event.stopPropagation();
    }
    }

    WARNING: You will not be able to place an order or use most features of this site with JavaScript disabled

    Reviews

    There are no reviews yet.

    Be the first to review “Tieline Bridge-IT Pro... ”

    Your email address will not be published. Required fields are marked *