var numberOfColumns = 3;    // Number of columns for dragable boxes
var columnParentBoxId = 'floatingBoxParentContainer';    // Id of box that is parent of all your dragable boxes
var dragDropCounter = -1;
var boxIndex = 0;
var src_rightImage = 'http://www.catholic.org/images/mycol/collapse.gif';
var src_downImage = 'http://www.catholic.org/images/mycol/expand.gif';
var src_refreshSource = 'http://www.catholic.org/images/mycol/reload.gif';
var src_smallRightArrow = 'http://www.catholic.org/images/index/mycol/arrow_bullet.gif';
var opera = navigator.userAgent.toLowerCase().indexOf('opera')>=0?true:false;
var dragableBoxesArray = new Array();
var staticObjectArray = new Array();
var showRSSEditContent;
var txt_editLink = 'Edit';
var txt_editLink_stop = 'End edit';
var ajaxObjects = new Array();
var dragObjectBorderWidth = 1;
var transparencyWhenDragging = true;
var okToMove = true;
var autoScrollSpeed = 4;
var autoScrollActive = false;
var nameOfCookie = 'mycol_home_rss_box';
var cookieRSSSources = new Array();
var done = false;
var dragDropCounter;
var stringLength;

if ((screen.width>=1024) && (screen.height>=768)) {
  stringLength=45;
} else {
  stringLength=35;
}

function moveDragableElement(e){
  if(document.all)e = event;
  if( dragDropCounter < 10 )return;

  if(document.all && e.button!=1 && !opera){
    stop_dragDropElement();
    return;
  }

  if(document.body!=dragObject.parentNode){
    dragObject.style.width = (dragObject.offsetWidth - (dragObjectBorderWidth*2)) + 'px';
    dragObject.style.position = 'absolute';
    dragObject.style.textAlign = 'left';
    if(transparencyWhenDragging){
      dragObject.style.filter = 'alpha(opacity=50)';
      dragObject.style.opacity = '0.5';
    }
    dragObject.parentNode.insertBefore(rectangleDiv,dragObject);
    rectangleDiv.style.display='block';
    document.body.appendChild(dragObject);
    rectangleDiv.style.width = dragObject.style.width;
    rectangleDiv.style.height = (dragObject.offsetHeight - (dragObjectBorderWidth*2)) + 'px';
  }

  if(e.clientY<50 || e.clientY>(documentHeight-50)){
    if(e.clientY<50 && !autoScrollActive){
      autoScrollActive = true;
      autoScroll((autoScrollSpeed*-1),e.clientY);
    }

    if(e.clientY>(documentHeight-50) && document.documentElement.scrollHeight<=documentScrollHeight && !autoScrollActive){
      autoScrollActive = true;
      autoScroll(autoScrollSpeed,e.clientY);
    }
  }else{
    autoScrollActive = false;
  }

  var leftPos = e.clientX;
  var topPos = e.clientY + document.documentElement.scrollTop;

  dragObject.style.left = (e.clientX - mouse_x + el_x) + 'px';
  dragObject.style.top = (el_y - mouse_y + e.clientY + document.documentElement.scrollTop) + 'px';

  if(!okToMove)return;
  okToMove = false;

  destinationObj = false;
  rectangleDiv.style.display = 'none';

  var objFound = false;
  var tmpParentArray = new Array();

  if(!objFound){
    for(var no=1;no<dragableBoxesArray.length;no++){
      if(dragableBoxesArray[no]['obj']==dragObject)continue;
      tmpParentArray[dragableBoxesArray[no]['obj'].parentNode.id] = true;
      if(!objFound){
        var tmpX = getLeftPos(dragableBoxesArray[no]['obj']);
        var tmpY = getTopPos(dragableBoxesArray[no]['obj']);
        if(leftPos>tmpX && leftPos<(tmpX + dragableBoxesArray[no]['obj'].offsetWidth) && topPos>(tmpY-20) && topPos<(tmpY + (dragableBoxesArray[no]['obj'].offsetHeight/2))){
          destinationObj = dragableBoxesArray[no]['obj'];
          destinationObj.parentNode.insertBefore(rectangleDiv,dragableBoxesArray[no]['obj']);
          rectangleDiv.style.display = 'block';
          objFound = true;
          break;
        }

        if(leftPos>tmpX && leftPos<(tmpX + dragableBoxesArray[no]['obj'].offsetWidth) && topPos>=(tmpY + (dragableBoxesArray[no]['obj'].offsetHeight/2)) && topPos<(tmpY + dragableBoxesArray[no]['obj'].offsetHeight)){
          objFound = true;
          if(dragableBoxesArray[no]['obj'].nextSibling){
            destinationObj = dragableBoxesArray[no]['obj'].nextSibling;
            if(!destinationObj.tagName)destinationObj = destinationObj.nextSibling;
            if(destinationObj!=rectangleDiv)destinationObj.parentNode.insertBefore(rectangleDiv,destinationObj);
          }else{
            destinationObj = dragableBoxesArray[no]['obj'].parentNode;
            dragableBoxesArray[no]['obj'].parentNode.appendChild(rectangleDiv);
          }
          rectangleDiv.style.display = 'block';
          break;
        }

        if(!dragableBoxesArray[no]['obj'].nextSibling && leftPos>tmpX && leftPos<(tmpX + dragableBoxesArray[no]['obj'].offsetWidth)
          && topPos>topPos>(tmpY + (dragableBoxesArray[no]['obj'].offsetHeight))){
          destinationObj = dragableBoxesArray[no]['obj'].parentNode;
          dragableBoxesArray[no]['obj'].parentNode.appendChild(rectangleDiv);
          rectangleDiv.style.display = 'block';
          objFound = true;
        }
      }
    }
  }

  if(!objFound){
    for(var no=1;no<=numberOfColumns;no++){
      if(!objFound){
        var obj = document.getElementById('dragableBoxesColumn' + no);
        var left = getLeftPos(obj)/1;
        var width = obj.offsetWidth;
        if(leftPos>left && leftPos<(left+width)){
          destinationObj = obj;
          obj.appendChild(rectangleDiv);
          rectangleDiv.style.display='block';
          objFound=true;
        }
      }
    }
  }
  setTimeout('okToMove=true',5);
}

