var ABC = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
var weekdays = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
var copyrights = {
  a: ["Copyright 2008 by the International Astronautical Federation. All rights reserved."],
  b: [
      /*Copyright [year] by [hello]. [first] [last]. Published by the IAF, with permission and Released to IAF to publish in all forms.*/
      ["Copyright 2008 by "," "," ",". Published by the IAF, with permission and Released to IAF to publish in all forms."],
      /*Copyright [year] by [hello]. [first] [last]. Published by the American Institute of Aeronautics and Astronautics, Inc., with permission.*/
      ["Copyright 2008 by "," "," ",". Published by the American Institute of Aeronautics and Astronautics, Inc., with permission."]
     ],
  c: [
      /*Copyright [year] by the International Astronautical Federation. All rights reserved. One or more authors of this work are employees of the government of [Country], which may preclude the work from being subject to copyright in [Country], in which event no copyright is asserted in that country.*/
      ["Copyright 2008 by the International Astronautical Federation. All rights reserved. One or more authors of this work are employees of the government of ",", which may preclude the work from being subject to copyright in ",", in which event no copyright is asserted in that country."],
      /*Copyright [year] by the American Institute of Aeronautics and Astronautics, Inc. All rights reserved. One or more authors of this work are employees of the government of [Country], which may preclude the work from being subject to copyright in [Country], in which event no copyright is asserted in that country.*/
      ["Copyright 2008 by the American Institute of Aeronautics and Astronautics, Inc. All rights reserved. One or more authors of this work are employees of the government of ",", which may preclude the work from being subject to copyright in ",", in which event no copyright is asserted in that country."]
     ],
  d:
     ["Copyright 2008 by ",". Published by the IAF, with permission and Released to IAF to publish in all forms."]
  };
var show_links = 0x1;
var clipboard = (new CookieHandler()).getCookie("iac2008/clipboard");
var beforePrintHtml = "";

var content_types = [
  {name: "clipbrd", timg: "data/img/h_clpbrd.png"},
  {name: "search", timg: "data/img/h_sres.png"},
  {name: "papers", timg: "data/img/h_alllect.png"},
  {name: "home", timg: "data/img/h_home.png"},
  {name: "authors", timg: "data/img/h_authors.png"},
  {name: "comps", timg: "data/img/h_companies.png"},
  {name: "syms", timg: "data/img/h_simposium.png"},
  {name: "time", timg: "data/img/h_timetable.png"}
];

var content_type = 1;

var viewoptions = 0;
var itemsperpage = 5;
var searchOptions = 0;
var	searchType = 0;//0 - text, 1 - author papers, 2 - company papers, 3 - symposium & session, 4 - room
var searchValue = "";
var searchresult = [];
var sr_show_first = 0;

var sr_sort_mode = 0;//0 - last, 1 - company, 2 - title, 3 - symp, 4 - sess, 5 - time, flag 8 - reverse order
var fl_sort_mode = -1;
var sort_funcs = [sort_pp_by_last, sort_pp_by_comp, sort_pp_by_title, sort_pp_by_sm, sort_pp_by_ss, sort_pp_by_date];
var sortfunccallcount = 0;

var symposiums = [];
var sessions = [];
var papers = [];
var authors = [];
var companies = [];
var cmp_companies = [];
var cities = [];
var countries = [];

var dvdhistory = new dvdhist();

function addSY(id, name, tit)
{
  symposiums.push({
  id: id, 
  name: name, snm: name.substring(0, name.length-1),
  title: tit
  });
}
function addSS(sm_ind, id, name, tit, desc, room, dt)
{
	dt = dt.split(" ");//2008-09-29 15:00:00
	var d = dt[0].split("-");
	var t = dt[1].split(":");
	dt = new Date();
	dt.setUTCFullYear(d[0]);
	dt.setUTCMonth(Number(d[1])-1);
	dt.setUTCDate(d[2]);
	dt.setUTCHours(t[0],t[1],t[2],0);
	var snm = name;
	if (snm.substring(snm.length-1)=='.')
	  snm = name.substring(0, name.length-1);
  sessions.push({
  sm_ref: symposiums[sm_ind], 
  id: id, 
  name: name, snm: snm,
  title: tit, 
  desc: desc, 
  room: room, 
  dt: dt
  });
}

function addPP(ss_ind, ss_seq, id, tit, rev, mod, fname, fbits, agree)
{
	var obj = {
  ss_ref: sessions[ss_ind], 
  id: id,
  ids: "|"+id+"|",
  title: tit, 
  rev: rev,
  mod: mod,
  fname: fname,
  fb: fbits,
  au: [],
  cb: 0,
  cmp_tit: tit.toLowerCase(),
  cr: agree
  };
  obj.cb = isInCB(obj.ids);
  papers.push(obj);
}

function addCO(s){companies.push(s);cmp_companies.push(s.toLowerCase());}
function addCY(s){cities.push(s);}
function addCN(s){countries.push(s);}

function addAU(hel, fst, lst, pos, dep, comp, city, country, pps)
{
  var obj, i, pp
  obj = {
  id: authors.length,
  hel: hel, 
  fst: fst,
  lst: lst, 
  pos: pos,
  dep: dep,
  comp: comp,
  city: city,
  cnt: country,
  pps: [],
  cmp_lst: lst.toLowerCase()
  };
  i = 0;
  while (i < pps.length)
  {
  	pp = papers[pps[i+1]];
  	obj.pps.push(pp);
  	if (pps[i])
			pp.au.splice(0, 0, obj);
  	else
  		pp.au.push(obj);
  	i += 2;
  }
  authors.push(obj);
}

function CookieHandler() {

    this.setCookie = function (name, value, seconds) {

        if (typeof(seconds) != 'undefined') {
            var date = new Date();
            date.setTime(date.getTime() + (seconds*1000));
            var expires = "; expires=" + date.toGMTString();
        }
        else {
            var expires = "";
        }

        document.cookie = name+"="+value+expires+"; path=/";
    }

    this.getCookie = function (name) {

        name = name + "=";
        var carray = document.cookie.split(';');

        for(var i=0;i < carray.length;i++) {
            var c = carray[i];
            while (c.charAt(0)==' ') c = c.substring(1,c.length);
            if (c.indexOf(name) == 0) return c.substring(name.length,c.length);
        }

        return "";
    }

    this.deleteCookie = function (name) {
        this.setCookie(name, "", -1);
    }

}

