function shorten(s,n) {
    if (s.length > n) {
        return s.substring(0,n-5)+"... ";
    }
    return s;
}

function URLEncode(plaintext)
{
	//return encodeURIComponent(plaintext);
    
    // The Javascript escape and unescape functions do not correspond
	// with what browsers actually do...
	var SAFECHARS = "0123456789" +					// Numeric
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()";					// RFC2396 Mark characters
	var HEX = "0123456789ABCDEF";

    var nosupport = false;
    var xmlencoded = "";
    var encoded = "";
    for (var i = 0; i < plaintext.length; i++ ) {
		var ch = plaintext.charAt(i);
        //var charCode = ch.charCodeAt(0);
        //xmlencoded += "%";
        //xmlencoded += HEX.charAt((charCode >> 4) & 0xF);
        //xmlencoded += HEX.charAt(charCode & 0xF);
        if (ch == "&") {
            xmlencoded += "&amp;";
        } else if (ch == "<") {
            xmlencoded += "&lt;";
        } else if (ch == ">") {
            xmlencoded += "&gt;";
        } else if (ch == "\"") {
            xmlencoded += "&quot;";
        } else if (ch == "'") {
            xmlencoded += "&#39;";
        } else if (ch == "`") {
            xmlencoded += "&#96;";
        } else if (ch == "?") {
            xmlencoded += "&#63;";
        } else {
            xmlencoded += ch;
            }
    }

	for (var i = 0; i < xmlencoded.length; i++ ) {
		var ch = xmlencoded.charAt(i);
	    if (ch == " ") {
		    encoded += "+";				// x-www-urlencoded, rather than %20
		} else if (SAFECHARS.indexOf(ch) != -1) {
		    encoded += ch;
		} else {
            var charCode = ch.charCodeAt(0);
		    /*if (charCode < 128) {
                encoded += String.fromCharCode(charCode);
            }
            else if((charCode > 127) && (charCode < 2048)) {
                encoded += String.fromCharCode((charCode >> 6) | 192);
                encoded += String.fromCharCode((charCode & 63) | 128);
            }
            else {
                encoded += String.fromCharCode((charCode >> 12) | 224);
                encoded += String.fromCharCode(((charCode >> 6) & 63) | 128);
                encoded += String.fromCharCode((charCode & 63) | 128);
            }
            */
			if (charCode > 2000) {
                alert(charCode);
                nosupport = true;
				encoded += "+";
			} else if (charCode > 1487) {
                encoded+="%26%23"+charCode+"%3B"; 
                //charCode -= 1344;
            } else {
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
            }
		}
	} // for
    
    if (nosupport) {
        			    alert( "There are some characters that couldn't be encoded. " + 
                               "They will be substituted by spaces." );
    }
	return encoded;
};

/**********************************************************************************/


	
function showHomeLink(lang) {
	setid("homeLink","&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"javascript:loadPage('home.html?lang="+lang+"')\"><strong>home</strong></a>");
}

function hideHomeLink() {
	setid("homeLink","");
}



/**************************************************************************************
 * Blog
 */

function fillBlog(xml) { 
    if (isAdmin) setid("addnewentrylink","<a href='javascript:newBlogEntry()'>add new entry</a>");
    var s = "";
    setid("blogcontent",s);
    var entries = xnodes(xml,'blog_entry');//xml.getElementsByTagName('blog_entry');
    for (i=0 ; i<entries.length ; i++) {
        var id = xget(entries[i],'id');
        s="<div class='blogentryblogpage' id='entry"+id+"'></div>"+
            "<div class='blogsep' id='entry"+id+"sep'><img src='images/linkssep.gif' width='515' height='1'></div>";
        setid("blogcontent",getid("blogcontent")+s);
        fillBlogEntry(entries[i]);
    }
} 

function fillBlogEntry(xml) {
    var id = xget(xml,'id');
    var s = 
        "<div class='blogdate' id='entry"+id+"date'>"+xget(xml,'date')+"</div>"+
        "<div class='blogtitle'><span class='bigtitle' id='entry"+id+"title'>"+xget(xml,'title')+"</span></div>"+
        "<div class='parabodytext blogpageentrypos' id='entry"+id+"txt'>"+xget(xml,'txt')+"</div>"+
        "<div class='blogtext bloglinksdiv'>";
    var links = xnodes(xml,'link');

    for (j=0 ; j<links.length ; j++) {
        s+="<span class='blogdate'>link:</span>&nbsp;<a  id ='"+id+"link"+j+"' href='"+xget(links[j],'url')+
            "' class='stronglink'>"+xget(links[j],'title')+"</a><br>";
    }
    if (isAdmin) s+="<div align='right'><a href=\"javascript:editBlog("+id+")\">edit</a>&nbsp;&nbsp;"+
        "<a href=\"javascript:deleteItem('fillBlog','act=deleteBlog&id="+id+"')\">delete</a></div>";
    if (!existid('entry'+id)) {
        document.getElementById('entrynew').id='entry'+id;
        setid("addnewentrylink","<a href='javascript:newBlogEntry()'>add new entry</a>");
    }
    setid('entry'+id,s);
}

