COMP.LoadStylesheet('rws_saved_lists');


RWS.SavedLists=
{
	dragging:false
	,savedListArray:[{ 
		key:'TTEMP BASKET'   
		,name:L(23102)
		,text: L(23102)
		,id:'TTEMP BASKET' 
	}]
	,getLexileHtml:function(lexile){
		if(lexile && COMP.Config.GetDefault("showLexileIndicatorSavedLists") && RWS.Patron.current.data.lexile){
			var difference = lexile - RWS.Patron.current.data.lexile;
			var lexileHtml = "<abbr title='"+L(27565)+"'>{1}</abbr>";//ls_This_item_is_1_your
			if(difference > 50) {
				lexileHtml = lexileHtml.replace("{0}", "above");
				lexileHtml = lexileHtml.replace("{1}", "+");
			}
			else if(difference < -150) {
				lexileHtml = lexileHtml.replace("{0}", "below");
				lexileHtml = lexileHtml.replace("{1}", "&ndash;	");
			}
			else{
				lexileHtml = lexileHtml.replace("{0}", "near");
				lexileHtml = lexileHtml.replace("{1}", "=");
			}
			return lexileHtml;
		}
		return "";
	}
	,getLibraryHtml:function(library){
		if(COMP.Config.GetDefault("showAvailAtLocalLibSavedLists")){
			var libraryHtml = "<abbr title='"+L(27566)+"'>{1}</abbr>";//ls_This_item_is_1_at
			if (library) {
				libraryHtml = libraryHtml.replace("{0}", "available");
				libraryHtml = libraryHtml.replace("{1}", "@");
			}
			else{
				libraryHtml = libraryHtml.replace("{0}", "not available");
				libraryHtml = libraryHtml.replace("{1}", "&nbsp;&nbsp;");
			}
			return libraryHtml;
		}
		return "";
	}
	,getLexileWidth:function(){
		 return COMP.Config.GetDefault("showLexileIndicatorSavedLists") ? 10 : 0;
	}
	,getLibraryWidth:function(){
		  return COMP.Config.GetDefault("showAvailAtLocalLibSavedLists") ? 10 : 0;
	}
	,getTitleWidth:function(){
		if(COMP.Config.GetDefault("showAvailAtLocalLibSavedLists") && COMP.Config.GetDefault("showLexileIndicatorSavedLists"))
			return 215
		if(COMP.Config.GetDefault("showAvailAtLocalLibSavedLists") || COMP.Config.GetDefault("showLexileIndicatorSavedLists"))
			return 225
		return 235;
	}
	,tplSingleItemWithDeleteOpt: new Ext.XTemplate (
		'<tpl for=".">',
			'<div>',
				'<div class="slItem">',
					'<table width="263"><tr>',
						'<td width={[this.getLibraryWidth()]} class="font12" style="pointer:default; !important">{[this.getLibraryHtml(values.library)]}</td>',
						'<td width={[this.getLexileWidth()]} class="font12" style="pointer:default; !important">{[this.getLexileHtml(values.lexile)]}</td>',
						'<td width={[this.getTitleWidth()]}>',
							'<span class="font14" onClick="clickedOnSLItem(\'{rsn}\', \'{savedListName}\'); RWS.Controls.TipManager.hideAll();">',
								 '{[COMP.fitStringToWidth(values.title, this.getTitleWidth(), "font14")]}',
							'</span>',   
						'</td>',
						'<td width=18>',
							'<input type="image" src="/images/red_x_16.png" style="padding-top:2; display:none;" onclick="removeItemFromSavedList(\'{listId}\',\'{savedListName}\',\'{rsn}\')"/>',
						'</td>',
					'</tr></table>',
				'</div>', 
			'</div>', 
		'</tpl>'
		,{	
			getLexileHtml:function(lexile){
				return RWS.SavedLists.getLexileHtml(lexile);
			}
			,getLibraryHtml:function(library){
				return RWS.SavedLists.getLibraryHtml(library);
			}
			,getLexileWidth:function(){
				 return RWS.SavedLists.getLexileWidth();
			}
			,getLibraryWidth:function(){
				 return RWS.SavedLists.getLibraryWidth();
			}
			,getTitleWidth:function(){
				 return RWS.SavedLists.getTitleWidth();
			} 
		}
	)
	,tplSingleItem: new Ext.XTemplate (
		'<tpl for=".">',
			'<div>',
				'<div class="slItem">',
					'<table width="283"><tr>',
						'<td width={[this.getLibraryWidth()]} class="font12" style="pointer:default; !important">{[this.getLibraryHtml(values.library)]}</td>',
						'<td width={[this.getLexileWidth()]} class="font12" style="pointer:default; !important">{[this.getLexileHtml(values.lexile)]}</td>',
						'<td width={[this.getTitleWidth()]}>',
							'<span class="font14" onClick="clickedOnSLItem(\'{rsn}\', \'{savedListName}\'); RWS.Controls.TipManager.hideAll();">',
								 '{[COMP.fitStringToWidth(values.title, this.getTitleWidth(), "font14")]}',
							'</span>',   
						'</td>',
					'</tr></table>',
				'</div>', 
			'</div>', 
		'</tpl>'
		,{	
			getLexileHtml:function(lexile){
				return RWS.SavedLists.getLexileHtml(lexile);
			}
			,getLibraryHtml:function(library){
				return RWS.SavedLists.getLibraryHtml(library);
			}
			,getLexileWidth:function(){
				 return RWS.SavedLists.getLexileWidth();
			}
			,getLibraryWidth:function(){
				 return RWS.SavedLists.getLibraryWidth();
			}
			,getTitleWidth:function(){
				 return RWS.SavedLists.getTitleWidth() + 18;
			} 
		}
	)
	,slResultRecord : Ext.data.Record.create([
		{name:'rsn'}
		,{name:'title'}
		,{name:'type'}
		,{name:'savedListName'}
		,{name:'listId'}
		,{name:'library'}
		,{name:'lexile'}
	])
    ,SendRequestForMenu : function (o, listMenu)
    {
		this.curMenu = listMenu;
		o.ticks=COMP.GetCurrentTicks();
        COMP.SendAjaxCommand('rws_request_saved_list_items', o, this.HandleSavedListResults, this);
    }
	,HandleSavedListResults : function (o){
		if(o && o.items && o.items.length > 0 && !this.curMenu.hasItems){
			this.curMenu.recreateTooltip();
			if(typeof(o.items) == 'string')
				o.items = [o.items];
			Ext.each(o.items, function(item){
				this.curMenu.add(item.title, handler, item.rsn);
			}, this);
		}
    }
	,addToListMenu : null
	// Show a list of saved lists to which the current item can be added.
	,ShowAddToListMenu : function(data,buttonID)
	{
		if(!data.length)
			data = [data];
		this.addToListMenu = new Ext.menu.Menu();
		var rsn = new Array();
		for(var i = 0; i < data.length; i ++){
			rsn[i] = data[i].rsn;
		}
		if(rsn.length < 1) rsn[0] = data.rsn;
		for (var i=0; i<RWS.SavedLists.savedListArray.length; i++)
		{
			var item = RWS.SavedLists.savedListArray[i];
			this.addToListMenu.add({
				text: item.name.toString()
				,xtype:'menuitem'
                ,slrsn: rsn
                ,slid: item.id
				,library:item.existsAtPublicLibrary
				,lexile:item.lexile
                ,slctr: i + 1
				,handler: function() {
					for(var i = 0; i < this.slrsn.length; i ++){
						var o = {slName:this.text, itemRSN:this.slrsn[i], slId:this.slid, itemCtr:this.slctr, addItem:'true', ticks: COMP.GetCurrentTicks()};
						var store = Ext.getCmp('savedList_' + this.text).store;
						var handler = function(o){
							store.load(o);
							if(o.failed){
								 var dlg = new RWS.Dialog({buttons:Ext.Msg.OKAY, message:L(27678), width: 300});//ls_This_saved_list_is_full
								dlg.show();
							}
						}
						COMP.SendAjaxCommand('rws_edit_item_in_saved_list',o, handler, this, this.UpdateFailed);
					}          
				}
			});
		}
		
		this.addToListMenu.show(Ext.get(buttonID));
	}
	,ShowLists:function(o){
		var slName, slKey, slCount, slBtn, slLimit;
		var savedListsPanel = Ext.getCmp('savedLists');	
		if(o.savedLists.patron)
		{
			for(var i = 0; i < o.savedLists.patron.length; i++)
			{
				slName = o.savedLists.patron[i].Name;
				slKey = o.savedLists.patron[i].key.toUpperCase();
				slLimit = o.savedLists.patron[i].limit;
				slCount = o.savedLists.patron[i].count;
				slBtn = {name:slName, key:slKey, count:slCount, limit:slLimit, removeable:true};
				InsertSavedList(savedListsPanel,1,slBtn);
			}
		}
		if(o.savedLists.admin)
		{
			for(var i = 0; i < o.savedLists.admin.length; i++)
			{
				slName = o.savedLists.admin[i].Name;
				slKey = o.savedLists.admin[i].key.toUpperCase();
				slLimit = o.savedLists.admin[i].limit;
				slCount = o.savedLists.admin[i].count;
				slBtn = {name:slName, key:slKey, count:slCount, limit:slLimit, removeable:true};
				InsertSavedList(savedListsPanel,1,slBtn);
			}
		}
		if(o.savedLists.defaultList)
		{
			slName = o.savedLists.defaultList.Name;
			slKey = o.savedLists.defaultList.key.toUpperCase();
			slLimit = o.savedLists.defaultList.limit;
			slCount = o.savedLists.defaultList.count;
			slBtn = {name:slName, key:slKey, count:slCount, limit:slLimit};
			InsertSavedList(savedListsPanel,1,slBtn);
		}
	    savedListsPanel.doLayout();
	}
    ,HandleAddSavedList : function()
	{
		var addSLForm = new Ext.FormPanel({
			labelWidth: 100
			,url: '/login/'
			,frame: false
			,border: false
			,defaultType: 'textfield'
			,cls:'rws_login'
			,monitorValid: true
			,defaultButton: 2
			,items: [{
				fieldLabel: L(25784) + ':'// Saved list name
				,labelSeparator: ''
				,id: 'slName'
				,name: 'slName'
				,allowBlank: true
				,listeners: {
					'specialkey': {
						fn: function (f,e) {
							if(e.getKey() == e.ENTER){
								AddSavedList();
							}
						}
						,scope: this
					}
				}
				}]
		});
		var win = new Ext.Window({
			layout: 'fit'
			,width: 300
			,height: 100
			,closable: false
			,resizable: false
			,plain: true
			,id: 'addSavedListWindow'
			,border: false
			,modal: true
			,items:addSLForm
			,bbar: ['->',{
				text: L(5108) //Close
				,handler: function(){Ext.getCmp('addSavedListWindow').close()}
	 		},{	
				text: L(3766) //Add 
				,id: 'addListBtn'
				,handler: function(){
					if (!Ext.getCmp('slName').getValue().replace(/\s/g,'')) return false;
					AddSavedList();
				}
			}]
		});
		
		win.show(); 
		Ext.getCmp('slName').focus(true, 100);
	}
	,AddSavedListSuccessful : function (o)
	{
//		HideWaitDialog();
		Ext.getCmp('addSavedListWindow').close();
		var savedLists = Ext.getCmp('savedLists');
		InsertSavedList(savedLists,2,{name:o.slName, key:o.slKey, count:o.slCount, limit:0, removeable:true});
		savedLists.doLayout();	
	}
    ,DeleteSavedListSuccessful : function (o)
    {
		Ext.getCmp('savedList_' + o.slName).destroy();
		RemoveSavedList(o.slKey);
    }
    ,DeleteSavedListUnsuccessful : function (o)
    {
//		HideWaitDialog(); 
		var dlg = new RWS.Dialog({buttons:Ext.Msg.OKAY, message:o, width: 300})
		dlg.show();
    }
	,AddSavedListFailed : function (o)
	{
//		HideWaitDialog();
		var dlg = new RWS.Dialog({buttons:Ext.Msg.OKAY, message:o, width: 300})
		dlg.show();
	}
	,UpdateFailed: function()
	{
		alert(L(26608)); // Could not add this title to a list because the list already contains the maximum number of items.
	}
	,PrintCurrentSavedList : function(savedList)
	{
		this.curMenu = savedList;
		var o = {
			slName:savedList.name
			,slKey:savedList.key.toUpperCase()
			,tick:COMP.GetCurrentTicks()
		}
		COMP.SendAjaxCommand('rws_request_saved_list_items',o, RWS.SavedLists.PrintItems, RWS.SavedLists , RWS.SavedLists.UpdateFailed);
	}
	,PrintItems:function(o){
		var rsns = [];
		for (var i=0; i<o.items.length; i++)
			rsns.add(o.items[i].rsn);
		COMP.Print.Show(this.curMenu.name,rsns);
	}
	,ShowCurrentSavedListResults : function(savedList)
	{
		this.curMenu = savedList;
		var o = {
			slName:savedList.name
			,slKey:savedList.key.toUpperCase()
			,tick:COMP.GetCurrentTicks()
		}
		COMP.SendAjaxCommand('rws_request_saved_list_items',o, RWS.SavedLists.ShowResults, RWS.SavedLists , RWS.SavedLists.UpdateFailed);
	}
	,ShowResults:function(o){
		var rsns = [];
		for (var i=0; i<o.items.length; i++)
			rsns.add(o.items[i].rsn);
		RWS.Search.SendListRequest(this.curMenu.name, rsns, true);
	}
}
function clickedOnSLItem(rsn, listName){
	if(listName == 'id_PastSearches') RWS.Search.PerformSearch(RWS.Search.searchRequests[rsn.toString()]);
	else COMP.SendAjaxCommand("rws_detail_request", {rsn:rsn}, function(o){RWS.Details.ShowSingleDetails({data:o});});
}
function AddSavedList() 
{
	var slName = Ext.get('slName').dom.value;
	var o={listName:slName, addList:true, ticks:COMP.GetCurrentTicks()};
//	ShowWaitDialog(L(25785) + '...'); // Adding List
	COMP.SendAjaxCommand('rws_saved_list_request',o, RWS.SavedLists.AddSavedListSuccessful, RWS.SavedLists , RWS.SavedLists.AddSavedListFailed);
}
function removeItemFromSavedList(listId, listName, itemRSN)
{
	if(!listId){
		var store = Ext.getCmp(listName).store;
		var index = store.find('rsn', itemRSN);
		store.removeAt(index);
	}
	else{
		var o = {
			itemRSN:itemRSN
			,slName:listName
			,slId:listId
			,deleteItem:'true'
			,tick:COMP.GetCurrentTicks()
		};
		var store = Ext.getCmp('savedList_'+ listName).store;
	    COMP.SendAjaxCommand('rws_edit_item_in_saved_list',o, store.load, store, RWS.SavedLists.UpdateFailed);
		
	}
}

