/*!
 * Ext JS Library 3.0.0
 * Copyright(c) 2006-2009 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
 
/* 
<!> Include mt_functions.js
*/
function shortName(name){
    if(name.length > 30){
        return name.substr(0, 27) + '...';
    }
    return name;
};
 
Ext.onReady(function(){
	var pid = document.getElementById('mobi-pid').innerHTML;
	var j = 0;
	var i = 0;
	var list = new Object;
	var cx_list = new Object;
	var selObts = '';
	// var offsets = new Array(0,380);
	// var offsets = new Array(0,Ext.get('mobi-mt-results').getY());
	// var delta = offsets[1]-20;
	var delta = Ext.get('mobi-mt-results').getTop()+20;
	var oNb = 0;
	var connUrl='/fileadmin/ressources_mob/mt_results/form_functions.php';
	
	/* Comp automatic scroll */
	//Ext.fly(document).on("scroll", function(e, t, o){	/*	<!> IE Bug	*/
	window.onscroll = function(){
		var topScroll = Ext.getBody().getScroll().top; 
		var bottomScroll = Ext.getCmp('mobi-mt-results-tab-panel').getEl().getTop()+Ext.getCmp('mobi-mt-results-tab-panel').getEl().getHeight();
		if (Ext.getCmp("mobi-mt-results-comp-panel") !== undefined && Ext.getCmp("mobi-mt-results-comp-panel").getEl() !== undefined){
			//console.log('Y: '+delta+' Top: '+topScroll); 
			delta = Ext.get('mobi-mt-results').getTop()+20;
			if (topScroll > delta && topScroll+Ext.getCmp('mobi-mt-results-comp-panel').getEl().getHeight()+54<bottomScroll){ 
				Ext.getCmp("mobi-mt-results-comp-panel").getEl().setTop(topScroll-delta);
			} else if(topScroll > delta){
				Ext.getCmp("mobi-mt-results-comp-panel").getEl().setTop(Ext.getCmp('mobi-mt-results-tab-panel').getEl().getHeight()-75-Ext.getCmp('mobi-mt-results-comp-panel').getEl().getHeight());
			}else{
				Ext.getCmp("mobi-mt-results-comp-panel").getEl().setTop(0);
			} 
		}
	};
	
	var lang_close = 'Fermer la fênetre';
	var lang_param = 'Paramétrage';
	var lang_save = 'Enregistrer';
	var lang_submit = 'Chercher';
	var lang_info_submit_ok = 'Les informations ont été enregistrées.';
	var lang_server_unreachable = 'Le serveur n\'as pas pu être contacté.';
	var lang_tab1 = 'Liste';
	var lang_tab2 = 'Localisation';
	var lang_tab3 = 'Comparateur';
	var lang_selection = 'Votre Sélection';
	var lang_selection_empty = 'Votre Sélection est vide. Veuillez choisir au moins un objet.';
	var lang_no_object_found = 'Aucun objet trouvé';
	var lang_back = 'Retour en arrière';
	var lang_modify_search = 'Modifier la recherche';
	var lang_geo_filter = 'Filtre géographique...';
	var lang_sort_obts = 'Tri...';
	var lang_btn_info = 'En savoir +';
	var lang_btn_cmp = 'Mon carnet';
	var lang_btn_book = 'Réserver';
	
	var lang_server_unreachable = 'Le serveur n\'as pas pu être contacté.';
    var lang_object_added = 'L\'objet a été ajouté à votre carnet de voyage.';
	
	var current_lang = 'fr_FR';
	var idLang = '37';
	var mt_geo = getHashItem('geo');
	var resultsStore = new Ext.data.Store();
	var pageSize = 0;
	
	var navPanel = new Ext.Panel({
		hideLabel: true,
		id: 'mobi-mt-results-nav-panel',
		renderTo: 'mobi-mt-results',
		html:	'<div class="mobi-mt-results-nav-panel-elem mobi-nav-panel-elem-back" onclick="history.go(-1)">'+lang_back+'</div>'
				+'<div class="mobi-mt-results-nav-panel-elem mobi-nav-panel-elem-modify" onclick="history.go(-1)">'+lang_modify_search+'</div>'
	});
	
	var compView = new Ext.DataView({
		id: 'mobi-mt-results-comp-dataview',
		itemSelector: 'div.thumb-wrap',
		style:'overflow:auto',
		multiSelect: true,
		plugins: new Ext.DataView.DragSelector({dragSafe:true}),
		store: new Ext.data.JsonStore({
			proxy: new Ext.data.HttpProxy({method: 'POST', url: connUrl}),
			baseParams :{
				lang: current_lang,
				actionMobi: 'getGalleryImages'
			},
			autoLoad: true,
			root: 'images',
			//id:'name',
			fields:[
				'name', 'url', 'idMobi', 
				{name: 'name', mapping: 'name', convert: shortName}
			]
		}),
		tpl: new Ext.XTemplate(
			'<tpl for=".">',
			'<div class="thumb-wrap" id="{name}">',
			'<div class="thumb"><img src="'+mobiMainPhotoUrl+'{url}" class="thumb-img"></div>',
			'<span>{name}</span></div>',
			'</tpl>'
		),
		listeners: {
			'dblclick': function(dataview, index, node, e){	//TO DO: just for testing...
				dataview.getStore().removeAt(index);
			}
		}
	});
	
	var secpidlabels='';
	var conn = new Ext.data.Connection();
	var responseObject = new Object();
	conn.request({
		url: connUrl,
		method: 'POST',
		params:{
			actionMobi: 'getSecPidAndLabel',
			pid: pid
		},
		success: function(responseObject){
			secpidlabels = Ext.util.JSON.decode(responseObject.responseText);
			if ((typeof(secpidlabels.book) != 'undefined') && (typeof(secpidlabels.book.label) != 'undefined') && (secpidlabels.book.label != '')){
				lang_btn_book = secpidlabels.book.label;
			}
			if ((typeof(secpidlabels.info) != 'undefined') && (typeof(secpidlabels.info.label) != 'undefined') && (secpidlabels.info.label != '')){
				lang_btn_info = secpidlabels.info.label;
			}
			if ((typeof(secpidlabels.cmp) != 'undefined') && (typeof(secpidlabels.cmp.label) != 'undefined') && (secpidlabels.cmp.label != '')){
				lang_btn_cmp = secpidlabels.cmp.label;
			}
		}
	});
	
	
	var compListPanel = new Ext.Panel({
		title: lang_selection,
		id: 'mobi-mt-results-comp-panel',
		renderTo: 'mobi-mt-results',
		items: compView,
		listeners: {
			'render': function(panel){
				offsets = panel.getEl().getOffsetsTo('container');
				delta = offsets[1]-20;
			}
		}
	});
	
	var tabs = new Ext.TabPanel({
		id: 'mobi-mt-results-tab-panel',
	    renderTo: 'mobi-mt-results',
		deferredRender: false,
		plain: true,
	    activeTab: 0,
		autoWidth: false,
		height: document.documentElement.clientHeight,
	    items: [{
	        title: lang_tab1,
			id: 'mobi-mt-results-tab-1',
			contentEl:'mobi-list-tab',
			autoScroll:true
	    },{
	        title: lang_tab2,
			id: 'mobi-mt-results-tab-2',
			contentEl:'mobi-loc-tab',
			autoScroll:true
		},{
	        title: lang_tab3,
			id: 'mobi-mt-results-tab-3',
			contentEl:'mobi-comp-tab',
			autoScroll:true
	    }],
		listeners: {
			"tabchange": function(tabpanel, panel){
			Ext.getCmp("mobi-mt-results-comp-panel").setVisible(true);
			document.getElementById("mobi-mt-results-tab-panel").style.paddingLeft='';
				selObts = '';
			//document.getElementById("mobi-mt-results-tab-panel").style.Width='auto';
				if (panel.getId() == 'mobi-mt-results-tab-2'){	//Map
					//TODO:   window.location.hash = "#map....";
					var compNodes = Ext.getCmp('mobi-mt-results-comp-dataview').getStore().getRange();
					if (compNodes.length == 0){
						Ext.Msg.alert('Info', lang_selection_empty);
					}
					else{
						var i = 0;
						while (i < compNodes.length){
							if(selObts.length > 0){
								selObts += ',';
							}
							selObts += compNodes[i].data.idMobi;
							i++;
						}
							
						if (Ext.getCmp('mobi-loc-tab-panel') !== undefined){
							Ext.getCmp('mobi-loc-tab-panel').destroy();
						}
						
						var mapPanel = new Ext.Panel({ 
							renderTo: 'mobi-loc-tab',
							id: 'mobi-loc-tab-panel',
							items: [
								new Ext.ux.IFrameComponent({ 
									id: 'mobi-loc-tab-panel-map', 
									url: 'http://'+window.location.hostname+
										'/fileadmin/ressources_mob/mt_map/mobimap.php?actionMobi=obts&idLang='+
										idLang+'&idObts='+escape(selObts)+'&pid='+pid
								})
							]
						});
					}
					
				}
				else if (panel.getId() == 'mobi-mt-results-tab-3'){	//Comp
								
					//TODO:   window.location.hash = "#comp....";
					Ext.getCmp("mobi-mt-results-comp-panel").setVisible(false);
					document.getElementById("mobi-mt-results-tab-panel").style.paddingLeft='0';
					document.getElementById("mobi-mt-results-tab-panel").style.width=document.getElementById("mobi-mt-results").offsetWidth;
					
					selObts = '';
					if (Ext.getCmp('mobi-comp-tab-panel') !== undefined){
						Ext.getCmp('mobi-comp-tab-panel').destroy();
					}
					var compPanel = new Ext.Panel({ 
						renderTo: 'mobi-comp-tab',
						id: 'mobi-comp-tab-panel'
					});
						
					//Ext.get('mobi-comp-tab').update('');
					var compNodes = Ext.getCmp('mobi-mt-results-comp-dataview').getStore().getRange();
					if (compNodes.length == 0){
						Ext.Msg.alert('Info', lang_selection_empty);
					}
					else{
						var i = 0;
						var imgPanel = new Ext.Panel({
							id: 'mobi-mt-results-comp-img-panel'
						});
						var imgPanel2 = new Ext.Panel({
							id: 'mobi-mt-results-comp-img-panel-bottom'
						});

						while (i < compNodes.length){
							if(selObts.length > 0){
								selObts += ',';
							}
							selObts += compNodes[i].data.idMobi;
							var imgWrap = new Ext.Panel({
								cls: 'mobi-mt-results-comp-img-wrap',
								overCls: 'hover'
							});
							var imgWrap2 = new Ext.Panel({
								cls: 'mobi-mt-results-comp-img-wrap'
							});
							var tempImgPanel = new Ext.Panel({
								cls: 'mobi-comp-image',
								html: '<img src="http://'+window.location.hostname+'/'+compNodes[i].data.url+'" title="'+compNodes[i].data.name+'">'
							});
							var tempImgPanel2 = new Ext.Panel({
								cls: 'mobi-comp-image',
								html: '<img src="http://'+window.location.hostname+'/'+compNodes[i].data.url+'" title="'+compNodes[i].data.name+'">'
							});
							var tempImgTitlePanel = new Ext.Panel({
								cls: 'mobi-comp-image-title',
								html: '<span>'+compNodes[i].data.name+'</span>'
							});
							var tempImgTitlePanel2 = new Ext.Panel({
								cls: 'mobi-comp-image-title',
								html: '<span>'+compNodes[i].data.name+'</span>'
							});
							
							
							
							var tempFloatMenu = new Ext.Panel({
								cls: 'mobi-comp-float-menu',
								style: 'display: none; width:102px; position:absolute; margin -5px;',
								renderTo : Ext.getBody(),
								items:[{
									xtype: 'button',
									id: 'mt_results_cx_rst_carnet_btn-'+i,
									cls: 'mt_results_cx_rst_carnet_btn',
									text: lang_btn_cmp,
									handler: function(){
										var i = this.getId().substr(this.getId().lastIndexOf('-')+1);
										var doParam = '&do='+gup('do'); 
										var connUrl = 'index.php?eID=tx_mtresults_ajax';
										var conn = new Ext.data.Connection();
										conn.request({
											url: connUrl,
											method: 'POST',
											params :{
												actionMobi: 'addBasketItem',
												idObject: compNodes[i].data.idMobi,
												title: compNodes[i].data.name
											},
											success: function(responseObject) {
												Ext.Msg.alert('Info', lang_object_added);	
											},
											failure:function(){							
												Ext.Msg.alert('ERR', lang_server_unreachable);	
											}
										});
									}
								},{
									xtype: 'button',
									id:'mt_results_cx_rst_reserv_btn-'+i,
									cls: 'mt_results_cx_rst_reserv_btn',
									text: lang_btn_book,
									handler: function(){
										var i = this.getId().substr(this.getId().lastIndexOf('-')+1);
										var pidParam = '&opid='+pid; 
										var doParam = '&do='+gup('do'); 
										var idObjectParam = "&idObject="+compNodes[i].data.idMobi;
										mobiRedirect('index.php?id='+secpidlabels.book.secpid+idObjectParam+doParam+pidParam);
									}
								 },{
									xtype: 'button',
									id: 'mt_results_cx_rst_info_btn-'+i,
									cls: 'mt_results_cx_rst_info_btn',
									text: lang_btn_info,
									handler: function(){
										var i = this.getId().substr(this.getId().lastIndexOf('-')+1);
										var l = window.location+'';
										var old = l.substring(l.indexOf('?')+1);
										var idx = this.getId().substr(this.getId().lastIndexOf('-')+1);
										var idObjectParam = "&idObject="+compNodes[i].data.idMobi+"&obtPos="+idx+"&rpid="+pid;
										mobiRedirect('index.php?id='+secpidlabels.info.secpid+idObjectParam+'&'+old);
									}
								}]
							});
							imgWrap.add(tempImgPanel);
							imgWrap.add(tempImgTitlePanel);
							imgWrap2.add(tempImgPanel2);
							imgWrap2.add(tempImgTitlePanel2);
							imgPanel2.add(imgWrap2);
							imgWrap.add(tempFloatMenu);
							imgPanel.add(imgWrap);
							i++;
						}
						compPanel.add(imgPanel);
						compPanel.add(imgPanel2);
						
						var conn = new Ext.data.Connection();
						var responseObject = new Object();
						conn.request({
							url: connUrl,
							method: 'POST',
							params:{
								actionMobi: 'getModuleListCx',
								pid: pid
							},
							success: function(responseObject){	
								var json = Ext.util.JSON.decode(responseObject.responseText);
								cx_list = json[0];
								
								// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
								// generate the modules
								var j = 0;
								while (j < cx_list.length){
									var module = cx_list[j];
									//console.log(module);
									eval('var '+module+' = new '+module.toUpperCase()+'();'+
										module+'.on(\'finished\', function(panel){'+
											'panel.render(\'mobi-comp-tab-panel\');'+
										'});'
									);
									eval(module+'.create(pid, selObts);');
									j++;
								}
								// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
								
								compPanel.render('mobi-comp-tab');
							}
						});
					}
				}
			}
		}
	});
	
	var connUrl='/fileadmin/ressources_mob/mt_results/form_functions.php';
	var conn = new Ext.data.Connection();
	var responseObject = new Object();
	conn.request({
		url: connUrl,
		method: 'POST',
		params:{
			actionMobi: 'getModuleList',
			pid: pid
		},
		success: function(responseObject){	
			var json = Ext.util.JSON.decode(responseObject.responseText);
			list = json[0];
			pageSize = parseInt(json[1]);
			
			// navPanel.render('mobi-mt-results');
			// compListPanel.render('mobi-mt-results');
			// tabs.render('mobi-mt-results');
			
			
			// create the Data Store
		    resultsStore = new Ext.data.Store({
				proxy: new Ext.data.HttpProxy({
		            url: '/fileadmin/ressources_mob/mt_results/form_functions.php'
		        }),
				method: 'POST',
				baseParams :{
					actionMobi: 'getList',
					url: getUrl(),
					pid: pid,
					geo: mt_geo,
					lang:  current_lang
				},
				reader: new Ext.data.JsonReader({
					root: 'results',
					totalProperty: 'total',
					id: 'id'
					},[
						{name: 'idObject', mapping: 'idObject'},
						{name: 'blocks', mapping: 'blocks'}
					]),
		        remoteSort: true,
				listeners: {
					'load': function(store, records, options){
						setHashItem('start', options.params.start);
						
						if (records.length == 0){
							Ext.Msg.alert('Info', lang_no_object_found);
						}
						
						if (Ext.isIE7){
							document.getElementById('mobi-mt-results-list-panel-c').innerHTML = "";
						}
						else{
							var i = 0;
							while (i < oNb){
								if (Ext.getCmp('mobi-mt-results-elem-panel-'+i)){
									Ext.getCmp('mobi-mt-results-elem-panel-'+i).getEl().setDisplayed(false);
									Ext.getCmp('mobi-mt-results-tab-1').remove(Ext.getCmp('mobi-mt-results-elem-panel-'+i));
								}
								i++;
							}
						}
						
						var i = 0;
						while (i < records.length){
							var elementPanel = null;
							if (Ext.isIE7){
								document.getElementById('mobi-mt-results-list-panel-c').innerHTML += '<div id="mobi-mt-results-elem-panel-'+i+'" class="mobi-mt-results-elem-panel"></div>';
							}
							else{
								elementPanel = new Ext.Panel({
									id: 'mobi-mt-results-elem-panel-'+i,
									cls: 'mobi-mt-results-elem-panel'
								});
							}
				
							// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
							// generate the modules
							var j = 0;
							while (j < list.length){
								var module = list[j];
								eval('var '+module+' = new '+module.toUpperCase()+'();'+
									module+'.on(\'finished\', function(panel){'+
										'if (Ext.isIE7){'+	
											'var ieRender = function(){ panel.render(Ext.get(\'mobi-mt-results-elem-panel-'+i+'\')); };'+
											'ieRender.defer(200);'+
										'}'+
										'else{'+
											'elementPanel.add(panel);'+
											'listPanel.add(elementPanel);'+
										'}'+					
									'});'
								);
								var value = null;
								if (eval('records[i].get(\'blocks\').'+module) !== undefined){
									value = eval('records[i].get(\'blocks\').'+module+'.value');
								}
								eval(module+'.create(pid, '+i+', \''+(typeof(value) == "string"?value.replace(/[\n\r\t]/g):value)+'\');');
								
								j++;
							}
							// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
							i++;
						}
						oNb = records.length;
						listPanel.render('mobi-list-tab');
						
						
						var i = 0;
						while (i < records.length){	
							if (Ext.getCmp('mobi-mt-results-elem-panel-'+i) !== undefined){
								Ext.getCmp('mobi-mt-results-elem-panel-'+i).getEl().setDisplayed(true);
							}
							if (Ext.isIE7){
								var imageDZCreate = function(i){
									Ext.getCmp('mobi-imgdrag-'+i).on("render", function(){
										var dragZone = new ImageDragZone(Ext.getCmp('mobi-imgdrag-'+i), {containerScroll:true,
											ddGroup: 'compDDGroup'});
									});
								}
								imageDZCreate(i);
							}
							else{
								var dragZone = new ImageDragZone(Ext.getCmp('mobi-imgdrag-'+i), {containerScroll:true,
									ddGroup: 'compDDGroup'});
							}
							i++;
						}
					}
				}
		    });
			
			//TODO: use a connection to gather this info...
			var getSort = gup('sort');
			var getDir = gup('dir');
		    resultsStore.setDefaultSort((getSort.length==0?'title':getSort), (getDir.length==0?'asc':getDir));
			
			
			var dropZone = new MobiDropZone(compView, {containerScroll:true,
				ddGroup: 'compDDGroup'});
			
			var listPanel = new Ext.Panel({
				renderTo: 'mobi-list-tab',
				id: 'mobi-mt-results-list-panel',
				autoScroll: true,
				height: Ext.getCmp('mobi-mt-results-tab-1').getHeight(),
				bbar: new Ext.PagingToolbar({
		            pageSize: pageSize,
		            store: resultsStore,
		            displayInfo: true,
		            displayMsg: 'Résultats : {0} - {1} / {2}',
		            emptyMsg: lang_no_object_found
				}),
				tbar: new Ext.PagingToolbar({
		            pageSize: pageSize,
		            store: resultsStore,
		            displayInfo: true,
		            displayMsg: 'Resultats : {0} - {1} / {2}',
		            emptyMsg: lang_no_object_found,
					
					 items: [
						// {xtype: 'combo',
						// store: new Ext.data.Store({
								// proxy: new Ext.data.HttpProxy({url:'/fileadmin/ressources_mob/mt_results/form_functions.php'}),
								// method: 'POST',
								// baseParams :{
									// actionMobi: 'getAssocPGA',
									// pid: pid,
									// node: 'root',
									// lang: current_lang
								// },
								// reader: new Ext.data.JsonReader({
									// id: 'idMobi'
									// },[
										// {name: 'text', mapping: 'text'},
										// {name: 'idMobi', mapping: 'idMobi'}
									// ]
								// ),
								// remoteSort: false
							// }),
						// id: 'mobi-mt-results-geo-filter',
						// name: 'mobi-mt-results-geo-filter-combo',
						// hiddenName: 'mobi-mt-results-geo-filter-combo_hidden',						
						// displayField: 'text',
						// valueField: 'idMobi',
						// typeAhead: true,
						// forceSelection: true,
						// mode: 'remote',
						// triggerAction: 'all',
						// emptyText: lang_geo_filter,
						// selectOnFocus: true,
						// listWidth: 133,	//deferredRender bug
						// width: 150,
						// listeners: {
							// "select": function(combo, record, index){
								// setHashItem('geo', record.id);
								// resultsStore.load({params:{start:0, limit:pageSize, geo: record.id}});
							// }
						// }
					//},
					{
						xtype: 'combo',
						store: new Ext.data.Store({
								proxy: new Ext.data.HttpProxy({url:'/fileadmin/ressources_mob/mt_results/form_functions.php'}),
								method: 'POST',
								baseParams :{
									actionMobi: 'getFeFilter',
									pid: pid,
									node: 'root',
									lang: current_lang
								},
								reader: new Ext.data.JsonReader({
									id: 'idMobi'
									},[
										{name: 'text', mapping: 'text'},
										{name: 'idMobi', mapping: 'idMobi'}
									]
								),
								remoteSort: false
							}),
						id: 'mobi-mt-results-sort-obts',
						name: 'mobi-mt-results-sort-obts-combo',
						hiddenName: 'mobi-mt-results-sort-obts-combo_hidden',						
						displayField: 'text',
						valueField: 'idMobi',
						typeAhead: true,
						forceSelection: true,
						mode: 'remote',
						triggerAction: 'all',
						emptyText: lang_sort_obts,
						selectOnFocus: true,
						listWidth: 133,	//deferredRender bug
						width: 150,
						listeners: {
							"select": function(combo, record, index){
								setHashItem('sort', record.id);
								resultsStore.setDefaultSort(record.id, 'ASC');
								resultsStore.reload();
							}
						}
					}]
		        }),
				items: [{
					xtype: 'panel',
					id: 'mobi-mt-results-list-panel-c'
				}],
				listeners: {
					"render": function(c){
						var getStart = gup('start');
						resultsStore.load({params:{start:(getStart.length==0?0:parseFloat(getStart)), limit:pageSize}});
					}
				}
			});
			
			// mainList
			// var getStart = gup('start');
			// resultsStore.load({params:{start:(getStart.length==0?0:parseFloat(getStart)), limit:pageSize}});
		},
		failure:function(){ 
			Ext.Msg.alert('ERR', lang_server_unreachable);
		}
	});
});









