        var Dom = YAHOO.util.Dom;
        var Event = YAHOO.util.Event;
        var DDM = YAHOO.util.DragDropMgr;
        var IsIE = (navigator.userAgent.indexOf('MSIE') !=-1);
        
        var oPaginator;
        var oDataTable;
        var articles = new Array();
        var currentPage = 0;
        var selectedArticle = 0;
        var articlesPerPage = 25;
        var question;
        var searchResults;
        var currentAnswer;
        var homepageId = 0;       
                
        function Resize()
        {             	                
            var menu = document.getElementById('divFolder');
            if(menu){
            
             if(IsIE)   
	            dataTableWidth = document.body.clientWidth - menu.offsetWidth -60;
             else
            	dataTableWidth = document.body.clientWidth - menu.offsetWidth -80;

             if(oDataTable){
	            	oDataTable.set('width', dataTableWidth + 'px');
	            	dataTableWidth -= oDataTable.getColumn('time').getThLinerEl().offsetWidth;	            	
	            	if(dataTableWidth>0){
	            		oDataTable.setColumnWidth(oDataTable.getColumn('title'), dataTableWidth);
	            	}	            	
		            oDataTable._syncColWidths();    
            	}
            }

            var article = document.getElementById('articleFrame');
            if(article){
            	article.style.height=document.body.clientHeight-findPosY(article)+"px"; 
            }
        } 	     		

        function SetMode(mode, articleid)
        {
            var iframe = document.getElementById('articleFrame');
            var dataTable = document.getElementById('divArticle');
            if(mode==0){
            	//view article list
              	if(iframe){
              		iframe.src = "blank.html";
              		iframe.className = "hidden";	
              	}
                var dataTable = document.getElementById('divArticle');
                   	if(dataTable){
              		dataTable.className = "yui-dt";
              	}
              	Resize();
            }
            else{
        	//view specific article
              	if(iframe){
              		iframe.src = "articledetailv.php?mode=view&articleid="+articleid;
              		dataTable.className = "hidden";
              		iframe.className = "visible";	
              	}        		        		
        	}
        }

                
        function gup( url, name )
        {
          var regexS = "[\\?&]"+name+"=([^&#]*)";
          var regex = new RegExp( regexS );
          var results = regex.exec( url );
          if( results == null )
            return "";
          else
            return results[1];
        }

                
        function findArticle(pageNo, articleId)
        {
            var articlesInPage = articles[pageNo];
            for(var i=0; i<articlesInPage.length; i++)
            {
                if(articlesInPage[i].id == articleId)
                    return i;
            }
            return -1;                    	
        }

        function RefreshCurrentPage()
        {
            articles[currentPage]=null;
        	oDataTable.onPaginatorChangeRequest(oPaginator.getState());
        }

        
        function getArticleIndex(article)
        {
        	return oDataTable.getRecordSet().getRecordIndex(article);
        }

        function getSelectedRow()
        {
        	return oDataTable.getRecordSet().getRecord(oDataTable.getSelectedRows()[0]);
        }
        
        var dialogMessage;
        function messageBox(msg)
        {
        	if(!dialogMessage)
        	{
        	   dialogMessage=new YAHOO.widget.SimpleDialog("Message", 
   			   { width: "30em",
   			   fixedcenter: true,
   			   visible: true,
   			   draggable: true,
   			   close: true,
   			   text: "",
   			   icon: YAHOO.widget.SimpleDialog.ICON_ALARM,
   			   constraintoviewport: true,
   			   buttons: [{ text:"OK",  handler:function(){this.hide();}, isDefault:true } ]
   			 } );
        	}
        	dialogMessage.setHeader("Message");
        	dialogMessage.setBody(msg);
        	dialogMessage.render("messagebox");
        	dialogMessage.show();  				 
        }
                 
        function sendRequest(url,postdata,callback) {
        	var request = new XMLHttpRequest; 
        	
        	if(postdata){
        		request.open("POST", url, false);
        		request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        	}else
        	{
        		request.open("GET", url, false);
        	}        	 
        	request.onreadystatechange = function() 
        	{ 
            	if (this.readyState == XMLHttpRequest.DONE) 
                { 
        			callback(request.responseText);
                }
        	}
    		request.send(postdata);
        }

 
        function selectNextAnswer() {
        	if(searchResults.length==0){
            	messageBox("Cannot find seached article");
            	return;
        	}

        	var page = Math.floor((searchResults[currentAnswer].rownum-1)/articlesPerPage+1);      
            	oPaginator.setPage(page,false);
            	oDataTable.unselectAllRows();
    			oDataTable.selectRow(searchResults[currentAnswer].rownum-1);            	
            
            ++currentAnswer;
            if(currentAnswer >= searchResults.length){
               currentAnswer = 0;           
            }
        }
        
        function viewArticle(e) {
        	selectedArticle = getSelectedRow();      
        	location.href = "articlev.php?user="+username+"&articleid="+selectedArticle._oData.id;
    }    
        
        function searchArticle() {
   			var q = trim(document.getElementById('input').value);
   			if(q == "")
			{
   				document.getElementById('input').focus();
   				return false;
			}
   			if(q != question)
			{
   				question = q;	   				
   				currentAnswer = 0;
				sendRequest("handlearticlev.php", "cmd=SearchArticle&question="+q+"&user="+userid, function(json) 
		 		{
		 		 	 	var result = eval("(" + json + ")");
		 		 	 	searchResults = result;	 	
		 		});
			}
   			selectNextAnswer();           
			return false;            
 		   }
                
        function listArticles(e) {
        	location.href = "articlev.php?user="+username+"&mode=index";
    }        
                
             
        YAHOO.namespace("goodie.article");
        function init() {
        	YAHOO.util.Event.addListener("back_to_folder", "click", listArticles, YAHOO.goodie.article.dialogArticle, true);  
        	YAHOO.util.Event.addListener("view_article", "click", viewArticle, YAHOO.goodie.article.dialogArticle, true);        	        	
        }
        YAHOO.util.Event.onDOMReady(init);        
        function loadArticles(parm){

        	var index = gup(parm, "startIndex");
            var results =  gup(parm, "results");
            currentPage = index/results;

            if(!articles[currentPage])
            {
	 			sendRequest("handlearticlev.php", "cmd=LoadArticle&user="+userid+"&"+parm, function(json) 
	 		 	{
	 	 			var result = eval("(" + json + ")");
					if(!oPaginator){
		 	 			oPaginator = new YAHOO.widget.Paginator({
		 	            	alwaysVisible: false,
		 	                rowsPerPage: articlesPerPage,
		 	                totalRecords: result.total,
		 				    template :
		 					   '<p class="pg-nav"> {CurrentPageReport}'+
		 			            '{FirstPageLink} {PreviousPageLink} ' +
		 			            '{NextPageLink} {LastPageLink}' +
		 			        	'</p>',
		 					   pageLinks               : 10,
		 					   pageReportValueGenerator : function (paginator) {
		 					   var recs  = paginator.getPageRecords();         
		 					   return {
		 					   start     : (recs[0]+1),
		 					   end       : (recs[1]+1),
		 					   totalRecords: paginator.getTotalRecords()
		 					   };
		 					   },
		 					   pageReportTemplate : 'Articles {start} - {end} of {totalRecords}'
		 	            });
					}else if(oPaginator.getTotalRecords()!=result.total)
	 	 			{
	 	 				oPaginator.setTotalRecords(result.total, true);
	 	 			}

	 	 			if(articles.length < oPaginator.getTotalPages())
	 	 			{
	 	 			   articles.length = oPaginator.getTotalPages();
	 	 			}
	 	 			homepageId = result.homepage;
	 	 			articles[currentPage] = result.records;
	 	 	 	});            
            }
            return articles[currentPage];
        }
                               		
		YAHOO.util.Event.onContentReady("divArticle", function () {

	        loadArticles("sort=time&dir=desc&startIndex=0&results="+articlesPerPage);
	        if(0==articleid) 
	        	articleid = homepageId;	        
	        SetMode(mode, articleid);
			
		    YAHOO.goodie.article.articles = function() {
		        var myColumnDefs = [	                            
		            {key:"time", sortable:false, resizeable:true, label:"Time"},
		            {key:"title", sortable:false, resizeable:true, label:"Title"}
		        ];
		
		        var myDataSource = new YAHOO.util.FunctionDataSource(loadArticles);
		        myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;
		        myDataSource.responseSchema = {
		            fields: ["id","userid","title","content","time"]
		        };

		        var myConfigs = {
		        		initialRequest: "sort=time&dir=desc&startIndex=0&results="+articlesPerPage,
		                paginator: oPaginator,		                
		                dynamicData: true, 
		                selectionMode:"single"
		        };
		        
		        oDataTable = new YAHOO.widget.DataTable("divArticle",
		                myColumnDefs, myDataSource, myConfigs);
		        Resize();
		        // Subscribe to events for row selection
	            oDataTable.subscribe("rowMouseoverEvent", oDataTable.onEventHighlightRow);
	            oDataTable.subscribe("rowMouseoutEvent", oDataTable.onEventUnhighlightRow);
	            oDataTable.subscribe("rowClickEvent", oDataTable.onEventSelectRow);
	            oDataTable.subscribe("rowDblclickEvent", function() {
	            	viewArticle(null);
				}, oDataTable, true);
	            oDataTable.subscribe("rowSelectEvent", function() {
	            	selectedArticle = this.getRecordSet().getRecord(this.getSelectedRows()[0]);   
	            }, oDataTable, true);	            
	            oDataTable.subscribe("rowSelectEvent", function() {
	            	selectedArticle = this.getRecordSet().getRecord(this.getSelectedRows()[0]);   
	            }, oDataTable, true)
	            
	            return {
		            oDS: myDataSource,
		            oDT: oDataTable
		        };
		    }();
		});