function clearList(listId, listName)
{
	var o = {
		slName:listName
		,slId:listId
		,deleteItem:'true'
		,deleteAll:'true'
		,tick:COMP.GetCurrentTicks()
	};
	var store = Ext.getCmp('savedList_'+ listName).store;
	COMP.SendAjaxCommand('rws_edit_item_in_saved_list',o, store.load, store, RWS.SavedLists.UpdateFailed);
}

function InsertSavedList(panel,index,button)
{
	panel.insert(index, {xtype:'savedlistbtn', text:button.name, name:button.name ,cls:'bluePanel', count:button.count, key:button.key, removeable:button.removeable});
	panel.doLayout();
	if(RWS.SavedLists.savedListArray.length == 0)
		index --;
	RWS.SavedLists.savedListArray.insert(index,{name:button.name,id:button.key, limit:button.limit });
}

function RemoveSavedList(listId)
{
	var newArray = new Array();
	for(var i=0; i<RWS.SavedLists.savedListArray.length; i++)
		if(RWS.SavedLists.savedListArray[i].id != listId)
			newArray.add(RWS.SavedLists.savedListArray[i]);
	
	RWS.SavedLists.savedListArray=newArray;
}

function DeleteSavedList(name, key){
	var dlg = new RWS.Dialog({
		title:L(4653)+' ' + name//Delete
		,msg:L(8632)//Are you sure you want to delete your saved list?
		,buttons: Ext.Msg.YESNO
		,width: 300
		,fn: function(btn, text){
			if(btn == 'yes') {			
	            var o = {listName:name, slKey:key, removeList:'true'};
	            COMP.SendAjaxCommand('rws_saved_list_request',o, RWS.SavedLists.DeleteSavedListSuccessful, RWS.SavedLists, RWS.SavedLists.DeleteSavedListUnsuccessful);
	        }
	 	}
	});
	dlg.show();
}

