var req;
var retvalTheme
var isIE = false;
var ddlBooklet="";
var ddlTitle="";
var req2;
var reqColumn;
var reqAuthor;
var currentTime;
var debugWindow;

function WriteStatus(key, message)
{
	currentTime = new Date();
	if(!containsKey(key))
	{
		cm = message;
		put(key, cm)
	}
	if(typeof(debugWindow) != "object" && location.search.indexOf("debug") != -1)
		debugWindow = window.open("about:blank")
	if(location.search.indexOf("debug") != -1)
	{
		debugWindow.document.write(values() + "<br>")
	}
	window.status = values();
	setTimeout("RemoveStatus('" + key + "')", 7000)
}

function RemoveStatus(key)
{
	if(containsKey(key))
	{
		remove(key) 
	}
	//window.status = values();
}

function pathname()
{
	if(window.location.pathname.indexOf('www.nzz-folio.ch') != -1)
	{
		return '/www.nzz-folio.ch/system/nzz_intern.asmx';
	}
	else
	{
		return '/system/nzz_intern.asmx'
	}
}

function Initialize()
{
	//WriteStatus("Init1", "Initializing Mask");
    try
    {
        req=new ActiveXObject("Msxml2.XMLHTTP");
        isIE = true;
    }
    catch(e)
    {
        try
        {
            req=new ActiveXObject("Microsoft.XMLHTTP");
            isIE = true;
        }
        catch(oc)
        {
            req=null;
        }
    }

    if(!req&&typeof XMLHttpRequest!="undefined")
    {
        req=new XMLHttpRequest();
    }


}

function InitializeTheme()
{

	//WriteStatus("Init2", "Initializing 2. Mask");
    try
    {
        req2=new ActiveXObject("Msxml2.XMLHTTP");
        isIE = true;
    }
    catch(e)
    {
        try
        {
            req2=new ActiveXObject("Microsoft.XMLHTTP");
            isIE = true;
        }
        catch(oc)
        {
            req2=null;
        }
    }

    if(!req2&&typeof XMLHttpRequest!="undefined")
    {
        req2=new XMLHttpRequest();
    }


}

function InitializeAuthor()
{
	//WriteStatus("Init2", "Initializing 2. Mask");
    try
    {
        reqAuthor=new ActiveXObject("Msxml2.XMLHTTP");
        isIE = true;
    }
    catch(e)
    {
        try
        {
            reqAuthor=new ActiveXObject("Microsoft.XMLHTTP");
            isIE = true;
        }
        catch(oc)
        {
            reqAuthor=null;
        }
    }

    if(!reqAuthor&&typeof XMLHttpRequest!="undefined")
    {
        reqAuthor=new XMLHttpRequest();
    }


}

function InitializeColumn()
{
	//WriteStatus("Init2", "Initializing 2. Mask");
    try
    {
        reqColumn=new ActiveXObject("Msxml2.XMLHTTP");
        isIE = true;
    }
    catch(e)
    {
        try
        {
            reqColumn=new ActiveXObject("Microsoft.XMLHTTP");
            isIE = true;
        }
        catch(oc)
        {
            reqColumn=null;
        }
    }

    if(!reqColumn&&typeof XMLHttpRequest!="undefined")
    {
        reqColumn=new XMLHttpRequest();
    }


}

function encode_utf8(rohtext) {
             // dient der Normalisierung des Zeilenumbruchs
             rohtext = rohtext.replace(/\r\n/g,"\n");
             var utftext = "";
             for(var n=0; n<rohtext.length; n++)
                 {
                 // ermitteln des Unicodes des  aktuellen Zeichens
                 var c=rohtext.charCodeAt(n);
                 // alle Zeichen von 0-127 => 1byte
                 if (c<128)
                     utftext += String.fromCharCode(c);
                 // alle Zeichen von 127 bis 2047 => 2byte
                 else if((c>127) && (c<2048)) {
                     utftext += String.fromCharCode((c>>6)|192);
                     utftext += String.fromCharCode((c&63)|128);}
                 // alle Zeichen von 2048 bis 66536 => 3byte
                 else {
                     utftext += String.fromCharCode((c>>12)|224);
                     utftext += String.fromCharCode(((c>>6)&63)|128);
                     utftext += String.fromCharCode((c&63)|128);}
                 }
             return utftext;
         }

