var Y = YAHOO;
var ANIM = YAHOO.util.Anim;
var AUTOCOMPLETE = YAHOO.widget.AutoComplete;
var BUTTON = YAHOO.widget.Button;
var CAL = YAHOO.widget.Calendar;
var CAROUSEL = YAHOO.widget.Carousel;
var LINECHART = YAHOO.widget.LineChart;
var BARCHART = YAHOO.widget.BarChart;
var COLUMNCHART = YAHOO.widget.ColumnChart;
var PIECHART = YAHOO.widget.PieChart;
var STACKEDBARCHART = YAHOO.widget.StackedBarChart;
var STACKEDCOLUMNCHART = YAHOO.widget.StackedColumnChart;
var COLORPICKER = YAHOO.widget.ColorPicker;
var XHR = YAHOO.util.Connect;
var COOKIE = YAHOO.util.Cookie;
var DATASOURCE = YAHOO.util.DataSource;
var DATATABLE = YAHOO.widget.DataTable;
var DD  = YAHOO.util.DD;
var DOM = YAHOO.util.Dom;
var EDITOR = YAHOO.widget.Editor;
var ELEMENT = YAHOO.util.Element;
var EVENT = YAHOO.util.Event;
var GET = YAHOO.util.Get;
var HISTORY = YAHOO.util.History;
var IMAGELOADER = YAHOO.util.ImageLoader;
var CROPPER = YAHOO.widget.ImageCropper;
var JSON = YAHOO.lang.JSON;
var LAYOUT = YAHOO.widget.Layout;
var LOGGER = YAHOO.widget.LogReader;
var MENU = YAHOO.widget.Menu;
var CONTEXTMENU = YAHOO.widget.ContextMenu;
var MENUBAR = YAHOO.widget.MenuBar;
var PANEL = YAHOO.widget.Panel;
var PAGINATOR = YAHOO.widget.Paginator;
var PROGRESSBAR = YAHOO.widget.ProgressBar;
var RESIZE = YAHOO.util.Resize;
var SELECTOR = YAHOO.util.Selector;
var SIMPLEEDITOR = YAHOO.widget.SimpleEditor;
var SLIDER = YAHOO.widget.Slider;
var STORAGE = YAHOO.util.StorageManager;
var SWF = YAHOO.widget.SWF;
var SWFSTORE = YAHOO.util.SWFStore;
var STYLESHEET = YAHOO.util.StyleSheet;
var TAB = YAHOO.widget.TabView;
var TREE = YAHOO.widget.TreeView;
var UPLOADER = YAHOO.widget.Uploader;

// Render YUI Trees
tree = new Array();
tree_top = new Array();
tree_expanded = new Array();
tree_expanded_node_count = new Array();
tree_callback = new Array();
tree_state_restore = new Array();
var tree_state = COOKIE.getSub('mdk-state','tree_expanded_nodes');
if (tree_state == null) {
  tree_state = "";
}
var toggle_link = new Array();
var toggle_text = new Array();

folder_tree_callback = new Array();

function toggle_tree(tree) {
  button_id = 'toggle_tree_'+tree.id;
  if (DOM.get(button_id)) {
    if (typeof tree_expanded[tree.id] == 'undefined') {
      tree_expanded[tree.id] = 'collapsed';
    }
    if (tree_expanded[tree.id] == 'collapsed') {
      tree.expandAll();
      DOM.get(button_id).innerHTML='(Collapse All)';
      tree_expanded[tree.id] = 'expanded';
    }
    else if(tree_expanded[tree.id] == 'expanded') {
      tree.collapseAll();
      DOM.get(button_id).innerHTML='(Expand All)';
      tree_expanded[tree.id] = 'collapsed';
    }
  }
}

function toggle_tree_sync(tree) {
  var tree_id = tree.id;
  var state = 'unchanged';
  var button_id = 'toggle_tree_'+tree.id;
  if (DOM.get(button_id)) {
    var tree_nodes = tree.getNodesByProperty('className','tree_' + tree_id);
    if (tree_expanded_node_count[tree.id] == 0 || !tree_nodes[0].expanded ) {
      state = 'collapsed';
    }
    else if (tree_expanded_node_count[tree.id] == tree_nodes.length) {
      state = 'expanded';
    }

    if (state != 'unchanged') {
      tree_expanded[tree.id] = state;
      if (tree_expanded[tree.id] == 'collapsed') {
        DOM.get(button_id).innerHTML='(Expand All)';
      }
      else {
        DOM.get(button_id).innerHTML='(Collapse All)';
      }
    }
  }
}

var tree_add_dynamic_nodes = function(o) {
  if (o.responseText !== undefined) {
    eval(o.responseText);
  }
}

function tree_track_state(tree,node) {
  if (typeof node.data.myNodeId != 'undefined') {
    var tree_id = tree.id;
    if (node.data.get_children) {
      var request = XHR.asyncRequest('GET', node.data.get_children, {success:tree_add_dynamic_nodes, cache:false});
    }
    var node_id = node.data.myNodeId;
    current_state = new Array();
    if (tree_state) {
      expanded_nodes = tree_state.split(',');
    }
    else {
      expanded_nodes = new Array();
      tree_state = "";
    }
    var node_exists = tree_state.indexOf(node_id);
    if (node.expanded && node_exists == -1) {
      expanded_nodes.push(node_id);
      tree_expanded_node_count[tree_id]++;
    }
    else if (!node.expanded && node_exists != -1) {
      expanded_nodes = tree_track_remove_node(expanded_nodes, node_id);
      tree_expanded_node_count[tree_id]--;
    }
    tree_state = expanded_nodes.join(',');
    COOKIE.setSub('mdk-state','tree_expanded_nodes',tree_state,{ path: '/'});
    toggle_tree_sync(tree);
  }
}

function tree_reset_expand(tree_id) {
  if (tree_state != '') {
    var tree = TREE.getTree(tree_id);
    var tree_nodes = tree.getNodesByProperty('className','tree_' + tree_id);
    tree_expanded_node_count[tree_id] = 0;
    for (var i in tree_nodes) {
      var node_id = tree_nodes[i].data.myNodeId;
      if (tree_state.indexOf(node_id) != -1) {
        tree_nodes[i].expand();
        if (tree_nodes[i].data.get_children) {
          var cb_id = 'cb_' + tree_nodes[i].data.myNodeId;
          var cb = 0;
	  if (DOM.get(cb_id)) {
	    if(DOM.get(cb_id).checked) {
	      cb = 1
	    }
	  }
          var request = XHR.asyncRequest('GET', tree_nodes[i].data.get_children, {success:tree_add_dynamic_nodes});
        }
        tree_expanded_node_count[tree_id]++;
      }
    }
    toggle_tree_sync(tree);
  }
    var selected_communities = DOM.getElementsByClassName('tree_selected_community','div',tree_id);
    if (selected_communities.length > 0) {
      var parent_div = DOM.getAncestorByClassName(selected_communities[0],'ygtvitem');
      if (parent_div) {
       DOM.addClass(parent_div,'tree_sectionparent');
      }
    }
}

function tree_track_remove_node(nodes, node_id) {
  var i = 0;
  while (i < nodes.length) {
    if (nodes[i] == node_id) {
      nodes.splice(i, 1);
    }
    else {
      i++;
    }
  }
  return nodes;
}

function track_group_tree_state(id) {
  expanded_nodes_arr = new Array();
  var tree_container = DOM.get(id).parentNode;
  var nodes = DOM.getElementsByClassName('has_children','div',id);
  for (var i in nodes) {
    var li = nodes[i].parentNode;
    if (!DOM.hasClass(li,'gt_collapsed')) {
      expanded_nodes_arr.push(DOM.getAttribute(li,'id'));
    }
  }
  COOKIE.setSub('mdk-state','group_tree_expanded_nodes_'+id,expanded_nodes_arr.join(','),{ path: '/'});
  if(expanded_nodes_arr.length == nodes.length) {
    DOM.get(id + '_group_tree_toggle').innerHTML = '(Collapse All)';
  }
  else {
    DOM.get(id + '_group_tree_toggle').innerHTML = '(Expand All)';
  }
}

function group_tree_toggle(e) {
  expanded_nodes_arr = new Array();
  var tl = EVENT.getTarget(e);
  var id = DOM.getAncestorByClassName(tl,'tree_container').id;
  var nodes = DOM.getElementsByClassName('has_children','div',id);
  for (var i in nodes) {
    var li = nodes[i].parentNode;
    if (tl.innerHTML=='(Expand All)') {
      DOM.removeClass(li,'gt_collapsed');
      expanded_nodes_arr.push(li.id);
    }
    else {
      DOM.addClass(li,'gt_collapsed');
    }
  }
  COOKIE.setSub('mdk-state','group_tree_expanded_nodes_'+id,expanded_nodes_arr.join(','),{ path: '/'});
  if(expanded_nodes_arr.length == nodes.length) {
    DOM.get(id + '_group_tree_toggle').innerHTML = '(Collapse All)';
  }
  else {
    DOM.get(id + '_group_tree_toggle').innerHTML = '(Expand All)';
  }
  EVENT.stopEvent(e);
}

function group_tree_node_toggle(e) {
  var el = EVENT.getTarget(e);
  if (el.nodeName.toLowerCase() == 'div') {
    var li = el.parentNode;
    var child_nodes = li.getElementsByTagName('li');
    if (DOM.hasClass(li,'gt_collapsed')) {
      DOM.removeClass(li,'gt_collapsed');
    }
    else {
      DOM.addClass(li,'gt_collapsed');
      for (var n=0;n<child_nodes.length;n++) {
	DOM.addClass(child_nodes[n],'gt_collapsed');
      }
    }
    var tree_id = DOM.getAncestorByClassName(el,'tree_container').id;
    track_group_tree_state(tree_id);
    EVENT.stopEvent(e);
  }
  else if (el.nodeName.toLowerCase() == 'a') {
    return true;
  }
}

function group_tree_init(id) {
  var tree_container = DOM.get(id).parentNode;
  var nodes = DOM.getElementsByClassName('has_children','div',tree_container);
  for (var i in nodes) {
    EVENT.on(nodes[i],'click',function(e,id) {group_tree_node_toggle(e)});
  }
  if (COOKIE.getSub('mdk-state','group_tree_expanded_nodes_'+id) != null) {
    expanded_nodes = COOKIE.getSub('mdk-state','group_tree_expanded_nodes_'+id).split(',');
  }
  else {
    expanded_nodes = '';
  }
  if(expanded_nodes.length == nodes.length) {
    DOM.get(id + '_group_tree_toggle').innerHTML = '(Collapse All)';
  }
  else {
    DOM.get(id + '_group_tree_toggle').innerHTML = '(Expand All)';
  }
  EVENT.on(id + '_group_tree_toggle', 'click', group_tree_toggle);
}


function folder_tree_click(e) {
  var el = EVENT.getTarget(e);
  if (DOM.hasClass(el,'node_div')) {
    var li = el.parentNode;
  }
  else if (DOM.hasClass(el,'node_li')) {
    var li = el;
  }
  else {
    return true;
  }

  var child_nodes = li.getElementsByTagName('li');
  if (DOM.hasClass(li,'ft_collapsed')) {
    DOM.removeClass(li,'ft_collapsed');
    var getchildren=DOM.getAttribute(el,'getchildren');
    if (getchildren) {
      var request = XHR.asyncRequest('GET', getchildren, {success:tree_add_dynamic_nodes});
      DOM.setAttribute(el,'getchildren',null);
    }
  }
  else {
    DOM.addClass(li,'ft_collapsed');
    for (var n=0;n<child_nodes.length;n++) {
      DOM.addClass(child_nodes[n],'ft_collapsed');
    }
  }
  var tree_id = DOM.getAncestorByClassName(el,'tree_container').id;
  EVENT.stopEvent(e);
}

function folder_tree_init(id) {
  var tree_container = DOM.get(id).parentNode;
  var nodes = DOM.getElementsByClassName('has_children','div',tree_container);
  EVENT.removeListener(id,'click',folder_tree_click)
  EVENT.on(id,'click',folder_tree_click)
  if (typeof folder_tree_callback[id] != 'undefined') {
    eval(folder_tree_callback[id]);
  }
}