function isInCB(ids)
{
	return clipboard.indexOf(ids)>=0;
}

function ids2CB(ids)
{
	if (clipboard.indexOf(ids)<0)
	{
		clipboard += ids;
		(new CookieHandler()).setCookie("iac2008/clipboard",clipboard,1e9);
	}
}

function idsFromCB(ids)
{
	var i = clipboard.indexOf(ids);
	if (i<0) return;
	clipboard = clipboard.substring(0, i) + clipboard.substring(i + ids.length);
	(new CookieHandler()).setCookie("iac2008/clipboard",clipboard,1e9);
}

function add2CB(id)
{
	var i, pp, obj;
	for (i=0;i<papers.length;i++)
	{
		pp = papers[i];
		if (pp.id==id)
		{
			pp.cb = true;
			ids2CB(pp.ids);
			obj = document.getElementById("cbl_"+id);
			if ( (obj!=undefined)&&(obj!=null))
				obj.innerHTML = ["<a href='javascript:",pp.cb?"rmFromCB":"add2CB","(",pp.id,")'><img src='data/img/",pp.cb?"sh_out.png":"sh_in.png","' title='",pp.cb?"Remove from personal clipboard":"Put into personal clipboard","'/></a>"].join("");
			break;
		}
	}
	updateCBInfo();
}

function rmFromCB(id)
{
	var i, pp;
	for (i=0;i<papers.length;i++)
	{
		pp = papers[i];
		if (pp.id==id)
		{
			pp.cb = false;
			idsFromCB(pp.ids);
			obj = document.getElementById("cbl_"+id);
			if ( (obj!=undefined)&&(obj!=null))
				obj.innerHTML = ["<a href='javascript:",pp.cb?"rmFromCB":"add2CB","(",pp.id,")'><img src='data/img/",pp.cb?"sh_out.png":"sh_in.png","' title='",pp.cb?"Remove from personal clipboard":"Put into personal clipboard","'/></a>"].join("");
			break;
		}
	}
	updateCBInfo();
}

function updateCBInfo()
{
  var obj, a;
  obj = document.getElementById("cb_info");
  if (clipboard=="")
    a = [];
  else
    a = clipboard.split("||");
  obj.innerHTML = "Clipboard ("+a.length+")";
}

function smenu(i)
{
  var j, obj, imgobj;
  imgobj = document.getElementById("side_menu");
  for (j=1;j<=4;j++)
  {
    obj = document.getElementById("side"+j+"_div");
    if (!obj) continue;
    if (i==j)
    {
      obj.style.position = "relative";
      obj.style.visibility = "visible";
      imgobj.src = "data/img/side_menu"+j+".png";
    }
    else
    {
      obj.style.visibility = "hidden";
      obj.style.position = "absolute";
    }
  }
}

function setContentType(s)
{
  var i, obj, a;
  for (i=0;i<content_types.length;i++)
  {
    obj = content_types[i];
    if (obj.name==s) break;
  }
  if (i==content_types.length) return;
  content_type = i;
  if (s!="home")
    a = ["<img src='"+obj.timg+"'/>"];
  else
  {
    a = [
      "<table cellspacing='0' cellpadding='0' border='0' width='742'><tr>",
      "<td class='vbot'><p class='hlft'><img src='"+obj.timg+"'/></p></td>",
      "<td><p class='hrgt'>",
      "<a href='http://www.bis-spaceflight.com' target='_new'><img class='logo' src='data/img/logo_bis.png' border='0'/></a>",
      "<a href='http://iaaweb.org' target='_new'><img class='logo' src='data/img/logo_iaa.png' border='0'/></a>",
      "<a href='http://www.iislweb.org' target='_new'><img class='logo' src='data/img/logo_iisl.png' border='0'/></a></p></td>",
      "</tr></table>"
    ];
  }
  document.getElementById("cntTitle").innerHTML = a.join("");
}

function sort_pp_by_last(pp1, pp2)
{
  var au1 = pp1.au[0].cmp_lst;
  var au2 = pp2.au[0].cmp_lst;
  sortfunccallcount++;
  if (au1 < au2) return -1;
  else if (au1 > au2) return 1;
  return 0;
}

function sort_pp_by_comp(pp1, pp2)
{
  var c1 = cmp_companies[pp1.au[0].comp];
  var c2 = cmp_companies[pp2.au[0].comp];
  sortfunccallcount++;
  if (c1 < c2) return -1;
  else if (c1 > c2) return 1;
  return 0;
}

function sort_pp_by_title(pp1, pp2)
{
	var t1 = pp1.cmp_tit;
	var t2 = pp2.cmp_tit;
  if (t1 < t2) return -1;
  else if (t1 > t2) return 1;
  return 0;
}

function sort_pp_by_sm(pp1, pp2)
{
	var n1 = pp1.ss_ref.sm_ref.name;
	var n2 = pp2.ss_ref.sm_ref.name;
  return n1<n2?-1:(n1>n2?1:0);
}

function sort_pp_by_ss(pp1, pp2)
{
	var n1 = pp1.ss_ref.name;
	var n2 = pp2.ss_ref.name;
  return n1<n2?-1:(n1>n2?1:0);
}

function sort_pp_by_date(pp1, pp2)
{
	var dt1 = pp1.ss_ref.dt;
	var dt2 = pp2.ss_ref.dt;
  return dt1<dt2?-1:(dt1>dt2?1:0);
}

function smode(sm)
{
	sr_sort_mode = sm;
  sortSearchResult();
  sr_show_first = 0;
  displaySearchResult();
}

function sort_img(cur_sm, check_sm)
{
  if (cur_sm == check_sm)
    return "<img class='sortarr' src='data/img/down.gif' border='0'/>";
  else if (cur_sm == (check_sm | 8))
    return "<img class='sortarr' src='data/img/up.gif' border='0'/>";
  return "";
}

