################################################################################
# 
# print.summary.mjca: (Generic) function for printing summarized 'ca'-objects
#
#      Input: x The 'mjca' object which should be summarized
#
#     Output: summary method for 'mjca' object
# 
################################################################################

print.summary.mjca <- function(x, ...){
  object <- x
  r.out  <- object$rows
  c.out  <- object$columns
  if (!is.na(object$scree)[1]){
    cat("\n")
   # init:
    nchars <- 25
    Dim    <- object$scree[,1]
    ev     <- object$scree[,2]
    rev    <- object$scree[,3]
    crev   <- object$scree[,4]
    Value  <- ev[Dim]
    EV     <- rev[Dim]
    CUMEV  <- crev[Dim]
   # sev    <- sum(EV)
   # if (!is.na(object$sev)) {
    sev <- object$sev
   #   }
    if (length(rev)>1) {
      st <- round(nchars * (rev - min(rev)) / diff(range(rev)), 0)
      } else {
      st <- nchars
      }

    scree <- character(length(Dim))
    for (q in Dim) {
      if (!is.na(st[q])){
        s1 <- paste(rep("*", st[q]), collapse = "")
        s2 <- paste(rep(" ", nchars - st[q]), collapse = "")
        scree[q] <- paste(" ", s1, s2, sep = "")
        } else {
        scree[q] <- " "
        }
      }
    temp0 <- c(" "," ------"," "," "," ")
    temp1 <- c("Total:", sev, "", "", "")
    valuesum <- round(object$tin, 6)
    gluezero <- function(item, dig = 8, point = NA){
      item0 <- paste(item, paste(rep(0, dig), collapse=""), sep = "")
      item1 <- strsplit(item0,"", fixed = TRUE)
      pastebit <- function(x, digits = dig, poin = point){
        if(!is.na(poin)) { 
          x[poin] <- "."
          }
        paste(x[1:dig], collapse = "")
        }
      unlist(lapply(item1, pastebit))
      }
    remzero <- function(x, doub = FALSE){
      x0 <- strsplit(x, "", fixed = TRUE)
      pastebit2 <- function(x, doubl = doub){
        if (doubl){
           if (x[1]==0 & x[2]==0){
             x[1] <- " "
             x[2] <- " "
             }
          }
        if (x[1]==0) x[1] <- " "
        paste(x, collapse = "")
        }
      unlist(lapply(x0, pastebit2))
      }
    if (!is.na(EV[1])){
      EV.1 <- floor(log(EV, base = 10))
      EV.1[EV.1 < 0] <- 0
      EV.2 <- as.character(EV.1)
      EV.2[EV.1 == 1] <- ""
      EV.2[EV.1 == 0] <- "0"
      EV <- remzero(gluezero(paste(EV.2, EV, sep = ""), 4, 3))
      EV.sp <- paste(rep(" ", ifelse(max(EV.1==2), 0, 1)), collapse = "", sep = "")
      EV    <- paste(EV.sp, EV, sep = "")
      }
   # add leading space:
    if (!is.na(CUMEV[1])){
      CUMEV.1 <- floor(log(CUMEV, base = 10))
      CUMEV.1[CUMEV.1 < 0] <- 0
      CUMEV.2 <- as.character(CUMEV.1)
      CUMEV.2[CUMEV.1 == 2] <- ""
      CUMEV.2[CUMEV.1 == 1] <- "0"
      CUMEV.2[CUMEV.1 == 0] <- "00"
      CUMEV <- remzero(gluezero(paste(CUMEV.2, CUMEV, sep = ""), 5, 4), doub = TRUE)
      }
    scree.out <- data.frame(Dim   = c(Dim, "", "Total:"), 
                            Value = c(gluezero(as.character(Value)), "--------", 
                                      gluezero(as.character(valuesum), 8, 2)), 
                            EV    = c(EV, "-----", ifelse(!is.na(sev), gluezero(sev,5,4), "")), 
                            CUMEV = c(CUMEV, "", ""), 
                            scree = c(scree, "", ""))

    colnames(scree.out) <- c("dim", "value", "  %", "cum%", " scree plot")
    if (is.na(object$JCA.nit[1])){
      cat("Principal inertias (eigenvalues):\n\n")
      scree.out <- as.matrix(scree.out)
     # fix for rownames showing up in scree-plot
     # dimnames(scree.out)[[1]] <- rep("", length(dimnames(scree.out)[[1]]))
      rownames(scree.out) <- rep("", nrow(scree.out))
      print(as.matrix(scree.out), quote = FALSE)
      cat("\n")
      } else {
      cat("Principal inertias (eigenvalues):\n\n")
      scree.out <- as.matrix(scree.out[,1:2])
      dimnames(scree.out)[[1]] <- rep("", length(dimnames(scree.out)[[1]]))
      print(as.matrix(scree.out), quote = FALSE)
      cat(paste("\n Diagonal inertia discounted from eigenvalues: ", round(object$JCA.ind, 7), sep=""))
      cat(paste("\n Percentage explained by JCA in ", object$JCA.nd, " dimensions: ", sev, "%", sep=""))
      cat("\n (Eigenvalues are not nested)")
      cat(paste("\n [Iterations in JCA: ", object$JCA.nit, " , epsilon = ", 
                round(object$JCA.eps, 7), "]\n\n", sep=""))
      }
    }

 # print row/column summary:
  n1 <- dim(r.out)[1]
  n2 <- dim(r.out)[2]
  r.names <- dimnames(r.out)[[2]]
  r.dummy <- rep("|", n1)
  r.new <- cbind(r.dummy, r.out[,1], r.dummy, r.out[,2:4])
  r.nn <- c("", r.names[1], "", r.names[2:4])
  for (q in 1:((n2 - 4) / 3))
    {
    r.new <- cbind(r.new, r.dummy, r.out[,(5 + (q - 1) * 3):(5 + q * 3 - 1)])
    r.nn <- c(r.nn, "", r.names[(5 + (q - 1) * 3):(5 + q * 3 - 1)])
    }
  r.new <- cbind(r.new, r.dummy)
  r.nn <- c(r.nn, "")
  colnames(r.new) <- r.nn
  rownames(r.new) <- 1:n1

  n1 <- dim(c.out)[1]
  n2 <- dim(c.out)[2]
  c.names <- dimnames(c.out)[[2]]
  c.dummy <- rep("|", n1)
  c.new <- cbind(c.dummy, c.out[,1], c.dummy, c.out[,2:4])
  c.nn <- c("", c.names[1], "", c.names[2:4])
  for (q in 1:((n2 - 4) / 3))
    {
    c.new <- cbind(c.new, c.dummy, c.out[,(5 + (q - 1) * 3):(5 + q * 3 - 1)])
    c.nn <- c(c.nn, "", c.names[(5 + (q - 1) * 3):(5 + q * 3 - 1)])
    }
  c.new <- cbind(c.new, c.dummy)
  c.nn <- c(c.nn, "")
  colnames(c.new) <- c.nn
  rownames(c.new) <- 1:n1

 # cat("\nRows:\n")
 # print(as.matrix(r.new), quote = FALSE, right = TRUE)
  cat("\nColumns:\n")
  print(as.matrix(c.new), quote = FALSE, right = TRUE)
  cat("\n")
  }

################################################################################