function fillBlogPreview(xml) {
    var s = "";
    var entries = xnodes(xml,'blog_entry');
    for (i=0 ; i<3 && i<entries.length ; i++) {
        var id = xget(entries[i],'id');
        s+="<div class=\"blogentry\"><div class=\"blogdate\">"+xget(entries[i],'date')+"</div>"+
            "<div class=\"blogtitle\">"+xget(entries[i],'title')+"</div><div class=\"blogtext\">"+
            shorten(xget(entries[i],'txt'),120)+"</bdo></div><div class=\"blogmore\"><a href=\"javascript:loadPage('blog.html')\">"+
            "&gt;&gt; more </a></div></div>";
    }
    setid("blogcontent",s+getid("blogcontent"));
}


    
/******************************************************************************************************
 * Courses
 */

function fillCourses(xml) { 
    if (isAdmin) setid("addnewentrylink","<a href='javascript:newCourseEntry()'>add new entry</a>");
    var s = "";
    setid("coursescontent",s);
    var entries = xnodes(xml,'course_entry');
    for (i=0 ; i<entries.length ; i++) {
        var id = xget(entries[i],'course_id');
        s="<div class=\"link\" id='entry"+id+"'></div><div class=\"maincontentsep\" id='entry"+id+"sep'>"+
            "<img src=\"images/linkssep.gif\" width=\"515\" height=\"1\"></div>";
        setid("coursescontent",getid("coursescontent")+s);
        fillCourseEntry(entries[i]);
    }
} 

function fillCourseEntry(xml) {
    var id = xget(xml,'course_id');
    var s = 
        "<div class='smalltitle'><a href='"+xget(xml,'linkurl')+"' id='entry"+id+"title'>"+xget(xml,'title')+"</a></div>"+
        "<div class='parabodytext' id='entry"+id+"desc'>"+xget(xml,'desc')+"</div>"+
        "<div class='blogtext'><span class=\"boldsmall\" id='entry"+id+"comment'>"+xget(xml,'comment')+"</span></div>";
    if (xget(xml,'filename')!="") {
        s+= "<div class='blogtext'><a class='stronglink' href='http://micro5.mscc.huji.ac.il/~lecker/homepage/upload/"+xget(xml,'filename')+"' id='entry"+id+"filename'>&gt; get to file</a></div>";
    }
    if (isAdmin) s+="<div align='right'><a href=\"javascript:editCourse("+id+")\">edit</a>&nbsp;&nbsp;"+
        "<a href=\"javascript:deleteItem('fillCourses','act=deletecourse&id="+id+"')\">delete</a></div>";
    if (!existid('entry'+id)) {
        document.getElementById('entrynew').id='entry'+id;
        setid("addnewentrylink","<a href='javascript:newCourseEntry()'>new</a>");
    }
    setid('entry'+id,s);
}


/******************************************************************************************************
 * Links
 */

function fillLinks(xml) { 
    if (isAdmin) setid("addnewentrylink","<a href='javascript:newLinkEntry()'>add new entry</a>");
    var s = "";
    setid("linkscontent",s);
    var entries = xnodes(xml,'link_entry');
    for (i=0 ; i<entries.length ; i++) {
        var id = xget(entries[i],'link_id');
        s="<div class=\"link\" id='entry"+id+"'></div><div class=\"maincontentsep\" id='entry"+id+"sep'>"+
            "<img src=\"images/linkssep.gif\" width=\"515\" height=\"1\"></div>";
        setid("linkscontent",getid("linkscontent")+s);
        fillLinkEntry(entries[i]);
    }
} 