function get_paper_list_header()
{
  var sm = sr_sort_mode;
  var a = [
  "<div id='cntHeader' class='dots_g'>",
    "<table class='pphead' border='0' cellpadding='0' cellspacing='0' width='100%'>",
    "<tr>",
      "<td width='100'><a href='javascript:smode(",sm==0?8:0,")'><b>Last</b>",sort_img(sm, 0),"</a></td>",
      "<td width='100'><a href='javascript:smode(",sm==1?9:1,")'><b>Company</b>",sort_img(sm, 1),"</a></td>",
      "<td><a href='javascript:smode(",sm==2?10:2,")'><b>Title<b>",sort_img(sm, 2),"</a></td>",
      /*"<td width='72'>&nbsp;</td>",*/
      "<td width='112'><p class='hrgt'><a href='javascript:smode(",sm==3?11:3,")'><b>Symp.</b>",sort_img(sm, 3),"</a><br/>",
      "<a href='javascript:smode(",sm==4?12:4,")'><b>Sess.</b>",sort_img(sm, 4),"</a></p></td>",
      "<td width='80'><a href='javascript:smode(",sm==5?13:5,")'><b>Date</b>",sort_img(sm, 5),"</a><br/>",
      "<b>Time</b><br/>",
      "<b>Room</b></td>",  	 	
    "</tr>",
    "</table>",
  "</div>",
  "<div id='cntBody' class='cntbodynormal'>",
  "<table class='ppinfo' border='0' cellpadding='0' cellspacing='0' width='100%'>",
  "<tr>",
    "<td width='200'><div></div></td>",
    "<td><div></div></td>",
    "<td width='72'><div></div></td>",
    "<td width='40'><div></div></td>",
    "<td width='80'><div></div></td>",  	 	
  "</tr>"
  ];
  return a.join("");
}

function getNavigationHtml()
{
	var dn, tot, cur, mvp2, lp, rp, html, i;
	dn = itemsperpage;//document.getElementById("dnSelector").value;
	if (dn=='all') return "";
	tot = Math.floor(searchresult.length/dn) + (searchresult.length % dn?1:0);
	cur = Math.floor(sr_show_first/dn);
	mvp2 = 5;
	lp = cur - mvp2;
	if (lp < 0) lp = 0;
	rp = lp + 2*mvp2;
	if (rp > tot - 1) rp = tot - 1;
	lp = rp - 2*mvp2;
	if (lp<0) lp = 0;
	html = ["<p class='pagelink'>"];
	if (cur>0)
	{
		html.push("<a href='javascript:page(0)'><img src='data/img/ar_left2.jpg' border='0' title='First'/></a>");
		html.push("<a href='javascript:page("+(cur-1)+")'><img src='data/img/ar_left1.jpg' border='0' title='Previous'/></a>");
	}
	else
	{
		html.push("<img src='data/img/ar_left2d.png' border='0'/>");
		html.push("<img src='data/img/ar_left1d.png' border='0'/>");
	}
	for (i=lp;i<=rp;i++)
	{
		if (i==cur)
			html.push("<b class='orange'>",(i+1),"</b>",(i<rp?'<b>|</b>':''));
		else
			html.push("<b><a href='javascript:page("+i+")'>"+(i+1)+"</a>"+(i<rp?'|':'')+"</b>");
	}
	if (cur<tot-1)
	{
		html.push("<a href='javascript:page("+(cur+1)+")'><img src='data/img/ar_right1.jpg' border='0' title='Next'/></a>");
		html.push("<a href='javascript:page("+(tot-1)+")'><img src='data/img/ar_right2.jpg' border='0' title='Last'/></a>");
	}
	else
	{
		html.push("<img src='data/img/ar_right1d.png' border='0'/>");
		html.push("<img src='data/img/ar_right2d.png' border='0'/>");
	}
	html.push("</p>");
	return html.join("");
}

function get_paper_list_footer()
{
  var a = [
        "</table>",
      "</div>",
    "<div id='contentFooter' class='cfoot tdots_g'>",
    getNavigationHtml(),
    "</div>"
  ];
  return a.join("");
}

