Файл: Luxe-Shop v6.0/templates/redbox/js/shop.js
Строк: 1457
<?php
function payFromBalance(obj){
if(confirm(obj.confirm.value)){
new _uWnd('win-'+obj.id,obj.rem.value,-340,-120,{autosize:0,modal:1,closeonesc:1,resize:0},{form:obj.id,url:obj.action});
}else{
if(typeof window.shop_redirect != 'undefined'){ location.href = window.shop_redirect; window.shop_redirect = null; }
}
return false;
}
function shopSelectPeriod(obj){
var tmp = obj.options[obj.selectedIndex].value.split('|');
var prefix = '';
if(obj.id=='scdate'){
prefix = 'c';
}
$('#'+prefix+'date1').attr('value', tmp[0]);
$('#'+prefix+'date2').attr('value', tmp[1]);
}
function getDigitalGoods(i){
if(digital_goods[i][0] == 1)
location.href = digital_goods[i][2];
else if(digital_goods[i][0] == 2)
new _uWnd('getDigitalGoods'+i,digital_goods[i][1],350,60,{autosize:1,closeonesc:1,align:'center',icon:'/.s/img/icon/fm.png'},digital_goods[i][2]);
return false;
}
function price2Basket(){
if(_shopLockButtons()) return false;
_uPostForm('shop-price-form',{type:'POST',url:'/shop/basket'});
$('input.pinput').attr('disabled','disabled');
return false;
}
function hideGoods(id, ssid, pref){
if(_shopLockButtons()) return false;
$('#'+pref+'-hib'+id).attr('src', '/.s/img/fr/EmnAjax.gif');
_uPostForm('',{type:'POST',url:'/shop/' + id + '/edit',data:{'mode':'edit', 'method':'hide', 'id':id, 'pref':pref, 'ssid':ssid}});
return false;
}
function deleteGoods(id, ssid, pref){
if(_shopLockButtons()) return false;
$('#'+pref+'-dib'+id).attr('src', '/.s/img/fr/EmnAjax.gif');
_uPostForm('',{type:'POST',url:'/shop/' + id + '/edit',data:{'mode':'edit', 'method':'delete', 'id':id, 'pref':pref, 'ssid':ssid}});
return false;
}
function shopCatBlocks(obj, cname, c1, c2){
var id = -1;
var ti = 0;
var hb = $('.cat-blocks ul:visible');
if(hb.length){
ti = $(hb).prev().attr('id').split('blocks-rt-')[1];
}
if(obj !== undefined){
id = $(obj).attr('id').split('blocks-rt-')[1];
//скрываем отображенный блок подкатегорий
if(hb.length){
$(hb).animate({height:'hide'}, 200).prev().addClass(c1).removeClass(c2);
}
//показываем, если скрыт нужный блок подкатегорий
if(ti != id ){
$('#blocks-ch-'+id).animate({height:'show'}, 200);
$('#blocks-rt-'+id).removeClass(c1).addClass(c2);
}
}
var page = parseInt($('#cid-p-0').val());
var cval = '0=1|'+page;
$('.cid-p').each(function(){
var el_id = $(this).attr('id').replace('cid-p-', '')
page = $(this).val();
if((el_id == id && ti != id) || (obj == undefined && el_id == ti)){
cval += ','+el_id+'=1|'+page;
}else{
if(page > 1){
cval += ','+el_id+'=0|'+page;
}
}
});
uSetCookie(cname, cval, 3600*24*30, '/');
}
function shopCatExpand(obj, cname){
$(obj).toggleClass('plus').toggleClass('minus').parent().children('ul').toggle();
return _shopTreeStore(cname);
}
function categoryFilter(f, v){
if(_shopLockButtons()) return false;
_shopFadeControl('goods_cont');
_uPostForm('',{type:'POST',url:location.href,data:{'mode':'filter', 'field':f, 'value':shop_filter_vals[v]}});
return false;
}
function categorySort(colum, order){
if(_shopLockButtons()) return false;
_shopFadeControl('goods_cont');
_uPostForm('',{type:'POST',url:location.href,data:{'mode':'sort', 'sort':colum, 'order':order}});
return false;
}
function categoryGoodsStatus(path, status){
if(_shopLockButtons()) return false;
if(status){
status = ';filterstatus='+status;
}else{
status = '';
}
document.location = path+status;
return false;
}
function _shopTreeStore(cname){
var cval = '0=0|';
var p0 = $('#cid-p-0');
if(p0.length > 0){
cval += $('#cid-p-0').val();
}else{
cval += '1';
}
$('li ul.cat-tree:visible').each(function(){
var cat_id = $(this).parent().attr('id').split('cid-')[1];
var page = $(this).parent().find('#cid-p-'+cat_id).val();
cval += ',' + cat_id + '=1|'+page;
});
uSetCookie(cname, cval, 3600*24*30, '/');
return false;
}
var lock_categories = 0;
/*
получение набора категорий
pid - id родительской категории, для которой нужно получить набор
cname - кука с которой нужно взять список раскрытых категорий
el_id - id элемента в DOM-дереве, после которого нужно вставить полученный набор
el_more - елемент ссылка "Показать еще"
*/
function shopCatShowMore(pid, ssid, cname, el_id, el_more, sh_g){
if(lock_categories == 1){
return false;
}
lock_categories = 1;
var pageEl = $('#cid-p-'+pid);
pageEl.val(parseInt(pageEl.val())+1);
if(el_id.search(/blocks-rt-/) != -1 || el_id.search(/blocks-ch-/) != -1){
shopCatBlocks(undefined, cname, '', '');
}else{
_shopTreeStore(cname);
}
el_more.html($('<div class="myWinLoad" style="margin:5px; height: 31px !important;"></div>'));
_uPostForm(
'',
{
type:'POST',
url:'/shop/catalog',
data:{
cat_pid: pid,
el_id: el_id,
mode: 'cat_subblock',
cname: cname,
sh_g: sh_g,
ssid: ssid
}
}
);
$(el_more).addClass('need_remove');
}
var lock_cats_catalog = 0;
function shopCatsCatalogShowMore(colums, childs, show_goods_count, parent, ssid, el_more) {
if (lock_cats_catalog == 1) {
return false;
}
lock_cats_catalog = 1;
var pageEl = $('#cats_catalog_cid-p-0');
pageEl.val(parseInt(pageEl.val()) + 1);
el_more.html($('<div class="myWinLoad" style="margin:5px; height: 31px !important;"></div>'));
_uPostForm(
'',
{
type: 'POST',
url: '/shop/catalog',
data: {
colums: colums,
childs: childs,
show_goods_count: show_goods_count,
parent: parent,
page: pageEl.val(),
mode: 'cats_catalog_subblock',
ssid: ssid
}
}
);
$("#show_cats_more_block").parent().addClass('show_cats_more_block_need_remove');
}
var lock_buttons = 0;
function _shopLockButtons(){
if(lock_buttons) return true;
lock_buttons = 1;
return false;
}
function _dynform(values, url){
if(url==undefined) url = '';
var fd = '';
for(i in values){
fd += '<input type="hidden" name="'+i+'" value="'+values[i]+'">';
}
var obj = $('#dyn-post');
if(obj.length){
$(obj).html(fd).attr('action', url);
}else{
$('body').append('<form id="dyn-post" action="'+url+'" method="post">'+fd+'</form>');
}
}
function uSetCookie (name,value,expir,path,domain,secure) {
var today = new Date();
var expires = new Date();
expires.setTime(today.getTime() + 1000*expir);
document.cookie = name + "=" + escape (value) +
((expires) ? "; expires=" + expires.toGMTString() : "") +
((path) ? "; path=" + path : "/") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "");
}
function editOrderFieldCancel(oid, fid, value) {
$('.'+oid+'-field-value-'+fid+'-wrapper').html(value);
lock_buttons=0;
curr_send = false;
}
function editOrderField(oid, field_id, field_name, field_type, field_values_list, field_value, update) {
for(key in _uWnd.all){
if(_uWnd.all[key] != null && _uWnd.all[key].name.search(/inv_wnd_(.+)/)!=-1) inv_wnd_opened = true;
}
if(inv_wnd_opened && update!='popup') return;
if(_shopLockButtons() || curr_send) return;
var inv_wnd_opened = false;
curr_send = oid+'_'+field_id;
switch(field_type) {
case 'phone':
case 'email':
case 'text':
case 'textarea':
case 'promo':
case 'gmaps':
new _uWnd(
'wnd_'+field_id,
field_name,
550,
350,
{
autosize:1,
resize:0,
modal:0,
closeonesc:1,
icon:html_url+'/img/icon/pent.png',
onclose:function(){lock_buttons=0; curr_send=false;}
},
{
url:'/shop/checkout',
type:'POST',
data:{
'id':oid,
'mode':'inv_chfld',
'fid':field_id,
'ftype':field_type,
'fval':field_value,
'ssid':ssid,
'update':update
},
cache:1
}
);
break;
case 'checkbox':
editOrderFieldSend(oid, field_id, '', update)
break;
case 'radio':
case 'select':
_uPostForm('', {url:'/shop/checkout', type:'POST', data:{mode:'inv_chfld', id:oid, fid:field_id, ftype:field_type, update:update, ssid:ssid}});
var load_img = '/img/icon/ajsml.gif';
if(update == 'order') load_img = '/img/ma/m/i3.gif';
$('.'+oid+'-field-value-'+field_id+'-wrapper').attr('old_val', $('.'+oid+'-field-value-'+field_id+'-wrapper').html()).html('<img alt="" id="inote-'+oid+'-wait" src="'+html_url+load_img+'">');
break;
default:
//console.log("DEFAULT IN AJAX");
curr_send = false;
lock_buttons = 0;
break;
};
return false;
};
function editOrderFieldSend(id, field_id, field_value, update) {
if(curr_send != id+'_'+field_id){
//_uButtonEn('inote-form-'+id,1);
}else{
var formid = (field_value !== undefined ? '' : 'order-field-'+field_id);
if(update == 'order')
$('.'+id+'-field-value-'+field_id+'-wrapper').hide().after('<img alt="" id="inote-'+id+'-wait" src="'+html_url+'/img/ma/m/i3.gif">');
else
$('.'+id+'-field-value-'+field_id+'-wrapper').hide().after('<img alt="" id="inote-'+id+'-wait" src="'+html_url+'/img/icon/ajsml.gif">');
field_value = (field_value ? field_value : document.getElementById('fval').value);
_uPostForm(formid,{type:'POST',url:'/shop/checkout',data:{id:id, fid:field_id, fval:field_value,mode:'inv_chfld_save',ssid:ssid,update:update}});
_uWnd.close('wnd_'+field_id);
curr_send = false;
}
return false;
}
// Maps
function create_map(id, type, lat, lng, z){
if(type == undefined || type == '' || type == null){
plog('Type of maps undefined', 'MAPS');
return false;
};
$('#'+id+'-canvas').attr('style', 'height:450px;overflow:hidden;').next('div').removeAttr('style');
switch(type){
case 'gmap': create_gmap(id, lat, lng, z);break;
case 'ymap': create_ymap(id, lat, lng, z);break;
}
return 1;
}
function create_gmap(id, lat, lng, z){
plog('GMAP START', 'MAPS');
var myOptions = {
zoom: parseInt(z),
mapTypeId: google.maps.MapTypeId.ROADMAP
};
gmaps[id].map = new google.maps.Map(document.getElementById(id+'-canvas'), myOptions);
if(gmaps[id].options == undefined) gmaps[id].options = {};
if(gmaps[id].options.is_editable == undefined) gmaps[id].options.is_editable = false;
if(gmaps[id].options.placemarks == undefined){
gmaps[id].latlng = new google.maps.LatLng(lat, lng);
gmaps[id].placemark = new google.maps.Marker({
position: gmaps[id].latlng,
map: gmaps[id].map,
draggable: gmaps[id].options.is_editable ? true : false
});
gmaps[id].map.setCenter(gmaps[id].latlng);
gmaps[id].placemark.inner_id = id;
if(gmaps[id].options.is_editable) {
google.maps.event.addListener(gmaps[id].placemark, 'dragstart', function() {
if(gmaps[this.inner_id].placemark_info != undefined)
gmaps[this.inner_id].placemark_info.close();
});
google.maps.event.addListener(gmaps[id].placemark, 'dragend', function() {
gmap_set_data(this.inner_id);
gmap_get_address(this.inner_id);
});
}
gmap_get_address(id);
google.maps.event.addListener(gmaps[id].placemark, 'click', function() {
gmaps[this.inner_id].placemark_info = new google.maps.InfoWindow({content:$('#'+this.inner_id+'-addr').val()});
gmaps[this.inner_id].placemark_info.open(gmaps[this.inner_id].map, gmaps[this.inner_id].placemark);
});
}else{
gmaps[id].placemarks = {};
gmaps[id].geopoints = [];
gmaps[id].bounds = new google.maps.LatLngBounds();
for(key in gmaps[id].options.placemarks){
var point = new google.maps.LatLng(gmaps[id].options.placemarks[key].lat, gmaps[id].options.placemarks[key].lng);
gmaps[id].bounds.extend(point);
gmaps[id].geopoints.push(point);
gmaps[id].placemarks[key] = new google.maps.Marker({
position: point,
map: gmaps[id].map
});
gmaps[id].placemarks[key].inner_key = key;
gmaps[id].placemarks[key].inner_id = id;
google.maps.event.addListener(gmaps[id].placemarks[key], 'click', function() {
gmaps[this.inner_id].placemarks[this.inner_key].description = new google.maps.InfoWindow({content:gmaps[this.inner_id].options.placemarks[this.inner_key].balloon});
gmaps[this.inner_id].placemarks[this.inner_key].description.open(gmaps[this.inner_id].map, gmaps[this.inner_id].placemarks[this.inner_key]);
});
};
gmaps[id].rect = new google.maps.Rectangle({
map:gmaps[id].map,
bounds:gmaps[id].bounds,
strokeColor: "#FF0000",
strokeOpacity: 0.8,
strokeWeight: 3,
fillColor: "#FF0000",
fillOpacity: 0.35
});
//gmaps[id].map.setCenter(gmaps[id].bounds.getCenter());
gmaps[id].map.fitBounds(gmaps[id].bounds);
}
}
function gmap_set_data(id) {
$('#'+id+'-lat').val(gmaps[id].placemark.getPosition().lat());
$('#'+id+'-lng').val(gmaps[id].placemark.getPosition().lng());
}
function gmap_get_address(id) {
var geocoder = new google.maps.Geocoder();
var latlng = gmaps[id].placemark.getPosition();
geocoder.geocode({'latLng': latlng}, function (results, status) {
if (status != google.maps.GeocoderStatus.OK && (results[1] == undefined || results[1] == null)) {
_uWnd.alert("Error while geolocating. Status Code:" + status);
} else {
gmaps[id].map_addr = results[1].formatted_address;
$('#'+id+'-addr').val(results[1].formatted_address).trigger('onchange');;
}
});
}
function create_ymap(id, lat, lng, z){
plog('YANDEXMAP START', 'MAPS');
YMaps.jQuery(function () {
ymaps[id].map = new YMaps.Map(YMaps.jQuery("#"+id+"-canvas")[0]);
ymaps[id].map.enableScrollZoom();
ymaps[id].map.addControl(new YMaps.TypeControl());
ymaps[id].map.addControl(new YMaps.ToolBar());
ymaps[id].map.addControl(new YMaps.Zoom());
ymaps[id].map.addControl(new YMaps.MiniMap());
ymaps[id].map.addControl(new YMaps.ScaleLine());
if(ymaps[id].options == undefined) ymaps[id].options = {};
if(ymaps[id].options.is_editable == undefined) ymaps[id].options.is_editable = false;
if(ymaps[id].options.placemarks == undefined){
ymaps[id].geopoint = new YMaps.GeoPoint(lng, lat);
ymaps[id].map.setCenter(ymaps[id].geopoint, z);
ymaps[id].placemark = new YMaps.Placemark(ymaps[id].geopoint, {draggable: ymaps[id].options.is_editable});
if(ymaps[id].options.is_editable){
YMaps.Events.observe(
ymaps[id].placemark,
ymaps[id].placemark.Events.DragEnd,
function (placemark) {
ymap_get_adress(id);
ymap_set_data(id);
}
);
}
ymap_get_adress(id);
ymaps[id].map.addOverlay(ymaps[id].placemark);
}else{
ymaps[id].placemarks = {};
ymaps[id].geopoints = [];
for(key in ymaps[id].options.placemarks){
var point = new YMaps.GeoPoint(ymaps[id].options.placemarks[key].lng, ymaps[id].options.placemarks[key].lat);
ymaps[id].geopoints.push(point);
ymaps[id].placemarks[key] = new YMaps.Placemark(point);
ymaps[id].placemarks[key].description = ymaps[id].options.placemarks[key].balloon;
ymaps[id].map.addOverlay(ymaps[id].placemarks[key]);
};
bounds = new YMaps.GeoCollectionBounds(ymaps[id].geopoints);
var style = new YMaps.Style();
style.polygonStyle = new YMaps.PolygonStyle();
style.polygonStyle.fill = 1;
style.polygonStyle.outline = 1;
style.polygonStyle.strokeWidth = 10;
style.polygonStyle.strokeColor = "ffff0088";
style.polygonStyle.fillColor = "ff000055";
var polygon = new YMaps.Polygon([bounds.getLeftTop(), bounds.getRightTop(), bounds.getRightBottom(), bounds.getLeftBottom()], {style:style});
ymaps[id].map.setBounds(bounds);
ymaps[id].map.addOverlay(polygon);
}
})
}
function ymap_set_data(id) {
$('#'+id+'-lat').val(ymaps[id].placemark.getGeoPoint().getY()).trigger('onchange');
$('#'+id+'-lng').val(ymaps[id].placemark.getGeoPoint().getX()).trigger('onchange');
}
function ymap_get_adress(id) {
var geocoder = new YMaps.Geocoder(ymaps[id].placemark.getGeoPoint(), {results: 1});
YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
if (this.length()) {
ymaps[id].placemark.setBalloonContent(this.get(0).text);
if(ymaps[id].options.is_editable){
$('#'+id+'-addr').val(this.get(0).text).trigger('onchange');
}
return true;
}else{
plog('Place not found', 'MAPS-GEOCODER');
return false;
}
});
}
// ImageList
var image_list={
ajaxloadingmsg: '<div style="background:url(/.s/img/ma/m/i3.gif) no-repeat center bottom; height:50px;" ></div>',
defaultbuttonsfade:0.3, // fade degree for disabled nav buttons (0=completely transparent, 1=completely opaque)
configholder: {},
getCSSValue:function(val){ //Returns either 0 (if val contains 'auto') or val as an integer
return (val=="auto")? 0 : parseInt(val)
},
getoffset:function(what, offsettype){
return (what.offsetParent)? what[offsettype]+this.getoffset(what.offsetParent, offsettype) : what[offsettype]
},
fadebuttons:function(config, currentpanel){
config.$leftnavbutton.fadeTo('fast', currentpanel==0? this.defaultbuttonsfade : 1)
config.$rightnavbutton.fadeTo('fast', currentpanel==config.lastvisiblepanel? this.defaultbuttonsfade : 1)
},
addnavbuttons:function(config, currentpanel){
$('#image-lnav').remove();
$('#image-rnav').remove();
config.$leftnavbutton=$('<img id="image-lnav" src="'+config.defaultbuttons.leftnav[0]+'">').css({zIndex:50, position:'absolute', left:/* config.offsets.left+ */config.defaultbuttons.leftnav[1]+'px', top:/* config.offsets.top+ */config.defaultbuttons.leftnav[2]+'px', cursor:'hand', cursor:'pointer'}).appendTo('#image-list-cont')
config.$rightnavbutton=$('<img id="image-rnav" src="'+config.defaultbuttons.rightnav[0]+'">').css({zIndex:50, position:'absolute', right:/* left:config.offsets.left+config.$gallery.get(0).offsetWidth+ */config.defaultbuttons.rightnav[1]+'px', top:/* config.offsets.top+ */config.defaultbuttons.rightnav[2]+'px', cursor:'hand', cursor:'pointer'}).appendTo('#image-list-cont')
config.$leftnavbutton.bind('click', function(){ //assign nav button event handlers
image_list.stepBy(config.galleryid, -config.defaultbuttons.moveby)
})
config.$rightnavbutton.bind('click', function(){ //assign nav button event handlers
image_list.stepBy(config.galleryid, config.defaultbuttons.moveby)
})
if (config.panelbehavior.wraparound==false){ //if carousel viewer should stop at first or last panel (instead of wrap back or forth)
this.fadebuttons(config, currentpanel)
}
return config.$leftnavbutton.add(config.$rightnavbutton)
},
alignpanels:function(config){
var paneloffset=0
config.paneloffsets=[paneloffset] //array to store upper left offset of each panel (1st element=0)
config.panelwidths=[] //array to store widths of each panel
config.$panels.each(function(index){ //loop through panels
var $currentpanel=$(this)
$currentpanel.css({float: 'none', position: 'absolute', left: paneloffset+'px'}) //position panel
$currentpanel.bind('click', function(e){return config.onpanelclick(e.target)}) //bind onpanelclick() to onclick event
paneloffset+=image_list.getCSSValue($currentpanel.css('marginRight')) + parseInt($currentpanel.get(0).offsetWidth || $currentpanel.css('width')) //calculate next panel offset
config.paneloffsets.push(paneloffset) //remember this offset
config.panelwidths.push(paneloffset-config.paneloffsets[config.paneloffsets.length-2]) //remember panel width
})
config.paneloffsets.pop() //delete last offset (redundant)
var addpanelwidths=0
var lastpanelindex=config.$panels.length-1
config.lastvisiblepanel=lastpanelindex
for (var i=config.$panels.length-1; i>=0; i--){
addpanelwidths+=(i==lastpanelindex? config.panelwidths[lastpanelindex] : config.paneloffsets[i+1]-config.paneloffsets[i])
if (config.gallerywidth>addpanelwidths){
config.lastvisiblepanel=i //calculate index of panel that when in 1st position reveals the very last panel all at once based on gallery width
}
}
//alert(paneloffset+' - '+config.currentpanel);
config.$belt.css({width: paneloffset+'px'}) //Set Belt DIV to total panels' widths
config.currentpanel=(typeof config.currentpanel=="number" && config.currentpanel<config.$panels.length)? config.currentpanel : 0
if (config.currentpanel!=0){
var endpoint=config.paneloffsets[config.currentpanel]+(config.currentpanel==0? 0 : config.beltoffset)
config.$belt.css({left: -endpoint+'px'})
}
if (config.defaultbuttons.enable==true){ //if enable default back/forth nav buttons
var $navbuttons=this.addnavbuttons(config, config.currentpanel)
$(window).bind("load resize", function(){ //refresh position of nav buttons when page loads/resizes, in case offsets weren't available document.oncontentload
config.offsets={left:image_list.getoffset(config.$gallery.get(0), "offsetLeft"), top:image_list.getoffset(config.$gallery.get(0), "offsetTop")}
config.$leftnavbutton.css({left:/* config.offsets.left+ */config.defaultbuttons.leftnav[1]+'px', top:/* config.offsets.top+ */config.defaultbuttons.leftnav[2]+'px'})
config.$rightnavbutton.css({right:/* left:config.offsets.left+config.$gallery.get(0).offsetWidth+ */config.defaultbuttons.rightnav[1]+'px', top:/* config.offsets.top+ */config.defaultbuttons.rightnav[2]+'px'})
})
}
this.statusreport(config.galleryid)
config.oninit()
config.onslideaction(this)
},
stepTo:function(galleryid, pindex){ /*User entered pindex starts at 1 for intuitiveness. Internally pindex still starts at 0 */
var config=image_list.configholder[galleryid]
if (typeof config=="undefined"){
alert("There's an error with your set up of Carousel Viewer ""+galleryid+ ""!")
return
}
var pindex=Math.min(pindex-1, config.paneloffsets.length-1)
var endpoint=config.paneloffsets[pindex]+(pindex==0? 0 : config.beltoffset)
if (config.panelbehavior.wraparound==false && config.defaultbuttons.enable==true){ //if carousel viewer should stop at first or last panel (instead of wrap back or forth)
this.fadebuttons(config, pindex)
}
config.$belt.animate({left: -endpoint+'px'}, config.panelbehavior.speed, function(){config.onslideaction(this)})
config.currentpanel=pindex
this.statusreport(galleryid)
},
stepBy:function(galleryid, steps){ //isauto if defined indicates stepBy() is being called automatically
var config=image_list.configholder[galleryid]
if (typeof config=="undefined"){
alert("There's an error with your set up of Carousel Viewer ""+galleryid+ ""!")
return
}
//alert(config.currentpanel);
var direction=(steps>0)? 'forward' : 'back' //If "steps" is negative, that means backwards
var pindex=config.currentpanel+steps //index of panel to stop at
if (config.panelbehavior.wraparound==false){ //if carousel viewer should stop at first or last panel (instead of wrap back or forth)
pindex=(direction=="back" && pindex<=0)? 0 : (direction=="forward")? Math.min(pindex, config.lastvisiblepanel) : pindex
if (config.defaultbuttons.enable==true){ //if default nav buttons are enabled, fade them in and out depending on if at start or end of carousel
image_list.fadebuttons(config, pindex)
}
}
else{ //else, for normal stepBy behavior
if (pindex>config.lastvisiblepanel && direction=="forward"){
//if destination pindex is greater than last visible panel, yet we're currently not at the end of the carousel yet
pindex=(config.currentpanel<config.lastvisiblepanel)? config.lastvisiblepanel : 0
}
else if (pindex<0 && direction=="back"){
//if destination pindex is less than 0, yet we're currently not at the beginning of the carousel yet
pindex=(config.currentpanel>0)? 0 : config.lastvisiblepanel /*wrap around left*/
}
}
var endpoint=config.paneloffsets[pindex]+(pindex==0? 0 : config.beltoffset) //left distance for Belt DIV to travel to
if (pindex==0 && direction=='forward' || config.currentpanel==0 && direction=='back' && config.panelbehavior.wraparound==true){ //decide whether to apply "push pull" effect
config.$belt.animate({left: -config.paneloffsets[config.currentpanel]-(direction=='forward'? 100 : -30)+'px'}, 'normal', function(){
config.$belt.animate({left: -endpoint+'px'}, config.panelbehavior.speed, function(){config.onslideaction(this)})
})
}
else
config.$belt.animate({left: -endpoint+'px'}, config.panelbehavior.speed, function(){config.onslideaction(this)})
config.currentpanel=pindex
this.statusreport(galleryid)
},
statusreport:function(galleryid){
var config=image_list.configholder[galleryid]
var startpoint=config.currentpanel //index of first visible panel
var visiblewidth=0
for (var endpoint=startpoint; endpoint<config.paneloffsets.length; endpoint++){ //index (endpoint) of last visible panel
visiblewidth+=config.panelwidths[endpoint]
if (visiblewidth>config.gallerywidth){
break
}
}
startpoint+=1 //format startpoint for user friendiness
endpoint=(endpoint+1==startpoint)? startpoint : endpoint //If only one image visible on the screen and partially hidden, set endpoint to startpoint
var valuearray=[startpoint, endpoint, config.panelwidths.length]
for (var i=0; i<config.statusvars.length; i++){
window[config.statusvars[i]]=valuearray[i] //Define variable (with user specified name) and set to one of the status values
config.$statusobjs[i].text(valuearray[i]+" ") //Populate element on page with ID="user specified name" with one of the status values
}
},
setup:function(config){
//Disable Step Gallery scrollbars ASAP dynamically (enabled for sake of users with JS disabled)
document.write('<style type="text/css">n#'+config.galleryid+'{overflow: hidden;}n</style>')
jQuery(document).ready(function($){
config.$gallery=$('#'+config.galleryid)
config.gallerywidth=config.$gallery.width()
config.offsets={left:image_list.getoffset(config.$gallery.get(0), "offsetLeft"), top:image_list.getoffset(config.$gallery.get(0), "offsetTop")}
config.$belt=config.$gallery.find('.'+config.beltclass) //Find Belt DIV that contains all the panels
config.$panels=config.$gallery.find('.'+config.panelclass) //Find Panel DIVs that each contain a slide
config.panelbehavior.wraparound=config.panelbehavior.wraparound //if auto step enabled, set "wraparound" to true
config.onpanelclick=(typeof config.onpanelclick=="undefined")? function(target){} : config.onpanelclick //attach custom "onpanelclick" event handler
config.onslideaction=(typeof config.onslide=="undefined")? function(){} : function(beltobj){$(beltobj).stop(); config.onslide()} //attach custom "onslide" event handler
config.oninit=(typeof config.oninit=="undefined")? function(){} : config.oninit //attach custom "oninit" event handler
config.beltoffset=image_list.getCSSValue(config.$belt.css('marginLeft')) //Find length of Belt DIV's left margin
config.statusvars=config.statusvars || [] //get variable names that will hold "start", "end", and "total" slides info
config.$statusobjs=[$('#'+config.statusvars[0]), $('#'+config.statusvars[1]), $('#'+config.statusvars[2])]
config.currentpanel=0
image_list.configholder[config.galleryid]=config //store config parameter as a variable
image_list.alignpanels(config) //align panels and initialize gallery
}) //end document.ready
jQuery(window).bind('unload', function(){ //clean up
jQuery.each(config, function(ai, oi){
oi=null
})
config=null
})
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
function plog(msg, module){
//if(console != undefined) console.log((module == undefined ? '' : module+' - ')+msg);
return;
}
function checkPromo(id){
$('#res'+id).show();
var formData = formToObj(document.forms["checkout-form"]);
formData['mode'] = 'apply-promo';
formData['code'] = $('[name=fld'+id+']').val();
formData['fid'] = id;
delete formData['fld'+id];
//_uPostForm('', {type: 'POST', url: location.href, data:{'mode': 'apply-promo', 'code': $('[name=fld'+id+']').val(), 'fid': id, 'ssid':$('input[name=ssid]').val()}});
_uPostForm('', {type: 'POST', url: location.href, data:formData});
}
/*
* Вывод информационных сообщения пользователям.
* Данная функция принимает следующий набор параметров:
* wnd_msgs - сообщение, которое будет выведено пользователю. Сообщение может содержать HTML-теги форматирования.
* wnd_title - заголовок окна сообщения, отображающегося в шапке.
* wnd_type - тип сообщения. Может быть: «error» - ошибка, «warning» - предупреждение, «info» - информационное сообщение. Если тип не указан или указан тип, отличный от перечисленных, то считается, что сообщение общее, а не какого-то типа.
* wnd_w - ширина окна.
* wnd_h - высота окна.
* wnd_opt - дополнительные параметры окна сообщения. Полный список параметров аналогичен списку параметров, принимаемых _uWnd() (http://helper.ucoz.ru/publ/coding/ujs/2-1-0-4).
* wnd_name - уникальное имя окна. Нигде не отображается. Используется для дальнейшей работы с информационным окном с помощью функций _uWnd.
* */
function shop_alert(wnd_msgs, wnd_title, wnd_type, wnd_w, wnd_h, wnd_opt, wnd_name){
var wnd_content = '';
if(wnd_type == 'error'){
wnd_content += '<div id="shop_wnd_error"></div><div id="shop_wnd_text">';
}else{
if(wnd_type == 'warning'){
wnd_content += '<div id="shop_wnd_warning"></div><div id="shop_wnd_text">';
}else{
if(wnd_type == 'info'){
wnd_content += '<div id="shop_wnd_info"></div><div id="shop_wnd_text">';
}else{
wnd_content += '<div>';
}
}
}
if(typeof wnd_name != 'string' || wnd_name == ''){
wnd_name = 'shop_alert_window';
}
if(typeof wnd_msgs == 'string'){
wnd_content += wnd_msgs;
}else{
if(typeof wnd_msgs == 'object'){
wnd_content += '<ul>';
for(msg in wnd_msgs) {
wnd_content += '<li>'+wnd_msgs[msg]+'</li>';
}
wnd_content += '</ul>';
}else{
return;
}
}
wnd_content += '</div>';
wnd_opt = $.extend({
align: 'left', //выравнивание
shadow: 1, //тень
header: 1, //отображать ли шапку
close: 1, //отображать ли кнопку Close (закрыть).
modal: 1, //модальное окно
popup: 1, //закрывать ли окно при клике на пространстве вне окна.
resize: 0, //разрешить изменение размеров окна пользователем
fixed: 0, //разрешить изменение размеров окна пользователем
closeonesc: 1, //разрешить изменение размеров окна пользователем
close: 1,
icon: '',
tm: 0,
align: 'left'
}, wnd_opt || {});
var l = new _uWnd(
wnd_name,
wnd_title,
wnd_w,
wnd_h,
wnd_opt,
wnd_content
);
if (wnd_opt.tm > 0) {
setTimeout("var w=_uWnd.all[" + l.idx + "];if(w)w.close();", wnd_opt.tm);
}
return l;
}
function formToObj(form) {
var els = form ? form.elements : '', map = {}, el, i = 0;
while (el = els[i++]){
if (el.name != '' && !el.disabled){ // Элементы без имени и disabled не successful-controls
switch (el.type.toLowerCase()) {
case 'checkbox':
case 'radio': // Только выбранные (checked) checkbox'ы и
if (el.checked) // radio-элементы считаются successful-controls
map[el.name] = el.value;
break;
case 'select-multiple':
var opt = el.options, lst = [], j = 0, o;
while (o = opt[j++])
if (o.selected) // Только выбранные (selected) опции (options)
lst[lst.length] = o.value || o.text; // считаются successful-controls
if (lst.length) // Добавляем масссив значений опции если он не пустой
map[el.name] = lst;
break;
case 'select-one': // select-one добавляем скаляром (не в масссив)
if (!el.value) break;
default:
map[el.name] = el.value;
case 'reset': // reset не отправляется даже если имеет name
break;
}
}
}
return map;
}
function priceFilter(f, v){
if(_shopLockButtons()) return false;
_shopFadeControl('goods_cont');
_uPostForm('',{type:'POST',url:location.href,data:{'mode':'filter', 'field':f, 'value':v}});
return false;
}
?>