function stop_dragDropElement() {
  if(dragDropCounter<10){
    dragDropCounter = -1
    return;
  }
  dragDropCounter = -1;
  if(transparencyWhenDragging){
    dragObject.style.filter = null;
    dragObject.style.opacity = null;
  }
  dragObject.style.position = 'static';
  dragObject.style.width = null;
  var numericId = dragObject.id.replace(/[^0-9]/g,'');
  if(destinationObj && destinationObj.id!=dragObject.id){
    if(destinationObj.id.indexOf('dragableBoxesColumn')>=0){
      destinationObj.appendChild(dragObject);
      dragableBoxesArray[numericId]['parentObj'] = destinationObj;
    }else{
      destinationObj.parentNode.insertBefore(dragObject,destinationObj);
      dragableBoxesArray[numericId]['parentObj'] = destinationObj.parentNode;
    }
  }else{
    if(dragObjectNextSibling){
      dragObjectParent.insertBefore(dragObject,dragObjectNextSibling);
    }else{
      dragObjectParent.appendChild(dragObject);
    }
  }
  autoScrollActive = false;
  rectangleDiv.style.display = 'none';
  dragObject = false;
  dragObjectNextSibling = false;
  destinationObj = false;

  savePosition(userID);
  //if(useCookiesToRememberRSSSources)setTimeout('saveCookies()',100);

  documentHeight = document.documentElement.clientHeight;
}

function cancelSelectionEvent(e) {
  if(document.all)e = event;

  if (e.target) source = e.target;
  else if (e.srcElement) source = e.srcElement;

  // defeat Safari bug
  if (source.nodeType == 3) source = source.parentNode;

  if(source.tagName.toLowerCase()=='input')return true;

  if(dragDropCounter>=0)return false; else return true;
}

function cancelEvent() { return false; }

function createColumns() {
  if(!columnParentBoxId){
    alert('No parent box defined for your columns');
    return;
  }
  columnParentBox = document.getElementById(columnParentBoxId);
  var columnWidth = Math.floor(100/numberOfColumns);
  var sumWidth = 0;
  for(var no=0;no<numberOfColumns;no++){
    var div = document.createElement('DIV');
    if(no==(numberOfColumns-1))columnWidth = 99 - sumWidth;
    sumWidth = sumWidth + columnWidth;
    div.style.cssText = 'float:left;width:'+columnWidth+'%;padding:0px;margin:0px;';
    //div.style.height='100%';
    div.style.styleFloat='left';
    div.style.width = columnWidth + '%';
    div.style.padding = '0px';
    div.style.margin = '0px';
    //div.style.border = '1px solid #0000ff';
    div.id = 'dragableBoxesColumn' + (no+1);
    columnParentBox.appendChild(div);

    var clearObj = document.createElement('HR');
    clearObj.style.clear = 'both';
    clearObj.style.visibility = 'hidden';
    div.appendChild(clearObj);
  }

  var clearingDiv = document.createElement('DIV');
  columnParentBox.appendChild(clearingDiv);
  clearingDiv.style.clear='both';
}

