var BuyBox=Class.create({
MAX_SLIDER_FINISHED_TIMEOUTS:300,
SLIDER_FINISHED_TIMEOUT:20,
FADE_DURATION:0.2,
MESSAGE_ITEM_OPENED:'buy_box:item_opened',
MESSAGE_ITEM_CLOSED:'buy_box:item_closed',
MESSAGE_ITEM_BEFORE_CLOSE:'buy_box:item_before_close',
MESSAGE_SERVER_ERROR:'buy_box:server_error',
initialize:function(on_loaded,on_close){
this.ajax=null;
this.is_ajax_aborted=false;
this.on_loaded=on_loaded||Glyde.empty_function;
this.on_close=on_close||Glyde.empty_function;
this.is_showing=false;
this.elem_id='buy_box';
this._timeout_4_processing_message=null;
this._processing_message_interval=800;
this._message_index=0;
this._slider_finished_timeouts=0;
this._being_bought=false;
Glyde.notify.subscribe('login:initialized',this.on_start_login.bind(this));
Glyde.notify.subscribe('login:canceled',this.on_cancel_login.bind(this));
Glyde.notify.subscribe('buy_box:clicked_closed',function(){this.click_close();}.bind(this));
Glyde.notify.subscribe(Glyde.BuyReceiptWidget.prototype.MESSAGE_PURCHASE_CANCELLED,
this._handle_purchase_cancelled.bind(this));
},
on_start_login:function(){
setTimeout(this._hide_overflow,150);
},
on_cancel_login:function(){this._on_end_login();},
on_login:function(){
this.refetch_buy_info();
this._on_end_login();
},
close:function(use_fade){
if(this._being_bought)return;
if(this.is_showing){
this.is_showing=false;
clearTimeout(this._refetch_buy_timer);
Glyde.notify.publish(this.MESSAGE_ITEM_BEFORE_CLOSE);
if(use_fade){
this._fade_close(this.on_close);
}else{
$('buy_box_wrapper').vhide();
$(this.elem_id).hide();
this.on_close();
}
Glyde.notify.publish(this.MESSAGE_ITEM_CLOSED);
}
this._slider_finished_timeouts=0;
this.item=null;
},
click_close:function(msg){
if(this._being_bought)return;
$('notice_wrapper').update(msg);
this.close(true);
},
_slider_timed_out:function(){
return(this._slider_finished_timeouts>=this.MAX_SLIDER_FINISHED_TIMEOUTS);
},
slider_finished:function(show_cover_art,app_loading){
if(!this.ajax_is_completed&&!this._slider_timed_out()){
this._slider_finished_timeouts+=1;
var timeout_function=this.slider_finished.bind(this)
timeout_function.delay(this.SLIDER_FINISHED_TIMEOUT/1000,
show_cover_art,app_loading);
}else if(this.ajax_completed_with_errors||this._slider_timed_out()){
this._handle_slider_error();
}else{
this._unhide(show_cover_art,app_loading);
this.on_loaded();
}
},
buy:function(sku_id,cents,coupon_code,cvv2,address_id,on_complete){
if(this._can_buy_p()){
this._buy_loading();
this._cancel_timer();
var options={
method:'post',
onComplete:(on_complete||Glyde.empty_function),
parameters:{'sku[id]':sku_id,
'price[cents]':cents}
};
if(coupon_code){
options.parameters.coupon_code=coupon_code;
}
if(cvv2){
options.parameters.cvv2=cvv2;
}
if(address_id){
options.parameters.shipping_address_id=address_id;
}
ConversionTracker.get_instance().track_purchase(cents);
this._being_bought=true;
new Ajax.Request('/purchase_orders',options);
}
},
_about_to_go_to_login_or_signup:function(){
},
_can_buy_p:function(){
if(Glyde.user){
if(Glyde.user.is_reg_complete){
return true;
}else{
this._about_to_go_to_login_or_signup();
this._send_user_to_signup();
}
}else{
this._about_to_go_to_login_or_signup();
this._send_user_to_signup();
}
return false;
},
_send_user_to_signup:function(){
var curr_url=location.toString();
Glyde.page.header.signup({'return_to':curr_url,'type':'full'});
},
_on_buy:function(resp,o){
var data=resp.responseJSON;
this._update_buy(data);
this._publish_bought_notice_for_sku(this.item.sku_id);
},
_update_buy:function(data){
},
_handle_purchase_cancelled:function(msg_name,info){
this._refetch_buy_timer=setTimeout(this._show_buy_button.bind(this),10000);
},
_show_buy_button:function(){
this.refetch_buy_info();
},
_publish_bought_notice_for_sku:function(sku_id){
Glyde.notify.publish('buy_box:item_bought',{'sku_id':sku_id});
},
_buy_loading:function(){
this._start_updating_processing_messages();
},
_update_buy_status:function(){
$('buy_loading_message').update(BuyBox.PROCESSING_MESSAGES[this._message_index]);
this._message_index+=1;
if(this._message_index==BuyBox.PROCESSING_MESSAGES.size()){
clearTimeout(this._timeout_4_processing_message);
this._timeout_4_processing_message=null;
this._message_index=0;
}
},
_start_updating_processing_messages:function(){
$('buy').update(this._buy_loading_html());
this._timeout_4_processing_message=setTimeout(this._update_buy_status.bind(this),
this._processing_message_interval);
},
_stop_updating_messages:function(){
if(this._timeout_4_processing_message){
clearTimeout(this._timeout_4_processing_message);
}
this._message_index=0;
},
_buy_loading_html:function(){
if(!this.buy_loading_html){
this.buy_loading_html=this._create_buy_loading_html();}
return this.buy_loading_html;
},
_before_display:function(item){
this._cancel_current_ajax();
this.close();
this.item=item;
$('notice_wrapper').update();
},
_on_end_login:function(){
this._scroll_overflow();
},
_scroll_overflow:function(){this._set_overflow('');},
_hide_overflow:function(){this._set_overflow('hidden');},
_set_overflow:function(value){
if(Glyde.Browser.FF){
var synopsis=$('synopsis');
if(synopsis)synopsis.style.overflow=value;
var track_list=$('track_list');
if(track_list)track_list.style.overflow=value;
}
},
_cancel_current_ajax:function(){
if(this.ajax){
this.is_ajax_aborted=true;
this.ajax.transport.abort();}
},
refetch_buy_info:function(){
alert('BuyBox#refetch_buy_info :: abstract.');
},
_hide:function(){
$(this.elem_id).vhide().hide();
},
_unhide:function(skip_fade,app_loading){
var message_info={'app_loading':(app_loading||false)};
$('buy_box_wrapper').vshow();
if(skip_fade){
$(this.elem_id).vshow().show();
Glyde.notify.publish(this.MESSAGE_ITEM_OPENED,message_info);
}else{
var after_finish=function(){
Glyde.notify.publish(this.MESSAGE_ITEM_OPENED,message_info);
}.bind(this);
$(this.elem_id).vshow().appear({duration:this.FADE_DURATION,afterFinish:after_finish});
}
this._viz_synopsis();
this.is_showing=true;
},
_viz_synopsis:function(){
var synopsis=$('synopsis');
if(synopsis)synopsis.vshow();
var track_list=$('track_list');
if(track_list)track_list.vshow();
},
_cancel_timer:function(){
if(this._receipt){
this._receipt.cancel_timer();
}
},
_fade_close:function(on_done){
var buy_box_element=$('buy_box');
function on_fade_complete(){
this._post_fade(buy_box_element);
(on_done||Glyde.empty_function)();
}
buy_box_element.fade({duration:this.FADE_DURATION,afterFinish:on_fade_complete.bind(this)});
},
_post_fade:function(buy_box_wrapper_node){
$('buy_box_wrapper').vhide();
$(this.elem_id).hide();
if(this._is_showing){
Glyde.notify.publish(this.MESSAGE_ITEM_CLOSED);
}
},
_handle_slider_error:function(){
this._cancel_current_ajax();
this.ajax_completed_with_errors=false;
this.on_loaded();
var is_showing=this._is_showing;
this.click_close('Sorry, that was taking too long to finish. Please choose another item.');
this._slider_finished_timeouts=0;
if(!is_showing){
Glyde.notify.publish(this.MESSAGE_ITEM_CLOSED);
}
Glyde.notify.publish(this.MESSAGE_SERVER_ERROR);
},
_ajax_completed:function(){
this.ajax=null;
this.ajax_is_completed=true;
}
});
BuyBox.PROCESSING_MESSAGES=['Verifying...','Billing...'];
BuyBox.prototype._create_buy_loading_html=function(){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="buy_loading_wrapper"');_j.s('>');
_j.ns('<div');_j.s(' class="buy_loading"');_j.s('>');
_j.ns('<img');_j.s(' class="loading_throbber"');_j.s(' src="'+('images/wait.gif')+'"');_j.s(' />');
_j.ns('<span');_j.s(' id="buy_loading_message"');_j.s('>');Jaml.x();_j.s('Processing...');Jaml.x();
Jaml.x();_j.ns('</span>');
_j.ns('</div>');
_j.ns('</div>');
return _j.v();
};
var BuyTransactionBox=Class.create(BuyBox,{
CONTEXT:'buy',
MESSAGE_COUPON_APPLIED_CALLBACK_DONE:'glu_shelf_buy_box:coupon_applied_callback_done',
STORED_CREDIT_AMOUNT_CHANGED_EVENT:'buy_box:stored_credit_amount_changed',
NUM_PURCHASE_ORDERS_CHANGED_EVENT:'buy_box:num_purchase_orders_changed',
MAX_COVER_WIDTH:170,
MAX_COVER_HEIGHT:240,
COVER_SCALE_FACTOR_WITH_SHELF:0.8,
STICKER_SIZE:44,
STICKER_OVERHANG:8,
FADE_MS:400,
initialize:function($super,on_loaded,on_close,on_before_click_close,on_results_loaded,card_issuers,shipping_addresses){
$super(on_loaded,on_close);
this.on_before_click_close=on_before_click_close||Glyde.empty_function;
this.on_results_loaded=on_results_loaded||Glyde.empty_function;
this.buy_button_annotation=new BuyButtonAnnotationDialog();
this._card_issuers=card_issuers;
if(shipping_addresses){this._shipping_addresses=shipping_addresses;}
Glyde.notify.subscribe(CouponCodeWidget.prototype.MESSAGE_COUPON_APPLIED,
this._handle_coupon_code_change.bind(this));
Glyde.notify.subscribe(CouponCodeWidget.prototype.MESSAGE_COUPON_CANCELLED,
this._handle_coupon_code_change.bind(this));
Glyde.notify.subscribe(this.MESSAGE_ITEM_OPENED,this._open_buy_annotation.bind(this));
Glyde.notify.subscribe(this.MESSAGE_ITEM_BEFORE_CLOSE,this._close_buy_annotation.bind(this,false));
},
_create_buy_now_button:function(){
var button;
if((button=$$('.buy_now_button')[0])){
this._buy_now_button=new Glyde.widgets.BigButtonWidget(button,null,{color:'blue'});
this._buy_now_button.observe('widget:activate',this._handle_buy_clicked.bind(this));
}
},
_open_buy_annotation:function(){
var buy_button=$$('.buy_now_button')[0];
if(buy_button){
this.buy_button_annotation.open(buy_button);
}
},
_close_buy_annotation:function(write_cookie){
this.buy_button_annotation.close(write_cookie);
},
_about_to_go_to_login_or_signup:function(){
this._coupon_code_widget.save_code();
},
buy:function($super,sku_id,cents,coupon_code,cvv2,address_id){
var buy_callback=function(){
var on_complete=function(t,o){
this._on_buy(t,o,sku_id);
this._coupon_code=null;
this._clear_selected_sku();
}.bind(this);
var local_coupon_code=coupon_code||this._coupon_code;
$super(sku_id,cents,local_coupon_code,cvv2,address_id,on_complete);
}.bind(this);
this._coupon_code_widget.apply_code_if_exists(buy_callback);
},
on_login:function($super){
if(this._coupon_code_widget&&this._coupon_code_widget.has_unapplied_code()){
this._coupon_code_widget.apply_code_if_exists();
}else{
this.refetch_buy_info();
}
this._on_end_login();
},
selected_glu_id:function(){
return this._selected_glu.id;
},
selected_glu_vertical:function(){
return this._selected_glu.vertical;
},
selected_glu_title:function(){
return this._selected_glu.title;
},
select_sku:function(sku_id,cents,total_with_discount,total,
shipping_cents,coupon){
if(this._selected_sku_id!=null){
var elem=$('price_selector_'+this._selected_sku_id);
if(elem){
elem.removeClassName("price_selector_selected");
}
}
this._selected_sku_id=sku_id;
this._selected_sku_price=cents;
var price_selector_elem=$('price_selector_'+sku_id);
price_selector_elem.addClassName("price_selector_selected");
var input_elem=price_selector_elem.select("input")[0];
input_elem.checked=true;
if(coupon&&(coupon.minimum_item_price_cents>cents)){
this._hide_coupon_for_minimum_price(coupon,price_selector_elem);
}else{
this._show_coupon_for_minimum_price(coupon);
}
if(total_with_discount!=null&&total!=null){
$('total_cost').innerHTML='$'+Glyde.Money.format_cents(total);
var disc=$('total_cost_with_discount');
if(disc){
disc.innerHTML='$'+Glyde.Money.format_cents(total_with_discount);
}
var shipping_total_elem=$('shipping_total');
shipping_total_elem.innerHTML=
('$'+Glyde.Money.format_cents(shipping_cents));
if(Glyde.user&&Glyde.user.is_reg_complete){
this._set_funding_source(total_with_discount);
}
}
},
_update_buy:function($super,data){
this._being_bought=false;
this._stop_updating_messages();
this._receipt=new Glyde.BuyReceiptWidget($('buy'),data,this._selected_glu);
},
_hide_coupon_for_minimum_price:function(coupon,selected_elem){
var cost_line=$('buy').select('.cost_line')[0];
if(cost_line){
cost_line.removeClassName('cost_line_wide_coupon');
}
var tc=$('total_cost');
if(tc){tc.removeClassName('strike_through');}
var tcwd=$('total_cost_with_discount');
if(tcwd){tcwd.undisplay();}
this._coupon_code=null;
var msg=('Coupon code '+coupon.code+
' has a minimum purchase price of $'+
Glyde.Money.format_cents(coupon.minimum_item_price_cents));
new GlydeAlert(msg,selected_elem,
'Warning',
{position_preference:Glyde.Dialog.prototype.POSITION_ABOVE});
},
_show_coupon_for_minimum_price:function(coupon){
if(coupon){
var cost_line=$('buy').select('.cost_line')[0];
if(cost_line){
cost_line.addClassName('cost_line_wide_coupon');
}
var tc=$('total_cost');
if(tc){tc.addClassName('strike_through');}
var tcwd=$('total_cost_with_discount');
if(tcwd){tcwd.display('inline');}
this._coupon_code=coupon.code;
}
},
_set_funding_source:function(total_cents){
var balance_cents=this._user_available_balance;
if(total_cents==0){
$('coupon_info').display();
$('glyde_balance_info').undisplay();
$('credit_card_info').undisplay();
}else{
$('coupon_info').undisplay();
if(balance_cents==0){
$('glyde_balance_info').undisplay();
$('credit_card_info').display();
}else if(balance_cents<total_cents){
$('glyde_balance_info').display();
$('credit_card_info').display();
$$('#credit_card_info .payment_amount')[0].innerHTML='$'+Glyde.Money.format_cents(total_cents-balance_cents);
}else{$('glyde_balance_info').display();
$$('#glyde_balance_info .payment_amount')[0].undisplay();
$('credit_card_info').undisplay();
}
}
this._credit_card_charge_required=total_cents>balance_cents;
},
_handle_buy_clicked:function(info){
var button=info.memo.widget;
button.disable();
if(Glyde.user&&this._credit_card_charge_required&&
this._shipping_address_select.selected_address().cvv2_required)
{
this._show_cvv_dialog();
}else{
this.buy_selected_item();
}
},
_buy_loading:function($super){
this._close_buy_annotation(true);
$super();
},
_send_user_to_signup:function($super){
var hash={return_to:location.toString()};
if(this._coupon_code)hash.coupon_code=this._coupon_code;
Glyde.page.header.checkout(this._selected_sku_id,
this._selected_glu.title.title_for_url(),hash);
},
_show_cvv_dialog:function(){
var issuer=this._card_issuers[this._card_issuer_name];
this._cvv_dialog=new CvvDialog(this._on_cvv_dialog_close.bind(this),
this._on_cvv_dialog_purchase.bind(this),issuer);
this._cvv_dialog.open('buy_now_button');
},
_on_cvv_dialog_purchase:function(cvv2){
this.buy_selected_item(cvv2);
},
_on_cvv_dialog_close:function(){
this._buy_now_button.enable();
},
buy_selected_item:function(cvv2){
var address_id=(this._shipping_address_select)?this._shipping_address_select.selected_address().address_id:null;
this.buy(this._selected_sku_id,this._selected_sku_price,this._coupon_code,cvv2,address_id);
this._buy_now_button.enable();
},
_before_display:function($super,item){
this._coupon_code=null;
$super(item);
},
click_close:function($super,msg){
this.on_before_click_close();
$super(msg);
},
_on_buy:function(resp,o,sku_id){
var data=resp.responseJSON;
this._update_buy(data);
if(data.success){
Glyde.user.num_purchase_orders++;
Glyde.notify.publish(this.NUM_PURCHASE_ORDERS_CHANGED_EVENT);
if(data.stored_credit_debit.cents>0){
Glyde.user.available_account_cents-=data.stored_credit_debit.cents;
Glyde.notify.publish(this.STORED_CREDIT_AMOUNT_CHANGED_EVENT);
}
this._last_purchase_stored_credit_debit_cents=data.stored_credit_debit.cents;
}
this._publish_bought_notice_for_sku(sku_id);
},
_handle_purchase_cancelled:function($super,msg_name,info){
$super();
Glyde.user.num_purchase_orders--;
Glyde.notify.publish(this.NUM_PURCHASE_ORDERS_CHANGED_EVENT);
if(this._last_purchase_stored_credit_debit_cents){
Glyde.user.available_account_cents+=this._last_purchase_stored_credit_debit_cents;
Glyde.notify.publish(this.STORED_CREDIT_AMOUNT_CHANGED_EVENT);
}
},
_handle_coupon_code_change:function(message_name,info){
this._coupon_code=info.code;
this.refetch_buy_info(function(){
if(message_name==CouponCodeWidget.prototype.MESSAGE_COUPON_APPLIED){
if(this._selected_sku_price>999){
var cost_line=$('buy').select('.cost_line')[0];
cost_line.addClassName('cost_line_wide_coupon');
}
}
if(info.client_callback!=null){info.client_callback();}
}.bind(this),this._selected_sku_id,false);
},
refetch_buy_info:function(done_callback,selected_sku_id,update_item_info){
done_callback=done_callback||null;
if(this.is_showing&&$('buy')){
var options={
parameters:{},
method:'get',
onComplete:function(resp,o){
Loading.hide();
var data=resp.responseJSON;
if(data.success){
var buy_boxlet=$('buy');
buy_boxlet.innerHTML=data.html;
if(!Glyde.Browser.IE){buy_boxlet.fade_in(this.FADE_MS);}
this._user_available_balance=data.available_balance_cents;
this._card_issuer_name=data.card_issuer_name;
this._shipping_addresses=data.shipping_addresses;
if(selected_sku_id){
$('price_selector_'+selected_sku_id).onclick();
this._create_coupon_code_widget();
this._create_buy_now_button();
}else{
this._auto_select_sku();
}
this._on_update_buy_box();
if(update_item_info){
$('item_info_text').innerHTML=data.sku_info_html;
var event_info={glu_id:this._selected_glu.id,vertical:this._selected_glu.vertical};
Glyde.notify.publish('glu_shelf_buy_box:item_info_updated',event_info);
}
}else{
if(data.redirect_to){
window.location=data.redirect_to;
}
}
if(done_callback!=null)done_callback();
}.bind(this)
};
this._add_buy_info_parameters(options.parameters);
if(this._coupon_code){options.parameters['coupon_code']=this._coupon_code;}
Loading.show();
this._clear_selected_sku();
new Ajax.Request('/glus/'+this._selected_glu.id+'/buy_info',options);
}
},
_add_buy_info_parameters:function(parameters){
parameters.context=this.CONTEXT;
},
display_search_results:function(vertical,title,res_id){
this._full_cover_art=true;
this._before_display(null);
var options={
method:'get',
is_loading:Glyde.page.is_loading,
parameters:{'vertical':vertical,'res_id':res_id},
onComplete:this._on_fetch_glus.bind(this)
};
Loading.show();
this.ajax=new Ajax.Request('/glus/shelf',options);
this.ajax_is_completed=false;
},
_on_fetch_glus:function(resp,o){
var selected_glu_id=null,selected_glu_vertical=null;
if(this.is_ajax_aborted){
this.is_ajax_aborted=false;
Loading.hide();
}else{
var data=resp.responseJSON;
if(data.success){
this._display(data,resp.request.options.parameters);
this._unhide(false,resp.request.options.is_loading);
Loading.hide();
selected_glu_id=this._selected_glu.id;
selected_glu_vertical=this._selected_glu.vertical;
}else{
Glyde.page.handle_server_errors(data);
Loading.hide();
}
}
this.on_results_loaded(selected_glu_id,selected_glu_vertical);
this._ajax_completed();
},
display:function(glu_id,off_record,full_cover_art,fetch_res_id){
this._full_cover_art=full_cover_art;
this._before_display(null);
var options={
method:'get',
parameters:{
glu_id:glu_id,
off_record:off_record?true:false,
fetch_res_id:fetch_res_id||false
},
onComplete:this._on_fetch_glu.bind(this)
};
Loading.show();
this.ajax=new Ajax.Request('/glus/shelf',options);
this.ajax_is_completed=false;
},
_on_fetch_glu:function(resp,o){
var selected_glu_id=null,selected_glu_vertical=null;
if(this.is_ajax_aborted){
this.is_ajax_aborted=false;
Loading.hide();
}else{
var data=resp.responseJSON;
if(data&&data.success){
this._display(data);
Loading.hide();
selected_glu_id=this._selected_glu.id;
selected_glu_vertical=this._selected_glu.vertical;
}else{
this.ajax_completed_with_errors=true;
Loading.hide();
this.close();
}
}
this.on_results_loaded(selected_glu_id,selected_glu_vertical);
this._ajax_completed();
},
_fetch_glu_info:function(glu_obj){
var options={
method:'get',
parameters:{vertical:vertical},
onComplete:this._on_complete_fetch_glu_info.bind(this)
};
new Ajax.Request('/glus/'+glu_obj.id+'/shelf_info',options);
},
display_prerendered:function(glu,res_id,viewer_glus,total_viewer_glus,card_issuer_name){
this._selected_glu=glu;
if(Glyde.user){
this._user_available_balance=Glyde.user.available_account_cents;
this._card_issuer_name=card_issuer_name;
}
this._on_update_tranny_box(true,viewer_glus,total_viewer_glus,glu.vertical,res_id);
this._unhide(true);
},
_display:function(data,search_params){
this._selected_glu=data.glu;
if(Glyde.user){
this._card_issuer_name=data.card_issuer_name;
this._user_available_balance=data.available_balance_cents;
this._shipping_addresses=data.shipping_addresses;
}
var vertical=search_params?search_params.vertical:data.vertical;
var res_id=search_params?search_params.res_id:data.res_id;
$(this.elem_id).update(data.html);
this._on_update_tranny_box(this._full_cover_art,data.viewer_glus,data.total_viewer_glus,vertical,res_id);
this._hide();
},
_on_glu_selected:function(el_id,glu_id,glu_obj){
if(this._selected_glu&&this._selected_glu.id==glu_id){return;}
this._selected_glu=glu_obj;
this._switch_selected_image(el_id,glu_obj);
var update_buy_annotation=function(){this._open_buy_annotation();};
this._close_buy_annotation();
this.refetch_buy_info(update_buy_annotation.bind(this),null,true);
},
_switch_selected_info:function(glu){
var title=glu.medium_name+" ("+glu.orig_release_year+")";
},
_switch_selected_image:function(el_id,glu){
var info=this.cover_info(glu,true);
var cover_container=$('cover_container');
cover_container.fade_out(this.FADE_MS/1.2,function(){
Glyde.image.preload_multiple([info.cover_url,info.cover_background_url],function(){
var cover_html=this._render_cover(glu,info,true);
cover_container.update(cover_html);
cover_container.fade_in(this.FADE_MS/1.2);
}.bind(this));
}.bind(this));
},
_on_update_tranny_box:function(full_cover_art,viewer_glus,total_viewer_glus,vertical,res_id){
var show_shelf=viewer_glus&&viewer_glus.length>1;
$('left_column_container').update(this._render_left_column(viewer_glus,full_cover_art));
this._reveal_cover(full_cover_art,show_shelf);
this._auto_select_sku();
if(Glyde.Browser.FF){
var synopsis_wrapper=$('synopsis_wrapper');
if(synopsis_wrapper){setTimeout(function(){synopsis_wrapper.scrollTop=0;},500);}
}
if(show_shelf){
Glyde.Glu.add_glu_id_to_glus(viewer_glus);
this._destroy_existing_scroll_widget();
this._glu_scroll=new GluScrollWidget(
this._on_glu_selected.bind(this),
this._selected_glu.id,
vertical,
res_id,
viewer_glus,
total_viewer_glus);
}
this._on_update_buy_box();
},
_on_update_buy_box:function(){
if(Glyde.user&&Glyde.user.is_reg_complete&&$('shipping_box')){
this._shipping_address_select=new ShippingAddressSelect('ship_address_select',this._shipping_addresses);
}
},
cover_info:function(glu,shelf_is_visible){
var max_width=this.MAX_COVER_WIDTH;
var max_height=this.MAX_COVER_HEIGHT;
var cover_dims=Glyde.image.cover_dimensions_for_max_w_h(glu,max_width,max_height);
var scale=(cover_dims.height<160)?1.15:1;
if(shelf_is_visible){
max_width=Math.round(max_width*this.COVER_SCALE_FACTOR_WITH_SHELF);
max_height=Math.round(max_height*this.COVER_SCALE_FACTOR_WITH_SHELF);
}
var wrapper_width=220;
var cover_url=Glyde.image.fully_qualified_cover_url_for_max_w_h(glu,Math.floor(max_width*scale),Math.floor(max_height*scale));
cover_dims=Glyde.image.dimensions_from_cover_url(cover_url);
var cover_background_url=Glyde.image.cover_url_with_suffix(cover_url,'g','jpg');
return{
left:Math.round((wrapper_width/2)-(cover_dims.width/2)),
top:max_height-cover_dims.height,
width:cover_dims.width,
height:cover_dims.height,
cover_url:cover_url,
cover_background_url:cover_background_url
};
},
_reveal_cover:function(full_cover_art,show_shelf){
var cover_container=$('cover_container');
cover_container.setOpacity(0);
var cover_info=this.cover_info(this._selected_glu,show_shelf);
var images_to_preload=[cover_info.cover_background_url];
if(full_cover_art){images_to_preload.push(cover_info.cover_url);}
Glyde.image.preload_multiple(images_to_preload,function(){
if(Glyde.Browser.IE6||Glyde.Browser.IE7){
cover_container.setOpacity(1);
}else{
cover_container.fade_in(this.FADE_MS);
}
}.bind(this));
},
_destroy_existing_scroll_widget:function(){
if(this._glu_scroll){
this._glu_scroll.reset();
this._glu_scroll=null;
}
},
get_title:function(){
return this._selected_glu.title;
},
_create_coupon_code_widget:function(){
var coupon_code_elem=$$('.coupon_box')[0];
if(coupon_code_elem){
this._coupon_code_widget=new CouponCodeWidget(coupon_code_elem,this._coupon_code,this._selected_glu,Glyde.config.universal_storefront_id);
}
},
_auto_select_sku:function(){
this._create_coupon_code_widget();
this._create_buy_now_button();
var skus=$(this.elem_id).select('.price_selector');
if(skus.length>0){
this._select_sku_elem(skus.last());
}
},
_select_sku_elem:function(sku_elem){
if(sku_elem.select('input')[0]){
var radio=sku_elem.select('input')[0];
var buy_info=radio.value.split('_');
this.select_sku(buy_info[0],buy_info[1],buy_info[2],buy_info[3],buy_info[4]);
}
},
_clear_selected_sku:function(){
this._selected_sku_id=null;
this._selected_sku_price=null;
},
close:function($super,use_fade){
$super(use_fade);
this._selected_glu=null;
if(this._shipping_address_select){
this._shipping_address_select.destroy();
this._shipping_address_select=null;
}
},
_product_image_path:function(glu){
return Glyde.image.fully_qualified_cover_url_for_max_w_h(glu,120,170);
}
});
BuyTransactionBox.prototype._render_left_column=function(viewer_glus,show_cover_art){
var _j=new Jaml();
var show_shelf=viewer_glus&&viewer_glus.length>1;
_j.ns(this._render_cover_container(show_shelf,show_cover_art));
if(show_shelf){
_j.ns('<div');_j.s(' id="shelf_glus"');_j.s('>');
_j.ns('<div');_j.s(' class="'+((viewer_glus.length==2)?'only_two':'')+'"');_j.s(' id="glu_scroll"');_j.s('>');
_j.ns('</div>');
_j.ns('</div>');
}
return _j.v();
};
BuyTransactionBox.prototype._render_cover_container=function(show_shelf,show_cover_art){
var _j=new Jaml();
var glu=this._selected_glu;
var info=this.cover_info(glu,show_shelf);
_j.ns('<div');_j.s(' id="cover_container"');_j.s('>');
_j.ns(this._render_cover(glu,info,show_cover_art));
_j.ns('</div>');
return _j.v();
};
BuyTransactionBox.prototype._render_cover=function(glu,info,show_cover_art){
var _j=new Jaml();
var cover_style='background-image: url('+info.cover_url+'); ';
cover_style+='width: '+info.width+'px; height: '+info.height+'px;';
cover_style+='left: '+info.left+'px; top: '+info.top+'px; ';
var margin=10;
var background_top=info.top+info.height-margin-1;
var cover_background_style='background-image: url('+info.cover_background_url+'); ';
cover_background_style+='background-position: '+info.left+'px '+background_top+'px; ';
var sticker_class='',sticker_style='';
if(glu.msrp_percent_off==null||!show_cover_art){
sticker_style='display: none;';
}
else{
sticker_class='sticker save_sticker large_save percent_'+glu.msrp_percent_off;
var sticker_top=info.height+info.top-this.STICKER_SIZE+this.STICKER_OVERHANG;
var sticker_left=info.width+info.left-this.STICKER_SIZE+this.STICKER_OVERHANG;
sticker_style='top: '+sticker_top+'px; left: '+sticker_left+'px;';
}
_j.ns('<div');_j.s(' id="cover_art_background"');_j.s(' style="'+(cover_background_style)+'"');_j.s('>');
if(show_cover_art){
_j.ns('<div');_j.s(' id="cover_art"');_j.s(' style="'+(cover_style)+'"');_j.s('>');
_j.ns('</div>');
}
_j.ns('</div>');
_j.ns('<div');_j.s(' class="'+(sticker_class)+'"');_j.s(' id="save_sticker"');_j.s(' style="'+(sticker_style)+'"');_j.s('>');
_j.ns('</div>');
return _j.v();
};
var GluScrollWidget=Class.create(Glyde.widgets.ScrollWidget,{
initialize:function($super,on_select,selected_glu_id,vertical,search_key,glus_array,total_glus){
this._item_size=3;
this._glus_array=glus_array;
this._total_items=total_glus||null;
this._glus_by_id={};
this._search_key=search_key;
this._vertical=vertical;
this._context='buy';
this._on_select=on_select||Glyde.empty_function;
this._rendered_pages=[];
$super($('glu_scroll'),1);
this._selected_elem_id=selected_glu_id?'viewer_glu_'+selected_glu_id:null;
this._glu_select_handler=this._handle_select_glu.bind(this);
Glyde.notify.subscribe('glu_scroll:glu_clicked',this._glu_select_handler);
},
reset:function(){
Glyde.notify.unsubscribe('glu_scroll:glu_clicked',this._glu_select_handler);
},
_handle_select_glu:function(event_name,info){
this.select_glu_with_img_id(info.id);
},
_add_to_glus_map:function(glus_array){
var len=glus_array.length;
for(var i=0;i<len;++i){
var m=glus_array[i];
m.glu_id=m.id;
this._glus_by_id[m.id]=m;
}
},
item_width:function(){
return 66*this._item_size;
},
_render_pages:function(page_range,callback){
var item_start=page_range[0]*this._page_size;
var item_end=(page_range[1]+1)*this._page_size;
var render_func=function(json){
var total_items=Math.ceil(json.total/this._item_size);
var pages=[];
this._add_to_glus_map(json.glus);
for(var c=page_range[0];c<=page_range[1];c++){
var start=(c-page_range[0])*this._page_size*this._item_size;
var stop=start+(this._page_size*this._item_size);
var glus=json.glus.slice(start,stop);
pages.push({page_index:c,
items:[this._render_items(glus)]
});
}
(callback||this._on_pages_ready.bind(this))(pages,total_items);
}.bind(this);
if(this._glus_array&&this._glus_array.length==6
&&page_range[0]==0&&page_range[1]==1){
render_func({glus:this._glus_array,total:this._total_items})
this._glus_array=[];
}else{
this._fetch_lineup_pages(page_range,render_func);
}
},
_fetch_lineup_pages:function(page_range,callback){
var options={
method:'get',
parameters:{res_id:this._search_key,
vertical:this._vertical,
include_glus_p:true,
full_glu_json_p:true,
context:this._context,
offset:page_range[0]*this._page_size*this._item_size,
limit:(page_range[1]-page_range[0]+1)*this._page_size*this._item_size
},
onComplete:function(resp,o){
Loading.hide();
var json=resp.responseJSON;
if(json.success){
callback(json);
}else{
Glyde.page.handle_server_errors(json);
}
}.bind(this)
};
Loading.show();
new Ajax.Request('/glus/listing',options);
},
select_glu_with_img_id:function(elem_id){
this._deselect();
$(elem_id).addClassName('selected_glu');
this._selected_elem_id=elem_id;
var selected_glu_id=elem_id.split('_')[2];
var selected_glu=this._glus_by_id[selected_glu_id]
this._on_select(elem_id,selected_glu_id,selected_glu);
},
_deselect:function(){
if(this._selected_elem_id){
var elem=$(this._selected_elem_id);
if(elem)elem.removeClassName('selected_glu');
}
}
});
GluScrollWidget.prototype._render_items=function(glus){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="scroll_item"');_j.s('>');
for(var i=0;i<glus.length;++i){
var glu=glus[i];
_j.ns('<div');_j.s(' class="glu"');_j.s('>');
var id='viewer_glu_'+glu.id;
var klass=(glu==this._glus_array[0]?'selected_glu':'');
klass+=glu.is_available?'':' not_available';
var med_name=glu.release_medium_name?(' - '+glu.release_medium_name):'';
var title=glu.title+med_name+' ('+glu.orig_release_year+')';
var img_w=41;
var img_h=56;
var cover_art_url=Glyde.image.fully_qualified_cover_url_for_max_w_h(glu,img_w,img_h);
_j.ns('<div');_j.s(' class="img_box"');_j.s('>');
var on_click_handler='Glyde.notify.publish(\'glu_scroll:glu_clicked\', { id: \''+id+'\' })';
_j.ns('<img');_j.s(' class="'+('cover_art '+klass)+'"');_j.s(' src="'+(cover_art_url)+'"');_j.s(' id="'+(id)+'"');_j.s(' title="'+(title)+'"');_j.s(' onclick="'+(on_click_handler)+'"');_j.s(' />');
if(!glu.is_available){
_j.ns('<div');_j.s(' class="sold_out"');_j.s(' onclick="'+(on_click_handler)+'"');_j.s('>Sold Out');
_j.ns('</div>');
}
_j.ns('<div');_j.s(' class="extra_info"');_j.s('>');
_j.ns(glu.release_short_name?glu.release_short_name:'&nbsp;');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('</div>');
}
_j.ns('</div>');
return _j.v();
};
var Timer=Class.create({
default_elem_id:'timer',
default_duration_secs:30,
default_warning_threshold:30,
secs_left:null,
prev_secs_left:null,
end_ms:null,
color_for_last_10_secs:'red',
use_mins_and_secs:false,
initialize:function(on_expire,elem_id,duration,warning_threshold){
this.elem_id=elem_id||this.default_elem_id;
this.set_callback(on_expire);
this.duration_secs=duration||this.default_duration_secs;
this.warning_threshold=warning_threshold||this.default_warning_threshold;
this.reset();
},
reset:function(){
this.secs_left=this.duration_secs;
this._text_from_secs=(this.use_mins_and_secs?this._mixed_text.bind(this):this._simple_text.bind(this));
this._start();
},
set_callback:function(on_expire){
this.on_expire=on_expire||Glyde.empty_function;
return this;
},
restart:function(){
this.cancel();
this.reset();
},
pause:function(){
if(this.int_id){clearInterval(this.int_id);}
$(this.elem_id).update('&nbsp;[paused]&nbsp;');
},
unpause:function(){
this._start();
},
cancel:function(){
clearInterval(this.int_id);
var elem=$(this.elem_id);
if(elem)elem.update('&nbsp;n/a&nbsp;');
},
_start:function(){
this.end_ms=null;this.int_id=setInterval(this._display.bind(this),200);
},
_display:function(){
this.secs_left=this._seconds_remaining();
if(this.secs_left<0.6){
this._expire();
}
this.rounded_secs_left=Math.floor(this.secs_left);
if(this.rounded_secs_left!=this.prev_secs_left){
$(this.elem_id).update(this._seconds_to_string());
this.prev_secs_left=this.rounded_secs_left;
}
},
_mixed_text:function(){
return[Math.floor(this.rounded_secs_left/60),'min ',
this._just_secs_to_str(this.rounded_secs_left%60),'s'].join('');
},
_just_secs_to_str:function(s){
return(s<10?'0'+s:s);
},
_simple_text:function(){
return this.rounded_secs_left+' seconds';
},
_expire:function(){
this.cancel();
this.on_expire();
},
_seconds_to_string:function(){
return this._format(this._text_from_secs());
},
_format:function(str){
if(this.secs_left<=this.warning_threshold){
if(this.secs_left==1){str='1 second';}
if(this.secs_left==0){str='0 seconds';}
return['<span style="color:',this.color_for_last_10_secs,'">',str,'</span>'].join('');
}
return str;
},
_perc_through:function(){
var perc=100*(this.secs_left/this.duration_secs);
return(perc<=0.5?0:perc);
},
_seconds_remaining:function(){
return this._ms_remaining()/1000;
},
_ms_remaining:function(){
return this._end_ms()-this._ms_since_epoch();
},
_end_ms:function(){
if(!this.end_ms){
this.end_ms=(this._ms_since_epoch()+this.secs_left*1000);
}
return this.end_ms;
},
_ms_since_epoch:function(){
return(new Date()).getTime();
}
});
Timer.get_instance=function(on_expire){
if(!Timer._instance){
Timer._instance=new Timer(on_expire);
}else{
Timer._instance.set_callback(on_expire).restart();
}
return Timer._instance;
};
var BuyButtonAnnotationDialog=Class.create(AnnotationDialog,{
ANNOTATION_COOKIE:'hide_buy_annotation',
ANNOTATION_COOKIE_LIFETIME_DAYS:365*20,
GA_EVENT_CATEGORY:'Buy Button Annotation',
initialize:function($super){
$super();
this._how_to_buy_dialog=new HowToDialog('/how_to_buy_widget');
},
open:function($super,elem){
if(!Glyde.cookie.get(this.ANNOTATION_COOKIE)&&!g_in_page_params.buy_box.hide_annotation){
var tracker=ConversionTracker.get_instance();
tracker.doGAFunction('_trackEvent',this.GA_EVENT_CATEGORY,'Open',Glyde.dom.page_id());
this._open_time=(new Date()).getTime();
$super(elem,this._render());
$$('#'+this._container_id+' A')[0].observe('click',this._handle_learn_more_click.bindAsEventListener(this));
}
},
close:function($super,click_event){
if(this._is_open){
$super();
var tracker=ConversionTracker.get_instance();
var elapsed_time=this._seconds_since_opened();
if(click_event){
tracker.doGAFunction('_trackEvent',this.GA_EVENT_CATEGORY,'Active Close',Glyde.dom.page_id(),elapsed_time);
this.set_hide_annotation();
}else{
tracker.doGAFunction('_trackEvent',this.GA_EVENT_CATEGORY,'Passive Close',Glyde.dom.page_id(),elapsed_time);
}
}
},
set_hide_annotation:function(){
if(this.ANNOTATION_COOKIE){
Glyde.cookie.set(this.ANNOTATION_COOKIE,true,this.ANNOTATION_COOKIE_LIFETIME_DAYS);
}
},
_seconds_since_opened:function(){
return Math.round(((new Date).getTime()-this._open_time)/1000);
},
_handle_learn_more_click:function(){
this._how_to_buy_dialog.open();
this.set_hide_annotation();
},
_set_container_ids:function(instance_num){
this._dialog_container_id='buy_button_annotation_container';
this._container_id='buy_button_annotation_content';
this._arrow_id='buy_button_annotation_arrow';
this._close_button_id='buy_button_annotation_close_button';
},
_dialog_px_up_from_target:function(){
return 2;
},
_position_arrow:function($super){
if(!this._arrow_position){
$(this._arrow_id).style.left='150px';
}else{
$super();
}
},
_ensure_dialog_within_viewport:function(){
}
});
BuyButtonAnnotationDialog.prototype._render=function(){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="title"');_j.s('>Buy with confidence.');
_j.ns('</div>');
_j.ns('<ul');_j.s('>');
_j.ns('<li');_j.s('>');Jaml.x();_j.s('Return Policy');Jaml.x();
Jaml.x();_j.ns('</li>');
_j.ns('<li');_j.s('>');Jaml.x();_j.s('Payment Protection');Jaml.x();
Jaml.x();_j.ns('</li>');
_j.ns('<li');_j.s('>');Jaml.x();_j.s('Reliable Sellers');Jaml.x();
Jaml.x();_j.ns('</li>');
_j.ns('</ul>');
_j.ns('<a');_j.s(' href="'+('#')+'"');_j.s(' onclick="'+('return false;')+'"');_j.s('>Learn more');
_j.ns('</a>');
return _j.v();
};
CvvDialog=Class.create(Glyde.Dialog,{
initialize:function($super,on_close,on_purchase,card_issuer,use_small_close){
var dialog_options={
should_center:false,
use_arrow:true,
position_preference:this.POSITION_ABOVE,
disable_escape:false,
on_close:on_close
};
if(use_small_close){dialog_options.use_small_close=true;}
$super(dialog_options);
this._on_enter_key=this._on_activate_purchase_button.bind(this);
this._on_purchase=on_purchase;
this._card_issuer=card_issuer;
this._num_digits=card_issuer.num_code_digits;
},
open:function($super,target_id){
$super(target_id,this._render());
var cvv_number_input=$('cvv_number_input');
cvv_number_input.allow_only_numeric_input();
cvv_number_input.activate();
var card_image=$('card_image');
Glyde.image.preload(card_image.src,function(){card_image.fade_in(300);});
this._cancel_button=new Glyde.ButtonWidget('cvv_cancel_button','Cancel');
this._cancel_button.observe('widget:activate',this._on_activate_cancel_button.bind(this));
this._purchase_button=new Glyde.ButtonWidget('cvv_purchase_button','Complete Purchase',{color:'blue'});
this._purchase_button.observe('widget:activate',this._on_activate_purchase_button.bind(this));
},
_on_activate_cancel_button:function(){
this.close();
},
_on_activate_purchase_button:function(){
var cvv_value=$('cvv_number_input').value;
var cvv_input_container=$('cvv_input_container');
var error_text;
if(cvv_value.length==0){
var issuer_name=this._card_issuer.name;
var issuer_string=issuer_name+(issuer_name=='MasterCard'?'':' card');
error_text='Enter the '+this._num_digits+' digit security code for your '+issuer_string+'.';
}else if(cvv_value.length!=this._num_digits){
error_text='The security code must be '+this._num_digits+' digits.';
}
if(error_text){
InputErrorNotice.create_all_no_load([{id:'cvv_number_input',value:error_text}]);
InputErrorNotice.focusFirstError();
cvv_input_container.addClassName('cvv_error');
return;
}
InputErrorNotice.clear_all();
cvv_input_container.removeClassName('cvv_error');
if(this._on_purchase){
this.close(true);
this._on_purchase(cvv_value);
}
},
_card_image_url:function(){
var filename_lookup={
'Visa':'visa',
'MasterCard':'mastercard',
'American Express':'amex'
};
return Glyde.image.fully_qualified_url('images/CreditCards/cvv/'+filename_lookup[this._card_issuer.name]+'.png');
}
});
CvvDialog.prototype._render=function(){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="common_dialog"');_j.s(' id="cvv_dialog"');_j.s('>');
_j.ns('<div');_j.s(' id="cvv_content"');_j.s('>');
_j.ns('<img');_j.s(' id="card_image"');_j.s(' src="'+(this._card_image_url())+'"');_j.s(' />');
_j.ns('<div');_j.s(' class="field"');_j.s('>');
_j.ns('<label');_j.s(' for="'+('cvv_number_input')+'"');_j.s('>');
_j.ns('Security Code');
_j.ns('</label>');
_j.ns('<div');_j.s(' id="cvv_input_container"');_j.s('>');
_j.ns('<input');_j.s(' id="cvv_number_input"');_j.s(' type="'+('text')+'"');_j.s(' name="'+('cvv')+'"');_j.s(' autocomplete="'+('off')+'"');_j.s(' maxlength="'+(this._num_digits)+'"');_j.s('>');
_j.ns('</input>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('<div');_j.s(' id="cvv_instructions"');_j.s('>');
_j.ns('<p');_j.s('>');
_j.ns('For the security of your account, please enter the CVV2 code for your credit card.');
_j.ns('</p>');
_j.ns('<p');_j.s('>');
_j.ns('The code is '+this._num_digits+' digits and is located on the back of the card to the right of the signature strip.');
_j.ns('</p>');
_j.ns('</div>');
_j.ns('<div');_j.s(' id="cvv_buttons_row"');_j.s('>');
_j.ns('<div');_j.s(' id="cvv_purchase_button"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' id="cvv_cancel_button"');_j.s('>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('</div>');
return _j.v();
};
var ShippingAddressSelect=Class.create(SelectWidget,{
MAX_SHORT_ADDRESS_LENGTH:16,
NEW_ADDRESS_KEY:'new_address',
NEW_SHIPPING_ADDDRESS_ADDED_MESSAGE:'new_shipping_address_dialog:address_added',
initialize:function($super,container_id,shipping_addresses,z_index,short_address_max_length){
this._short_address_max_length=(short_address_max_length||
this.MAX_SHORT_ADDRESS_LENGTH);
$super(container_id,{items:this._menu_items(shipping_addresses),titles:null});
var menu_config=this._menu.cfg;
menu_config.setProperty('maxheight',175);
menu_config.setProperty('scrollincrement',2);
if(z_index){menu_config.setProperty("zindex",z_index);}
$(this._menu.element).addClassName('shipping_address_menu');
$(this._menu.getItem(0).element).addClassName('new_address_menu_item')
this.select(this._menu.getItem(0,1).value.key);
this._new_shipping_address_handler=this._on_new_shipping_address.bind(this);
Glyde.notify.subscribe(this.NEW_SHIPPING_ADDDRESS_ADDED_MESSAGE,this._new_shipping_address_handler);
},
destroy:function($super){
Glyde.notify.unsubscribe(this.NEW_SHIPPING_ADDDRESS_ADDED_MESSAGE,this._new_shipping_address_handler);
$super();
},
selected_address:function(){
return{
address_id:this._selected_item.value.key,
cvv2_required:this._selected_item.value.cvv2_required
};
},
on_menu_click:function($super,event_string,args){
var menu_item=args[1];
if(menu_item.value.key==this.NEW_ADDRESS_KEY){
Glyde.notify.publish('shipping_address_select:new_address');
}else{
$super(event_string,args);
}
},
_on_new_shipping_address:function(event_name,address){
address.cvv2_required=true;
this._menu.addItem(this._address_menu_item(address),1);
this._menu.render($('widget_overlays'));
this.select(address.id);
},
_menu_items:function(shipping_addresses){
var items=[];
items.push([{text:'use new address...',value:{key:this.NEW_ADDRESS_KEY,selected_text:''}}]);
items.push(shipping_addresses.inject([],function(array,address){
array.push(this._address_menu_item(address));
return array;
},this));
return items;
},
_address_menu_item:function(address){
return{
text:this._full_address_string(address),
value:{
key:address.id,
cvv2_required:address.cvv2_required,
selected_text:this._short_address_string(address),
tooltip:'Ship to '+this._full_address_string(address,true)
}
};
},
_short_address_string:function(address){
return address.street_1.truncate_with_delimiters(this._short_address_max_length);
},
_full_address_string:function(addr,no_html){
var buffer=[];
var br=(no_html)?' ':'<br/>';
buffer.push(addr.name,',',br,addr.street_1);
if(addr.street_2){buffer.push(',',br,addr.street_2);}
buffer.push(',',br,addr.city,' ',addr.state,' ',addr.zip);
return buffer.join('');
}
});
NewShippingAddressDialog=Class.create(Glyde.Dialog,{
initialize:function($super){
$super();
this.on_open=this._on_open.bind(this);
this._on_enter_key=this._on_submit.bind(this);
this._states=["AK","AL","AR","AZ","CA","CO","CT","DC","DE","FL","GA","HI","IA","ID","IL","IN","KS","KY","LA","MA","MD","ME","MI","MN","MO","MS","MT","NC","ND","NE","NH","NJ","NM","NV","NY","OH","OK","OR","PA","RI","SC","SD","TN","TX","UT","VA","VT","WA","WI","WV","WY","AA","AE","AP","AS","FM","GU","MH","MP","PR","PW","VI"];
},
open:function($super){
$super(null,this._render());
},
close:function($super){
InputErrorNotice.clear_all();
$super();
},
_on_open:function(){
var container=$(this._container_id);
this._populate_state_select();
container.select('#address_name')[0].focus();
new Glyde.ButtonWidget(container.select('.cancel_button')[0],'Cancel').observe('widget:activate',function(e){this.close();}.bindAsEventListener(this));
this._submit_button=new Glyde.ButtonWidget(container.select('.submit_button')[0],'Ship to this address',{color:'blue'});
this._submit_button.observe('widget:activate',this._on_submit.bindAsEventListener(this));
},
_populate_state_select:function(select_node_name){
var select_node=$(this._container_id).select('#locale_state')[0];
select_node.options[0]=new Option('--','');
this._states.each(function(state_name,index){
select_node.options[index+1]=new Option(state_name,state_name);
});
},
_on_submit:function(){
this._submit_button.disable();
var options={
method:'post',
parameters:this._add_extra_params(Form.serialize($(this._container_id).select('#address_form')[0],true)),
onComplete:function(resp,o){
this._submit_button.enable();
var json=resp.responseJSON;
if(json.success){
var address=json.address;
Glyde.notify.publish('new_shipping_address_dialog:address_added',{id:address.id,name:address.name,street_1:address.street_1,street_2:address.street_2,city:address.locale.city,state:address.locale.state,zip:address.locale.zip});
this.close();
}else{
this._show_errors(json.errors);
}
}.bind(this)
};
new Ajax.Request('/shipping_addresses',options);
},
_add_extra_params:function(parm_obj){
parm_obj['user[is_admin]']=false;
parm_obj['user[is_glyde]']=true;
parm_obj['user[is_suspended]']=true;
return parm_obj;
},
_show_errors:function(errors){
InputErrorNotice.create_all_no_load(errors);
InputErrorNotice.focusFirstError();
}
});
Glyde.notify.subscribe('shipping_address_select:new_address',function(){(new NewShippingAddressDialog()).open();}.bind(this));
NewShippingAddressDialog.prototype._render=function(){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="new_shipping_address_dialog_content"');_j.s('>');
_j.ns('<h2');_j.s('>New shipping address');
_j.ns('</h2>');
_j.ns('<form');_j.s(' id="address_form"');_j.s(' onsubmit="'+('return false;')+'"');_j.s('>');
_j.ns('<div');_j.s(' class="input_row"');_j.s('>');
_j.ns('<label');_j.s(' for="'+('address_name')+'"');_j.s('>');
_j.ns('Name');
_j.ns('</label>');
_j.ns('<input');_j.s(' id="address_name"');_j.s(' type="'+('text')+'"');_j.s(' name="'+('address[name]')+'"');_j.s('>');
_j.ns('</input>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="input_row"');_j.s('>');
_j.ns('<div');_j.s(' class="address_street_1 half_input_row"');_j.s('>');
_j.ns('<label');_j.s(' for="'+('address_street_1')+'"');_j.s('>');
_j.ns('Shipping Address, Line 1');
_j.ns('</label>');
_j.ns('<input');_j.s(' id="address_street_1"');_j.s(' type="'+('text')+'"');_j.s(' name="'+('address[street_1]')+'"');_j.s('>');
_j.ns('</input>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="address_street_2 half_input_row"');_j.s('>');
_j.ns('<label');_j.s(' for="'+('address_street_2')+'"');_j.s('>');
_j.ns('Shipping Address, Line 2');
_j.ns('</label>');
_j.ns('<input');_j.s(' id="address_street_2"');_j.s(' type="'+('text')+'"');_j.s(' name="'+('address[street_2]')+'"');_j.s('>');
_j.ns('</input>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="input_row"');_j.s('>');
_j.ns('<div');_j.s(' class="city_input half_input_row"');_j.s('>');
_j.ns('<label');_j.s(' for="'+('locale_city')+'"');_j.s('>');
_j.ns('City');
_j.ns('</label>');
_j.ns('<input');_j.s(' id="locale_city"');_j.s(' type="'+('text')+'"');_j.s(' name="'+('locale[city]')+'"');_j.s('>');
_j.ns('</input>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="state_selector"');_j.s('>');
_j.ns('<label');_j.s(' for="'+('locale_state')+'"');_j.s('>');
_j.ns('State');
_j.ns('</label>');
_j.ns('<select');_j.s(' id="locale_state"');_j.s(' name="'+('locale[state]')+'"');_j.s('>');
_j.ns('</select>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="zip_input"');_j.s('>');
_j.ns('<label');_j.s(' for="'+('locale_zip')+'"');_j.s('>');
_j.ns('Zip');
_j.ns('</label>');
_j.ns('<input');_j.s(' id="locale_zip"');_j.s(' type="'+('text')+'"');_j.s(' size="'+('5')+'"');_j.s(' maxlength="'+('5')+'"');_j.s(' name="'+('locale[zip]')+'"');_j.s('>');
_j.ns('</input>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('</form>');
_j.ns('<div');_j.s(' class="description"');_j.s('>Your purchase will be shipped to this address. Your primary buying (and selling) address will not be changed.');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="buttons"');_j.s('>');
_j.ns('<div');_j.s(' class="cancel_button"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="submit_button"');_j.s('>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('</div>');
return _j.v();
};
Glyde.BuyReceiptWidget=Class.create(Glyde.widgets.Widget,{
MESSAGE_PURCHASE_CANCELLED:'buy_receipt_widget:purchase_cancelled',
UNDO_MESSAGE_DURATION_IN_SECONDS:30,
initialize:function($super,element,server_data,glu,no_share_widget){
$super(element);
if(server_data.html){
this._element.innerHTML=server_data.html;
}
if(server_data.success){
this._purchase_order_id=server_data.purchase_order_id;
var oops_button=this.$$first('.oops_button');
this._oops_button_click_handler=this._handle_undo_clicked.bindAsEventListener(this);
oops_button.observe('click',this._oops_button_click_handler);
var timer_ms=this.UNDO_MESSAGE_DURATION_IN_SECONDS*1000;
this._undo_timer=setTimeout(this._handle_undo_expired.bind(this),timer_ms);
if(!no_share_widget){
var share_widget_node=this.$$first('.share_buttons');
this._share_widget=new Glyde.widgets.ShareButtonsBuyWidget(share_widget_node,glu,server_data.percent_off_msrp);
}
}
},
cancel_timer:function(){
if(this._undo_timer){
clearTimeout(this._undo_timer);
this._undo_timer=null;
}
},
share_buttons_widget:function(){
return this._share_widget;
},
_handle_undo_clicked:function(event){
event.target.stopObserving('click',this._oops_button_click_handler);
var on_complete=function(resp,o){
var data=resp.responseJSON;
if(data.success){
this._show_purchase_cancelled_message();
Glyde.notify.publish(this.MESSAGE_PURCHASE_CANCELLED,{});
}else{
this._show_soft_error_message();
Glyde.page.handle_server_errors(data);
}
}.bind(this);
Glyde.BuyReceiptWidget.send_cancel_request(this._purchase_order_id,
this._purchase_orders_cancel_url(),
on_complete);
},
_purchase_orders_cancel_url:function(){
return'/purchase_orders/cancel';
},
_clear_undo:function(){
clearTimeout(this._undo_timer);
this._hide_undo_button();
},
_hide_undo_button:function(){
var oops_button=this.$$first('.oops_button');
if(oops_button){oops_button.undisplay();}
},
_show_purchase_cancelled_message:function(){
this._clear_undo();
this.$$first('.receipt_header').update('Purchase Cancelled');
this.$$first('.estimated_delivery').vhide();
},
_show_soft_error_message:function(){
this._clear_undo();
this.$$first('.errors_in_oops').display();
},
_handle_undo_expired:function(){
this._hide_undo_button();
}
});
Glyde.BuyReceiptWidget.send_cancel_request=function(purchase_order_id,purchase_orders_cancel_url,on_complete){
var options={
parameters:{id:purchase_order_id},
onComplete:(on_complete||P.emptyFunction)
};
new Ajax.Request(purchase_orders_cancel_url,options);
};
Glyde.widgets.AbstractShareButtonsWidget=Class.create(Glyde.widgets.Widget,{
DOM_CLASS:'share_buttons_widget',
SHARE_TYPE:null,initialize:function($super,element,opts){
$super(element);
this._options={
small:false,
referral_code:Glyde.user.referral_code
};
Object.extend(this._options,opts||{});
if(this._options.small)this._element.addClassName('small_share_buttons');
this._element.update(this._render());
this._element.disable_drag_selection();
['email','facebook','twitter'].each(function(button_name){
this.$$first('.'+button_name+'_share_button').observe('click',function(event){
this._show_click_response(event.target);
this['_'+button_name+'_click_handler'](event);
if(typeof ConversionTracker!='undefined'){
ConversionTracker.get_instance().doGAFunction('_trackEvent','Share-'+this.SHARE_TYPE,button_name,[this._shared_item(),'open'].join('-'));
}
}.bindAsEventListener(this));
}.bind(this));
},
email_dialog_node:function(){
return this._share_dialog?$(this._share_dialog._dialog_container_id):null;
},
_email_click_handler:function(event){
if(this._share_dialog==null){this._share_dialog=new ShareDialog();}
},
_facebook_click_handler:function(event){
},
_facebook_publish:function(url,publish_data){
var self=this;
function onResponse(resp){
if(resp&&resp.post_id){
ConversionTracker.get_instance().doGAFunction('_trackEvent','Share-'+self.SHARE_TYPE,'facebook',[self._shared_item(),'published'].join('-'));
}else{
ConversionTracker.get_instance().doGAFunction('_trackEvent','Share-'+self.SHARE_TYPE,'facebook',[self._shared_item(),'canceled'].join('-'));
}
}
Glyde.share.open_facebook_window(url,publish_data,this.SHARE_TYPE,this._options.referral_code,onResponse);
},
_twitter_click_handler:function(event){
},
_show_click_response:function(target){
var clicked_class='share_button_clicked';
target.addClassName(clicked_class);
Element.removeClassName.delay(0.3,target,clicked_class);
},
is_referral:function(){
return this._options.referral_code!=null;
},
_shared_item:function(){
}
});
Glyde.widgets.AbstractShareButtonsWidget.prototype._render=function(){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="share_buttons_container"');_j.s('>');
_j.ns('<a');_j.s(' class="'+('facebook_share_button')+'"');_j.s(' href="'+('javascript: void(0)')+'"');_j.s(' title="'+('Share on Facebook')+'"');_j.s('>');
_j.ns('</a>');
_j.ns('<a');_j.s(' class="'+('twitter_share_button')+'"');_j.s(' href="'+('javascript: void(0)')+'"');_j.s(' title="'+('Share on Twitter')+'"');_j.s('>');
_j.ns('</a>');
_j.ns('<a');_j.s(' class="'+('email_share_button')+'"');_j.s(' href="'+('javascript: void(0)')+'"');_j.s(' title="'+('Send an email')+'"');_j.s('>');
_j.ns('</a>');
_j.ns('</div>');
return _j.v();
};
Glyde.widgets.ShareButtonsBuyWidget=Class.create(Glyde.widgets.AbstractShareButtonsWidget,{
SHARE_TYPE:'buy',initialize:function($super,element,glu,percent_off_msrp,opts){
$super(element,opts);
this._glu=Object.clone(glu);
if(this._glu.glu_id)this._glu.id=this._glu.glu_id;
this._percent_off_msrp=percent_off_msrp;
this._vertical_name=Glyde.Glu.friendly_vertical_name(glu.vertical,false,false,true);
},
_email_click_handler:function($super,event){
$super(event);
this._share_dialog.open_email_buy_item_share(event.target,this._glu,this._percent_off_msrp,true);
},
_facebook_click_handler:function($super,event){
$super(event);
var publish_data={
message:'Just got a great deal on glyde.com',
title:this._glu.title+' on Glyde',
image:Glyde.image.fully_qualified_cover_url_for_max_w_h(this._glu,90,90,'','png'),
description:Glyde.tagline+' on glyde.com.',
prompt:'Tell your friends about your Glyde purchase'
};
this._facebook_publish(Glyde.Glu.product_page_url(this._glu),publish_data);
},
_twitter_click_handler:function($super,event){
$super(event);
this._share_on_twitter(Glyde.TinyUrl.product_page(this._glu.id,this._options.referral_code));
},
_share_on_twitter:function(url){
var max_tweet_length=Glyde.share.MAX_TWITTER_MESSAGE_LENGTH;
var tweet=this._tweet(this._glu.title,url,'. ');
var ellipsis_length=3;if(tweet.length>max_tweet_length-ellipsis_length){
var delta=tweet.length-max_tweet_length+ellipsis_length;
var shortened_title=this._glu.title.truncate_with_delimiters(this._glu.title.length-delta,null,null,true);
tweet=this._tweet(shortened_title,url,'. ');
}else{
tweet=this._tweet_with_extra_info(tweet,max_tweet_length,url);
}
Glyde.share.open_twitter_window(tweet);
},
_share_message:function(glu_title){
var msg=this._tweet(glu_title);
return this._tweet_with_extra_info(msg,500);
},
_tweet:function(glu_title,url,extra_message){
return this._tweet_message('Just bought the ',glu_title,url,extra_message);
},
_tweet_message:function(message_start,glu_title,url,extra_message){
if(extra_message==null){extra_message='';}
return[message_start,this._vertical_name,' ',glu_title,' on glyde.com',extra_message,url].join('');
},
_tweet_with_extra_info:function(tweet,max_tweet_length,url){
if(this._percent_off_msrp>=10){
var save_message=[' and saved ',this._percent_off_msrp,'%. '].join('');
if(max_tweet_length>tweet.length+save_message.length){
tweet=this._tweet(this._glu.title,url,save_message);
}
}
return tweet;
},
_shared_item:function(){
return this._glu.title+'-'+this._glu.id;
}
});
ShareDialog=Class.create(Glyde.Dialog,{
EVENT_OPEN:'share_dialog:open',
EVENT_CLOSE:'share_dialog:close',
EMBED_HELP_WINDOWS:'<p>Use this badge on any webpage to show your collection.</p><p>Press Ctrl+C to copy the code, then Ctrl+V to paste</p>',
EMBED_HELP_OSX:'<p>Use this badge on any webpage to show your collection.</p><p>Press &#8984;C to copy the badge code, then &#8984;V to paste</p>',
EMBED_HELP_IE:'Use this badge on any webpage to show your collection. Copy the code, then paste with Ctrl+V',
COPY_LINK_HELP_WINDOWS:'<p>Press Ctrl+C to copy the link above, then paste it into an email or instant message using Ctrl+V</p>',
COPY_LINK_HELP_OSX:'<p>Press &#8984;C to copy the link above, then paste it into an email or instant message using &#8984;V</p>',
COPY_LINK_HELP_IE:'<p>Click the button to copy the link to the clipboard, then paste it into an email or instant message using Ctrl+V</p>',
MAX_EMAIL_RECIPIENTS:10,
SEND_EMAIL_ERRORS:'<p>The email could not be sent.</p>',
SEND_EMAIL_SUCCESS:'<p>Your email was successfully sent</p>',
SEND_EMAIL_FAILED:'<p>You email could not be sent at this time</p><p>Please try again later</p>',
EMAIL_SAMPLE_ADDRESS_TEXT:'name@gmail.com,name@msn.com',
EMAIL_SAMPLE_MESSAGE_TEXT:'Add your note...',
initialize:function(){
var dialog_options={
is_light:true,
should_center:false,
use_arrow:true,
disable_escape:false,
use_small_close:true
};
Glyde.Dialog.prototype.initialize.call(this,dialog_options);
},
open_share_collection:function(source_element_id,owner,is_owner,is_store,collection){
this._helper=new ShareCollectionHelper(owner,is_owner,is_store,this,collection);
this._open(source_element_id);
this._helper.pregenerate_images();
},
open_share_collection_item:function(source_element_id,listing,owner,is_owner,is_store,position_above,dialog_opener,collection){
this._listing=listing;
this._helper=new ShareCollectionItemHelper(listing,owner,is_owner,is_store,this,collection);
this._open(source_element_id,position_above,dialog_opener);
},
open_share_buy_item:function(source_element_id,glu){
this._helper=new ShareBuyItemHelper(glu);
this._open(source_element_id);
},
open_email_buy_item_share:function(source_element_id,glu,percent_off_msrp,position_above){
this._helper=new ShareEmailBuyHelper(glu,percent_off_msrp);
this._open(source_element_id,position_above,null,'email_panel');
},
open_email_list_item_share:function(source_element_id,glu,url,position_above){
this._helper=new ShareEmailListHelper(glu,url);
this._open(source_element_id,position_above,null,'email_panel');
},
open_email_site_share:function(source_element_id,position_above,referral_code){
this._helper=new ShareEmailSiteHelper(referral_code);
this._open(source_element_id,position_above,null,'email_panel');
},
_open:function(source_element_id,position_above,dialog_opener,panel_name){
this._position_preference=(position_above)?this.POSITION_ABOVE:this.POSITION_BELOW;
var dialog_title=this._helper.dialog_title();
var copy_link_panel_title=this._helper.copy_link_panel_title();
var email_panel_title=this._helper.email_panel_title();
Glyde.Dialog.prototype.open.call(this,$(source_element_id),this._to_html(dialog_title,copy_link_panel_title,email_panel_title),dialog_opener);
this._show_panel(panel_name?panel_name:'main_panel');
Glyde.notify.publish(this.EVENT_OPEN);
},
close:function(){
InputErrorNotice.clear_all();
Glyde.Dialog.prototype.close.call(this);
Glyde.notify.publish(this.EVENT_CLOSE);
},
collection_base_url:function(is_store){
var url=Glyde.urls.collections_url+'/';
var collections_regexp=/\/collections\//;
if(is_store&&collections_regexp.test(url)){
url=url.replace(collections_regexp,'/stores/');
}
return url;
},
front_page_url:function(){
var host_url='http://'+location.host;
return host_url;
},
_show_panel:function(id){
['main_panel','email_panel','badge_panel','copy_link_panel'].each(function(panel_id){
$(panel_id).style.display=(id==panel_id?'block':'none');
});
var on_open_function="_on_open_"+id;
if(this[on_open_function]){this[on_open_function]();}
var on_enter_key_function="_on_enter_key_"+id;
this._on_enter_key=this[on_enter_key_function];
},
_on_open_main_panel:function(){
this._create_main_buttons();
if(this._helper.hide_badge_button()){this._main_buttons['badge_button'].hide();}
},
_create_main_buttons:function(){
this._main_buttons={};
var buttons_info=[
{id:'send_email_button',text:'Send Email',panel:'email_panel'},
{id:'facebook_button',text:'Share on Facebook'},
{id:'myspace_button',text:'Share on MySpace'},
{id:'badge_button',text:'Add Badge'},
{id:'copy_link_button',text:'Copy Link'}
];
buttons_info.each(function(info){
var button=new Glyde.ButtonWidget(info.id,info.text);
this._main_buttons[info.id]=button;
}.bind(this));
with(this._main_buttons){
send_email_button.observe('widget:activate',this._on_activate_email_button.bind(this));
facebook_button.observe('widget:activate',this._on_activate_facebook_button.bind(this));
myspace_button.observe('widget:activate',this._on_activate_myspace_button.bind(this));
badge_button.observe('widget:activate',function(){this._show_panel('badge_panel');}.bind(this));
copy_link_button.observe('widget:activate',function(){this._show_panel('copy_link_panel');}.bind(this));
}
},
_on_activate_email_button:function(){
if(Glyde.user){
this._show_panel('email_panel');
return;
}else{
var context=$H({a:window.location.pathname+'#share_email'}).toQueryString();
Glyde.page.header.login({on_success:this._on_activate_email_button.bind(this)},context,{return_to:window.location,ctx:context});
}
},
_on_open_email_panel:function(){
this._send_email_button=new Glyde.ButtonWidget('send_email_send_button','Send Email',{color:'blue'});
this._send_email_button.observe('widget:activate',this._on_activate_send_email_button.bind(this));
this._setup_sample_text('email_addresses_input',this.EMAIL_SAMPLE_ADDRESS_TEXT,'keydown');
this._setup_sample_text('email_addresses_input',this.EMAIL_SAMPLE_ADDRESS_TEXT,'click');
this._setup_sample_text('email_message_input',this.EMAIL_SAMPLE_MESSAGE_TEXT,'focus');
var preview_container=$('email_message_preview_container');
preview_container.update(this._strip_newlines(this._helper.email_salutation()));
preview_container.select('a').each(function(link){link.href="javascript:void (0)";});
with($('email_addresses_input')){
focus();
select();
}
},
_on_activate_send_email_button:function(){
InputErrorNotice.clear_all();
var emails=$('email_addresses_input').value;
var error_str=this._validate_email_addresses(emails);
if(error_str){
this._display_error(this._create_error('email_addresses_input',error_str));
}else{
this._send_share_email_request(this._split_email_string(emails));
}
},
_send_share_email_request:function(recipients){
var request_params={
recipients:recipients.slice(0,this.MAX_EMAIL_RECIPIENTS).join(' '),
salutation:this._helper.email_salutation(),
user_text:this._email_message_input_value()
};
Object.extend(request_params,this._helper.email_parameters());
var options={
method:'post',
parameters:request_params,
onSuccess:function(t,o){
this._on_end_share_email_request();
$('send_email_form').enable();
var json=t.responseJSON;
if(json.success){
this._on_share_email_success();
}else{
this._on_share_email_errors(json.errors);
}
}.bind(this),
onFailure:function(t,o){
this._on_end_share_email_request();
this._on_share_email_failure();
}.bind(this)
};
this._on_start_share_email_request();
new Ajax.Request(this._helper.email_creation_url(),options);
},
_on_share_email_success:function(){
$('email_server_status').update(this.SEND_EMAIL_SUCCESS);
$('email_addresses_input').value='';
$('email_message_input').value='';
this._pause_and_fade_server_status(function(){
this._send_email_button.enable();
}.bind(this));
},
_on_share_email_errors:function(errors){
if(errors&&errors.length){
this._display_error(this._create_error('email_addresses_input',errors[0]));
$('email_server_status').hide();
this._send_email_button.enable();
}else{
$('email_server_status').update(this.SEND_EMAIL_ERRORS);
this._pause_and_fade_server_status(function(){
this._send_email_button.enable();
}.bind(this));
}
},
_on_share_email_failure:function(){
$('email_server_status').update(this.SEND_EMAIL_FAILED);
},
_pause_and_fade_server_status:function(callback){
var email_server_status=$('email_server_status');
var options={
duration:750,
onComplete:function(){
with(email_server_status){
hide();
vshow();
}
if(callback){callback();}
}
};
setTimeout(function(){
var fade_effect=new fx.Opacity(email_server_status,options);
fade_effect.toggle();
},2500);
},
_email_message_input_value:function(){
var value=$('email_message_input').value;
return(value==this.EMAIL_SAMPLE_MESSAGE_TEXT)?'':value;
},
_on_start_share_email_request:function(){
with($('email_server_status')){
setOpacity(1);
style.display='block';
}
$('send_email_form').disable();
this._send_email_button.disable();
Loading.show();
},
_on_end_share_email_request:function(){
Loading.hide();
},
_validate_email_addresses:function(email_str){
var generic_error='Enter one or more email addresses separated by commas or spaces';
if(email_str.length==0||email_str==this.EMAIL_SAMPLE_ADDRESS_TEXT){return generic_error;}
var emails=this._split_email_string(email_str);
if(emails.length==0){return generic_error;}
var num_valid_addresses=0;
var error_str=null;
for(var i=0;i<emails.length;i++){
var address=emails[i];
if(address.length==0){continue;}
if(Glyde.is_valid.email_address(address)){
num_valid_addresses++;
}else{
error_str='"'+address+'" does not appear to be a valid email address';
return error_str;
}
}
if(num_valid_addresses>this.MAX_RECIPIENTS){
error_str='Please provide a maximum of '+this.MAX_RECIPIENTS+' email addresses';
}else if(num_valid_addresses==0){
error_str=generic_error;
}
return error_str;
},
_split_email_string:function(emails_str){
var split_regexp=emails_str.indexOf(",")>-1?/,\s*/:/\s+/;
return emails_str.split(split_regexp);
},
_setup_sample_text:function(input_element_id,sample_text,event_name){
event_name=event_name||'keydown';
var on_event=function(){
with($(input_element_id)){
value='';
removeClassName('sample_text');
stopObserving(event_name,on_event);
}
}.bindAsEventListener(this);
with($(input_element_id)){
value=sample_text;
observe(event_name,on_event);
}
},
_create_error:function(id,value){
return{id:id,value:value};
},
_display_error:function(error){
InputErrorNotice.create_all_no_load([error]);
InputErrorNotice.focusFirstError();
},
_on_open_badge_panel:function(){
var badge_html=this._to_badge_html().replace(/^\s+/,'');
$('badge_container').innerHTML=badge_html;
with($('badge_embed_code')){
value=badge_html;
observe('click',function(){$('badge_embed_code').select();});
}
$('badge_embed_help').innerHTML=
(Glyde.Browser.IE)?this.EMBED_HELP_IE:
(Glyde.Browser.MAC)?this.EMBED_HELP_OSX:
this.EMBED_HELP_WINDOWS;
var button_options={color:'blue',tooltip_text:'copy the code to the clipboard'};
var badge_embed_copy_button=new Glyde.ButtonWidget('badge_embed_copy_button','Copy Code',button_options);
badge_embed_copy_button.observe('widget:activate',function(){
Glyde.dom.copy_to_clipboard_ie(badge_html);
}.bind(this));
if(!Glyde.Browser.IE){badge_embed_copy_button.hide();}
with($('badge_embed_code')){
focus();
select();
}
},
_on_open_copy_link_panel:function(){
var link_url=this._helper.share_url();
with($('copy_link_code')){
value=link_url;
observe('click',function(){$('copy_link_code').select();});
}
$('copy_link_help').innerHTML=
(Glyde.Browser.IE)?this.COPY_LINK_HELP_IE:
(Glyde.Browser.MAC)?this.COPY_LINK_HELP_OSX:
this.COPY_LINK_HELP_WINDOWS;
var button_options={color:'blue',tooltip_text:'copy the code to the clipboard'};
var copy_link_button=new Glyde.ButtonWidget('copy_link_copy_button','Copy Code',button_options);
copy_link_button.observe('widget:activate',function(){
Glyde.dom.copy_to_clipboard_ie(link_url);
}.bind(this));
if(!Glyde.Browser.IE){copy_link_button.hide();}
with($('copy_link_code')){
focus();
select();
}
},
_on_activate_facebook_button:function(){
Glyde.share.open_facebook_window(this._helper.share_url());
},
_on_activate_myspace_button:function(event){
var share_params=$H({
fuseaction:'postto',
t:this._helper.myspace_title(),
c:this._helper.myspace_content(),
l:this._helper.myspace_location(),
u:this._helper.share_url()
});
var myspace_share_url='http://www.myspace.com/index.cfm?'+share_params.toQueryString();
window.open(myspace_share_url);
},
_strip_newlines:function(str){
return str.replace(/\n/g,'');
},
_set_container_ids:function(instance_num){
this._dialog_container_id='share_dialog_container';
this._container_id='share_dialog_content';
this._arrow_id='share_dialog_arrow';
this._close_button_id='share_dialog_close_button';
}
});
ShareDialogHelper=Class.create({
intialize:function(referral_code){
this._referral_code=referral_code;
},
dialog_title:function(){},
copy_link_panel_title:function(){},
email_panel_title:function(){return'Tell Your Friends';},
share_url:function(){},
hide_badge_button:function(){
return true;
},
email_subject:function(){},
email_salutation:function(){},
email_view_link:function(){},
email_farewell:function(){},
email_composite_image_url:function(){},
email_parameters:function(){return{};},
email_creation_url:function(){}
});
ShareEmailBuyHelper=Class.create(ShareDialogHelper,{
initialize:function($super,glu,percent_off_msrp,referral_code){
$super(referral_code);
this._glu=glu;
this._percent_off_msrp=percent_off_msrp;
this._vertical_name=Glyde.Glu.friendly_vertical_name(glu.vertical,false,false,true);
},
email_salutation:function(){
return this._email_salutation(this._percent_off_msrp);
},
email_parameters:function(){
return{
glu_id:this._glu.id
};
},
email_creation_url:function(){
return'/share_emails/create_buy';
}
});
ShareEmailListHelper=Class.create(ShareDialogHelper,{
initialize:function($super,glu,listing_id){
$super();
this._glu=glu;
this._listing_id=listing_id;
this._vertical_name=Glyde.Glu.friendly_vertical_name(glu.vertical,false,false,true);
},
email_salutation:function(){
return this._email_salutation();
},
email_parameters:function(){
return{
listing_id:this._listing_id
};
},
email_creation_url:function(){
return'/share_emails/create_listing';
}
});
ShareEmailSiteHelper=Class.create(ShareDialogHelper,{
email_salutation:function(){
return this._email_salutation();
},
email_creation_url:function(){
return'/share_emails/create_site';
}
});
SharePanelDialogHelper=Class.create(ShareDialogHelper,{
email_panel_title:function(){
return'Send Email';
},
myspace_title:function(){},
myspace_content:function(){},
myspace_location:function(){}
});
ShareCollectionHelper=Class.create(SharePanelDialogHelper,{
initialize:function(owner,is_owner,is_store,share_dialog,collection){
this._owner=owner;
this._collection=collection||{};
this._is_owner=is_owner;
this._is_store=is_store;
this._collection_type_label=(is_store)?'store':'media collection';
this._store_name=is_store?collection.store_name:owner.username;
this._collection_url=share_dialog.collection_base_url(is_store)+this._store_name;
this._front_page_url=share_dialog.front_page_url();
this._email_composite_image_url=this._composite_image_url(3,3,53,73,this._store_name);
this._facebook_composite_image_url=this._composite_image_url(3,3,42,58,this._store_name);
},
dialog_title:function(){
var owner_name=this._store_name;
var owner_label=(this._is_store)?'':(this._is_owner)?'your':owner_name+'\'s';
return'Share '+owner_label+' '+this._collection_type_label;
},
hide_badge_button:function(){
return!this._is_owner||this._is_store;
},
copy_link_panel_title:function(){
return'Copy '+this._collection_type_label+' link';
},
share_url:function(){
return this._collection_url;
},
email_subject:function(){
return this._email_subject_text();
},
email_salutation:function(){
return(this._is_owner)?this._email_collection_owner_salutation():
this._email_collection_non_owner_salutation();
},
email_view_link:function(){
return this._email_view_link();
},
email_farewell:function(){
return this._email_farewell(this._is_owner&&!this._is_store);
},
email_composite_image_url:function(){
return this._email_composite_image_url;
},
email_parameters:function(){
return{
subject_text:this.email_subject().replace(/\n/g,''),
farewell:this.email_farewell(),
view_link:this.email_view_link(),
composite_image_url:this.email_composite_image_url()
};
},
email_creation_url:function(){
return'/share_emails/create_collection';
},
myspace_title:function(){
return this._myspace_title();
},
myspace_content:function(){
return this._myspace_content();
},
myspace_location:function(){
return(this._is_owner)?3:2;
},
collection_url:function(){
return this._collection_url;
},
pregenerate_images:function(){
this._pregenerate_composite_image(this._email_composite_image_url);
this._pregenerate_composite_image(this._facebook_composite_image_url);
},
_pregenerate_composite_image:function(image_url){
var pregen_url='http://'+location.host+'/palettes/pregen_image';
var options={
method:'get',
parameters:{composite_image_url:image_url}
};
new Ajax.Request(pregen_url,options);
},
_composite_image_url:function(rows,columns,width,height,identifier){
var dims=rows+'/'+columns+'/'+width+'x'+height;
return'http://'+location.host+'/palettes/'+dims+'/'+identifier+'.jpg';
}
});
ShareCollectionItemHelper=Class.create(SharePanelDialogHelper,{
initialize:function(item,owner,is_owner,is_store,share_dialog,collection){
this._is_store=is_store;
if(this._is_store){
this._listing=item.listing;
var item_id=item.id;
}else{
this._listing=item;
var item_id=this._listing.attrs.id;
}
this._owner=owner;
this._is_owner=is_owner;
this._store_name=(collection&&is_store)?collection.store_name:owner.username;
this._listing_url=share_dialog.collection_base_url(is_store)+owner.username+'?open=true&item='+item_id;
this._front_page_url=share_dialog.front_page_url();
this._cover_url='http://'+location.host+'/'+this._listing.img_path(130,180);
},
dialog_title:function(){
var owner_label=(this._is_store)?'':(this._is_owner)?'your ':this._owner.username+'\'s ';
return'Share '+owner_label+'item';
},
hide_badge_button:function(){
return true;
},
copy_link_panel_title:function(){
return'Copy item link';
},
share_url:function(){
return this._listing_url;
},
email_subject:function(){
return this._email_item_subject_text(this._listing);
},
email_salutation:function(){
return this._email_item_salutation(this._listing);
},
email_view_link:function(){
return this._email_view_item_link();
},
email_farewell:function(){
return this._email_farewell();
},
myspace_title:function(){
return this._myspace_title();
},
myspace_content:function(){
return this._myspace_content();
},
myspace_location:function(){
return 2;
},
_midsentence_product_type:function(listing){
var type=listing.attrs.product_type;
return(type=='Book'||type=='Game')?type.toLowerCase():type;
}
});
ShareBuyItemHelper=Class.create(SharePanelDialogHelper,{
initialize:function(glu){
this._glu=glu;
this._vertical_name=this._midsentence_vertical_name(glu);
glu.glu_id=glu.id;
this._cover_url=Glyde.image.fully_qualified_cover_url_for_max_w_h(glu,130,180);
this._glu_url=Glyde.Glu.product_page_url(glu);
},
dialog_title:function(){
return'Share "'+this._glu.title.truncate_with_delimiters(25)+'"';
},
hide_badge_button:function(){
return true;
},
copy_link_panel_title:function(){
return"Copy item link";
},
share_url:function(){
return this._glu_url;
},
email_subject:function(){
return this._email_glu_subject_text(this._glu,this._vertical_name);
},
email_salutation:function(){
return this._email_glu_salutation(this._glu,this._vertical_name);
},
email_view_link:function(){
return this._email_view_link(this._glu);
},
email_farewell:function(){
var lowest_price=-1;
if(this._glu.lowest_price_cents!=null){
lowest_price=this._glu.lowest_price_cents;
}else{
this._glu.skus.each(function(sku){
if(sku.best_price.quantity>0){
if(lowest_price==-1||sku.best_price.cents<lowest_price){
lowest_price=sku.best_price.cents;
}
}
});
}
var price_str=(lowest_price==-1)?null:'$'+Glyde.Money.format_cents(lowest_price);
return this._email_glu_farewell(this._glu,price_str);
},
myspace_title:function(){
return this._myspace_title(this._glu);
},
myspace_content:function(){
return this._myspace_content(this._glu);
},
myspace_location:function(){
return 2;
},
_midsentence_vertical_name:function(glu){
var lookup={music:'CD',videos:'DVD',games:'game',books:'book'};
return lookup[glu.vertical];
}
});
ShareDialog.prototype._to_html=function(dialog_title,copy_link_panel_title,email_panel_title){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="common_dialog"');_j.s(' id="share_dialog"');_j.s('>');
_j.ns('<div');_j.s(' class="share_dialog_panel"');_j.s(' id="main_panel"');_j.s('>');
_j.ns('<div');_j.s(' class="title"');_j.s('>'+(dialog_title));
_j.ns('</div>');
_j.ns('<div');_j.s(' id="main_buttons_container"');_j.s('>');
_j.ns('<div');_j.s(' id="send_email_button"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' id="facebook_button"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' id="myspace_button"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' id="badge_button"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' id="copy_link_button"');_j.s('>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="share_dialog_panel"');_j.s(' id="email_panel"');_j.s('>');
_j.ns('<div');_j.s(' class="title"');_j.s('>');
_j.ns(email_panel_title);
_j.ns('</div>');
_j.ns('<form');_j.s(' id="send_email_form"');_j.s(' onsubmit="'+('return false;')+'"');_j.s('>');
_j.ns('<div');_j.s(' class="field"');_j.s('>');
_j.ns('<label');_j.s(' for="'+('email_addresses_input')+'"');_j.s('>To');
_j.ns('</label>');
_j.ns('<input');_j.s(' class="sample_text"');_j.s(' id="email_addresses_input"');_j.s(' type="'+('text')+'"');_j.s('>');
_j.ns('</input>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="field"');_j.s('>');
_j.ns('<label');_j.s(' for="'+('email_message_input')+'"');_j.s('>Message');
_j.ns('</label>');
_j.ns('<div');_j.s(' id="email_server_status"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' id="email_message_preview_container"');_j.s('>');
_j.ns('</div>');
_j.ns('<textarea');_j.s(' class="sample_text"');_j.s(' id="email_message_input"');_j.s('>');
_j.ns('</textarea>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="widget_button_row"');_j.s('>');
_j.ns('<div');_j.s(' id="send_email_send_button"');_j.s('>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('</form>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="share_dialog_panel"');_j.s(' id="badge_panel"');_j.s('>');
_j.ns('<div');_j.s(' class="title"');_j.s('>');
_j.ns('Add Badge');
_j.ns('</div>');
_j.ns('<div');_j.s(' id="badge_container"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="field"');_j.s('>');
_j.ns('<textarea');_j.s(' class="code_box"');_j.s(' id="badge_embed_code"');_j.s(' readonly="'+('true')+'"');_j.s('>');
_j.ns('</textarea>');
_j.ns('</div>');
_j.ns('<div');_j.s(' id="badge_embed_help"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="widget_button_row"');_j.s('>');
_j.ns('<div');_j.s(' id="badge_embed_copy_button"');_j.s('>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="share_dialog_panel"');_j.s(' id="copy_link_panel"');_j.s('>');
_j.ns('<div');_j.s(' class="title"');_j.s('>'+(copy_link_panel_title));
_j.ns('</div>');
_j.ns('<div');_j.s(' class="field"');_j.s('>');
_j.ns('<textarea');_j.s(' class="code_box"');_j.s(' id="copy_link_code"');_j.s(' readonly="'+('true')+'"');_j.s('>');
_j.ns('</textarea>');
_j.ns('</div>');
_j.ns('<div');_j.s(' id="copy_link_help"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="widget_button_row"');_j.s('>');
_j.ns('<div');_j.s(' id="copy_link_copy_button"');_j.s('>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('</div>');
return _j.v();
};
ShareDialog.prototype._to_badge_html=function(){
var _j=new Jaml();
if(Glyde.user){
var logo_url="http://"+location.host+"/images/badges/button-100x24.png";
_j.ns('<a');_j.s(' href="'+(this._helper.share_url())+'"');_j.s(' title="'+('check out my collection at glyde.com')+'"');_j.s('>');
_j.ns('<img');_j.s(' src="'+(logo_url)+'"');_j.s(' width="'+('100')+'"');_j.s(' height="'+('24')+'"');_j.s(' border="'+('0')+'"');_j.s(' alt="'+('see my collection')+'"');_j.s(' />');
_j.ns('</a>');
}
return _j.v();
};
ShareCollectionHelper.prototype._email_subject_text=function(){
var _j=new Jaml();
if(this._is_owner){
_j.ns('Check out '+this._owner.name.capitalize_each_word()+'\'s '+this._collection_type_label);
}
else{
_j.ns(Glyde.user.name.capitalize_each_word()+' has shared a '+this._collection_type_label+' with you');
}
return _j.v();
};
ShareCollectionHelper.prototype._email_collection_owner_salutation=function(){
var _j=new Jaml();
var collection_label=(this._is_store)?' has a store':' has created a media collection';
_j.ns('<p');_j.s('>'+(this._owner.name.capitalize_each_word()+collection_label+' on Glyde and would like to share it with you.'));
_j.ns('</p>');
return _j.v();
};
ShareCollectionHelper.prototype._email_collection_non_owner_salutation=function(){
var _j=new Jaml();
_j.ns('<p');_j.s('>'+(Glyde.user.name.capitalize_each_word()+' thinks you will be interested in a '+this._collection_type_label+' on Glyde.'));
_j.ns('</p>');
return _j.v();
};
ShareCollectionHelper.prototype._email_collection_owner_farewell=function(){
var _j=new Jaml();
_j.ns('<p');_j.s('>'+('Have fun checking out '+Glyde.user.first_name.capitalize()+'\'s collection.'));
_j.ns('</p>');
return _j.v();
};
ShareCollectionHelper.prototype._email_view_link=function(){
var _j=new Jaml();
var collection_url=this._collection_url;
_j.ns('<p');_j.s('>');
_j.ns('<a');_j.s(' href="'+(collection_url)+'"');_j.s('>');
_j.ns('<img');_j.s(' src="'+(this._email_composite_image_url)+'"');_j.s(' style="'+('border: 1px solid black;')+'"');_j.s(' />');
_j.ns('</a>');
_j.ns('</p>');
_j.ns('<a');_j.s(' href="'+(collection_url)+'"');_j.s(' title="'+(collection_url)+'"');_j.s('>');
_j.ns('View it here');
_j.ns('</a>');
return _j.v();
};
ShareCollectionHelper.prototype._email_farewell=function(include_collection_owner_message){
var _j=new Jaml();
_j.ns('<p');_j.s('>'+('Want to organize and share your own collection? Sign up at <a href="'+this._front_page_url+'">glyde.com</a>.'));
_j.ns('</p>');
_j.ns('<p');_j.s('>'+('Glyde is the easiest and cheapest way to buy, sell, and organize your DVDs, CDs, games, and books.'));
_j.ns('</p>');
if(include_collection_owner_message){
_j.ns('<p');_j.s('>'+('Have fun checking out '+Glyde.user.first_name.capitalize()+'\'s collection.'));
_j.ns('</p>');
}
return _j.v();
};
ShareCollectionHelper.prototype._myspace_title=function(){
var _j=new Jaml();
var owner_label=(this._is_owner)?'My ':(this._owner.username+'\'s ');
_j.ns('Glyde: '+owner_label+this._collection_type_label+' of DVDs, CDs, games, and books');
return _j.v();
};
ShareCollectionHelper.prototype._myspace_content=function(){
var _j=new Jaml();
var collection_label=(this._is_store)?'store':'media collection';
if(this._is_owner){
_j.ns('<p');_j.s('>'+('Check out my '+this._collection_type_label+' of DVDs, CDs, video games, and books.'));
_j.ns('</p>');
}
else{
if(this._is_store){
_j.ns('<p');_j.s('>'+('Buy used and new DVD movies, music CDs, video games, and books at great prices.'));
_j.ns('</p>');
}
else{
_j.ns('<p');_j.s('>'+('View '+this._owner.username+'\'s collection on glyde.com, the cheapest and easiest way to buy, sell, and organize DVD movies, music CDs, video games, and books.'));
_j.ns('</p>');
}
}
_j.ns('<a');_j.s(' href="'+(this._collection_url)+'"');_j.s('>');
_j.ns('<img');_j.s(' src="'+(this._facebook_composite_image_url)+'"');_j.s(' style="'+('border: 1px solid black;')+'"');_j.s(' />');
_j.ns('</a>');
return _j.v();
};
ShareCollectionItemHelper.prototype._email_item_subject_text=function(listing){
var _j=new Jaml();
var name_label=(this._is_owner&&this._is_store)?this._owner.name:Glyde.user.name.capitalize_each_word();
_j.ns(name_label+' has shared the '+this._midsentence_product_type(listing)+' "'+listing.attrs.title+'" with you');
return _j.v();
};
ShareCollectionItemHelper.prototype._email_item_salutation=function(listing){
var _j=new Jaml();
var name_label=Glyde.page.is_user_bulk_seller()?Glyde.user.name.capitalize_each_word():(this._is_owner&&this._is_store)?this._owner.name:Glyde.user.first_name.capitalize();
_j.ns('<p');_j.s('>'+(name_label+' thinks you will be interested in the '+this._midsentence_product_type(listing)+' "'+listing.attrs.title+'".'));
_j.ns('</p>');
return _j.v();
};
ShareCollectionItemHelper.prototype._email_view_item_link=function(){
var _j=new Jaml();
if(this._listing.attrs.has_image){
_j.ns('<p');_j.s('>');
_j.ns('<a');_j.s(' href="'+(this._listing_url)+'"');_j.s('>');
_j.ns('<img');_j.s(' src="'+(this._cover_url)+'"');_j.s(' />');
_j.ns('</a>');
_j.ns('</p>');
}
_j.ns('<p');_j.s('>');
_j.ns('<a');_j.s(' href="'+(this._listing_url)+'"');_j.s('>'+('View it here'));
_j.ns('</a>');
_j.ns('</p>');
return _j.v();
};
ShareCollectionItemHelper.prototype._email_farewell=function(){
var _j=new Jaml();
_j.ns('<p');_j.s('>'+('Want to organize and share your own collection? Sign up at <a href="'+this._front_page_url+'">glyde.com</a>.'));
_j.ns('</p>');
_j.ns('<p');_j.s('>'+('Glyde is the easiest and cheapest way to buy, sell, and organize your DVDs, CDs, games, and books.'));
_j.ns('</p>');
return _j.v();
};
ShareCollectionItemHelper.prototype._myspace_title=function(){
var _j=new Jaml();
var collection_type_label=(this._is_store)?'store':'collection';
var product_type=this._midsentence_product_type(this._listing);
_j.ns('Glyde: "'+this._listing.attrs.title+'", a '+product_type+' in '+this._owner.username+'\'s '+collection_type_label+'.');
return _j.v();
};
ShareCollectionItemHelper.prototype._myspace_content=function(){
var _j=new Jaml();
var collection_type_label=(this._is_store)?'store':'collection';
var product_type=this._midsentence_product_type(this._listing);
if(this._is_owner&&!this._is_store){
_j.ns('<p');_j.s('>'+('Check out the '+product_type+' "'+this._listing.attrs.title+'" in my collection.'));
_j.ns('</p>');
}
else{
_j.ns('<p');_j.s('>'+('"'+this._listing.attrs.title+'", a '+product_type+' in '+this._owner.username+'\'s '+collection_type_label+'.'));
_j.ns('</p>');
}
if(this._listing.attrs.has_image){
_j.ns('<p');_j.s('>');
_j.ns('<a');_j.s(' href="'+(this._listing_url)+'"');_j.s('>');
_j.ns('<img');_j.s(' src="'+(this._cover_url)+'"');_j.s(' />');
_j.ns('</a>');
_j.ns('</p>');
}
else{
_j.ns('<p');_j.s('>');
_j.ns('<a');_j.s(' href="'+(this._listing_url)+'"');_j.s('>'+('View it here'));
_j.ns('</a>');
_j.ns('</p>');
}
return _j.v();
};
ShareBuyItemHelper.prototype._email_glu_subject_text=function(glu,vertical){
var _j=new Jaml();
_j.ns(Glyde.user.name.capitalize_each_word()+' has shared the '+vertical+' "'+glu.title+'" with you');
return _j.v();
};
ShareBuyItemHelper.prototype._email_glu_salutation=function(glu,vertical){
var _j=new Jaml();
_j.ns('<p');_j.s('>'+(Glyde.user.first_name.capitalize()+' thinks you will be interested in the '+vertical+' "'+glu.title+'".'));
_j.ns('</p>');
return _j.v();
};
ShareBuyItemHelper.prototype._email_view_link=function(glu){
var _j=new Jaml();
if(glu.has_image){
_j.ns('<p');_j.s('>');
_j.ns('<a');_j.s(' href="'+(this._glu_url)+'"');_j.s('>');
_j.ns('<img');_j.s(' src="'+(this._cover_url)+'"');_j.s(' />');
_j.ns('</a>');
_j.ns('</p>');
}
_j.ns('<p');_j.s('>');
_j.ns('<a');_j.s(' href="'+(this._glu_url)+'"');_j.s('>'+('View it here'));
_j.ns('</a>');
_j.ns('</p>');
return _j.v();
};
ShareBuyItemHelper.prototype._email_glu_farewell=function(glu,price){
var _j=new Jaml();
_j.ns('<p');_j.s('>');
if(price!=null){
_j.ns('"'+glu.title+'" is available for sale on <a href="'+this._glu_url+'">glyde.com</a> for as low as '+price+'. ');
}
_j.ns('Glyde is the easiest and cheapest way to buy and sell your DVDs, CDs, games, and books.');
_j.ns('</p>');
return _j.v();
};
ShareBuyItemHelper.prototype._myspace_title=function(glu){
var _j=new Jaml();
var creator=glu.creator?' - '+glu.creator:'';
_j.ns('Glyde: "'+glu.title+'"'+creator+' - '+this._vertical_name);
return _j.v();
};
ShareBuyItemHelper.prototype._myspace_content=function(glu){
var _j=new Jaml();
_j.ns('<p');_j.s('>'+('Buy or sell "'+glu.title+'" on glyde.com, the cheapest and easiest way to buy, sell, and organize DVD movies, music CDs, video games, and books.'));
_j.ns('</p>');
if(glu.has_image){
_j.ns('<p');_j.s('>');
_j.ns('<a');_j.s(' href="'+(this._glu_url)+'"');_j.s('>');
_j.ns('<img');_j.s(' src="'+(this._cover_url)+'"');_j.s(' />');
_j.ns('</a>');
_j.ns('</p>');
}
else{
_j.ns('<p');_j.s('>');
_j.ns('<a');_j.s(' href="'+(this._glu_url)+'"');_j.s('>'+('View it here'));
_j.ns('</a>');
_j.ns('</p>');
}
return _j.v();
};
ShareEmailBuyHelper.prototype._email_salutation=function(percent_off_msrp){
var _j=new Jaml();
var save_text=(percent_off_msrp>10)?' and saved '+percent_off_msrp+'%':'';
_j.ns('<p');_j.s('>'+(Glyde.user.first_name.capitalize()+' bought the '+this._vertical_name+' "'+this._glu.title+'" on glyde.com'+save_text+'.'));
_j.ns('</p>');
return _j.v();
};
ShareEmailListHelper.prototype._email_salutation=function(){
var _j=new Jaml();
_j.ns('<p');_j.s('>'+(Glyde.user.first_name.capitalize()+' thinks you might be interested in buying the '+this._vertical_name+' "'+this._glu.title+'" on glyde.com.'));
_j.ns('</p>');
return _j.v();
};
ShareEmailSiteHelper.prototype._email_salutation=function(){
var _j=new Jaml();
_j.ns('<p');_j.s('>'+(Glyde.user.first_name.capitalize()+' thinks you will be interested in '+'glyde.com'+' to simply buy and sell your video games, DVDs, CDs, and books.'));
_j.ns('</p>');
return _j.v();
};
ShareDialogHelper.prototype._email_farewell=function(){
var _j=new Jaml();
_j.ns('<p');_j.s(' style="'+('font-size:smaller;')+'"');_j.s('>');
_j.ns('Follow Glyde on <a href=\'http://twitter.com/glyde\'>Twitter</a> or <a href=\'http://www.facebook.com/glyde\'>Facebook</a>');
_j.ns('</p>');
_j.ns('<div');_j.s('>');
_j.ns('</div>');
return _j.v();
};
var RelatedItemsScroll=Class.create(MerchandisingScrollWidget,{
ITEMS_PER_PAGE:10,
MAX_COVER_WIDTH:63,
MAX_COVER_HEIGHT:88,
initialize:function($super,element,tag_ids_any,tag_ids_all,glu_id,glu_data,glu_count,scroll_num,platform){
this._tag_ids_any=tag_ids_any.join('_');
this._tag_ids_all=tag_ids_all.join('_');
this._glu_id=glu_id;
this._glu_data=glu_data;
this._glu_count=glu_count;
this._glus_by_id={};
this._scroll_num=scroll_num;
if(platform){this._platform=platform;}
$(element).addClassName('merchandising_scroll_widget');
$super(element,this.ITEMS_PER_PAGE,true);
},
initial_load:function(start_page){
this.refresh(start_page,false);
},
dispose:function(){
this._element.stopObserving('click',this._click_handler_func);
},
click_handler:function($super,e){
$super(e);
var target=e.element();
if(target.hasClassName('cover')){
var glu_id=target.id.match(/^cover_(\d+)$/)[1];
var glu=this._glus_by_id[glu_id];
ConversionTracker.get_instance().track('/related/glu_selected_from_scroll/'+this._scroll_num);
window.location='/products/'+glu_id+'/'+glu.title.title_for_url();
}
},
_cover_extension:function(){
return'd';
},
_add_to_glus_map:function(glus_array){
var len=glus_array.length;
for(var i=0;i<len;++i){
var m=glus_array[i];
m.glu_id=m.id;
this._glus_by_id[m.id]=m;
}
},
_render_pages:function(page_range,callback){
var render_func=function(json){
var total_pages=Math.ceil(json.glu_count/this.ITEMS_PER_PAGE);
var pages=[];
this._add_to_glus_map(json.glu_data);
for(var c=page_range[0];c<=page_range[1];c++){
var start=(c-page_range[0])*this._page_size*this._item_size;
var stop=start+(this._page_size*this._item_size);
var glus=json.glu_data.slice(start,stop);
pages.push({page_index:c,items:[this._render_items(glus,this._context)]});
}
(callback||this._on_pages_ready.bind(this))(pages,total_pages);
}.bind(this);
if(this._glu_data&&page_range[0]==0&&page_range[1]==1){
render_func({glu_data:this._glu_data,glu_count:this._glu_count});
this._glu_data=null;
}else{
this._fetch_related_glu_pages(page_range,render_func);
}
},
_fetch_related_glu_pages:function(page_range,callback){
var offset=page_range[0]*this.ITEMS_PER_PAGE;
var num_pages=page_range[1]-page_range[0]+1;
var limit=num_pages*this.ITEMS_PER_PAGE;
var options={
method:'get',
parameters:{
tag_ids_any:this._tag_ids_any,
tag_ids_all:this._tag_ids_all,
glu_id:this._glu_id,
limit:limit,
offset:offset
},
onComplete:function(resp,o){
var json=resp.responseJSON;
if(json.success){
callback(json.related_glu_bundle);
}else{
Glyde.page.handle_server_errors(json);
}
}.bind(this)
};
new Ajax.Request('/related/for_tags',options);
}
});
RelatedItemsScroll.prototype._render_items=function(glus){
var _j=new Jaml();
for(var i=0;i<glus.length;i++){
var glu=glus[i];
var cover_art_url=Glyde.image.fully_qualified_cover_url_for_max_w_h(glu,this.MAX_COVER_WIDTH,this.MAX_COVER_HEIGHT,this._cover_extension());
var dims=Glyde.image.dimensions_from_cover_url(cover_art_url);
var style="background-image: url('"+cover_art_url+"')";
var tooltip=glu.title+' ';
if(glu.creators.length&&glu.vertical!='videos'){
var creator_text='(';
if(glu.vertical=='music'){
creator_text+=glu.creators[0];
}
else if(glu.vertical=='books'){
if(glu.creators.length>3){
creator_text+=glu.creators.slice(0,3).join(', ')+'...';
}
else{
creator_text+=glu.creators.join(', ');
}
}
else if(glu.vertical=='games'){
creator_text+=this._platform;
}
tooltip+=creator_text+') ';
}
tooltip+=Glyde.Glu.friendly_vertical_name(glu.vertical,false,true,true);
_j.ns('<div');_j.s(' class="scroll_item_box"');_j.s('>');
_j.ns('<div');_j.s(' class="scroll_item"');_j.s(' id="'+('scroll_item_'+glu.id)+'"');_j.s(' style="'+(style)+'"');_j.s('>');
_j.ns('<a');_j.s(' class="cover"');_j.s(' id="'+('cover_'+glu.id)+'"');_j.s(' style="'+("width: "+dims.width+"px; height: "+dims.height+"px;")+'"');_j.s(' title="'+(tooltip)+'"');_j.s('>');
_j.ns('</a>');
_j.ns('<div');_j.s(' class="scroll_item_info"');_j.s('>');
_j.ns(this._render_glu_price(glu));
_j.ns('</div>');
_j.ns('</div>');
_j.ns('</div>');
}
return _j.v();
};
var RelatedItemsWidget=Class.create(Glyde.widgets.Widget,{
initialize:function($super,element,glu_id,vertical,tags,glu_data,glu_total,platform){
$super(element);
this._vertical=vertical;
this._glu_id=glu_id;
this._glu_data=glu_data;
this._glu_total=glu_total;
this._collapsed=glu_data==null;
if(platform){this._platform=platform;}
this._organize_tags(tags);
this._element.addClassName('related_items_widget');
if(this._vertical=='music'){this._element.addClassName('related_items_widget_music');}
this._element.update(this._render());
var related_items_title=this._element.select('.related_items_title')[0];
related_items_title.observe('click',this._title_click_listener.bindAsEventListener(this));
if(!this._collapsed){
this._create_scroll(this._match_tag_ids(),this._filter_tag_ids(),this._glu_id,this._glu_data,this._glu_total);
}
},
_create_scroll:function(match_tag_ids,filter_tag_ids,glu_id,glu_data,glu_total){
if(this._scroll){this._scroll.dispose();}
var scroll_container=this._element.select('.related_items_scroll')[0];
var scroll_num=this._element.id.match(/(\d+)$/)[0];
this._scroll=new RelatedItemsScroll(scroll_container,match_tag_ids,filter_tag_ids,glu_id,glu_data,glu_total,scroll_num,this._platform);
},
_title_click_listener:function(event){
if(event.target.tagName!='A'){return;}
event.stop();
var target_id=event.target.id;
var tag_id=target_id.match(/^related_items_link_(\d+)$/)[1];
this._element.select('.related_items_title .related_items_link').each(function(title_link){
if(title_link==event.target){
title_link.addClassName('related_items_link_selected');
}else{
title_link.removeClassName('related_items_link_selected');
}
});
this._create_scroll([tag_id],this._filter_tag_ids(),this._glu_id);
},
_vertical_display_name:function(){
var display_name=this._vertical=='videos'?'movies':this._vertical;
return display_name.capitalize_first_letter();
},
match_tag_string:function(){
return this._match_tag_ids().join('_');
},
filter_tag_string:function(){
return this._filter_tag_ids().join('_');
},
_match_tag_ids:function(){
return this._match_tags.pluck('id');
},
_filter_tag_ids:function(){
return this._filter_tags.pluck('id');
},
_organize_tags:function(raw_tags){
this._match_tags=$A([]);
this._filter_tags=$A([]);
var tag_categories={};
$A(raw_tags).each(function(tag){
if(tag.match_type=='any'||(raw_tags.length==1&&tag.type=='classification')){
this._match_tags.push(tag);
var category=this._tag_category(tag.type);
if(tag_categories[category]==null){tag_categories[category]=[];}
tag_categories[category].push(tag);
}else{
this._filter_tags.push(tag);
}
},this);
this._tag_categories=this._sorted_tag_categories(tag_categories);
},
_tag_category:function(tag_type){
return Glyde.Glu.tag_category_preposition(tag_type,this._vertical);
},
_sorted_tag_categories:function(tag_categories){
var tag_sort_orders={
'books':$A(['by','about','in']),
'games':$A(['by','in','rated']),
'music':$A(['by','in','from']),
'videos':$A(['with','by','about','in'])
};
var sorted_tag_categories=$A([]);
tag_sort_orders[this._vertical].each(function(sort_category,index){
if(tag_categories[sort_category]!=null){
sorted_tag_categories.push({
'name':sort_category,
'tags':tag_categories[sort_category]
});
}
});
return sorted_tag_categories;
}
});
RelatedItemsWidget.prototype._render=function(){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="related_items_title"');_j.s('>');
_j.ns(this._render_title());
_j.ns('</div>');
_j.ns('<div');_j.s(' class="related_items_scroll"');_j.s('>');
_j.ns('</div>');
return _j.v();
};
RelatedItemsWidget.prototype._render_title=function(){
var _j=new Jaml();
for(var i=0;i<this._tag_categories.length;i++){
_j.ns(this._render_title_link(this._tag_categories[i],i==0,i+1==this._tag_categories.length));
}
return _j.v();
};
RelatedItemsWidget.prototype._render_title_link=function(tag_category,is_first,is_last){
var _j=new Jaml();
_j.ns('<span');_j.s(' class="title_link_header"');_j.s('>');
header_prefix=(is_first)?this._vertical_display_name():(is_last)?'or':',';
_j.ns(header_prefix+' '+tag_category.name);
_j.ns('</span>');
tags=tag_category.tags;
for(var i=0;i<tags.length;i++){
_j.ns('<a');_j.s(' class="related_items_link"');_j.s(' id="'+('related_items_link_'+tags[i].id)+'"');_j.s(' href="'+('#')+'"');_j.s('>');
_j.ns(tags[i].name);
_j.ns('</a>');
if(i+1<tags.length){
_j.ns('<span');_j.s(' class="title_bullet"');_j.s('>');
_j.ns('&bull;');
_j.ns('</span>');
}
}
return _j.v();
};
var ProductPageTransactionBox=Class.create(BuyTransactionBox,{
CONTEXT:'product'
});
var ProductPage=Class.create({
NUM_RELATED_ITEM_SCROLLS:3,
CARD_BOTTOM_MARGIN:16,
initialize:function(){},
onload:function(params,is_back){
this._card=new CardWidget($('product_page_outer'),{scrolling:false,header:false});
this._previous_card_height=0;
this.buy_box=new ProductPageTransactionBox(this.on_buy_box_loaded.bind(this),
this.on_buy_box_closed.bind(this),
this.on_before_vshelf_click_close.bind(this),
this.on_vshelf_results_loaded.bind(this),
params.issuers,
params.shipping_addresses);
this.buy_box.display_prerendered(params.glu,params.res_id,params.viewer_glus,
params.total_viewer_glus,params.card_issuer_name);
this.size_card_to_content();
this._vertical=params.glu.vertical;
this._selected_glu_id=params.glu_id;
if(this._vertical=='games'){this._platform=params.glu.medium_name;}
this._display_related_glus(params.related_glu_bundles);
Glyde.notify.subscribe('login:succeeded',this.on_login.bind(this));
Glyde.notify.subscribe('glu_scroll:glu_clicked',this._select_glu_listener.bind(this));
return 0;
},
_select_glu_listener:function(event_name,info){
this._selected_glu_id=info.id.match(/^viewer_glu_(\d+)$/)[1];
this._display_related_glus();
},
on_login:function(event_name){
if(this.buy_box){this.buy_box.on_login();}
},
_display_related_glus:function(related_glu_bundles){
if(related_glu_bundles){
this._create_related_item_widgets({related_glu_bundles:related_glu_bundles});
}else{
var options={
method:'get',
onComplete:this._on_complete_related_glus_request.bind(this)
};
new Ajax.Request('/related/bundles_for_glu/'+this._selected_glu_id,options);
}
},
_on_complete_related_glus_request:function(resp,o,page_range,callback){
var data=resp.responseJSON;
if(data&&data.success){
this._create_related_item_widgets(data);
}else if(!data||!data.success){
setTimeout(this._display_related_glus.bind(this),5000);
}else{
Glyde.page.handle_server_errors(data);
}
},
_create_related_item_widgets:function(data){
if(this._related_item_widgets==null){this._related_item_widgets=[];}
for(var i=0;i<this.NUM_RELATED_ITEM_SCROLLS;i++){
var glu_bundle=data.related_glu_bundles[i];
var related_item_element='related_items_widget_'+(i+1);
var update_widget=true;
if(glu_bundle){
if(this._related_item_widgets[i]!=null){
var existing_widget=this._related_item_widgets[i];
var match_tag_string=($A(glu_bundle.tags).findAll(function(tag){return tag.match_type=='any';})).pluck('id').join('_');
var filter_tag_string=($A(glu_bundle.tags).findAll(function(tag){return tag.match_type=='all';})).pluck('id').join('_');
if(existing_widget.match_tag_string()==match_tag_string&&existing_widget.filter_tag_string()==filter_tag_string){
update_widget=false;
}
}
if(update_widget){
this._related_item_widgets[i]=new RelatedItemsWidget(related_item_element,this._selected_glu_id,
this._vertical,glu_bundle.tags,glu_bundle.glu_data,glu_bundle.glu_count,this._platform);
}
}else{
if(this._related_item_widgets[i]!=null){
$(related_item_element).update('');
this._related_item_widgets[i]=null;
}
}
}
this.size_card_to_content();
},
size_card_to_content:function(evt){
var content_container=$('product_page_outer').select('.content_container')[0];
var new_height=content_container.getHeight();
if(new_height>this._previous_card_height){
this._card.set_size(980,content_container.getHeight()+this.CARD_BOTTOM_MARGIN);
this._previous_card_height=new_height;
}
},
on_buy_box_loaded:function(){},
on_buy_box_closed:function(){},
on_before_vshelf_click_close:function(){},
on_vshelf_results_loaded:function(){}
});
var g_product_page=new ProductPage();
Glyde.page.register_page(g_product_page);
ProductPage.get_instance=function(){
return g_product_page;
};
var HowToDialog=Class.create(Glyde.Dialog,{
initialize:function($super,html_url){
$super();
this._html_url=html_url;
this._fetch_html();
},
open:function($super){
ConversionTracker.get_instance().track('/how_to_dialog/open'+this._html_url);
if(this._content_html){
$super(null,this._content_html);
}else{
this._fetch_html(function(resp,o){
var data=resp.responseJSON;
if(data&&data.success){
$super(null,data.html);
}
}.bind(this));
}
$(this._container_id).addClassName('how_to_widget');
},
_fetch_html:function(callback){
var options={
method:'get',
onComplete:callback||this._on_after_html_load.bind(this),
trackRequest:false
};
new Ajax.Request(this._html_url,options);
},
_on_after_html_load:function(resp,o){
var data=resp.responseJSON;
if(data&&data.success){
this._content_html=data.html;
}
},
_set_container_ids:function(instance_num){
this._dialog_container_id='how_to_dialog_container';
this._container_id='how_to_dialog';
this._arrow_id='how_to_dialog_arrow';
this._close_button_id='how_to_dialog_close_button';
}
});
