/**
 * @author michal.blaha@syntacticsugar.com
 */
function Container(o){
	var cont_bar = o.cont_bar;
	var container = o.container;
	var frameCollection = new FrameCollection({
		cid: container.cid,
		bookmark_view: container.bookmark_view ? true : false,
		tabs_bar: o.tabs_bar,
		book_bar: o.book_bar,
		rebuildFrameList: rebuildFrameList
	});
	var isActive = false;
	var bookmark_view_before_save = container.bookmark_view ? true : false;
	var changed = false;
	
	var me = this;
	
	this.cid = container.cid;
	this.name = container.text;
	this.is_private = container.is_private ? true : false;
	this.bookmark_view = container.bookmark_view ? true : false;
	this.frame_list = o.container.frame_list;
	this.frameCollection = frameCollection;
	
	var menu = new Ext.menu.Menu({
		id: 'menu_' + me.cid
	});
	
	menu.add({
		text: msg.rename,
		cid: me.cid,
		iconCls: 'ico-edit',
		handler: onRenameClick
	});
	
	if (container.deletable) {
		menu.add({
			text: msg.del,
			cid: me.cid,
			iconCls: 'ico-delete',
			handler: onDeleteClick
		});
	}
	
	menu.add('-');
	
	if (container.is_my) {
		menu.add({
			text: msg.priv,
			cid: me.cid,
			checked: container.is_private ? true : false,
			checkHandler: onPrivateCheck
		});
	}
	
	menu.add({
		text: msg.thumbnailView,
		cid: me.cid,
		checked: container.bookmark_view ? true : false,
		checkHandler: onBookmarkCheck
	});
	
	var button = new Ext.Toolbar.SplitButton({
		text:me.name,
		cid: me.cid,
		iconCls: me.bookmark_view ? 'ico_book' : 'ico_win',
		handler: onSwitchClick,
		menu: menu
	});
	
	var frame_list_menu = new Ext.menu.Menu({
		hidden: true,
		maxHeight: 312,
		enableScrolling: true,
		autoScroll: true,
		showable: true,
		hideable: true
	});
	fillFrameListMenu(me.frame_list);
	
	button.on('mouseover', function(){
		if (me.frame_list.length == 0) {
			return;
		}
		
		var buttonEl = this;
		frame_list_menu.showable = true;
		frame_list_menu.hideable = false;
		
		setTimeout(function(){
			if (frame_list_menu.showable) {
				frame_list_menu.show(Ext.getBody());
				var position = buttonEl.getPosition();
				var size = buttonEl.getSize();
				
				var left = position[0];
				var max_left = Ext.getBody().getWidth() - frame_list_menu.getWidth();
				frame_list_menu.setPosition(Math.min(left, max_left), position[1] + size.height - 1);
				
				frame_list_menu.el.on('mouseover', function(){
					frame_list_menu.hideable = false;
				});
				
				frame_list_menu.el.on('mouseout', function(){
					frame_list_menu.hideable = true;
					
					setTimeout(function(){
						if (frame_list_menu.hideable) {
							frame_list_menu.hide();
						}
					}, 100);
				});
				
			}
		}, 300);
	});
	
	button.on('mouseout', function(){
		frame_list_menu.showable = false;
		frame_list_menu.hideable = true;
		
		setTimeout(function(){
			if (frame_list_menu.hideable) {
				frame_list_menu.hide();
			}
		}, 100);
	});
	
	button.on('menushow', function(){
		frame_list_menu.showable = false;
	});
	
	cont_bar.add(button);
	cont_bar.doLayout();
	
	var dd = Ext.get(button.el.dom.parentNode);
	dd.dd = new Ext.ux.ddButton(button.el.dom.parentNode, 'buttons');
	dd.dd.parentId = me.cid;
	dd.addClass('dd-dragable');
	
	function onSwitchClick(){
		o.switchContainer(me, this.fid);
	}
	
	function onRenameClick(){
		var name = prompt(msg.renameAppel, me.name);
		if (name != null) {
			me.name = name;
			button.setText(name);
			cont_bar.doLayout();
			sendContainerInfo();
		}
	}
	
	function onDeleteClick(){
		Ext.Ajax.request({
			url: HOME_URL + CONT_DEL,
			params: {
				cid: me.cid,
				uid: USER_ID
			},
			method: 'GET',
			success: function(result, request){
				o.deleteContainer(me);
			},
			failure: function(result, request){
			// chyba pri mazani
			}
		});
	}
	
	function onPrivateCheck(item, checked){
		me.is_private = checked;
		sendContainerInfo();
	}
	
	function onBookmarkCheck(item, checked){
		me.bookmark_view = checked;
		frameCollection.setBookmarkView(checked);
		// o.tabs_bar.show();
		if (isActive) {
			setSaveText();
		}
		
		button.setIconClass(checked ? 'ico_book' : 'ico_win');
		
		if (checked) {
			layout.tabs_bar.hide();
			layout.desktopResize();
		}
		else {
			layout.tabs_bar.show();
			layout.desktopResize();
		}
		
		/*
		 * informaci o prepnuti na okna odeslat se zpozdenim
		 * aby nedoslo k ulozeni stranky, ktera prepisuje url
		 */
		if (checked) {
			sendBookmarkView();
		}
		else if (isActive) {
			setTimeout(function(){
				sendBookmarkView()
			}, 20000);
		}
	}
	
	function sendBookmarkView(){
		if (bookmark_view_before_save != me.bookmark_view) {
			sendContainerInfo();
		}
	}
	
	function sendContainerInfo() {
		Ext.Ajax.request({
			url: HOME_URL + CONT_UPDATE,
			params: {
				uid: USER_ID,
				cid: me.cid,
				name: me.name,
				is_private: me.is_private,
				bookmark_view: me.bookmark_view
			},
			method: 'GET',
			success: function(){
				bookmark_view_before_save = me.bookmark_view;
			}
		});
	}

	function setSaveText(){
		var save_title;
		switch (parseInt(container.save_type)) {
			case 1:
				// cizi kontejner pridat ke svemu uctu
				save_title = msg.save1;
				layout.save_btn.setText('<strong>' + save_title + '</strong>');
				layout.save_btn.setIconClass('ico-add');
				layout.save_btn.show();
				layout.save_btn.enable();
				break;
			case 2:
				layout.save_btn.hide();
				break;

				save_title = msg.save2;
				if (!me.bookmark_view) {
					layout.save_btn.setText('<strong>' + save_title + '</strong>');
					layout.save_btn.setIconClass('ico-pin');
					layout.save_btn.show();
					changed ? layout.save_btn.enable() : layout.save_btn.disable();
				}
				else {
					layout.save_btn.hide();
				}
				break;
			case 3:
				layout.save_btn.hide();
				break;

				save_title = msg.save3;
				if (!me.bookmark_view) {
					layout.save_btn.setText('<strong>' + save_title + '</strong>');
					layout.save_btn.setIconClass('ico-pin');
					layout.save_btn.show();
					changed ? layout.save_btn.enable() : layout.save_btn.disable();
				}
				else {
					layout.save_btn.hide();
				}
				break;
			case 4:
				save_title = msg.save4;
				layout.save_btn.hide();
				break;
		}
	}
	
	function rebuildFrameList(){
		me.frame_list = new Array;
		for (var i = 0; i < frameCollection.frames.length; i++) {
			me.frame_list.push({
				id: frameCollection.frames[i].id,
				title: frameCollection.frames[i].title,
				icon: frameCollection.frames[i].icon
			});
		}
		fillFrameListMenu(me.frame_list);
	}
	
	function fillFrameListMenu(frame_list){
		frame_list_menu.removeAll(true);
		for (var i = 0; i < frame_list.length; i++) {
			frame_list_menu.addItem(new Ext.menu.Item({
				fid: frame_list[i].id,
				text: textTrim(frame_list[i].title, 30),
				icon: frame_list[i].icon,
				handler: onSwitchClick,
				style: 'overflow: hidden'
			}))
		}
	}
	
	function textTrim(text, len){
		// odstranit http:// a pod
		text = text.replace(/^.*\/{2}/, '');
		// odstranit www.
		text = text.replace(/^www\./, '');
		// odstranit parametry za otaznikem
		text = text.replace(/\?.*$/, '');
		// odstranit koncove lomitko
		text = text.replace(/\/*$/, '');
		
		// "w" je prilis siroke, proto je potreba zkratit retezec
		var pos = text.search(/www/);
		if (pos > -1) {
			len -= 2;
		}
		
		if (len > 0 && text.length > len) {
			// zkratit
			text = text.substring(len - 1, 0);
			// odstranit pripadnou tecku na konci
			text = text.replace(/\.$/, '');
			text += '\u2026';
		}
		
		return text;
	}
	
	/**
	 * Aktivovat kontejner
	 *
	 * oznacit tlacitko jako stisknute
	 * nacist a zobrazit okna
	 *
	 * @param {int} frame_id - co maximalizovat
	 */
	this.activate = function(frame_id){
		isActive = true;
		button.toggle(true);
		
		// zobrazit scrollbary (muzou zustat skryte po prepnuti z maximalizovaneho okna)
		Ext.get('desktop').removeClass('no-scroll');
		
		// aktivovat sadu oken
		frameCollection.activate(frame_id);
		setSaveText();
		
		// pro bookmarky skryt tabs_bar		
		if (me.bookmark_view) {
			layout.tabs_bar.hide();
			layout.desktopResize();
		}
		else {
			layout.tabs_bar.show();
			layout.desktopResize();
		}
		
		// pokud byl zmemen bookmark view odeslat zmeny
		if (bookmark_view_before_save != me.bookmark_view) {
			setTimeout(function(){
				sendBookmarkView()
			}, 20000);
		}
	}
	
	/**
	 * Deaktivovat kontejner
	 *
	 * zrusit stisknuti tlacitka
	 * odeslat na server informace o oknech
	 * skryt okna
	 */
	this.deactivate = function(){
		changed = layout.save_btn.disabled ? false : true;
		isActive = false;
		button.toggle(false);
		frameCollection.deactivate();
	}
	
	/**
	 * Pridat nove okno do kontejneru
	 *
	 * @param {string} url
	 * @param {bool} maximize
	 */
	this.addFrame = function(url, maximize){
		frameCollection.addFrame(url, maximize);
	}
	
	/**
	 * Odeslat na server pozadavek na ulozeni do DB
	 */
	this.save = function(save){
		// odeslat informace o oknech
		frameCollection.send(save);

		if (parseInt(container.save_type) == 1) {
			Ext.infoDilalog.msg(msg.importPanel, msg.importPanelInfo);
		}
	}
	
	/**
	 * Odstranit tlacitko
	 */
	this.destroy = function(){
		cont_bar.remove(button);
	}
}