function fillLinkEntry(xml) {
    var id = xget(xml,'link_id');
    var s = 
        "<div class='smalltitle'><a href='"+xget(xml,'linkurl')+"' id='entry"+id+"title'>"+xget(xml,'title')+"</a></div>"+
        "<div class='parabodytext' id='entry"+id+"desc'>"+xget(xml,'desc')+"</div>"+
        "<div class='blogtext'><a href='"+xget(xml,'linkurl')+"' id='entry"+id+"url'>"+shorten(xget(xml,'linkurl'),70)+"</a></div>";
    if (isAdmin) s+="<div align='right'><a href=\"javascript:editLink("+id+")\">edit</a>&nbsp;&nbsp;"+
        "<a href=\"javascript:deleteItem('fillLinks','act=deletelink&id="+id+"')\">delete</a></div>";
    if (!existid('entry'+id)) {
        document.getElementById('entrynew').id='entry'+id;
        setid("addnewentrylink","<a href='javascript:newLinkEntry()'>add new entry</a>");
    }
    setid('entry'+id,s);
}



/******************************************************************************************************
 * Books
 */

function fillBooks(xml) { 
    if (isAdmin) setid("addnewentrylink","<a href='javascript:newBookEntry()'>add new entry</a>");
    var s = "";
    setid("bookscontent",s);
    var entries = xnodes(xml,'book_entry');
    for (i=0 ; i<entries.length ; i++) {
        var id = xget(entries[i],'book_id');
        s="<div class=\"link\" id='entry"+id+"'></div><div class=\"maincontentsep\" id='entry"+id+"sep'>"+
            "<img src=\"images/linkssep.gif\" width=\"515\" height=\"1\"></div>";
        setid("bookscontent",getid("bookscontent")+s);
        fillBookEntry(entries[i]);
    }
} 

function fillBookEntry(xml) {
    var id = xget(xml,'book_id');
    var s = 
        "<div class='smalltitle'id='entry"+id+"title' >"+xget(xml,'title')+"</div>"+
        "<div class=\"details detailsmargin\"id='entry"+id+"details' >"+xget(xml,'details')+"</div>"+
        "<div class='parabodytext' id='entry"+id+"desc'>"+xget(xml,'desc')+"</div>";
    if (xget(xml,'filename')!="") {
        s+= "<div class='blogtext'><a class='stronglink' href='http://micro5.mscc.huji.ac.il/~lecker/homepage/upload/"+xget(xml,'filename')+"' id='entry"+id+"filename'>&gt; get to file</a></div>";
    }
    s+="<div class='blogtext'><a class='stronglink' href='"+xget(xml,'linkurl')+"' id='entry"+id+"link'>"+shorten(xget(xml,'linkurl'),70)+"</a></div>";
    if (isAdmin) s+="<div align='right'><a href=\"javascript:editBook("+id+")\">edit</a>&nbsp;&nbsp;"+
        "<a href=\"javascript:deleteItem('fillBooks','act=deletebook&id="+id+"')\">delete</a></div>";
    if (!existid('entry'+id)) {
        document.getElementById('entrynew').id='entry'+id;
        setid("addnewentrylink","<a href='javascript:newBookEntry()'>add new entry</a>");
    }
    setid('entry'+id,s);
}


/******************************************************************************************************
 * Articles
 */

function fillArticles(xml) { 
    if (isAdmin) setid("addnewentrylink","<a href='javascript:newArticleEntry()'>add new entry</a>");
    var s = "";
    setid("articlescontent",s);
    var entries = xnodes(xml,'article_entry');
    for (i=0 ; i<entries.length ; i++) {
        var id = xget(entries[i],'article_id');
        s="<div class=\"link\" id='entry"+id+"'></div><div class=\"maincontentsep\" id='entry"+id+"sep'>"+
            "<img src=\"images/linkssep.gif\" width=\"515\" height=\"1\"></div>";
        setid("articlescontent",getid("articlescontent")+s);
        fillArticleEntry(entries[i]);
    }
} 

function fillArticleEntry(xml) {
    var id = xget(xml,'article_id');
    var s = 
        "<div class='smalltitle'id='entry"+id+"title' >"+xget(xml,'title')+"</div>"+
        "<div class=\"details detailsmargin\"id='entry"+id+"details' >"+xget(xml,'details')+"</div>"+
        "<div class='parabodytext' id='entry"+id+"desc'>"+xget(xml,'desc')+"</div>";
    if (xget(xml,'filename')!="") {
        s+= "<div class='blogtext'><a class='stronglink' href='http://micro5.mscc.huji.ac.il/~lecker/homepage/upload/"+xget(xml,'filename')+"' id='entry"+id+"filename'>&gt; get to file</a></div>";
    }
    s+="<div class='blogtext'><a class='stronglink' href='"+xget(xml,'linkurl')+"' id='entry"+id+"link'>"+
        shorten(xget(xml,'linkurl'),70)+"</a></div>";
    if (isAdmin) s+="<div align='right'><a href=\"javascript:editArticle("+id+")\">edit</a>&nbsp;&nbsp;"+
        "<a href=\"javascript:deleteItem('fillArticles','act=deletearticle&id="+id+"')\">delete</a></div>";
    if (!existid('entry'+id)) {
        document.getElementById('entrynew').id='entry'+id;
        setid("addnewentrylink","<a href='javascript:newArticleEntry()'>add new entry</a>");
    }
    setid('entry'+id,s);
}

