/** show a blocking message box in the front - hiding the rest of screen behind a grey cutton!
* classes u_popup_back & u_block_msg makes the layout!
* @param msg Message text
*/
var u_front_msg__firstloop_=false;
function u_front_msg(msg) {
  if (! u_front_msg__firstloop_) {
    u_front_msg__firstloop_=true;
    $("body").append("<div id=\"u_block_msg_back\" class=\"u_popup_back\">\n"
                   +"<div id=\"u_block_msg\" class=\"u_popup_box\">&#160;</div>\n"
                   +"</div>\n");
  }
  $("#u_block_msg").html(msg);
  $("#u_block_msg_back").show();
}
/** hide the blocking message - give screen free!
*/
function u_front_msg_ok() {
  $("#u_block_msg_back").hide();
}


/** build a folder-file tree
* @param json_obj JSon Data opject
* @param tag_id tag id for output
* @param click_func function calling if file clicked
* @code
* function(){ file_name=$(this).attr("title"); alert(file_name); }
* @endcode
*/
var s="";
function u_ls_json2tree(json_obj,name,tag_id,click_func) {
   u_o("ls:u_ls_json2tree");
   $("#"+tag_id).empty();
   s="";
   u_ls_json2tree__h(json_obj,name,tag_id,1,"");
   $("#"+tag_id).html(s);
   $(".u_ls_fname").click(click_func);
}
//helper for u_ls_json2tree_h()
function u_compare_dirs(a,b) {
  if(a.name > b.name)
    return 1;
  if(a.name < b.name)
    return -1;
  return 0;
}
function u_ls_json2tree__h(data,name,box,level,path) {
   if (level>20) return;
   if (level>1) {style=" style=\"display:none;\"";} else {style="";}
   s+="<div id=\""+box+"\" name=\""+name+"\" class=\"u_ls_b"+level+"\""+style+">";
   //data.dirs.sort(u_compare_dirs);
   var d_num=data.dirs.length;
   var f_num=data.files.length;
   ////u_o("path="+path+" l="+level+" d_num="+d_num+" f_num="+f_num);
   for (var i = 0; i < d_num; i++) {
      dir=data.dirs[i];
      ////u_o("ls:"+dir.name+" l="+level)
      var next_class="u_ls_b"+(level+1);
      var next_box=box+"_"+i;
      s+= "<div class=\"u_ls_dname u_ls_d"+level+"\" name=\""+dir.name+"\""
         +  " onclick=\"u_ls_open('"+next_class+"','"+name+"','"+next_box+"');\">"
         +    dir.name
         + "</div>"
      u_ls_json2tree__h(dir,name,next_box,level+1,path+"/"+dir.name);
   }
   data.files.sort();
   for (var i = 0; i < f_num; i++) {
      file=data.files[i];
      ////u_o("file:"+file+" l="+level)
      var ftr=box+"_f"+i+"_tr";
/*      s+= "<tr id=\""+ftr+"\" class=\"u_ls_f_tr\" title=\""+path+"/"+file+"\">"
         +  "<td class=\"u_ls_f_td\">&#160;</td>"
         +  "<td class=\"u_ls_file\">"+file+"</td>"
         +"</tr>";*/      
      re = /_([0-9]*)\.usc/i;
      var short=file.match(re);
      if (short.count<1) {sh=file;} else {sh=short[1];}
      s+= "<div class=\"u_ls_fname u_ls_f"+level+"\" title=\""+path+"/"+file+"\">"+short[1]+"</div>";
   }
   s+="</div>";
   return;
}
function u_ls_open(all_class,name,box) {
  tag=document.getElementById(box);
  state=tag.style.display;
  $("."+all_class+"[name="+name+"]").hide();
  if (state=='none') {
    tag.style.display='block';
  } else {
    tag.style.display='none';
  }
}
function u_ls_jsonurl2tree(url,box,click_file_func) {
   u_o("ls:u_ls_jsonurl2tree url="+url);
   $.getJSON(url,function(data){
      u_o("getJSON ls "+data.type);
      u_ls_json2tree(data,box,box,click_file_func);
   });
}
/** build a folder-file tree
* @param json_obj JSon Data opject
* @param tag_id tag id for output
* @param click_func function calling if file clicked
* @code
* function(){ file_name=$(this).attr("title"); alert(file_name); }
* @endcode
*/
var u_ls_selector_nr=0;
var u_ls_selector_nr=0;
function u_ls_selector(tag_id,json_url,click_file_func,options) {
  var box="u_ls_"+u_ls_selector_nr;
  $("#"+tag_id).append("<div id=\""+box+"\" class=\"u_ls\">\n"
                    +"<table><td id=\""+box+"_c\" class=\"u_json_reload\">&#160;</td><td id=\""+box+"_cb\"></td></table>\n"
                    +"</div>\n");
  $("#"+box+"_c").click(function(){
     u_ls_jsonurl2tree(json_url,box+"_cb",click_file_func);
  });
  u_ls_jsonurl2tree(json_url,box+"_cb",click_file_func);
  u_ls_selector_nr++;
}

