var ArtNavigator = {
    prefix: "/",
    innerState:{id:0, lang:0, catalog:0, totalPage:0,  beginPage:0, maxArtLinks:0, maxMidLinks:0, loadedArt:{page:0,art:0}, pgNum:0, timeOut:null, temp:null},
    initialize: function(lang,catalog,maxMidLinks,maxArtLinks,total,container,menuCaption){
    this.innerState.loadedArt.page = null;
    this.innerState.loadedArt.art = null;
    this.navigator.struct = new Array();
	var idTime = new Date(), inst = this.innerState;
        inst.id = idTime.getTime();
	inst.maxMidLinks = maxMidLinks;
        inst.maxArtLinks = maxArtLinks;
	inst.lang = lang;
	inst.catalog = catalog;
	inst.totalPage = total;
	inst.beginPage = 0;
        var pref = "en";
        var menuCaption = '<table border="0" cellpadding="0" cellspacing="0" width="100%">'+
                          '<tr><td><div class="outCapImg" id="capimg_'+inst.id+'"></div></td>'+
                          '<td class="capText">'+menuCaption+'</td></tr></table>';
        var HTML = "<div id = an"+inst.id+" class=\""+pref+"_an\">"+
		   "<div id = ant"+inst.id+" class=\""+pref+"_ant\">"+menuCaption+"</div>"+
		   "<div id = anb"+inst.id+" class=\""+pref+"_anb\"></div>"+
		   "<div id = anm"+inst.id+" class=\""+pref+"_anm\"></div></div>";
	if($(container)) $(container).innerHTML = HTML;
        else document.write(HTML);
	this.navigator.downloadPages(0);
    },
    navigator: {
        struct: new Array(),
	currentPageNum: null,
	getLength: function(){if(this.struct){return this.struct.length;} else {return null}}, 
	getPage: function(num){
            var Page = {
                page: null,
		getLength: function(){return this.page.length;},
		getArt: function(num){
                    if(this.page && this.page.length >= num && num >=1){
                        var Art = {article: null,link: null}
                        Art.article = this.page[num-1][0];
                        Art.link = this.page[num-1][1];
                        return  Art;
                    }
                    else return null;
                }
            }
	    if(this.struct &&  this.struct.length >= num && num >=1){
                Page.page = this.struct[num-1];
		Page.length = this.struct[num-1].length;
		return Page;
            }
            return null;
        },
	addPage: function(structPage){
            this.struct[this.struct.length] = structPage;
	},
	downloadPages: function(tmpBegin){
            var inst = ArtNavigator.innerState;
            ArtNavigator.innerState.temp = tmpBegin;
			if(Mincom){
				if(Mincom.searchedTrigger == false){
					var strDate = "";
					if(Mincom.currentCatalog == 34)strDate = "&date="+Mincom.currentYears;
					
					var params = 'lang='+inst.lang+'&beginPage='+tmpBegin+'&catalog='+inst.catalog+
                         '&artCount='+inst.maxArtLinks+'&pageCount='+inst.maxMidLinks+strDate;
					ArtNavigator.ajaxRequest(ArtNavigator.prefix+"MGetPages.jsp",params,ArtNavigator.navigator.afterDownloadPages);
				}
				else{ 
					params =  'lang='+inst.lang+'&beginPage='+tmpBegin+'&searchedText='+Mincom.searchedWord+
                              '&artCount='+inst.maxArtLinks+'&pageCount='+inst.maxMidLinks;
					ArtNavigator.ajaxRequest(ArtNavigator.prefix+"MGetSearchedPages.jsp",params,ArtNavigator.navigator.afterDownloadPages);
				}
		 	}
	},
	afterDownloadPages: function(originalRequest){
            var inst = ArtNavigator.innerState;
            var doc = originalRequest.responseXML;
            if(doc == null) return;
            var pages = doc.getElementsByTagName('page');
            if(pages.length == null || pages.length == 0) return;
            for(i=0; i<pages.length; i++){
                var tempPage = new Array();
                var arts = pages[i].getElementsByTagName('article');
                if(arts == null || arts.length == null || arts.length == 0) continue;
                for(j=0; j<arts.length; j++){
                    tempPage[j] = new Array(arts[j].firstChild.nodeValue,arts[j].getAttribute('id')) 
                }
                ArtNavigator.navigator.addPage(tempPage);
            }
            ArtNavigator.navigator.currentPageNum = inst.pgNum = inst.beginPage = ArtNavigator.innerState.temp;                    
            ArtNavigator.menu.drawMid();
            ArtNavigator.innerState.temp = 0;   
            $("nln_"+inst.pgNum).className = "numDown";
            ArtNavigator.menu.drawBot(ArtNavigator.innerState.beginPage+1);
            if(ArtNavigator.innerState.temp == 0) ArtNavigator.menu.downBotLink($('cont_1'),1);
            if(ArtNavigator.innerState.temp == 0){
                var topPan = $("ant"+inst.id);
		var midPan = $("anb"+inst.id);
                $("anb"+inst.id).style.visibility = "hidden";
                $("anm"+inst.id).style.visibility = "hidden";
		midPan.style.top = topPan.offsetHeight+6;
		midPan.style.left = (topPan.offsetWidth-177)
		var botPan = $("anm"+inst.id);
		botPan.style.top = topPan.offsetHeight+midPan.offsetHeight+6;
		botPan.style.left = (topPan.offsetWidth-177);
        	$("anm"+inst.id).onmouseover = ArtNavigator.menu.overMidBotTop;
                $("anm"+inst.id).onmouseout = ArtNavigator.menu.outMidBotTop;
        	$("ant"+inst.id).onmouseover = ArtNavigator.menu.overTop;
                $("ant"+inst.id).onmouseout = ArtNavigator.menu.outMidBotTop;
                $("anb"+inst.id).onmouseover = ArtNavigator.menu.overMidBotTop;
                $("anb"+inst.id).onmouseout = ArtNavigator.menu.outMidBotTop;
            }
        }
    },
    menu: {
    	overTop: function(){
            $("anm"+ArtNavigator.innerState.id).style.visibility = "visible";
            $("anb"+ArtNavigator.innerState.id).style.visibility = "visible";
            $('capimg_'+ArtNavigator.innerState.id).className = "overCapImg";
            ArtNavigator.menu.overMidBotTop();
	},
    overMidLink: function(elem){
            if(elem.id.substr(0,3) == "lar") elem.className = "lArrowOver";
            if(elem.id.substr(0,3) == "rar") elem.className = "rArrowOver";
            if(elem.id.substr(0,3) == "nln"){
                var inst = ArtNavigator.innerState;
    		if(elem.id.substr(4) != inst.pgNum) elem.className = "numOver";
            }
	},
	outMidLink: function(elem){
            if(elem.id.substr(0,3) == "lar") elem.className = "lArrowOut";
            if(elem.id.substr(0,3) == "rar") elem.className = "rArrowOut";
            if(elem.id.substr(0,3) == "nln"){
                var inst = ArtNavigator.innerState;
    		if(elem.id.substr(4) != inst.pgNum) elem.className = "numOut";
            }
	},
	downMidLink: function(elem){
            var inst = ArtNavigator.innerState;
	    if(elem.id.substr(0,3) == "lar"){
                inst.pgNum = inst.beginPage-1;
		inst.beginPage = inst.beginPage-inst.maxMidLinks;
		this.drawMid();
		this.drawBot(inst.pgNum+1);
		$("nln_"+inst.pgNum).className = "numDown";
            } 
            if(elem.id.substr(0,3) == "rar"){
                var tmpBegin = inst.beginPage+inst.maxMidLinks;
		if(ArtNavigator.navigator.getLength() && tmpBegin<ArtNavigator.navigator.getLength()){
                    inst.pgNum = inst.beginPage = tmpBegin;
                    this.drawMid();
                    $("nln_"+inst.pgNum).className = "numDown";
                    this.drawBot(inst.beginPage+1);
		}
		else 
                    ArtNavigator.navigator.downloadPages(tmpBegin);
            } 	
            if(elem.id.substr(0,3) == "nln"){
                var index = elem.id.substr(4)*1;
		if(inst.pgNum != null && inst.pgNum >= inst.beginPage && inst.pgNum < (inst.beginPage+inst.maxMidLinks)){
                    if(elem.id.substr(4) != inst.pgNum) $("nln_"+inst.pgNum).className = "numOut";
		}
		elem.className = "numDown";
		inst.pgNum = elem.id.substr(4);
		if(ArtNavigator.navigator.getLength() && index<ArtNavigator.navigator.getLength()) this.drawBot(index+1);  
            }
		//=====================================================================
					var topPan = $("ant"+inst.id);
					var midPan = $("anb"+inst.id);
					var botPan = $("anm"+inst.id);
					botPan.style.top = topPan.offsetHeight+midPan.offsetHeight+6;
		//=====================================================================
	},
	drawMid: function(){
            var midLArr = "", midRArr ="",inst = ArtNavigator.innerState;
            var begPg = inst.beginPage, maxLin = inst.maxMidLinks, total = inst.totalPage, id = inst.id;
            var events = 'onmouseover="ArtNavigator.menu.overMidLink(this)" '+
                         'onmousedown="ArtNavigator.menu.downMidLink(this)" '+
		         'onmouseout="ArtNavigator.menu.outMidLink(this)"';
            if(begPg != 0) lArrow = '<div id="lar" class="lArrowOut" '+events+'></div>';
            else lArrow = '<div class="lArrowDisable"></div>';
            if((begPg + maxLin) < total) rArrow = '<div id="rar" class="rArrowOut"'+events+'></div>'; 
            else rArrow = '<div class="rArrowDisable"></div>';
            var counter = total-begPg;
            if(counter > maxLin) counter = maxLin;
            var midLinks = '<table border="0px" cellpadding="0px" cellspacing="0px" ><tr><td width="5px"></td><td>'+lArrow+'</td>';
            for(i = begPg; i<begPg+counter; i++){
                midLinks += '<td> <div id="nln_'+i+'" class="numOut"'+events+'>'+(i+1)+'</div></td>';
            }
            midLinks += '<td>'+rArrow+'</td><td width="5px"></td></tr></table>';
            midBody = '<div class="top"></div><div class="mid"><table border="0px" cellpadding="0px" cellspacing="0px"><tr><td width="177px" align="center">'+midLinks+'</td></tr></table></div><div class="bot"></div></table>';
            $("anm"+id).innerHTML = midBody;
	},
        overBotLink: function(elem,index){
            var inst = ArtNavigator.innerState;
            if(elem.id.substr(5) != inst.loadedArt.art || inst.loadedArt.page != index) 
                $("cont_"+elem.id.substr(5)).className="contOver";
            },
	outBotLink: function(elem,index){
            var inst = ArtNavigator.innerState;
            if(elem.id.substr(5) != inst.loadedArt.art || inst.loadedArt.page != index) 
                $("cont_"+elem.id.substr(5)).className="contOut";
            },
	downBotLink: function(elem, index){
	    var inst = ArtNavigator.innerState;
            if(elem.id.substr(5) != inst.loadedArt.art || inst.loadedArt.page != index){
                $("cont_"+elem.id.substr(5)).className="contDown";
		if(inst.loadedArt.page == index) $("cont_"+inst.loadedArt.art).className="contOut";
		inst.loadedArt.page = index;
		inst.loadedArt.art = elem.id.substr(5);
                if(Mincom){
                    var params = 'lang='+MincomStructure.lang+'&catalog='+Mincom.currentCatalog+'&artId='+elem.getAttribute("document");
                    Mincom.ajaxRequest(ArtNavigator.prefix+'MGetArt.jsp',params,Mincom.afterGetArt);
                }    
            }
	},
	drawBot: function(index){
	    var inst = ArtNavigator.innerState;
            var page = ArtNavigator.navigator.getPage(index);
            if(!page || page.getLength() == 0) return;
            var botBody = '';
            var suffix = null;
            for(i=1; i<=page.getLength(); i++){
				var shortStr = '';
				var strArray = page.getArt(i).article.split(" ");
				var element = document.createElement('div');
				document.body.appendChild(element);
				element.className = "text";
				element.style.width = "177px";
				element.style.visibility="hidden";
				var counter = 0;
				var priorHeight = 0;
				for(j=0; j<strArray.length; j++){ 
					element.innerHTML = shortStr + strArray[j]+'...';
					if(element.offsetHeight > priorHeight){
						priorHeight = element.offsetHeight;
						++counter; 
					}
					if(counter > 2){
						shortStr = shortStr.substr(0, shortStr.length-1)+'...';
						break;
					}
					shortStr += strArray[j]+' ';
				}
				document.body.removeChild(element);
				if((index == inst.loadedArt.page) && (i == inst.loadedArt.art)) suffix = "Down";
				else suffix = "Out";
				var events = 'onmouseover="ArtNavigator.menu.overBotLink(this,'+ index+');" '+
		  					 'onmouseout="ArtNavigator.menu.outBotLink(this,'+ index+');" '+
							 'onmousedown="ArtNavigator.menu.downBotLink(this,'+ index+');" ';
                botBody += '<div id="cont_'+i+'" class="cont'+suffix+'" '+events+' document="'+page.getArt(i).link+
                	       '"><div class="top"></div><div class="mid"><table border="0" cellpadding="0" cellspacing="0"><tr><td'+
                           ' width="24px"></td><td width="177" class="text" title="'+page.getArt(i).article+'">'+shortStr+'</td><td width="24px"></td>'+ '</tr></table></div><div class="bot"></div></div>';
            }
            $("anb"+inst.id).innerHTML = botBody;
	},
	overMidBotTop: function(){if(ArtNavigator.innerState.timeOut) {clearTimeout(ArtNavigator.innerState.timeOut)}},
	outMidBotTop: function(){ArtNavigator.innerState.timeOut = setTimeout(ArtNavigator.menu.disabledMenu,800);},
	disabledMenu: function(){
	    var id = ArtNavigator.innerState.id;
            $("anm"+id).style.visibility = "hidden";
            $("anb"+id).style.visibility = "hidden";
            $('capimg_'+id).className = "outCapImg";
        }
    },
    ajaxRequest: function(murl, params, responseFunction){
        var url = murl;
        var pars = params;
        var myAjax = new Ajax.Request(
        url,
        {
            method: 'post',
            parameters: pars,
            onComplete: responseFunction
        });
    }
}	