/******************************************************************************************************
 * Reviews
 */

function fillReviews(xml) { 
    if (isAdmin) setid("addnewentrylink","<a href='javascript:newReviewEntry()'>add new entry</a>");
    var s = "";
    setid("reviewscontent",s);
    var entries = xnodes(xml,'review_entry');
    for (i=0 ; i<entries.length ; i++) {
        var id = xget(entries[i],'review_id');
        s="<div class=\"link\" id='entry"+id+"'></div><div class=\"maincontentsep\" id='entry"+id+"sep'>"+
            "<img src=\"images/linkssep.gif\" width=\"515\" height=\"1\"></div>";
        setid("reviewscontent",getid("reviewscontent")+s);
        fillReviewEntry(entries[i]);
    }
} 

function fillReviewEntry(xml) {
    var id = xget(xml,'review_id');
    var s = 
        "<div class='smalltitle'id='entry"+id+"title' >"+xget(xml,'title')+"</div>"+
        "<div class=\"details detailsmargin\"id='entry"+id+"details' >"+xget(xml,'details')+"</div>"+
        "<div class='parabodytext' id='entry"+id+"desc'>"+decodeURIComponent(xget(xml,'desc'))+"</div>";
    if (xget(xml,'filename')!="") {
        s+= "<div class='blogtext'><a class='stronglink' href='http://micro5.mscc.huji.ac.il/~lecker/homepage/upload/"+xget(xml,'filename')+"' id='entry"+id+"filename'>&gt; get to file</a></div>";
    }
    s+="<div class='blogtext'><a class='stronglink' href='"+xget(xml,'linkurl')+"' id='entry"+id+"link'>"+shorten(xget(xml,'linkurl'),70)+"</a></div>";
    if (isAdmin) s+="<div align='right'><a href=\"javascript:editReview("+id+")\">edit</a>&nbsp;&nbsp;"+
        "<a href=\"javascript:deleteItem('fillReviews','act=deletereview&id="+id+"')\">delete</a></div>";
    if (!existid('entry'+id)) {
        document.getElementById('entrynew').id='entry'+id;
        setid("addnewentrylink","<a href='javascript:newReviewEntry()'>add new entry</a>");
    }
    setid('entry'+id,s);
}


/******************************************************************************************************
 * CV
 */

var g_cvxml;
var g_cvversions;

function fillCV(xml) {
    if (isAdmin) setid("editcv","<a href='javascript:editCV()')'>edit</a>");
    g_cvxml = (new XMLSerializer()).serializeToString(xnodes(xml,'cvxml')[0]);//get("<headline>Test</headline><list><entry>test entry <desc/>description in the next line</entry><entry>second entry</entry><entry>3rd one</entry></list><seperator/><headline>second headline</headline>";
    g_cvxml = g_cvxml.replace(/<\/?cvxml.*?>/g,"");
    g_cvversions = xnodes(xml,'cv_versions')[0];//xget(xml,'cv_versions');
    var s = g_cvxml;//xget(xml,'cvxml');//g_cvxml;
    s = s.replace(/<separator\/>/g,"<div class='cvsep'><img src='images/linkssep.gif' width='515'></div>");
    s = s.replace(/<headline>/g,"<div valign='top' class='bigtitle' style='margin-top:0x;'>");
    s = s.replace(/<\/headline>/g,"</div>");
    s = s.replace(/<list>/g,"<div valign='top' class='listtable'><table valign='top' width='*' border='0' cellspacing='0' cellpadding='0'>");
    s = s.replace(/<\/list>/g,"</table></div>");
    s = s.replace(/<entry>/g,"<tr><td class='blogtext' valign='top'><div class='tableblt'><img src='images/grey_blt.gif'></div></td><td class='blogtext' valign='top'><span class='bolddark'>");
    s = s.replace(/<desc\/>/g,"</span><br>");
    s = s.replace(/<\/entry>/g,"</td></tr><tr><td  valign='top'><img src='images/tdot.gif' class='tableleading'></td></tr>");
    setid("cvcontent",s);
}

