//-----------------------------------------------------------------------------
//
// Copyright (c) 2004 by Computors Limited. All Rights Reserved.
//
// No part of this publication or software may be reproduced, transmitted,   
// transcribed, stored in a retrieval system, or translated into any      
// language without the prior written authorization of Computors Limited. 
//
// This is a licensed product of Computors Limitied.
//
// Program    : hcat_common.js
// Description: Common JScript functions
//
//-----------------------------------------------------------------------------

//----------------------------------------
// General Functions
//----------------------------------------
// Submit dropdown selection with the need for a form
function dropdownaction(targ,selObj,restore) {
  eval(targ+".location.href='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}

function formfocus(focuswidget) {
  if (focuswidget) {document.getElementById(focuswidget).focus();}
  return;
}

//----------------------------------------
// Function to do a bulk move from one list to another
//----------------------------------------
function MoveSelectedListItems(srcCombo, destCombo, doSort, intSort, useVals) {
  var numItems = 0;
  var curPos = destCombo.options.length;
  var srcLen = srcCombo.options.length;
  
  for (var x=0; x<srcCombo.options.length; x++) {
    if (srcCombo.options[x].selected) numItems++;
  }
  
  destCombo.options.length+=numItems;
  for (var x=0; x<srcCombo.options.length; x++) {
    if (srcCombo.options[x].selected==true) {
      destCombo.options[curPos].text=srcCombo.options[x].text;
      destCombo.options[curPos].value=srcCombo.options[x].value;
      curPos++;
    }
  }
  if (doSort) SortList(destCombo, intSort, useVals);
  
  // Now remove the selected items from the source listbox
  // This can be very slow for big lists, but I'm not sure how else to do it
  for (var x=srcLen-1; x>=0; x--) {
    if (srcCombo.options[x].selected) srcCombo.options[x]=null;
  }
}

//
// Compare functions used internally by the SortList routine,
//
function ListCompareNums(a,b) {
  var la = parseInt(a.split("{")[0]);
  var lb = parseInt(b.split("{")[0]);
  if (la < lb) return -1;
  if (la > lb) return 1
  return 0;
}

function ListCompareText(a,b) {
  var la = a.toLowerCase();
  var lb = b.toLowerCase();
  if (la < lb) return -1;
  if (la > lb) return 1
  return 0;
}

//
// Quite Fast way of sorting big option lists
//
function SortList(Combo, IntSort, UseVals) {
  var cmbText = new Array(Combo.options.length);
  var cmbItems;
  
  // get copy of  
  for (x=0; x<cmbText.length; x++) {
    cmbText[x]=(UseVals)?Combo.options[x].value + "{" + Combo.options[x].text:Combo.options[x].text + "{" + Combo.options[x].value;
  }
  
  if (IntSort) {
    cmbText.sort(ListCompareNums);
  } else {
    cmbText.sort(ListCompareText);
  }
      
  //rebuild main list, but don't redimension it
  for (x=0; x<cmbText.length; x++) { 
    cmbItems = cmbText[x].split("{");
    Combo.options[x].text=(UseVals)?cmbItems[1]:cmbItems[0];  
    Combo.options[x].value=(UseVals)?cmbItems[0]:cmbItems[1];
  }
}

//
// Select All elements in a Combo List
//
function ComboSelectAll(srcCombo) {
  var srcLen = srcCombo.options.length;

  for (var x=srcLen-1; x>=0; x--) {
    srcCombo.options[x].selected=true;
  }
}

//----------------------------------------
// Sort Table
//----------------------------------------
function TableOrder(ListName, Order, SelectCol) {

  // Setup
  var elemstr = "";
  var tmpobj;
  
//  var upbutton = document.getElementById("tableorder_upbut");
//  var downbutton = document.getElementById("tableorder_downbut");

  // Disable Buttons
//  upbutton.disable = true;
//  downbutton.disable = true;

  // Get table body ref
  var oTable = document.getElementById(ListName).firstChild;

  // Get number of rows in table ignoring title row
  var nbRows = (oTable.childNodes.length - 1);

  // Create array to hold check box values
  rowChkArr = new Array()
  rowItemIdArr = new Array()
  rowSortOrderArr = new Array()
  for (var i=0; i<nbRows; i++) {
    elemstr = "C" + i;
    tmpobj = document.getElementById(elemstr);
    rowChkArr[i] = tmpobj.checked;

    elemstr = "itemid_" + i;
    tmpobj = document.getElementById(elemstr);
    rowItemIdArr[i] = tmpobj.value;

    elemstr = "sortorder_" + i;
    tmpobj = document.getElementById(elemstr);
    rowSortOrderArr[i] = tmpobj.value;
  }

  // the first node will be reference.
  //var firstNode = oTable.childNodes(1);
      //var curNode = oTable.childNodes(nbRows-1);
      //curNode.removeNode(true);
      //oTable.insertBefore(curNode, firstNode);

  if (Order == "up") {
    for (var i=1; i<nbRows; i++) {
    
      //var rowchecked = oTable.childNodes[i].childNodes[4].innerHTML.checked;
      
      if (rowChkArr[i] && !rowChkArr[i-1]) {

        for (var j=0; j<SelectCol; j++) {
          oTable.childNodes[i+1].childNodes[j].swapNode(oTable.childNodes[i].childNodes[j])
        }

//        oTable.childNodes[i+1].swapNode(oTable.childNodes[i])
//        // swap back the order selection cell
//        oTable.childNodes[i+1].childNodes[SelectCol].swapNode(oTable.childNodes[i].childNodes[SelectCol])
//
//        // swap back the order button cell
//        if (i == 1) {
//          oTable.childNodes[i+1].childNodes[SelectCol].swapNode(oTable.childNodes[i].childNodes[(SelectCol+1)])
//        }

        // Swap Values
        elemstr = "itemid_" + i;
        document.getElementById(elemstr).value = rowItemIdArr[i-1];
        elemstr = "itemid_" + (i-1);
        document.getElementById(elemstr).value = rowItemIdArr[i];
//        elemstr = "sortorder_" + i;
//        document.getElementById(elemstr).value = rowSortOrderArr[i-1];
//        elemstr = "sortorder_" + (i-1);
//        document.getElementById(elemstr).value = rowSortOrderArr[i];

        // Swap the array shadowing selection
        var chktmp = rowChkArr[i];
        rowChkArr[i] = rowChkArr[i-1];
        rowChkArr[i-1] = chktmp;
      }
    }
  }
  if (Order == "down") {
    for (var i=(nbRows-2); i>=0; i--) {
      if (rowChkArr[i] && !rowChkArr[i+1]) {

        for (var j=0; j<SelectCol; j++) {
          oTable.childNodes[i+1].childNodes[j].swapNode(oTable.childNodes[i+2].childNodes[j])
        }

//        // swap back the order selection cell
//        oTable.childNodes[i+1].childNodes[SelectCol].swapNode(oTable.childNodes[i+2].childNodes[SelectCol])
//        // swap back the order button cell
//        if (i == 1) {
//          oTable.childNodes[i+1].childNodes[(SelectCol+1)].swapNode(oTable.childNodes[i+2].childNodes[(SelectCol+1)])
//        }
        
        // Swap Values
        elemstr = "itemid_" + i;
        document.getElementById(elemstr).value = rowItemIdArr[i+1];
        elemstr = "itemid_" + (i+1);
        document.getElementById(elemstr).value = rowItemIdArr[i];
//        elemstr = "sortorder_" + i;
//        document.getElementById(elemstr).value = rowSortOrderArr[i+1];
//        elemstr = "sortorder_" + (i+1);
//        document.getElementById(elemstr).value = rowSortOrderArr[i];

        // Swap Values
//        var valtmp = rowSortOrderArr[i];
//        rowSortOrderArr[i] = rowSortOrderArr[i-1];
//        rowSortOrderArr[i-1] = valtmp;

        // Swap the array shadowing selection
        var chktmp = rowChkArr[i];
        rowChkArr[i] = rowChkArr[i+1];
        rowChkArr[i+1] = chktmp;
      }
    }
  }

  // Re-apply seq numbers
  for (var i=0; i<nbRows; i++) {

    // Get check box with same reference to row
    var elemstr = "C" + i;
    var chkbox = document.getElementById(elemstr);
//    oTable.childNodes[i+1].childNodes[0].innerHTML = i;

    // Restore checked boxes
    chkbox.checked = rowChkArr[i];

    // Set background colour
//    elemstr = "row" + rowChkArr[i];
//    var tabrow = document.getElementById(elemstr);
    if (rowChkArr[i]) {
      oTable.childNodes[i+1].bgColor='#CCFFCC';
      if (i == 0) {
        oTable.childNodes[i+1].childNodes[(SelectCol+1)].bgColor='#FFFFFF';
      }
    } else {
      oTable.childNodes[i+1].bgColor='#FFFFFF';
    }
  }

  // do sumat at the end to make like it's working
  for (var i=1; i<nbRows; i++) {

  }

  // Enable Buttons
//  upbutton.disable = false;
//  downbutton.disable = false;
}


//----------------------------------------
// Menu Functions
//----------------------------------------

var menu_node_parents = new Array();

// Add Node
function Menu_Add_Node(item,parent) {
   menu_node_parents[item] = parent;
}

// Open
function Menu_Open(item) {
  if (menu_node_parents[item]) {
    var parent = menu_node_parents[item];
//   key.innerHTML="<img src='../images/hcatmenu_opened.gif' border='0'>";
    if (parent != "") {
      parentobj = document.getElementById(parent);
      parentobj.style.display="block";
      Menu_Open(parent);
    }
  }
}

// Expand
function Expand() {
   divs=document.getElementsByTagName("DIV");
   for (i=0;i<divs.length;i++) {
     divs[i].style.display="block";
//     key=document.getElementById("x" + divs[i].id);
//     key.innerHTML="<img src='textfolder.gif' width='16' height='16' hspace='0' vspace='0' border='0'>";
   }
}

// Collapse
function Collapse() {
   divs=document.getElementsByTagName("DIV");
   for (i=0;i<divs.length;i++) {
     divs[i].style.display="none";
//     key=document.getElementById("x" + divs[i].id);
//     key.innerHTML="<img src='folder.gif' width='16' height='16' hspace='0' vspace='0' border='0'>";
   }
}

// Toggle
function Toggle(item) {
  obj = document.getElementById(item);
  visible = (obj.style.display!="none");
//   key=document.getElementById(item + "_img");
  if (visible) {
//    Collapse;
    obj.style.display="none";
//     key.innerHTML="<img src='../images/hcatmenu_closed.gif' border='0'>";
  } else {
//    Menu_Open(item);
     obj.style.display="block";
//     key.innerHTML="<img src='../images/hcatmenu_opened.gif' border='0'>";
   }
}


//----------------------------------------
// Dreamweaver Stuff
//----------------------------------------
function MM_swapImgRestore() {
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() {
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImage() {
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_findObj(n, d) {
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_jumpMenu(targ,selObj,restore){
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}