function UpdateTheme(key)
{

    InitializeTheme();
    //WriteStatus("UpdateTheme", "Update Theme");
    
    var url= pathname() + '/GetSuperThemeChild';

    if(req2!=null)
    {
        req2.onreadystatechange = ProcessUpdateTheme;
        req2.open("POST", url, true);
        req2.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
        req2.send('pThemeID='+key);
    }
}
function ProcessUpdateTheme()
{
	//WriteStatus("ProcessUpdateTheme", "Fill Theme Pulldown");
    if (req2.readyState == 4)
        {
        // only if "OK"
            if (req2.status == 200)
            {
				rv=req2.responseText;
				WriteStatus("ProcessUpdateTheme", "Got Theme");
				clearThemeList("SuperThemeChild");
				buildThemeList("SuperThemeChild", rv);
				chb = document.getElementById("_ctl0_POS_C1_1_chbSearchThemes");
				//chb.checked = true;
				document.getElementById('SuperThemeChild').onchange();
				//alert(runrecall);
				runrecall = false;
            }
            else
            {
                alert("Fehler: " + req2.statusText + req2.status);
            }
        }
}
var gKey
function UpdateAuthor(key)
{
	if(AuthorUpdateRunning==false)
	{
		AuthorUpdateRunning=true;
		InitializeAuthor();
		WriteStatus("UpdateAuthor", "Update Author");
		//Handle Theme
		var url= pathname() + '/GetThemeByAuthor';
		gKey = key;
		if(reqAuthor!=null)
		{
			
			reqAuthor.onreadystatechange = ProcessUpdateAuthor;
			reqAuthor.open("POST", url, true);
			reqAuthor.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
			reqAuthor.send('pAuthorFullNameDelim='+key);
	        
		}
    }

}
var AuthorUpdateRunning=false;

function ProcessUpdateAuthor()
{
	WriteStatus("ProcessUpdateAuthor", "Processing Update Author");
    if (reqAuthor.readyState == 4 )
        {
        
        // only if "OK"
            if (reqAuthor.status == 200)
            {
				retvalAuthor="";
				retvalAuthor=reqAuthor.responseText; 
				WriteStatus("ThemeResponse", "<br><br>Themenliste:" + reqAuthor.responseText);
				var ddlTheme;
				if(navigator.userAgent.indexOf("MSIE") < 0)
					ddlTheme = document.getElementById('tdSuperTheme').childNodes[1];
				else
					ddlTheme = document.getElementById('tdSuperTheme').childNodes[0];
				
				clearThemeList(ddlTheme.id);
				
				buildThemeList(ddlTheme.id, retvalAuthor);
				ddlTheme.onchange();
				
				//clearThemeList("SuperThemeChild");
				//retvalTheme = "|res|all|alle Hefttitel|res|"
				//buildThemeList("SuperThemeChild", retvalTheme);
				//document.getElementById('SuperThemeChild').disabled=true;
				//Handle Column
				
				InitializeColumn();
				WriteStatus("GetColumnByAuthor", "Get Columns by Author");
				var url= pathname() + '/GetColumnByAuthor';
				if(reqColumn!=null)
				{
					reqColumn.onreadystatechange = ProcessUpdateAuthorColumn;
					reqColumn.open("POST", url, true);
					reqColumn.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
					reqColumn.send('pAuthorFullNameDelim='+gKey);
				}
				AuthorUpdateRunning=false;
            }
            else
            {
                alert("Fehler: " + req.statusText + req.status);
            }
        }
}

function ProcessUpdateAuthorColumn()
{
	WriteStatus("ProcessUpdateAuthorColumn", "Update Author Column");
    if (reqColumn.readyState == 4)
        {
        // only if "OK"
            if (reqColumn.status == 200)
            {
				retvalCol=reqColumn.responseText; 
				var ddlColumn;
				if(navigator.userAgent.indexOf("MSIE") < 0)
					ddlColumn = document.getElementById('tdColumn').childNodes[1];
				else
					ddlColumn = document.getElementById('tdColumn').childNodes[0];
					
				clearThemeList(ddlColumn.id);
				WriteStatus("ActiveColumns", "<br><span style=Background-Color:#ff0000;>Kolumnenliste: </span><br>" + retvalCol);
				buildThemeList(ddlColumn.id, retvalCol);
				//clearThemeList("ColumnNames");
				//retvalColName = "|res|all|alle Kolumnen|res|"
				//buildThemeList("ColumnNames",  retvalColName);
				WriteStatus("ChangeDrops", "Raising onChange");
				ddlColumn.onchange();
				document.getElementById('ColumnNames').onchange();
				document.getElementById('SuperThemeChild').onchange();
				
				InitializeColumn();
				WriteStatus("GetColumnGroupsByAuthor", "Get Columngroups by Author");
				var url= pathname() + '/GetColumnGroupByAuthor';
				if(reqColumn!=null)
				{
					reqColumn.onreadystatechange = ProcessUpdateAuthorColumnGroup;
					reqColumn.open("POST", url, true);
					reqColumn.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
					reqColumn.send('pAuthorFullNameDelim='+gKey);
				}
            }
            else
            {
                alert("Fehler: " + req.statusText + req.status);
            }
        }
}