function tree_init(id) {
  tree[id] = new TREE(id);
  tree[id].render();
  tree[id].subscribe('dblClickEvent',tree[id].onEventEditNode);
  tree_top[id] = DOM.get('tree_top_' + id);
  if (tree_top[id]) {
    toggle_link[id] = document.createElement('a');
    toggle_text[id] = document.createTextNode('(Expand All)');
    toggle_link[id].setAttribute('href','#');
    toggle_link[id].setAttribute('id','toggle_tree_' + id);
    toggle_link[id].appendChild(toggle_text[id]);
    tree_top[id].appendChild(toggle_link[id]);
  }
  if (typeof tree_state_restore[id] != 'undefined') {
    if (tree_state_restore[id]) {
      tree_reset_expand(id);
    }
  }
  else {
    tree_reset_expand(id);
  }
  tree[id].subscribe('expandComplete', function(node) {tree_track_state(tree[id],node)});
  tree[id].subscribe('collapseComplete', function(node) {tree_track_state(tree[id],node)});
  if (DOM.get('toggle_tree_' + id)) {
    EVENT.removeListener('toggle_tree_' + id, 'click');
    EVENT.on('toggle_tree_' + id, 'click', function(e) {toggle_tree(tree[id]);EVENT.stopEvent(e)});
  }
  if (typeof tree_callback[id] != 'undefined') {
    try {
      eval(tree_callback[id]);
    }
    catch(err) {
    }
  }
  DOM.removeClass(id,'yui-tree');
  DOM.setStyle(id,'visibility','inherit');
}

function init_all_trees() {
   var trees = DOM.getElementsByClassName('yui-tree', 'div');
   for (var i in trees) {
     tree_init(trees[i].id);
   }

}

// Render YUI Editor
function render_yui_editor(editor_id,add_upload_widget, upload_url, upload_file_param,upload_image_param) {
  var myConfig = {
      height: '200px',
      width: '600px',
      animate: false,
      dompath: false,
      focusAtStart: true,
      handleSubmit: true,
      autoHeight: false
  };

  var state = 'off';

  var myEditor = new YAHOO.widget.Editor(editor_id, myConfig);
  myEditor.on('toolbarLoaded', function() {
      var codeConfig = {
          type: 'push', label: 'Edit HTML Code', value: 'editcode'
      };
      this.toolbar.addButtonToGroup(codeConfig, 'textstyle2');

      this.toolbar.on('editcodeClick', function() {
          var ta = this.get('element'),
              iframe = this.get('iframe').get('element');

          if (state == 'on') {
              state = 'off';
              this.toolbar.set('disabled', false);
              this.setEditorHTML(ta.value);
              if (!this.browser.ie) {
                  this._setDesignMode('on');
              }

              DOM.removeClass(iframe, 'editor-hidden');
              DOM.addClass(ta, 'editor-hidden');
              this.show();
              this._focusWindow();
          } else {
              state = 'on';
              this.cleanHTML();
              DOM.addClass(iframe, 'editor-hidden');
              DOM.removeClass(ta, 'editor-hidden');
              this.toolbar.set('disabled', true);
              this.toolbar.getButtonByValue('editcode').set('disabled', false);
              this.toolbar.selectButton('editcode');
              // this.dompath.innerHTML = 'Editing HTML Code';
              this.hide();
          }
          return false;
      }, this, true);
      this.on('cleanHTML', function(ev) {
          this.get('element').value = ev.html;
      }, this, true);
      this.on('blur', function(ev) {
          this.setEditorHTML(this.get('element').value);
      }, this, true);
      this.on('afterRender', function() {
          var wrapper = this.get('editor_wrapper');
          wrapper.appendChild(this.get('element'));
          this.setStyle('width', '100%');
          this.setStyle('height', '100%');
          this.setStyle('visibility', '');
          this.setStyle('top', '');
          this.setStyle('left', '');
          this.setStyle('position', '');

          this.addClass('editor-hidden');
      }, this, true);
  }, myEditor, true);
  if (add_upload_widget != undefined) {
  yuiImgUploader(myEditor, editor_id, upload_url, upload_file_param,upload_image_param);
  }
  myEditor.render();

}

function render_all_yui_editors() {
  var editors = DOM.getElementsByClassName('rte','textarea');
  for (var i in editors) {
    render_yui_editor(editors[i].id);
  }
}

/* COPYRIGHT 2010 Dennis Muhlestein
   http://allmybrain.com

   You are free to use this code in any way you like, distribute it,
   change it, benefit from it, etc.  If you have significant
   improvements, feel free to contribute back to this project.
*/

/*
yuiImgUploader
variables:
 rte: The YAHOO.widget.Editor instance
 upload_url: the url to post the file to
 upload_file_param: the name of the post parameter to send the file as
 upload_image_param: the name of the post parameter to send the image as

Your server must handle the posted image.  You must return a JSON object
with the result url that the image can be viewed at on your server.  If
the upload fails, you can return an error message.  For successful
uploads, the status must be set to UPLOADED.  All other status messages,
or the lack of a status message is interpreted as an error.  IE will
try to open a new document window when the response is returned if your
content-type header on your response is not set to 'text/javascript'

Example Success:
{status:'UPLOADED', image_url:'/somedirectory/filename'}
Example Failure:
{status:'We only allow JPEG Images.'}

*/

function yuiImgUploader(rte, editor_name, upload_url, upload_file_param, upload_image_param) {
   // customize the editor img button


   YAHOO.log( "Adding Click Listener" ,'debug');
   rte.addListener('toolbarLoaded',function() {
       rte.toolbar.addListener ( 'createlinkClick', function(o) {
           try {
               var imgPanel=new YAHOO.util.Element(editor_name + '-panel');
               imgPanel.on ( 'contentReady', function() {
                   try {
                       var Dom=YAHOO.util.Dom;

                       if (! Dom.get(editor_name + '_insertlink_upload'))
                       {
                           var label=document.createElement('label');
                          label.innerHTML='<strong>Upload:</strong>'+
                                 '<input type="file" id="' +
                                  editor_name + '_insertlink_upload" name="'+upload_file_param+
                                 '" size="10" style="width: 250px" />';

                           var link_elem=Dom.get(editor_name + '_createlink_url');
                           Dom.getAncestorByTagName(link_elem, 'form').encoding = 'multipart/form-data';
                           Dom.insertAfter(
                               label,
                               link_elem.parentNode);

                           YAHOO.util.Event.on ( editor_name + '_insertlink_upload', 'change', function(ev) {
                               YAHOO.util.Event.stopEvent(ev); // no default click action
                               var otherUpload = Dom.get(editor_name + '_insertimage_upload');
                       if (otherUpload) {
                       YAHOO.util.Event.removeListener(editor_name + '_insertimage_upload', "change");
                                otherUpload.parentNode.parentNode.removeChild(otherUpload.parentNode);
                                }
                               YAHOO.util.Connect.setForm ( link_elem.form, true, true );
                               var c=YAHOO.util.Connect.asyncRequest(
                               'POST', upload_url, {
                                   upload:function(r){
                                       try {
                                           // strip pre tags if they got added somehow
                                           resp=r.responseText.replace( /<pre>/i, '').replace ( /<\/pre>/i, '');
                                           var o=eval('('+resp+')');
                                           if (o.status=='UPLOADED') {
                                               Dom.get(editor_name + '_insertlink_upload').value='';
                                               Dom.get(editor_name + '_createlink_url').value=o.file_url;
                                               // tell the image panel the url changed
                                               // hack instead of fireEvent('blur')
                                               // which for some reason isn't working
                                               Dom.get(editor_name + '_createlink_url').focus();
                                               Dom.get(editor_name + '_insertlink_upload').focus();
                                           } else {
                                               alert ( "Upload Failed: "+o.status );
                                           }

                                       } catch ( eee ) {
                                               alert ( "Upload Failed");
                                           YAHOO.log( eee.message, 'error' );
                                       }
                                   }
                               }
                               );
                               return false;
                           });
                       }
                   }
                        catch ( ee ) { YAHOO.log( ee.message, 'error' ); }

               });
           } catch ( e ) {
               YAHOO.log( e.message, 'error' );
           }
       });
       rte.toolbar.addListener ( 'insertimageClick', function(o) {
           try {
               var imgPanel=new YAHOO.util.Element(editor_name + '-panel');
               imgPanel.on ( 'contentReady', function() {
                   try {
                       var Dom=YAHOO.util.Dom;

                       if (! Dom.get(editor_name + '_insertimage_upload'))
                       {
                           var label=document.createElement('label');
                          label.innerHTML='<strong>Upload:</strong>'+
                                 '<input type="file" id="' +
                                  editor_name + '_insertimage_upload" name="'+upload_image_param+
                                 '" size="10" />';

                           var img_elem=Dom.get(editor_name + '_insertimage_url');
                           Dom.getAncestorByTagName(img_elem, 'form').encoding = 'multipart/form-data';

                           Dom.insertAfter(
                               label,
                               img_elem.parentNode);

                           YAHOO.util.Event.on ( editor_name + '_insertimage_upload', 'change', function(ev) {
                               YAHOO.util.Event.stopEvent(ev); // no default click action
                               var otherUpload = Dom.get(editor_name + '_insertlink_upload');
                       if (otherUpload) {
                       YAHOO.util.Event.removeListener(editor_name + '_insertlink_upload', "change");
                                otherUpload.parentNode.parentNode.removeChild(otherUpload.parentNode);
                                }
                               YAHOO.util.Connect.setForm ( img_elem.form, true, true );
                               var c=YAHOO.util.Connect.asyncRequest(
                               'POST', upload_url, {
                                   upload:function(r){
                                       try {
                                           // strip pre tags if they got added somehow
                                           resp=r.responseText.replace( /<pre>/i, '').replace ( /<\/pre>/i, '');
                                           var o=eval('('+resp+')');
                                           if (o.status=='UPLOADED') {
                                               Dom.get(editor_name + '_insertimage_upload').value='';
                                               Dom.get(editor_name + '_insertimage_url').value=o.image_url;
                                               // tell the image panel the url changed
                                               // hack instead of fireEvent('blur')
                                               // which for some reason isn't working
                                               Dom.get(editor_name + '_insertimage_url').focus();
                                               Dom.get(editor_name + '_insertimage_upload').focus();
                                           } else {
                                               alert ( "Upload Failed: "+o.status );
                                           }

                                       } catch ( eee ) {
                                               alert ( "Upload Failed");
                                           YAHOO.log( eee.message, 'error' );
                                       }
                                   }
                               }
                               );
                               return false;
                           });
                       }
                   }
                        catch ( ee ) { YAHOO.log( ee.message, 'error' ); }

               });
           } catch ( e ) {
               YAHOO.log( e.message, 'error' );
           }
       });
   });

}




function handle_row_click (e) {
  var row = this.getTrEl(e.target),
  rec = this.getRecord(row);
  if (row && rec && row_has_checkbox(row)) {
    if (this.isSelected(rec)) {
      this.unselectRow(rec);
    }
    else {
      this.selectRow(rec);
    }
  }
}

function handle_row_select(args) {
  var row = args.el;
  var cb = row_has_checkbox(row);
  if (cb) {
     cb.checked=true;
     var cb_id_parts = cb.id.split(',');
     var list_id = cb_id_parts[0];
     var row = DOM.getAncestorByTagName(cb,'tr');
     if (row) {
       var table = DOM.getAncestorByTagName(row,'table');
       if (table) {
         var dt_container = DOM.getAncestorByTagName(table,'div');
         if (dt_container) {
           var datatable = dt[list_id][dt_container.id];
           var selected_row_count = datatable.getSelectedRows().length;
           var total_row_count = DOM.getElementsByClassName(cb.className,'input').length;
           if (selected_row_count == total_row_count) {

             var cab = DOM.get('ca_' + list_id);
             if (cab) {
               cab.checked=true;
             }
           }
         }
       }
     }
  }
}

function handle_row_unselect(args) {
  var row = args.el;
  var cb = row_has_checkbox(row);
  if (cb) {
     cb.checked=false;
     var cb_id_parts = cb.id.split(',');
     var list_id = cb_id_parts[0];
     var cab = DOM.get('ca_' + list_id);
     if (cab) {
       cab.checked=false;
     }
  }

}

function row_has_checkbox(row) {
   var td = DOM.getFirstChild(row);
   var div = DOM.getFirstChild(td);
   var cb = DOM.getFirstChild(div);
   if (cb) {
     if (cb.nodeName.toUpperCase() == 'INPUT') {
       return cb;
     }
     else {
       return null;
     }
   }
   else {
     return null;
   }
}