/*(function($){$.fn.u_ls_input = function(ls_url,default_value,file_click_func,options) {
   var defaults = { weisnich: 123 }
   var options = $.extend(defaults, options);
   return this.each(function() {
      var id=$(this).attr("id");
      $(this).append("<span id=\""+id+"_c\" class=\"u_opendir_c\"  title=\"Select a Dataset\">&#160;</span>\n"
                        +"<input id=\""+id+"_input\" type=\"text\" class=\"u_ls_input\" value=\""+default_value+"\" />\n"
                        +"<div id=\""+id+"_b\" class=\"u_ls_b\"><div id=\""+id+"_bb\" class=\"u_ls_bb\">\n"
                           +"<div id=\""+id+"_e\" class=\"u_close_c\">&#160;close windows</div>"
                        +"</div></div>\n");
      $("#"+id+"_c").click(function(){
         //alert("#"+$(this).attr("id").slice(0,-1)+"b");
         $("#"+$(this).attr("id").slice(0,-1)+"b").show();
      });
      $("#"+id+"_e").click(function(){
         $("#"+$(this).attr("id").slice(0,-1)+"b").hide();
      });
      $("#"+id+"_bb").u_ls_selector(ls_url,file_click_func);
   });
};})(jQuery);*/

var u_info_box_nr=1;//info_box counter
function u_info(tag_id,text,options) {
  $("#"+tag_id).append("<div id=\"u_info_"+u_info_box_nr+"\" class=\"u_info\">"
                      +"<div id=\"u_info_"+u_info_box_nr+"_c\" class=\"u_info_c\" "
                      +"onclick=\"$('#"+tag_id+"b').show()\">&#160;xx</div>\n"
                      +"<div id=\"u_info_"+u_info_box_nr+"_cb\" class=\"u_info_cb\""
                      +"onclick=\"$('#"+tag_id+"').hide()\">"+text+"</div>\n"
                      +"</div>\n");
/*
$("#u_info_"+u_info_box_nr+"_c").click(function(){
  $("#"+tag_id+"b").show();
  alert("#"+$(this).attr("id")+"b");
});
$("#u_info_"+u_info_box_nr+"_cb").hide().click(function(){
   $("#"+tag_id).hide();
});
*/
   u_info_box_nr++;//global counter
}

function u_add_button(box,id,title,click_button_func) {
   $("#"+box).append("<span id="+box+"_"+id+"_c>"+title+"</span>");
   $("#"+box+"_"+id+"_c").click(click_button_func);
}

var u_o__t0X = new Date();
var u_o__t0=u_o__t0X.getTime()
function u_o(str) {
   var t= new Date();
   dt=(t.getTime()-u_o__t0);
   $("#u_o").prepend("<div>"+(dt/1000)+" :"+str+"</div>");
   //window.dump((dt/1000)+" :"+str);
}
////
/// open and close elements by id
//
//open close or toggle tags by id
// 'b' block 'i' inline 'c' close 'tb' toggleBlock/Inline follow by ids
// numers are complieted with 'a_'.nr
function u_v() {
  state='o';
  arg=0; while (arg<arguments.length) {
    id=arguments[arg];
    if ((id=='c') || (id=='i') || (id=='ti') || (id=='b') || (id=='tb')) {
      state=id;
    } else if (document.getElementById(id)) {
      tag=document.getElementById(id);
      if (state=='ti') {
        if (tag.style.display=='none') {state='i';}
        else                           {state='c';}
      } else if (state=='tb') {
        if (tag.style.display=='none') {state='b';}
        else                           {state='c';}
      }
      if (state=='b') {
        tag.style.display='block';
        //a_d('x','b '+id);
      } else if (state=='i') {
        tag.style.display='inline';
        //a_d('x','i '+id);
      } else  {
        tag.style.display='none';
        //a_d('x','c '+id);
      }
    }
    arg++;
  }
}