/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
MobiDropZone = function(view, config){
	this.view = view;
	MobiDropZone.superclass.constructor.call(this, view.getEl(), config);
};

Ext.extend(MobiDropZone, Ext.dd.DropTarget, {
	notifyDrop: function(source, e, drop_data) {
		var sourceStr = source.el.id;
		
		var idSource = sourceStr.substr(sourceStr.lastIndexOf(' ')+1);
		var idDest = 'mobi-mt-results-comp-dataview';
		
		var nodeData = Ext.getCmp(idSource).getRecords(drop_data.nodes);
        if(Ext.getCmp(idDest).getStore().data.length<5)
		for(var i = 0, len = nodeData.length; i < len; i++){
            var data = nodeData[i].data;
			if(Ext.getCmp(idDest).getStore().getCount()<5&&Ext.getCmp(idDest).getStore().find('idMobi',data.idMobi)==-1){
				StoreRecord = Ext.data.Record.create({name: 'name'}, {size: 'size'}, {lastmod: 'lastmod'}, {url: 'url'});
				Ext.getCmp(idDest).getStore().add(new StoreRecord({
					name: shortName(data.name),
					size: data.size,
					lastmod: data.lastmod,
					url: data.url,
					idMobi: data.idMobi
				}));
			}
        }
		return true;
	}
});