function handle_cb_row(cb) {
   var cb_id_parts = cb.id.split(',');
   var list_id = cb_id_parts[0];
   var row = DOM.getAncestorByTagName(cb,'tr');
   if (row) {
     var table = DOM.getAncestorByTagName(row,'table');
     if (table) {
       var dt_container = DOM.getAncestorByTagName(table,'div');
       if (dt_container)  {
         var datatable = dt[list_id][dt_container.id];
         rec = datatable.getRecord(row);
         if (row && rec) {
           if (!cb.checked) {
            datatable.unselectRow(row);
           }
           else {
            datatable.selectRow(row);
           }
         }
       }
     }
   }
}

var handle_column_sort = function handle_column_sort(col, dir) {
  var liner_el = col.getThLinerEl();
  var dt_container = DOM.getAncestorByClassName(liner_el,'yui-dt');
  var list_id = dt_container.id.split('-')[0];
  var datatable = dt[list_id][dt_container.id];
  var paginator = DOM.getElementsByClassName('yui-dt-paginator','div',dt_container).length;
  if (typeof col.orderby_url != 'undefined') {
    datatable.doBeforeSortColumn = function(col, dir) {return false};
    window.location=col.orderby_url;
  }
  else {
    return false;
  }
}

handle_after_sort = function() {
  yui_render_lbuttons();
  yui_render_pbuttons();
}

function handle_check_all(e) {
 elTarget = EVENT.getTarget(e);
 var caa_id = elTarget.id.split('_');
 caa_id.shift();
 var list_id = caa_id.join('_');
 var cba = DOM.getElementsByClassName('cb_' + list_id,'input');
 for (var i=0;i<cba.length;i++) {
     cba[i].checked=elTarget.checked;
     handle_cb_row(cba[i],e);
 }
}

function handle_list_cb(e) {
 elTarget = EVENT.getTarget(e);
 var selected_cbs = elTarget.className;
 var cbb = DOM.getElementsByClassName(selected_cbs,'input');
 var all_checked = true;
 for (var i=0;i<cbb.length;i++) {
   handle_cb_row(cbb[i]);
   if (!cbb[i].checked) {
     all_checked = false;
   }
 }
 var cbb_id = selected_cbs.split('_');
 cbb_id.shift();
 var list_id = cbb_id.join('_');
 var cab = DOM.get('ca_' + list_id);
 if (cab) {
   cab.checked=all_checked;
 }
}

function confirm_load(e) {
  var obj=YAHOO.util.Event.getTarget(e);
  var v=obj.value;
  if (v>=1000) {
    alert('This folder contains ' + v + ' items and may take a long time to load.');
  }
}

function add_large_warning() {
  var s = YAHOO.util.Dom.getElementsByClassName('yui-pg-rpp-options','select');
  for (var i=0;i<s.length;i++) {
    YAHOO.util.Event.removeListener(s[i],'change', confirm_load);
    YAHOO.util.Event.on(s[i],'change',confirm_load);
  }
}


function create_folder_datatable(folder_id,rtp_column,d3c_column,vd_column,d3c_combined_column) {
    // Column definitions
    var folder_contents_cd = [
	{key:"object_id", label:'<input type="hidden" name="cf_id" value="' + folder_id + '" id="cf_id"><input type="checkbox" id="ca_contents" class="list_checkall" name="_dummy">', width:20},
	{key:"name", label:"Name", minWidth:200, sortable:true,resizeable:false},
	{key:"content_size", label:"Size", sortable:true, resizeable:false, width:60},
	{key:"type", label:"Type", sortable:true, resizeable:false, width:100},
	{key:"last_modified_ansi", label:"Modified", sortable:true, resizeable:false}
    ];

    if (rtp_column) {
      folder_contents_cd.push(rtp_column);
    }
    if (d3c_column) {
      folder_contents_cd.push(d3c_column);
    }
    if (vd_column) {
      folder_contents_cd.push(vd_column);
    }

    if (d3c_combined_column) {
      folder_contents_cd.push(d3c_combined_column);
    }
    // Paginator
    folder_contents_pg = new PAGINATOR({containers : ["contents-pg-top","contents-pg-bottom"],
							  template:'<div style="float:left" class="main_paginator">{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}</div>          \
								    <div style="float:right" class="pg_extra">                                                                                                 \
								    <span class="paginator_showrows">Show {RowsPerPageDropdown} Items</span>                                                                   \
								    <span class="paginator_gotopage">                                                                                                          \
								      <input type="text" size="4" class="gotopage_input" style="margin-right:0px">                                                             \
								      <input type="button" class="pbutton gotopage_submit" value="Go to Page" style="margin-left:0px">                                         \
								    </span>                                                                                                                                    \
								    </div>                                                                                                                                     \
								    <div style="height:1px;clear:both"></div>',
							  alwaysVisible : false,
							  pageLinks : 10,
							  rowsPerPageOptions : [25,50,100,1000]
							});
    // DataTable configuration
    var folder_contents_cf = {
	dynamicData: true,
	minWidth: 800,
	paginator: folder_contents_pg,
	initialLoad : false

    };

    // DataTable instance
    var folder_contents_dt = new DATATABLE("contents-dt", folder_contents_cd, folder_contents_ds,folder_contents_cf);
    folder_contents_dt.showTableMessage(folder_contents_dt.get("MSG_LOADING"), DATATABLE.CLASS_LOADING);
    folder_contents_dt.subscribe("renderEvent", folder_datatable_events);

    var handle_sorting = function (oColumn) {
	folder_contents_dt.showTableMessage(folder_contents_dt.get("MSG_LOADING"), DATATABLE.CLASS_LOADING);
	var sDir = this.getColumnSortDir(oColumn);
	var newState = generateRequest(0, oColumn.key, sDir, this.get("paginator").getRowsPerPage());
	COOKIE.setSub('mdk-state','folder_state_' + folder_id,newState,{path: '/'});
	HISTORY.navigate("folder_contents_dt", newState);
    };
    folder_contents_dt.sortColumn = handle_sorting;

    var handle_pagination = function(state) {
	folder_contents_dt.showTableMessage(folder_contents_dt.get("MSG_LOADING"), DATATABLE.CLASS_LOADING);
	var sortedBy  = this.get("sortedBy"),
	    newState = generateRequest(
	    state.recordOffset, sortedBy.key, sortedBy.dir, state.rowsPerPage
	);

	// Pass the state along to the Browser History Manager
	COOKIE.setSub('mdk-state','folder_state_' + folder_id,newState,{path: '/'});
	HISTORY.navigate("folder_contents_dt", newState);
    };
    folder_contents_pg.unsubscribe("changeRequest", folder_contents_dt.onPaginatorChangeRequest);
    folder_contents_pg.subscribe("changeRequest", handle_pagination, folder_contents_dt, true);
    folder_contents_dt.doBeforeLoadData = function(oRequest, oResponse, oPayload) {
      var meta = oResponse.meta;
      oPayload.totalRecords = meta.totalRecords || oPayload.totalRecords;
      oPayload.pagination = {
	  rowsPerPage: meta.paginationRowsPerPage || 25,
	  recordOffset: meta.paginationRecordOffset || 0
      };
      oPayload.sortedBy = {
	  key: meta.sortKey || "name",
	  dir: (meta.sortDir) ? "yui-dt-" + meta.sortDir : "yui-dt-asc" // Convert from server value to DataTable format
      };
      return true;
    };

    // Returns a request string for consumption by the DataSource
    var generateRequest = function(startIndex,sortKey,dir,results) {
      startIndex = startIndex || 0;
      sortKey   = sortKey || "name";
      dir   = (dir) ? dir.substring(7) : "asc"; // Converts from DataTable format "yui-dt-[dir]" to server value "[dir]"
      results   = results || 25;
      return "results="+results+"&startIndex="+startIndex+"&sort="+sortKey+"&dir="+dir;
  };

    // Called by Browser History Manager to trigger a new state
    var handleHistoryNavigation = function (request) {
	// Sends a new request to the DataSource
	folder_contents_ds.sendRequest(request,{
	    success : folder_contents_dt.onDataReturnSetRows,
	    failure : folder_contents_dt.onDataReturnSetRows,
	    scope : folder_contents_dt,
	    argument : {} // Pass in container for population at runtime via doBeforeLoadData
	});
    };

    // Calculate the first request
    var initialRequest = COOKIE.getSub('mdk-state','folder_state_' + folder_id);
    if (!initialRequest) {
      var bookmarked_state = HISTORY.getBookmarkedState("folder_contents_dt") ;
      if (bookmarked_state) {
	initialRequest = bookmarked_state;
      }
      else {
	initialRequest = generateRequest();
      }
    }

    // Register the module
    HISTORY.register("folder_contents_dt", initialRequest, handleHistoryNavigation);

    // Render the first view
    HISTORY.onReady(function() {
	// Current state after BHM is initialized is the source of truth for what state to render
	var currentState = HISTORY.getCurrentState("folder_contents_dt");
	handleHistoryNavigation(currentState);
    });

    // Initialize the Browser History Manager.
    HISTORY.initialize("yui-history-field", "yui-history-iframe");

    folder_contents_dt.subscribe("rowMouseoverEvent", folder_contents_dt.onEventHighlightRow);
    folder_contents_dt.subscribe("rowMouseoutEvent", folder_contents_dt.onEventUnhighlightRow);
    folder_contents_dt.subscribe("rowClickEvent", handle_row_click);
    folder_contents_dt.subscribe("rowSelectEvent", handle_row_select);
    folder_contents_dt.subscribe("rowUnselectEvent", handle_row_unselect);
    folder_contents_dt.subscribe("linkClickEvent", function(e) {return false});


    var ca = DOM.getElementsByClassName('list_checkall','input');
    EVENT.on('ca_contents', 'click', function(e){handle_check_all(e)});
      dt['contents']['contents-dt']=folder_contents_dt;

    function button_handle_gotopage(e) {
      el = EVENT.getTarget(e);
      pg_extra_div = DOM.getAncestorByClassName(el,'pg_extra');
      input = DOM.getElementsByClassName('gotopage_input','input',pg_extra_div)[0];
      if (input) {
	handle_gotopage(input.value);
      }
      EVENT.stopEvent(e);
    }

    function key_handle_gotopage(type,args) {
      var e = args[1];
      var obj = EVENT.getTarget(e);
      handle_gotopage(obj.value);
      EVENT.stopEvent(e);
    }

    function handle_gotopage(page) {
      if (page != '') {
	  var current_state = folder_contents_dt.getState();
	  if (!parseInt(page)) {
	    page = 1;
	  }
	  page = parseInt(page);
	  if (page > folder_contents_pg.getTotalPages()) {
	    page = folder_contents_pg.getTotalPages();
	  }
	  if (page < 1) {
	    page = 1;
	  }
	  var current_state_request = generateRequest(current_state.pagination.recordOffset, current_state.sortedBy.key, current_state.sortedBy.dir, current_state.pagination.rowsPerPage)
	  var newPage = (page - 1) * current_state.pagination.rowsPerPage;
	  var newState = generateRequest(newPage, current_state.sortedBy.key, current_state.sortedBy.dir, current_state.pagination.rowsPerPage)
	  // Pass the state along to the Browser History Manager
	  if (current_state_request != newState) {
	    folder_contents_dt.showTableMessage(folder_contents_dt.get("MSG_LOADING"), DATATABLE.CLASS_LOADING);
	    COOKIE.setSub('mdk-state','folder_state_' + folder_id,newState,{path: '/'});
	    HISTORY.navigate("folder_contents_dt", newState);
	    gtp_inputs = DOM.getElementsByClassName('gotopage_input','input');
	    for (var i in gtp_inputs) {
	      gtp_inputs[i].value = page;
	    }
	  }
      }
    }
    function contents_dt_after_render() {
      yui_render_pbuttons();
      if (folder_contents_pg.getTotalRecords() < 26) {
	DOM.setStyle('contents-pg-top','display','none');
	DOM.setStyle('contents-pg-bottom','display','none');
	DOM.setStyle('contents-dt','margin-top','5px');
	DOM.setStyle('contents-dt','margin-bottom','5px');
      }
      else {
	gtp_inputs = DOM.getElementsByClassName('gotopage_input','input');
	for (var j in gtp_inputs) {

	  sb = new YAHOO.util.KeyListener(gtp_inputs[j], {keys:13}, {fn:key_handle_gotopage});
	  sb.enable();
	  pg_extra_div = DOM.getElementsByClassName('pg_extra','div')[j];
	  gtp_submit = DOM.getElementsByClassName('gotopage_submit','input',pg_extra_div)[0];
	  if (!gtp_submit) {
	    gtp_submit_container = DOM.getElementsByClassName('yui-button','span',pg_extra_div)[0];
	    gtp_submit = DOM.getFirstChild(DOM.getFirstChild(gtp_submit_container));
	  }
	  EVENT.removeListener(gtp_submit,'click');
	  EVENT.on(gtp_submit,'click',button_handle_gotopage);
	}
	if (DOM.get('mirs_main')) {
	  DOM.get('mirs_main').scrollTop=0;
	}
      }
    }
    folder_contents_dt.subscribe("renderEvent", contents_dt_after_render);
    return {
	ds: folder_contents_ds,
	dt: folder_contents_dt
    };

}