function u_t_bool(tag,bool,t_text,f_text) {
  eval("val_="+bool+"=!"+bool+";");
  if (val_==0) {$(tag).text(t_text);} else {$(tag).text(f_text);}
  u_o(bool+"="+val_);
}
//eg u_show_hide(this,block_id,t_text,f_text,'b')
function u_show_hide(tag,tag_id,t_text,f_text,display_type) {
  var val_=true;
  eval("var tof=typeof(u_show_hide_"+tag_id+")");
  //u_o("typeof val_ u_show_hide_"+tag_id+":"+typeof(val_)+"/"+is);
  if (tof == "undefined") {
    eval("u_show_hide_"+tag_id+"=false;");
  } 
  eval("val_=u_show_hide_"+tag_id+"=!u_show_hide_"+tag_id+";");
  if (val_==0) {$(tag).text(t_text); u_v('c',tag_id);} else {$(tag).text(f_text); u_v(display_type,tag_id);}
}

/** gives the absolute position of a object*/
function u_xy_of(target) {
  r=new Array;
  t=target; r[0]=t.offsetLeft; r[1]=t.offsetTop;
  while (t.tagName != 'BODY') {
    t=t.offsetParent;
    r[0]+=t.offsetLeft;
    r[1]+=t.offsetTop;
  }
  return r;
}
/** gives the absolute position of a object*/
function u_geometry(target) {
  var g=new Object;
  t=target; g.x=t.offsetLeft; g.y=t.offsetTop;
  g.dy=t.offsetHeight;
  g.dx=t.offsetWidth;
  while (t.tagName != 'BODY') {
    t=t.offsetParent;
    g.x+=t.offsetLeft;
    g.y+=t.offsetTop;
  }
  g.pw=window.innerWidth;
  g.ph=window.innerHeight;
  g.pxo=window.pageXOffset;
  g.pyo=window.pageYOffset;
  g.xl=g.x-g.pxo;
  g.xr=g.pw-g.xl-g.dx;
  g.yo=g.y-g.pyo;
  g.yu=g.ph-g.yo-g.dy;
  //alert("u_pos_of():xl_x_xr,yo_y_yu="+g.xl+"_"+g.x+"_"+g.xr+","+g.yo+"_"+g.y+"_"+g.yu+" dxy="+g.dx+"_"+g.dy);
  return g;
}

