ArticleFetcher = function(){

       var installSuccess = function(respContainer, installButton, installerForm){
		return function(o){
		    if(document.getElementById('messageDialog')){
	               var n=document.getElementById('messageDialog');
		       n.parentNode.parentNode.removeChild(n.parentNode);
                       if(n.parentNode){
                          n.parentNode.removeChild(n);
                       }
		    }
		    //respContainer.innerHTML = o.responseText;
		    //                    installButton.disabled = true;
                    var messagesContainer = document.getElementById('messages');
                    switch(o.responseText+''){
		       case '401':
			   messagesContainer.innerHTML = "Connection error. Please try again";
		       break;
  		       case '2':
 			   messagesContainer.innerHTML = "Error: Please select one or more categories";
		       break;
  		       case '3':
 			   messagesContainer.innerHTML = "Error: Could not connect to FTP server";
		       break;
  		       case '4':
 			   messagesContainer.innerHTML = "Please enter your first name";
		       break;
  		       case '5':
 			   messagesContainer.innerHTML = "Please enter your website url";
		       break;
  		       case '6':
 			   messagesContainer.innerHTML = "Please enter your email address";
		       break;
  		       case '7':
 			   messagesContainer.innerHTML = "Database error";
		       break;
  		       default:
              		    WIDGET.messagebox("installSuccess", "Installation successful", "", "", 5);                 
                            var articlesURL = document.getElementById("webSite").value + "/pitch-site.com.articles/articlesmain.php";
                            var readMeURL = document.getElementById("webSite").value + "/pitch-site.com.articles/readme.txt";
			    messagesContainer.innerHTML = "Installation successful! You can view your articles by going to <a href='" + articlesURL + "'>" + articlesURL + "</a>.Please be sure to read the <a href='" + readMeURL + "'>readme</a> file for information on how to customize your installation plus other important information.";
		    }
		}
       }

	var installFailure = function(){
		return function(o){
		    if(document.getElementById('messageDialog')){
	               var n=document.getElementById('messageDialog');
		       n.parentNode.parentNode.removeChild(n.parentNode);
		    }
   	            WIDGET.messagebox("connErr", "Installation failure: Connection error", "", "", 5);   
		}
	}

	var installSetup = function(){
		return function(o){
		  if(document.getElementById('messageDialog')){
	             var n=document.getElementById('messageDialog');
		     n.parentNode.parentNode.removeChild(n.parentNode);
		  }
		  WIDGET.messagebox('messageDialog', 'Starting <img src="ajaxspinner.gif"></img>', '', '', 0, '750px');
		}
	}

	var installNotInit = function(){
		return function(o){
		  if(document.getElementById('messageDialog')){
	             var n=document.getElementById('messageDialog');
		     n.parentNode.parentNode.removeChild(parentNode);
		  }
		  WIDGET.messagebox('messageDialog', 'Not initialized', '', '');
		}
	}

	var installSent = function(){
		return function(o){
		  if(document.getElementById('messageDialog')){
	             var n=document.getElementById('messageDialog');
		     n.parentNode.parentNode.removeChild(n.parentNode);
		  }
		  WIDGET.messagebox('messageDialog', 'Installing <img src="ajaxspinner.gif"></img>', '', '', 0);
		}
	}

	var cache = '';

	var installInprocess = function(){
            return function(o){
                 if(typeof o.responseText=="unknown"){
		   WIDGET.messagebox('messageDialog', 'Installing <img src="ajaxspinner.gif"></img>', '', '', 0);
                 }
		 else{
                  var s = o.responseText;
                  s = s.replace(cache, '');
		  if(s!='' && s!='<br>' && s!='<br/>'){
		  if(document.getElementById('messageDialog')){
	             var n=document.getElementById('messageDialog');
		     n.parentNode.parentNode.removeChild(n.parentNode);
		  }
   	          WIDGET.messagebox('messageDialog', s + ' <img src="ajaxspinner.gif"></img>', '', '', 0);
		  }
	   	  cache=o.responseText;
		}
            }
	}


	 var install = function(respContainer){
            return function(e){
                var installButton = YAHOO.util.Event.getTarget(e);
  	        //YAHOO.util.Connect.setForm("installerForm");  
                var params = Ajax.getFormData("installerForm");
                var callback =
                {
		       success: installSuccess(respContainer, installButton, document.getElementById("installerForm")),
                       failure: installFailure(),
                       reqsent: installSent(),
                       reqinprocess: installInprocess(),
                       reqsetup: installSetup(),
                       reqnotinit: installNotInit()
                 };  

                Ajax.connect('POST', 'articlefetcher/server/articlefetcher.functions.php?run=install', callback, params);
	    }
	 }

       var toggleCategoriesCheckboxes = function(categoriesCheckboxes, checked){
	     return function(e){
                 YAHOO.util.Dom.batch(categoriesCheckboxes, function(el){el.checked= checked;});
                 YAHOO.util.Event.removeListener('toggleCategoriesCheckboxesButton', 'click');
                 YAHOO.util.Event.on('toggleCategoriesCheckboxesButton', 'click', toggleCategoriesCheckboxes(YAHOO.util.Dom.getElementsByClassName('categoryCheckbox'), !checked));

             }
         }

       var $ = function(id){
           return document.getElementById(id);
       }

       var closeArticleWindow = function(articleContainer, blanket){ 
           return function(e){
               YAHOO.util.Event.stopEvent(e);
               var closeLink = YAHOO.util.Event.getTarget(e);
               closeLink.parentNode.removeChild(closeLink);
               articleContainer.parentNode.removeChild(articleContainer);
    	       blanket.parentNode.removeChild(blanket);
           }
       }

       var showArticleSuccess = function(){
	    return function(o){
                try{
                    var article = YAHOO.lang.JSON.parse(o.responseText);
       	            var blanket = WIDGET.blanketPage();
                    var closeLink = $a({id: 'closeLink', href:'#'}, 'X');
                    var articleContainer = $div({id:'articleContainer'});
                    var title = $h2({});
                    var cont = $p({id:'articleContent'});
                    var authorResource = $p({});
                    var requiredResourceLink = $p({});
                    title.innerHTML = article.articleTitle;
                    cont.innerHTML = article.articleContent;
                    authorResource.innerHTML = article.authorResource;
                    requiredResourceLink.innerHTML = article.requiredResourceLink;
		    //                articleContainer.appendChild($div({id:'articleHandle'},closeLink));                
                    articleContainer.appendChild(title);                
                    articleContainer.appendChild(cont);                
		    articleContainer.appendChild(authorResource);
		    articleContainer.appendChild(requiredResourceLink);
                    document.body.appendChild(closeLink);
                    document.body.appendChild(articleContainer);
                    positionArticleElements(articleContainer, closeLink);
		    //                DOM.centerElHoriz(articleContainer);
		    //		YAHOO.util.Dom.setStyle(closeLink, 'left', '840px');  
                    YAHOO.util.Event.on(closeLink, 'click', closeArticleWindow(articleContainer, blanket));
		}
                catch(err){
                    alert('Article not found');
                }
            }
       }            

       var positionArticleElements = function(articleContainer, closeLink){
	     var winX = (YAHOO.util.Dom.getViewportWidth()/2) - (DOM.getElementWidth(articleContainer)/2) + YAHOO.util.Dom.getDocumentScrollLeft();
	     YAHOO.util.Dom.setStyle(articleContainer, "left", winX+ "px");
	     YAHOO.util.Dom.setStyle(closeLink, "left", winX+DOM.getElementWidth(articleContainer)+10+"px");
       }

       var showArticleFailure = function(){
	    return function(o){
            }
       }            

       var showArticle = function(articleId, user){

	    return function(e){
	       YAHOO.util.Event.stopEvent(e);
               if(user=='guest'){
                   if(confirm('You must be registered to view articles. Register now?')){
		       document.location.href = 'http://pitch-site.com';
                   }
               }
               else{
                   var callback =
   	           {
		       success: showArticleSuccess(),
    	               failure: showArticleFailure()
     	           };  
                   var cObj = YAHOO.util.Connect.asyncRequest('GET', 'articlefetcher/server/articlefetcher.functions.php?run=fetchArticleById&articleId='+articleId, callback);            
               }
  	    }

       }

       var downloadArticle = function(articleId, user){
	   return function(e){
	       /*      YAHOO.util.Event.stopEvent(e);
               var callback =
	       {
		   success: downloadArticleSuccess(),
    	           failure: downloadArticleFailure()
     	       };  
               var cObj = YAHOO.util.Connect.asyncRequest('GET', 'articlefetcher/server/articlefetcher.functions.php?run=downloadArticle&articleId='+articleId, callback);  */
               if(user=='guest'){
                   if(confirm('You must be registered to download articles. Register now?')){
		       document.location.href = 'http://pitch-site.com';
                   }
               }
               else{
                   document.location.href =  'articlefetcher/server/articlefetcher.functions.php?run=downloadArticle&articleId='+articleId;         
               }

           }
       }
        
       var fetchArticlesSuccess = function(categorySel, articlesContainer, user){
	    return function(o){

                var articles = YAHOO.lang.JSON.parse(o.responseText);
                var articleLink = null;
                var viewArticleButton = null;
                var row = null;
                var para = null;
                articlesContainer.innerHTML = "";
                $('articlesHeader').innerHTML = categorySel.options[categorySel.selectedIndex].value + ' Articles';
                for(i=0;i<articles.length;i++){
		    if(articles[i].articleTitle){
                        // articleLink = $a({'href':'#'}, articles[i].articleTitle);
			//	  		YAHOO.util.Event.on(articleLink, 'click', showArticle(articles[i].id));

                        viewArticleButton = $input({type:'button', value:'View full article'});
		    	YAHOO.util.Event.on(viewArticleButton, 'click', showArticle(articles[i].id, user));

                        downloadArticleButton = $input({type:'button', value:'Download article'});
		    	YAHOO.util.Event.on(downloadArticleButton, 'click', downloadArticle(articles[i].id, user));

                        row  = $li();
                        //row.appendChild(articleLink);
                        row.appendChild($h3({}, articles[i].articleTitle));
                        row.appendChild(viewArticleButton);
                        row.appendChild(downloadArticleButton);
			//     row.appendChild($a({href:articles[i].requiredResourceLink},articles[i].requiredResourceLink));
			//                        row.appendChild($input({_class: 'articleCheckbox', className: 'articleCheckbox', type:'checkbox', name:"articles["+articles[i].id+"]"}));
                        para = $p({});
                        para.innerHTML = articles[i].articlePreview;
                        row.appendChild(para);

			//             row = $li({}, articleLink, $input({_class: 'articleCheckbox', className: 'articleCheckbox', type:'checkbox', name:"articles["+articles[i].id+"]"}), $p({}, articles[i].articlePreview))
                    }
		    articlesContainer.appendChild(row);

                }

            }
        }            

        var fetchArticlesFailure = function(){
	    return function(o){
            }
        }            

       var fetchArticles = function(categorySel, articlesContainer, user){

	    return function(e){
               var callback =
	       {
		   success: fetchArticlesSuccess(categorySel, articlesContainer, user),
    	           failure: fetchArticlesFailure(articlesContainer)
     	       };  
               var cObj = YAHOO.util.Connect.asyncRequest('GET', 'articlefetcher/server/articlefetcher.functions.php?run=fetchArticlesByCategory&category='+categorySel.options[categorySel.selectedIndex].value, callback);            

  	    }


       }

       var loadCategoriesSuccess = function(containerEl, user){
	    return function(o){
                var categories = YAHOO.lang.JSON.parse(o.responseText);

                if(1){

	        var categorySel = $select();
                for(i=0;i<categories.length;i++){
                    if(categories[i].numberOfArticles > 60){
			categorySel.appendChild($option({value:categories[i].category}, categories[i].category));
                    }
                }

                containerEl.appendChild($li({}, $label({}, 'Category: '), categorySel));

		fetchArticlesFn = fetchArticles(categorySel, $('articlesContainer'), user);

                fetchArticlesFn();

                YAHOO.util.Event.on(categorySel, 'change', fetchArticlesFn);

                }
                else{
                for(i=0;i<categories.length;i++){
                    if(categories[i].numberOfArticles > 60){
			containerEl.appendChild($li({}, $div(categories[i].category, $input({_class: 'categoryCheckbox', className: 'categoryCheckbox', type:'checkbox', name:"categories["+categories[i].category+"]"}))));
                      
                    }

                }
                YAHOO.util.Event.on('toggleCategoriesCheckboxesButton', 'click', toggleCategoriesCheckboxes(YAHOO.util.Dom.getElementsByClassName('categoryCheckbox'), true));
                }

	    }
         }
  
        var loadCategoriesFailure = function(containerEl){
	    return function(o){
		alert("loadCategoriesFailure()");
            }
        }            

       var loadCategories = function(containerEl, user){
	    return function(e){
               var callback =
	       {
		   success: loadCategoriesSuccess(containerEl, user),
    	          failure: loadCategoriesFailure(containerEl)
     	       };  
               var cObj = YAHOO.util.Connect.asyncRequest('GET', 'articlefetcher/server/articlefetcher.functions.php?run=loadCategories', callback);            

  	    }
         }

       var loadSuccess = function(bodyEl, user){
	    return function(o){
                // Load the html into the body content element
		bodyEl.innerHTML += o.responseText;
                var installButton = document.getElementById("installButton");
                YAHOO.util.Event.on("installButton","click", install(document.getElementById("respContainer")));
                (loadCategories($("categoriesContainer"), user))();
	    }
	 }
  
        var loadFailure = function(bodyEl){
	    return function(o){
            }
        }            

       var load = function(bodyEl, user){
          return function(e){
            var callback =
	    {
		success: loadSuccess(bodyEl, user),
    	       failure: loadFailure(bodyEl)
     	    };  
            var cObj = YAHOO.util.Connect.asyncRequest('GET', 'articlefetcher/server/articlefetcher.functions.php?run=load', callback);            
	  }
	}
     
       return{

	   init : function(bodyEl, user){
		       return (function(e){
		            try{
				(load(bodyEl, user))();
			     }
			     catch(err){
			        alert(err + ":Install init()");
			     }
		       });
	          }
       };

}();