function create_d3c_folder_datatable(folder_name,rf,community_id,folder_id) {
    // Column definitions
    var folder_contents_cd = [
      {key:"name", label:'<div style="float:left"><h2>' + folder_name + '</h2></div><form method="get" action="search"id="d3c_pagelinks_search"><input type="hidden" name="rf" value="' + rf + '"><input type="hidden" name="com_id" value="' + community_id + '"><input type="hidden" name="current_folder" value="' + folder_id + '"><input type="text" name="q">&nbsp;<input type="submit" class="pbutton" style="font-weight:normal" value="Search"></form>'}
    ];


    // Paginator
    folder_contents_pg = new PAGINATOR({containers : ["contents-pg-top","contents-pg-bottom"],
							  template:'<div style="float:left" class="main_paginator">{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}</div>          \
								    <div style="float:right" class="pg_extra">                                                                                                 \
								    <span class="paginator_showrows">Show {RowsPerPageDropdown} Items</span>                                                                   \
								    <span class="paginator_gotopage">                                                                                                          \
								      <input type="text" size="4" class="gotopage_input" style="margin-right:0px">                                                             \
								      <input type="button" class="pbutton gotopage_submit" value="Go to Page" style="margin-left:0px">                                         \
								    </span>                                                                                                                                    \
								    </div>                                                                                                                                     \
								    <div style="height:1px;clear:both"></div>',
							  alwaysVisible : false,
							  pageLinks : 10,
							  rowsPerPageOptions : [25,50,100,1000]
							});
    // DataTable configuration
    var folder_contents_cf = {
	dynamicData: true,
	minWidth: 800,
	paginator: folder_contents_pg,
	initialLoad : false

    };

    // DataTable instance
    var folder_contents_dt = new DATATABLE("contents-dt", folder_contents_cd, folder_contents_ds,folder_contents_cf);
    folder_contents_dt.showTableMessage(folder_contents_dt.get("MSG_LOADING"), DATATABLE.CLASS_LOADING);

    var handle_sorting = function (oColumn) {
	folder_contents_dt.showTableMessage(folder_contents_dt.get("MSG_LOADING"), DATATABLE.CLASS_LOADING);
	var sDir = this.getColumnSortDir(oColumn);
	var newState = generateRequest(0, oColumn.key, sDir, this.get("paginator").getRowsPerPage());
	COOKIE.setSub('mdk-state','d3c_folder_state_' + folder_id,newState,{path: '/'});
	HISTORY.navigate("folder_contents_dt", newState);
    };
    folder_contents_dt.sortColumn = handle_sorting;

    var handle_pagination = function(state) {
	folder_contents_dt.showTableMessage(folder_contents_dt.get("MSG_LOADING"), DATATABLE.CLASS_LOADING);
	var sortedBy  = this.get("sortedBy"),
	    newState = generateRequest(
	    state.recordOffset, sortedBy.key, sortedBy.dir, state.rowsPerPage
	);

	// Pass the state along to the Browser History Manager
	COOKIE.setSub('mdk-state','d3c_folder_state_' + folder_id,newState,{path: '/'});
	HISTORY.navigate("folder_contents_dt", newState);
    };
    folder_contents_pg.unsubscribe("changeRequest", folder_contents_dt.onPaginatorChangeRequest);
    folder_contents_pg.subscribe("changeRequest", handle_pagination, folder_contents_dt, true);
    folder_contents_dt.doBeforeLoadData = function(oRequest, oResponse, oPayload) {
      var meta = oResponse.meta;
      oPayload.totalRecords = meta.totalRecords || oPayload.totalRecords;
      oPayload.pagination = {
	  rowsPerPage: meta.paginationRowsPerPage || 25,
	  recordOffset: meta.paginationRecordOffset || 0
      };
      oPayload.sortedBy = {
	  key: meta.sortKey || "name",
	  dir: (meta.sortDir) ? "yui-dt-" + meta.sortDir : "yui-dt-asc" // Convert from server value to DataTable format
      };
      return true;
    };

    // Returns a request string for consumption by the DataSource
    var generateRequest = function(startIndex,sortKey,dir,results) {
      startIndex = startIndex || 0;
      sortKey   = sortKey || "name";
      dir   = (dir) ? dir.substring(7) : "asc"; // Converts from DataTable format "yui-dt-[dir]" to server value "[dir]"
      results   = results || 25;
      return "results="+results+"&startIndex="+startIndex+"&sort="+sortKey+"&dir="+dir;
  };
    folder_contents_dt.testdata = function(sRequest,oResponse,oPayload) {
	folder_contents_dt.onDataReturnSetRows(sRequest,oResponse,oPayload);
    }
    // Called by Browser History Manager to trigger a new state
    var handleHistoryNavigation = function (request) {
	// Sends a new request to the DataSource
	folder_contents_ds.sendRequest(request,{
	    success : folder_contents_dt.testdata,
	    failure : folder_contents_dt.testdata,
	    scope : folder_contents_dt,
	    argument : {} // Pass in container for population at runtime via doBeforeLoadData
	});
    };

    // Calculate the first request
    var initialRequest = COOKIE.getSub('mdk-state','d3c_folder_state_' + folder_id);
    if (!initialRequest) {
      var bookmarked_state = HISTORY.getBookmarkedState("folder_contents_dt") ;
      if (bookmarked_state) {
	initialRequest = bookmarked_state;
      }
      else {
	initialRequest = generateRequest();
      }
    }

    // Register the module
    HISTORY.register("folder_contents_dt", initialRequest, handleHistoryNavigation);

    // Render the first view
    HISTORY.onReady(function() {
	// Current state after BHM is initialized is the source of truth for what state to render
	var currentState = HISTORY.getCurrentState("folder_contents_dt");
	handleHistoryNavigation(currentState);
    });

    // Initialize the Browser History Manager.
    HISTORY.initialize("yui-history-field", "yui-history-iframe");

    folder_contents_dt.subscribe("rowMouseoverEvent", folder_contents_dt.onEventHighlightRow);
    folder_contents_dt.subscribe("rowMouseoutEvent", folder_contents_dt.onEventUnhighlightRow);
    folder_contents_dt.subscribe("rowClickEvent", handle_row_click);
    folder_contents_dt.subscribe("rowSelectEvent", handle_row_select);
    folder_contents_dt.subscribe("rowUnselectEvent", handle_row_unselect);
    folder_contents_dt.subscribe("linkClickEvent", function(e) {return false});


      dt['contents']['contents-dt']=folder_contents_dt;

    function button_handle_gotopage(e) {
      el = EVENT.getTarget(e);
      pg_extra_div = DOM.getAncestorByClassName(el,'pg_extra');
      input = DOM.getElementsByClassName('gotopage_input','input',pg_extra_div)[0];
      if (input) {
	handle_gotopage(input.value);
      }
      EVENT.stopEvent(e);
    }

    function key_handle_gotopage(type,args) {
      var e = args[1];
      var obj = EVENT.getTarget(e);
      handle_gotopage(obj.value);
      EVENT.stopEvent(e);
    }

    function handle_gotopage(page) {
      if (page != '') {
	  var current_state = folder_contents_dt.getState();
	  if (!parseInt(page)) {
	    page = 1;
	  }
	  page = parseInt(page);
	  if (page > folder_contents_pg.getTotalPages()) {
	    page = folder_contents_pg.getTotalPages();
	  }
	  if (page < 1) {
	    page = 1;
	  }
	  var current_state_request = generateRequest(current_state.pagination.recordOffset, current_state.sortedBy.key, current_state.sortedBy.dir, current_state.pagination.rowsPerPage)
	  var newPage = (page - 1) * current_state.pagination.rowsPerPage;
	  var newState = generateRequest(newPage, current_state.sortedBy.key, current_state.sortedBy.dir, current_state.pagination.rowsPerPage)
	  // Pass the state along to the Browser History Manager
	  if (current_state_request != newState) {
	    folder_contents_dt.showTableMessage(folder_contents_dt.get("MSG_LOADING"), DATATABLE.CLASS_LOADING);
	    COOKIE.setSub('mdk-state','d3c_folder_state_' + folder_id,newState,{path: '/'});
	    HISTORY.navigate("folder_contents_dt", newState);
	    gtp_inputs = DOM.getElementsByClassName('gotopage_input','input');
	    for (var i in gtp_inputs) {
	      gtp_inputs[i].value = page;
	    }
	  }
      }
    }
    function contents_dt_after_render() {
      yui_render_pbuttons();
      DOM.removeClass('yui-dt0-th-name','yui-dt-asc');
      if (folder_contents_pg.getTotalRecords() < 26) {
	DOM.setStyle('contents-pg-top','display','none');
	DOM.setStyle('contents-pg-bottom','display','none');
	DOM.setStyle('contents-dt','margin-top','5px');
	DOM.setStyle('contents-dt','margin-bottom','5px');
      }
      else {
	gtp_inputs = DOM.getElementsByClassName('gotopage_input','input');
	for (var j in gtp_inputs) {

	  sb = new YAHOO.util.KeyListener(gtp_inputs[j], {keys:13}, {fn:key_handle_gotopage});
	  sb.enable();
	  pg_extra_div = DOM.getElementsByClassName('pg_extra','div')[j];
	  gtp_submit = DOM.getElementsByClassName('gotopage_submit','input',pg_extra_div)[0];
	  if (!gtp_submit) {
	    gtp_submit_container = DOM.getElementsByClassName('yui-button','span',pg_extra_div)[0];
	    gtp_submit = DOM.getFirstChild(DOM.getFirstChild(gtp_submit_container));
	  }
	  EVENT.removeListener(gtp_submit,'click');
	  EVENT.on(gtp_submit,'click',button_handle_gotopage);
	}
	if (DOM.get('mirs_main')) {
	  DOM.get('mirs_main').scrollTop=0;
	}
      }
    }
    folder_contents_dt.subscribe("renderEvent", contents_dt_after_render);
    return {
	ds: folder_contents_ds,
	dt: folder_contents_dt
    };

};

function button_menu_mouseover(e) {
  var obj = EVENT.getTarget(e);
  if (!DOM.hasClass(obj,'yuimenu')) {
    var menu = DOM.getAncestorByClassName(obj,'yuimenu');
  }
  else {
    var menu = obj;
  }
  var menu_id = DOM.getAttribute(menu,'id');
  var button_id = menu_id.replace('button-menu-','');
  var button_container = DOM.get(button_id);
  if (button_container) {
    DOM.addClass(button_container,'yui-button-hover');
    DOM.addClass(button_container,'yui-link-button-hover');
  }
}

function button_menu_hide(type, args) {
  var button_id = this.id.replace('button-menu-','');
  var button_container = DOM.get(button_id);
  DOM.removeClass(button_container,'yui-button-hover');
  DOM.removeClass(button_container,'yui-link-button-hover');
}

function button_mouseover(e) {
  var obj = EVENT.getTarget(e);
  if (!DOM.hasClass(obj,'yui-button')) {
    var button_container = DOM.getAncestorByClassName(obj,'yui-button');
  }
  else {
    var button_container = obj;
  }
  if (!obj.disabled) {
    DOM.addClass(button_container,'yui-button-hover');
    DOM.addClass(button_container,'yui-link-button-hover');
    var button_id = DOM.getAttribute(button_container,'id');
    for (var i in button_menu) {
      if (i != button_id) {
	if (typeof button_menu[i] == 'object') {
	  button_menu[i].hide();
	}
      }
    }
    if (typeof button_menu[button_id] != 'undefined') {
      button_menu[button_id].cfg.setProperty('context',[button_container,'tl','bl']);
      button_menu[button_id].show();
    }
  }
}

