
var loaderImgPath = '/img/loading_proj.gif';
var imagesDir = '/images/projects/';
var loading = false;
var styleNormal = 'btn';
var styleDisabled = 'btn-dis';
var TIMER = 10; // interval refreshe
var STEP = 0.1;  // velikost zmeny pruhlednosti pri jednom kroku
var DELAY = 800;
var loader;
var projectBox;

//-----------------------------------------------------------------------------

function projectInit(){
  projectBox = getObj('project-detail');
  
  loader = document.createElement('div');
  loader.setAttribute('id','loader');
  var loaderImg = document.createElement('img');
  loaderImg.setAttribute('alt','čekejte prosím');
  loaderImg.setAttribute('src', loaderImgPath);
  loader.appendChild(loaderImg);
  loader.style.display = 'none';
  getObj('content').appendChild(loader);
}

//-----------------------------------------------------------------------------
// open window 

  function openWindow(url){
    wasOpen  = false;
    win = window.open(url);    
    return (typeof(win)=='object')?true:false;
  }

//-----------------------------------------------------------------------------
// vrati handler instance podle id 

function getObj(id) {
   if(Boolean(document.getElementById))
      return document.getElementById(id);
   else if(Boolean(document.all))
      return eval('document.all.'+id);
   else
      return eval('document.'+id);
}

//----------------------------------------------------------------------------- 
// potvrzovaci dialog

function confirm_delete_item(task, query){
  if(confirm(task)){
    location.href=query;
  }
}

//-----------------------------------------------------------------------------
// kontrola dostatecneho vyplneni formulare (inputy oznacene rel="required")

function validateForm(form){
  var submit;
  var dis=false;
  var inputs = form.getElementsByTagName('input');
  for(var i=0; i < inputs.length; i++) {
    if(inputs[i].type=='submit') submit=inputs[i];
    if(inputs[i].getAttribute('rel')=='required'){
      if(inputs[i].value==''){
        dis=true;
      }
    } 
    else if(inputs[i].getAttribute('rel')=='req-email'){
      if(wrong_mail_address(inputs[i].value)){
        dis=true;
      }
    }
  }
  
  var inputs = form.getElementsByTagName('textarea');
  for(var i=0; i < inputs.length; i++) {
    if(inputs[i].getAttribute('rel')=='required'){
      if(inputs[i].value==''){
        dis=true;
      }
    } 
  }
  
  submit.disabled=dis;
  submit.className=dis?styleDisabled:styleNormal;
}

//----------------------------------------------------------------------------
// kontrola tvaru emailove adresy

function wrong_mail_address(adresa){
  var re = /^[_a-zA-Z0-9\.\-]+@[_a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,4}$/;
  return re.test(adresa) == 0;
}

//----------------------------------------------------------------------------
// zobrazeni submenu

function showMenu(id){
  var menu = getObj(id);
  menu.style.display='block';
}

// ----------------------------------------------------------------------------
// zobrazeni loaderu (working)

function displayLoader(){
  setOpacity(loader, 0);
  loader.style.display = 'block';
  elementEffect(loader, 'appear');
}

//-----------------------------------------------------------------------------
// skryti loaderu
function hideLoader(){
  loader.style.display = 'none';
}

// ----------------------------------------------------------------------------
// funkce zjisti, zda je promena definovana

function isset(varname)  {
  if(typeof( window[ varname ] ) != "undefined") return true;
  else return false;
}

// ----------------------------------------------------------------------------
// funkce nastavi pruhlednost danemu elementu

function setOpacity(obj, level) {
  obj.style.opacity = level;
  obj.style.MozOpacity = level;
  obj.style.KhtmlOpacity = level;
  obj.style.filter = "alpha(opacity=" + (level * 100) + ");";
  obj.alpha = level;
}

// ----------------------------------------------------------------------------
// potlaceni nahledu v timeline

function fadeOutThumb(obj, override){
  if((obj.id != 'timeline-'+activeProject) || override){
    obj.className='timeline-project-box';
  }
}

// ----------------------------------------------------------------------------
// zvyrazneni nahledu v timeline

function highlightThumb(obj){
  obj.className='timeline-project-box-active';
}

//-----------------------------------------------------------------------------
// obsluha fade-in, fade-out efektu

function elementEffect(obj, effect){
  clearInterval(obj.timer);
  
  if(effect=='hide'){
    obj.alpha = 1;
    obj.timer = setInterval(function(){fadeElement(obj, -1, 0)}, TIMER);  
  }
  else{
    obj.alpha = 0;
    obj.timer = setInterval(function(){fadeElement(obj, 1, 1)}, TIMER);
  }
}

// ----------------------------------------------------------------------------
// fade efekt

function fadeElement(obj, dir, finalOpacity){
  var value = obj.alpha;
  value += STEP * dir;
  setOpacity(obj, value);

  if(value >= finalOpacity && dir > 0){
    clearInterval(obj.timer);
    setOpacity(obj, finalOpacity);
  } 
  else if(value <= finalOpacity && dir < 0){
    clearInterval(obj.timer);
    //obj.style.visibility = 'hidden';
    setOpacity(obj, finalOpacity);
  }
}

var updated=false;

// ----------------------------------------------------------------------------
// nacteni dat projektu

function loadProjectAfterMenu(projectId, categoryId){
  if(!loading){    
    loading=true;
    
    
    // zruseni .active polozky v menu
    getObj('menu-' + activeProject).className='';
    
    fadeOutThumb(getObj('timeline-' + activeProject), true);
    highlightThumb(getObj('timeline-' + projectId));
    updated=true;  // - uz je upravene, menusi se v loadProject
    
    activeProject = projectId;
    
    //rozbaleni menu
    if(categoryId != activeCategory){
      var obj = getObj('m' + categoryId + '-header');
      processClick(obj);
      activeCategory = categoryId;
      var timer = setTimeout(function(){loadProject(projectId, categoryId);}, 500);
    }
    else
      loadProject(projectId, categoryId);
  }
}