function initializeListItemDragZone(v) {
    v.dragZone = new Ext.dd.DragZone(v.getEl(), {
        getDragData: function(e) {
			var sourceEl = e.getTarget(v.itemSelector,10);
			if(sourceEl)
			{
				var selNodes = v.getSelectedNodes();
				var dragData = {
					nodes: selNodes
				};
				if(selNodes.length < 2)
				{
					dragData.sourceEl = sourceEl;
                    dragData.ddel = sourceEl.cloneNode(true);
					dragData.single = true;
                    dragData.itemData = v.getRecord(sourceEl).data;
                    dragData.repairXY = Ext.fly(sourceEl).getXY();
				}
				else
				{
					var div = document.createElement('div');
					div.className = 'ddMulti';
 //                   var iData = new Array;
                    var o; 
					dragData.itemData = new Array;
                    for(var i = selNodes.length-1; i >= 0; i--)
					{
						div.appendChild(selNodes[i].cloneNode(true));
						div.appendChild(document.createElement('br'));
                        dragData.itemData[i] = v.getRecord(selNodes[i]).data;
//                        iData[i] = v.getRecord(selNodes[i]).data)
					}
                    dragData.multi = true;
                    dragData.ddel = div;
				}
				return dragData;
			}
        },
        getRepairXY: function(e) {
            if(!this.dragData.multi){
//	            return Ext.Element.fly(this.dragData.ddel).getXY();
                return this.dragData.repairXY;
	        }
	        return false;
        }
		,containerScroll:true
    });
}
function ShowAddSavedList()
{
    RWS.SavedLists.HandleAddSavedList();
}
function initializeSavedListDropZone(elemId)
{
	var savedListDropTargetEl = Ext.get(elemId);
	
    var savedListsDropTarget = new Ext.dd.DropTarget(savedListDropTargetEl, {
		notifyEnter:function(ddSource, e, data){
			RWS.SavedLists.dragging = true;
		}
		,notifyOut:function(ddSource, e, data){
			RWS.SavedLists.dragging = false;
		}
        ,notifyDrop:function(ddSource,e,data){
			var slBtn = Ext.getCmp(this.id)
				
            var name = slBtn.name;
            
			var ctr = data.itemData.length?data.itemData.length:1;
            
			var rsn, library, lexile;
            
            if (data.multi == true)
            {
                
                for(var i = 1; i <= ctr; i++)
                {
                    if (i == 1){
                        rsn = data.itemData[i-1].rsn;
                        library = data.itemData[i-1].existsAtPublicLibrary;
                        lexile = data.itemData[i-1].lexile;
					}
                    else{
                        rsn += "_" + data.itemData[i-1].rsn;
                        library += "_" + data.itemData[i-1].existsAtPublicLibrary;
                        lexile += "_" + data.itemData[i-1].lexile;
					}
                }
                
            }
            else{
				rsn = data.itemData.rsn;
				library = data.itemData.existsAtPublicLibrary;
				lexile = data.itemData.lexile;
}

            var o = {
				slName:name.toString()
				,itemRSN:rsn
				,slId:slBtn.key
				,itemCtr:ctr
				,library:library
				,lexile:lexile
				,addItem:'true'
				,ticks:COMP.GetCurrentTicks()
			};
			var store = Ext.getCmp('savedList_' + name.toString()).store;
			var handler = function(o){
				store.load(o);
				if(o.failed){
					 var dlg = new RWS.Dialog({buttons:Ext.Msg.OKAY, message:L(27678), width: 300});//ls_This_saved_list_is_full
					dlg.show();
				}
			}
            COMP.SendAjaxCommand('rws_edit_item_in_saved_list',o, handler, this, RWS.SavedLists.UpdateFailed);
            
        }
	});
}
if (window.COMP) COMP.Broadcast('scriptLoaded_rws_saved_lists');