function createHelpObjects() {
  /* Creating rectangle div */
  rectangleDiv = document.createElement('DIV');
  rectangleDiv.id='rectangleDiv';
  rectangleDiv.style.display='none';
  document.body.appendChild(rectangleDiv);
}

function initEvents() {
  document.body.onmousemove = moveDragableElement;
  document.body.onmouseup = stop_dragDropElement;
  document.body.onselectstart = cancelSelectionEvent;
  document.body.ondragstart = cancelEvent;
  documentHeight = document.documentElement.clientHeight;
}

function createABox(columnIndex,heightOfBox,externalUrl,uniqueIdentifier,notDragable) {
  boxIndex++;

  var maindiv = document.createElement('DIV');
  maindiv.className = 'dragableBox';
  maindiv.id = 'dragableBox' + boxIndex;

  var div = document.createElement('DIV');
  div.className='dragableBoxInner';
  maindiv.appendChild(div);

  addBoxHeader(div,externalUrl,notDragable,boxIndex);
  addBoxContentContainer(div,heightOfBox);
  //addBoxStatusBar(div);

  var obj = document.getElementById('dragableBoxesColumn' + columnIndex);
  var subs = obj.getElementsByTagName('DIV');
  if(subs.length>0){
    obj.insertBefore(maindiv,subs[0]);
  }else{
    obj.appendChild(maindiv);
  }

  dragableBoxesArray[boxIndex] = new Array();
  dragableBoxesArray[boxIndex]['obj'] = maindiv;
  dragableBoxesArray[boxIndex]['parentObj'] = maindiv.parentNode;
  dragableBoxesArray[boxIndex]['uniqueIdentifier'] = uniqueIdentifier;
  dragableBoxesArray[boxIndex]['heightOfBox'] = heightOfBox;
  dragableBoxesArray[boxIndex]['boxState'] = 1;    // Expanded
  dragableBoxesArray[boxIndex]['columnIndex'] = columnIndex;

  staticObjectArray[uniqueIdentifier] = boxIndex;

  return boxIndex;
}

function createARSSBox(url,columnIndex,heightOfBox,maxRssItems,minutesBeforeReload,uniqueIdentifier,state) {
  if(!heightOfBox)heightOfBox = '0';
  if(!minutesBeforeReload)minutesBeforeReload = '0';

  var tmpIndex = createABox(columnIndex,heightOfBox,true);

  dragableBoxesArray[tmpIndex]['rssUrl'] = url;
  dragableBoxesArray[tmpIndex]['maxRssItems'] = maxRssItems?maxRssItems:100;
  dragableBoxesArray[tmpIndex]['minutesBeforeReload'] = minutesBeforeReload;
  dragableBoxesArray[tmpIndex]['heightOfBox'] = heightOfBox;
  dragableBoxesArray[tmpIndex]['uniqueIdentifier'] = uniqueIdentifier;
  dragableBoxesArray[tmpIndex]['columnIndex'] = columnIndex;
  dragableBoxesArray[tmpIndex]['state'] = state;

  if(state=='1'){
    showHideBoxContent(false,document.getElementById('dragableBoxExpand' + tmpIndex));
  }

  staticObjectArray[uniqueIdentifier] = tmpIndex;

  var tmpInterval = false;
  if(minutesBeforeReload && minutesBeforeReload>0){
    var tmpInterval = setInterval("reloadRSSData(" + tmpIndex + ")",(minutesBeforeReload*1000*60));
  }

  dragableBoxesArray[tmpIndex]['intervalObj'] = tmpInterval;

  if(showRSSEditContent) {
    addRSSEditContent(document.getElementById('dragableBoxHeader' + tmpIndex))
  }

  if(!document.getElementById('dragableBoxContent' + tmpIndex).innerHTML) {
    document.getElementById('dragableBoxContent' + tmpIndex).innerHTML = '<img src="http://www.catholic.org/images/mycol/loading.gif" />loading RSS data';
  }

  if(url.length>0 && url!='undefined'){
    var ajaxIndex = ajaxObjects.length;
    ajaxObjects[ajaxIndex] = new sack();
    if(!maxRssItems)maxRssItems = 100;

    ajaxObjects[ajaxIndex].requestFile = 'readRSS.php?rssURL=' + escape(url) + '&maxRssItems=' + maxRssItems;
    ajaxObjects[ajaxIndex].onCompletion = function(){ showRSSData(ajaxIndex,tmpIndex,url); };
    ajaxObjects[ajaxIndex].runAJAX();
  }else{
    hideHeaderOptionsForStaticBoxes(tmpIndex);
  }
}