ImageDragZone = function(view, config){
	// if (Ext.isIE7){
		// alert(view.getEl());
	// }
    this.view = view;
    ImageDragZone.superclass.constructor.call(this, view.getEl(), config);
};

Ext.extend(ImageDragZone, Ext.dd.DragZone, {
    // We don't want to register our image elements, so let's 
    // override the default registry lookup to fetch the image 
    // from the event instead
    getDragData : function(e){
        var target = e.getTarget('.thumb-wrap');
        if(target){
            var view = this.view;
            if(!view.isSelected(target)){
                view.onClick(e);
            }
            var selNodes = view.getSelectedNodes();
            var dragData = {
                nodes: selNodes
            };
            if(selNodes.length == 1){
                dragData.ddel = target;
                dragData.single = true;
            }else{
                var div = document.createElement('div'); // create the multi element drag "ghost"
                div.className = 'multi-proxy';
                for(var i = 0, len = selNodes.length; i < len; i++){
                    div.appendChild(selNodes[i].firstChild.firstChild.cloneNode(true)); // image nodes only
                    if((i+1) % 3 == 0){
                        div.appendChild(document.createElement('br'));
                    }
                }
                var count = document.createElement('div'); // selected image count
                count.innerHTML = i + ' images selected';
                div.appendChild(count);
                
                dragData.ddel = div;
                dragData.multi = true;
            }
            return dragData;
        }
        return false;
    },

    // this method is called by the TreeDropZone after a node drop
    // to get the new tree node (there are also other way, but this is easiest)
    getTreeNode : function(){
        var treeNodes = [];
        var nodeData = this.view.getRecords(this.dragData.nodes);
        for(var i = 0, len = nodeData.length; i < len; i++){
            var data = nodeData[i].data;
            treeNodes.push(new Ext.tree.TreeNode({
                text: data.name,
                icon: '../view/'+data.url,
                data: data,
                leaf:true,
                cls: 'image-node'
            }));
        }
        return treeNodes;
    },
    
    // the default action is to "highlight" after a bad drop
    // but since an image can't be highlighted, let's frame it 
    afterRepair:function(){
        for(var i = 0, len = this.dragData.nodes.length; i < len; i++){
            Ext.fly(this.dragData.nodes[i]).frame('#8db2e3', 1);
        }
        this.dragging = false;    
    },
    
    // override the default repairXY with one offset for the margins and padding
    getRepairXY : function(e){
        if(!this.dragData.multi){
            var xy = Ext.Element.fly(this.dragData.ddel).getXY();
            xy[0]+=3;xy[1]+=3;
            return xy;
        }
        return false;
    }
});