function button_mouseout(e) {
  var obj = EVENT.getTarget(e);
  if (!DOM.hasClass(obj,'yui-button')) {
    var button_container = DOM.getAncestorByClassName(obj,'yui-button');
  }
  else {
    var button_container = obj;
  }
  DOM.removeClass(button_container,'yui-button-hover');
  DOM.removeClass(button_container,'yui-link-button-hover');
}

function button_mousedown(e) {
  var obj = EVENT.getTarget(e);
  if (!DOM.hasClass(obj,'yui-button')) {
    var button_container = DOM.getAncestorByClassName(obj,'yui-button');
  }
  else {
    var button_container = obj;
  }
  if (!obj.disabled) {
    DOM.addClass(button_container,'yui-button-active');
    DOM.addClass(button_container,'yui-link-button-active');
  }
}

function button_mouseup(e) {
  var obj = EVENT.getTarget(e);
  if (!DOM.hasClass(obj,'yui-button')) {
    var button_container = DOM.getAncestorByClassName(obj,'yui-button');
  }
  else {
    var button_container = obj;
  }
  DOM.removeClass(button_container,'yui-button-active');
  DOM.removeClass(button_container,'yui-link-button-active');
}

function button_focus(e) {
  var obj = EVENT.getTarget(e);
  if (!DOM.hasClass(obj,'yui-button')) {
    var button_container = DOM.getAncestorByClassName(obj,'yui-button');
  }
  else {
    var button_container = obj;
  }
  if (!obj.disabled) {
    DOM.addClass(button_container,'yui-button-focus');
    DOM.addClass(button_container,'yui-link-button-focus');
  }
}

function button_blur(e) {
  var obj = EVENT.getTarget(e);
  if (!DOM.hasClass(obj,'yui-button')) {
    var button_container = DOM.getAncestorByClassName(obj,'yui-button');
  }
  else {
    var button_container = obj;
  }
  DOM.removeClass(button_container,'yui-button-focus');
  DOM.removeClass(button_container,'yui-link-button-focus');
}

function handle_disabled_events(e) {
  var obj = EVENT.getTarget(e);
  if (obj.disabled) {
    EVENT.stopEvent(e);
  }
  else {
    return true;
  }
}
var button_menu = new Array();
var button_options = new Array();
function yui_render_lbuttons() {
  allbuttons = DOM.getElementsByClassName('lbutton','a');
  for (var b=0;b<allbuttons.length;b++) {
      button_container = DOM.getAncestorByClassName(allbuttons[b],'yui-button');
      DOM.removeClass(allbuttons[b],'lbutton');
      EVENT.on(button_container,'click',button_mousedown);
      EVENT.on(button_container,'mouseenter',button_mouseover);
      EVENT.on(allbuttons[b],'mouseenter',button_mouseover);
      EVENT.on(button_container,'mouseleave',button_mouseout);
      EVENT.on(allbuttons[b],'mouseleave',button_mouseout);
      EVENT.on(button_container,'mousedown',button_mousedown);
      EVENT.on(button_container,'mouseup',button_mouseup);
      EVENT.on(allbuttons[b],'focus',button_focus);
      EVENT.on(allbuttons[b],'blur',button_blur);
      EVENT.on(allbuttons[b],'click',handle_disabled_events);
      var button_id = DOM.generateId(button_container,'mdk');
      if (typeof button_options[button_id] != 'undefined') {
	 DOM.addClass(button_container,'mbutton');
	 button_menu[button_id] = new MENU('button-menu-' + button_id,{autosubmenudisplay: true, lazyload: true, position:'dynamic',context:[button_container,'tl','bl'],visible:false});
	 button_menu[button_id].addItems(button_options[button_id]);
	 button_menu[button_id].render(document.body);
	 EVENT.on('button-menu-' + button_id,'mouseenter',button_menu_mouseover);
	 // EVENT.on('button-menu-' + button_id,'mouseleave',button_menu_mouseout);
	 button_menu[button_id].subscribe('hide', button_menu_hide);
      }
      if (DOM.getAttribute(allbuttons[b],'disabled')) {
        allbuttons[b].disabled=true;
      }
      else {
        allbuttons[b].disabled=false;
      }
      handle_disabled_buttons(button_container);
      node = allbuttons[b];
      for(var i=0; i<node.attributes.length; i++) {
        if(node.attributes.item(i).specified) {
          if (node.attributes.item(i).nodeName.indexOf('onclick') == 0) {
            EVENT.on(node,'click',function(e) {EVENT.stopEvent(e)});
          }
        }
      }
      if (DOM.getAttribute(allbuttons[b],'href') == '#') {
	EVENT.on(allbuttons[b],'click',function(e) {EVENT.stopEvent(e)});
      }
  }
}

function yui_render_pbuttons() {
  allbuttons = DOM.getElementsByClassName('pbutton');
  for (var b=0;b<allbuttons.length;b++) {
      button_container = DOM.getAncestorByClassName(allbuttons[b],'yui-button');
      DOM.removeClass(allbuttons[b],'pbutton');
      DOM.setStyle(allbuttons[b],'width',DOM.getStyle(button_container,'width'));
      EVENT.on(button_container,'click',button_mousedown);
      EVENT.on(button_container,'mouseenter',button_mouseover);
      EVENT.on(button_container,'mouseleave',button_mouseout);
      EVENT.on(button_container,'mousedown',button_mousedown);
      EVENT.on(button_container,'mouseup',button_mouseup);
      EVENT.on(allbuttons[b],'focus',button_focus);
      EVENT.on(allbuttons[b],'blur',button_blur);
      EVENT.on(allbuttons[b],'click',handle_disabled_events);
      if (DOM.getAttribute(allbuttons[b],'disabled')) {
        allbuttons[b].disabled=true;
      }
      else {
        allbuttons[b].disabled=false;
      }
      handle_disabled_buttons(button_container);
      node = allbuttons[b];
      for(var i=0; i<node.attributes.length; i++) {
        if(node.attributes.item(i).specified) {
          if (node.attributes.item(i).nodeName.indexOf('onclick') == 0) {
            EVENT.on(node,'click',function(e) {EVENT.stopEvent(e)});
          }
        }
      }
  }
}



function handle_disabled_buttons(con) {
  var obj = DOM.getFirstChild(DOM.getFirstChild(con));
  if (obj) {
    if (obj.disabled) {
      DOM.removeClass(con,'yui-button-hover');
      DOM.removeClass(con,'yui-link-button-hover');
      DOM.removeClass(con,'yui-button-active');
      DOM.removeClass(con,'yui-link-button-active');
      DOM.removeClass(con,'yui-button-focus');
      DOM.removeClass(con,'yui-link-button-focus');
      DOM.addClass(con,'yui-button-disabled');
      DOM.setAttribute(obj,'disabled','disabled');
    }
    else {
      DOM.removeClass(con,'yui-button-disabled');
    }
  }
}

function setDisabled(obj,is_disabled) {
  if (DOM.hasClass(obj,'yui-button')) {
    var con = obj;
    var obj = DOM.getFirstChild(DOM.getFirstChild(obj));
  }
  else {
    con = DOM.getAncestorByClassName(obj,'yui-button');
  }
  if (con) {
    DOM.get(obj).disabled=is_disabled;
    if (is_disabled) {
        DOM.removeClass(con,'yui-button-hover');
        DOM.removeClass(con,'yui-link-button-hover');
        DOM.removeClass(con,'yui-button-active');
        DOM.removeClass(con,'yui-link-button-active');
        DOM.removeClass(con,'yui-button-focus');
        DOM.removeClass(con,'yui-link-button-focus');
        DOM.addClass(con,'yui-button-disabled');
        DOM.setAttribute(obj,'disabled','disabled');
        obj.disabled = true;
    }
    else {
        DOM.removeClass(con,'yui-button-disabled');
        obj.disabled = false;
    }
  }
}

function check_disabled_buttons() {
    allbuttons = DOM.getElementsByClassName('yui-button','span',document.body);
    for (var i in allbuttons) {
      handle_disabled_buttons(allbuttons[i]);
    }
}

// setInterval("check_disabled_buttons()",500);

function render_portlets() {
  if (DOM.get('mirs_main')) {
    mirs_main_width = DOM.get('mirs_main').scrollWidth;
    var total_columns = DOM.getElementsByClassName('portal-column','td',DOM.get('mirs_main')).length;
    default_container_width = parseInt(parseInt(mirs_main_width) / total_columns)-50;
    var portlets = DOM.getElementsByClassName('yui-portlet','div','mirs_main');
    for (var i in portlets) {
        portlet_width = portlets[i].scrollWidth;
        portlet_height = portlets[i].scrollHeight;
        if (portlet_width > default_container_width) {
          container_width=portlet_width;
        }
        else {
          container_width = default_container_width
        }
        DOM.setStyle(portlets[i],'width',container_width);
	DOM.setStyle(portlets[i].parentNode,'width',container_width);
    }
  }
}

tree_callback['favorites'] = 'fav_tree_callback();'
function fav_tree_callback() {
  fav_nodes = DOM.getElementsByClassName('fav_node','a');
  for (var i in fav_nodes) {
    EVENT.on(fav_nodes[i],'mouseover',function(e){show_fav_edit(e)});
    parent_div = DOM.getAncestorByTagName(fav_nodes[i],'div');
  }
}
function show_fav_edit(e) {
  el = EVENT.getTarget(e);
  if (el.nodeName.toLowerCase() == 'a') {
    parent_div = el.parentNode;
    edit_links = DOM.getElementsByClassName('fav_node_edit','span');
    for (var j in edit_links) {
      DOM.setStyle(edit_links[j],'visibility','hidden');
    }
    child_edit_links = DOM.getElementsByClassName('fav_node_edit','span',parent_div)[0];
    DOM.setStyle(child_edit_links,'visibility','visible');
    EVENT.stopEvent(e);
  }
}

var folder_new_panel, fav_new_panel, fav_del_panel, global_fav_new;
function render_fav_panels () {
  if (DOM.get('folder_new_panel') && DOM.get('fav_new_panel') && DOM.get('fav_del_panel')) {
    folder_new_panel = new YAHOO.widget.Panel("folder_new_panel", {
      fixedcenter: true,
      constraintoviewport: true,
      width: '400px',
      zIndex: 10,
      visible:false
    });
    folder_new_panel.render();

    fav_new_panel = new YAHOO.widget.Panel("fav_new_panel", {
      fixedcenter: true,
      constraintoviewport: true,
      width: '400px',
      zIndex: 10,
      visible:false
    });
    fav_new_panel.render();
    fav_del_panel = new YAHOO.widget.Panel("fav_del_panel", {
      fixedcenter: true,
      constraintoviewport: true,
      width: '400px',
      zIndex: 10,
      visible:false
    });
    fav_del_panel.render();
    yui_render_pbuttons();
  }
}

var favfolder_add_folder_options = function(o) {
  if (o.responseText != 'undefined') {
    eval(o.responseText);
    DOM.get('folder_parent_id').value=parent_id;
    folder_new_panel.show();
  }
}
function fav_folder_add(parent_id) {
  folder_new_panel.setHeader('<div class="tl"></div><span>Add Folder</span><div class="tr"></div>');
  DOM.get('folder_local_title').value = '';
  var request = XHR.asyncRequest('GET', 'fav-folder-list?folder_select_id=folder_parent_id&selected_parent='+parent_id, {cache:false,success:favfolder_add_folder_options});
}
var fav_add_folder_options = function(o) {
  if (o.responseText != 'undefined') {
    eval(o.responseText);
    DOM.get('fav_parent_id').value=parent_id;
    fav_new_panel.show();
  }
}

var global_fav_add_folder_options = function(o) {
  if (o.responseText != 'undefined') {
    eval(o.responseText);
    global_fav_new.show();
  }
}

function fav_add(parent_id) {
  fav_new_panel.setHeader('<div class="tl"></div><span>Add Favorite</span><div class="tr"></div>');
  DOM.get('complete_furl').value = '';
  DOM.get('fav_local_title').value = '';
  var request = YAHOO.util.Connect.asyncRequest('GET', 'fav-folder-list?folder_select_id=fav_parent_id&selected_parent='+parent_id, {cache:false,success:fav_add_folder_options});
}