function addBoxHeader(parentObj,externalUrl,notDrabable,boxIndex) {
/*
  var title = dragableBoxesArray[boxIndex]['title'];
  var trucTitle = truncateTitle(title);
  alert(trucTitle);
*/
  var div = document.createElement('DIV');
  div.className = 'dragableBoxHeader';

  div.id = 'dragableBoxHeader' + boxIndex;
  div.onmouseover = mouseoverBoxHeader;
  div.onmouseout = mouseoutBoxHeader;
  if(!notDrabable){
    div.onmousedown = initDragDropBox;
    div.style.cursor = 'move';
  }

  var textSpan = document.createElement('SPAN');
  textSpan.id = 'dragableBoxHeader_txt' + boxIndex;
  div.appendChild(textSpan);
  parentObj.appendChild(div);

  var closeLink = document.createElement('A');
  closeLink.style.cssText = 'float:right';
  closeLink.style.styleFloat = 'right';
  closeLink.id = 'dragableBoxCloseLink' + boxIndex;
  closeLink.innerHTML = '<img src="http://www.catholic.org/images/mycol/close.gif" />';
  closeLink.style.cursor = 'pointer';
  closeLink.style.visibility = 'hidden';
  closeLink.onmousedown = closeDragableBox;
  div.appendChild(closeLink);

  var reloadImage = document.createElement('IMG');
  reloadImage.id = 'dragableBoxRefreshSource' + boxIndex;
  reloadImage.src = src_refreshSource;
  reloadImage.style.cssText = 'float:right';
  reloadImage.style.styleFloat = 'right';
  reloadImage.style.visibility = 'hidden';
  reloadImage.onclick = refreshRSS;
  reloadImage.style.cursor = 'pointer';
  if(!externalUrl)reloadImage.style.display='none';
  div.appendChild(reloadImage);

  var displayImage = document.createElement('IMG');
  displayImage.id = 'dragableBoxExpand' + boxIndex;
  displayImage.src = src_rightImage;
  displayImage.style.cssText = 'float:right';
  displayImage.style.visibility = 'hidden';
  displayImage.style.cursor = 'pointer';
  displayImage.onmousedown = showHideBoxContent;
  div.appendChild(displayImage);
}

function truncateTitle(title) {
  if (title) {
    if (title.length > stringLength) {
      title = title.substring(0, stringLength);
      title = title.replace(/\w+$/, '');
      title += '...';
    }
  }
  return title;
}

function mouseoverBoxHeader() {
//  if(dragDropCounter==10)return;
  var id = this.id.replace(/[^0-9]/g,'');
/*
  var title = dragableBoxesArray[id]['title'];
  var len = 40;
  if (title) {
    if (title.length > len) {
      title = title.substring(0, len);
      title = title.replace(/\w+$/, '');
      title += '...';
    }
  }
*/
  //document.getElementById('dragableBoxHeader_txt' + id).innerHTML = '<span><a href="' + dragableBoxesArray[id]['rssUrl'] + '"><img class="spacer" src="http://www.catholic.org/images/mycol/feed.gif" /></a>' + title + '&nbsp;<\/span>';
  document.getElementById('dragableBoxExpand' + id).style.visibility = 'visible';
  document.getElementById('dragableBoxRefreshSource' + id).style.visibility = 'visible';
  document.getElementById('dragableBoxCloseLink' + id).style.visibility = 'visible';
  if(document.getElementById('dragableBoxEditLink' + id))document.getElementById('dragableBoxEditLink' + id).style.visibility = 'visible';
}

function mouseoutBoxHeader(e,obj) {
  if(!obj)obj=this;
  var id = obj.id.replace(/[^0-9]/g,'');
/*
  var title = dragableBoxesArray[id]['title'];
  document.getElementById('dragableBoxHeader_txt' + id).innerHTML = '<span><a href="' + dragableBoxesArray[id]['rssUrl'] + '"><img class="spacer" src="http://www.catholic.org/images/mycol/feed.gif" /></a>' + title + '&nbsp;<\/span>';
*/
  document.getElementById('dragableBoxExpand' + id).style.visibility = 'hidden';
  document.getElementById('dragableBoxRefreshSource' + id).style.visibility = 'hidden';
  document.getElementById('dragableBoxCloseLink' + id).style.visibility = 'hidden';
  if(document.getElementById('dragableBoxEditLink' + id))document.getElementById('dragableBoxEditLink' + id).style.visibility = 'hidden';
}

