// ***********************************************
// JavaScript Document
// *****


// ***********************************************
// global vars
// **********************************************

// data / params
var gDATAFILE    = "project.txt"; // data file name
var gOPENER      = ""; // opener image
var gPROJECTINFO = ""; // project info link 
var gINFOA       = ""; // headlines
var gINFOB       = ""; // body 1st part
var gINFOC       = ""; // body 2nd part 1
var gINFOD       = ""; // body 2nd part 2

// html tags
var gPARENTID     = "__right__";
var gOPENERID     = "__opener__";
var gVIEWERID     = "__viewer__";
var gSWAP         = gOPENERID; // opener is first image seen
var gIMGOPENERID  = "__imgopener__";
var gVIDEOVIEWERID = "__videoviewer__";
var gIMGVIEWERID  = "__imgviewer__";
var gCAPTIONID    = "__caption__";
// 3 different objects to have the correct display !! (block / a / div / ...)
var gINFOID       = "__info__";      // project info link cell 
var gINFOLINKID   = "__infolink__";  // project info link inner
var gINFOLINKAID  = "__infolinka__"; // project info link (a href)
//var gINFOAID      = "__infoA__";
//var gINFOBID      = "__infoB__";
var gINFOA1ID      = "__infoA1__";
var gINFO1        = "__info1__";
var gINFO2        = "__info2__";
var gINFO2MORE    = "__info2more__";
var gINFO2MOREA   = "__info2morea__";
var gINFO3        = "__info3__";
var gINFO4        = "__info4__";

// special formating
//var gBLACKSPACE   = "-BLACKLINE-"; //black space in headlines
//var gWHITESPACE   = "-WHITELINE-"; //white space in info
//var gBREAKLINE    = "-BREAK-";     //break line for captions

// thumbnail
var gIMAGELIST    = "";      // images array
var gMAXPOS       = 23; // max images in thumbnail
var gIMGDEFAULT   = {"name":"PT","uri":"pt.gif","caption":""};
var gIMG          = new Object();
// ***********************************************



// ***********************************************
// parse data file into variables
// **********************************************
function parsingFile(_file) {

  // ****
  e=load(_file);
    a=e.split('\n\n');
    //alert ('load ok ?');
	
	for(i=0;i<a.length;i++){

    //parameters : opener+link
	  if (i==0) {
      b=a[i].split('\n');
      b.shift(); // drop 1st line
  	    
	    for(j=0;j<b.length;j++){
	  	  //opener
	  	  if (j==0) {
	  	    c=b[j].split(':');
	  	    gOPENER=c[1];  // by name impossible ??? : c=b['OPENER'] !!!!?????
	  	    //alert ('element' + j + ':\n' + c);
		    }
        //link
        if (j==1) {
	  	    c=b[j].split(':');
	  	    gPROJECTINFO=c[1];
        }
      } 
	  }

      //headlines
	  if (i==1) {
	    //correction : span is already with BR (block el)
	    a[i]=a[i].replace(/-BLACKLINE-\n/g,"-BLACKLINE-");
        //
        b=a[i].split('\n');
 	    b.shift(); // drop 1st line
        b=b.join('<BR />');
        //black line treatment
        b=b.replace(/-BLACKLINE--BLACKLINE--BLACKLINE--BLACKLINE-/g,"<span class='Quadruple'>lll</span>"); 
        b=b.replace(/-BLACKLINE--BLACKLINE--BLACKLINE-/g,"<span class='Triple'>lll</span>"); 
        b=b.replace(/-BLACKLINE--BLACKLINE-/g,"<span class='Double'>lll</span>");
        b=b.replace(/-BLACKLINE-/g,"<span>lll</span>");
        //
        gINFOA=b;
	  }

      //info1
	  if (i==2) {
        b=a[i].split('\n');
 	      b.shift(); // drop 1st line
        b=b.join('<BR />');
        b=b.replace(/-LINE-/g,''); //paragraph space treatment
        b=b.replace(/-BLACK--/g,'<span>'); //black text treatment
        b=b.replace(/--BLACK-/g,'</span>');
        //
        gINFOB=b;
	  }
	  
      //info2
	  if (i==3) {
        b=a[i].split('\n');
 	    b.shift(); // drop 1st line
        b=b.join('<BR />');
        b=b.replace(/-LINE-/g,''); //paragraph space treatment
        b=b.replace(/-BLACK--/g,'<span>'); //black text treatment
        b=b.replace(/--BLACK-/g,'</span>');
        //
        c=b.split('-BREAK-<BR />'); // info body in 2 parts ?
 	    if (c[1] == null) { // 1 part
          gINFOC="";
          gINFOD=c[0];
        } else {            // 2 parts
          gINFOC=c[0];
          gINFOD=c[1];
        }      
	  }
	  
    //images list
	  if (i==4) {
      b=a[i].split('\n');
 	    b.shift(); // drop 1st line
  	  // OK ?
	    for(j=0;j<b.length;j++){
	  	  //...
 	      c[j]=b[j].split('  '); // array 2 dim
        //-BR- break line for captions
        //alert('c:'+c[j][2]);
        if (c[j][2] != null) {
          c[j][2]=c[j][2].replace(/-BREAK-/g,'<BR />');
        }
      } 
  	  gIMAGELIST=c;
	  }
	}

//	window.document.getElementById('download').value=t;

}



