1 /**
  2  * @fileOverview  This is the main file, contains main app function (jquery-initialization). 
  3  * The app main function runs setup functionality, which covers this domains:
  4  * <dl>
  5  * <dt>the variable initialization<dt>
  6  * 	<dd>functions from mdservice_searchclause.js, mdservice_widget.js, mdservice_ui_helpers.js</dd>
  7  * <dt>loadData()</dt> 
  8  * 	<dd>loading data from repository and creating particular client-side representations  - functions from <a>mdservice_ui_load.js</a></dd>
  9  * <dt>creating of ui-layout</dt>
 10  * 	<dd>i.e. split UI to individual panes  - functions from mdservice_ui_layout.js</dd>
 11  * <dt>addFunctionality()</dt>
 12  * 	<dd>bind handlers to events of ui-elements (function directly in mdservice_ui.js)</dd>
 13  * </dl>
 14  * @author 
 15  * @version 
 16  */
 17 
 18 $(function(){
 19 		// turn on debugging (see jquery.xslTransform.js)
 20 		var DEBUG = false;
 21 	
 22 		// check for jQuery and Sarissa
 23 		try{
 24 			jQuery;
 25 		}catch(e){
 26 			alert('You need to include jQuery!');
 27 		}
 28 		
 29 		/////// INIT VARIABLE SETTINGS
 30 		// get url parameters
 31 		url_params = getUrlVars();
 32 		// create searchclauses
 33 		//searchclauseset.addsearchclause(new SearchClause("","",""),"",0,0);
 34 		// load query if exists params
 35 		//loadQueryFromUriParams();	 
 36 		// create widgets
 37 		 columns_widget = new ListWidget($('#columns-widget'), "columns");
 38 		 collections_widget = new ListWidget($('#collections-widget'), "collections");
 39 		 listwidgetset.add(columns_widget);
 40 		 listwidgetset.add(collections_widget);
 41 		//createInfos();
 42 		
 43 		//////////// LOAD DATA
 44 		loadData();
 45 		//handleBubble();
 46 	
 47 		addFunctionality();
 48 		//addVisuals();
 49 		
 50 		//queryuriparams loaded after collections and workspaceprofile are loaded
 51 		//loadQueryFromUriParams();	
 52 		
 53 		////////////// CREATE  UI-LAYOUT
 54 		createBlock('base','');
 55 		//jQuery.each(blocks_settings,function(index,block){
 56 		//	jQuery.each(block.sublayouts,function(index,name){
 57 		//		createLayouts(name);
 58 		//	});
 59 		//});
 60 		createLayouts('base');
 61 
 62 		initDetailFloat();
 63 		// autocomplete correction
 64 		searchclauseset.addsearchclause(new SearchClause("","",""),"",0,0);
 65 		createInfos();
 66 		
 67 		detailcaller.calldetail(undefined, "info");
 68 	
 69 });
 70 
 71 function createInfos(){
 72 	var info = "<span class='cmd cmd_info'></span>";
 73 	$('.cmds-ui-block').children('.header').append(info);
 74 	createTooltip($('.cmds-ui-block').children('.header'));
 75 	
 76 	$('.cmds-ui-block').children('.header').children('.cmd_info').click(function(){
 77 		//var a = $(this).parent().next().attr('id');
 78 		//var uri = window.location.pathname + "static/info.xml";
 79 		//$.get(uri,{"id":a}, showDetail,'html');
 80 		detailcaller.calldetail($(this));
 81 		return false;
 82 	});	
 83 }
 84 
 85 
 86 function getSelectedRepository(){
 87 	//var id = parseInt($('#repositories_select').find("option:selected").val());
 88 	return $('#repositories_select').find("option:selected").text();//val();
 89 
 90 }
 91 
 92 /**
 93  * This function is called during the initialization sequence and binds event-handlers to events of ui-elements.
 94  * @function
 95  */
 96 function addFunctionality(){
 97 	// DEL COMMAND
 98 	/*
 99 	$('.ui-dialog-titlebar .cmd_del').live('click',function(){
100 		var did;
101 		if ($(this).closest('.ui-dialog').length > 0){
102 			did = $(this).closest('.ui-dialog').find('.detail-wrapper').attr('id');
103 		}
104 		if (did != undefined){
105 			detail = detailcaller.getdetail(did);
106 			detail.close();
107 		}
108 		$(this).closest('.ui-dialog').hide();
109 	})
110 */
111 	/**
112 	 * Remove a query from queryset
113 	 * FIXME: shouldn't this primarily delete the query-object from the queryset? 
114 	 * @event 
115 	 * @name clickQueryremove
116 	 */
117 	$('.query_header .cmd_del').live('click', function(){
118 		$(this).closest('.query_wrapper').remove();
119 	});
120 
121 	//TODO dialog
122 	$('.detail-header .cmd_del').live('click', function(){
123 		var did, detail;
124 		
125 		if ($(this).parent().hasClass('detail-header')){
126 			var dw = $(this).closest('.detail-wrapper');
127 			did = dw.attr('id');
128 			dw.hide();
129 		}
130 		else {
131 			if ($(this).parent().siblings('.ui-dialog-content').length > 0){
132 				did = $(this).parent().siblings('.ui-dialog-content').find('.detail-wrapper').attr('id');
133 			}
134 		}	
135 		if (did != undefined){
136 			detail = detailcaller.getdetail(did);
137 			detail.close();
138 		}
139 	});
140 	
141 	// DETAIL-CALLER
142 	/*
143 	$('.detail-caller, .cmd_detail').live('click',  function(event) {		
144 		$(this).parent().children('.detail').toggle();
145 		$(this).children('.cmd_down, .cmd_up').toggleClass('cmd_down cmd_up');		
146 	});
147 	*/
148 	$('.detail-caller a').live('click',  function(event) {		
149 		event.preventDefault();
150 	});
151 	// open detail (from result-set, but also already within detail-view (ResourceRef, IsPartOf)	
152 	$('.result a.internal, .mdrecord-detail a.internal').live('click',  function(event) {
153 		event.preventDefault();		
154 		
155 		var uri = $(this).attr('href'); // + " body";
156 		//notifyUser('internal-link: ' + uri,'debug' );
157 		//$.get(uri, showDetail,'html');
158 		detailcaller.calldetail(undefined, "record", uri);
159 	});
160 
161 	$('.detail-content a').live('click',  function(event) {
162 		
163 		if ($(this).attr("target") == "_blank"){
164 			return true;
165 		} else {
166 			event.preventDefault();		
167 			var uri = $(this).attr('href'); // + " body";
168 			if ($(this).attr("class") == "query"){
169 				var urlparams = getUrlVars(uri);
170 				loadQueryFromUriParams(urlparams);
171 			} else {
172 				var type;
173 				if ($(this).attr("class") == "bookmark"){
174 					type = "record";
175 				} else {
176 					type = $(this).parents('.detail-wrapper').attr("id");
177 					type = type.substring(7,type.length);
178 				}
179 			//	$.get(uri, showDetail,'html'); */
180 				detailcaller.calldetail(undefined, type, uri);
181 			}
182 		}
183 	});
184 	$('.result a.external, .mdrecord-detail a.external').live('click',  function(event) {
185 		
186 		//event.preventDefault();		
187 		var uri = $(this).attr('href'); // + " body";
188 		notifyUser('resource-link: ' + uri,'debug' );
189 	//	$.get(uri, showDetail,'html'); */
190 	});
191 	/*
192 	$('.result .cmd_detail').live('click',  function(event) {	
193 		//var qid = $(this).closest('.query_wrapper').attr('id');
194 		//var query = queryset.getQuery(qid);
195 		
196 		var uri = $(this).parent().find("a").attr('href'); // + " body";
197 		$.get(uri, showDetail,'html');
198 	});
199 	*/
200 	$(".detail-caller, .cmd_detail").live('click',function(event) {
201 		event.preventDefault();	
202 		detailcaller.calldetail($(this));
203 			
204 	});		
205 	$(".detail-caller-inline").live('click',function(event) {
206 		event.preventDefault();
207 		$(this).parent().children('.detail').toggle();
208 		$(this).children('.cmd_down, .cmd_up').toggleClass('cmd_down cmd_up');
209 			
210 	});	
211 	
212 	// cmd_up cmd_down
213 	$('.cmd_up').live('click',  function(event) {
214 		if ($(this).closest('.detail-wrapper').length >  0 ) {
215 			$(this).closest('.detail-wrapper').find('.detail-content').hide();
216 		} else {
217 			$(this).closest('.query_wrapper').find('.result').hide();
218 		}
219 		$(this).toggleClass('cmd_down cmd_up');					
220 	});
221 	$('.cmd_down').live('click',  function(event) {
222 		if ($(this).closest('.detail-wrapper').length >  0 ) {
223 			$(this).closest('.detail-wrapper').find('.detail-content').show();
224 		} else {
225 			$(this).closest('.query_wrapper').find('.result').show();
226 		}
227 		$(this).toggleClass('cmd_down cmd_up');				
228 	});
229 	
230 	$('.cmd_publish').live('click', function(event){
231 		var query = $(this).parent().data('query');
232 		query.publish();
233 	});
234 	
235 	//////////////////////////////////////////////
236 	$('#searchretrieve').submit( function(event) {
237 		event.preventDefault();
238 		//hideWelcomeMessage();
239 		searchclauseset.buildsctext();
240 		notifyUser(searchclauseset.sctext,'debug');
241 					
242 		//submit_query (columns_widget.getColumnsListText(),searchclauseset.sctext, $('#input-simplequery').attr("value"), $('#input-withsummary').attr("checked"));
243 		
244 		var query = searchclauseset.sctext;
245 		var squery = $('#input-simplequery').attr("value");
246 		// TODO we dont use columns-widget
247 		var columns = "";//columns_widget.getColumnsListText();
248 		var collections = collections_widget.widgets; //searchclauseset.sctext;
249 		var ws  = $('#input-withsummary').attr("checked");
250 		
251 		notifyUser("processing query");
252 		
253 		if (jQuery.trim(query).length == 0){
254 			query = null;
255 		}
256 		if (jQuery.trim(squery).length == 0){
257 			squery = null;
258 		}
259 		
260 		var q = new Query(collections, columns, query, squery); //actions.collections.current, query );
261 		q.repository = getSelectedRepository();
262 		if (ws) {
263 			q.options = "withSummary";
264 		}
265 		notifyUser("submit_query:" + q.query_uri(),'debug');
266 		queryset.addquery(q);
267 	});
268 	
269 	$('.autocomplete-select-caller').live('click',  function(event) {
270 		
271 		$(this).closest(".index-context").prev().parent().find(".autocomplete-input").val($(this).text()).change();		
272 		$(this).closest(".index-context").hide();
273 	});
274 	$('.autocomplete-select-caller a').live('click',  function(event) {		
275 		event.preventDefault();
276 	});
277 	
278 	
279 	$('.comp_detail input').live('keyup',  function(event) {			
280 		$('#srquery').val(
281 				$(this).parent().children('span.cmdelem_name').text()
282 				+ "=" + $(this).val() );
283 	});
284 	
285 	
286 	 $('a.open-in-context').live('click', function(event) {
287 			event.preventDefault();
288 			var uri = $(this).attr('href');
289 			/* notifyUser("open_incontext:" + uri);
290 			$(this).after("<div class='ui-context-dialog cmds-ui-block' ></div>");
291 			var trg = $(this).next(".ui-context-dialog");
292 			trg.show();						
293 			$(trg).load(uri); //function(event) {	} */
294 			var contextual_uri = uri.replace('htmlpage','htmldetail'); 		
295 			
296 			$.get(contextual_uri, showDetail,'html');
297 	});
298 	
299 // RECORDSET searchRetrieve
300 	 /*
301 	$('#searchretrieve').submit( function(event) {
302 			event.preventDefault();
303 			//hideWelcomeMessage();
304 			searchclauseset.buildsctext();
305 			notifyUser(searchclauseset.sctext,'debug');
306 			//submit_query ($('#columns_list').attr("value"),searchclauseset.sctext, $('#input-simplequery').attr("value"));			
307 			submit_query (columns_widget.getColumnsListText(),searchclauseset.sctext, $('#input-simplequery').attr("value"), $('#input-withsummary').attr("checked"));
308 	});
309 */
310 	$('#columns-widget .cmd_save').click(function(event) {
311 		var terms = [{}];	
312 			
313 		var id = $("#ts_select option").size();
314 		var name = "termset_" + id;
315 		
316 		columns_widget.getListWidget().find('.list-item').each(function(i,elem){
317 			terms[i] = $(elem).text();
318 		});
319 		
320 		var dt = new Date();
321 		var str_time = dateFormat(dt);//dt.toString("dd/mm/yyyy HH:mm:ss");
322 		var jsont = {"name":name, "time" : str_time, "Terms" :terms};
323 		if (jsonw["WorkspaceProfile"]["CustomTermsets"] == undefined) {
324 			jsonw["WorkspaceProfile"]["CustomTermsets"] = [{}];
325 		}
326 		jsonw["WorkspaceProfile"]["CustomTermsets"][id] = jsont;
327 		
328 		//saveWorkspace("USER");
329 		Workspace.save("USER");
330 		loadTermsets(jsonw["WorkspaceProfile"]["CustomTermsets"]);
331 		//createTermsUI(jsonw["WorkspaceProfile"]["CustomTermsets"][id],$('#userterms'));
332 		$("#ts_select option").removeAttr("selected");
333 		$("#ts_select option").last().attr("selected","selected");
334 		$('#ts_input').attr("value",name);
335 		createTermsUI(jsonw["WorkspaceProfile"]["CustomTermsets"][id],$('#userterms'));
336 	});
337 	
338 	/*
339 	$('#querylist .query_header').find('.cmd_del').live('click',  function(event) {
340 		//showTermDetail($(this).parent().text());
341 		
342 		queryset.removequery($(this).closest('.query_wrapper').attr('id'));
343 					
344 	});
345 */
346 	/*
347 	$('#querylist .cmd_up').live('click',  function(event) {
348 		$(this).closest('.query_wrapper').find('.result').hide();
349 		$(this).toggleClass('cmd_down cmd_up');					
350 	});
351 
352 */
353 	
354 	$('#detail_query .cmds .cmd_save').live('click',  function(event) {
355 		qid = $(this).data('query').listid;
356 		notifyUser("here I would save query: " + qid, "debug");
357 		$(this).data('query').save();
358 		//Workspace.saveQuery($(this).data('query'));
359 	});
360 
361 	/**
362 	 * FIXME: this should only invoke appropriate query-function storing the query to workspaceprofile
363 	 */
364 	$('#querylist .cmd_save').live('click',  function(event) {
365 		
366 		var qid = "";
367 		var qstring = "";	
368 		var json_coll = "null";
369 		var json_cols = "null";
370 		var squery = "";
371 		var bookmark = "0";
372 		var json_options = "null";
373 		
374 		if ($(this).parents('.result').length > 0){
375 			qstring = $(this).parent().find("a").attr('href');
376 			qstring = qstring.substring(18,qstring.length);
377 			bookmark = "1";
378 		} else {
379 			qid = $(this).closest('.query_wrapper').attr("id");
380 			qstring = queryset.getquerystring(qid);	
381 			json_coll = queryset.getcollections(qid);
382 			json_cols = queryset.getcolumns(qid);
383 			squery = queryset.getsquery(qid);
384 			json_options = queryset.getoptions(qid);
385 		}
386 		notifyUser("saving query: " + qid, "debug");
387 		// JSON conversion
388 		if (qstring.length == 0){
389 			qstring = "[NULL]";
390 		}
391 		if (squery.length == 0){
392 			squery = "[NULL]";
393 		}
394 
395 		var id = parseInt($("#qts_select option:selected").val());
396 		var iq = $('#userqueries').children().size();
397 	
398 		if (iq == 0){
399 			jsonw["WorkspaceProfile"]["Querysets"][id]["Queries"] = [{}];
400 		}
401 		var dt = new Date();
402 		var str_time = dateFormat(dt);//dt.toString("dd/mm/yyyy HH:mm:ss");
403 		var jsonq = {"name":"", "squerystring":squery, "querystring":qstring,"searchclauses":"null" , "collections" : json_coll, "columns" : json_cols, "options" : json_options, "bookmark" : bookmark, "time" : str_time};
404 		
405 		var name;
406 		if (bookmark == "1") {
407 			qstring = Url.decode(qstring);
408 			var s = qstring.split(':');
409 			name = s[s.length - 2] + ":" + s[s.length - 1];
410 		} else {
411 			name = Query.fullformatstring(jsonq);
412 		}
413 		jsonq.name = name;
414 		
415 		jsonw["WorkspaceProfile"]["Querysets"][id]["Queries"][iq] = jsonq;
416 		//saveWorkspace("USER");
417 		Workspace.save("USER");
418 		appendQueryUI(jsonw["WorkspaceProfile"]["Querysets"][id]["Queries"][iq],iq, $('#userqueries'));
419 		
420 		//$("#qs_select").append(new Option(Query.simplequerystring(qstring),iq));
421 	});
422 	/*
423 	$('#querylist .cmd-xml').live('click',  function(event) {
424 		var qid = $(this).closest('.query_wrapper').attr("id");
425 
426 		queryset.getQuery(qid).open('xml');
427 	});
428 	$('#querylist .cmd-page').live('click',  function(event) {
429 		var qid = $(this).closest('.query_wrapper').attr("id");
430 
431 		queryset.getQuery(qid).open('htmlpage');
432 	});
433 	*/
434 	/*
435 	$('#querylist .cmd-link').live('click',  function(event) {
436 		/* var qid = $(this).closest('.query_wrapper').attr("id");
437 		var qstring = queryset.getquerystring(qid);	
438 		var json_coll = queryset.getcollections(qid);
439 		var json_cols = queryset.getcolumns(qid);
440 		var squery = queryset.getsquery(qid);
441 		// JSON conversion
442 		if (qstring.length == 0){
443 			qstring = "[NULL]";
444 		}
445 		if (squery.length == 0){
446 			squery = "[NULL]";
447 		}		
448 		var jsonq = {"squerystring":squery, "querystring":qstring,"searchclauses":"null" , "collections" : json_coll, "columns" : json_cols};
449 		///
450 		
451 		queryset.getQuery(qid).open();
452 	});
453 	*/
454 	/*
455 	$('.cmd_select').live('click',  function(event) {
456 		var qid = $(this).closest('.query_wrapper').attr("id");
457 					
458 		searchclauseset.sctext = queryset.getquerystring(qid);
459 		searchclauseset.buildfromquerystring();
460 	});
461 	*/
462 	/**
463 	 * FIXME: this looks like a typo: #queryslist -> #querylist  
464 	 */
465 	$('#queryslist .cmd_reload').live('click',  function(event) {
466 		var qid = $(this).closest('.query_wrapper').attr("id");
467 
468 		queryset.resubmit(qid);
469 		
470 	});
471 	
472 	
473 	
474 	$('.cmd_sc_delete').live('click',  function(event) {
475 		var i = $(this).closest('.sc-i').attr('id');
476 		var j = $(this).closest('.sc-j').attr('id');
477 		//notifyUser(i + j,'debug');
478 		searchclauseset.removesearchclause(i,j);
479 					
480 	});
481 	$('.cmd_add_and').live('click',  function(event) {
482 		//showTermDetail($(this).parent().text());
483 		//$(this).next().hide();
484 		$(this).attr("value","AND");
485 		var searchclause = new SearchClause("","","");
486 		var i = $(this).closest('.sc-i').attr('id');
487 		var j = $(this).closest('.sc-j').attr('id');
488 		//notifyUser(i + j,'debug');
489 		searchclauseset.addsearchclause(searchclause,"and",i,j);
490 					
491 	});
492 	$('.cmd_add_or').live('click',  function(event) {
493 		//showTermDetail($(this).parent().text());
494 		//$(this).next().hide();
495 		var i,j;
496 		$(this).attr("value","OR");
497 		var searchclause = new SearchClause("","","");
498 		searchclauseset.addsearchclause(searchclause,"or",$(this).closest('.sc-i').attr('id'),$(this).closest('.sc-j').attr('id'));
499 					
500 	});
501 
502 	///// datasets/queries
503 	$('#qts_save').click(function(){
504 		var id = $("#qts_select option:selected").val();
505 		//notifyUser($('#qts_input').val() + $('#qts_input').text(),'debug');
506 		jsonw["WorkspaceProfile"]["Querysets"][id]["name"] = $('#qts_input').val();
507 			
508 		$("#qts_select option:selected").text( $('#qts_input').val());
509 		//saveWorkspace("USER");
510 		Workspace.save("USER");
511 	});
512 	$('#qts_add').click(function(){
513 		var new_name = "new_queryset";
514 		
515 		var id = $('#qts_select option').size();
516 		var dt = new Date();
517 		var str_time = dateFormat(dt);//dt.toString("yyyy-MM-dd HH:mm:ss");
518 		
519 		if (id == 0){
520 			jsonw["WorkspaceProfile"]["Querysets"] = [{}];
521 		}
522 	
523 		jsonw["WorkspaceProfile"]["Querysets"][id] = {"name":new_name,"created":str_time , "Queries" : "null"};
524 		
525 		//saveWorkspace("USER");
526 		Workspace.save("USER");
527 		//todo
528 		
529 		//loadWorkspace(jsonw["WorkspaceProfile"]["Querysets"]);
530 		$("#qts_select").append(new Option(new_name, id));
531 		$("#qts_select").find('option').attr("selected","false");
532 		$("#qts_select").find('option').last().attr("selected","true");
533 		$('#qts_input').val(new_name);
534 	});
535 	$('#qts_delete').click(function(){
536 		var count = $("#qts_select option").size();
537 		
538 		//if (count > 1){
539 			var id = parseInt($("#qts_select option:selected").val());
540 			var size = jsonw["WorkspaceProfile"].Querysets.length;
541 		
542 			for (var i=id;i<size-1;i++){
543 				jsonw["WorkspaceProfile"].Querysets[i] = jsonw["WorkspaceProfile"].Querysets[i+1];
544 			}
545 		
546 			delete jsonw["WorkspaceProfile"].Querysets[size-1];
547 			jsonw["WorkspaceProfile"]["Querysets"].length = size-1;
548 			// set null string , if 0 querysets
549 			if (count == 1) {
550 				jsonw["WorkspaceProfile"]["Querysets"] = "null";
551 			}
552 			//saveWorkspace("USER");
553 			Workspace.save("USER");
554 			//$("#qts_select option").remove();
555 			loadQuerysets(jsonw["WorkspaceProfile"]["Querysets"],"user");
556 			
557 		//}
558 	});
559 	
560 	$('#ts_save').click(function(){
561 		var id = $("#ts_select option:selected").val();
562 		//notifyUser($('#qts_input').val() + $('#qts_input').text(),'debug');
563 		jsonw["WorkspaceProfile"]["CustomTermsets"][id]["name"] = $('#ts_input').val();
564 			
565 		$("#ts_select option:selected").text( $('#ts_input').val());
566 		//saveWorkspace("USER");
567 		Workspace.save("USER");
568 	});
569 	$('#ts_add').click(function(){
570 		var new_name = "new_termset";
571 		
572 		var id = $('#ts_select option').size();
573 		var dt = new Date();
574 		var str_time = dateFormat(dt);//dt.toString("yyyy-MM-dd HH:mm:ss");
575 		
576 		if (id == 0){
577 			jsonw["WorkspaceProfile"]["CustomTermsets"] = [{}];
578 		}
579 	
580 		jsonw["WorkspaceProfile"]["CustomTermsets"][id] = {"name":new_name,"created":str_time , "Terms" : "null"};
581 		
582 		//saveWorkspace("USER");
583 		Workspace.save("USER");
584 		//todo
585 		
586 		//loadWorkspace(jsonw["WorkspaceProfile"]["Querysets"]);
587 		$("#ts_select").append(new Option(new_name, id));
588 		$("#ts_select").find('option').attr("selected","false");
589 		$("#ts_select").find('option').last().attr("selected","true");
590 		$('#ts_input').val(new_name);
591 		createTermsUI(jsonw["WorkspaceProfile"]["CustomTermsets"][id],$('#userterms'));
592 	});
593 	$('#ts_delete').click(function(){
594 		var count = $("#ts_select option").size();
595 		
596 		//if (count > 1){
597 			var id = parseInt($("#ts_select option:selected").val());
598 			var size = jsonw["WorkspaceProfile"].CustomTermsets.length;
599 		
600 			for (var i=id;i<size-1;i++){
601 				jsonw["WorkspaceProfile"].CustomTermsets[i] = jsonw["WorkspaceProfile"].CustomTermsets[i+1];
602 			}
603 		
604 			delete jsonw["WorkspaceProfile"].CustomTermsets[size-1];
605 			jsonw["WorkspaceProfile"]["CustomTermsets"].length = size-1;
606 			// set null string , if 0 termsets
607 			if (count == 1) {
608 				jsonw["WorkspaceProfile"]["CustomTermsets"] = "null";
609 			}
610 			//saveWorkspace("USER");
611 			Workspace.save("USER");
612 			loadTermsets(jsonw["WorkspaceProfile"]["CustomTermsets"]);
613 	});
614 	
615 	$('#userterms .cmd_load').live('click',function(event){
616 		var term = String.trim($(this).parent().find('a').text());
617 		columns_widget.add(new ListItem(term));
618 		
619 	});
620 	$('#userterms .cmd_del').live('click', function(event){
621 		var id = parseInt($("#ts_select option:selected").val());
622 		var str = $(this).parent().find('a').attr("href");
623 		var iq = parseInt(str.substring(10));
624 		var size = jsonw["WorkspaceProfile"]["CustomTermsets"][id]["Terms"].length;
625 		
626 		for (var i=iq;i<size-1;i++){
627 			jsonw["WorkspaceProfile"]["CustomTermsets"][id]["Terms"][i] = jsonw["WorkspaceProfile"]["CustomTermsets"][id]["Terms"][i+1];
628 		}
629 	
630 		delete jsonw["WorkspaceProfile"]["CustomTermsets"][id]["Terms"][size-1];
631 		jsonw["WorkspaceProfile"]["CustomTermsets"][id]["Terms"].length = size-1;
632 		
633 		if (size == 1){
634 			jsonw["WorkspaceProfile"]["CustomTermsets"][id]["Terms"] = "null";
635 		}
636 		
637 		//saveWorkspace("USER");
638 		Workspace.save("USER");
639 		loadTermsets(jsonw["WorkspaceProfile"]["CustomTermsets"]);
640 		//$("#ts_select option").remove();
641 		//$("#ts_select option").first().attr("selected","true");
642 	});
643 
644 	
645 	$('#collections .cmd_load').live('click',function(event){
646 		//hideWelcomeMessage();
647 		var collection_text = "";
648 		var coll = $(this).parent();
649 		var collections = [];
650 		//collections.splice(0, collections.length);
651 		collections[0] = new Collection($(coll).attr("handle"), String.trim($(coll).children('a').text()));
652 		var columns = columns_widget.getListText();//$('#columns_list').attr("value");
653 		//var collections = collections_widget.getListText();
654 		var query = new Query(collections,columns,"","");
655 		query.repository = getSelectedRepository();
656 	
657 		//searchclauseset.clear();
658 		queryset.addquery(query);
659 		//$('#collection_list').attr("value",query.getcollectiontext("name"));
660 		collections_widget.load(query.collection);
661 	
662 	});
663 	$('#serverqueries .cmd_load').live('click',function(event){
664 		
665 		var id = parseInt( $("#serverqts_select option:selected").val());
666 		var str = $(this).parent().find('a').attr("href");
667 		var iq = parseInt(str.substring(9));
668 		var json = jQuery.parseJSON($("#serverqs").attr("data"));
669 		var q = json["WorkspaceProfile"]["Querysets"][id]["Queries"][iq];
670 		
671 		loadQuery(q);
672 	});
673 	$('#userqueries .cmd_load').live('click',function(event){
674 		
675 		var id = parseInt( $("#qts_select option:selected").val());
676 		var str = $(this).parent().find('a').attr("href");
677 		var iq = parseInt(str.substring(7));
678 		var q = jsonw["WorkspaceProfile"]["Querysets"][id]["Queries"][iq];
679 		
680 		loadQuery(q);
681 	});
682 	$('#userqueries .cmd_del').live('click', function(event){
683 		//var count = $("#userqueries li").size();
684 		var id = parseInt($("#qts_select option:selected").val());
685 		var str = $(this).parent().find('a').attr("href");
686 		var iq = parseInt(str.substring(7));
687 		var size = jsonw["WorkspaceProfile"]["Querysets"][id]["Queries"].length;
688 		
689 		for (var i=iq;i<size-1;i++){
690 			jsonw["WorkspaceProfile"]["Querysets"][id]["Queries"][i] = jsonw["WorkspaceProfile"]["Querysets"][id]["Queries"][i+1];
691 		}
692 	
693 		delete jsonw["WorkspaceProfile"]["Querysets"][id]["Queries"][size-1];
694 		jsonw["WorkspaceProfile"]["Querysets"][id]["Queries"].length = size-1;
695 		
696 		if (size == 1){
697 			jsonw["WorkspaceProfile"]["Querysets"][id]["Queries"] = "null";
698 		}
699 		
700 		//saveWorkspace("USER");
701 		Workspace.save("USER");
702 		loadQuerysets(jsonw["WorkspaceProfile"]["Querysets"],"user");
703 		//$("#qs_select option").remove();
704 		//$("#qs_select option").first().attr("selected","true");
705 	});
706 
707 	
708 	$('.ui-dialog-titlebar-del').live('click', function(event){
709 		//$('#detail-float').dialog('close');
710 		var t = $(this).parents('.ui-widget').children('.ui-dialog-content');
711 		$(t).dialog('close');
712 	});
713 
714 	$('.ui-dialog-titlebar-up').live('click', function(event){
715 		var t = $(this).parents('.ui-widget').children('.ui-dialog-content');
716 		
717 		$(this).parents('.ui-widget').attr("tempheight",$(this).parents('.ui-widget').height());
718 		//notifyUser("up(height):" + $(this).parents('.ui-widget').height(),'debug');
719 		$(this).parents('.ui-widget').height(30);
720 		//notifyUser("up(tempheight):" + $(this).parents('.ui-widget').attr("tempheight"),'debug');
721 		
722 		
723 		//$(t).find(".ui-dialog-buttonpane:first, .ui-dialog-content").stop({clearQueue:true}).fadeOut(300);
724 		//$(t).stop({clearQueue:true}).animate({height:'0px'},300);
725 		
726 		$(this).removeClass('cmd_up ui-dialog-titlebar-up');
727 		$(this).addClass('cmd_down ui-dialog-titlebar-down');	
728 	});
729 	$('.ui-dialog-titlebar-down').live('click', function(event){
730 		var t = $(this).parents('.ui-widget').children('.ui-dialog-content');
731 		
732 		var h = $(this).parents('.ui-widget').attr("tempheight");
733 		//notifyUser("down(tempheight):" + h,'debug');
734 		$(this).parents('.ui-widget').height(parseInt(h));
735 		//notifyUser("down(height):" + $(this).parents('.ui-widget').height(),'debug');
736 		
737 		
738 		//$(this).parents('.ui-widget').attr("tempheight",$(this).parents('.ui-widget').height());
739 		//$(t).find(".ui-dialog-content, .ui-dialog-buttonpane:first").stop({clearQueue:true}).fadeIn(800)
740 		//.end().stop({clearQueue:true}).animate({height:'100%'},300);
741 
742 		$(this).removeClass('cmd_down ui-dialog-titlebar-down');
743 		$(this).addClass('cmd_up ui-dialog-titlebar-up');	
744 	});
745 
746 }
747 
748 function initDetailFloat(){
749 	$("#detail-float").dialog({ autoOpen: false});
750 	$("#detail-float").dialog();
751 	$("#detail-float").tabs();
752 };
753 function submit_query (columns, query, squery, ws) {
754 	notifyUser("processing query");
755 	
756 	if (jQuery.trim(query).length == 0){
757 		query = null;
758 	}
759 	if (jQuery.trim(squery).length == 0){
760 		squery = null;
761 	}
762 	
763 	var q = new Query(collections, columns, query, squery); //actions.collections.current, query );
764 	q.repository = getSelectedRepository();
765 	if (ws) {
766 		q.options = "withSummary";
767 	}
768 	notifyUser("submit_query:" + q.query_uri(),'debug');
769 	queryset.addquery(q);
770 	//notifyUser("container" + q.container.attr('id'));
771 	//$("#querylist").append("sdfdsf");	
772 }
773 
774 /**
775  * allows to add ui-containers into the detail-pane.
776  * 
777  * Most of it is just to ensure a defined ordering:
778  * 1. info, 2. index, 3. query, 4. record
779  */
780 function addToDetailList(elem, did){
781 	var exists = false;
782 	var index_elem = undefined;
783 	var query_elem = undefined;
784 	var record_elem = undefined;
785 	var info_elem = undefined;
786 	
787 	$('#detailblock').children('.content').children().each(function(){
788 		if ($(this).attr("id") == did){
789 			exists = true;
790 		}
791 		if ($(this).attr("id") == "detail_index"){
792 			index_elem = this;
793 		}
794 		if ($(this).attr("id") == "detail_query"){
795 			query_elem = this;
796 		}
797 		if ($(this).attr("id") == "detail_record"){
798 			record_elem = this;
799 		}
800 		if ($(this).attr("id") == "detail_info"){
801 			info_elem = this;
802 		}
803 	});
804 	if (!exists) {
805 		if (did == "detail_record") {
806 			$('#detailblock').children('.content').append(elem);
807 		} else {
808 			if (did == "detail_info") {
809 				$('#detailblock').children('.content').prepend(elem);
810 			} else {
811 				if (did == "detail_index") {
812 					if (info_elem != undefined) {
813 						$(info_elem).after(elem);
814 					} else {
815 						if (record_elem != undefined) {
816 							$(record_elem).before(elem);
817 						} else {
818 							$('#detailblock').children('.content').prepend(elem);
819 						}
820 					}
821 				} else {
822 					if (did == "detail_query") {
823 						if (index_elem != undefined) {
824 							$(index_elem).after(elem);
825 						} else {
826 							if (record_elem != undefined) {
827 								$(record_elem).before(elem);
828 							} else {
829 								$('#detailblock').children('.content').append(elem);
830 							}
831 						}
832 					} else {
833 						$('#detailblock').children('.content').append(elem);
834 					}
835 				}
836 			}
837 		}
838 
839 	} else {
840 		$('#detailblock').children('.content').children().each(function(){
841 			if ($(this).attr("id") == did){
842 				$(this).show();
843 			}
844 		});
845 	}
846 }
847 
848 function addToSClist (div, i, j, rel) {	
849 	
850 	var x;
851 	
852 	//notifyUser(i + "," + j + "," + rel);
853 	if (rel == ""){
854 		x = $('<div />').addClass("sc-i").addClass("and_level");
855 		$(div).appendTo($(x).appendTo($('#searchclauselist')));
856 		$(x).attr("id",i);
857 	} else {
858 		if (rel == "and") {
859 			x = $('<div />').addClass("sc-i").addClass("and_level");
860 			$(x).attr("id",i);
861 			$(div).appendTo($(x).appendTo($('#searchclauselist')));
862 		} else {
863 			$(div).appendTo($('#searchclauselist').children()[i]);
864 		}
865 	}
866 	
867 	//$('#searchclauselist').append($(li));
868 	
869 }
870 
871 function addToQuerylist (x) {	
872 	$("#querylist").prepend(x);	
873 }
874 
875 function addToNotifylist (x) {	
876 	$("#notifylist").prepend(x);	
877 }
878 
879 function createTooltip(parentwidget) {
880 	
881 	 var ccmd;
882 	 if (parentwidget == null) {
883 		 ccmd = $('.cmd');
884 	 } else {
885 		 ccmd = $(parentwidget).find('.cmd');
886 	 }
887 	 $(ccmd).mouseover(function(){
888 		 // command name
889 		 var cmd = $(this).attr("class");
890 		 cmd = cmd.substring(cmd.indexOf("cmd_"));
891 		 cmd = cmd.split(" ")[0];
892 		 
893 		 // command place
894 		 var place = "";
895 		 if ($(this).parents('.content').length > 0) {
896 			 place = $(this).parents('.content').attr("id") + ".";
897 		 }
898 		 if ($(this).parents('.block').length > 0) {
899 			 place = $(this).parents('.block').attr("id") + ".";
900 		 }
901 		 
902 
903 		 // find tho tooltiptext
904 		 var a = place + cmd;
905 		
906 		 if (tooltiptable[a] != null) {
907 		 	s = tooltiptable[a];
908 		 } else { 
909 		 	if (tooltiptable[cmd] != null) {
910 		 		s = tooltiptable[cmd];
911 		 	} else {
912 		 		s = a;
913 		 	}
914 		 }
915 		 tooltip.show(s);
916 	 });
917 	 $(ccmd).mouseout(function(){
918 		 tooltip.hide();
919 	 });
920 
921 };
922 
923 function loadQuery(q){
924 	if (q["bookmark"] == "1") {
925 		var uri = "/MDService2/record/htmldetail/" + q["querystring"];
926 		detailcaller.calldetail(undefined, "record", uri);
927 		//var uri = "/MDService2/record/htmldetail/" + q["querystring"];
928 		//showDetail(null,'html');
929 		//$.get(uri, showDetail,'html');
930 	} else {
931 		//hideWelcomeMessage();
932 		var query = new Query([],"","","");
933 		query.load(q);
934 		query.repository = getSelectedRepository();
935 		queryset.addquery(query);
936 		
937 		searchclauseset.sctext = query.query;
938 		notifyUser(searchclauseset.sctext,'debug');
939 		searchclauseset.buildfromquerystring();
940 
941 		//collections = query.collection;
942 		collections_widget.load(query.collection);
943 		columns_widget.load(query.columns.split(','));
944 		$('#input-simplequery').attr("value",query.squery);
945 		$('#input-withsummary').attr("checked",(query.options != null));
946 		updateCollectionTree();
947 	} 
948 
949 }
950 
951 function loadQueryFromUriParams(local_uri){
952 	var url;
953 	
954 	if (local_uri == undefined){
955 		url = url_params;
956 	} else {
957 		url = local_uri;
958 	}
959 	var q = url["q"];
960 	var squery = url["squery"];
961 	var collection = url["collection"];
962 	var startItem = url["startItem"];
963 	var maximumItems = url["maximumItems"];
964 	var repository = url["repository"];
965 	var columns = url["columns"];
966 	if ((q != undefined) || (squery != undefined) || (collection != undefined)) {
967 		if (q == undefined) {
968 			q = "";
969 		} else {
970 			q = Url.decode(q);
971 		}
972 		if (squery == undefined) {
973 			squery = "";
974 		} 
975 		if (columns == undefined) {
976 			columns = "";
977 		}
978 		if (startItem == undefined) {
979 			startItem = 1;
980 		}
981 		if (maximumItems == undefined) {
982 			maximumItems = 10;
983 		}
984 		if (repository == undefined) {
985 			repository = getSelectedRepository();
986 		}
987 		if (collection == undefined){
988 			collection = "";
989 		}
990 		var collections = [];
991 		if (collection.length > 0 ){
992 			var coll = collection.split(",");
993 			$.each(coll,function(i,item){
994 					var n;
995 					n = $('#collections').find(".folder:[handle='"+item+"']").text();
996 					var simple_collection = new Collection(item, n);
997 					collections[i] = simple_collection;
998 			});
999 		}
1000 		
1001 		var query = new Query(collections, columns, q, squery);
1002 		query.startItem = startItem;
1003 		query.maximumItems = maximumItems;
1004 		query.repository = repository;
1005 		
1006 		
1007 		queryset.addquery(query);
1008 		
1009 		searchclauseset.sctext = query.query;
1010 		notifyUser(searchclauseset.sctext,'debug');
1011 		searchclauseset.buildfromquerystring();
1012 
1013 		//collections = query.collection;
1014 		collections_widget.load(query.collection);
1015 		columns_widget.load(query.columns.split(','));
1016 		$('#input-simplequery').attr("value",query.squery);
1017 		$('#input-withsummary').attr("checked",(query.options != null));
1018 		updateCollectionTree();
1019 		/*
1020 		
1021 		searchclauseset.sctext = query.query;
1022 		notifyUser(searchclauseset.sctext,'debug');
1023 		
1024 		searchclauseset.buildfromquerystring();
1025 
1026 		$('#collection_list').attr("value",query.getcollectiontext("name"));
1027 	
1028 		columns_widget.load(query.columns.split(','));
1029 		//$('#columns_list').attr("value",query.columns);
1030 		$('#input-simplequery').attr("value",query.squery);	
1031 
1032 		$('#query-input').show();
1033 				                                         
1034 		//hideWelcomeMessage();
1035 		*/
1036 	}
1037 	
1038 }
1039 
1040 
1041