function get_paper_list_item(pp, sep)
{
  var ds, ct, cr;
  var au = pp.au[0];
  var dt = pp.ss_ref.dt;
  var fb = pp.fb & show_links;
  var mins = ""+dt.getUTCMinutes();
  if (mins.length<2) mins = "0"+mins;
  ct = dt.getUTCHours()+":"+mins;
  ds = [weekdays[dt.getUTCDay()],", ",dt.getUTCDate()," ",months[dt.getUTCMonth()]," ",dt.getUTCFullYear()].join("");
  //main info
  var a = [sep==true?"<tr><td colspan='5' class='listsep'></td></tr><tr>":"<tr>",
  "<td class='fst'>",
  "<p class='hlft'><a href='javascript:searchByAuthor(",au.id,")'><i>",au.hel+" "+au.fst+" "+au.lst,"</i></a></p>",
  "<p><a href='javascript:searchByComp("+au.comp+")'><b>",companies[au.comp],"</b></a></p>",
  "</td>",
  "<td><p class='hlft'>",pp.title,"</p></td>",
  "<td>",
    "<p class='hlft'><a href='data/abstract.pdf/",pp.fname,".brief.pdf' target='_new'><img src='data/img/i_abs.png' title='View Abstract'/></a>"];
  if (fb&1)
    a.push("<a href='IAC-08/",pp.ss_ref.sm_ref.snm,"/",pp.ss_ref.snm,"/manuscripts/",pp.fname,".pdf' target='_new'><img src='data/img/i_mns.png' title='View Paper'/></a>");
  if (fb&2)
    a.push("<a href='IAC-08/",pp.ss_ref.sm_ref.snm,"/",pp.ss_ref.snm,"/presentations/",pp.fname,".show.pdf' target='_new'><img src='data/img/i_pres.png' title='View Presentation'/></a>");
  else if (fb&12)
    a.push("<a href='data/frompowerpoint.pdf/",pp.fname,".show.pdf' target='_new'><img src='data/img/i_pres.png' title='View Presentation'/></a>");
  a.push("</p>",
    "<p class='hlft' id='cbl_",pp.id,"'><a href='javascript:",pp.cb?"rmFromCB":"add2CB","(",pp.id,")'><img src='data/img/",pp.cb?"sh_out.png":"sh_in.png","' title='",pp.cb?"Remove from personal clipboard":"Put into personal clipboard","'/></a></p>",
  "</td>",
  "<td><a href='javascript:list_symposium(\"",pp.ss_ref.sm_ref.name,"\")'>",pp.ss_ref.sm_ref.name,"<a><br/><a href='javascript:list_symposium(\"",pp.ss_ref.sm_ref.name,pp.ss_ref.name,"\")'>",pp.ss_ref.name,"</a></td>",
  "<td><a href='javascript:show_timetable(\"",ds,"\")'>",dt.getUTCDate()," ",months[dt.getUTCMonth()]," ",dt.getUTCFullYear(),"</a><br/><a href='javascript:show_timetable(\"",ds,ct,"\")'>",ct,"</a><br/><a href='javascript:searchByRoom(\"",pp.ss_ref.room,"\")'>",pp.ss_ref.room,"</a></td>",
  "</tr>");
  //department
  if ((viewoptions & 4)&&(au.dep!=""))
  {
  	a.push("<tr><td><p class='hrgt'>Department:&nbsp;</p></td><td colspan='4'><p class=' hlft'>");
		a.push(au.dep);
		a.push("</p></td></tr>");  	
  }
  //country
  if ((viewoptions & 8)&&(countries[au.cnt]!=""))
  {
  	a.push("<tr><td><p class='hrgt'>Country:&nbsp;</p></td><td colspan='4'><p class=' hlft'>");
		a.push(countries[au.cnt]);
		a.push("</p></td></tr>");  	
  }
  //co-authors
  if ((viewoptions & 1)&&(pp.au.length>1))
  {
  	var i, cau, s;
  	for (i=1;i<pp.au.length;i++)
  	{
  		cau = pp.au[i];
  		s = [
  		"<a href='javascript:searchByAuthor(",
  		cau.id,
  		")'>",
  		cau.hel+" ",
  		cau.fst+" ",
  		cau.lst+"</a>, ",
  	  "<a href='javascript:searchByComp(",
  	  cau.comp,
  	  ")'><i>",
  	  companies[cau.comp],
  	  "</i></a>"
  	  ].join("");
  		if (i==1)
  		{
  			a.push("<tr><td><p class='hrgt'>Co-Authors:&nbsp;</p></td><td><p class=' hlft'>");
  			a.push(s);
  			a.push("</p></td></tr>");
  		}
  		else
  		{
  			a.push("<tr><td>&nbsp</td><td><p class=' hlft'>");
  			a.push(s);
  			a.push("</p></td></tr>");
  		}
  	}
  }
  //paper-number
  if (viewoptions & 2)
  {
  	a.push("<tr><td><p class='hrgt'>Paper-Nr:&nbsp;</p></td><td colspan='4'><p class=' hlft'>");
		a.push(pp.fname);
		a.push("</p></td></tr>");  	
  }
  //copyright
  if ((viewoptions & 16) && (pp.cr != ""))
  {
    a.push("<tr><td><p class='hrgt'>Copyright:&nbsp;</p></td><td colspan='4'><p class=' hlft'>");
    cr = copyrights[pp.cr];
    switch (pp.cr)
    {
      case 'b':
      case 'c':
        if (pp.ss_ref.sm_ref.name == "E8.")
          cr = cr[1];
        else
          cr = cr[0];
        if (pp.cr == 'b')
        {
          //b
          a.push(cr[0], au.hel, cr[1], au.fst, cr[2], au.lst, cr[3]);
        }
        else
        {
          //c
          a.push(cr[0], countries[au.cnt], cr[1], countries[au.cnt], cr[2]);
        }
        break;
        
     case "d":
      a.push(cr[0], companies[au.comp], cr[1]);
  	  break;
  	  
  	 default:
  	  //a
      a.push(cr[0]);
  	}
		a.push("</p></td></tr>");  
  }
  return a.join("");
}

function page(num)
{
	var dn, tot, cur;
	dvdhistory.save();
	dn = itemsperpage;//document.getElementById("dnSelector").value;
	if (dn=='all') return;
	tot = Math.floor(searchresult.length/dn) + (searchresult.length % dn?1:0);
	cur = Math.floor(sr_show_first/dn);
	if (num>tot-1) num = tot-1;
	sr_show_first = num*dn;
	displaySearchResult();
}

function list_all_papers()
{
  //alert("Paper count: "+papers.length);
  var i, sres;
  dvdhistory.save();
  sres = [];
  for (i=0;i<papers.length;i++)
    sres.push(papers[i]);
  //show result
  searchType = -1;
  searchValue = "";
  searchresult = sres;
  sortSearchResult();
  setContentType('papers');
  sr_show_first = 0;
  displaySearchResult();
}

function searchByAuthor(id)
{
	dvdhistory.save();
	doSearchByAuthor(id);
  setContentType('search');
  sr_show_first = 0;
  displaySearchResult();
}

function doSearchByAuthor(id)
{
  var i, sres, pp;
  sres = [];
  for (i=0;i<papers.length;i++)
  {
    au = papers[i].au;
    for (j=0;j<au.length;j++)
      if (au[j].id==id) 
      {
        sres.push(papers[i]);
        break;
      }
  }
  searchType = 1;
  searchValue = id;
  searchresult = sres;
  sortSearchResult();
}

function searchByComp(id)
{
	dvdhistory.save();
	doSearchByComp(id);
  setContentType('search');
  sr_show_first = 0;
  displaySearchResult();
}

function doSearchByComp(id)
{
  var i, sres, au, j;
  sres = [];
  for (i=0;i<papers.length;i++)
  {
    au = papers[i].au;
    for (j=0;j<au.length;j++)
      if (au[j].comp==id) 
      {
        sres.push(papers[i]);
        break;
      }
  }
  searchType = 2;
  searchValue = id;
  searchresult = sres;
  sortSearchResult();
}

