function checkStates(country){
	
	var country_v=$(country).val().toLowerCase();
	var disabled=1;
	
	if(country_v=='us' || country_v=='united states')
		disabled=0;

	find=$(country).parent();
	while(!find.hasClass('address_form_div'))
		find=find.parent();
		
	find.find('.state_field').attr('disabled',disabled);
	
}

function add2wishlist(btn, item_sku, item_type){
	preloaderBtn(btn,true,{hide:1});
	doAjax({
		url: '/account/mywishlist/',
		data: 'op=add2wishlistBySKU&item_type='+item_type+'&item_sku='+item_sku,
		dataType: "html",
		complete: function(response){
			$('#popup-box-cart').html(response).show();
			cart_checkPopupTop();
			preloaderBtn(btn,false);
			checkProductsInWishlist();
        	}
	});
}

function checkProductsInWishlist() {
	var random = Math.floor(Math.random(1,999999)*1000);
	doAjax({
		url: '/account/mywishlist/',
		data: 'op=getSkuListInWishlist',
		complete: function(result){
			var confirm=result.split('|');
			for(i=0;i<confirm.length;i++){
				$('.iyw_'+confirm[i]).css('display','block');
			}
		}
	});
}

function add2wishlist_for_user_id(item_sku, item_type, for_user_id){
	$('#popup-box-cart').hide();
	doAjax({
		url: '/account/mywishlist/',
		data: 'op=add2wishlistBySKU&item_type='+item_type+'&item_sku='+item_sku+'&for_user_id='+for_user_id,
		complete: function(result){
			$('#popup-box-cart').html(result).show();
			cart_checkPopupTop();
			checkProductsInWishlist();
        	}
	});
}

function toChangeWL_for_user_id() {
	var wishlist_selected_id = $('#to_my_wishlist_select').val();
	if (wishlist_selected_id) {
		$('.for_user_input').removeAttr('checked');
		$('.for_user_id').removeAttr('disabled').attr('checked', 'checked').val( wishlist_selected_id );
		$('#selected_wishlist_for_user_id').val(wishlist_selected_id);
	} else {
		$('.for_user_input').removeAttr('checked');
		$('#selected_wishlist_for_user_id').val('0');
		$('.for_user_input').first().attr('checked', 'checked');
	}
}

var confirm_wait_array = new Array();

function goConfirmNext() {
	if ($('#lbMessage').length == 0 && confirm_wait_array.length > 0) {
		var i = confirm_wait_array.pop();
		confirmAdd(i.confirm, i.btn, i.parent, i.qty_sel, i.item_sku, i.item_type, i.addParams);
	}
}

//add2cart button
function add2cart(btn,qty_sel,item_sku,item_type,addParams){

	if(typeof(qty_sel)=='object'){
		var qty=qty_sel.val();
	}else{
		var qty=qty_sel;
	}
    
	qty=qty+"";//fix for set qty string format
	if(qty.replace(/[0-9]/g,'')!='' || qty*1<=0){
		lbMessage('Wrong qty format',{addOk:true});
		return false;
	}
	
	if(!addParams)
		addParams={};
	
	var confirm=false;
	if(addParams.confirmCnt){
		confirm=getIM('add_all2cart').replace('[cnt]',addParams.confirmCnt);
		addParams.confirmCnt=false;
	}else if(addParams.confirmTxt){
		confirm=addParams.confirmTxt;
		addParams.confirmTxt=false;
	}
	
	if(!addParams.action)
        addParams.action=false;
	
	if(confirm){
		lbMessage(confirm,{addOk:function(){ add2cart(btn,qty_sel,item_sku,item_type,addParams); },addOk_t:"Add to Cart",addClose:true});
		return false;
	}
    
	add2cartInProcess(btn,true);

	var data='add_qty=true&item_type='+item_type+'&item_sku='+item_sku+'&qty='+qty;
	if(addParams.confirmed) {
		data+='&confirmed=1';
	}
	if(addParams.user_id){
		data+='&user_id='+addParams.user_id;
	}
    
	
	//url: 'https://'+ getDomain() +'/cart/add2cartJS/',
	
	doAjax({
		url: '/cart/add2cartJS/',
		data: data,
		complete: function(result,headers){
			
			if(headers['Page-location'] && headers['Page-location'].indexOf('/auth/')===0){
				jsEx(headers['Page-location']);
				return false;
			}
			
			var confirm=result.split('[confirm]');
			var error=result.split('[error]');
			var _eval=analizeResponse(result,'eval',true);

			if(confirm.length==3){
				addParams.confirmed=true;
				var i = new Array();
				i['confirm'] = confirm;
				i['btn'] = btn;
				i['parent'] = parent;
				i['qty_sel'] = qty_sel;
				i['item_sku'] = item_sku;
				i['item_type'] = item_type;
				i['addParams'] = addParams;
				confirm_wait_array.push(i);
				goConfirmNext();
				// confirmAdd(confirm, btn, parent, qty_sel,item_sku,item_type,addParams);
			}else if(error.length==3){
				add2cartInProcess(btn,false);
				lbMessage(error[1],{addOk:true});
			}else if(_eval){
				eval(_eval);
			}else{
				add2cart_result(result,btn,qty_sel,addParams.action);
			}
		}
	});
    
}

function confirmAdd(confirm, btn, parent, qty_sel,item_sku,item_type,addParams) {

	lbMessage(confirm[1],{
		addOk:function(){ 
			$('.add2cart_wait',parent).remove();
			lbMessage(false);
			add2cart(btn,qty_sel,item_sku,item_type,addParams);
			goConfirmNext();
		},
		addClose:function(){ 
			var parent=$(btn).parent('.add2cart_enabled');
			if(!parent[0]){
				parent=$(btn).parent();
			}

			$('.add2cart_result',parent).remove();
			$('input,select',parent).attr('disabled',0);
			parent.removeClass('add2cart_disabled');
			$('.add2cart_wait',parent).remove();
			$(btn).show();
			lbMessage(false);
			goConfirmNext();
		},
		addOk_t:"Add to Cart"
	});

}