// ***********************************************
// create thumbnail and dynamic images show
// **********************************************
function IMGManager(){
    // ****
    this.maxpos     = gMAXPOS;
    this.imgdefault = gIMGDEFAULT;
    this.img        = new Object();

    //
    this.parent     = getEl(gPARENTID);
    this.imgopener  = getEl(gIMGOPENERID);
    this.videoviewer = getEl(gVIDEOVIEWERID);
    this.imgviewer  = getEl(gIMGVIEWERID);
    this.caption    = getEl(gCAPTIONID);
    this.info       = getEl(gINFOID);
    this.infolinka  = getEl(gINFOLINKAID);
    this.infolink   = getEl(gINFOLINKID);
    this.infolinka.innerHTML = 'PROJECT INFO';
//    this.infoA      = getEl(gINFOAID);
//    this.infoB      = getEl(gINFOBID);
    this.infoA1      = getEl(gINFOA1ID);

    // **** Project Info values
    this.info1 = getEl(gINFO1);
    this.info2 = getEl(gINFO2);
    this.info2more  = getEl(gINFO2MORE);
    this.info2morea = getEl(gINFO2MOREA);
    this.info2morea.innerHTML = '| more |';
    this.info3 = getEl(gINFO3);
    this.info4 = getEl(gINFO4);
    
    // **** Data
    this.info1.innerHTML = gINFOA; // black space treatment
    this.info2.innerHTML = gINFOB;
    this.info3.innerHTML = gINFOC;
    this.info4.innerHTML = gINFOD;
    
        
    // **** Opener
    //alert('gOPENER:'+gOPENER);
    if(gOPENER != ''){
      this.imgopener.src = gOPENER;
    } else {
      this.imgopener.style.display = "none"; //bug IE7
    }
    
    // **** 1st cell = project info or empty
    //alert("info link : " + gINFOLINK)
    if( gPROJECTINFO != "no" ){
      // ***
      this.infolink.style.display = "block";
    }

    // **** More link if INFO C ?
    //alert('link more: gINFOC=' + gINFOC);
    if( gINFOD != ''){
      // ***
      this.info2more.style.display = "block";
    }

    
    // ***********************************************
    // ***********************************************
    function getThumb(_name){
      // ****
      var rValue = "";

      // ****
      var tmp = _name.split(".");

      // **** attention rafa dans ses oeuvres !!!!
      tmp.push("thumb", tmp.pop());

      // ****
      rValue = tmp.join(".");

      // ****
      return rValue;
    }


    // ***********************************************
    // ***********************************************
    this.Add = function(_pos, _name, _caption){
      // **** position + name + caption / thumbnail images
      _pos = ( isNaN(_pos) ) ? 0 : Math.abs(parseInt(_pos, 10))
      _pos = (_pos > this.maxpos) ? this.maxpos - 1: _pos - 1;

      // ****
      this.img[_pos] = new Object();

      // ****
      this.img[_pos].name    = _name;
      this.img[_pos].caption = _caption;
      this.img[_pos].uri     = _name;
      this.img[_pos].thumb   = getThumb(_name);
    }

    // ***********************************************
    // ***********************************************
    this.preLoad = function(){
      // ****
      var i, iMax = gIMAGELIST.length;

      // ****
      for(i in gIMAGELIST){
        // ****
        //alert(i + " : " + gIMAGELIST[i][0] + ":" + gIMAGELIST[i][1] + ":" + gIMAGELIST[i][2] )
        gIMG[i] = document.createElement("img");
        gIMG[i].src = gIMAGELIST[i][1];
      }
    }


    // ***********************************************
    // ***********************************************
    this.buildHtmlImgBlock = function(_o){
      // ****
         // _o = this.img[i] filled by function Add
      var oDiv  = document.createElement("div");
      var oImg  = document.createElement("img");

      // **** IMAGE
      oImg.src = _o.thumb;
      oImg.name = _o.name;

      // ****
      var __o__ = this;

      // ****
      oImg.onclick = function(){
        //
//        alert("image name : " + this.name)
      }

       // ****
      oImg.onmouseover = function(){
        //
        __o__.imgviewer.src     = _o.name; //this.name; //gIMG[this.name].src;
        __o__.caption.innerHTML = _o.caption;
        showit(gVIEWERID);
        __o__.infolinka.className = ""; // deselection if selected...
      }
      
       // ****
//      oImg.onmouseout = function(){
        //
//        showit(gOPENERID);
//        __o__.imgviewer.src     = "";
//        __o__.caption.innerHTML = "";
//      }

      // ****
      oDiv.appendChild(oImg);

      // ****
      this.parent.appendChild(oDiv);

    }

    // ***********************************************
    // ***********************************************
    this.buildDefaultHtmlImgBlock = function(_o){
      // ****
      var oDiv  = document.createElement("div");

      // ****
      //oDiv.className = "EmptyBlock";

      // ****
      this.parent.appendChild(oDiv);
    }

    // ***********************************************
    // ***********************************************
    this.Show = function(){
      // ****
      if( this.parent != null ){
        // ****
        var i, iMax = this.maxpos;
        var tmp = null;
        
        // **** thumbnail
        for(i = 0; i < iMax; i++){
          // ****
          if(i in this.img){
            // **** build img blocks
            this.buildHtmlImgBlock(this.img[i]);
          }
          else
          {
            // **** set default img
            this.buildDefaultHtmlImgBlock(this.imgdefault);
          }
        }
      }
      else{
        // **** TODO : HAS NO PARENT
      }
    }

    // ***********************************************
    // ***********************************************
    this.Init = function(){
      
      var i, iMax = gIMAGELIST.length;

      // ****
      for(i in gIMAGELIST){
        // ****
        //alert(i + " : " + gIMAGELIST[i][1] )
        if (gIMAGELIST[i][1] != null){
          this.Add(gIMAGELIST[i][0], gIMAGELIST[i][1], gIMAGELIST[i][2]);
        }
      }
    }

    // ***********************************************
    // ***********************************************
      //??? c'est le main ??
    this.Init();
}




// *********************************************
// ****
function init(){

    // **** 
    loadParam('../'); // email + telephone
    
    // **** 
    var http = new HTTP();

    //
    gCATEG = http.Get("categ");
    
    // ****
    //alert("in init : " + http.Get("categ"));
    //http.Set(null, "nom", "miguel et raffaele", true)
    //http.Set("lien0", "nom", "je me transforme encore et encore");
    
    // **** link menu
    gLINK = getEl('link'+gCATEG);
    //direct test case...
    if (gLINK == null){
      gLINK = getEl('link0');
    }
    //alert(gLINK.href);
    gLINK.className = 'selectedItem';
    
    // **** Parsing text file
    //alert( "gDATAFILE : " + gDATAFILE)
    parsingFile(gDATAFILE);
       
    // **** Preload IMG
    var im = new IMGManager();
    im.Show();    // first we show text and thumbnail
    im.preLoad(); // after we make preload of big images
    //
    
}
// ****
