/**
 * @author michal.blaha@syntacticsugar.com
 */
function ContainerCollection(o){
	var cont_bar = o.cont_bar;
	var tabs_bar = o.tabs_bar;
	var book_bar = o.book_bar;
	var containers = new Array;
	var activeContainer = null;
	
	this.containers = containers;
	
	Ext.onReady(function(){
		cont_bar.add({
			text: msg.newPanel,
			iconCls: 'ico-add',
			handler: onNewContainerClick
		}, '-');
		cont_bar.doLayout();
		
		loadContainers();
	})
	
	function loadContainers(){
	
		Ext.Ajax.request({
			url: HOME_URL + CONT_CONT_LIST,
			params: {
				uid: USER_ID
			},
			method: 'GET',
			success: function(result, request){
				var data = result.responseXML;
				$(data).find('containers_el').each(function(){
					var frame_list = new Array;
					$(this).find('pages_el').each(function(){
						frame_list.push({
							id: $(this).find('frame_id').text(),
							title: $(this).find('title').text(),
							icon: $(this).find('icon').text()
						});
					})
					addContainer({
						cid: $(this).find('id').text(),
						save_type: $(this).find('save_type').text(),
						text: $(this).find('name').text(),
						deletable: $(this).find('deletable').text() == '1' ? true : false,
						is_my: $(this).find('is_my').text() == '1' ? true : false,
						is_private: $(this).find('is_private').text() == '1' ? true : false,
						autosave: $(this).find('autosave').text() == 'true' ? 1 : false,
						bookmark_view: $(this).find('bookmark_view').text() == '1' ? true : false,
						frame_list: frame_list
					});
				});
				
				var i = getContainerIndex($(data).find('active_container').text());
				switchContainer(containers[i]);
			},
			failure: function(result, request){
			}
		});
	}
	
	/**
	 * Vytvorit novy kontejner a prepnout a nej
	 */
	function onNewContainerClick(){
		var tabName = layout.tool_bar.items.first().getValue();
		if (tabName == '') {
			tabName = prompt(msg.newPanelAppeal, '');
		}
		else {
			layout.tool_bar.items.first().setValue();
		}
		
		if (tabName != null) {
			Ext.Ajax.request({
				url: HOME_URL + CONT_NEW,
				params: {
					uid: USER_ID,
					cont_name: tabName
				},
				method: 'GET',
				success: function(result, request){
					var data = result.responseXML;
					addContainer({
						cid: Ext.DomQuery.selectValue('id', data),
						save_type: Ext.DomQuery.selectValue('save_type', data),
						text: Ext.DomQuery.selectValue('name', data),
						deletable: Ext.DomQuery.selectValue('deletable', data),
						is_my: Ext.DomQuery.selectValue('is_my', data),
						is_private: Ext.DomQuery.selectValue('is_private', data),
						autosave: Ext.DomQuery.selectValue('autosave', data),
						bookmark_view: Ext.DomQuery.selectValue('bookmark_view', data),
						frame_list: new Array
					});
					
					var i = getContainerIndex(Ext.DomQuery.selectValue('id', data));
					switchContainer(containers[i]);
				},
				failure: function(result, request){
					// chyba pri vytvareni noveho kontejneru
				}
			});
		}
		
	}
	
	/**
	 * Pridat kontejner
	 * @param {Object} o
	 */
	function addContainer(o){
		var container = new Container({
			container: o,
			position: containers.length,
			cont_bar: cont_bar,
			tabs_bar: tabs_bar,
			book_bar: book_bar,
			switchContainer: switchContainer,
			deleteContainer: deleteContainer
		});
		containers.push(container);
	}
	
	/**
	 * Prepnout na pozadovany kontejner
	 * @param {Object} container
	 */
	function switchContainer(container, frame_id){
		if (activeContainer != container) {
			if (activeContainer != null) {
				activeContainer.deactivate();
			}
			container.activate(frame_id);
			activeContainer = container;
		}
	}
	
	/**
	 * Odstranit kontejner
	 * @param {Object} container
	 */
	function deleteContainer(container){
		var i = getContainerIndex(container.cid);
		if (activeContainer == container) {
			var switchToIndex = (i == 0 ? i + 1 : i - 1);
			switchContainer(containers[switchToIndex]);
		}
		container.destroy();
		containers.splice(i, 1);
		cont_bar.doLayout();
	}
	
	/**
	 * Vrati index do pole containers pro kontejner s pozadovanym ID
	 * @param {Int} cid
	 */
	function getContainerIndex(cid){
		for (var i = containers.length - 1; i >= 0; i--) {
			if (containers[i].cid == cid) {
				return i;
			}
		}
		return null;
	}
	
	/**
	 * Pridat nove okno do kontejneru
	 *
	 * @param {string} url
	 * @param {bool} maximize
	 */
	this.addFrame = function(url, maximize){
		activeContainer.addFrame(url, maximize);
	}
	
	/**
	 * Pridat nove okno do kontejneru
	 *
	 * @param {string} url
	 * @param {bool} maximize
	 */
	this.save = function(save_to_db){
		activeContainer.save(save_to_db);
	}
}