function checkProductsInCart() {
	var random = Math.floor(Math.random(1,999999)*1000);
	doAjax({
		url: '/cart/GetSkuInCart/?ts='+random,
		data: 'confirmed=1',
		complete: function(result){
			var confirm=result.split('|');
			for(i=0;i<confirm.length;i++){
				$('.iyc_'+confirm[i]).css('display','block');
			}
		}
	});
}

function add2cart_result(response, btn,qty_sel, action) {
    add2cartInProcess(btn,false,response);
    if(typeof(qty_sel)=='object'){
        qty_sel.val(qty_sel[0].defaultValue)
    }
    if(response){
        $('#popup-box-cart').html(response).show();
        cart_checkPopupTop();
    }
    if(action=='reload'){
        cart_redirect();
    }else if(response){
        checkProductsInCart();
    }
}

function add2cartInProcess(btn,start,response){
    
    if(!btn)
        return false;
    
    var parent=$(btn).parent('.add2cart_enabled');
    if(!parent[0]){
        parent=$(btn).parent();
    }
    //$('.add2cart_wait',parent).remove();
    if(start){
        
        parent.addClass('add2cart_disabled');
        $('input,select',parent).attr('disabled',1);
		preloaderBtn(btn,true,{hide:1,addcl:'add2cart_wait'});
        /*var wait="<div class='add2cart_wait'><img src='/assets/images/loader1.gif'></div>";
        $(btn).hide();
		$(btn).after(wait);*/
        
    }else{
		preloaderBtn(btn,false);
        if(response){
            var added="<div class='add2cart_result'>Added to Cart</div>";
            $(btn).after(added);
        }
    
        setTimeout(function(){ $('.add2cart_result',parent).remove(); $('input,select',parent).attr('disabled',0); parent.removeClass('add2cart_disabled'); /*$(btn).show();*/ },2000);
   
    }
   
}
//delete from cart button
function deleteFromCart(item_id,unit_type,title,confirmed){
    
	if(!confirmed){
		lbMessage(getIM('cart_confirm_delete').replace('[title]',title),{addOk:function(){deleteFromCart(item_id,unit_type,title,true);},addClose:true});
		return false;
	}
    
    doAjax({
        url: '/cart/deleteFromCartJS/',
        data: 'item_id='+item_id+'&unit_type='+unit_type,
        complete: function(result){
            cart_redirect();
        }
    });
    
}
function cart_ClearCart(confirmed){
	
	if(!confirmed){
		lbMessage(getIM('cart_confirm_delete_all'),{addOk:function(){cart_ClearCart(true);},addClose:true});
		return false;
	}
	
    doAjax({
        url: '/cart/deleteFromCartJS/',
        data: 'item_id=all',
        complete: function(result){
            window.location.href='?';
        }
    });
    
}

function cart_delItemsWithoutSh(){
	
	doAjax({
        url: '/cart/deleteFromCartJS/',
        data: 'item_id=withoutSh',
        complete: function(result){
            cart_saveShipment('/cart/checkout/');
        }
    });
	
}

//addToWishList button
function addToWishListFromCart(item_id,sku,btn,confirmed){
	
	if(!confirmed){
		if(sku){
			var mess=getIM('cart_confirm_to_wishlist').replace('[title]',sku);
		}else{
			var mess=getIM('cart_confirm_to_wishlist_all');
		}
		//lbMessage(mess,{addOk:function(){addToWishListFromCart(item_id,sku,btn,true);},addClose:true});
		lbMessage(mess,{addOk:function(){addToWishListFromCart(item_id,sku,btn,true);},addOk_t: "Yes",addClose:true, addClose_t:"No"});
		
		return false;
	}
    
    if(btn)
        preloaderBtn(btn,true,{before:1});
        
    var data="["+item_id+"]";
    doAjax({
        url: '/wishlist/',
        data: 'op=addToWishlistSimple&data='+data,
        complete: function(result){
            
		if(btn) preloaderBtn(btn,false);
        
	//	if(result == '0'){
			cart_redirect();
	//	}
	}
    });
}

function cart_saveShipment(go_to,red_if_error,add){
    $('#shipping_form').ajaxSubmit({
            complete: function(result,status){
				result=getAjaxRes(result);
                var error=result.split('[error]');
                if(error[1] && error[1].length>0 && !red_if_error){
                    lbMessage(error[1],{addOk:true});
                    return false;
                }
                if(add){
                    $('#shipment_add').submit();
                }else{
                    jsEx(go_to);
                }
                return true;
            }
    });
}
function cart_changeShipmentAddr(s_id,addr_id){
    doAjax({
        url: '/cart/getAddressHTML/',
        data: 'address='+addr_id,
        complete: function(result){
            $('#shipment_addr_'+s_id+'_cur').html(result);
        }
    });
}
function cart_showAddressForm(s_id,show){
    s_id="#shipment_addr_"+s_id;
    
    $(s_id+"_form")[0].reset();
    
    if(show){
        $(s_id+"_select, "+s_id+"_cur").css("display","none");
        $(s_id+"_add").css("display","block");
    }else{
        $(s_id+"_add").css("display","none");
        $(s_id+"_select, "+s_id+"_cur").css("display","block");
    }
}
function cart_saveNewAddress(s_id){
    var s_id_j="#shipment_addr_"+s_id;
    if(check_form($(s_id_j+"_form")[0])=="submit"){
        $(s_id_j+"_form").ajaxSubmit({complete: function(result,status){
			result=getAjaxRes(result);
            cart_showAddressForm(s_id,false);
            var addr_id=result.split('[id]');
            var addr_title=result.split('[title]');
            if(addr_id.length>=3 && addr_title.length>=3){
                $(document).find('select.shop_select').each(function(){
                    var _find=this;
                    _find.options[_find.options.length]=new Option(addr_title[1],addr_id[1]);
                });
                $(s_id_j+'_select select').val(addr_id[1]);
                cart_changeShipmentAddr(s_id,$(s_id_j+'_select select').val());
            }
        }});
    }
}
function cart_submitOrder(action,addParams){
	
	if(!addParams)
		addParams={};
		
	if($('.shipment_addr_add:visible').length>0){
		lbMessage(getIM('cart_js_save_address'),{addOk: true });
			return false;
	}
	
	cart().updateShipPOVals();
	
	if(action=='checkout'){

		if(!cart().checkShipPOVals())
			return false;

		if(!$('#terms_and_condition').attr('checked')){
			lbMessage(getIM('cart_js_read_term'),{addClose:true,addOk:function(){lbMessage(getIM('terms_and_condition'),{addClose:true,addOk_t:"I agree",addOk:function(){ getEl('terms_and_condition').checked=true; }});}, addOk_t:"Read"});
			return false;
		}
	}
    
    $('#cart_checkout_action').val(action);
    
    var add_fields=$('#order_form .add_fields');
    add_fields.html('');
    $(document).find('.order_add_field').each(function(){
        var _find=$(this);
		if(_find.val()){
			var val=_find.val().replace("'","&#39;").replace('"','&#34;');
			add_fields.append("<input type='hidden' name='"+_find.attr('name')+"' value='"+val+"'>");
		}
    });
	
    $('#order_form').ajaxSubmit({
            complete: function(result,status){
                result=getAjaxRes(result);
                var order_id=analizeResponse(result,'order',true);
                if(order_id){
                    doAjax({url: '/cart/sendEmail/'+order_id+'/'});
                }
                
                var redirect=analizeResponse(result,'redirect',true)
                if(addParams.redirect && !redirect)
					redirect=addParams.redirect;
                    
                if(!analizeResponse(result,'eval')){
					var mess=analizeResponse(result,'message',true);
					if(mess){
						lbMessage(mess,{addOk:function(){ jsEx(redirect) }});
					}else{
						jsEx(redirect);
					}
				}
                
            }
    });
}