function initDragDropBox(e) {
  dragDropCounter = 1;
  if(document.all)e = event;
  if (e.target) source = e.target;
  else if (e.srcElement) source = e.srcElement;
  if (source.nodeType == 3) // defeat Safari bug
    source = source.parentNode;

  if(source.tagName.toLowerCase()=='img' || source.tagName.toLowerCase()=='a' || source.tagName.toLowerCase()=='input' || source.tagName.toLowerCase()=='td' || source.tagName.toLowerCase()=='tr' || source.tagName.toLowerCase()=='table')return;

  mouse_x = e.clientX;
  mouse_y = e.clientY;
  var numericId = this.id.replace(/[^0-9]/g,'');
  el_x = getLeftPos(this.parentNode.parentNode)/1;
  el_y = getTopPos(this.parentNode.parentNode)/1 - document.documentElement.scrollTop;

  dragObject = this.parentNode.parentNode;

  documentScrollHeight = document.documentElement.scrollHeight + 100 + dragObject.offsetHeight;

  if(dragObject.nextSibling){
    dragObjectNextSibling = dragObject.nextSibling;
    if(dragObjectNextSibling.tagName!='DIV')dragObjectNextSibling = dragObjectNextSibling.nextSibling;
  }
  dragObjectParent = dragableBoxesArray[numericId]['parentObj'];

  dragDropCounter = 0;
  initDragDropBoxTimer();

  return false;
}

function initDragDropBoxTimer() {
  if(dragDropCounter>=0 && dragDropCounter<10){
    dragDropCounter++;
    setTimeout('initDragDropBoxTimer()',10);
    return;
  }
  if(dragDropCounter==10){
    mouseoutBoxHeader(false,dragObject);
  }
}

function showHideBoxContent(e,inputObj) {
  if(document.all)e = event;
  if(!inputObj)inputObj=this;

  var numericId = inputObj.id.replace(/[^0-9]/g,'');
  var obj = document.getElementById('dragableBoxContent' + numericId);

  obj.style.display = inputObj.src.indexOf(src_rightImage)>=0?'none':'block';
  inputObj.src = inputObj.src.indexOf(src_rightImage)>=0?src_downImage:src_rightImage

  dragableBoxesArray[numericId]['boxState'] = obj.style.display=='block'?1:0;
  toggleVisibility(userID, numericId);
  setTimeout('dragDropCounter=-5',5);
}

function mouseover_CloseButton() {
  this.className = 'closeButton_over';
  setTimeout('dragDropCounter=-5',5);
}

function mouseout_CloseButton() {
  this.className = 'closeButton';
}

function closeDragableBox(e,inputObj,externalUrl) {
  if(!inputObj)inputObj = this;
  var numericId = inputObj.id.replace(/[^0-9]/g,'');
  document.getElementById('dragableBox' + numericId).style.display='none';

  var feed = dragableBoxesArray[numericId]['rssUrl'];
  deleteBox(userID, numericId);

  //Set_Cookie(nameOfCookie + cookieRSSSources[dragableBoxesArray[numericId]['rssUrl']],'none' ,60000);
  //setTimeout('dragDropCounter=-5',5);
}

function refreshRSS() {
  reloadRSSData(this.id.replace(/[^0-9]/g,''));
  setTimeout('dragDropCounter=-5',5);
}

function reloadRSSData(numericId) {
  var ajaxIndex = ajaxObjects.length;
  ajaxObjects[ajaxIndex] = new sack();
  //showStatusBarMessage(numericId,'Loading data...');
  document.getElementById('dragableBoxContent' + numericId).innerHTML = '<img src="http://www.catholic.org/images/mycol/loading.gif" />loading RSS data';

  // Specifying which file to get
  ajaxObjects[ajaxIndex].requestFile = 'readRSS.php?rssURL=' + escape(dragableBoxesArray[numericId]['rssUrl']) + '&maxRssItems=' + dragableBoxesArray[numericId]['maxRssItems'];
  // Specify function that will be executed after file has been found
  ajaxObjects[ajaxIndex].onCompletion = function(){ showRSSData(ajaxIndex,numericId); };
  // Execute AJAX function
  ajaxObjects[ajaxIndex].runAJAX();
}