Ext.DataView.LabelEditor = Ext.extend(Ext.Editor, {
    alignment: "tl-tl",
    hideEl : false,
    cls: "x-small-editor",
    shim: false,
    completeOnEnter: true,
    cancelOnEsc: true,
    labelSelector: 'span.x-editable',
    
    constructor: function(cfg, field){
        Ext.DataView.LabelEditor.superclass.constructor.call(this,
            field || new Ext.form.TextField({
                allowBlank: false,
                growMin:90,
                growMax:240,
                grow:true,
                selectOnFocus:true
            }), cfg
        );
    },
    
    init : function(view){
        this.view = view;
        view.on('render', this.initEditor, this);
        this.on('complete', this.onSave, this);
    },

    initEditor : function(){
        this.view.on({
            scope: this,
            containerclick: this.doBlur,
            click: this.doBlur
        });
        this.view.getEl().on('mousedown', this.onMouseDown, this, {delegate: this.labelSelector});
    },
    
    doBlur: function(){
        if(this.editing){
            this.field.blur();
        }
    },

    onMouseDown : function(e, target){
        if(!e.ctrlKey && !e.shiftKey){
            var item = this.view.findItemFromChild(target);
            e.stopEvent();
            var record = this.view.store.getAt(this.view.indexOf(item));
            this.startEdit(target, record.data[this.dataIndex]);
            this.activeRecord = record;
        }else{
            e.preventDefault();
        }
    },

    onSave : function(ed, value){
        this.activeRecord.set(this.dataIndex, value);
    }
});