// ----------------------------------------------------------------------------
// nacteni dat projektu

function loadProject(projectId, categoryId){
  if(!loading || updated){
    loading=true;
    
    // update projektu
    send_xmlhttprequest(recieveProjectData, 'GET', '/inc/get_project_data.php?project_id='+projectId);
    elementEffect(projectBox, 'hide');
    displayLoader();
    
    // zruseni .active polozky v menu
    getObj('menu-' + activeProject).className='';
    
    // zvyrazneni projektu ve slideru
    if(!updated){ 
      fadeOutThumb(getObj('timeline-' + activeProject), true);
      highlightThumb(getObj('timeline-' + projectId));
      activeProject = projectId;
    }   
    
    updated=false;
    
    //rozbaleni menu
    if(categoryId != activeCategory){
      var obj = getObj('m' + categoryId + '-header');
      processClick(obj);
      activeCategory = categoryId;
    }
  
  }
}

function nl2br(str){ 
  return str.replace(/\n/g, '<br />');
}

// ----------------------------------------------------------------------------
// update udaju projektu, efekt fade-in

function updateProjectData(data){

  // title, description
  getObj('project-title').innerHTML = data[0];
  getObj('project-desc').innerHTML = nl2br(data[1]);
  
  // hlavni obrazek, alt
  if(!data[2])
    getObj('project-image-box').style.visibility = 'hidden';
  else{
    getObj('project-image').src = imagesDir+'m_pic'+data[2]+'.jpg';
    getObj('project-image').alt =  data[3];
    getObj('project-image-desc').innerHTML = data[3];
    getObj('project-image-href').href = imagesDir+'pic'+data[2]+'.jpg';
    getObj('project-image-href').title = data[3];
    getObj('project-image-box').style.visibility = 'visible';
  }
  
  // skryte obrazky (anchors)
  
  var hiddenPhotoBox = getObj('project-hidden-images');
  var anchors = hiddenPhotoBox.getElementsByTagName('a');
  var k = anchors.length;
  for(var i=k-1; i>=0; i--){
    anchors[i].parentNode.removeChild(anchors[i]);
  }
  
  var IDs = data[4];
  var ALTs = data[5];
  var anchor;
  for(var i=0; i<IDs.length; i++){
    anchor = document.createElement('a');
    anchor.setAttribute('href', imagesDir+'pic'+IDs[i]+'.jpg');
    anchor.setAttribute('rel', 'lightbox[roadtrip]');
    anchor.setAttribute('title', ALTs[i]);
    hiddenPhotoBox.appendChild(anchor);
  }
  
  // skryti loaderu
  hideLoader();
    
  // efekt projektu
  setOpacity(projectBox, 0);
    
  clearInterval(projectBox.timer);
  elementEffect(projectBox, 'appear');  
    
  getObj('menu-' + activeProject).className = 'active';
  
  var pos = IDsArray.indexOf(activeProject) * projectBoxWidth;
  scrollspeed=0;
  goToPosition(pos + projectBoxWidth);
  
  
}

//-----------------------------------------------------------------------------
// obsluha XML odpovedi

function recieveProjectData(xmlhttp){
  if(xmlhttp.readyState == 4) {
    //alert(xmlhttp.responseText);
    var node = xmlhttp.responseXML.getElementsByTagName('project');
    for (var i=0; i < node.length; i++) {
        
        var projectTitle = node[i].getElementsByTagName('title').item(0).firstChild.data;
        var projectDesc =  node[i].getElementsByTagName('description').item(0).firstChild.data;
        var mainphoto = node[i].getElementsByTagName('mainphoto');
        var mainphotoID;
        var mainphotoAlt;        
        try{
          mainphotoID = mainphoto.item(0).firstChild.data;
          mainphotoAlt = mainphoto.item(0).getAttribute('alt');
        }
        catch(e){}
        
        var hiddenPhotos = node[i].getElementsByTagName('photo');
        var hiddenPhotosIDs = new Array();
        var hiddenPhotosALTs = new Array();
        for (var j=0; j < hiddenPhotos.length; j++) {
          hiddenPhotosIDs[j] = hiddenPhotos[j].firstChild.data;
          hiddenPhotosALTs[j] = hiddenPhotos[j].getAttribute('alt');
        }
    }
    var data = new Array(projectTitle, projectDesc, mainphotoID, mainphotoAlt, hiddenPhotosIDs, hiddenPhotosALTs);
    var timer = setTimeout(function(){updateProjectData(data);}, DELAY);
    loading = false;   
  }
}


/** odeslání XMLHttp požadavku
* @param function obsluha funkce zajišťující obsluhu při změně stavu požadavku, dostane parametr s XMLHttp objektem
* @param string method GET|POST|...
* @param string url URL požadavku
* @param string [content] tělo zprávy
* @param array [headers] pole předaných hlaviček ve tvaru { 'hlavička': 'obsah' }
* @return bool true v případě úspěchu, false jinak
* @copyright Jakub Vrána, http://php.vrana.cz
*/
function send_xmlhttprequest(obsluha, method, url, content, headers) {
    var xmlhttp = (window.XMLHttpRequest ? new XMLHttpRequest : (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false));
    if (!xmlhttp) {
        return false;
    }
    xmlhttp.open(method, url);
    xmlhttp.onreadystatechange = function() {
        obsluha(xmlhttp);
    };
    if (headers) {
        for (var key in headers) {
            xmlhttp.setRequestHeader(key, headers[key]);
        }
    }
    xmlhttp.send(content);
    return true;
}