function fav_delete(favorite_id, parent_id, folder_p,url,local_title) {
  var fav_del_form = DOM.get('favorites_delete');
  var existing_fav_id = DOM.get('favorite_id');
  if (existing_fav_id) {
    existing_fav_id.parentNode.removeChild(existing_fav_id);
  }
  var fav_id_input = document.createElement('input');
  DOM.setAttribute(fav_id_input,'name','favorite_id');
  DOM.setAttribute(fav_id_input,'value',favorite_id);
  DOM.setAttribute(fav_id_input,'id','favorite_id');
  DOM.setAttribute(fav_id_input,'type','hidden');
  fav_del_form.appendChild(fav_id_input);
  if (folder_p == 'f') {
    fav_del_panel.setHeader('<div class="tl"></div><span>Delete Favorite</span><div class="tr"></div>');
    DOM.get('del_quest').innerHTML='Are you sure you want to delete ' + local_title + '?';
  } else {
    fav_del_panel.setHeader('<div class="tl"></div><span>Delete Folder</span><div class="tr"></div>');
    DOM.get('del_quest').innerHTML='Are you sure you want to delete the folder ' + local_title + ' and all favourites in it?';
  }
  fav_del_panel.show();
}

var fav_get_local_title = function(o) {
  var re_title = new RegExp("<title>[\n\r\s]*(.*)[\n\r\s]*</title>", "gmi");
  var title = re_title.exec(o.responseText);
  DOM.get('fav_local_title').value=html_entity_decode(title[1]);
  if (title == null) {
    DOM.get('fav_local_title').value='Untitled';
  }
}
function fav_edit(favorite_id, parent_id, folder_p,url,local_title) {
  if (folder_p == 'f') {
    fav_new_panel.setHeader('<div class="tl"></div><span>Edit Favorite</span><div class="tr"></div>');
    var fav_edit_form = DOM.get('favorites_new');
    var fav_id_input = document.createElement('input');
    DOM.setAttribute(fav_id_input,'name','favorite_id');
    DOM.setAttribute(fav_id_input,'value',favorite_id);
    DOM.setAttribute(fav_id_input,'type','hidden');
    fav_edit_form.appendChild(fav_id_input);
    DOM.get('complete_furl').value = url;
    DOM.get('fav_local_title').value = local_title;
    var request = YAHOO.util.Connect.asyncRequest('GET', 'fav-folder-list?folder_select_id=fav_parent_id&selected_parent='+parent_id, {cache:false,success:fav_add_folder_options});
  } else {
    folder_new_panel.setHeader('<div class="tl"></div><span>Edit Folder</span><div class="tr"></div>');
    var existing_fav_id = DOM.get('favorite_id');
    if (existing_fav_id) {
      existing_fav_id.parentNode.removeChild(existing_fav_id);
    }
    var fav_edit_form = DOM.get('folder_new');
    var fav_id_input = document.createElement('input');
    DOM.setAttribute(fav_id_input,'name','favorite_id');
    DOM.setAttribute(fav_id_input,'value',favorite_id);
    DOM.setAttribute(fav_id_input,'id','favorite_id');
    DOM.setAttribute(fav_id_input,'type','hidden');
    fav_edit_form.appendChild(fav_id_input);
    DOM.get('folder_local_title').value = local_title;
    var request = YAHOO.util.Connect.asyncRequest('GET', 'fav-folder-list?folder_select_id=folder_parent_id&c='+ favorite_id + '&selected_parent='+parent_id, {cache:false,success:favfolder_add_folder_options});
  }
}
var fav_get_title = function(o) {
    if (o.responseText !== undefined) {
        if (o.responseText.indexOf('DO EVAL') != -1) {
          eval(o.responseText);
        }
        else {
        DOM.get('fav_local_title').value=html_entity_decode(o.responseText);
        }
    }
    else {
      DOM.get('fav_local_title').value='Untitled';
    }
    document.body.style.cursor='default';
}

var fav_set_untitled = function(o) {
  DOM.get('fav_local_title').value='Untitled';
  document.body.style.cursor='default';
}
var g_fav_get_title = function(o) {
    if (o.responseText !== undefined) {
        if (o.responseText.indexOf('DO EVAL') != -1) {
          eval(o.responseText);
        }
        else {
        DOM.get('g_fav_local_title').value=html_entity_decode(o.responseText);
        }
    }
    else {
      DOM.get('g_fav_local_title').value='Untitled';
    }
    document.body.style.cursor='default';
}

var g_fav_set_untitled = function(o) {
  DOM.get('fav_local_title').value='Untitled';
  document.body.style.cursor='default';
}


function fav_get_page(url) {
  current_title = DOM.get('fav_local_title').value;
  if (current_title == 'Untitled' || current_title == '') {
    document.body.style.cursor='wait';
    var request = YAHOO.util.Connect.asyncRequest('GET', 'fav-get-title?url=' + escape(url), {cache:false,success:fav_get_title,failure:fav_set_untitled});
  }
}

function g_fav_get_page(url) {
  current_title = DOM.get('g_fav_local_title').value;
  if (current_title == 'Untitled' || current_title == '') {
    document.body.style.cursor='wait';
    var request = YAHOO.util.Connect.asyncRequest('GET', '/favorites/fav-get-title?url=' + escape(url), {cache:false,success:g_fav_get_title,failure:g_fav_set_untitled});
  }
}

function html_entity_decode(str) {
  var ta=document.createElement("textarea");
  ta.innerHTML=str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
  return ta.value;
}

function handle_fav_events() {
  fav_edit_links = DOM.getElementsByClassName('fav_edit_link','a');
  fav_del_links = DOM.getElementsByClassName('fav_delete_link','a');
  for (var i in fav_edit_links) {
    EVENT.removeListener(fav_edit_links[i],'click');
    EVENT.on(fav_edit_links[i],'click',fav_edit_del_link_click);
  }
  for (var j in fav_del_links) {
    EVENT.removeListener(fav_del_links[j],'click');
    EVENT.on(fav_del_links[j],'click',fav_edit_del_link_click);
  }
}
function fav_edit_del_link_click(e) {
  el = EVENT.getTarget(e);
  if (el.nodeName.toLowerCase() != 'a') {
    el = el.parentNode;
  }
  code = DOM.getAttribute(el,'click_hold');
  eval(code);
  EVENT.stopEvent(e)
}

function fav_path_without_host() {
  var full_path = location.href;
  var url_host = location.protocol + '//' + location.host;
  return full_path.replace(url_host,'');
}

var fav__add_panel_rendered = false;
function global_fav_add() {
  if (!fav__add_panel_rendered) {
    global_fav_new = new PANEL("global_fav_new", {
      fixedcenter: true,
      constraintoviewport: true,
      width: '400px',
      zIndex: 10,
      visible:false
    });
    global_fav_new.render();
    yui_render_pbuttons();
    fav__add_panel_rendered = true;
  }
  global_fav_new.setHeader('<div class="tl"></div><span>Add Favorite</span><div class="tr"></div>');
  DOM.get('g_complete_furl').value = fav_path_without_host();
  DOM.get('g_fav_local_title').value = document.title;
  var request = YAHOO.util.Connect.asyncRequest('GET', '/favorites/fav-folder-list?folder_select_id=g_fav_parent_id', {cache:false,success:global_fav_add_folder_options});
}

// EVENT.on(window,'load',render_fav_panels);
// EVENT.on(window,'load',handle_fav_events);
time_callback = new Array();
function render_time_inputs() {
  try {
  var ti = DOM.getElementsByClassName('time_input','input');
  for (var i=0;i<ti.length;i++) {
    var input_id = ti[i].id;
    var input_container = ti[i].parentNode;
    var time_id = input_id + '_time';
    clear_link = document.createElement('a');
    clear_text = document.createTextNode('Clear');
    clear_link.setAttribute('href','#');
    clear_link.setAttribute('id',input_id + '_clear');
    clear_link.appendChild(clear_text);
    input_container.appendChild(clear_link);
    var time_container_id = input_id + '_time_container';
    time_container = document.createElement('div');
    time_container.id = time_container_id;
    time_container.className = 'yui-skin-sam time_container';
    time_container.style.display='none';
    time_container.style.position='absolute';
    time_container.style.zIndex='9998';
    time_container.style.clear='both';
    input_container.appendChild(time_container);
    add_time_select(input_id,time_container);
    EVENT.on(ti[i], 'click', toggle_time_input);
    EVENT.on(ti[i], 'keypress', toggle_time_input);
    EVENT.on(ti[i], 'keydown', function(e) {EVENT.stopEvent(e);});
    EVENT.on(input_id + '_clear', 'click', clear_time_input);
    ti[i].title='Click here to select time.';
    ti[i].style.cssFloat='left';
    ti[i].style.styleFloat='left';
    ti[i].style.cursor='hand';
    ti[i].style.cursor='pointer';
    DOM.setAttribute(ti[i],'autocomplete','off');
  }
      }
    catch(err){
    }
}

function add_time_select(input_id,time_container) {
  var html='';
  html += '<table style="width:100%;border:0">';
  html += '<tr>';
  html += '<td style="font-weight:bold;text-align:center">Select Time</td>';
  html += '</tr>';
  html += '<tr>';
  html += '<td style="text-align:center">';
  var format = DOM.getAttribute(input_id,'time_format');
  var min_incr = parseInt(DOM.getAttribute(input_id,'min_incr'));
  var hour_options='';
  if (format == 12) {
    for (var h=1;h<=12;h++) {
      if (h<10) {
	hp = '0' + h;
      }
      else {
	hp = h;
      }
      hour_options += '<option value="' + hp + '">'+ hp + '</option>';
    }
  }
  else {
    for (var h=0;h<=24;h++) {
      if (h<10) {
	hp = '0' + h;
      }
      else {
	hp = h;
      }
      hour_options += '<option value="' + hp + '">'+ hp + '</option>';
    }
  }
  var min_options = '';
  if (min_incr < 1 || isNaN(min_incr)) {
    min_incr = 1
  }
  for (var m=0;m<=59;m+=min_incr) {
      if (m<10) {
	mp = '0' + m;
      }
      else {
	mp = m;
      }
      min_options += '<option value="' + mp + '">'+ mp + '</option>';
  }
  html += '<select id="' + input_id + '_hours">' + hour_options + '</select> :';
  html += '<select id="' + input_id + '_mins">' + min_options + '</select>';
  if (format == 12) {
    html += '<select id="' + input_id + '_ampm">';
    html += '<option value="AM">AM</option>';
    html += '<option value="PM">PM</option>';
    html +='</select>';
  }
  html += '</td>';
  html += '</tr>';
  html += '<tr>';
  html += '<td style="text-align:right:padding-right:10px">';
  html += '<div class="form-button" style="text-align:right"><span class="yui-button yui-submit-button"><span class="first-child">';
  html += '<input type="submit" value=" OK " style="width: 43px;" onclick="set_time(\'' + input_id + '\');return false">';
  html += '</span></span></div>';
  html += '</td>';
  html += '</tr>'
  html += '</table>';
  time_container.innerHTML=html;
}

function clear_time_input(e) {
  var l = EVENT.getTarget(e);
  var id_parts = l.id.split('_');
  id_parts.pop();
  input_id = id_parts.join('_');
  DOM.get(input_id).value='';
  if (typeof time_callback[input_id] !== 'undefined') {
    eval(time_callback[input_id]);
  }
  var di = DOM.getElementsByClassName('time_input','input');
  for (var h=0;h<di.length;h++) {
    var co= di[h].id + '_time_container';
    var j = DOM.get(co);
    j.style.display='none';
  }
  EVENT.stopEvent(e);
}

function toggle_time_input (e) {
  var i = EVENT.getTarget(e);
  var xy = DOM.getXY(i);
  var x = xy[0];
  var y = xy[1]+20;
  var container = i.id + '_time_container';
  var c = DOM.get(container);
  if (c.style.display=='block') {
    c.style.display='none';
  }
  else {
    var di = DOM.getElementsByClassName('time_input','input');
    for (var h=0;h<di.length;h++) {
      var co= di[h].id + '_time_container';
      var j = DOM.get(co);
      j.style.display='none';
    }
    c.style.display='block';
    DOM.setXY(container,[x,y]);
    c.style.zIndex='9999';
  }
   EVENT.stopEvent(e);
}