Ext.DataView.DragSelector = function(cfg){
    cfg = cfg || {};
    var view, proxy, tracker;
    var rs, bodyRegion, dragRegion = new Ext.lib.Region(0,0,0,0);
    var dragSafe = cfg.dragSafe === true;

    this.init = function(dataView){
        view = dataView;
        view.on('render', onRender);
    };

    function fillRegions(){
        rs = [];
        view.all.each(function(el){
            rs[rs.length] = el.getRegion();
        });
        bodyRegion = view.el.getRegion();
    }

    function cancelClick(){
        return false;
    }

    function onBeforeStart(e){
        return !dragSafe || e.target == view.el.dom;
    }

    function onStart(e){
        view.on('containerclick', cancelClick, view, {single:true});
        if(!proxy){
            proxy = view.el.createChild({cls:'x-view-selector'});
        }else{
            proxy.setDisplayed('block');
        }
        fillRegions();
        view.clearSelections();
    }

    function onDrag(e){
        var startXY = tracker.startXY;
        var xy = tracker.getXY();

        var x = Math.min(startXY[0], xy[0]);
        var y = Math.min(startXY[1], xy[1]);
        var w = Math.abs(startXY[0] - xy[0]);
        var h = Math.abs(startXY[1] - xy[1]);

        dragRegion.left = x;
        dragRegion.top = y;
        dragRegion.right = x+w;
        dragRegion.bottom = y+h;

        dragRegion.constrainTo(bodyRegion);
        proxy.setRegion(dragRegion);

        for(var i = 0, len = rs.length; i < len; i++){
            var r = rs[i], sel = dragRegion.intersect(r);
            if(sel && !r.selected){
                r.selected = true;
                view.select(i, true);
            }else if(!sel && r.selected){
                r.selected = false;
                view.deselect(i);
            }
        }
    }

    function onEnd(e){
        if (!Ext.isIE) {
            view.un('containerclick', cancelClick, view);    
        }        
        if(proxy){
            proxy.setDisplayed(false);
        }
    }

    function onRender(view){
        tracker = new Ext.dd.DragTracker({
            onBeforeStart: onBeforeStart,
            onStart: onStart,
            onDrag: onDrag,
            onEnd: onEnd
        });
        tracker.initEl(view.el);
    }
};

Ext.ux.IFrameComponent = Ext.extend(Ext.BoxComponent, {
	onRender : function(ct, position){
	  this.el = ct.createChild({tag: 'iframe', id: 'iframe-'+ this.id, frameBorder: 0, src: this.url});
	}
});