var u_info_ticker__nr=-1;
var u_info_ticker__old=99;
var u_info_ticker__x=0;
function u_info_ticker()  {
   u_info_ticker__x=u_info_ticker__nr+1;
   u_info_off(this);
   $(".u_img_info").each(function (i) {
      if (i==u_info_ticker__x) {
        u_info_ticker__old=u_info_ticker__x;
        u_info_on(this);
        u_info_ticker__nr++;
      }
      u_o("i="+i+" tick="+u_info_ticker__nr);
   });
   if (u_info_ticker__x!=u_info_ticker__nr) {u_info_ticker__nr=-1;}
   window.setTimeout('u_info_ticker()',1000);
}
function u_img_info_on(t) {
      var p=u_xy_of(t);dx=t.width; dy=t.height;
      $("#u_img_info").css({ "top" : p[1], "left" : p[0]
                        , "width" : dx, "height" : dy
                        ,"display" : "block"});//.text("p="+p[0]+","+p[1]+" s="+dx+","+dy);
}
function u_img_info_off(t) { $("#u_img_info").css("display","none"); }
var u_info_onX__close_=1;
function u_info_onX(t) {
      u_info_onX__close_=0;
      //var p=u_xy_of(t);
      var g=u_geometry(t); 
      var ox=Math.min(g.dx/5,10);
      var oy=Math.min(g.dy/5,10);
      var h=150; var w=200;
      var le=g.x+g.dx-ox; var clx="l"; var cly="u";
      if (le+w>g.pxo+g.pw>0  && g.x+ox-w>0) { le=g.x+ox-w; clx="r";}
      var to=g.y-h+oy;
      if (to-window.pageYOffset<0) { to=g.y+g.dy-ox; }
      //$("#u_info");
      //var h=document.getElementById("u_info").offsetHeight;
      //var w=document.getElementById("u_info").offsetWidth;
      if (t.title) {var info=t.title;} else {var info="sorry, no info found.";} 
      $("#u_info").css({ "top" : to, "left" : le ,"display" : "block"}).attr("class","u_info_"+cly+clx).html(info);
      u_o("Xo="+window.pageXOffset
                               +" Yo="+window.pageYOffset
                               +" xl_x_xr,yo_y_yu="+g.xl+"_"+g.x+"_"+g.xr+","+g.yo+"_"+g.y+"_"+g.yu
                               +" dxy="+g.dx+"_"+g.dy
                               +" w="+w
                               +" h="+h);
/**/
}
function u_info_offX(t) { if (u_info_onX__close_==1) {$("#u_info").css("display","none");} }
function u_info_outX(t) { 
  u_info_onX__close_=1; //evt von anderen vor timeout wieder 0 gesetzt
  window.setTimeout('u_info_offX()',100);
}
var u_info_on__close_=1;
var u_info_on__id="-";
function u_info_on(t) {
      u_info_on__close_=0;
      //var p=u_xy_of(t);
      var g=u_geometry(t); 
      var ox=Math.min(g.dx/5,10);
      var oy=Math.min(g.dy/5,10);
      var h=150; var w=200;
      var le=g.x+g.dx-ox; var clx="l"; var cly="u";
      if (le+w>g.pxo+g.pw>0  && g.x+ox-w>g.pxo) { le=g.x+ox-w; clx="r";}
      var to=g.y-h+oy;
      if (to<g.pyo && g.y+g.dy-oy>g.pyo) { to=g.y+g.dy-oy; cly="o"; } //&& g.y+g.dy-ox>0
      //$("#u_info");
      //var h=document.getElementById("u_info").offsetHeight;
      //var w=document.getElementById("u_info").offsetWidth;
      if (t.title) {var info=t.title;} else {var info="sorry, no info found.";} 
      var id=t.id+"b";
      if (id!=u_info_on__id) {$(".u_info_block").css("display","none");}
      u_info_on__id=id;
      $("#"+id).css({ "top" : to, "left" : le ,"display" : "block"})
               .attr("class","u_info_"+cly+clx+" u_info_block");//.html(info);
      u_o("Xo="+g.pxo
                               +" Yo="+g.pyo
                               +" xl_x_xr,yo_y_yu="+g.xl+"_"+g.x+"_"+g.xr+","+g.yo+"_"+g.y+"_"+g.yu
                               +" dxy="+g.dx+"_"+g.dy
                               +" w="+w
                               +" h="+h);/**/
}
function u_info_off(t) { if (u_info_on__close_==1) {$(".u_info_block").css("display","none");} }
function u_info_out(t) { 
  u_info_on__close_=1; //evt von anderen vor timeout wieder 0 gesetzt
  window.setTimeout('u_info_off()',100);
}
//var u_info__first_=true;
$(document).ready(function(){
  $(".u_img_info").mouseover(function(){u_img_info_on(this);});
  $("#u_img_info").mouseout(function(){u_img_info_off(this);});
  $("#u_info").mouseover(function(){u_info_onX__close_=0;});
  $(".u_info").mouseover(function(){u_info_onX(this);});
  $("#u_info,.u_info").mouseout(function(){u_info_outX(this);});
  $(".u_info_link").mouseover(function(){u_info_on(this);});
  $(".u_info_block,.u_info_link").mouseout(function(){u_info_out(this);});
  $(".u_info_block").mouseover(function(){u_info_on__close_=0;});
   u_o("start_"+u_info_ticker__nr);
  //window.setTimeout('u_info_ticker()',1000);
});
////
// set boolean button
/*function u_info(tag_id,text,options) {
  $("#"+tag_id).append("<div id=\"u_info_"+u_info_box_nr+"\" class=\"u_info\">"
                      +"<div id=\"u_info_"+u_info_box_nr+"_c\" class=\"u_info_c\" "
                      +"onclick=\"$('#"+tag_id+"b').show()\">&#160;xx</div>\n"
                      +"<div id=\"u_info_"+u_info_box_nr+"_cb\" class=\"u_info_cb\""
                      +"onclick=\"$('#"+tag_id+"').hide()\">"+text+"</div>\n"
                      +"</div>\n");
   u_info_box_nr++;//global counter
}*/