function addBoxContentContainer(parentObj,heightOfBox) {
  var div = document.createElement('DIV');
  div.className = 'dragableBoxContent';
  if(opera)div.style.clear='none';
  div.id = 'dragableBoxContent' + boxIndex;
  parentObj.appendChild(div);
  if(heightOfBox && heightOfBox/1>40){
    div.style.height = heightOfBox + 'px';
    div.setAttribute('heightOfBox',heightOfBox);
    div.heightOfBox = heightOfBox;
    if(document.all)div.style.overflowY = 'auto';else div.style.overflow='-moz-scrollbars-vertical;';
    if(opera)div.style.overflow='auto';
  }
}

function addBoxStatusBar(parentObj) {
  var div = document.createElement('DIV');
  div.className = 'dragableBoxStatusBar';
  div.id = 'dragableBoxStatusBar' + boxIndex;
  parentObj.appendChild(div);
}

function getTopPos(inputObj) {
  var returnValue = inputObj.offsetTop;
  while((inputObj = inputObj.offsetParent) != null){
    if(inputObj.tagName!='HTML')returnValue += inputObj.offsetTop;
  }
  return returnValue;
}

function getLeftPos(inputObj) {
  var returnValue = inputObj.offsetLeft;
  while((inputObj = inputObj.offsetParent) != null){
    if(inputObj.tagName!='HTML')returnValue += inputObj.offsetLeft;
  }
  return returnValue;
}

function addRSSEditContent(parentObj) {
  var editLink = document.createElement('A');
  editLink.href = '#';
  editLink.onclick = cancelEvent;
  editLink.style.cssText = 'float:right';
  editLink.style.styleFloat = 'right';
  editLink.id = 'dragableBoxEditLink' + boxIndex;
  editLink.innerHTML = '<img src="http://www.catholic.org/images/mycol/settings.gif" />';
  editLink.className = 'dragableBoxEditLink';
  editLink.style.cursor = 'pointer';
  editLink.style.visibility = 'hidden';
  editLink.onmousedown = editRSSContent;
  parentObj.appendChild(editLink);

  var editBox = document.createElement('DIV');
  editBox.style.clear='both';
  editBox.id = 'dragableBoxEdit' + boxIndex;
  editBox.style.display='none';
  
  var content = '<form><table cellpadding="1" cellspacing="5"><tr><td>Number of Items:<\/td><td><input type="text" id="maxRssItems[' + boxIndex + ']" onblur="this.value = this.value.replace(/[^0-9]/g,\'\');if(!this.value)this.value=' + dragableBoxesArray[boxIndex]['maxRssItems'] + '" value="' + dragableBoxesArray[boxIndex]['maxRssItems'] + '" size="2" maxlength="2"><\/td><\/tr><tr><td>Reload every:<\/td><td><input type="text" id="minutesBeforeReload[' + boxIndex + ']" onblur="this.value = this.value.replace(/[^0-9]/g,\'\');if(!this.value || this.value/1<5)this.value=' + dragableBoxesArray[boxIndex]['minutesBeforeReload'] + '" value="' + dragableBoxesArray[boxIndex]['minutesBeforeReload'] + '" size="2" maxlength="3">&nbsp;minute(s)<\/td><\/tr>' +'<tr><td><input type="button" onclick="saveSettings('+userID+', '+boxIndex+')" value="Save"><\/td><\/tr><\/table><\/form>';

  editBox.innerHTML = content;

  parentObj.appendChild(editBox);
}

function editRSSContent() {
  var numericId = this.id.replace(/[^0-9]/g,'');
  var obj = document.getElementById('dragableBoxEdit' + numericId);
  if(obj.style.display=='none'){
    obj.style.display='block';
    this.innerHTML = '<img src="http://www.catholic.org/images/mycol/settings.gif" />';
    document.getElementById('dragableBoxHeader' + numericId).style.height = '100px';
  }else{
    obj.style.display='none';
    this.innerHTML = '<img src="http://www.catholic.org/images/mycol/settings.gif" />';
    document.getElementById('dragableBoxHeader' + numericId).style.height = '16px';
  }
  setTimeout('dragDropCounter=-5',5);
}

