var Portal = function() {
  
  var _model;
  
  var _setCookie = function(name,value,expires,path,domain,secure) {
    document.cookie = name + "=" + escape (value) +
      ((expires) ? "; expires=" + expires.toGMTString() : "") +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : "");
  };
  
  var _getCookie = function(name,value,expires,path,domain,secure) {
  	var prefix = name + "=" 
  	var start = document.cookie.indexOf(prefix) 
    if (start==-1) {
  		return null;
  	}
  	var end = document.cookie.indexOf(";", start+prefix.length) 
  	if (end==-1) {
  		end=document.cookie.length;
  	}
  	var value=document.cookie.substring(start+prefix.length, end) 
  	return unescape(value);
  };
  
  var _deleteCookie = function(name,path,domain) {
    if (getCookie(name)) {
      document.cookie = name + "=" +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        "; expires=Thu, 01-Jan-70 00:00:01 GMT";
    }
  };
  
  var _togglePlusMinus = function(targetId) {
      if (document.getElementById) {
          target = document.getElementById(targetId);
      	if (target.innerHTML == "+") {
      		target.innerHTML = "-";
      	} else {
      		target.innerHTML = "+";
      	}
      }
  };
  
  var _addLoadEvent = function(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
      window.onload = func;
    } else {
      window.onload = function() {
        if (oldonload) {
          oldonload();
        }
        func();
      }
    }
  };
  
  var _setModulesContentDisplay = function(){
    if(_model.modules){
      for(var i=0; i < _model.modules.length;i++){
        var targetId = _model.modules[i] + "Content";
        var toggleId = _model.modules[i] + "Toggle";
        var cookie = _getCookie(targetId);
        if(cookie){
            var target = document.getElementById(targetId);
            var toggle = document.getElementById(toggleId);
            if (cookie == "true") { // show
                target.style.display = "";
                toggle.innerHTML = "-";
            } else { // hide
                target.style.display = "none";
                toggle.innerHTML = "+"; 
            }
        }
      }
    }
  };
  
  var _toggle = function(toggleId, targetId){
    var expanded;
    if(document.getElementById){
      var target = document.getElementById(targetId);
      if(target.style.display == "none"){
        target.style.display = "";  
        expanded = true;  
      }else{
        target.style.display = "none";
        expanded = false;
      }
      _togglePlusMinus(toggleId);
      var expires = new Date();
      expires.setTime(expires.getTime() + 24 * 365 * 60 * 60 * 1000); // sets it for approx 365 days.
      var path = _model.weblogPath ? _model.weblogPath : "/";
      _setCookie(targetId,expanded,expires,path);
    }
  };
  
  var _toggleAllModules = function(expand){
    if(_model.modules){
      for(var i=0; i < _model.modules.length;i++){
        var moduleId = _model.modules[i];
        if(document.getElementById){
          var expanded;
          var targetId = moduleId+"Content";
          var target = document.getElementById(targetId);
          if(expand){
            target.style.display = "";  
            expanded = true;  
          }else{
            target.style.display = "none";
            expanded = false;
          }
          var toggleId = moduleId + "Toggle";
          _togglePlusMinus(toggleId);
          var expires = new Date();
          expires.setTime(expires.getTime() + 24 * 365 * 60 * 60 * 1000); // sets it for approx 365 days.
          var path = _model.weblogPath ? _model.weblogPath : "/";
          _setCookie(targetId,expanded,expires,path);
        }
      }
    }
  };
  
  return {
    toggle: function(toggleId, targetId){
      _toggle(toggleId, targetId);
    },
    
    toggleAllModules: function(expand){
      _toggleAllModules(expand);
    },
    
    init: function(model){
      _model = model;
      _addLoadEvent(_setModulesContentDisplay);
    }
  };
  
}();