var selId=null;
var selTab=null;
var appMode="norm";

function hideHelpSystem(){
  var helpsystem=dojo.byId("helpsystem");
  dojo.style(helpsystem,"visibility","hidden");
}

function AdBox(show){
  var adbox=dojo.byId("adbox");
  dojo.style(adbox,"visibility",show==true?"visible":"hidden");
  dojo.style(adbox,"display",show==true?"block":"none");

  //reload adsense
  if (show)
    adbox.innerHTML=adbox.innerHTML;
}

function showHelpSystem(){
  if (changeMode("norm")==false)
    return;

  AdBox(false);
  selectRec(null);
  doc("helpsystem");
  var helpsystem=dojo.byId("helpsystem");
  dojo.style(helpsystem,"visibility","visible");
}

function fillRecForm(id,name,url){
  dojo.byId("hiddenBmId").value=id;
  dojo.byId("inputBmName").value=name;
  dojo.byId("inputBmUrl").value=url;
  check1BMAnim("ok");
  var sel=dojo.byId("prev_version");
  if (sel!=null) sel.selectedIndex=0;
  tab(selTab!=null?selTab:"preview");
}

function showRec(id,name,url){
  var fadeArgs1={node:"record",duration:500,easing:dojo.fx.easing.expoIn};
  var fadeArgs2={node:"tabcomponent",duration:500,easing:dojo.fx.easing.expoIn};
  var fadeArgs3={node:"adbox",duration:500,easing:dojo.fx.easing.expoIn};

  // is it a new record?
  var fadein=dojo.fadeIn(fadeArgs1);
  if (id!="-1")
    fadein=dojo.fx.combine([fadein,dojo.fadeIn(fadeArgs2),dojo.fadeIn(fadeArgs3)]);
  dojo.connect(fadein, "onEnd", function(){hideHelpSystem();AdBox(true);});

  // is record div visible?
  var rec=dojo.byId("record");
  var visible=dojo.style(rec,"visibility");
  if(visible=="hidden"){
    dojo.style(rec,"visibility","visible");
    rec=dojo.byId("tabcomponent");
    dojo.style(rec,"visibility","visible");
    fillRecForm(id,name,url);
    fadein.play();
  } else
  {
    var fadeout=dojo.fx.combine([dojo.fadeOut(fadeArgs1),dojo.fadeOut(fadeArgs2),dojo.fadeOut(fadeArgs3)]);
    dojo.connect(fadeout,"onEnd",function(){fillRecForm(id,name,url);});
    dojo.fx.chain([fadeout,fadein]).play();
  }
}

function clearFormRecord(){
  var f=dojo.byId("formRecord");
  if (f!=null)
    f.reset();
}

function hideRec_end(){
  var record=dojo.byId("record");
  dojo.style(record,"visibility","hidden");
  var tabs=dojo.byId("tabcomponent");
  dojo.style(tabs,"visibility","hidden");
  clearFormRecord();
}

function hideRec(){
  var fadeArgs1={node:"record",duration:500,easing:dojo.fx.easing.expoOut};
  var fadeArgs2={node:"tabcomponent",duration:500,easing:dojo.fx.easing.expoOut};
  var fadeout=dojo.fx.combine([dojo.fadeOut(fadeArgs1),dojo.fadeOut(fadeArgs2)]);
  dojo.connect(fadeout,"onEnd",function(){hideRec_end();});
  fadeout.play();
}

function nav2id(node){
  return node.id.substr(6);
}

function unselectRec(){
  // if a node is selected then deselect it
  if (selId!=null){
    selRecNode=dojo.byId("navrec"+selId);
    if (selRecNode==null)
      selRecNode=dojo.byId("nairec"+selId);
    if (selRecNode!=null)
      dojo.style(selRecNode, "background", "#fff");
  }
  selId=null;
}

function selectRec(id){
  unselectRec();
  // select current node
  selId=id;
  selRecNode=dojo.byId("navrec"+id);
  if (selRecNode==null)
    selRecNode=dojo.byId("nairec"+id);
  if (selRecNode==null){
    selId=null;
    hideRec();
    return;
  }
  dojo.style(selRecNode, "background", "#eef");
}

function loadRec(id){
  if (!changeMode("norm"))
    return;
  selectRec(id);

  // make a request
  dojo.xhrGet({
    url:"controller.php?request=dataloadrecord&recid="+id,
    handleAs:"json",
    preventCache:true,
    load:function(responseObject){
      showRec(id, responseObject.name, responseObject.url);
      BMAnim(id, responseObject.status);
    },
    error:function(error){
      alert("Error during \"loadRec\": "+error);
    }
  });
}

function showAdmin(type){
  var recid=selId;
  var revid=dojo.byId("adminrev").value;
  var targetNode=dojo.byId("adminview");

  dojo.xhrGet({
    url:"controller.php?request=reqadmin&funct="+type+"&recid="+recid+"&revid="+revid,
    handleAs:"text",
    preventCache:true,
    load:function(data){
      targetNode.innerHTML=data;
    },
    error:function(error){
      targetNode.innerHTML="Error during \"showAdmin\": "+error;
    }
  });
}