function cart_checkIsQtyChenged(){

    var chenged=false;
    
    $('#cart_form').find('.prodtable_qty').each(function(){
            
        if(this.value!=this.defaultValue)
            chenged=true;
        
    });
    
    return chenged;
    
}
function cart_UpdateCart(redirect_link){
    
    var allow_submit=true;
    
    $('#cart_form').find('.prodtable_qty').each(function(){
            
        if(!allow_submit)
            return false;
        
        var _find=$(this);
        var qty=_find.val();
        
        if(qty.replace(/[0-9]/g,'')!=''){
            if(redirect_link){
                _find.val(qty.replace(/[^0-9]/g,''));
            }else{
                lbMessage('Wrong qty in '+_find.attr('title'),{addOk:true});
                _find.focus();
                allow_submit=false;
            }
        }
        
    });
    
    if(!allow_submit)
        return false;

    $("#cart_form").ajaxSubmit({complete: function(result,status){
		result=getAjaxRes(result);
        if(redirect_link){
            jsEx(redirect_link);
            return false;
        }
        var mess=result.split('[result]');
        if(mess[1]){
            lbMessage(mess[1],{addOk:function(){ jsEx('/cart/'); }});
        }
    }});

}

var cartPopupOver=false;
var cartPopupHide=false;

$(document).ready(function(){
    $('.p_header .cartBlock a').mouseover(function(){
        cartPopupOver=true;
        setTimeout("cart_ShowPopup()",300);
    }).mouseout(function(){
        cartPopupOver=false;
    });
    
    $(document).mousemove(function(e){
        if(cartPopupHide){
            cartPopupHide=checkMousePos($('#popup-box-cart'),e);
        }
    });
});

function cartShowPopupInfo(el,sh_type){
	sh_typeInfo=[
        '',
        'ship_order_complete',
        'split_order_packages',
        'ship_as_ready',
        'cart_js_ship_date_changed'
    ];
	iCreatePopup(getIM(sh_typeInfo[sh_type]),$(el));
}

$(window).scroll(function(e){
    cart_checkPopupTop();
});

function cart_checkPopupTop(){
    var popup=$('#popup-box-cart');
    if (popup!=null){
	if(popup.css('display')!='none'){
		var d_top=$(window).scrollTop()
		var offset = $('.p_header').offset();
		var h_top=(offset?offset.top:0)*1+$('.p_header').height()/2;
		var p_top=6;
		if(d_top>h_top)
			p_top=d_top-h_top;
		popup.css('top',p_top+'px');
	}
    }
}

function cart_ShowPopup(){
 
    if(!cartPopupOver)
        return false;
    
    doAjax({
        url: '/cart/showPopup/',
        complete: function(result){
            $('#popup-box-cart').html(result).show();
            cart_checkPopupTop();
            cartPopupHide=true;
        }
    });

}
function cart_CloseShip(s_id,move2wishlist){
    
    var ship_div=$('#order_ship_'+s_id);
    var ship_div_c=$('#order_ship_'+s_id+'_cancel')
	var c_input=$('#shipment_'+s_id+'_canceled');
	var w_input=$('#shipment_'+s_id+'_move2wishlist');
	
	c_input.val('0');
	w_input.val('0');
    
    if(ship_div.css('display')=='block'){
        ship_div.hide();
        ship_div_c.show();
		c_input.val('1');
		if(move2wishlist){
			w_input.val('1');
			$('.cancel_mess',ship_div_c).html(getIM('cart_js_order2wisthlist'));
		}else{
			$('.cancel_mess',ship_div_c).html('Order was cancelled.');
		}
    }else{
        ship_div_c.hide();
        ship_div.show();
    }
    
}

function cart_checkQtyChange(field){
    if(!field)
        return false;
    var val=field.value.replace(/[^0-9]/g,'');
    $(field).val(val);
    var def_val=field.defaultValue.replace(/[^0-9]/g,'');
    if(val!=def_val){
        $('.qty_change',$(field).parent()).val('1');
    }
}