function ProcessUpdateAuthorColumnGroup()
{
	WriteStatus("ProcessUpdateAuthorColumn", "Update Author Column");
    if (reqColumn.readyState == 4)
        {
        // only if "OK"
            if (reqColumn.status == 200)
            {
				retvalColgroup=reqColumn.responseText; 
				var ddlColumn;
				if(navigator.userAgent.indexOf("MSIE") < 0)
					ddlColumn = document.getElementById('dvlayKolumne').childNodes[1];
				else
					ddlColumn = document.getElementById('dvlayKolumne').childNodes[0];
					
				clearThemeList(ddlColumn.id);
				WriteStatus("ActiveColumngroups", "<br><span style=Background-Color:#ff0000;>Kolumnenliste: </span><br>" + retvalCol);
				buildThemeList(ddlColumn.id, retvalColgroup);

				WriteStatus("ChangeDrops", "Raising onChange Columngroup");
				ddlColumn.onchange();

            }
            else
            {
                alert("Fehler: " + req.statusText + req.status);
            }
        }
}

function ProcessUpdateThemeByDate()
{
	WriteStatus("ProcessUpdateThemeByDate", "Processing Update Theme by Date");
    if (req.readyState == 4)
        {
        // only if "OK"
            if (req.status == 200)
            {
				retvalTheme=req.responseText;
				
				clearThemeList(ddlBooklet);
				buildThemeList(ddlBooklet, retvalTheme);
				ddlboo = document.getElementById(ddlBooklet);
				ddltit = document.getElementById(ddlTitle);
				
				if(ddlboo.options.length > 0)
					UpdateArticle(ddlboo.options[0].value, ddlTitle)
				else
				{
					ddltit.disabled=true;
					clearThemeList(ddlTitle);
				}
            }
            else
            {
                alert("Fehler: " + req.statusText + req.status);
            }
        }
}

function ProcessUpdateArticleByBookletID()
{
	WriteStatus("ProcessUpdateArticleByBookletID", "Processing Update Article by Booklet");
    if (req.readyState == 4)
        {
        // only if "OK"
            if (req.status == 200)
            {
				retvalTheme=req.responseText;
				ddltit = document.getElementById(ddlTitle);
				
				clearThemeList(ddlTitle);
				buildThemeList(ddlTitle, retvalTheme);

				for(i=0;i<=ddltit.options.length-1;i++)
				{
					if(ddltit.options[i].text.toLowerCase().indexOf('editorial') != -1)
						ddltit.selectedIndex=i;
				}
			
				ddltit.disabled=false;
            }
            else
            {
                alert("Fehler: " + req.statusText + req.status);
            }
        }
}


function UpdateThemeByDate(datetime, ddlBookletId, ddlTitleId)
{
	var _ddlBooklet = document.getElementById(ddlBookletId);
	var _ddlTitle = document.getElementById(ddlTitleId);
	
	ddlBooklet = _ddlBooklet.id;
	ddlTitle = _ddlTitle.id;
	

	Initialize();
	WriteStatus("UpdateThemeByDate", "Processing Update Theme by Date");

    var url= pathname() + '/GetBookletThemeByDate';

    if(req!=null)
    {
        req.onreadystatechange = ProcessUpdateThemeByDate;
        req.open("POST", url, true);
        req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
        req.send('pDate='+datetime);
    }
    
}

function UpdateArticle(bookletId, ddlTitleId)
{
	ddlTitle = ddlTitleId;
	
	Initialize();
	WriteStatus("UpdateArticle", "Update Article");

    var url= pathname() + '/GetArticleByBookletID';

    if(req!=null)
    {
        req.onreadystatechange = ProcessUpdateArticleByBookletID;
        req.open("POST", url, true);
        req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
        req.send('pBookletID='+bookletId);
    }
}