function searchBySS(smss)
{
	dvdhistory.save();
	doSearchBySS(smss);
  setContentType('search');
  sr_show_first = 0;
  displaySearchResult();
}

function doSearchBySS(smss)
{
  var a,i, sres, pp, j, smname, ssname;
  a = smss.split("|");
  smname = a[0];
  ssname = a[1];
  sres = [];
  for (i=0;i<papers.length;i++)
  {
    pp = papers[i];
    if ((pp.ss_ref.sm_ref.name == smname)&&(pp.ss_ref.name==ssname))
      sres.push(pp);
  }
  searchType = 3;
  searchValue = smss;
  searchresult = sres;
  sortSearchResult();
}

function searchByRoom(rm)
{
	dvdhistory.save();
	doSearchByRoom(rm);
  setContentType('search');
  sr_show_first = 0;
  displaySearchResult();
}

function doSearchByRoom(rm)
{
  var i, sres, pp, j;
  sres = [];
  for (i=0;i<papers.length;i++)
  {
    pp = papers[i];
    if (pp.ss_ref.room == rm)
      sres.push(pp);
  }
  searchType = 4;
  searchValue = rm;
  searchresult = sres;
  sortSearchResult();
}

function buildSearchString(pp)
{
  var au, cau, a;
  au = pp.au[0];
  a = [];
  if (searchOptions & 2) a.push(au.lst);//last
  if (searchOptions & 4) a.push(au.fst);//first
  if (searchOptions & 8) a.push(companies[au.comp]);//author company
  if (searchOptions & 16) a.push(au.dep);//author department
  if (searchOptions & 32) a.push(countries[au.cnt]);//author/company country
  if (searchOptions & 64) a.push(pp.title);//paper title
  if ( (searchOptions & 128) && (pp.au.length>1) )//co-author info
  {
    for (var j=1;j<pp.au.length;j++)
    {
      cau = pp.au[j];
      a.push(cau.lst);
      a.push(cau.fst);
      a.push(companies[cau.comp]);
      a.push(countries[cau.cnt]);
    }
  }
  if (searchOptions & 256) a.push(pp.ss_ref.dt);//paper session date
  if (searchOptions & 512) a.push(pp.fname);//paper number
  return a.join(" ");
}

function prepareSearchOptions()
{
  searchOptions = 0;
  if (document.getElementById("sfSelector").value == 'or')
    searchOptions |= 1;
  for (var i = 1;i <= 9; i++)
    if (document.getElementById("sop"+i).checked)
      searchOptions |= (1 << i); 
}

function updateViewOptions()
{
	viewoptions = 0;
	for (var i=0;i<5;i++)
		if (document.getElementById("dop"+(i+1)).checked)
			viewoptions |= (1 << i);
	itemsperpage = document.getElementById("dnSelector").value;
}

function setViewOptions(opt, ipp)
{
  var obj;
	for (var i=0;i<5;i++)
	{
	  obj = document.getElementById("dop"+(i+1));
		if (obj)
		  obj.checked = (opt & (1 << i))>0;
	}
	obj = document.getElementById("dnSelector");
	if (obj)
	  obj.value = ipp;
	viewoptions = opt;
	itemsperpage = ipp;
}

function search()
{
	dvdhistory.save();
	prepareSearchOptions();
	searchByText(document.getElementById("searchText").value.toLowerCase());
  setContentType('search');
  sr_show_first = 0;
  displaySearchResult();
}

function searchByText(txt)
{
  var ss, sslen, i, pp, ps, s, sres, j, k;
  //alert("Search options: "+searchOptions);
  ss = txt.split(" ");
  i = 0;
  while (i < ss.length)
  {
    if (ss[i] == '') ss.splice(i, 1);
    else i++;
  }
  sslen = ss.length;
  //alert("|"+ss+"|");
  sres = [];
  for (i = 0;i<papers.length;i++)
  {
    pp = papers[i];
    ps = buildSearchString(pp).toLowerCase();
    //if (i<10) alert(ps);
    if (searchOptions & 1)
    {
      //OR
      for (j = 0; j < sslen; j++)
        if (ps.indexOf(ss[j])>=0)
        {
          sres.push(pp);
          break;
        }
    }
    else
    {
      //AND
      k = 0;
      for (j = 0; j < sslen; j++)
      {
        if (ps.indexOf(ss[j])<0) break;
        else k++;
      }
      if (k == sslen) sres.push(pp);
    }
  }
  //alert("Search finished. Found "+sres.length+" papers.");
  //sort result
	searchType = 0;
	searchValue = txt;
  searchresult = sres;
  sortSearchResult();
}

function sortSearchResult()
{
  //alert("displaySearchResult: sort "+searchresult.length+" elements");;
  sortfunccallcount = 0;
  if (sr_sort_mode != fl_sort_mode)
  {
    var func = sort_funcs[sr_sort_mode & 7];
  	searchresult.sort(func);
  	if (sr_sort_mode & 8)
  	{
  		searchresult.reverse();
  	}
  }
  //alert("sortfunccallcount: "+sortfunccallcount+", collecting...");
}

function onchangedisplayoptions()
{
	updateViewOptions();
	displaySearchResult();
}

function displaySearchResult(yscroll)
{
  var sres, a, f, i;
  if (content_type>2) return;
  sres = searchresult;
  a = [get_paper_list_header()];
  //number of items on page
  dn = itemsperpage;//document.getElementById("dnSelector").value;
  if (dn == 'all')
  {
    sr_show_first = 0;
    dn = sres.length;
  }
  //first item to display
  f = sr_show_first;
  i = 0;
  while ((i < dn)&&(f + i < sres.length))
  {
    a.push(get_paper_list_item(sres[f+i], i>0));
    i++;
  }
  a.push(get_paper_list_footer());
  //alert("displaySearchResult: innerHTML");
  document.getElementById("content").innerHTML = a.join("");
  //alert("displaySearchResult: Ok");
  //correct table header width
  setTimeout("correctPaperListHeader("+yscroll+")",1);
}