function cartShipSelect(item,sku){
    
    $('input.ship_select_all').attr('checked',false).attr('ch',0);
    
    var sid=item.id.replace(/.*_/,'');
    var oid=item.id.replace(/_[^_]*$/,'');
	
    //if item is input, uncheck all shipping for this item
    if(item.tagName.toLowerCase()=='input'){
        $.each(shipInfo,function(_sid,sidData){
            var _find=getEl(oid+'_'+_sid);
            if(!_find)
                return true;//continue
            if(_find.checked && _find.id!=item.id){
                _find.checked=false;
            }
        });
    }

    cartUpdateShipTotals();
    cartUpdateFormElements();
    
}

function Date2AvPeriods(need_date){
    
    if(typeof(need_date)!='object'){
        if(!need_date)
            need_date=new Date();
        else
            need_date=new Date(need_date*1);
    }
        
    need_date=[need_date.getFullYear(),dayOfYear(need_date)];
    
    var cur_date=new Date();
    cur_date=[cur_date.getFullYear(),dayOfYear(cur_date)];
        
    var period=0;
    if(need_date[0]*1<cur_date[0]*1){
        period=0;
        return period;
    }else if(need_date[0]*1>cur_date[0]*1){
        var date=need_date[1]*1+dayOfYear(new Date('31 December '+cur_date[0]))*1-cur_date[1]*1;
    }else{
        var date=need_date[1]*1-cur_date[1]*1;
    }
        
    period=Math.ceil(date/7);

    if(period<1){
        period=0;
    }else if(period>cart().maxPerNum){
        period=cart().maxPerNum;
    }

    return period;

}

//return min && max date of period
function AvPeriod2Dates(period){
    
	var zero_per=add2Date(1,currDate);
	
    if(period*1<=0)
        return zero_per;
        
	var min_date=add2Date(((period-1)*7+6),zero_per);  // "+6" - FIX by task 3525

    return min_date;      
    
}

function dayOfYear(d) {   // d is a Date object
    if(typeof(d)!='object'){
        if(d)
            d=new Date(d*1);
        else
            d=new Date();
    }
    var yn = d.getFullYear();
    var mn = d.getMonth();
    var dn = d.getDate();
    var d1 = new Date(yn,0,1,12,0,0); // noon on Jan. 1
    var d2 = new Date(yn,mn,dn,12,0,0); // noon on input date
    var ddiff = Math.round((d2-d1)/864e5);
    return ddiff+1;
}

function cartChangeShType(confirmed){
	
	var shType=false;
	
	shType=$('input.sh_type_ch:checked').val();
	if(!shType)
		return false;

	if(shType*1!=orderShType*1){
		
		if(orderShType*1==2 && !confirmed){
			lbMessage(getIM('cart_js_change_sh_type'),{addClose:true,addOk:function(){ cartChangeShType(true); }});
			return false;
		}
        
        lbMessage(getIM('cart_js_updating_info'),{addLoader:'b'});
        doAjax({
            url: '/cart/changeShType/'+shType+'/',
            complete: function(result){
                window.location.href='?';
            }
        });
		
	}
	
}

var dpVars={
	sid:false,
	backDate:false,
	disableDays:[]
}

function dtSetDisableDays(date) {
	var d=getDateFormat(date);
	if($.inArray(d,dpVars.disableDays) != -1 ){
		return [false];
	}else
		return [true];
}

function cartGetShippingMinDate(sid){
    
    var shDate=0;
    
    cartCalcItemsAvailability(sid);
        
    $.each(shipInfo[sid].items,function(i,item){
            
        var iTotals=cartGetItemTotals(item);
        cartSetItemAv(item,iTotals.date);
        if(iTotals.date>shDate)
            shDate=iTotals.date;
                
    });
    
    if(minDate.getTime()*1>shDate*1)
        shDate=minDate.getTime();

    shDate=new Date(shDate*1);
    return shDate;

}

function cartViewShCalendar(sid){
	
    var _find=$('#package_calendar_'+sid);
    
    dpVars.backDate=getShDateTS(sid);
    dpVars.sid=sid;
    
    dpVars.disableDays=new Array();

    /*//can create more than 1 shipping for 1 day, task #2913
    curDay=getDateFormat(dpVars.backDate);
	$.each(shipInfo,function(_sid,data){
        if(getShDateTS(_sid,true)){
            var disDay=getDateFormat(getShDateTS(_sid));
            if(disDay!=curDay){
                dpVars.disableDays[dpVars.disableDays.length]=disDay;
            }
        }
	});*/
			
    var options={
		dateFormat:'@',

		minDate: cartGetShippingMinDate(sid),
		maxDate: maxDate,
		changeYear: true,
		altField: $('#ship_'+sid+'_sh_date'),
		beforeShow: function(input, inst){ $(input).css('display','none'); },
		beforeShowDay: dtSetDisableDays,
		onSelect:	cartUpdateShippingDate
	}

	var offset = _find.offset();
	var pos=[(offset?offset.left:0),(offset?offset.top:0)*1+20*1];
	var curDate=getShDateTS(sid,true)?dpVars.backDate:new Date().getTime();
    _find.datepicker( "dialog" ,curDate,options.onSelect,options,pos);
	$('#ui-datepicker-div').css('z-index',9999);
    
}

function cartUpdateShippingDate(dateText, inst){
    
    setShDateTS(dpVars.sid);
    //not need if "Ship my order complete"
    if(orderShType*1==1)
        return true;
    
	if(getDateFormat(dpVars.backDate)!=getDateFormat(getShDateTS(dpVars.sid))){
        
        setShNewStatus(dpVars.sid,false);
        $('#ship_th_'+dpVars.sid).removeClass('shdate_changed');
        
        cartUpdateShipTotals();
        cartUpdateFormElements();
        
	}else{
        setShDateTS(dpVars.sid,dpVars.backDate);
    }
    
}

function cartSortItems(sort_by){
	
	/*if(sort_by==item_sort_by && item_sort_dir=='down'){
		item_sort_dir='up';
	}else{
		item_sort_dir='down';
	}*/
	
	item_sort_by=sort_by;
	$('#item_sort_filter').val(item_sort_by);
    
    cartUpdateShippingItems({
        loading: getIM('cart_js_updating_info'),
        action: '/cart/changeShItemsSort/?sort='+sort_by/*+'&dir='+item_sort_dir*/
    });
	
}

