// window manager v 1.0
var IE = document.all?true:false;
if (!IE) document.captureEvents(Event.MOUSEMOVE)
document.onmousemove = wmWindowMove;
document.onmouseup = function(){ wmSelectedWindow = null; };

var wmCreatedWindows = new Array();
var wmSelectedWindow = null;
var mCoords = undefined;
var mDocumentPosition = {x:0, y:0};
var mLastClick = {x:100, y:100};
var mScreenLastClick = {x:100, y:100};

var xxdiv = null;
var yydiv = null;

// Vytvori Okno a zkopiruje do nej obsah node
function wmCreateWindowFromNode(name,node,title){
  
   w = wmCreateWindow(name,title);
   wbody = w.wbody;

   // pokud jde o objek, poslal jsem mu pointer na node
   if(typeof(node) == 'object'){
      n = node;   // staci jen preznacit, uz mam odkaz
      wbody.appendChild(n); // // strcim ho tam  
   } else { // jinak je to asi retezec
      n = document.getElementById(node);  // musim si ho najit :)
      wbody.appendChild(n.cloneNode(true)); // vytvorim kopii 
   }

   document.body.appendChild(w);

   wmMoveToMousePosition(w); // presun na misto kliknuti

   return w;
}

// Vytvori Okno s formularem a zkopiruje do nej obsah node
// name - jmeno okna [string]
// node - jmeno elementu ktery se do okna zkopiruje [string]
// title - nadpis okna [string]
// par - parametry formulare [ object/array ]
function wmCreateWindowWithForm(name,node,title,par){

   def = {'action':'','enctype':'multipart/form-data','method':'post','onsubmit':'this.submit()'};
   var mform = document.createElement('form');

   if(par == undefined) par = def;
   else for(i in def) if(par[i] == undefined) mform[i]=def[i];  else mform[i] = par[i];

   //alert(typeof(node));
   if(typeof(node) == 'object'){
      for(i in node ) wmCloneAndInsertNode(mform,node[i]);
   } else wmCloneAndInsertNode(mform,node);

   w = wmCreateWindowFromNode(name,mform,title);
   w.form = mform;

   return w;

}

// najde dany element (node), zkopiruje a vlozi do elementu (e)
function wmCloneAndInsertNode(e,node){
   n = document.getElementById(node);  // musim si ho najit :)
   e.appendChild(clone = n.cloneNode(true)); // vytvorim kopii
   clone.style.display = 'block';
}

// Vytvori Okno 
// name - jmeno okna [string]
// title - nadpis okna [string]
//nobuttons - nevypisovat tlacitka [int]
function wmCreateWindow(name,title,nobuttons){

   var w = document.createElement('div');
   w.className = 'wmWindow myaccwindowmenu';
   
   /*  w.style.left = '100px';  w.style.top = '100px';   */
   
   // hlavicka okna
   wheader = document.createElement('div');

   wheader.className="header";
   wheader.innerHTML=title;
   ;wheader.style.cursor = 'move';
   wheader.onmousedown = function(){ wmSelectedWindow = w; };
   wheader.onmouseup = function(){ wmSelectedWindow = null; };

   w.appendChild(wheader);
   w.wheader = wheader;
   
   wbody  = document.createElement('div');
   w.appendChild(wbody);
   w.wbody = wbody;
   
   wmCreatedWindows[name] = w;
   
   if(nobuttons == undefined) nobuttons = 0;
   if(nobuttons == 0){
      wfooter = document.createElement('div');
      wfooter.className = 'footer';
      w.appendChild(wfooter);
       
      // cancel button
      cbutton =  wmCreateHTMLButton({'value':'Zrušit'});
      cbutton.onclick = function(){ wmWindowHide(w); };
      wfooter.appendChild(cbutton);
      w.cbutton = cbutton;
   
      // submitbutton
      sbutton =  wmCreateHTMLButton({'value':'Potvrdit'});
      //sbutton.onclick = function(){ alert(sbutton.value); };
      sbutton.onclick = function(){ w.form.submit(); };
      //sbutton.onclick = function(){ alert(w.form.action; };
      wfooter.appendChild(sbutton);
      sbutton.window = w;
      w.sbutton = sbutton;
   }
   return w;
}

function wmSetSubmitFunction(w,f,e){
    if(w.sbutton){
       if(e){  // eval
          w.sbutton.onclick = function() { eval(f); };
       }else {
         w.sbutton.onclick = f;
       } 
    }
}

function wmSetFormValues(w,par){
    if(w.form){
       for(i in par){
          //alert(i+' = '+par[i]);
          if(w.form.elements[i]){  // element existuje             
             w.form.elements[i].value = par[i];
          }else {  //neexistuje
            wmFormAddInput(w,i,par[i]); // vytvorim 
          }
       }
    }
}

// vytvori hidden input
function wmFormAddInput(w,name,value){
   if(w.form){
      var ra = document.createElement('input');
      ra.name = name;
      ra.type = 'hidden';
      ra.value = value;
      w.form.appendChild(ra)
   }
} 


// vytvori element daneho typu a danych parametru
function wmCreateHTMLElement(type,par){

  element = document.createElement(type);
  if(element){
     for(i in par) element[i] = par[i];
  }

  return element;
}

// vytvori element daneho typu a danych parametru
function wmCreateHTMLButton(par){
   button = wmCreateHTMLElement('button',par);
   if(par['value']) button.innerHTML = par['value'];
   return button;
}

// zjistuje, zdali okno existuje
function wmWindowExists(name){

   if(wmCreatedWindows[name] != undefined) return wmCreatedWindows[name];
   else return false;
}