function setScroll(v)
{
	var obj = document.getElementById("cntBody");
	if ((obj!=null) && (v!=undefined))
		obj.scrollTop = v;
}

function correctPaperListHeader(yscroll)
{
  var cb = document.getElementById("cntBody");
  var ch = document.getElementById("cntHeader");
  ch.style.width = cb.clientWidth;
  setScroll(yscroll);
}

function getAbsTop(obj)
{
  res = 0;
  while (obj!=null)
  {
    res += obj.offsetTop;
    obj = obj.offsetParent;
  }
  return res;
}

function go2bm(bm)
{
	var obj = document.getElementById("abc_"+bm);
	var divobj = document.getElementById("cntBody");
	if ((obj)&&(divobj))
	{
		res = getAbsTop(obj) - getAbsTop(divobj);
    divobj.scrollTop = res;
	}
}

function getABCLinks()
{
  var i, a, c;
  a = ["<p class='abclink hc dots_g'>"];
  for (i=0;i<ABC.length;i++)
  {
    c = ABC.charAt(i);
    a.push("<a href='javascript:go2bm(\"",c,"\")'>",c,"</a>");
  }
  a.push("</p>");
  return a.join("");
}

function show_home()
{
	dvdhistory.save();
  setContentType('home');
	setHomeContent();
}

function setHomeContent()
{
  a = [
    "<div class='msg'>",
    /*"<p class='home'><br/>Welcome to this DVD specially prepared for the Delegates of the 59th International Astronautical Congress which will be held in in Glasgow, Scotland!</p>",
    "<p class='home'>IAC 2008 is being organised by the British Interplanetary Society (BIS), which was founded in 1933 and is the world's longest-established organisation devoted solely to supporting and promoting the exploration of space and astronautics.</p>",
    "...",*/
"<p>Welcome to this DVD specially prepared for the Delegates of the 59th International Astronautical Congress which will be held in Glasgow, Scotland!</p>",
"<p>The International Programme Committee (IPC) and its two Co-Chairs R. Brook and Min-Jea Tahk have selected more than <b>1600</b> technical papers from <b>2300</b> Abstracts submitted in March 2008. The accepted papers will be presented in <b>147</b> sessions.</p>",
"<p>This year again, with the help of each author and guest speaker, the IAF Secretariat is proposing in this DVD the archive of all the author's full manuscripts.</p>",
"<p>The IAF is working on a new on-line system allowing our authors and IAF Member organisations to access all the IAC Papers since 1951. A first part of this archive, covering the period from 2003 to 2007 should already be available during the IAC2008.</p>", 
"<p>As for last year, you will be able to connect to IAF Web Site to download updates or missing manuscripts and presentations during and after the Congress via a special link named <b><a href='javascript:smenu(4)'>\"Update DVD\"</a></b>. The key to access the on-line system is part of the DVD privileges given to all participants of the Congress and cannot be transferred.</p>",
"<p>Also the Final Programme of the 59th IAC is available in the DVD and will be regularly updated during the Congress in order to reflect the latest changes in the schedule.</p>",
"<p>If you wish more records from the 59th International Astronautical Congress, we invite you to watch on the IAF Web Site (<a href='http://www.iafastro.org' target='_new'>www.iafastro.org</a>) the movies taped from all plenary events.</p>",
"<p>I deeply hope you will enjoy our Congress this year in Scotland and will benefit from this DVD to keep track of the valuable information and knowledge created during this premier international forum of Space!</p>",
"<p>Sincerely,</p>",
"<p>Philippe Willekens<br/>IAF Executive Director</p>",
    "</div>"
  ];
  document.getElementById("content").innerHTML = a.join("");
}

function show_clipbrd()
{
	searchByClipbrd();
  setContentType('clipbrd');
  sr_show_first = 0;
  displaySearchResult();
}

function searchByClipbrd()
{
	var i, pp, sres; 
	dvdhistory.save();
  sres = [];
  for (i=0;i<papers.length;i++)
  {
  	pp = papers[i];
  	if (clipboard.indexOf(pp.ids)>=0)
  		sres.push(pp);
  }
  searchresult = sres;
  sortSearchResult();
}

function list_authors()
{
	dvdhistory.save();
	setContentType('authors');
	genAuthorsHtml();
}

function genAuthorsHtml(yscroll)
{
  var a, i, b, au, c, f, pf, cc, rs, k, s;
  a = [getABCLinks(),
    "<div id='cntBody' class='cntbodynormal'>"
  ];
  
  b = authors;//authors pre-sorted by XSLT
  pf = "";
  rs = 0;//row state: 0 - closed, 1 - opened
  j = 0;//col count in current row
  k = 0;//row count in current table
  for (i=0;i<b.length;i++)
  {
    au = b[i];
    f = au.lst.charAt(0).toUpperCase();
    if (f!=pf)
    {
      if (pf!="")
      {
        //close row
        if (rs)
        {
          while (j<4)
          {
            a.push("<td>&nbsp;</td>");
            j++;
          }
          j = 0;
          a.push("</tr>");
          rs = 0;
        }
        //close table
        a.push("</table>");
      }
      //Letter
      a.push("<p class='abcbmrk'><a id='abc_",f,"'>",f,"</a></p>");
      //open table
      a.push("<table class='auinfo' border='0' cellpadding='2' cellspacing='2' width='100%'>");
      pf = f;
      k = 0;
    }
    if (rs==0) 
    {
      a.push("<tr>");
      rs = 1;
    }
    a.push("<td",(k==0?" width='25%'":""),"><a href='javascript:searchByAuthor(",au.id,")'><b>",au.lst,"</b>, ",au.fst,"</a></td>");
    j++;
    if (j==4)
    {
      a.push("</tr>");
      j = 0;
      rs = 0;
      k++;
    }
  }
  if (rs)
  {
    while (j<4)
    {
      a.push("<td>&nbsp;</td>");
      j++;
    }
    j = 0;
    a.push("</tr>");
    rs = 0;
  }
  a.push("</table></div>");
  a.push("<div id='contentFooter' class='cfoot tdots_g'></div>");
  //alert('join strings: '+a.length);
  s = a.join("");
  //alert('innerHTML...');
  document.getElementById("content").innerHTML = s;
	setScroll(yscroll);
}