function cartLargeImage(src, ruler, comment){
	
	var mess="<b>Larger View</b>";
	lbMessage(mess,{addLoader:'a',addClose:true});
	
	$('<img />').attr('src', src).load(function(){
		mess+="<div class='clear'>&nbsp;</div><img src='"+src+"' id='_LargeImage' width='432'><br><img src='/assets/images/r"+ruler+"in.gif' border='0' width='432' height='20'><br />"+comment;
		lbMessage(mess,{addClose:true,width:'auto'});
		//$('#lbMessage .lb_content').width($('#_LargeImage').width())
	});
}

function cartChangeUser(show){
    if(!show)
        show=0;
    if(show==1){
        getEl('mystores_acc_no').value=getEl('mystores_acc_no').defaultValue;
        $('#stores_rep_b').hide();
        $('#stores_rep_f').show();
    }else if(show==0){
        getEl('mystores_acc_no').value=getEl('mystores_acc_no').defaultValue;
        $('#stores_rep_f').hide();
        $('#stores_rep_b').show();
    }else if(show==2/* && getEl('mystores_acc_no').value.length>0*/){
        if(getEl('mystores_acc_no').value!=getEl('mystores_acc_no').defaultValue){
            doAjax({
                url: '/cart/changeUser/',
                data: 'user_id='+getEl('mystores_acc_no').value,
                complete: function(result){
                    cart_redirect();
                }
            });
        }
    }
    
}

function getAvByDate(av,time){
	
	var period=Date2AvPeriods(time*1);
	return av[period]?av[period]:[0,0];
	
}

