
(function($) {
	
	$.fn.BOSSShopBasket = function(opt) {
		var opt= jQuery.extend({
			Basket:"Basket1",
			AddCardSel:"",
			AttrGoodsId:"rel",
			ButtonSaveNewGoods:"addNewGoods",
			ButtonSaveNewOrder:"MakeOrder",
			positionWND:"center",
			formAddGoodsW:"650px",
			formAddGoodsH:"400",
			formOrderW:800,
			listGoodsW:774,
			listGoodsH:391,
			fullGoodsW:400,
			fullGoodsH:600,
			fullOrderW:400,
			fullOrderH:600,
			confirmDialogW:190,
			confirmDialogH:199,
			cancelClass:"CancelGoods",
			cancelOrderClass:"CancelOrder",
			GoodsIDClass:"GoodsID",
			URLViewHelp:"/BasketHelp",
			ControlViewGoodsList:"ViewGoodsList",
			ControlViewHelp:"openHelp",
			ControlRemoveGoods:"removeGoods",
			ControlOpenOrders:"openOrders",
			ControlOpenOrder:"openOrder",
			ControlOpenGoodsOrder:"buttonOrderGoods",
			ControlSaveShopBasket:"saveShopBasket",
			ControlCloseShopBasketList:"closeShopBasketList",
			ControlAddVirtualBasket:"addVirtualBasket",
			ControlAddVirtualBasketName:"addVirtualBasketName",
			ControlDelVirtualBasket:"BOSSShopBasket-virtual-item",
			ControlListVirtual:"BOSSShopBasket-list-virtual li div",
			ControlOpenHelp:"openHelp",
			ControlScrollVDown:"BOSSShopBasket-down",
			ControlScrollVUp:"BOSSShopBasket-up",
			ControlConfirmYes:"BOSSShopBasket-confirm-yes",
			ControlConfirmNo:"BOSSShopBasket-confirm-no",
			BasketTitle:'Моя корзина',
			ConfirmTitle:'Внимание',
			GoodsFullTitle:'Подробно о товаре',
			OrderFullTitle:'Подробно о заказе'
		},opt);  
		var CurContainerURL;
		var CurContainer='';
		var CurVirtualBasket='';
		var Container;
		var CurVirtualScrollValue="0px";
		var $this = $(this);
		var AfterConfirmAct='';
		var ConfirmAct=false;
		var CurVirtualBasketDel;
		var TMPState;
		var GoodsAddState=false;
		var GoodsBasketAct;
		var CurGoodsID;
		var ShopBasketID=$(this).attr('id');
		
		$.extend($.ui.dialog.overlay, {
			events: $.map(''.split(','),
					function(event) { return event + '.dialog-overlay'; }).join(' ')
		});
		

		function applyControls(obj,opt,Container){
			CurContainer=Container;
			$('#'+ShopBasketID+'_Dialog .'+opt.ButtonSaveNewOrder).unbind('click').bind('click',function(){
				saveOrder();
			});
			$('#'+ShopBasketID+'_Dialog .'+opt.cancelOrderClass).unbind('click').bind('click',function(){
				ViewListGoods();
			});
			$('#'+ShopBasketID+'_Dialog .'+opt.ControlViewHelp).unbind('click').bind('click',function(){
				ViewBasketHelp();
			});
			var IDBasket=obj.attr('id');
			$('#'+ShopBasketID+'_Dialog .'+opt.ControlOpenOrder).unbind('click').bind('click',function(){
				viewFormOrder(opt);
			});
			$('#'+ShopBasketID+'_Dialog .returntoAddForm').unbind('click').bind('click',function(){
				viewFormAddGoods(opt,CurGoodsID);
			});
			$('#'+ShopBasketID+'_Dialog .'+opt.ControlAddVirtualBasket).unbind('click').bind('click',function(){
				addVirtualBasket(Container);
			});
			$('#'+ShopBasketID+'_Dialog .'+opt.ControlOpenOrders).unbind('click').bind('click',function(){
				ViewListOrders();
			});
			$('#'+ShopBasketID+'_Dialog .'+opt.ControlDelVirtualBasket).unbind('click').bind('click',function(){
				delVirtualBasket();
				CurVirtualBasketDel=$(this).attr('rel');
				return false;
			});
			$('#'+ShopBasketID+'_Dialog .'+opt.ButtonSaveNewGoods).unbind('click').bind('click',function(){
				saveFormAddGoods();
			});
			$('#'+ShopBasketID+'_Dialog .'+opt.ControlSaveShopBasket).unbind('click').bind('click',function(){
				saveGoodsBasket();
			});
			$('#'+ShopBasketID+'_Dialog .'+opt.ControlRemoveGoods).unbind('click').bind('click',function(){
				RemoveGoods($('#'+IDBasket+'_'+Container));
			});
			$('#'+ShopBasketID+'_Dialog .ViewGoodsList').unbind('click').bind('click',function(){
				ViewListGoods();
			});
			//$('#'+ShopBasketID+"_Dialog .BOSSShopBasket-list-goods-scroll tr td[class!='noclick']").css('background','red');
			$('#'+ShopBasketID+"_Dialog .BOSSShopBasket-list-goods-scroll tr td[class!='noclick']").unbind('click').click(function() {
				if($(this).parent().find('input[type="checkbox"]').attr('checked')){
					$(this).parent().find('input[type="checkbox"]').attr('checked','');
				}else {
					$(this).parent().find('input[type="checkbox"]').attr('checked','checked');
				}
			});
			$('#'+ShopBasketID+"_Dialog .BOSSShopBasket-list-goods-scroll tr td[class!='noclick']").unbind('dblclick').dblclick(function() {
				if($(this).parent().attr('orderID')>0) openGoodsOrder($(this).parent().attr('orderID'));
				if($(this).parent().attr('url')!='') openGoodsFull($(this).parent().attr('url'));
			});
			$('#'+ShopBasketID+"_Dialog .BOSSShopBasket-list-goods-scroll tr").unbind('mouseover').mouseover(function(){ 
				$(this).addClass("odd");
			});
			$('#'+ShopBasketID+"_Dialog .BOSSShopBasket-list-goods-scroll tr").unbind('mouseout').mouseout(function(){ 
				$(this).removeClass("odd");
			});
			$('#'+ShopBasketID+"_Dialog .BOSSShopBasket-list-virtual td[colspan!='3']").parent().unbind('mouseover').mouseover(function(){ 
				$(this).addClass("odd");
			});
			$('#'+ShopBasketID+"_Dialog .BOSSShopBasket-list-virtual td[colspan!='3']").parent().unbind('mouseout').mouseout(function(){ 
				$(this).removeClass("odd");
			});
			$('#'+ShopBasketID+"_Dialog .BOSSShopBasket-list-virtual .s").unbind('click').click(function() {
				CurVirtualBasket=$(this).find('span').text();
				ViewListGoods();
			});
			if(CurVirtualBasket=='')
				$('#'+ShopBasketID+'_Dialog .BOSSShopBasket-list-virtual table tr:eq(1)').find('input[type="checkbox"]').attr('checked','checked');
		}
		function openGoodsFull(url){
			$("#"+ShopBasketID+"_GoodsDialog").load(url+" #ProductionFull");
			$('#'+ShopBasketID+'_GoodsDialog').dialog('open');
		}
		function preloaderStart() {
			$('#'+ShopBasketID+'_Dialog').fadeTo("fast", 0.33);
		}
		function preloaderEnd(data) {
			$('#'+ShopBasketID+'_Dialog').html(data).fadeTo("fast", 1);
		}
		function saveOrder() {
			 var fields = $('#'+$this.attr('id')+'_Order input').serializeArray();
			 var URL='/order.ShopBasket?BasketName='+opt.Basket;
			 var IDBasket=$this.attr('id');
			 $.post(URL,fields,function(data){
				 reDrawWindow('Order',data);
				 setStatus();
			 });
		}
		
		function ViewBasketHelp(Sel) {
			$.get(opt.URLViewHelp+'?ContentOnly=yes',function(data){
				TMPState=$('.BOSSShopBasket-main-goods').clone();
				$('.BOSSShopBasket-main-goods').remove();
				$(Sel+' .BOSSShopBasket-main').append('<div class="BasketHelpContent" />');
				$(Sel+' .BOSSShopBasket-main').append('<div class="BasketHelpControl" />');
				$(Sel+' .BasketHelpControl').append('<input type="button" class="cancelHelp" value="Назад" />');
				$(Sel+' .BasketHelpContent').append(data);
				var SelBasket=Sel;
				$(Sel+' .cancelHelp').bind('click',function(){
					$(SelBasket+' .BasketHelpContent').remove();
					$(SelBasket+' .BasketHelpControl').remove();
					$(Sel+' .BOSSShopBasket-main').append(TMPState);
				});
			});
		}
		function viewFormOrder(opt) {
			var IDBasket=$this.attr('id');
			var URL='/order.ShopBasket?BasketName='+opt.Basket;
			$.get(URL,function(data){
				$('#'+ShopBasketID+'_Dialog').empty();
				$('#'+ShopBasketID+'_Dialog').html(data);
				$('#'+ShopBasketID+'_Dialog').dialog('open');
				applyControls($this,opt,'Order');
			});
		}
		function openGoodsOrder(id){
			URL='/ordersGoods.ShopBasket?BasketName='+opt.Basket+'&ID='+id;
			var IDBasket=$this.attr('id');
			$.get(URL,function(data){
				$('#'+ShopBasketID+'_OrderDialog').empty();
				$('#'+ShopBasketID+'_OrderDialog').html(data);
				$('#'+ShopBasketID+'_OrderDialog').dialog('open');
			});
		}
		function ViewListOrders() {
			CurContainerURL='/ordersHistory.ShopBasket?BasketName='+opt.Basket;
			var IDBasket=$this.attr('id');
			$.get(CurContainerURL,function(data){
				$('#'+ShopBasketID+'_Dialog').empty();
				$('#'+ShopBasketID+'_Dialog').html(data);
				applyControls($this,opt,'Orders');
			});
		}
		function saveRemoveGoods() {
			 var fields = $('#'+ShopBasketID+'_Dialog input').serializeArray();
			 var URL='/del.ShopBasket?BasketName='+opt.Basket;
			 var IDBasket=$this.attr('id');
			 $.post(URL,fields,function(data){
				 RemoveWindow('#Basket1_ConfirmDialog');
				 $.get(CurContainerURL,function(data){
						reDrawWindow('listGoods',data);
						setStatus();
				});
			 });
		}
		function RemoveGoods(obj){
			var URL='/del.ShopBasket?BasketName='+opt.Basket;
			var funct='saveRemoveGoods'; 
			ConfirmDialog(URL,funct);
		}
		function saveGoodsBasket() {
			 var fields = $('#Basket1_Dialog :input').serializeArray();
			 var URL='/edit.ShopBasket?BasketName='+opt.Basket;
			 $.post(URL,fields,function(data){
				 $.get(CurContainerURL,function(data){
						reDrawWindow('listGoods',data);
						setStatus();
					});
			 });
		}
		function urlencode (str) {
			str = (str+'').toString();
		    return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
		                                                                    replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
		}
		function ViewListGoods() {
			CurContainerURL='/list.ShopBasket?BasketName='+opt.Basket+'&VBasket='+urlencode (CurVirtualBasket);
			var IDBasket=$this.attr('id');
			$.get(CurContainerURL,function(data){
				buildContainer(opt.listGoodsW,opt.listGoodsH,data);
				if(GoodsAddState)
					$('#'+ShopBasketID+'_Dialog .BOSSShopBasket-manage-controls').prepend('<input type="button" style="width:170px;margin-bottom:3px;" class="returntoAddForm" value="Вернуться к добавлению"><br>');
				if(CurVirtualBasket!='')
				$('#'+ShopBasketID+'_Dialog .BOSSShopBasket-list-virtual td.s span:contains("'+CurVirtualBasket+'")').parent().parent().find('input[type="checkbox"]').attr('checked','checked');
				applyControls($this,opt,'listGoods');
				
			});
		}
		function setStatus(state){
			$(opt.StatusContainer).empty();
			if(state!=undefined) {
				$(opt.StatusContainer).html(state);
				$(opt.StatusContainer+' .ViewGoodsList').bind('click',function(){
					ViewListGoods()
				});
			}else{
				$.get('status.ShopBasket?BasketName='+opt.Basket,function(data){
					$(opt.StatusContainer).html(data);
					$(opt.StatusContainer+' .ViewGoodsList').bind('click',function(){
						ViewListGoods()
					});
				});
			}
		}
		function RemoveWindow(wnd) {
			$(wnd).empty();
			$(wnd).dialog('close');
		}
		function saveFormAddGoods() {
			 var fields = $('#'+ShopBasketID+'_Dialog input').serializeArray();
			 var URL='/add.ShopBasket?BasketName='+opt.Basket;
			 var IDBasket=$this.attr('id');
			 $.post(URL,fields,function(data){
				 setStatus();
				 RemoveWindow('#'+ShopBasketID+'_Dialog');
			 });
		}
		function saveDelVirtualBasketGoods(){
			var URL='/delVirtual.ShopBasket?BasketName='+opt.Basket;
			var IDBasket=$this.attr('id');
			$.post(URL,{VBasketID:CurVirtualBasketDel},function(data){
				$.get(CurContainerURL,function(data){
					reDrawWindow('listGoods',data);
				});
			});
		} 
		function ConfirmDialogAskYes(){
			eval(AfterConfirmAct+'();');
			AfterConfirmAct='';
			ConfirmAct=false;
		}
		function ConfirmDialog(URL,funct){
			AfterConfirmAct=funct;
			var IDBasket=$this.attr('id');
			$.get(URL,function(data){
				$('#'+ShopBasketID+'_ConfirmDialog').empty();
				$('#'+ShopBasketID+'_ConfirmDialog').html(data);
				$('.'+opt.ControlConfirmYes).bind('click',function(){
					$('#'+ShopBasketID+'_ConfirmDialog').dialog('close');
					ConfirmAct=true;
					ConfirmDialogAskYes();
				});
				$('.'+opt.ControlConfirmNo).bind('click',function(){
					$('#'+ShopBasketID+'_ConfirmDialog').dialog('close');
				});
				$('#'+ShopBasketID+'_ConfirmDialog').dialog('open');
			});
		}
		function delVirtualBasket(){
			var URL='/delVirtual.ShopBasket?BasketName='+opt.Basket;
			var funct='saveDelVirtualBasketGoods'; 
			ConfirmDialog(URL,funct);
		}
		function addVirtualBasket(Container){
			var IDBasket=$this.attr('id');
			var obj=$this;
			var URL='addVirtual.ShopBasket?BasketName='+opt.Basket;
			$.post(URL,{NameVirtual:$('.'+opt.ControlAddVirtualBasketName).val()},function(data){
				$('#'+ShopBasketID+'_Dialog .BOSSShopBasket-list-virtual table').append('<tr><td class="f"><input type="checkbox" /></td><td class="s"><span>'+$('#'+IDBasket+'_'+Container+' .'+opt.ControlAddVirtualBasketName).val()+'</span> 0 руб.</td><td class="l"> <a href="#" class="BOSSShopBasket-virtual-item" rel="'+$('#'+IDBasket+'_'+Container+' .'+opt.ControlAddVirtualBasketName).val()+'"><img src="/images/system/ExternalModules/ShopBasket/del_basket.gif" alt="Удалить" height="16" width="16" /></a></td></tr>');
				$.get(CurContainerURL,function(data){
					reDrawWindow(Container,data);
				});
			});
		}
		function reDrawWindow(Container,Data) {
			var IDBasket=$this.attr('id');
			$('#'+ShopBasketID+'_Dialog').empty();
			$('#'+ShopBasketID+'_Dialog').html(Data);
			applyControls($this,opt,Container);
		}
		function addVirtualBasket(Container){
			var IDBasket=$this.attr('id');
			var obj=$this;
			var URL='addVirtual.ShopBasket?BasketName='+opt.Basket;
			$.post(URL,{NameVirtual:$('.'+opt.ControlAddVirtualBasketName).val()},function(data){
				$('#'+ShopBasketID+'_Dialog .BOSSShopBasket-list-virtual ul').append('<li><input type="checkbox" /><span>'+$('#'+IDBasket+'_'+Container+' .'+opt.ControlAddVirtualBasketName).val()+'</span> 0 руб. <a href="#" class="BOSSShopBasket-virtual-item" rel="'+$('#'+IDBasket+'_'+Container+' .'+opt.ControlAddVirtualBasketName).val()+'"><img src="/images/system/ExternalModules/ShopBasket/del_basket.gif" alt="Удалить" height="16" width="16" /></a></li>');
				$.get(CurContainerURL,function(data){
					reDrawWindow(Container,data);
				});
			});
		}
		function buildContainer(w,h,data){
			$('#'+ShopBasketID+'_Dialog').empty();
			$('#'+ShopBasketID+'_Dialog').unbind('ready').ready(function(){
				$('#'+ShopBasketID+'_Dialog').html(data);
				$('#'+ShopBasketID+'_Dialog').dialog('open');
				//if($.browser.msie){
					//$('#'+ShopBasketID+'_Dialog').css('top',(parseInt($('#'+ShopBasketID+'_Dialog').css('top'))-100));
					$('#'+ShopBasketID+'_Dialog').dialog('option','height',opt.listGoodsH);
					$('#'+ShopBasketID+'_Dialog').dialog('option','width',opt.listGoodsW);
			//	}
			});
		}
		function viewFormAddGoods(opt,id) {
			var IDBasket=$this.attr('id');
			CurGoodsID=id;
			CurContainerURL='/add.ShopBasket?BasketName='+opt.Basket+'&GoodsID='+id;
			$.get(CurContainerURL,function(data){
				GoodsBasketAct='AddGoods';
				buildContainer(opt.formAddGoodsW,opt.formAddGoodsH,data);
				applyControls($this,opt,'addGoods');
				$('#'+ShopBasketID+'_Dialog .'+opt.GoodsIDClass).val(id);
				GoodsAddState=true;
			});
		}
		function Init(opt){
			setStatus();
			$('body').append('<link type="text/css" rel="stylesheet" href="/css/jquery.BOSSShopBasket.css" />');
			$('body').append('<div id="'+ShopBasketID+'_Dialog" style="display:none;"></div>');
			$('body').append('<div id="'+ShopBasketID+'_ConfirmDialog" style="display:none;"></div>');
			$('body').append('<div id="'+ShopBasketID+'_GoodsDialog" style="display:none;overflow-y:scroll;"></div>');
			$('body').append('<div id="'+ShopBasketID+'_OrderDialog" style="display:none;overflow-y:scroll;"></div>');
			$(opt.AddCardSel).bind('click',function(){ viewFormAddGoods(opt,$(this).attr('rel')); });
			$('#'+ShopBasketID+'_Dialog').dialog({'modal': true,'autoOpen': false,'width':opt.listGoodsW,'height':opt.listGoodsH,'title':opt.BasketTitle, close: function(event, ui) { GoodsAddState=false; } });
			//$('#'+ShopBasketID+'_Dialog').dialog({'modal': true,'autoOpen': false,'width':opt.listGoodsW,'height':opt.listGoodsH,'title':opt.BasketTitle, close: function(event, ui) { GoodsAddState=false; } });
			//$('#'+ShopBasketID+'_Dialog').dialog('option','height',opt.listGoodsH);
			//$('#'+ShopBasketID+'_Dialog').dialog('option','width',opt.listGoodsW);
			$('#'+ShopBasketID+'_ConfirmDialog').dialog({zIndex: 91000,modal: true,autoOpen: false,title:opt.ConfirmTitle, height:opt.confirmDialogH,width:opt.confirmDialogW });
			$('#'+ShopBasketID+'_GoodsDialog').dialog({zIndex: 91000,modal: true,autoOpen: false,title:opt.GoodsFullTitle,height:opt.fullGoodsH,width:opt.fullGoodsW ,close:function(){
				var html1=$('#'+ShopBasketID+'_Dialog').html();
				$('#'+ShopBasketID+'_Dialog').empty();
				$('#'+ShopBasketID+'_Dialog').html(html1);
				applyControls($this,opt,'Orders');
				
			}});
			$('#'+ShopBasketID+'_OrderDialog').dialog({zIndex: 91000,modal: true,autoOpen: false,title:opt.OrderFullTitle,height:opt.fullOrderH,width:opt.fullOrderW });
		}
		Init(opt);
		return this;
		
	};
})(jQuery);