function set_time(input_id) {
  var container = DOM.get(input_id + '_time_container');
  var hours = DOM.get(input_id + '_hours').value;
  var minutes = DOM.get(input_id + '_mins').value;
  if (DOM.get(input_id + '_ampm')) {
   var ampm = ' ' + DOM.get(input_id + '_ampm').value;
  }
  else {
    var ampm = '';
  }
  var time = hours + ':' + minutes + ampm;
  DOM.get(input_id).value = time;
  if (typeof time_callback[input_id] !== 'undefined') {
    eval(time_callback[input_id]);
  }
  DOM.setStyle(container,'display','none');
}
cal_callback = new Array();
function render_date_input(di) {
    var input_id = di.id;
    var input_container = di.parentNode;
    var cal_id = input_id + '_cal';
    clear_link = document.createElement('a');
    clear_text = document.createTextNode('Clear');
    clear_link.setAttribute('href','#');
    clear_link.setAttribute('id',input_id + '_clear');
    clear_link.appendChild(clear_text);
    input_container.appendChild(clear_link);
    var cal_container_id = input_id + '_cal_container';
    cal_container = document.createElement('div');
    cal_container.id = cal_container_id;
    cal_container.className = 'yui-skin-sam cal_container';
    cal_container.style.display='none';
    cal_container.style.position='absolute';
    cal_container.style.clear='both';
    input_container.appendChild(cal_container);
    var navConfig = {
          strings : {
              month: "Choose Month",
              year: "Enter Year",
              submit: "OK",
              cancel: "Cancel",
              invalidYear: "Please enter a valid year"
          },
          monthFormat: YAHOO.widget.Calendar.LONG,
          initialFocus: "year"
    };
    cal = new YAHOO.widget.Calendar(cal_id,cal_container_id,{navigator: navConfig});
    cal.render();
    cal.selectEvent.subscribe(cal_handle_select,di, true);
    EVENT.on(di, 'click', toggle_date_input_cal);
    EVENT.on(di, 'keypress', toggle_date_input_cal);
    EVENT.on(di, 'keydown', function(e) {EVENT.stopEvent(e);});
    EVENT.on(input_id + '_clear', 'click', clear_date_input);
    di.title='Click here to select date.';
    di.style.cssFloat='left';
    di.style.styleFloat='left';
    di.style.cursor='hand';
    di.style.cursor='pointer';
    DOM.setAttribute(di,'autocomplete','off');
}

function render_date_inputs() {
  try {
  var di = DOM.getElementsByClassName('date_input','input');
  for (var i=0;i<di.length;i++) {
  render_date_input(di[i]);
  }
      }
    catch(err){
    }
}
function cal_handle_select (type,args,obj) {
  var dates = args[0];
  var date = dates[0];
  var year = date[0], month = date[1]-1, day = date[2];
  month_list = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
  short_month_list = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
  var month_name = month_list[month];
  var short_month_name = short_month_list[month];
  new_date = DOM.getAttribute(obj,'date_format');
  month++;
  if (month < 10) {
    month = '0' + month;
  }
  if (day < 10) {
    day = '0' + day;
  }
  if (!new_date) {
    obj.value = year + '-' + month + '-' + day;
    if (typeof cal_callback[obj.id] !== 'undefined') {
      eval(cal_callback[obj.id]);
    }
  }
  else {
    new_date = new_date.replace('year',year);
    new_date = new_date.replace('month',month);
    new_date = new_date.replace('day',day);
    new_date = new_date.replace('month_name',month_name);
    new_date = new_date.replace('short_month_name',short_month_name);
    obj.value = new_date;
    if (typeof cal_callback[obj.id] !== 'undefined') {
      eval(cal_callback[obj.id]);
    }
  }
  var container = obj.id + '_cal_container';
  var c = DOM.get(container);
  c.style.display='none';
}
function toggle_date_input_cal (e) {
  var i = YAHOO.util.Event.getTarget(e);
  var xy = DOM.getXY(i);
  var x = xy[0];
  var y = xy[1]+20;
  var container = i.id + '_cal_container';
  var c = DOM.get(container);
  if (c.style.display=='block') {
    c.style.display='none';
  }
  else {
    var di = DOM.getElementsByClassName('date_input','input');
    for (var h=0;h<di.length;h++) {
      var co= di[h].id + '_cal_container';
      var j = DOM.get(co);
      j.style.display='none';
    }
    c.style.display='block';
    DOM.setXY(container,[x,y]);
    c.style.zIndex='9999';
  }
  YAHOO.util.Event.stopEvent(e);
}
function clear_date_input(e) {
  var l = YAHOO.util.Event.getTarget(e);
  var id_parts = l.id.split('_');
  id_parts.pop();
  input_id = id_parts.join('_');
  DOM.get(input_id).value='';
  if (typeof cal_callback[input_id] !== 'undefined') {
    eval(cal_callback[input_id]);
  }
  var di = DOM.getElementsByClassName('date_input','input');
  for (var h=0;h<di.length;h++) {
    var co= di[h].id + '_cal_container';
    var j = DOM.get(co);
    j.style.display='none';
  }
  YAHOO.util.Event.stopEvent(e);
}

// EVENT.on(window,'load',render_date_inputs);

function toggle_debug_module(module) {
  var mod = module.substring(4); // Everything after yui_
  if (DOM.hasClass(module,'yuimenuitemlabel-checked')) {
    DOM.removeClass(module,'yuimenuitemlabel-checked');
    DOM.removeClass(DOM.get(module).parentNode,'yuimenuitem-checked');
  }
  else {
    DOM.addClass(module,'yuimenuitemlabel-checked');
    DOM.addClass(DOM.get(module).parentNode,'yuimenuitem-checked');
  }
  var selected_items = DOM.getElementsByClassName('yuimenuitemlabel-checked','a','yui-debug');
  var selected_values = [];
  for (var i in selected_items) {
    mod_name = selected_items[i].id.substring(4);
    selected_values.push(mod_name);
  }
  var selected_values_str = selected_values.join(',');
  COOKIE.setSub('mdk-state','debug_modules',selected_values_str);
}
var MINDOKA = {};
MINDOKA.util = {};
MINDOKA.util.selection_lists = [];

MINDOKA.util.select_list = function() {
};
MINDOKA.util.select_list.prototype = {

    "init" : function(name,avail_url,avail_var,exist_url,save_url,save_var,extra_vars,continue_url) {
        // set up html elements
        this.waitpanel =
                new YAHOO.widget.Panel("waitpanel",
                        { close:false,
                          draggable:false,
                          zindex:4,
                          modal:false,
                          visible:false
                        }
                );

        this.waitpanel.setBody('<img src="/resources/yui/build/carousel/assets/ajax-loader.gif" />');
        this.updateQueue = 0;
        this.showAll = 0;
        this.extra_vars = extra_vars;  // extra variable array of label and value pairs
        var topTable = document.createElement("table");
        var row1 = topTable.insertRow(0),row2 = topTable.insertRow(1);
        var cell01 = row1.insertCell(0),cell02 = row1.insertCell(1),cell03 = row1.insertCell(2),
        cell11 = row2.insertCell(0),cell12 = row2.insertCell(1),cell13 = row2.insertCell(2);
        cell01.style.verticalAlign = "top";
        cell03.style.verticalAlign = "top";
        var avail_div_text = document.createElement("div");
        this.avail_filter_el = document.createElement("input");
        this.avail_filter_el.type = "text"
        this.avail_filter_el.id = name + "_filter_available";
        this.avail_filter_el.style.marginBottom = "15px";
        avail_div_text.innerHTML = "<div>Enter Filter Text:</div>";
        avail_div_text.appendChild(this.avail_filter_el);
        cell01.appendChild(avail_div_text);

        this.avail_el = document.createElement("select");
        this.avail_el.id = name + "_available";
        this.avail_el.name = name + "_available";
        this.avail_el.multiple = true;
        cell11.appendChild(this.avail_el);

        var add_button_div = document.createElement("div");
        add_button_div.id = name+"add_button_div";
        var del_button_div = document.createElement("div");
        del_button_div.id = name+"del_button_div";
        this.waitpanel.render(cell12);
        cell12.appendChild(add_button_div);
        cell12.appendChild(del_button_div);
        this.show_button = new YAHOO.widget.Button({
            id: "show_button",
            type: "button",
            label: "Show All",
            container:avail_div_text });
        this.add_button = new YAHOO.widget.Button({
            id: "add_button",
            type: "button",
            label: "&nbsp;ADD&nbsp;",
            container:add_button_div });
        this.rem_button = new YAHOO.widget.Button({
            id: "rem_button",
            type: "button",
            label: "&nbsp;DEL&nbsp;",
            container: del_button_div});

        var exist_div_text = document.createElement("div");
        cell13.appendChild(exist_div_text);

        this.exist_el = document.createElement("select");
        this.exist_el.id = name + "_existing";
        this.exist_el.name = name + "_existing";
        this.exist_el.multiple = true;
        cell13.appendChild(this.exist_el);

        cell11.align = "center";

        document.getElementById(name).appendChild(topTable);
        this.avail_url = avail_url;
        this.save_url = save_url;
        this.exist_url = exist_url;
        if (YAHOO.lang.isValue(continue_url))
        this.continue_url = continue_url;
        else
        this.continue_url = "#";
        this.avail_var = avail_var;
        this.save_var = save_var;
        this.avail_values = [{"label":"Please Filter","value":"sel_list_not_filtered"}];
        this.exist_values = [];
        var existing_callback= {
          success: function(o) {
            try {
                // response must be a valid (escaped) JSON array
                this.exist_values = YAHOO.lang.JSON.parse(o.responseText);
            }
            catch (e) {
                alert("Error retrieving existing values");
            }
            this.render_values("both");
          },
          failure: function(o) {
            alert("There was an error retrieving the existing values");
          },
          timeout:5000,
          scope : this
        };
        this.extra_url_vars = "";
        for (var k=0;k<this.extra_vars.length;k++) {
            this.extra_url_vars = this.extra_url_vars.concat("&" + encodeURIComponent(extra_vars[k].label) + "=" + encodeURIComponent(extra_vars[k].value))
        };
        if (this.extra_url_vars == "")
            var use_url = this.exist_url;
        else
            var use_url = this.exist_url + "?" + this.extra_url_vars.substring(1);
        this.exist_trans = YAHOO.util.Connect.asyncRequest("GET",
            use_url,
            existing_callback);
        this.avail_trans = null;
        this.avail_filter_val = null;
        var get_callback = function() {
            this.showAll = 0;
            this.get_values(false);
        };
        var show_callback = function() {
          this.showAll = 1;
          this.avail_filter_el.value = "";
          this.get_values(false);
        }
        EVENT.on(this.avail_filter_el,"keyup",get_callback,this,true);
        EVENT.on("add_button","click",this.add_selected,this,true);
        EVENT.on("rem_button","click",this.remove_selected,this,true);
        EVENT.on("show_button","click",show_callback,this,true);
        var resy1 = new YAHOO.util.Resize(name+"_available",{proxy:true,height:300,width:250});
        var resy2 = new YAHOO.util.Resize(name+"_existing",{proxy:true,height:300,width:250});
    },
    "get_values" : function(both_sets) {
        var f_val = this.avail_filter_el.value;
        var avail_callback= {
          success: function(o) {
            this.updateQueue--;
            if (this.updateQueue <= 0) {
            this.waitpanel.hide();
            this.updateQueue = 0;
            }
            try {
                // response must be a valid (escaped) JSON array
                this.avail_values = YAHOO.lang.JSON.parse(o.responseText);
            }
            catch (e) {
                alert("Filter produced invalid JSON");
            }
                this.render_values("avail");
          },
          failure: function(o) {
            this.updateQueue--;
            if (this.updateQueue <= 0) {
            this.waitpanel.hide();
            this.updateQueue = 0;
            }
            alert("There was an error retrieving the options");
          },
          abort: function(o) {
            this.updateQueue--;
          },
          timeout: 5000,
          argument : both_sets,
          scope : this
        };
        if (this.showAll == 0 && f_val === "") {
            this.avail_values = [{"label":"Please Filter","value":"sel_list_not_filtered"}];
            this.render_values("both");
        }
        else {
            if (!YAHOO.util.Connect.abort(this.avail_trans))
            this.updateQueue++;
            this.waitpanel.show();
        this.avail_trans = YAHOO.util.Connect.asyncRequest("GET",
            this.avail_url+"?"+this.avail_var+"="+f_val + this.extra_url_vars,avail_callback);
        }
        if (both_sets) {
            var exist_callback= {
          success: function(o) {
            this.updateQueue--;
            if (this.updateQueue <= 0) {
            this.waitpanel.hide();
            this.updateQueue = 0;
            }
            try {
                // response must be a valid (escaped) JSON array
                this.exist_values = YAHOO.lang.JSON.parse(o.responseText);
            }
            catch (e) {
                alert("Invalid JSON from existing value query");
            }
            this.render_values("both");
          },
          failure: function(o) {
            this.updateQueue--;
            if (this.updateQueue <= 0) {
            this.waitpanel.hide();
            this.updateQueue = 0;
            }
            alert("There was an error retrieving the existing values");
          },
          abort: function(o) {
            this.updateQueue--;
          },
          timeout: 5000,
          scope : this
        };
        if (this.extra_url_vars == "")
            var use_url = this.exist_url;
        else
            var use_url = this.exist_url + "?" + this.extra_url_vars.substring(1);
        if (!YAHOO.util.Connect.abort(this.exist_trans))
        this.updateQueue++;
        this.waitpanel.show();
        this.exist_trans = YAHOO.util.Connect.asyncRequest("GET",
            use_url,
            exist_callback);
        }
    },
    "render_values" : function(side) {
        var i,new_exist_opts = [],new_avail_opts = [],ex,av;
        if (side != "avail") {
        for (i = 0;i<this.exist_values.length;i++) {
            ex = this.exist_values[i];
            new_exist_opts.push(new Option(ex.label,ex.value,false,false));
        }
        this.exist_el.options.length = 0;
        for (i=0;i<new_exist_opts.length;i++) {
            this.exist_el.options[i] = new_exist_opts[i];
        }
        }
        if (side != "exist") {
        var found;
        if (this.avail_values.length == 0) {
            new_avail_opts.push(new Option("No Matches","",false,false));
        }
        else if (this.avail_values[0].value == "sel_list_not_filtered") {
            new_avail_opts.push(new Option(this.avail_values[0].label,this.avail_values[0].value,false,false));
        }
        else {
            for (i = 0;i<this.avail_values.length;i++) {
                av = this.avail_values[i];
                found = false;
                for(var j=0; j<this.exist_values.length; j++) {
                    if(this.exist_values[j].value == av.value) {
                        found = true; break;
                    }
                }
                if(found) {
                    continue;
                }
                new_avail_opts.push(new Option(this.avail_values[i].label,this.avail_values[i].value,false,false));
            }
        }
        this.avail_el.options.length = 0;
        for (i=0;i<new_avail_opts.length;i++) {
            this.avail_el.options[i] = new_avail_opts[i];
        }
        }
    },
    "remove_selected" : function() {
        var i,j,rem_vars = "",rem_url = this.save_url + "?action=delete"
        for (i=0; i<this.exist_el.options.length;i++) {
            if (this.exist_el.options[i].selected) {
                rem_vars = rem_vars + "&" + encodeURIComponent(this.save_var) + "=" + encodeURIComponent(this.exist_el.options[i].value);
            }
        };
        var rem_callback= {
          success: function(o) {
            this.get_values(true);
            this.updateQueue--;
            if (this.updateQueue <= 0) {
            this.waitpanel.hide();
            this.updateQueue = 0;
            }
            // need return of "good" otherwise alert for breakage
            if (YAHOO.lang.trim(o.responseText) != "good") {
              alert("There was an error removing the selected the options");
            }
          },
          failure: function(o) {
            alert("There was an error removing the selected the options");
            this.updateQueue--;
            if (this.updateQueue <= 0) {
            this.waitpanel.hide();
            this.updateQueue = 0;
            }
          },
          scope : this
        };
        this.updateQueue++;
        this.waitpanel.show();
        YAHOO.util.Connect.asyncRequest("GET",
            rem_url + this.extra_url_vars + rem_vars,rem_callback);
    },
    "add_selected" : function() {

        var i,j,add_vars = "",add_url = this.save_url + "?action=add"
        for (i=0;i<this.avail_el.options.length;i++) {
            if (this.avail_el.options[i].selected) {
                add_vars = add_vars + "&" + encodeURIComponent(this.save_var) + "=" + encodeURIComponent(this.avail_el.options[i].value);
            }
        };
        var add_callback= {
          success: function(o) {
            this.get_values(true);
            this.updateQueue--;
            if (this.updateQueue <= 0) {
            this.waitpanel.hide();
            this.updateQueue = 0;
            }
            // need return of "good" otherwise alert for breakage
            if (YAHOO.lang.trim(o.responseText) != "good") {
              alert("There was an error removing the selected the options");
            }
          },
          failure: function(o) {
            alert("There was an error adding the selected the values");
            this.updateQueue--;
            if (this.updateQueue <= 0) {
            this.waitpanel.hide();
            this.updateQueue = 0;
            }
          },
          scope : this
        };
        this.updateQueue++;
        this.waitpanel.show();
        if (add_vars == "") {
                alert("Please select one or more items to add");
                this.updateQueue--;
                this.waitpanel.hide();
        }
        YAHOO.util.Connect.asyncRequest("GET",
            add_url + this.extra_url_vars + add_vars,add_callback);
    }
};
function createMindokaSelection(name,avail_url,avail_var,exist_url,save_url,save_var,extra_vars,continue_url) {
    var thislist = new MINDOKA.util.select_list();
    thislist.init(name,avail_url,avail_var,exist_url,save_url,save_var,extra_vars,continue_url);
    MINDOKA.util.selection_lists.push(thislist);
    return thislist;
}