function getShDateTS(sid,check){
    if(!check){
        longMonths=['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
        
        var val=$('#ship_'+sid+'_sh_date').val();
        val=val.split('/');
        val=new Date(val[1]+' '+longMonths[val[0]-1]+' '+val[2]);
        return val.getTime();
    }else{
        if($('#ship_'+sid+'_sh_date_html').html()=='--')
            return false;
        else
            return true;
    }
}

function setShDateTS(sid,date){
    
    if(!date){
        date=$('#ship_'+sid+'_sh_date').val();
    }
    
    if(date=='new'){
        date=maxDate.getTime();
        $('#ship_'+sid+'_sh_date_html').html('--');
        $('#package_calendar_'+sid).html('Choose date');
        
    }else{
        $('#ship_'+sid+'_sh_date_html').html(getDateFormat(date,'mmmm d, yyyy'));
        $('#package_calendar_'+sid).html('Change to ship later');
    }
    
    $('#ship_'+sid+'_sh_date').val(getDateFormat(date,'mm/dd/yyyy'));
    
}

function getShNewStatus(sid){
    return shipInfo[sid].isNew;
}

function setShNewStatus(sid,status){
    shipInfo[sid].isNew=status;
}

function cart_go2shipping(){
    doAjax({
        url: '/cart/checkShipping/',
        complete: function(result){
            if(!analizeResponse(result,'eval'))
                jsEx('/cart/shipping/');
        }
    });
}

var cart_page=false;
function cart_redirect(action,addParams){
    
    if(!action){
        action=window.location.href.replace(/\#.*/,'');
    }
    
    var local_action=action;
    
    var ok_action=false;
    var need_ask=false;
    if(cart_page=='shopping'){
        ok_action=function(){ cart_UpdateCart(action); };
        if(cart_checkIsQtyChenged())
            need_ask=true;
    }else if(cart_page=='shipping'){
        ok_action=function(){ cart_saveShipment(action,true); };
        need_ask=true;
    }else if(cart_page=='checkout'){
        ok_action=function(){ cart_submitOrder(action,addParams); };
        if(action=='print'){
            local_action='?print=1[_blank]';
        }
        need_ask=true;
    }
    
    if(!need_ask){
        jsEx(local_action);
        return false;
    }
    
    var no_action=function (){
        jsEx(local_action);
    }
    
	lbMessage(getIM('cart_js_save_settings_'+cart_page),{addClose_t: "No",addClose: no_action,addOk:ok_action, addOk_t: "Yes"});
        
}

function cartPriceFormat(price){
	
	int_price=Math.floor(price);
	fract_price=Math.round((price-int_price)*100);
    if(fract_price>=100){
        fract_price-=100;
        int_price++;
    }
	
	price='';
	
	num=0;
	int_price=int_price+'';
	for(i=int_price.length-1;i>=0;i--){
		if(num%3==0 && num!=0)
			price=','+price;
		price=int_price.charAt(i)+price;
		num++;
	}
	
	if(fract_price>0){
		price+='.'+(fract_price<10?'0':'')+fract_price;
	}
		
    return price;
}

function cart_changeItemAv(qtys,time,change){
    
    var start_period=Date2AvPeriods(time*1);

    //prepare change value
    if(change*1<0)
        change=change*(-1);
    
    var qtys_l=0;    
    $.each(qtys,function(period,qty){
        qtys_l++;
    });
    
    //change future periods
    for(i=start_period*1+1*1;i<qtys_l;i++)
        qtys[i][1]-=change;
    
    //change past periods
    for(i=start_period;i>=0;i--){

        var added=qtys[i][1];
        if(i!=0)
            added-=qtys[i-1][1];
            
        qtys[i][1]-=change;
        
        if(qtys[i][1]*1<0)
            qtys[i][1]=0;
            
        //calc change val for previous period
        change-=added;
        
        if(change<=0)
            break;
        
    }
    
    return qtys;

}

function cartUpdateShippingItems(opt){
    
    lbMessage(opt.loading,{addLoader:'b'});
    
    var successFunc=function(result){
                
        var error=result.split('[error]');
                
        if(error[1]){
            if(opt.errorAct)
                jsEx(opt.errorAct);
        }else{
            if(opt.successAct)
                jsEx(opt.successAct);
            $('#packagetable table.blue tbody').html(result);
            cartSetShipsItems();
        }

        if(error[1]){
            setTimeout(function(){ lbMessage(error[1],{addClose:true}); },500);
        }else{
            setTimeout("lbMessage(false)",500);
        }
            
    }

    if(opt.url){
        
        doAjax({
            url: opt.url,
            data: (opt.data?opt.data:false),
            complete: successFunc
        });
        
    }else{
        
        var action=$('#shipping_form').attr('action');
        
        $('#shipping_form').attr('action',opt.action).ajaxSubmit({
            complete: function(result){
				result=getAjaxRes(result);
				successFunc.call(this,result);
			}
        });
        
        $('#shipping_form').attr('action',action);
        
    }
    
}

function cartUpdateShipTotals(recalcTo){
    
    $.each(shipInfo,function(sid,ship){
		
		if(recalcTo && (recalcTo.toString()==sid.toString())){
			return false;//break;
		}
			
        
        //reset items Availability
        cartCalcItemsAvailability(sid);
        
        var shDate=0;
        var total=0;
        var bolts=0;
        
        $.each(ship.items,function(i,item){
            
            var iTotals=cartGetItemTotals(item);
			
            total+=iTotals.total;
            bolts+=iTotals.bolts;
            cartSetItemAv(item,iTotals.date);
            
            //set ship Sh Date
            if(iTotals.date>shDate)
                shDate=iTotals.date;
                
        });
        
        $('#ship_th_'+sid+' .package_total span._total').html(cartPriceFormat(total));
		$('#ship_th_'+sid+' .package_total span._bolt_cnt').html(bolts);

        //update ship Sh Date
        if(!shDate){
            if(getShNewStatus(sid) && getShDateTS(sid,true)){
                setShDateTS(sid,'new');
                setShNewStatus(sid,true);
                $('#ship_th_'+sid).removeClass('shdate_changed');
				cartUpdateShipTotals(sid);//changed date - changed Availability - need recalc data
            }
        }else if(getShDateTS(sid)*1!=shDate*1 && ( getShNewStatus(sid) || shDate*1>getShDateTS(sid)*1 ) ){
            setShDateTS(sid,shDate);
            setShNewStatus(sid,true);
            $('#ship_th_'+sid).addClass('shdate_changed');
			cartUpdateShipTotals(sid);//changed date - changed Availability - need recalc data
        }
        
    });
    
}

function cartSetShipsItems(){
    
    var oids={};
    $.each(cartItemsData,function(sku,_oids){
        $.each(_oids,function(_oid,data){
            if(data.group!='' && _oid==data.group){
                oids[_oid]=cartSetGroupItems(data.group);
            }else{
                oids[_oid]=[data];
            }
        });
    });
    
    $.each(shipInfo,function(sid,data){
        shipInfo[sid].items=[];
    });
    
    $('select.sh_se,input.sh_ch').each(function(){

        var domEl=this;
        
        var oid=domEl.id.replace(/(.*[0-9]*)(_.*)/,'$1');
        var sid=domEl.id.replace(oid+'_','');
        
        if(!oids[oid])
            return true;//continue
        
        shipInfo[sid].items[shipInfo[sid].items.length]={
            el: domEl,
            items: oids[oid]
        };
        
    });
    
}

function cartSetGroupItems(group){
    
    var items=[];
    $.each(cartItemsData,function(sku,_oids){
        $.each(_oids,function(_oid,data){
            if(group==data.group && _oid!=data.group){
                items[items.length]=data;
            }
        });
    });
    
    return items;
    
}

function cartGetShItemQty(el,data){
    
    var qty=data.group!=''?data.qty:el.value;
    if( el.disabled || el.checked===false)
        qty=0;
    return qty;

}

function cartCalcItemsAvailability(ignoreSid){
    
    $.each(cart_Availability,function(sku,periods){
        periods=cart_Availability[sku];
        $.each(periods,function(period,qty){
            periods[period][1]=qty[0];
        });
        cart_Availability[sku]=periods;
    });
    
    $.each(shipInfo,function(sid,ship){
        if(ignoreSid && sid==ignoreSid)
            return true;//continue;
        $.each(ship.items,function(i,item){
            cartSetItemAv(item,getShDateTS(sid));
        });
    });
                        
}

function cartGetItemTotals(item){
    
    var iTotals={
        date:0,
        total:0,
        bolts:0
    };
    
    $.each(item.items,function(i,_item){
        
        //calc item Sh Date
        var iQty=cartGetShItemQty(item.el,_item);
        if(iQty*1<1)
            return true;//continue;
		
        iTotals.total=iTotals.total*1+iQty*_item.qty_f*_item.unit_price;
        if(_item.unit_type=='f')
            iTotals.bolts=iTotals.bolts*1+iQty*1;
        
        var needTime=0;
        $.each(cart_Availability[_item.sku],function(period,qty){
            if(qty[1]*1>=iQty*_item.qty_f*1){
                needTime=AvPeriod2Dates(period);
				//alert((new Date(needTime)))
                if(_item.fShip*1>needTime*1){
                    needTime=_item.fShip;
                }
                return false;//break
            }
        });
		
        if(needTime*1>iTotals.date*1)
            iTotals.date=needTime;
        
    });
    
        
    return iTotals;
    
}

function cartSetItemAv(item,needTime){
    
    $.each(item.items,function(i,_item){
        //calc item Sh Date
        var iQty=cartGetShItemQty(item.el,_item)*_item.qty_f;
        //recalc item Availability
        cart_Availability[_item.sku]=cart_changeItemAv(cart_Availability[_item.sku],needTime,iQty);
    });
    
}

function cartUpdateFormElements(){

    var left_qty={};
    var checkbox={};
	
    $.each(shipInfo,function(sid,ship){
        
        $.each(ship.items,function(i,item){
            
            var el=item.el;
            var _item=item.items[0];
            
            if(el.tagName.toLowerCase()=='input' && el.checked){
                checkbox[_item.oid]=true;
            }else{
                if(left_qty[_item.oid]===undefined)
                    left_qty[_item.oid]=_item.qty;
                left_qty[_item.oid]-=el.value;
            }
            
        });

    });
    
    $.each(shipInfo,function(sid,ship){
        
        $.each(ship.items,function(i,item){
            
            var el=item.el;
            var _item=item.items[0];
            
            var qty=Math.floor(cart_Availability[_item.sku][cart().maxPerNum][1]/_item.qty_f);
            
            if(el.tagName.toLowerCase()=='input'){
                
                if(checkbox[_item.oid]===undefined){
                    if(_item.group!=''){
                        checkbox[_item.oid]=cartCanAddGroup(item.items,AvPeriod2Dates(cart().maxPerNum));
                    }else{
                        checkbox[_item.oid]=(qty*1>=el.value);
                    }
                }
                
                el.disabled=!checkbox[_item.oid];
                
            }else{

                //calc Availability qty
                var qty=Math.floor(cart_Availability[_item.sku][cart().maxPerNum][1]/_item.qty_f);
                var add_length=left_qty[_item.oid];
                if(add_length*1>qty*1)
                    add_length=qty;
                    
                add_length=add_length*1+el.value*1+1*1;
                if(add_length*1<el.options.length){
                    el.options.length=add_length;
                }else if(add_length*1>el.options.length){
                    while(add_length*1!=el.options.length){
                        el.options[el.options.length]=new Option(el.options.length,el.options.length);
                    }
                }
                    
                //unable/disable checkbox
                if(el.options.length<=1){
                    el.disabled=true;
                }else{
                    el.disabled=false;
                }
                
            }
                
        });
            
    });
    
}

function cartCanAddGroup(items,shDate){
    
    var canAdd=true;
    
    $.each(items,function(i,item){
        //calc Availability qty
        if(getAvByDate(cart_Availability[item.sku],shDate)[1]*1<item.qty*item.qty_f){
            canAdd=false;
            return false;
        }
    });
    
    return canAdd;

}

function cart_addAllToShipment(sid,shSel,start){
    
    var shipItem=$(shSel);
    if(shipItem.attr('ch')==1){
        shipItem.attr('checked',true);
        return true;
    }

    if(!start){
        lbMessage(getIM('cart_js_updating_info'),{addLoader:'b',delayF:function(){ cart_addAllToShipment(sid,shSel,true); }});
        return true;
    }
    
    //update date
    $('select.sh_se').val(0);
    $('input.sh_ch').attr('checked',false);
    $('input.ship_select_all').attr('checked',false).attr('ch',0);
    shipItem.attr('checked',true).attr('ch',1);
    
    cartUpdateShipTotals();
    cartUpdateFormElements();
    
    $.each(shipInfo[sid].items,function(i,item){
            
        var el=item.el;
        var _item=item.items[0];
        
        if(el.disabled || el.checked)
            return true;//continue
            
        if(el.tagName.toLowerCase()=='input' && _item.group!='' && cartCanAddGroup(item.items,AvPeriod2Dates(cart().maxPerNum))){
            el.checked=true;
            cartSetItemAv(item,getShDateTS(sid));
        }
        
    });
    
    $.each(shipInfo[sid].items,function(i,item){
            
        var el=item.el;
        var _item=item.items[0];
        
        if(el.disabled || el.checked)
            return true;//continue
        
        var qty=Math.floor(cart_Availability[_item.sku][cart().maxPerNum][1]/_item.qty_f);
            
        if(el.tagName.toLowerCase()=='input'){
            if(qty*1>=el.value){
                el.checked=true;
                cartSetItemAv(item,getShDateTS(sid));
            }
        }else{
            if(_item.qty<qty){
                el.value=_item.qty;
            }else{
                el.value=qty;
            }
            cartSetItemAv(item,getShDateTS(sid));
        }
        
    });
    
    cartUpdateShipTotals();
    cartUpdateFormElements();
    
    lbMessage();
    
}

function cartAPIObj(){
	
	this.barCodeInput=function(event,codeId,qtyId){
		
		var codeF=getEl(codeId);
        /*var code=this.parseBarCode(codeF);
		if(!code)
			return false;*/
		var code=codeF.value;
		
		if(!event.keyCode || event.keyCode!=13)
			return false;
			
        var qty=getEl(qtyId).value.replace(/[^0-9]*/g,'');
        if(qty*1<=0)
            qty=1;
                        
        codeF.value=codeF.defaultValue;
        getEl(qtyId).value=getEl(qtyId).defaultValue;
                            
        preloaderBtn(codeF,true);
        $('#barcode_results').hide();
                    
		doAjax({
			url: '/cart/barCodeProccess/',
			data: 'barCode='+code+'&qty='+qty,
			complete:function(result){
					
				result=unescape(result);
					
				var mess=analizeResponse(result,'message',true);
				if(mess)
					$('#barcode_results').html(mess).show();
					
				var html='';
				var _eval=analizeResponse(result,'eval',true);
				if(_eval)
					eval(_eval);
						
				preloaderBtn(codeF,false);
						
			}
		});
		
		return true;
		
	}
	
	this.barCodeFile=function(key,btn){
		
		var file=getEl(key);
		var form=getEl(key+'_form');
	
		if(!form || !file || file.value.length==0){
			lbMessage('Please, select file.',{addOk:true});
			return false;
		}
		
		preloaderBtn(btn,true,{hide:1});
		$('#barcode_results').hide();
	
		$(form).ajaxSubmit({
			url: '/cart/barCodeProccess/',
			type: 'POST',
			dataType: 'text',
			complete:function(result){
				
				file.value='';

				result=getAjaxRes(result);
					
				var mess=analizeResponse(result,'message',true);
				if(mess)
					$('#barcode_results').html(mess).show();
				
				var html='';
				var _eval=analizeResponse(result,'eval',true);
				if(_eval)
					eval(_eval);
					
				preloaderBtn(btn,false);
					
			}
		});
		
		return true;
		
	}
	
	this.parseBarCode=function(field){
		
		field.value=field.value.replace(/[^A-Z0-9\-]*/ig,'');
		
		//check for upca
		var code=field.value;
		if(code.length==12 && code.replace(/[0-9]*/g,'').length==0){
			return code;
		}
		
		//check for code128/SKU
		var code=field.value.replace(/\-/g,'');
		var codeA=code.replace(/([A-Z]*).*/gi,'$1');
		var codeN=code.replace(codeA,'').replace(/[^0-9]*/g,'').toString();
		if(codeA.length!=0 && codeN.length!=0 && (codeA+codeN)==code){
			return field.value;
		}
		
		return false;
		
	}
	
	this.changePOMode=function(){
		if(getEl('order_po_same').checked){
			$('.ship_po_dif_block').hide();
			$('#order_po_same_v').removeClass('field-disabled').attr('disabled',0);
		}else{
			$('#order_po_same_v').addClass('field-disabled').attr('disabled',1);
			$('.ship_po_dif_block').show();
			$('.ship_po_dif_val').val(getEl('order_po_same_v').value);
		}
	}
	
	this.updateShipPOVals=function(){
		if(!getEl('order_po_same') || getEl('order_po_same').checked){
			$('.ship_po_dif_val').val(getEl('order_po_same_v').value);
		}
	}
	
	this.checkShipPOVals=function(){
		
		var check=true;
		
		$('.ship_po_dif_val').each(function(){
			if(this.value.length==''){
				
				check=false;
				
				if(!getEl('order_po_same') || getEl('order_po_same').checked){
					
					var focusBtn=function(){
						$('#order_po_same_v').focus();
					}
					
					var useBtn=function(){
						$('#order_po_same_v').val(checkout.accPO);
					}
				
				}else{
					
					var focusBtn=function(){
						$(this).focus();
					}
					
					var useBtn=function(){
						$('.ship_po_dif_val').each(function(){
							if(this.value.length=='') $(this).val(checkout.accPO);
						});
					}
					
				}
				
				lbMessage(getIM('cart_js_enter_po').replace('[defpo]',checkout.accPO),{addOk: focusBtn,addOk_t:"Enter PO number",addClose:useBtn,addClose_t:"Use predefined PO"});
				
				return false;
			
			}
		});
		
		return check;
		
	}
	
	this.setDiscount=function(code,confirmed){
		
		var codeVal=false;
		
		if(typeof(code)=='object'){
			
			codeVal=code.value;
			if(codeVal==code.defaultValue)
				codeVal='';
			
			codeVal=codeVal.replace(/[\s\ ]/g,'');
			if(codeVal.length==0){
				lbMessage('Enter Promo Code',{
					addOk:function(){ code.focus(); }
				});
				return false;
			}
			
		}else
			codeVal='';
		
		if(codeVal!==false){
			
			if(codeVal.length==0 && !confirmed){
				lbMessage('Are you sure you want to remove the promo code? The discount on your order will be removed.',{
					addOk:function(){ cart().setDiscount('',true); },
					addClose:1
				});
				return false;
			}
			
			doAjax({
				url: '/cart/setDiscount/',
				data: {code:codeVal},
				type:'POST',
				complete: function(response){
					
					var mess=analizeResponse(response,'message',true);
					var status=analizeResponse(response,'status',true);
					
					if(status!='error'){
						lbMessage(mess,{
							addOk:function(){ cart_redirect(); }
						});
					}else{
						lbMessage(mess,{addClose:1});
					}
					
				}
			});
			
		}
	}
	
	this.priceOverride={
		targetFind:function(target,domClass){
			
			var res=[];
			
			target.each(function(){
				
				if($(this).hasClass(domClass))
					res.push(this);
				
				$(this).find('.'+domClass).each(function(){
					res.push(this);
				});
				
			});
				
			return res;
			
		},
		edit:function(target){
			
			$.each(this.targetFind(target,'price-override-view'),function(){ $(this).hide(); });
			
			var edit=this.targetFind(target,'price-override-edit');
			
			$.each(edit,function(){
				$(this).show();
				$(this).find('input').each(function(){ this.value=this.defaultValue; });
			});
			
		},
		save:function(target,sku,minPrice,reset,addMessage){
			
			if(addMessage)
				addMessage='Your price change has been successfully applied.'
			
			var newPrice=this.targetFind(target,'price-override-new-price');
			if(!newPrice)
				return false;
			
			newPrice=$(newPrice[0]);
				
			if(reset)
				newPrice.val('');
				
			var error=check_float({
				title: 'New price',
				field: newPrice
			});
			
			if(error!==true){
				lbMessage(error,{addOk:true});
				return false;
			}
			
			newPrice=newPrice.val();
			if(newPrice>0 && newPrice*1<minPrice*1){
				lbMessage(js_message.price_override_error_message.replace('[min_price]','$'+cartPriceFormat(minPrice)),{addOk:true});
				return false;
			}
			
			var note=this.targetFind(target,'price-override-note');
			if(note)
				note=$(note[0]).val();
			else
				note='';
			
			$.each(this.targetFind(target,'price-override-edit'),function(){ $(this).hide(); });
			
			var view=this.targetFind(target,'price-override-view');
			$.each(view,function(){ $(this).hide(); });
			
			var loader=this.targetFind(target,'price-override-loader');
			$.each(loader,function(){ $(this).show(); });
			
			doAjax({
				url: '/cart/priceOverride/',
				type: 'POST',
				data: {
					sku: sku,
					price: newPrice,
					note: note
				},
				complete:function(response){
					
					$.each(loader,function(){ $(this).hide(); });
					$.each(view,function(){ $(this).show(); });
					
					analizeResponse(response,'eval');
					
					if(addMessage) lbMessage(addMessage,{addOk:1});
					
				}
			});
			
			return true;
			
		}
	}
	
}

function cart(){
	if(typeof(cart.cartAPI)=='undefined'){
		cart.cartAPI=new cartAPIObj();
	}
	return cart.cartAPI;
}
/*var cartAPI=false;
function cart(){
	if(cartAPI==false){
		cartAPI=new cartAPIObj();
	}
	return cartAPI;
}*/