function list_companies()
{
	dvdhistory.save();
	setContentType('comps');
	genCompaniesHtml();
}

function genCompaniesHtml(yscroll)
{
  var a, i, b, co, c, f, pf, cc, rs, k, s;
  a = [getABCLinks(),
    "<div id='cntBody' class='cntbodynormal'>"
  ];
  b = companies;//authors pre-sorted by XSLT
  pf = "";
  rs = 0;//row state: 0 - closed, 1 - opened
  j = 0;//col count in current row
  k = 0;//row count in current table
  for (i=0;i<b.length;i++)
  {
    co = b[i];
    if (co=="") continue;
    f = co.charAt(0).toUpperCase();
    if (f!=pf)
    {
      if (pf!="")
      {
        //close row
        if (rs)
        {
          while (j<4)
          {
            a.push("<td>&nbsp;</td>");
            j++;
          }
          j = 0;
          a.push("</tr>");
          rs = 0;
        }
        //close table
        a.push("</table>");
      }
      //Letter
      a.push("<p class='abcbmrk'><a id='abc_",f,"'>",f,"</a></p>");
      //open table
      a.push("<table class='auinfo' border='0' cellpadding='2' cellspacing='2' width='100%'>");
      pf = f;
      k = 0;
    }
    if (rs==0) 
    {
      a.push("<tr>");
      rs = 1;
    }
    a.push("<td",(k==0?" width='25%'":""),"><a href='javascript:searchByComp(",i,")'>",co,"</a></td>");
    j++;
    if (j==4)
    {
      a.push("</tr>");
      j = 0;
      rs = 0;
      k++;
    }
  }
  if (rs)
  {
    while (j<4)
    {
      a.push("<td>&nbsp;</td>");
      j++;
    }
    j = 0;
    a.push("</tr>");
    rs = 0;
  }
  a.push("</table></div>");
  a.push("<div id='contentFooter' class='cfoot tdots_g'></div>");
  //alert('join strings: '+a.length);
  //alert('innerHTML...');
  document.getElementById("content").innerHTML = a.join("");
	setScroll(yscroll);
}

function sort_ss_by_name(s1, s2)
{
  if (s1.sm_ref.name < s2.sm_ref.name) return -1;
  else if (s1.sm_ref.name > s2.sm_ref.name) return 1;
	if (s1.dt < s2.dt ) return -1;
	else if (s1.dt > s2.dt) return 1;
  return 0;
}

function list_symposium(bm)
{
	dvdhistory.save();
	genSymposiumHtml();
	if (bm!=undefined)
	  setTimeout("go2bm(\""+bm+"\")",100);
}

function genSymLinksHTML(sa)
{
  var i, a, obj;
  a = ["<div><p class='abclink hc dots_g'>"];
  j = 0;
  for (i=0;i<sa.length;i++)
  {
    obj = sa[i];
    a.push("<a href='javascript:go2bm(\"",obj.nm,"\")' title='",obj.tit,"'>",obj.nm,"</a> ");
    j++;
    if (j==15)
    {
      j = 0;
      a.push("<br/>");
    }
  }
  a.push("</p></div>");
  return a;
}

function genSymposiumHtml(yscroll)
{
  var a, a1, b, i, ss, mins, ql, psyn, syn, ts, fr, ds;
  sa = [];//symposium names
  //sort sessions by symposium name
  b = [];
  for (i=0;i<sessions.length;i++)
    b.push(sessions[i]);
  b.sort(sort_ss_by_name);
  ql = [];
  a = ["<div id='cntBody' class='cntbodynormal'>"];
  psyn = "";//prev symposium name
  ts = 0;
  fr = 0;//first row
  //simposium tables
  for (i=0;i<b.length;i++)
  {
    ss = b[i];
    mins = ""+ss.dt.getUTCMinutes();
    if (mins.length<2) mins = "0"+mins;
    syn = ss.sm_ref.name;
    if (syn!=psyn)
    {
      if (ts)
      {
        //close table
        a.push("</table>");
      }
      //open table
      sa.push({nm:ss.sm_ref.name, tit:ss.sm_ref.title});
      a.push("<p id='abc_",ss.sm_ref.name,"' class='symnam hc'>Simposium ",ss.sm_ref.name,"</p>",
      "<p class='symtit hc'>",ss.sm_ref.title,"</p>");
      a.push("<table class='syminfo' border='0' cellspacing='4' cellpadding='4' width='100%'>");
      ts = 1;
      fr = 1;
      psyn = syn;
    }
    ds = [weekdays[ss.dt.getUTCDay()],", ",ss.dt.getUTCDate()," ",months[ss.dt.getUTCMonth()]," ",ss.dt.getUTCFullYear()].join("");
    a.push("<tr><td",fr?" width='40'":""," id='abc_",ss.sm_ref.name,ss.name,"'>",ss.name,"</td><td",fr?" width='200'":"","><p><b><a href='javascript:searchBySS(\"",ss.sm_ref.name,"|",ss.name,"\")'>",ss.title,"</a><b></p></td>",
    "<td><p><i><a href='javascript:searchBySS(\"",ss.sm_ref.name,"|",ss.name,"\")'>",ss.desc,"</a></i></p><p class='symdate'><a href='javascript:show_timetable(\"",ds,"\")'>",ds,"</a> | ",ss.dt.getUTCHours(),":",mins,
    " | Room: <a href='javascript:searchByRoom(\"",ss.room,"\")'>",ss.room,"</a></p></td></tr>");
    fr = 0;
  }
  if (ts)
  {
    //close table
    a.push("</table>");
  }
  a.push("</div><div id='contentFooter' class='cfoot tdots_g'></div>");
  a1 = genSymLinksHTML(sa);
  setContentType('syms');
  document.getElementById("content").innerHTML = a1.concat(a).join("");
	setScroll(yscroll);
}