// skryje okno
function wmWindowShow(w){
    w.style.display = 'block';
}

// skryje okno
function wmWindowHide(w){
   w.style.display = 'none';
   if(w.form) w.form.reset();

   //ppr(w.form);
   
}
// skryje okno
function wmHideAllWindows(){
    for(i in wmCreatedWindows) wmCreatedWindows[i].style.display = 'none';
}

// presune okno k pozici mysi
function wmMoveToMousePosition(w){
  if(w){
   
   // velikost stranky
      screenWidth = screen.width;
      screenHeight = document.documentElement.clientHeight;


   // posunu okno na spravnou pozici - lze az po vlozeni do dokumentu
      if(mScreenLastClick.x > (screenWidth / 2)) wPosX = mLastClick.x - w.offsetWidth - 20; else wPosX = mLastClick.x + 20;
      if(mScreenLastClick.y > (screenHeight / 2)) wPosY = mLastClick.y - w.offsetHeight - 20; else wPosY = mLastClick.y + 20;

      
      //alert(mLastClick.x+' | '+docWidth+' | '+w.offsetWidth+' | '+wPosX+'<br>'+mLastClick.y+' | '+docHeight+' | '+w.offsetHeight+' | '+wPosY);  
       //  alert(mLastClick.x+' | '+screenWidth +' | '+w.offsetWidth+' | '+wPosX+'<br>'+mLastClick.y+' | '+screenHeight +' | '+w.offsetHeight+' | '+wPosY);
     w.style.top   = wPosY+'px';
     w.style.left  = wPosX+'px';
           
  }
}

// stara se o pohyb oken
function wmWindowMove(e){

   w = wmSelectedWindow;  // vybrane okno

   var mousePos = getMouseXY(e)
   if(mCoords == undefined) { lCoords = {x:mousePos.x, y:mousePos.y}; }
   else lCoords = mCoords;
   mCoords = {x:mousePos.x, y:mousePos.y}; // soucasna pozice pro pristi pouziti
   
/*
   if(xxdiv == null){
      xxdiv = document.createElement('div');  
      xxdiv.style.relative = 'absolute';
      xxdiv.style.top = '0px';
      xxdiv.style.right = '0px';
      xxdiv.innerHTML = '0px';
      document.body.appendChild(xxdiv);
   }
   
   if(yydiv == null){
      yydiv = document.createElement('div');  
      yydiv.style.relative = 'absolute';
      yydiv.style.top = '20px';
      yydiv.style.right = '0px';
      yydiv.innerHTML = '0px';
      document.body.appendChild(yydiv);   
   }

  
   xxdiv.innerHTML = mousePos.x + ' | ' + mLastClick.x;
   yydiv.innerHTML = mousePos.y + ' | ' + mLastClick.y;
*/

/*
   xxdiv.innerHTML = lCoords.x;
   yydiv.innerHTML = lCoords.y;
*/
   if(w != undefined){
      if(parseInt(w.style.top) >0)  wtop  = parseInt(w.style.top);  else wtop= 0;
      if(parseInt(w.style.left) >0) wleft = parseInt(w.style.left); else wleft = 0;
      w.style.top   = wtop  + (mousePos.y - lCoords.y)+'px';
      w.style.left  = wleft + (mousePos.x - lCoords.x)+'px';
     // w.style.top = parseInt(w.style.top)+5+'px';
   }
 /* */
}

// vraci pozici mysi {x,y}
function getMouseXY(e) {
    if (IE) { // grab the x-y pos.s if browser is IE
      if(document.body){
         tempX = event.clientX + document.body.scrollLeft;   
         tempY = event.clientY + document.body.scrollTop;
      } else {
         tempX = 100;  
         tempY = +00;    
      }
    }
    else {  // grab the x-y pos.s if browser is NS
      tempX = e.pageX;
      tempY = e.pageY;
    }  
    
    if (tempX < 0){tempX = 0;}
    if (tempY < 0){tempY = 0;}  

    iebody=(document.compatMode && document.compatMode != "BackCompat")? document.documentElement : document.body;

    if(navigator.appName == "Microsoft Internet Explorer"){
       dsocleft = document.all? iebody.scrollLeft : pageXOffset;
       dsoctop  = document.all? iebody.scrollTop : pageYOffset; 
    } else {
       dsocleft = 0;
       dsoctop  = 0;     
    }
    adsocleft = document.all? iebody.scrollLeft : pageXOffset;
    adsoctop  = document.all? iebody.scrollTop : pageYOffset; 
    
    mDocumentPosition = {x: adsocleft,y: adsoctop}; 
    mLastClick        = {x: dsocleft + tempX ,y: dsoctop + tempY};
    mScreenLastClick  = {x: tempX ,y: tempY};
    return {x:tempX, y:tempY};
  }
 

 function wmCharCounter(textbox,tmax){

   if(!tmax) tmax = 1000;

   ttext = textbox.value.length;
   if(ttext > tmax) textbox.value = textbox.value.substr(0,tmax);
   ttext = tmax-ttext;
   if(ttext<0) ttext=0;

   ttext = 'Zbývá: '+ttext;

   if(textbox.charcounter){
      textbox.charcounter.innerHTML = ttext;
   } else {
   
      var charbox = document.createElement('div');
      charbox.innerHTML = ttext;
      charbox.style.position = 'relative';

      textbox.parentNode.insertBefore(charbox, textbox.nextSibling);

      charbox.className = 'charCounter';
      textbox.charcounter = charbox;
      
   }
}

