366 lines
9.6 KiB
JavaScript
366 lines
9.6 KiB
JavaScript
/************************************************/
|
|
/* IPB3 Javascript */
|
|
/* -------------------------------------------- */
|
|
/* ips.mobile.nexus.js - IP.Nexus mobile code */
|
|
/* (c) IPS, Inc 2008 */
|
|
/* -------------------------------------------- */
|
|
/* Author: Rikki Tissier */
|
|
/************************************************/
|
|
|
|
var nexus = {
|
|
|
|
guestCheckout: {
|
|
|
|
init: function(){
|
|
|
|
document.observe("dom:loaded", function(){
|
|
if( $('choose_path') ){
|
|
$('choose_path').show();
|
|
$('checkout_register_form').hide();
|
|
|
|
$('checkout_register').observe('click', function(e){
|
|
$('choose_path').hide();
|
|
$('checkout_register_form').show();
|
|
});
|
|
}
|
|
});
|
|
}
|
|
},
|
|
|
|
/********************************************/
|
|
/* General clientarea JS */
|
|
/********************************************/
|
|
clientArea: {
|
|
|
|
init: function(){
|
|
document.observe("dom:loaded", function(){
|
|
if( $('nexus_nav_toggle') && $('nexus_nav_menu') )
|
|
{
|
|
$('nexus_nav_toggle').observe('click', function(e){
|
|
Event.stop(e);
|
|
if( $('nexus_nav_menu').visible() ){
|
|
nexus.clientArea.hideNav(e);
|
|
} else {
|
|
nexus.clientArea.showNav(e);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
},
|
|
|
|
showNav: function(e){
|
|
var dims = $('nexus_nav_toggle').getDimensions();
|
|
var pos = $('nexus_nav_toggle').cumulativeOffset();
|
|
|
|
$('nexus_nav_menu').setStyle('width: ' + (dims['width']-2) + 'px; left: ' + pos['left'] + 'px; top: ' + ( pos['top'] + dims['height'] ) + 'px').show();
|
|
$('nexus_nav_toggle').addClassName('active');
|
|
},
|
|
|
|
hideNav: function(e){
|
|
$('nexus_nav_menu').hide();
|
|
$('nexus_nav_toggle').removeClassName('active');
|
|
}
|
|
},
|
|
|
|
/********************************************/
|
|
/* Checkout process */
|
|
/********************************************/
|
|
checkout: {
|
|
pay_url: '',
|
|
totalMethods: 0,
|
|
|
|
//----------------------------------------
|
|
// Init the checkout page
|
|
//----------------------------------------
|
|
init: function( pay_url ){
|
|
document.observe("dom:loaded", function(){
|
|
if( pay_url ){
|
|
nexus.checkout.pay_url = pay_url;
|
|
}
|
|
|
|
if( nexus.checkout.totalMethods == 1 ){
|
|
$('payment_toggle').value = nexus.checkout.firstMethod;
|
|
$('payment_toggle_wrap').hide();
|
|
nexus.checkout.togglePayment(null);
|
|
}
|
|
|
|
if( $('payment_toggle') ){
|
|
$('payment_toggle').observe('change', nexus.checkout.togglePayment);
|
|
}
|
|
|
|
$('do_pay').observe('submit', nexusCheckout.submitForm);
|
|
});
|
|
},
|
|
|
|
//----------------------------------------
|
|
// Init the credit card entry form
|
|
//----------------------------------------
|
|
initCreditCard: function(){
|
|
if( $('cardonfile') ){
|
|
$('cardonfile').observe('click', function(e){
|
|
if( this.checked ){
|
|
$('full_options').hide();
|
|
if( $('renew_options') ){
|
|
$('renew_options').hide();
|
|
}
|
|
} else {
|
|
$('full_options').show();
|
|
if( $('renew_options') ){
|
|
$('renew_options').show();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
if( $('whats_this_cvv') ){
|
|
$('whats_this_cvv').observe('click', function(e){
|
|
this.hide();
|
|
$('about_cvv').show();
|
|
});
|
|
}
|
|
},
|
|
|
|
//----------------------------------------
|
|
// Fired when the payment method select is changed
|
|
//----------------------------------------
|
|
togglePayment: function(e){
|
|
|
|
var val = $('payment_toggle').value;
|
|
if( !val ){ return; }
|
|
|
|
$('methods').addClassName('loading').select('.method').invoke('hide');
|
|
|
|
new Ajax.Request( nexus.checkout.pay_url + "&method=" + val,
|
|
{
|
|
onSuccess: function(t){
|
|
$('methods').removeClassName('loading');
|
|
|
|
$('transid').value = t.responseJSON['transid'];
|
|
|
|
if ( t.responseJSON['error'] ){
|
|
alert( t.responseJSON['error'] );
|
|
return;
|
|
}
|
|
|
|
// Check for payment form HTML
|
|
if( t.responseJSON['html'] ){
|
|
|
|
if( !$('method_pane_' + val) ){
|
|
$('methods').insert( new Element('div', { id: 'method_pane_' + val }).addClassName('row').addClassName('method') );
|
|
}
|
|
|
|
$('method_pane_' + val).update( t.responseJSON['html'] ).show();
|
|
}
|
|
else
|
|
{
|
|
if( !$('method_pane_none') ){
|
|
$('methods').insert( new Element('div', { id: 'method_pane_none' }).addClassName('method').addClassName('no_messages') );
|
|
//$('method_pane_none').update( ipb.lang['offline_payment'] );
|
|
}
|
|
|
|
$('method_pane_none').show();
|
|
}
|
|
|
|
// Check for URL
|
|
if( t.responseJSON['formUrl'] )
|
|
{
|
|
$('do_pay').action = t.responseJSON['formUrl'];
|
|
}
|
|
|
|
// Check for JSON
|
|
if( t.responseJSON['js'] )
|
|
{
|
|
eval( t.responseJSON['js'] );
|
|
}
|
|
|
|
// Does this method have a custom submit button?
|
|
if( t.responseJSON['button'] ){
|
|
if( !$('pay_button') ){
|
|
$('confirm').insert( new Element('div', { id: 'pay_button'}) );
|
|
}
|
|
|
|
$('pay_button').update( t.responseJSON['button'] ).show();
|
|
$('pay_submit').hide();
|
|
}
|
|
else
|
|
{
|
|
if( $('pay_button') ){
|
|
$('pay_button').hide();
|
|
$('pay_submit').show();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
}
|
|
},
|
|
|
|
/********************************************/
|
|
/* Product information page */
|
|
/********************************************/
|
|
viewItem: {
|
|
|
|
packageID: 0,
|
|
inStock: 0,
|
|
productOptions: [],
|
|
|
|
//----------------------------------------
|
|
// Initialize product view
|
|
//----------------------------------------
|
|
init: function(){
|
|
document.observe("dom:loaded", function(){
|
|
|
|
if ( $('product_gallery') !== null )
|
|
{
|
|
$('product_gallery').on('click', 'span.thumb', nexus.viewItem.selectImage);
|
|
}
|
|
|
|
if( $('add_configure') )
|
|
{
|
|
$('add_configure').on('click', 'input:not(.disabled)', function(e, element){
|
|
$(element).addClassName('disabled');
|
|
mobileFilter(e, element);
|
|
});
|
|
|
|
$('add_configure_pane').down('.ipsFilterPane_close').observe('click', function(e){
|
|
$('add_configure').removeClassName('disabled');
|
|
closePane( e, $('add_configure_pane').down('.ipsFilterPane_close') );
|
|
});
|
|
}
|
|
|
|
nexus.viewItem.optionCheck();
|
|
});
|
|
},
|
|
|
|
//----------------------------------------
|
|
// Handles stock/price check when an option is changed
|
|
//----------------------------------------
|
|
optionCheck: function()
|
|
{
|
|
var saveOptions = [];
|
|
|
|
// Build an array of key/value pairs of options
|
|
nexus.viewItem.productOptions.each( function(item){
|
|
if( $('f_' + item) ){
|
|
saveOptions.push( item + ':' + $('f_' + item).value );
|
|
}
|
|
});
|
|
|
|
new Ajax.Request( ipb.vars['base_url'] + "app=nexus&module=ajax§ion=optioncheck&secure_key=" + ipb.vars['secure_hash'],
|
|
{
|
|
evalJSON: 'force',
|
|
parameters: {
|
|
package: nexus.viewItem.packageID,
|
|
options: saveOptions.join(',')
|
|
},
|
|
onSuccess: nexus.viewItem.handleOptionCheck
|
|
});
|
|
},
|
|
|
|
//----------------------------------------
|
|
// Callback for option check
|
|
//----------------------------------------
|
|
handleOptionCheck: function(t)
|
|
{
|
|
if ( t.responseJSON['error'] ){
|
|
alert( t.responseJSON['error'] );
|
|
return;
|
|
}
|
|
|
|
if ( t.responseJSON['stock'] == 0 )
|
|
{
|
|
if ( nexus.viewItem.inStock ){
|
|
nexus.viewItem.setOutOfStock( true );
|
|
}
|
|
nexus.viewItem.inStock = false;
|
|
}
|
|
else
|
|
{
|
|
if( !nexus.viewItem.inStock ){
|
|
nexus.viewItem.setOutOfStock( false );
|
|
}
|
|
nexus.viewItem.inStock = true;
|
|
}
|
|
|
|
// Update both price displays and renewal terms
|
|
[ $('main_price'), $('secondary_price') ].invoke('update', t.responseJSON['base_price']);
|
|
|
|
if( $('renew_terms') ){
|
|
$('renew_terms').update( t.responseJSON['renew_terms'] );
|
|
}
|
|
},
|
|
|
|
//----------------------------------------
|
|
// Enables or disables the Cart button
|
|
//----------------------------------------
|
|
setOutOfStock: function( toSet )
|
|
{
|
|
if( toSet ){
|
|
$('add_to_cart').addClassName('disabled').writeAttribute('disabled', 'disabled').value = ipb.lang['out_of_stock'];
|
|
} else {
|
|
$('add_to_cart').removeClassName('disabled').writeAttribute('disabled', null).value = ipb.lang['add_to_cart'];
|
|
}
|
|
},
|
|
|
|
//----------------------------------------
|
|
// Product image toggle
|
|
//----------------------------------------
|
|
selectImage: function( e, element )
|
|
{
|
|
var imageid = $(element).readAttribute('data-imageid');
|
|
var location = $(element).readAttribute('data-location');
|
|
|
|
$('main_image').update( "<img src='" + ipb.vars['upload_url'] + "/" + location + "' alt='' />" );
|
|
$$('.thumb').invoke('removeClassName', 'active');
|
|
$('thumb_' + imageid).addClassName('active');
|
|
}
|
|
|
|
},
|
|
};
|
|
|
|
Element.addMethods( {
|
|
|
|
expandify: function(element, options){
|
|
|
|
options = Object.extend( {
|
|
defaultTrigger: false
|
|
}, options);
|
|
|
|
var mainElem = element;
|
|
var toggle = function(e, element){
|
|
|
|
if( $(element).hasClassName('open') ){
|
|
expanderClose( $(element) );
|
|
}
|
|
else
|
|
{
|
|
closeAll();
|
|
expanderOpen( $(element) );
|
|
}
|
|
},
|
|
expanderClose = function( element ){
|
|
$(element).removeClassName('open').addClassName('closed');
|
|
$('expander_pane_' + $(element).readAttribute('data-pane')).hide();
|
|
},
|
|
expanderOpen = function( element ){
|
|
$(element).removeClassName('closed').addClassName('open');
|
|
$('expander_pane_' + $(element).readAttribute('data-pane')).show();
|
|
},
|
|
closeAll = function(){
|
|
$( mainElem ).select('.ipsExpanderList_trigger').each(function(elem){
|
|
expanderClose( elem );
|
|
});
|
|
}
|
|
|
|
// Close all triggers & panes
|
|
closeAll();
|
|
|
|
// Set event
|
|
$( element ).on('click', '.ipsExpanderList_trigger', toggle);
|
|
|
|
if( options['defaultTrigger'] ){
|
|
toggle( null, $$("[data-pane=" + options['defaultTrigger'] + "]").first() );
|
|
}
|
|
}
|
|
|
|
}); |