function add_search_options() {
  if (DOM.get('main-search')) {
    var input =  DOM.get('main-search');
    EVENT.removeListener(input,'focus',search_focus);
    EVENT.addListener(input,'focus',search_focus);
    EVENT.removeListener(document.body,'focus',search_focus_check);
    EVENT.addListener(document.body,'click',search_focus_check);
    if (input.value != 'Search...' && input.value != '') {
      DOM.addClass(input,'q_exists');
    }
  }
}
var search_focus = function(e) {
  var input =  DOM.get('main-search');
  DOM.addClass(input,'focused');
  if (input.value == 'Search...') {
    input.value='';
  }
  search_options.show();

  setTimeout("DOM.get('main-search').focus()",50)
}

var search_focus_check = function(e) {
  var clicked_obj = EVENT.getTarget(e);
  var body_clicked = 1;
  var search_pieces = ['main-search','con-search-submit','search_panel_options'];
  for (var o in search_pieces) {
    if (clicked_obj.id == search_pieces[o] || DOM.isAncestor(search_pieces[o],clicked_obj)) {
      body_clicked = 0;
    }
  }
  if (body_clicked) {
    handle_search_blur();
  }
}

function handle_search_blur() {
  var input =  DOM.get('main-search');
  DOM.removeClass(input,'focused');
  if (input.value == '') {
    input.value='Search...';
    DOM.removeClass(input,'q_exists');
  }
  if (input.value != 'Search...' && input.value != '') {
    DOM.addClass(input,'q_exists');
  }
  search_options.hide();
}

EVENT.onDOMReady(add_search_options);


function search_options_check(cb) {
  if (DOM.hasClass(cb,'search_bindings_checkbox')) {
    if (DOM.get('context_search')) {
      DOM.get('context_search').checked=false;
    }
  }
  else {
    sb_cbs = DOM.getElementsByClassName('search_bindings_checkbox','input','search_panel_options');
    for (sb in sb_cbs) {
      sb_cbs[sb].checked=false;
    }
  }
}

function list_table_row_select(row) {
  var inputs = DOM.get(row).getElementsByTagName('input');
  if (inputs.length > 0) {
    var first_input = DOM.get(row).getElementsByTagName('input')[0];
    if (DOM.getAttribute(first_input,'type') == 'checkbox') {
      DOM.addClass(row,'yui-dt-selected');
      first_input.checked = DOM.hasClass(row,'yui-dt-selected');
    }
  }
}

function list_table_row_deselect(row) {
  DOM.removeClass(row,'yui-dt-selected');
  var inputs = DOM.get(row).getElementsByTagName('input');
  if (inputs.length > 0) {
    var first_input = DOM.get(row).getElementsByTagName('input')[0];
    if (DOM.getAttribute(first_input,'type') == 'checkbox') {
      first_input.checked = DOM.hasClass(row,'yui-dt-selected');
    }
  }
}


function list_table_row_toggle_select(row) {
  if (DOM.hasClass(row,'yui-dt-selected')) {
    list_table_row_deselect(row);
  }
  else {
    list_table_row_select(row);
  }
  var parent_table = DOM.getAncestorByTagName(el,'table');
  var check_all = DOM.getElementsByClassName('list_checkall','input',parent_table);
  if (check_all.length > 0) {
    var ca = check_all[0];
    var all_cbs = [];
    var checked_cbs = [];
    var rows = parent_table.getElementsByTagName('tr');
    for (var i=0; i<rows.length; i++) {
      var inputs = DOM.get(row).getElementsByTagName('input');
      if (inputs.length > 0) {
        var first_input = DOM.get(rows[i]).getElementsByTagName('input')[0];
        if (DOM.getAttribute(first_input,'type') == 'checkbox') {
          all_cbs.push(first_input);
          if (first_input.checked) {
            checked_cbs.push(first_input);
          }
        }
      }
    }
    (all_cbs.length == checked_cbs.length) ? ca.checked = true : ca.checked = false;
  }
}

function list_table_row_highlight(row) {
  DOM.addClass(row,'yui-dt-highlighted');
}

function list_table_row_unhighlight(row) {
  DOM.removeClass(row,'yui-dt-highlighted');
}

var list_table_mouseover = function(e) {
  el = EVENT.getTarget(e);
  if (!(el.nodeName.toLowerCase() == 'tr' && (DOM.hasClass(el,'yui-dt-odd') || DOM.hasClass(el,'yui-dt-even')))) {
    if (el.nodeName.toLowerCase() == 'th') {
      inth = el;
    }
    else {
      inth = DOM.getAncestorByTagName(el,'th');
      el = DOM.getAncestorByTagName(el,'tr');
    }
  }
  if (inth == null && !DOM.hasClass(el,'no-data')) {
    list_table_row_highlight(el);
  }
}

var list_table_mouseout = function(e) {
  el = EVENT.getTarget(e);
  if (!(el.nodeName.toLowerCase() == 'tr' && !DOM.hasClass(el,'no-data') && (DOM.hasClass(el,'yui-dt-odd') || DOM.hasClass(el,'yui-dt-even')))) {
    el = DOM.getAncestorByTagName(el,'tr');
  }
  list_table_row_unhighlight(el);
}

var list_table_click = function(e) {
  el = EVENT.getTarget(e);
  if (el.nodeName.toLowerCase() != 'a') {
    if (DOM.hasClass(el,'list_checkall')) {
      var parent_table = DOM.getAncestorByTagName(el,'table');
      var rows = parent_table.getElementsByTagName('tr');
      if (el.checked) {
        for (var i=0;i<rows.length;i++) {
          list_table_row_select(rows[i]);
        }
      }
      else {
        for (var i=0;i<rows.length;i++) {
          list_table_row_deselect(rows[i]);
        }
      }
    }
    else {
      if (el.nodeName.toLowerCase() != 'tr') {
        el = DOM.getAncestorByTagName(el,'tr');
      }
      list_table_row_toggle_select(el);
    }
  }
}


function add_list_table_events(table) {
  EVENT.on(table,'mouseover',list_table_mouseover);
  EVENT.on(table,'mouseout',list_table_mouseout);
  EVENT.on(table,'click',list_table_click);
}

if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function(obj, start) {
     for (var i = (start || 0), j = this.length; i < j; i++) {
         if (this[i] === obj) { return i; }
     }
     return -1;
  }
}


function user_message(msg,type,label) {
  container = document.createElement('div');
  DOM.setAttribute(container,'id','mdk-user-message');
  DOM.addClass(container,'user-message');
  DOM.addClass(container,type);
  container.innerHTML = '<table class="user-message-sub" align="center" width="99%"><tr><td align="left" valign="middle">' + msg + '</td><td width="50" align="right" valign="middle"><a href="#" onclick="user_message_close(\'' + label + '\');return false"><img src="/resources/mdkicons/16x16/actions/dialog-close.png" width="22" height="22"></a></td></tr></table>';
  document.body.appendChild(container);
}

function user_message_close(label) {
  if (DOM.get('mdk-user-message')) {
    document.body.removeChild(DOM.get('mdk-user-message'));
    if (label == 'gcf') {
      COOKIE.setSub('mdk-state','gcf-message-shown',1,{ path: '/'});
    }
  }
}