function ProcessColumnGroup()
{
	WriteStatus("ProcessColumnGroup", "Processing Update Column Groups");
    if (req.readyState == 4)
        {
        // only if "OK"
            if (req.status == 200)
            {
				retvalTheme=req.responseText;  
				WriteStatus("ProcessColumnGroup", "Got Columns");
				clearThemeList("ColumnNames");
				buildThemeList("ColumnNames", retvalTheme);
				WriteStatus("BuildColumnGroup", "<br>****Detailed Columns: <br>" + retvalTheme);
				chb = document.getElementById("_ctl0_POS_C1_1_chbSearchColumns");
				//chb.checked = true;
				document.getElementById('ColumnNames').disabled=false;
				document.getElementById('ColumnNames').onchange();
				runrecall = false;
            }
            else
            {
                alert("Fehler: " + req.statusText + req.status);
            }
        }
}

function UpdateColumnGroup(key)
{
    Initialize();
	WriteStatus("UpdateColumnGroup", "Update Column Groups");
	
    var url= pathname() + '/GetColumnsByGroupName';

    if(req!=null)
    {
        req.onreadystatechange = ProcessColumnGroup;
        req.open("POST", url, true);
        req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
        req.send('pColumnGroupName='+key);
    }
}

function clearThemeList(selectID) {
    var select = document.getElementById(selectID);
    while (select.length > 0) {
        select.remove(0);
    }
}


// fill Topics select list with items from
// the current XML document
function buildThemeList(selID, retItems) {
    var select = document.getElementById(selID);
	intStart = retItems.indexOf("|res|") + 5;
	intEnd = retItems.lastIndexOf("|res|");
	
	spres = retItems.substring(intStart, intEnd).replace("|res","").replace("#","|");
	var opt = spres.split(";")
	for(var j = 0; j < opt.length; j++)
	{
		if(opt[j] != "")
			appendToSelect(select, opt[j]);
    }
}



function appendToSelect(select, content) {
    var opt;
    opt = document.createElement("option");
    val = content.split("|");
    opt.value = val[0];
    opt.text = val[1];
    //opt.appendChild(val[1]);
    select.options.add(opt);
}



// ********** Hashtable **************
function Hashtable(){
    this.clear = hashtable_clear;
    this.containsKey = hashtable_containsKey;
    this.containsValue = hashtable_containsValue;
    this.get = hashtable_get;
    this.isEmpty = hashtable_isEmpty;
    this.keys = hashtable_keys;
    this.put = hashtable_put;
    this.remove = hashtable_remove;
    this.size = hashtable_size;
    this.toString = hashtable_toString;
    this.values = hashtable_values;
    this.hashtable = new Array();
}

/*=======Private methods for internal use only========*/

function hashtable_clear(){
    this.hashtable = new Array();
}

function hashtable_containsKey(key){
    var exists = false;
    for (var i in this.hashtable) {
        if (i == key && this.hashtable[i] != null) {
            exists = true;
            break;
        }
    }
    return exists;
}

function hashtable_containsValue(value){
    var contains = false;
    if (value != null) {
        for (var i in this.hashtable) {
            if (this.hashtable[i] == value) {
                contains = true;
                break;
            }
        }
    }
    return contains;
}

function hashtable_get(key){
    return this.hashtable[key];
}

function hashtable_isEmpty(){
    return (parseInt(this.size()) == 0) ? true : false;
}

function hashtable_keys(){
    var keys = new Array();
    for (var i in this.hashtable) {
        if (this.hashtable[i] != null)
            keys.push(i);
    }
    return keys;
}

function hashtable_put(key, value){
    if (key == null || value == null) {
        throw "NullPointerException {" + key + "},{" + value + "}";
    }else{
        this.hashtable[key] = value;
    }
}

function hashtable_remove(key){
    var rtn = this.hashtable[key];
    this.hashtable[key] = null;
    return rtn;
}

function hashtable_size(){
    var size = 0;
    for (var i in this.hashtable) {
        if (this.hashtable[i] != null)
            size ++;
    }
    return size;
}

function hashtable_toString(){
    var result = "";
    for (var i in this.hashtable)
    {     
        if (this.hashtable[i] != null)
            result += "{" + i + "},{" + this.hashtable[i] + "}\n";  
    }
    return result;
}

function hashtable_values(){
    var values = new Array();
    for (var i in this.hashtable) {
        if (this.hashtable[i] != null)
            values.push(this.hashtable[i]);
    }
    return values;
}
var hash = Hashtable();