function check1BMAnim(anim){
  var chbut=dojo.byId("buttonCheck1Img");
  anim=anim.toLowerCase().substr(0,2);
  if (anim=="an") chbut.src=but_chk_anm.src;
  if (anim=="ok") chbut.src=but_chk_sta.src;
  if (anim=="di") chbut.src=but_chk_sta.src;
  if (anim=="er") chbut.src=but_chk_err.src;
}

function BMAnim(id, anim){
  var bm=dojo.byId("navimg"+id);
  if (bm==null)
    return;
  anim=anim.toLowerCase().substr(0,2);
  if (anim=="an") bm.src=bm_anim.src;
  //   AJ status       JSON status
  if ((anim=="ok") || (anim==""))  bm.src=bm_image.src;
  if ((anim=="di") || (anim=="d")) bm.src=bm_diff.src;
  if ((anim=="er") || (anim=="e")) bm.src=bm_error.src;
  if (                (anim=="i")) bm.src=bm_inact.src;
}

function check1BM(id){
  // if check button is clicked
  if (id==-1)
    id=selId;

  if ((selId!=null) && (selId==id))
    check1BMAnim("anim");
  BMAnim(id, "anim");

  dojo.xhrGet({
    url:"controller.php?request=datacheck1BM&recid="+id,
    handleAs:"text",
    preventCache:true,
    load:function(data){
      BMAnim(id, data);
      if ((selId!=null) && (selId==id)){
        check1BMAnim(data);
        loadRec(selId);
        tab("preview");
      }
    },
    error:function(error){
      check1BMAnim("error");
      alert("error during request \"check1BM\": "+error);
    }
  });
}

function clickCheckAll(){
  var divNav=dojo.byId("bookmarklist");
  var divNavP=divNav.getElementsByTagName("div");
  dojo.forEach(divNavP, function(p){
    var id=nav2id(p);
    if (p.id.substr(0,3)=="nav"){
      check1BM(id);
    }
  });
}

function changeMode(mode, force){
  if (mode==appMode)
    return true;

  if ( (appMode=="edit") && !(force==true) )
      if (confirm("Cancel edit?")==false)
        return false;

  if (mode=="edit"){
    dojo.style(dojo.byId("inputBmName"),{"backgroundColor":"#FFF" });
    dojo.style(dojo.byId("inputBmUrl"),{"backgroundColor":"#FFF" });
    dojo.style(dojo.byId("buttonCheck1"),{"display":"none" });
    dojo.style(dojo.byId("buttonBmOk"),{"display":"inline" });
    dojo.style(dojo.byId("buttonBmCn"),{"display":"inline" });
  } else
  if (mode=="norm"){
    dojo.style(dojo.byId("inputBmName"),{"backgroundColor": "#EEE" });
    dojo.style(dojo.byId("inputBmUrl"),{"backgroundColor": "#EEE" });
    dojo.style(dojo.byId("buttonCheck1"),{"display":"inline" });
    dojo.style(dojo.byId("buttonBmOk"),{"display":"none" });
    dojo.style(dojo.byId("buttonBmCn"),{"display":"none" });
  } else
    alert("wrong mode");
  appMode=mode;
  return true;
}

function updNav(){
  var targetNode=dojo.byId("bookmarklist");
  var id=selId==null?-1:selId;
  dojo.xhrGet({
    url:"controller.php?request=reqnav&recid="+id,
    handleAs:"text",
    preventCache:true,
    load:function(data){
      targetNode.innerHTML=data;
      if (id!=-1)
        loadRec(id);
    },
    error:function(error){
      targetNode.innerHTML="Error during \"updNav\": "+error;
    }
  });
}

function updNavName(id, name){
  node=dojo.byId("navtitle"+id);
  if (node==null)
    updNav();
  else{
    node.innerHTML=name;
  }
}

function saveRec(){
  var id=dojo.byId("hiddenBmId").value;
  var name=dojo.byId("inputBmName").value;
  dojo.xhrPost({
    url:"controller.php?request=datasaverecord&recid="+id,
    form:"formRecord",
    load:function(ret_id){
      ret_id<0?selId=null:selId=ret_id;
      updNavName(id, name);
      if (ret_id==-1)
        alert("An error occoured while saving this record.");
      else
      if (ret_id<-1)
        alert("The number of active records exceeds the limit for a free account. Please upgrade to a pro account.")
      else 
        loadRec(ret_id);
    },
    error:function(error){
      alert("Error during \"saveRec\": "+error);
    }
  });
}

function clickBm(commit){
  changeMode("norm", true);
  if (commit==false){
    // cancel was pressed
    if (selId!=null) 
      loadRec(selId);
    else selectRec(null);
  } else{
    saveRec(selId);
  }
}

function clickNewBm(){
  unselectRec();
  if (!changeMode("edit"))
    return;
  showRec("-1", "", "http://");
  dojo.byId("inputBmName").focus();
}