function show_timetable(bm)
{
	dvdhistory.save();
	setContentType('time');
	genTimeTableHtml();
	if (bm!=undefined)
	  setTimeout("go2bm(\""+bm+"\")",100);
}

function sort_ss_by_time(s1, s2)
{
	var dt1 = s1.dt;
	var dt2 = s2.dt;
	return dt1<dt2?-1:(dt1>dt2?1:0);
}

function genTTLinksHTML(da)
{
  var i, a, obj;
  a = ["<div><p class='abclink hc dots_g'>"];
  j = 0;
  for (i=0;i<da.length;i++)
  {
    obj = da[i];
    a.push("<a href='javascript:go2bm(\"",obj,"\")'>&nbsp;&nbsp;",obj,"&nbsp;&nbsp;</a> ");
    j++;
    if (j==3)
    {
      j = 0;
      a.push("<br/>");
    }
  }
  a.push("</p></div>");
  return a;
}

function genTimeTableHtml(yscroll)
{
  var a, a1, ds, da, pdt, cdt, mins, ct, pt, ts, fr, i, j, tit;
  da = [];//days array
  a = ["<div id='cntBody' class='cntbodynormal'>"];
  //sort sessions by time
  b = [];
  for (i=0;i<sessions.length;i++)
    b.push(sessions[i]);
  b.sort(sort_ss_by_time);
  pdt = -1;//prev date
  ts = 0;//table status
  fr = 0;//first row
  pt = "";
  //date tables
  for (i=0;i<b.length;i++)
  {
    ss = b[i];
    cdt = ss.dt.getUTCDate();
    mins = ""+ss.dt.getUTCMinutes();
    if (mins.length<2)
      mins = "0"+mins;
    ct = ss.dt.getUTCHours()+":"+mins;
    if (cdt!=pdt)
    {
      if (ts>0)
      {
        //add remaining cols & close row
        while (j<4)
        {
          a.push("<td>&nbsp;</td>");
          j++;
          if (j==4)
            a.push("</tr>");
        }
        //close table
        a.push("</table>");
      }
      //open table
      //current date string
      ds = [weekdays[ss.dt.getUTCDay()],", ",ss.dt.getUTCDate()," ",months[ss.dt.getUTCMonth()]," ",ss.dt.getUTCFullYear()].join("");
      da.push(ds);
      a.push("<p id='abc_",ds,"' class='symnam hc'>",ds,"</p>");
      a.push("<table class='ttinfo' border='0' cellspacing='4' cellpadding='4' width='100%'>");
      ts = 1;
      fr = 1;
      j = 0;
      pdt = cdt;
    }
    if ((ss.sm_ref.name=="P.E.") || (ss.sm_ref.name=="H.L."))
    {
      //special row
      while (j<4)
      {
        a.push("<td>&nbsp;</td>");
        j++;
        if (j==4)
          a.push("</tr>");
      }
      j = 0;
      if (ss.sm_ref.name=="P.E.")
        tit = "Plenary lecture";
      else
        tit = "Highlight lecture";
      a.push("<tr><td width='10%'><b id='abc_",ds,ct,"'>",ct,"</b></td>");
      a.push("<td colspan='4'><p><b>",tit,"</b></p><p><a href='javascript:list_symposium(\"",ss.sm_ref.name,ss.name,"\")'>",ss.title,"</a></p><p>Room: ",ss.room,"</p></td></tr>");
    }
    else
    {
      //normal row
      if ((j>0)&&(ct!=pt))
      {
        while (j<4)
        {
          a.push("<td>&nbsp;</td>");
          j++;
          if (j==4)
            a.push("</tr>");
        }
        j = 0;
      }
      if (j==0)
      {
        if (pt!=ct)
          a.push("<tr><td",(fr && (j<3))?" width='10%'":"","><b id='abc_",ds,ct+"'>",ct,"</b></td>");
        else
          a.push("<tr><td",(fr && (j<3))?" width='10%'":"","><b>&nbsp;</b></td>");
      }
      a.push("<td",(fr && (j<3))?" width='22%'":"","><p><a href='javascript:list_symposium(\"",ss.sm_ref.name,ss.name,"\")'><b>",ss.sm_ref.name,ss.name,"</b></a></p><p class='ttroom'>Room: ",ss.room,"</p></td>"); 
      j++;
      if (j==4)
      {
        a.push("</tr>");
        j = 0;
      }
    }
    pt = ct;
  }//for
  while (j<4)
  {
    a.push("<td>&nbsp;</td>");
    j++;
    if (j==4)
      a.push("</tr>");
  }
  if (ts)
  {
    //close table
    a.push("</table>");
  }
  a.push("</div><div id='contentFooter' class='cfoot tdots_g'></div>");
  a1 = genTTLinksHTML(da);
  document.getElementById("content").innerHTML = a1.concat(a).join("");
  setScroll(yscroll);
}

function printpreviewIE()
{
	var OLECMDID = 7;
	/* OLECMDID values:
	* 6 - print
	* 7 - print preview
	* 1 - open window
	* 4 - Save As
	*/
	var PROMPT = 1; // 2 DONTPROMPTUSER
	var WebBrowser = '<OBJECT ID="WebBrowser1" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>';
	document.body.insertAdjacentHTML('beforeEnd', WebBrowser);
	WebBrowser1.ExecWB(OLECMDID, PROMPT);
	WebBrowser1.outerHTML = "";
}

function printVersion(ihtml)
{
  var tit = document.getElementById("pagetitle").innerHTML+" (print version)";
  var stylesHtml = document.getElementById("styles").innerHTML
  var printHtml = "<div style='width:755px;margin: 0 auto'>"+document.getElementById("printContent").innerHTML+"</div>";
  var a = [ 
    "<html>",
    "<head><title>",
    tit,
    "</title><style type='text/css'>",
    stylesHtml,
    "</style></head>",
    "<body class='bodyprint'>",
    printHtml.split("cntbodynormal").join("cntbodyprint"),
    "</body>",
    "</html>"
  ];
  win = window.open("about:blank");
  win.document.open();
  win.document.write(a.join(""));
  win.document.close();
  
}