function showRSSData(ajaxIndex,boxIndex,url) {
  var rssContent = ajaxObjects[ajaxIndex].response;
  tokens = rssContent.split(/\n\n/g);

  var headerTokens = tokens[0].split(/\n/g);
  if(headerTokens[0]=='0'){
    headerTokens[1] = '';
    headerTokens[0] = 'Invalid source';
    closeDragableBox(false,document.getElementById('dragableBoxHeader_txt' + boxIndex));
    return;
  }

  dragableBoxesArray[boxIndex]['title'] = headerTokens[0];
  
  // title
  var title = truncateTitle(headerTokens[0]);
  document.getElementById('dragableBoxHeader_txt' + boxIndex).innerHTML = '<span><a href="' + url + '"><img class="spacer" src="http://www.catholic.org/images/mycol/feed12x12.gif" /></a>' + title + '&nbsp;<\/span>';

  var string = '<ul class="listItems">';
  // Looping through RSS items
  for(var no=1;no<tokens.length;no++){
    var itemTokens = tokens[no].split(/##/g);
    var desc = new String(itemTokens[2]);
    //desc.replace("","");
    string = string + '<li><a class="boxItemHeader" href="'+itemTokens[3]+'" onclick="var w = window.open(this.href);return false">' + itemTokens[0] + '</a><div class="boxItemDescription"><a href="'+itemTokens[3]+'" onclick="var w = window.open(this.href);return false">' + desc + '</a></div></li><hr style="clear:both;border:none 0; border-top: 1px dashed #c4c4be; height: 1px;" />';

  }
  string = string + '</ul>';
  document.getElementById('dragableBoxContent' + boxIndex).innerHTML = string;
  ajaxObjects[ajaxIndex] = false;
}

function showStatusBarMessage(numericId,message) {
  //document.getElementById('dragableBoxStatusBar' + numericId).innerHTML = message;
}

function autoScroll(direction,yPos) {
  if(document.documentElement.scrollHeight>documentScrollHeight && direction>0)return;
  if(opera)return;
  window.scrollBy(0,direction);
  if(!dragObject)return;
  if(direction<0){
    if(document.documentElement.scrollTop>0){
      dragObject.style.top = (el_y - mouse_y + yPos + document.documentElement.scrollTop) + 'px';
    }else{
      autoScrollActive = false;
    }
  }else{
    if(yPos>(documentHeight-50)){
                dragObject.style.top = (el_y - mouse_y + yPos + document.documentElement.scrollTop) + 'px';
    }else{
      autoScrollActive = false;
    }
  }
  if(autoScrollActive)setTimeout('autoScroll('+direction+',' + yPos + ')',5);
}

function createBoxes(id) {
  showRSSEditContent = true;
  createRequest();
  var url = "getBoxes.php?id="+escape(id);
  request.open("GET", url, true);
  request.onreadystatechange = updateBoxes;
  request.send("");
}

function createDefaultBoxes(){
  showRSSEditContent = false;
  createRequest();
  var url = "getDefaultBoxes.php";
  request.open("GET", url, true);
  request.onreadystatechange = updateBoxes;
  request.send("");
}

function deleteBox(id, numericId) {
  var rssUrl = dragableBoxesArray[numericId]['rssUrl'];
  var uniqueIdentifier = dragableBoxesArray[numericId]['uniqueIdentifier'];
  var state = dragableBoxesArray[numericId]['boxState'];
  var columnIndex = dragableBoxesArray[numericId]['columnIndex'];

  createRequest();
  var url = "deleteBox.php?id="+escape(id)+"&columnIndex="+columnIndex+"&rssUrl="+rssUrl+"&uniqueIdentifier="+uniqueIdentifier;
  request.open("GET", url, true);
  request.onreadystatechange = saveBoxPositions;
  request.send("");
}

function toggleVisibility(id, boxIndex) {
  var intervalObj = dragableBoxesArray[boxIndex]['intervalObj'];
  if(intervalObj)clearInterval(intervalObj);

  var rssUrl = dragableBoxesArray[boxIndex]['rssUrl'];
  var uniqueIdentifier = dragableBoxesArray[boxIndex]['uniqueIdentifier'];
  var state = dragableBoxesArray[boxIndex]['boxState'];
  var columnIndex = dragableBoxesArray[boxIndex]['columnIndex'];

  createRequest();
  var url = "toggleVisibility.php?id="+escape(id)+"&columnIndex="+columnIndex+"&rssUrl="+rssUrl+"&uniqueIdentifier="+uniqueIdentifier+"&state="+state;
  request.open("GET", url, true);
  request.onreadystatechange = saveBoxPositions;
  request.send("");
}

function saveSettings(id, boxIndex) {
  var intervalObj = dragableBoxesArray[boxIndex]['intervalObj'];
  if(intervalObj)clearInterval(intervalObj);

  dragableBoxesArray[boxIndex]['maxRssItems'] = document.getElementById('maxRssItems[' + boxIndex + ']').value;
  dragableBoxesArray[boxIndex]['minutesBeforeReload'] = document.getElementById('minutesBeforeReload[' + boxIndex + ']').value;

  if(dragableBoxesArray[boxIndex]['minutesBeforeReload'] && dragableBoxesArray[boxIndex]['minutesBeforeReload']>5){
    var tmpInterval = setInterval("reloadRSSData(" + boxIndex + ")",(dragableBoxesArray[boxIndex]['minutesBeforeReload']*1000*60));
    dragableBoxesArray[boxIndex]['intervalObj'] = tmpInterval;
  }
  reloadRSSData(boxIndex);

  createRequest();
  var url = "saveSettings.php?id="+escape(id)+"&rssUrl="+dragableBoxesArray[boxIndex]['rssUrl']+"&maxRssItems="+dragableBoxesArray[boxIndex]['maxRssItems']+"&minutesBeforeReload="+dragableBoxesArray[boxIndex]['minutesBeforeReload'];

  request.open("GET", url, true);
  request.onreadystatechange = saveBoxSettings;
  request.send("");

}

function savePosition(id) {
  var tmpUrlArray = new Array();
  for(var no=1;no<=numberOfColumns;no++) {
    var parentObj = document.getElementById('dragableBoxesColumn' + no);
    var items = parentObj.getElementsByTagName('DIV');

    if(items.length==0)continue;

    var item = items[0];
    var tmpItemArray = new Array();

    while(item){
      var boxIndex = item.id.replace(/[^0-9]/g,'');
      if(item.id!='rectangleDiv'){
        tmpItemArray[tmpItemArray.length] = boxIndex;
      }
      item = item.nextSibling;
    }

    var columnIndex = no;
    var uniqueID = 1;
    for(var no2=tmpItemArray.length-1;no2>=0;no2--){
      var boxIndex = tmpItemArray[no2];
      var url = dragableBoxesArray[boxIndex]['rssUrl'];
      var heightOfBox = dragableBoxesArray[boxIndex]['heightOfBox'];
      var maxRssItems = dragableBoxesArray[boxIndex]['maxRssItems'];
      var minutesBeforeReload = dragableBoxesArray[boxIndex]['minutesBeforeReload'];
      var uniqueIdentifier = uniqueID;
      var state = dragableBoxesArray[boxIndex]['boxState'];

      createRequest();
      var url = "savePosition.php?id="+escape(id)+"&url="+url+"&columnIndex="+columnIndex+"&uniqueIdentifier="+uniqueIdentifier;
      request.open("GET", url, true);
      request.onreadystatechange = saveBoxPositions;
      request.send("");
      uniqueID=uniqueID+1;
    }
  }
}

function updateBoxes() {
  if( request.readyState == 4 ) {
    if( request.status == 200 ) {
      var response = request.responseXML.documentElement;
      var feeds = response.getElementsByTagName('feed');
      var items;
      var id;
      var url;
      var columnIndex;
      var heightOfBox;
      var maxRSSItems;
      var minutesBeforeReload;
      var state;
      var boxCount = 0;
      for( var i = 0; i<feeds.length; i++) {
        id = response.getElementsByTagName('id')[i].firstChild.data;
        url = response.getElementsByTagName('url')[i].firstChild.data;
        columnIndex = response.getElementsByTagName('columnIndex')[i].firstChild.data;
        heightOfBox = response.getElementsByTagName('heightOfBox')[i].firstChild.data;
        maxRSSItems = response.getElementsByTagName('maxRSSItems')[i].firstChild.data;
        minutesBeforeReload = response.getElementsByTagName('minutesBeforeReload')[i].firstChild.data;
        state = response.getElementsByTagName('state')[i].firstChild.data;

        createARSSBox(url,columnIndex,heightOfBox,maxRSSItems,minutesBeforeReload,id,state);
        boxCount++;
      }
    }
  }
}

function saveBoxPositions() {
  if( request.readyState == 4 ) {
    if( request.status == 200 ) {
    }
  }
}

function saveBoxSettings() {
  if( request.readyState == 4 ) {
    if( request.status == 200 ) {
      document.location.reload(true);
    }
  }
}

function initDragableBoxesScript() {
  createColumns();      // Always the first line of this function
  createHelpObjects();  // Always the second line of this function
  initEvents();         // Always the third line of this function

  try {
    if( userID > 0 ) {
      createBoxes(userID);
    } else {
      createDefaultBoxes();
    }  
  } catch(e) {
    //do nothing
  }
}
