1 /**
  2  * @fileOverview  The file contains UI concerned functions for building the pane structure from app settings 
  3  * and a lot of other UI functionality for example tooltips, notifymessges, ui-block handling
  4  *
  5  * @author 
  6  * @version 
  7  */
  8 function createBlock(name, _parent){
  9 	var ui_array;
 10 	var layout;
 11 	var _class;
 12 	var len;
 13 	var e, layout_elem;
 14 	var _parent;
 15 	var layout_div;
 16 	
 17 	// append UI
 18 	if (_parent == ""){
 19 		layout_initialisation[name].parent = $('body');
 20 	} else {
 21 		layout_initialisation[name].parent = _parent;
 22 	}
 23  
 24 	var settings;
 25 	if (layout_initialisation[name].settings == ""){
 26 		settings = new CloneObject(layout_initialisation[name].model_settings);
 27 	} else {
 28 		settings = layout_initialisation[name].settings;
 29 	}
 30 	 
 31 	jQuery.each(block_positions, function(index,position){
 32 		if (layout_initialisation[name][position] != undefined){
 33 			ui_array = layout_initialisation[name][position];	
 34 			len = ui_array.lenght;
 35 			jQuery.each(ui_array, function(index,elem){
 36 					var e = elem;
 37 					
 38 					
 39 					if (layout_initialisation[elem] != undefined){
 40 						layout_div = $('<div></div>').addClass(name + '-' + position).addClass("cmds-ui-block").attr("layoutname",name);
 41 						e = createBlock(elem, layout_div);  // compode element
 42 						$(layout_div).append($(e));
 43 						layout_initialisation[name].parent.append($(layout_div));
 44 					} else {
 45 						$(e).addClass(name + '-' + position).attr("layoutname",name);
 46 						if (blocks_settings[$(elem).attr("id")] != undefined) {
 47 							//jQuery.each(blocks_settings[$(elem).attr("id")].sublayouts,function(index, ee){
 48 							//	createBlock(ee, $('#' + ee));
 49 							//});
 50 							jQuery.each(blocks_settings[$(elem).attr("id")].commands.block,function(index, cmd){
 51 								createCommand($(elem), cmd);
 52 								bindCommand($(elem), cmd);
 53 							});
 54 						}
 55 						layout_initialisation[name].parent.append($(e));
 56 					}
 57 					
 58 					//layout_initialisation[name].parent.height(layout_initialisation[name].parent.height() + $(layout_div).height());
 59 					settings[position + "__paneSelector"] = "." + name + "-" + position;
 60 					//position + "__paneSelector" = "." + name + "-" + position
 61 			});
 62 		}
 63 	});
 64 	
 65 	layout_initialisation[name].settings = settings;
 66 	return $(layout_div);
 67 }
 68 
 69 function createLayouts(name){
 70 	var ui_array;
 71 	var layout;
 72 	
 73 	// append UI	
 74 	layout = $(layout_initialisation[name].parent).layout(layout_initialisation[name].settings);
 75 
 76 	layout_initialisation[name].layout = layout;
 77 	jQuery.each(block_positions, function(index,position){
 78 		if (layout_initialisation[name][position] != undefined){
 79 			ui_array = layout_initialisation[name][position];	
 80 			jQuery.each(ui_array, function(index,elem){
 81 				if (layout_initialisation[elem] != undefined){
 82 					createLayouts(elem);
 83 				}
 84 			});
 85 		}
 86 	});
 87 
 88 }
 89 
 90 
 91 //append blocks functionality
 92 function createCommand(parent, cmd){
 93 	$("<span class='cmd " + cmd+ "'></span>").appendTo($(parent).children('.header'));
 94 	return  $(parent).children('.header').children('.' + cmd);
 95 }
 96 
 97 function bindCommand(parent, cmd){
 98 	var command = $(parent).children('.header').children('.' + cmd);
 99 	switch (cmd){
100 	case "cmd_close": 
101 		bindCloseCommand(command);
102 		break;
103 	case "cmd_advanced": 
104 		bindAdvancedCommand(command);
105 		break;
106 	default:
107 		break;
108 	}
109 }
110 
111 function bindAdvancedCommand(cmd){
112 	$(cmd).click(function(){
113 		//var advanced = $(this).closest('.cmds-ui-block').attr("id") + '_advanced';
114 		$(this).closest('.cmds-ui-block').find('.ui-advanced').toggle();
115 		// TODO tag <table>  auto-resize dont work !!!!!  
116 		//if ($(this).closest('.cmds-ui-block').find('.ui-advanced').is(":visible") == false){
117 		//	var name = $(this).closest('.cmds-ui-block').attr("layoutname");
118 		//	layout_initialisation[name].layout.sizePane("north",$("#input-simplequery").height(),false, false);
119 		//}
120 	});
121 }
122 
123 function bindCloseCommand(cmd){
124 	$(cmd).click(function(){
125 		$(this).closest('.cmds-ui-block').hide();
126 	});
127 }
128 
129 ////
130 function handleValueCaller(_this){
131 
132 	$(_this).after('<div class="ui-context-dialog cmds-ui-closable cmd cmd_get" ></div>');					
133 	detail = $(_this).parent().children('.ui-context-dialog');				
134 				
135 	detail.load($(_this).attr('href'), function(event) {
136 				$(this).removeClass('cmd_get cmd');
137 				handleUIBlock($(this).children('.cmds-ui-block'));
138 				addPaging($(this).children('.cmds-ui-block'));
139 				$(this).show();
140 				
141 				$(this).find('.cmd_columns').click(function(event) {
142 					event.preventDefault();
143 					handleValueSelection($(this));
144 				});
145 				});
146 }
147 function handleIndexSelection(elem){
148 	var index = $(elem).closest('.treecol').children('.column-elem').text();
149 	searchclauseset.updatedata(index, false);
150 };
151 function handleValueSelection(elem){
152 	var index = undefined;
153 	if ($(elem).closest('.ui-context-dialog').parent().siblings('.treecol').length > 0){
154 		index = $(elem).closest('.ui-context-dialog').parent().siblings('.treecol').children('.column-elem').text();
155 	} 
156 	var value = $(elem).closest('td').text();
157 	searchclauseset.updatedata(index, false, undefined, value);
158 };
159 //
160 function handleUIBlock (elems) 
161 {
162 	
163 //	$('#left-menu').addClass('ui-accordion ui-widget ui-helper-reset ui-accordion-icons');	
164 	$(elems).addClass('ui-helper-reset ui-corner-all');
165 	$(elems).children('.header').addClass('ui-widget-header ui-state-default ui-corner-top');
166 	$(elems).children('.content').addClass('ui-widget-content ui-corner-bottom');
167 /*	$(elems).children('.header').click(function() {
168 		$(this).next().toggle('fast');
169 		return false;
170 	}).next().hide();
171 	*/
172 	
173 	//$(elems).children('.header').prepend('<span class="cmd cmd-collapse cmd_down" > </span>');
174 	//$(elems).find('.cmd-collapse').click(function(event) {
175 	//		$(this).closest('.header').next().toggle('fast');
176 	//		//$(this).toggleClass('cmd_down cmd_up');
177 	//		return false;
178 	//	});
179 	
180 	$(elems).each(function(i) {
181 		// default is: hidden
182 		/*
183 		if ($(this).hasClass('init-show'))  {		
184 			$(this).children('.content').show();
185 			$(this).find('.cmd-collapse').toggleClass('cmd_down cmd_up');		
186 		} else {
187 			$(this).children('.content').hide();			
188 		}		
189 			*/
190 		if ($(this).parent().hasClass('cmds-ui-closable'))  {		
191 			$(this).children('.header').prepend('<span class="cmd cmd_close" > </span>');
192 			$(this).find('.cmd_close').click(function(event) {
193 					$(this).closest('.header').parent().parent('.cmds-ui-closable').remove();	
194 				});
195 		} 
196 	});
197 }
198 
199 
200 function addPaging (elem) 
201 {
202 	
203 	var header = $(elem).children('.header');
204 	var content = $(elem).children('.content');
205 	
206 	var pagingSize = 10;
207 	var startItem = $(header).attr('start-item');
208 	var countItems = $(header).attr('max-value'); //$(content).find('tr').size;
209 	var maximumItems = $(header).attr('maximum-items');
210 	
211 	if (maximumItems < countItems) {
212 		maximumItems = countItems;
213 	} 
214 
215 	var paging = '<div class="cmds-navi-header ui-widget"><span class="label" >from:</span><span><input type="text" class="value start-item paging-input">' +
216 	'</input></span>' +
217 	'<span class="label" >max:</span><span><input type="text" class="value maximum-items paging-input" ></input></span>' +
218   '<span class="cmd cmd_reload" />' +
219 	'<span class="cmd cmd_prev">'+
220 	//'<xsl:choose>' +
221 	//	'<xsl:when test="$startItem = '1'">' +
222 	//		'<xsl:attribute name="disabled">disabled</xsl:attribute>' +
223 	//	'</xsl:when>' +
224 	//'</xsl:choose>' +
225 	'</span>' +
226 	'<span class="cmd cmd_next">' +	
227 	//'<xsl:choose>' +
228 	//	'<xsl:when test="$maximumItems > numberOfRecords or $maximumItems = numberOfRecords">' +
229 	//		'<xsl:attribute name="disabled">disabled</xsl:attribute>' +
230 	//	'</xsl:when>' +
231 	//	'</xsl:choose>' +
232 	'</span></div';
233 	
234 	$(header).append(paging);
235 	$(header).find('.start-item').attr("value",startItem);
236 	$(header).find('.maximum-items').attr("value",maximumItems);
237 	
238 	$(header).find('.cmd_reload').click(function(){
239 		reloadPage($(this).closest('.cmds-ui-block'));
240 		return false;
241 	});
242 	
243 	$(header).find('.cmd_next').click(function(){
244 		pageNext(this, 1);
245 		return false;
246 	});
247 	$(header).find('.cmd_prev').click(function(){
248 		pageNext(this, -1);
249 		return false;
250 	});	
251 
252 }
253 
254 function pageNext (cmd, pages) 
255 {
256 	//TODO
257 	var numItems = $(cmd).closest('.header').attr('max-value'); //$(cmd).closest('.cmds-ui-block').children('.content').find('tr').length;
258 	var startItem = $(cmd).closest('.header').attr('start-item');
259 	var maximumItems = $(cmd).closest('.header').attr('maximum-items');
260 	
261 	var page_record_count = 10;
262 	var start = 0;
263 	var num = 0;
264 	//var max_value = $('#' + qid ).find('.result-header').attr("max_value");
265 
266 	if (maximumItems > page_record_count) {
267 		maximumItems = page_record_count;
268 	}
269 	if ((numItems >= maximumItems) && (pages > 0) ){
270 		start =	parseInt(startItem) + pages * page_record_count ;
271 	} 
272 	if ((pages < 0) && ((parseInt(startItem) + pages * parseInt(page_record_count) + parseInt(page_record_count) - 1) >= 1)) {
273 		start = parseInt(startItem) + pages * parseInt(page_record_count);
274 	}
275 	
276 	if (start > 0){
277 		num = maximumItems;
278 		
279 		if (num > 0){
280 			$(cmd).closest('.header').find('.start-item').attr('value',start);
281 			$(cmd).closest('.header').find('.maximum-items').attr('value',num);
282 			
283 			reloadPage($(cmd).closest('.cmds-ui-block'));
284 		}
285 	}
286 
287 	/*
288 	if (parseInt(startItem) + pages * page_record_count >= 1){
289 		start =	parseInt(startItem) + pages * page_record_count ;
290 	} else  {
291 		if (parseInt(startItem) + pages * page_record_count + page_record_count - 1 >= 1){
292 			start =	1 ;
293 		} 
294 	}
295 	
296 	if (start > 0){
297 		if (start + page_record_count - 1 <= numItems) {
298 			num = page_record_count;
299 		} else if (start <= numItems){
300 			num = numItems - start;
301 		}
302 	
303 		if (num > 0){
304 			$(cmd).closest('.header').find('.start-item').attr('value',start);
305 			$(cmd).closest('.header').find('.maximum-items').attr('value',num);
306 			
307 			reloadPage($(cmd).closest('.cmds-ui-block'));
308 		}
309 	}
310 	*/
311 }
312 
313 function reloadPage (detail) {
314 	
315 	var uri;
316 	
317 	if ($(detail).parent().get(0).localName == "body") {
318 		uri = document.URL;
319 	} else {
320 		uri = $(detail).parents('.number').children('a').attr('href');
321 	}
322 
323 	
324 	var startItem;
325 	var maximumItems;
326 	
327 	//from paging attributes
328 	startItem = $(detail).find('.header').find('.start-item').val();
329 	maximumItems = $(detail).find('.header').find('.maximum-items').val();
330 	
331 
332 	// create the uri params
333 	
334 	if (uri.indexOf("startItem=") > 0){
335 		 temp = uri.substring(uri.indexOf("startItem="));
336 		 len = temp.split("&")[0].length;
337 		 uri = uri.replace(uri.substr(uri.indexOf("&startItem="),len+1),'');
338 	}
339 	
340 	if (uri.indexOf("maximumItems=") > 0){
341 		 temp = uri.substring(uri.indexOf("maximumItems="));
342 		 len = temp.split("&")[0].length;
343 		 uri = uri.replace(uri.substr(uri.indexOf("&maximumItems="),len+1),'');
344 	} 
345 	
346 	uri = uri + "&startItem=" + startItem + "&maximumItems=" + maximumItems;
347 
348 	if ($(detail).parent().get(0).localName == "body") {
349 		location.href = uri;
350 //		window.open(uri);
351 	} else {	
352 		//remove old content
353 		$(detail).children().remove();
354 		
355 		//load new content
356 		$(detail).load(uri, function(event) {
357 			handleUIBlock($(this).children('.cmds-ui-block'));
358 			addPaging($(this).children('.cmds-ui-block'));
359 		});
360 	}
361 }
362 
363 
364 
365 //TOOLTIP
366 var tooltiptable = {};
367 
368 /** 
369  * Helper-object for displaying tooltips
370  * @constructor
371  */
372 var tooltip=function(){
373 	 var id = 'tt';
374 	 var top = 3;
375 	 var left = 3;
376 	 var maxw = 300;
377 	 var speed = 10;
378 	 var timer = 20;
379 	 var endalpha = 95;
380 	 var alpha = 0;
381 	 var tt,t,c,b,h;
382 	 var ie = document.all ? true : false;
383 	 return{
384 
385 	show:function(v,w){
386 		 if(tt == null){
387 			 tt  = document.createElement('div');
388 			 tt.setAttribute('id',id);
389 			 document.body.appendChild(tt);
390 			 tt.style.opacity  = 0;
391 			 tt.style.filter  = 'alpha(opacity=0)';
392 			 document.onmousemove  = this.pos;
393 			}
394 		 tt.style.zIndex = "1000";
395 		tt.style.display  = 'block';
396 		tt.innerHTML = v; 
397 		tt.style.width  = w ? w + 'px' : 'auto';
398 
399 			if(!w  && ie){
400 			 tt.style.width  = tt.offsetWidth;
401 			}
402 
403 			if(tt.offsetWidth  > maxw){tt.style.width = maxw + 'px';}
404 
405 			h =  parseInt(tt.offsetHeight) + top;
406 			clearInterval(tt.timer);
407 			tt.timer =  setInterval(function(){tooltip.fade(1);},timer);
408 		//$('body').find('.ac_results').css({'z-index' : '1000'});
409 	  },
410 	  
411 	  pos:function(e){
412 	   var u = ie ? event.clientY + document.documentElement.scrollTop : e.pageY;
413 	   var l = ie ? event.clientX + document.documentElement.scrollLeft : e.pageX;
414 	   tt.style.top = (u + h) + 'px'; //(u - h) + 'px';
415 	   tt.style.left = (l + left) + 'px';
416 	  },
417 	  
418 	  fade:function(d){
419 	   var a = alpha;
420 	   if((a != endalpha && d == 1) || (a != 0 && d == -1)){
421 	    var i = speed;
422 	   if(endalpha - a < speed && d == 1){
423 	    i = endalpha - a;
424 	   }else if(alpha < speed && d == -1){
425 	     i = a;
426 	   }
427 	   alpha = a + (i * d);
428 	   tt.style.opacity = alpha * .01;
429 	   tt.style.filter = 'alpha(opacity=' + alpha + ')';
430 	  }else{
431 	    clearInterval(tt.timer);
432 	     if(d == -1){tt.style.display = 'none';};
433 	  }
434 	 },
435 	
436 	 hide:function(){
437 		 if (tt != undefined) {
438 			 clearInterval(tt.timer);
439 			 tt.timer = setInterval(function(){tooltip.fade(-1);},timer);
440 		 }
441 	  }
442 	 };
443 	}();
444 
445 
446 	function notifyUser (msg) {
447 		var notifymessage = new NotifyMessage(new Date(),msg);	
448 		notifyset.add(notifymessage);
449 	}
450 
451 	function notifyUser (msg, type) {	
452 		
453 			if (type=='debug' & !(typeof console == "undefined")) {
454 				console.log(msg);
455 			} else {
456 				var notifymessage = new NotifyMessage(new Date(),msg);	
457 				notifyset.add(notifymessage);
458 		  }
459 	}