function remRec(id){
  if (id==selId)
    selId=null;
  dojo.xhrGet({
    url:"controller.php?request=dataremrecord&recid="+id,
    handleAs:"text",
    preventCache:true,
    load:function(data){
      if (data=="OK"){
        selectRec(null);
        updNav();
      } else
        alert("Error during \"remRec\"");
    },
    error:function(error){
      alert("Error during \"remRec\": "+error);
    }
  });
}

function clickRemBM(){
  if (selId==null)
    return;
  if (!changeMode("norm"))
    return;
  remRec(selId);
}

function switchStatus(){
  dojo.xhrGet({
    url:"controller.php?request=dataswitchstatus&recid="+selId,
    handleAs:"text",
    preventCache:true,
    load:function(data){
      if (data.substr(0,2)!="OK") {
        if (data.substr(0,1)=='-')
          alert("The number of active records exceeds the limit for a free account. Please upgrade to a pro account.")
        else
          alert("Error during \"switchStatus\"");
      } else
        BMAnim(selId, data.substr(3,1));
      tab("status");
    },
    error:function(error){
      alert("Error during \"switchStatus\": "+error);
    }
  });
}

function switchJS(ask){
  if (ask==true) {
    var c = confirm("Do you really want to activate javascript for this bookmark?\n\nSome pages cause problems when JavaScript is active as they are not designed to be embedded.");
    if (c == false)
      return;
  }

  dojo.xhrGet({
    url:"controller.php?request=dataswitchjs&recid="+selId,
    handleAs:"text",
    preventCache:true,
    load:function(data){
      if (data.substr(0,2)!="OK")
        alert("Error during \"switchJS\"");
      tab("status");
    },
    error:function(error){
      alert("Error during \"switchJS\": "+error);
    }
  });
}

function switchAlert(){
  dojo.xhrGet({
    url:"controller.php?request=dataswitchalert&recid="+selId,
    handleAs:"text",
    preventCache:true,
    load:function(data){
      if (data.substr(0,2)!="OK")
        alert("Error during \"switchAlert\"");
      tab("status");
    },
    error:function(error){
      alert("Error during \"switchAlert\": "+error);
    }
  });
}

function resetBM(){
  var c = confirm("Do you really want to reset this bookmark?");
  if (c == false)
    return;

  dojo.xhrGet({
    url:"controller.php?request=dataresetrecord&recid="+selId,
    handleAs:"text",
    preventCache:true,
    load:function(data){
      if (data!="OK")
        alert("Error during \"resetBM\"");
      tab("status");
    },
    error:function(error){
      alert("Error during \"resetBM\": "+error);
    }
  });
}

function doc(name) {
  targetNode=dojo.byId("helpsystem_content");
  dojo.xhrGet({
    url:"controller.php?request=reqdoc&recid=-1&doc="+name,
    handleAs:"text",
    load:function(data){
      targetNode.innerHTML=data;
    },
    error:function(error){
      alert("error during loading "+name);
    }
  });
}

function selectTab(name) {
  // unselect tab
  if (selTab!=null) {
    t=dojo.byId("tab"+selTab);
    if (t!=null)
      t.className="";
  }

  // select tab
  if (name=="")
    return;
  t=dojo.byId("tab"+name);
  if (t!=null)
    t.className="tabsel";
  selTab=name;
}

function tab(name) {
  if (selTab!=name) {
    selectTab(name);
  }

  var params="";
  if (name=="preview"){
    var sel=dojo.byId("prev_version");
    if (sel!=null) {
      var comboValue=sel.options[sel.selectedIndex].value;
      params="&sel="+comboValue;
    }
  }
  targetNode=dojo.byId("tabcontent");
  dojo.xhrGet({
    url:"controller.php?request=tab"+name+"&recid="+selId+params,
    handleAs:"text",
    load:function(data){
      targetNode.innerHTML=data;
    },
    error:function(error){
      alert("error during loading "+name);
    }
  });	
}

function showsubdoc(name) {
  var doc=dojo.byId("doc");
  if (doc==null) return;
  var docSubs=doc.getElementsByTagName("div");
  for (var i=1;i<docSubs.length;i++)
    dojo.style(docSubs[i],"display","none");

  var docSubNew=dojo.byId("doc_"+name);
  if (docSubNew==null) return;
  dojo.style(docSubNew,"display","block");
}

// initialize Images
if (document.images){
  var bm_image=new Image();
  bm_image.src="images/bm/item_sta.gif";
  var bm_anim=new Image();
  bm_anim.src="images/bm/item_anm.gif";
  var bm_error=new Image();
  bm_error.src="images/bm/item_err.gif";
  var bm_diff=new Image();
  bm_diff.src="images/bm/item_dif.gif";
  var bm_inact=new Image();
  bm_inact.src="images/bm/item_dea.gif";

  var but_chk_sta=new Image();
  but_chk_sta.src="images/buttons/chk1_sta_col.gif";
  var but_chk_anm=new Image();
  but_chk_anm.src="images/buttons/chk1_anm.gif";
  var but_chk_err=new Image();
  but_chk_err.src="images/buttons/chk1_err.gif";
}
