LightboxOptions = Object.extend({
    fileLoadingImage:        'images/loading.gif',     
    fileBottomNavCloseImage: 'images/closelabel.gif',
    overlayOpacity: 0.9,   // controls transparency of shadow overlay
    animate: true,         // toggles resizing animations
    resizeSpeed: 8,        // controls the speed of the image resizing animations (1=slowest and 10=fastest)
    borderSize: 22        //if you adjust the padding in the CSS, you will need to update this variable
}, window.LightboxOptions || {});

var Order = Class.create();

Order.prototype = {
    imageArray: [],
    activeOrder: false,
    arrayPageSize: [],
    arrayPageScroll: [],
    arrayChangeScm: [],
    stop_move:0,
    lightboxTop:0,
    stepOrder:1,
    fieldForm:[],
    initialize: function() {    
       this.updateImageList();
        if (LightboxOptions.resizeSpeed > 10) LightboxOptions.resizeSpeed = 10;
        if (LightboxOptions.resizeSpeed < 1)  LightboxOptions.resizeSpeed = 1;
	    this.resizeDuration = LightboxOptions.animate ? ((11 - LightboxOptions.resizeSpeed) * 0.1) : 0;
	    this.overlayDuration = LightboxOptions.animate ? 0.2 : 0;  // shadow fade in/out duration
        var size = (LightboxOptions.animate ? 644 : 1) + 'px';
        var objBody = $$('body')[0];
		if (!$('overlay'))  objBody.appendChild(Builder.node('div',{id:'overlay'}));
        objBody.appendChild(Builder.node('div',{id:'order'}, [
            Builder.node('div',{id:'outerOrderContainer'}, 
                Builder.node('div',{id:'orderContainer'}, [
                    Builder.node('a',{id:'btnClose', href: '#' },
                        Builder.node('img', { src: LightboxOptions.fileBottomNavCloseImage })
                    ),
                    Builder.node('div',{id:'orderTitle'}),
                    Builder.node('div',{id:'orderContent'}),
                    Builder.node('div', {id:'orderFooter'},[ 
                        Builder.node('div',{id:'orderNavi'},[
                            Builder.node('div',{id:'boxBtnPrev',className:'btnCart'},Builder.node('i',{id:'btnPrev', className:'link'})),
                            Builder.node('div',{id:'boxBtnNext',className:'btnCart'},Builder.node('i',{id:'btnNext', className:'link'}))
                            ])
                    ]),                
                    Builder.node('div',{id:'loading2',className:'loading'}, 
                        Builder.node('a',{id:'loadingLink2', href: '#' }, 
                            Builder.node('img', {src: LightboxOptions.fileLoadingImage})
                        )
                    )
                ])
            )
        ]));
        //objBody
        $('header_c').appendChild(Builder.node('div',{id:'cartMini'}, [Builder.node('div',{id:'cartCount'}),Builder.node('div',{id:'cartSumm'})]));
        $('cartMini').hide();
		$('overlay').hide().observe('click', (function() { this.end(); }).bind(this));
		$('order').hide().observe('click', (function(event) { if (event.element().id == 'order') this.end(); }).bind(this));
		$('loadingLink2').observe('click', (function(event) { event.stop(); this.end(); }).bind(this));
		$('btnClose').observe('click', (function(event) { event.stop(); this.end(); }).bind(this));
     //  document.observe('scroll', (function() {if ($('order_data')) this.moveByCart();}).bind(this));
        document.observe('click',(function(event){var target=event.findElement('input[id^=btn_]');
            if(target){event.stop();this.updateDetails(target);}}).bind(this));
        document.observe('click',(function(event){var target=event.findElement('input[id^=btndel_]');
            if(target){event.stop();if(confirm('Удалить из заказа')) this.updateDetails(target);}}).bind(this));
        document.observe('keyup',(function(event){var target=event.findElement('input[id^=count_]');
            if(target){event.stop();this.valid(target,event);}}).bind(this));
        $('btnPrev').observe('click', (function(event) { event.stop(); if(this.stepOrder==1)this.end();else if(this.stepOrder==2){this.getCart('')} }).bind(this));
        $('btnNext').observe('click', (function(event) { event.stop(); if(this.stepOrder==1)this.getForm();else if(this.stepOrder==2){this.sendForm();} }).bind(this));       
        var th = this;
        (function(){
            var ids = 'overlay order outerOrderContainer orderContainer orderContent loading2 loadingLink2 ' + 
                'orderTitle orderFooter orderNavi btnClose boxBtnPrev btnPrev boxBtnNext btnNext';   
            $w(ids).each(function(id){ th[id] = $(id); });
           }).defer();
        new Ajax.Request('/?for_mod=shop&mod=ajax',{
            method: 'post',
            parameters: {act:'get_cart', data:'mini'},
            onLoading:function(){},
            onLoaded:function(){},
            onSuccess: function(transport){        
            var data=eval('('+transport.responseText+')');if(data.cart_mini) $('cartMini').show().innerHTML=data.cart_mini; else $('cartMini').hide().innerHTML='';
            }
        });
         var size=$$('div[id^=scm_]');
         for(var i=0; i<size.length; i++)
         {
            if(size[i].className.indexOf('act1')>0) this.arrayChangeScm[size[i].id.split('_')[1]]=new Array(size[i].id,size[i].title);
            size[i].onmouseover=function(){$('scmi_'+this.id.split('_')[1]).innerHTML=this.title;}
            size[i].onmouseout=function(){var el=this.id.split('_')[1]; $('scmi_'+el).innerHTML=order.arrayChangeScm[el][1];}
         }
         //alert(_alert_reg(this.arrayChangeScm)); 
    },

    //
    // updateBtnBy()
    //
    updateImageList: function() {   
        this.updateImageList = Prototype.emptyFunction;
        document.observe('click', (function(event){
            var target = event.findElement('i[id^=buy_]');
            if (target) { event.stop(); if(yaCounter101574) yaCounter101574.reachGoal("CART_R"); this.start('add_'+target.id);}
        }).bind(this));
        document.observe('click', (function(event){
            var target = event.findElement('div[id^=scm_]');
            if (target) { event.stop(); this.change_scm(target);}
        }).bind(this));
    },
    
    //
    //  start()
    //  Display overlay and lightbox. If image is part of a set, add siblings to imageArray.
    //
    start: function(buyInfo) {    
        $$('select', 'object', 'embed').each(function(node){ node.style.visibility = 'hidden' });
        this.arrayPageSize = this.getPageSize();
        $('overlay').setStyle({ width: this.arrayPageSize[0] + 'px', height: this.arrayPageSize[1] + 'px' });
        new Effect.Appear(this.overlay, { duration: this.overlayDuration, from: 0.1, to: LightboxOptions.overlayOpacity });
        var lightboxTop=(document.viewport.getHeight() / 10).round();
        this.arrayPageScroll = document.viewport.getScrollOffsets();
        lightboxTop = this.arrayPageScroll[1] + lightboxTop;
        var lightboxLeft = this.arrayPageScroll[0];
        this.order.setStyle({ top: lightboxTop + 'px', left: lightboxLeft + 'px' }).show();
        this.loading2.show();
        this.getCart(buyInfo);
    },


    getCart: function(data) {
        this.stepOrder=1;
        var a_id=data.split('_');
        if(this.arrayChangeScm[a_id[3]]) data+='_'+this.arrayChangeScm[a_id[3]][0].split('_')[2];
        new Ajax.Request('/?for_mod=shop&mod=ajax',
        {
            method: 'post',
            parameters: {act:'get_cart', data:data},
            onLoading:function(){},
            onLoaded:function(){},
            onSuccess: function(transport){
                var data = eval('(' + transport.responseText + ')');
                order.orderContent.hide(); order.orderTitle.hide(); order.orderFooter.hide();
                $('orderContent').appendChild(Builder.node('div',{id:'order_data'}));
                $('order_data').innerHTML=data.cart_list;
                $('orderTitle').innerHTML=data.cart_title;
                order.btnNext.innerHTML='оформить &rarr;';  order.btnPrev.innerHTML='&larr; в каталог';
                order.resizeOrderContainer(order.orderContent.getHeight()+order.orderTitle.getHeight()+order.orderFooter.getHeight());
                if(data.cart_mini) $('cartMini').show().innerHTML=data.cart_mini; else $('cartMini').hide().innerHTML='';
                
            }
        });
    },
    getForm: function() {
        this.loading2.setStyle({opacity: 0.65});
        this.loading2.show();
        this.stepOrder=2;
        new Ajax.Request('/?for_mod=shop&mod=ajax',
        {
            method: 'post',
            parameters: {act:'get_form', data:'form'},
            onLoading:function(){},
            onLoaded:function(){},
            onSuccess: function(transport){        
                var data = eval('(' + transport.responseText + ')');
                order.orderContent.hide(); order.orderTitle.hide(); order.orderFooter.hide();
                window.scrollBy(0,-document.viewport.getScrollOffsets()[1]);
                order.btnNext.innerHTML='отправить &rarr;';  order.btnPrev.innerHTML='&larr; корзина';
                $('orderTitle').innerHTML='<h2>Оформление заказа</h2>';
                $('order_data').innerHTML=data.form_body;
                //order.resizeOrderContainer(order.orderContent.getHeight()+order.orderTitle.getHeight()+order.orderFooter.getHeight());
                var heightCurrent = order.outerOrderContainer.getHeight();
                var heightNew = (order.orderContent.getHeight()+order.orderTitle.getHeight()+order.orderFooter.getHeight() + LightboxOptions.borderSize * 2);
                if ((heightCurrent - heightNew)!=0) 
                  new Effect.Scale(order.outerOrderContainer, (heightNew / heightCurrent) * 100, {
                    scaleX: false,scaleContent:false,duration:order.resizeDuration,
                    afterFinish:(function(){
                        order.loading2.hide();                         
                        order.orderContent.show(); order.orderTitle.show(); order.orderFooter.show();
                        //alert(order.arrayPageScroll[1]);
                        
                        }).bind(order)
                    }); 
                
                var el_form=$$('#order_form input, #order_form textarea');
                for(var i in el_form) {if(el_form[i].value) order.fieldForm[el_form[i].name]=el_form[i].value;}
                if(yaCounter101574) yaCounter101574.reachGoal("ORDER_FORM");
            }
        });
    },

    sendForm: function() {
        this.loading2.setStyle({opacity: 0.65});
        this.loading2.show();
        this.stepOrder=2;
        var el_form=$$('#order_form input, #order_form textarea, #order_form select');
        var data='';
        for(var i in el_form){
            if(el_form[i].value){ data+=data?'|':'';
                if($('err'+el_form[i].name)) $('err'+el_form[i].name).innerHTML='';
                data+=(this.fieldForm[el_form[i].name] && this.fieldForm[el_form[i].name]==el_form[i].value)?el_form[i].name+'%#%':el_form[i].name+'%#%'+el_form[i].value;
            }
        }
        new Ajax.Request('/?for_mod=shop&mod=ajax',
        {
            method: 'post',
            parameters: {act:'send_form', data:data},
            onLoading:function(){},
            onLoaded:function(){},
            onSuccess: function(transport){        
                var data = eval('(' + transport.responseText + ')');
                if(data.d_err){
                    for(var i in data.d_err){
                        $(i).parentNode.appendChild(Builder.node('span',{id:'err'+i,className:'err'}));
                        $('err'+i).innerHTML=data.d_err[i]==1?'не может быть пустым':data.d_err[i];
                        order.loading2.hide(); 
                    }
                }else if(data.msg)
                {
                  order.orderTitle.hide(); 
                  order.orderFooter.hide(); 
                  $('order_data').innerHTML=data.msg;
                  if(data.order)
                  {
                    $('cartMini').hide().innerHTML=''; 
                    if(yaCounter101574) yaCounter101574.reachGoal("ORDER_R",data.yaParams); 
                  }
                  var heightCurrent = order.outerOrderContainer.getHeight();
                  var heightNew = (order.orderContent.getHeight() + LightboxOptions.borderSize * 2);
                  
                  if ((heightCurrent - heightNew)!=0) 
                  new Effect.Scale(order.outerOrderContainer, (heightNew / heightCurrent) * 100, {
                    scaleX: false,scaleContent:false,duration:order.resizeDuration,
                    afterFinish:(function(){
                        order.loading2.hide();                         
                        }).bind(order)
                    }); 
                    
   
                }
                else
                {
                    
                }

            }
        });
    },

    //
    //  resizeImageContainer()
    //
    resizeOrderContainer: function(contHeight) {
        var heightCurrent = this.outerOrderContainer.getHeight();
        var heightNew = (contHeight + LightboxOptions.borderSize * 2);
        var yScale = (heightNew / heightCurrent) * 100;
        var hDiff = heightCurrent - heightNew;
        if (hDiff != 0) 
            new Effect.Scale(this.outerOrderContainer, yScale, {
                scaleX: false,scaleContent:false,duration:this.resizeDuration,
                afterFinish:(function(){this.showDetailsCart();}).bind(this)
                }); 
        else this.showDetailsCart(); 
    },
    
    //
    //  DetailsCart()
    //
    showDetailsCart: function(){
        this.arrayPageSize=this.getPageSize();
        this.order.setStyle({ top: ((document.viewport.getHeight() / 10).round()) + 'px'});
        window.scrollBy(0,-document.viewport.getScrollOffsets()[1]+((document.viewport.getHeight() / 10).round()+this.outerOrderContainer.getHeight()+100-document.viewport.getHeight())); 
        if(this.overlay.getHeight()!= this.arrayPageSize[1]) this.overlay.setStyle({ height: this.arrayPageSize[1] + 'px' });
        this.loading2.hide();
        this.boxBtnNext.setStyle({ background: 'url(/templates/img/btn_fon_arr.png) no-repeat center right' }).show();
       // $('order_data').setStyle({ height: (this.outerOrderContainer.getHeight()-44-this.orderTitle.getHeight()-this.orderFooter.getHeight()) + 'px' });
        this.orderContent.show();
        this.orderTitle.show();
        this.orderFooter.show();
    },
    
   v_field: function (obj,ev){
	   if(ev) if(obj.value=="") {obj.className="field";    obj.value=this.fieldForm[obj.name];} 
	   //alert('obj.value = '+obj.value+'\n\n'+'this.fieldForm['+obj.name+'] = '+this.fieldForm[obj.name]);
       if(!ev)	if(obj.value==this.fieldForm[obj.name] || obj.className=="field err") {obj.value="";obj.className="field_ok";}
    },
   v_pay: function (obj){
	   if(obj.id=='n_pay')
       {
        var el=$('n_delivery'); 
        for(var i=0; i<el.length;i++) el[i].disabled=(el[i].value==2 && obj.value=='наличными')?true:false;
       }
	   else if(obj.id=='n_delivery')
       {
        var el=$('n_pay'); 
        for(var i=0; i<el.length;i++) el[i].disabled=(el[i].value=='наличными' && obj.value=='2')?true:false;
        $('box_address').style.visibility=(obj.value!=1)?'visible':'hidden';
        $('box_terms').style.visibility=(obj.value!=1)?'visible':'hidden';
        if(obj.value!=1) 
        {
            $('box_terms').innerHTML=(obj.value==0)?$('delivery_local').innerHTML:$('delivery_region').innerHTML;   
        }
       }       
    },    //
    //  updateDetails()
    //  Display caption, image number, and bottom nav.
    //
    updateDetails: function(el_change) {
        this.loading2.setStyle({opacity: 0.65});
        this.loading2.show();
        var data, act;
        var key=el_change.id.split('_').pop();
        switch(true){
            case el_change.name=='btndel': act='del_el'; data=key; break;
            case (el_change.name=='buytype' || el_change.name=='p_count'): act='recalc_cart'; data=key+':'+$F('buytype_'+key)+':'+$F('count_'+key); break;
        }
        new Ajax.Request('/?for_mod=shop&mod=ajax',
            {
                method: 'post',
                parameters: {act:act, data:data},
                onLoading:function(){},
                onLoaded:function(){},
                onSuccess: function(transport){        
                   //alert(transport.responseText);
                    var data = eval('(' + transport.responseText + ')');
                    if(data.act=='recalc_cart'){
                        $('summ_all').innerHTML=data.summ_all; 
                        $('summ'+data.el_act).innerHTML=data.summ_el;
                        $('pr'+data.el_act).innerHTML=data.pr_el; 
                        $('count_'+data.el_act+'_old').value=$F('count_'+data.el_act);
                        $('btn_'+data.el_act).setStyle({ display: 'none' });
                        order.loading2.hide();
                    }else if(data.act=='del_el'){
                        if(data.cart_list){
                            order.orderTitle.hide(); order.orderFooter.hide(); order.loading2.hide(); $('order_data').innerHTML=data.cart_list;
                        }else{
                            $('summ_all').innerHTML=data.summ_all; order.loading2.setStyle({opacity: 1.00}); $('cart_tb').deleteRow(data.index_row);
                            order.resizeOrderContainer(order.orderContent.getHeight()+order.orderTitle.getHeight()+order.orderFooter.getHeight());
                        }
                    }   
                    if(data.cart_mini) $('cartMini').show().innerHTML=data.cart_mini; else $('cartMini').hide().innerHTML='';
                }
            }    
        );
    },
    valid: function(target,event) {
        var key=target.id.split('_').pop();
        if(event.keyCode==13 && $F('count_'+key)!=$F('count_'+key+'_old')) this.updateDetails(target);
        else{
            var reg=/([^0-9])/gi;
            target.value=target.value.replace(reg,'')*1;
            reg=/([0-9]+)/gi;
            if(target.value==$F('count_'+key+'_old')) $('btn_'+key).setStyle({ display: 'none' }); 
            else if(reg.test(target.value)) $('btn_'+key).setStyle({ display: 'block' });
        }        
    },

    end: function() {
        $('orderContent').innerHTML='';        this.orderTitle.hide(); this.orderFooter.hide();        
        //this.order.setStyle({ top: this.arrayPageScroll[1]+(document.viewport.getHeight() / 3).round() + 'px' });
        this.outerOrderContainer.setStyle({ top: 0 + 'px' });
        this.order.hide();
        new Effect.Fade(this.overlay, { duration: this.overlayDuration });
        $$('select', 'object', 'embed').each(function(node){ node.style.visibility = 'visible' });
    },


    change_scm: function(el) {
        var data=el.id.split('_');
        var old=$(this.arrayChangeScm[data[1]][0]);
        old.className=old.className.replace('1','0');
        el.className=el.className.replace('0','1'); 
        this.arrayChangeScm[data[1]][0]=el.id; this.arrayChangeScm[data[1]][1]=el.title;
        $('scmi_'+data[1]).innerHTML=el.title;
        if(data[3]!='00' && data[3]!='01'){
        old=$('ico_'+data[1]); if(old!=undefined) old.className='ico ico_'+data[3];
        old=$('is_buy_'+data[1]); if(old!=undefined) old.className='is_buy ib_'+data[3];   
        var ts,tt;
        switch(data[3])
        {
            case '20': ts='ожидается'; tt='Купить';
            break;
            case '21': ts='в наличии'; tt='Купить';
            break;
            case '11': ts='в наличии'; tt='Купить';
            break;
            case '10': ts='под заказ'; tt='Купить';
            break;
            case '00': ts='нет в наличи';
            break;
        }
        old=$('buy_1_'+data[1]); if(old!=undefined) old.innerHTML=tt;
        old=$('buy_3_'+data[1]); if(old!=undefined) old.innerHTML=tt+" с установкой";
        old=$('stock_'+data[1]); if(old!=undefined) old.innerHTML=ts;
        //old=$('pr_1_'+data[1]); if(old!=undefined) old.className='stock_'+data[3]+' pr_str';
        //old=$('pr_3_'+data[1]); if(old!=undefined) old.className='stock_'+data[3]+' pr_str';
        }
    },
    //
    //  getPageSize()
    //
    getPageSize: function() {
	     var xScroll, yScroll;
		if (window.innerHeight && window.scrollMaxY) {	
			xScroll = window.innerWidth + window.scrollMaxX;
			yScroll = window.innerHeight + window.scrollMaxY;
		} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
			xScroll = document.body.scrollWidth;
			yScroll = document.body.scrollHeight;
		} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
			xScroll = document.body.offsetWidth;
			yScroll = document.body.offsetHeight;
		}
		var windowWidth, windowHeight;
		if (self.innerHeight) {	// all except Explorer
			if(document.documentElement.clientWidth){
				windowWidth = document.documentElement.clientWidth; 
			} else {
				windowWidth = self.innerWidth;
			}
			windowHeight = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		} else if (document.body) { // other Explorers
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}	
		// for small pages with total height less then height of the viewport
		if(yScroll < windowHeight){
			pageHeight = windowHeight;
		} else { 
			pageHeight = yScroll;
		}
		// for small pages with total width less then width of the viewport
		if(xScroll < windowWidth){	
			pageWidth = xScroll;		
		} else {
			pageWidth = windowWidth;
		}
		return [pageWidth,pageHeight];
	}
}

document.observe('dom:loaded', function () {order = new Order(); });
