// *****************************
//  clb_spaces.js
//
//  $Revision: 1.8 $
//  Contains routines to generate page content, hover content, modal content
//  Also to display those entities and process user interaction through JSONP
//
//  This file is used for the spaces page and the signin/signout page.
//
// *****************************

// We need to know which we are in to avoid referencing data that might not be present.
// Absence of members or files mean the user hasn't accepted the space
// It could also be an error condition that needs to be accounted for
var spaces_page = (typeof (webx.signin) == "undefined") 
               && (typeof (webx.signout) == "undefined");
if (spaces_page != false) { spaces_page = true}
// alert("Spaces Page: "+spaces_page);

var accepted_space = (typeof (webx.members) == "undefined" || webx.members == null) ? false : true;

  /* ---------------------------------
    pasted from clb_util.js  -- 04/10/08
  
    Revision: 1.1.2.12 
    Contains helper functions for collaboration spaces.
  
   
  -------------------------------------
  */ 
  
  /* 
  Returns an image tag displaying the correct icon
  img tag is returned as a string
  param: mt = mime type (no leading or trailing whitespace please)
  param: labels = text strings for files table
  
  notes: .mpp and .vsd are both returning mime type application/octet-stream
  */
  function webx_fileType(mt,labels) {

	var icon="/web/fw/i";
  	switch(mt) {
	  	case "application/msword":
			icon += "/icon-sm-msword.gif";
			alttext = labels.WEBEX_FILES_WORD_DOC;
			break;
	  	case "application/pdf":
	  		icon += "/icon-sm-pdf.gif";
	  		alttext = labels.WEBEX_FILES_PDF;
	  		break;
	  	case "application/photoshop":
	  	case "application/x-photoshop":
	  		icon += "/icon-sm-psd.gif";
	  		alttext = labels.WEBEX_FILES_PHOTOSHOP;
	  		break;
		case "application/vnd.ms-powerpoint":
			icon += "/icon-sm-ppt.gif";
			alttext = labels.WEBEX_FILES_POWERPOINT;
			break;
		case "application/vnd.ms-excel":
		case "application/msexcel":
			icon += "/icon-sm-xls.gif";
			alttext = labels.WEBEX_FILES_EXCEL;
			break;
		case "application/vnd.ms-project": 
			icon += "/icon-sm-mpp.gif";
			alttext = labels.WEBEX_FILES_PROJECT;
			break;
		case "application/vnd.visio":
			icon += "/icon-sm-vsd.gif";
			alttext = labels.WEBEX_FILES_VISIO;
			break;
		case "application/x-zip-compressed":
		case "application/zip":
			icon += "/icon-sm-zip.gif";
			alttext = labels.WEBEX_FILES_ZIP;
			break;
		case "image/bmp":	
	  	case "image/gif":
		case "image/jpg":
	 	case "image/jpeg":
	 	case "image/tiff":
	 	case "image/x-icon":
	 		icon += "/icon-sm-jpeg.gif";
	 		alttext = labels.WEBEX_FILES_IMAGE;
	 		break;
	 	case "application/x-fla":
		case "application/x-flash":
		case "application/x-shockwave-flash":
			icon += "/icon-sm-flash.gif";
			alttext = labels.WEBEX_FILES_FLASH;
		case "audio/basic":
		case "audio/mp4":
		case "audio/vnd.rn-realaudio":
		case "audio/vnd.rn-realmedia":
		case "audio/vnd.rn-realplayer":
		case "audio/vnd.rn-realvideo":
		case "audio/wav":
		case "audio/x-mpeg":
		case "audio/x-ms-wma":
		case "audio/x-pn-realaudio":
			icon += "/icon-sm-audio.gif";
			alttext = labels.WEBEX_FILES_AUDIO;
			break;
		case "video/mp4":
		case "video/quicktime":
		case "video/x-mpeg":
		case "video/x-mpeg2":
		case "video/x-ms-wm":
		case "video/x-ms-wmv":
		case "video/x-msvideo":
			icon += "/icon-sm-video.gif";
			alttext = labels.WEBEX_FILES_VIDEO;
			break;
		default: 
	  		icon += "/icon-sm-unknown.gif";
  			alttext = labels.WEBEX_FILES_UNKNOWN;
  	}
  	
  	var imgtag = "<img src=\""+icon+"\" alt=\""+alttext+"\"/>";
  	return imgtag;
  }
  
  /* Returns the timestamp of the file. 
  Placeholder - will try to push this out to backend logic.
  */
  function webx_fileUploaded(moddate) {
  	return moddate;
  }
  
  /* 
  Reformats the file size to be in the largest unit of measure
  Rounds up to the nearest integer
  param: string fs = files size in bytes
  */
  function webx_fileSize(fs) {
  	var filesize = parseInt(fs);

  	if (filesize < 1024) {
  		filesize += " B";
  	}
  	else if (filesize < 1048576) {
  		filesize = Math.round(filesize / 1024);
  		filesize += " KB";
  	}
	else if (filesize < 1073741824) {
  		filesize = Math.round(filesize / (1024*1024));
  		filesize += " MB";		
	}
  	else {
  		filesize = Math.round(filesize / (1024*1024*1024));
  		filesize += " GB";
  	}
  	return filesize;
  }
  


//*******************************************************
// SUPPORT FUNCTIONS for SPACE LIST

// Returns the index of the selected space
// param sa - array of spaces
function findSelectedSpace(sa) {
   if ((typeof sa) == "undefined" || sa.length == 0) {
   	return -1;
   }
   var idx = 0;
      while ((typeof (sa[idx].selectedFlag) == "undefined")
              || (sa[idx].selectedFlag != "1")) {
          idx++;
          }
   return idx;
}

// ******************************************************   
// SUPPORT FUNCTIONS FOR FILES/MEMBERS TABLES

// set the firstRow flag
function setFirstRow(comp){
   if (comp.dto.dataArray.length > 0){
      comp.dto.dataArray[0].firstRow = 1;
      for (var i=1;i<comp.dto.dataArray.length;i++){
         comp.dto.dataArray[i].firstRow = 0;
         }
      }
   }

// ensure a minimum number of rows by adding blank rows as necessary
function fillTable(comp, minrows){
   var compobj = document.getElementById(comp);
   var tables = compobj.getElementsByTagName("TABLE");
   var tbodys = compobj.getElementsByTagName("TBODY");
   if (tbodys[1].childNodes.length < minrows){
      var numcells = tbodys[0].firstChild.childNodes.length;
      var str = "";
      for (var i=tbodys[1].childNodes.length; i < minrows; i++){
         var x = tables[1].insertRow(i);
         var y = x.insertCell(0);
         y.setAttribute("colSpan",""+numcells);
         y.setAttribute("class","webx-table-fill");
         y.innerHTML = "&nbsp;";
//         str += "<tr><td colspan='"+numcells+"'>&nbsp;</td></tr>";
         }
//         tbodys[1].innerHTML += str;
      }
   }

function webx_filessort(key, order){
if (key != webx.files.dto.sortedBy) {order = "descending"}; // will be flipped on next line
// alert(key+" "+order);
   if (order == "descending"){
     webx.files.dto.sortedOrder = "ascending";
     if (key=="title"){webx.files.dto.dataArray.sort(function(a,b){return (a.fileText<b.fileText)?-1:1})};
     if (key=="email"){webx.files.dto.dataArray.sort(function(a,b){return (a.addedByEmail<b.addedByEmail)?-1:1})};
     if (key=="date"){webx.files.dto.dataArray.sort(function(a,b){return (a.fileUploaded<b.fileUploaded)?-1:1})};
     if (key=="size"){webx.files.dto.dataArray.sort(function(a,b){return parseInt(a.fileSize)-parseInt(b.fileSize)})};
     
     }
   else {
     webx.files.dto.sortedOrder = "descending";
     if (key=="title"){webx.files.dto.dataArray.sort(function(a,b){return (a.fileText>b.fileText)?-1:1})};
     if (key=="email"){webx.files.dto.dataArray.sort(function(a,b){return (a.addedByEmail>b.addedByEmail)?-1:1})};
     if (key=="date"){webx.files.dto.dataArray.sort(function(a,b){return (a.fileUploaded>b.fileUploaded)?-1:1})};
     if (key=="size"){webx.files.dto.dataArray.sort(function(a,b){return parseInt(b.fileSize)-parseInt(a.fileSize)})};
     } 
   webx.files.dto.sortedBy = key;

   setFirstRow(webx.files);
   document.getElementById("webx-files").innerHTML = jsonT(webx.files, webx_files_rules);
   fillTable("webx-files",6);
   jQuery('#webx-files th').find('img').parent().parent().addClass('webx-sortedby');
   webx_set_files_hovers();
   
   return false;
   }

function webx_memberssort(key, order){
if (key != webx.members.dto.sortedBy) {order = "descending"}; // will be flipped on next line
// alert(key+" "+order);
   if (order == "descending"){
     webx.members.dto.sortedOrder = "ascending";
     if (key=="email"){webx.members.dto.dataArray.sort(function(a,b){return (a.memberEmail<b.memberEmail)?-1:1})};
     if (key=="role"){webx.members.dto.dataArray.sort(function(a,b){return (a.memberRole<b.memberRole)?-1:1})};
     }
   else {
     webx.members.dto.sortedOrder = "descending";
     if (key=="email"){webx.members.dto.dataArray.sort(function(a,b){return (a.memberEmail>b.memberEmail)?-1:1})};
     if (key=="role"){webx.members.dto.dataArray.sort(function(a,b){return (a.memberRole>b.memberRole)?-1:1})};
     } 
   webx.members.dto.sortedBy = key;

   setFirstRow(webx.members);
   document.getElementById("webx-members").innerHTML = jsonT(webx.members, webx_members_rules);
   fillTable("webx-members",6);
   jQuery('#webx-members th').find('img').parent().parent().addClass('webx-sortedby');
   webx_set_members_hovers();

   return false;
   }

// find and label Outstanding Invitees
// assumption: webx.mlab already initialized
function displayInvitee(){
   for (var idx = 0; idx < webx.members.dto.dataArray.length; idx++) {
           if (webx.members.dto.dataArray[idx].inviteeFlag=="1") {
           // "Outstanding Invitee needs to be added to resource bundle/JSON for localization
                   webx.members.dto.dataArray[idx].memberRole = webx.mlab.WEBEX_MEMBERS_OUTSTANDING_INVITEE; 
           }
   }
}

function checkMember(){
   if (webx.spaces.dto.dataArray[idx].role.toLowerCase()=="member") {
      // "Outstanding Invitee needs to be added to resource bundle/JSON for localization
      webx.members.dto.isMember = 1; 
   }
}

// Can be removed...?
function removeHover(){
    if (hoverTrigger == 0) {
       jQuery("#hoverWrapper").remove();
    }
 }
// Can be removed...?
function removeManage(){
    if (manageTrigger == 0) {
       jQuery('#webx-managespace-wrapper').css("display","none");
    }
 }
 


// ************************************
// ERROR HANDLING for modals. moved to clb_newspace.js


// *******************************************************
// FILE UPLOAD SUPPORT
/**
*
* AJAX IFRAME METHOD (AIM)
* http://www.webtoolkit.info/
*
**/
AIM = {
    frame : function(c) {
        var n = 'f' + Math.floor(Math.random() * 99999);
        var d = document.createElement('DIV');
        d.innerHTML = '<iframe style="display:none" src="about:blank" id="'
                      + n + '" name="' + n + '" onload="AIM.loaded(\'' + n + '\')"></iframe>';
        document.body.appendChild(d);

        var i = document.getElementById(n);
        if (c && typeof(c.onComplete) == 'function') {
            i.onComplete = c.onComplete;
        }

        return n;
    },

    form : function(f, name) {
        f.setAttribute('target', name);
    },

    submit : function(f, c) {
        AIM.form(f, AIM.frame(c));
        if (c && typeof(c.onStart) == 'function') {
            return c.onStart();
        } else {
            return true;
        }
    },

    loaded : function(id) {
        var i = document.getElementById(id);

        if (i.contentDocument) {
            var d = i.contentDocument;
        } else if (i.contentWindow) {
            var d = i.contentWindow.document;
        } else {
            var d = window.frames[id].document;
        }
        if (d.location.href == "about:blank") {
            return;
        }
//        if (typeof(i.onComplete) == 'function') {
//            i.onComplete(d.body.innerHTML);

//         iframe contains callback with files structure
              eval(d.body.innerHTML);

//        }
    }

}

// ************************************************
//  JSONP ROUTINES

// TEMPORARY - handle no backend
function webx_jsonp_nobackend(url){
    var pair, callback, component;
    var params = url.substring(url.indexOf("?")+1).split("&");
    for (var i = 0; i<params.length; i++){
       pair = params[i].split("=");
       if (pair[0] == "callBackFunction"){
          callback = pair[1];
          }
       if (pair[0] == "component"){
          component = pair[1];
          }
       }
    if (component == "webexSpaces") { component = "webx.spaces";}
    if (component == "webexFiles") { component = "webx.files";}
    if (component == "webexMembers") { component = "webx.members";}
    alert("NO SERVER - invoking "+callback+"() with current "+component);
    eval(callback+"("+component+")");
    }

// submit a form - pulled into clb_newspace.js

// submit a request
function webx_jsonp_request(url){
    url += "&" +new Date().getTime().toString(); // prevent caching
// alert("Requesting: "+url.substring(url.indexOf("?")));
    if (url.indexOf("next action URL")>= 0){ // no backend
       webx_jsonp_nobackend(url)
    }else{
       var script = document.createElement("script");
       script.setAttribute("src",url);
       script.setAttribute("type","text/javascript");
       document.body.appendChild(script);
       }
    }

// ******************************************
// SIGNIN / SIGNOUT
function webx_login_callback(webx_signin){
//    alert("In Ajax callback: resultCode="+webx_signin.dto.resultCode+"; resultMessage="+webx_signin.dto.resultMessage);
    if (webx_signin.dto.resultCode == '0'){
       // login succeeded; reload the page
       window.location.reload(); 
       }
    // login failed; re-render
    document.getElementById("webx-portal").innerHTML = jsonT(webx_signin, webx_signin_rules);
    }

if (spaces_page == false){
   // signin framework
   webx_signin_framework_rules =
      {"dto" : '<h2>{$.labels.WEBEX_FRAMEWORK_SUBPAGE_SIGNIN_TITLE}</h2>\n' };

   // signin
   webx_signin_rules =
      {"dto" : '<div id="webx-sio-action" class="webx-sio">\n'
             + '   <h5>{$.labels.WEBEX_SIGNIN_MAIN_BOX_TITLE}</h5>'
             + '   <div class="webx-sio-content">'
// AJAX             + '<form action="#" onsubmit="webx_jsonp_submit(this,\'{$.nextActionUrl}\');return false">'
             + '     <form action="{$.nextActionUrl}" method="POST">'
             + '     <div {$.resultCode}>'
             + '        <div><strong>Error</strong> {$.resultMessage}</div>'
             + '     </div>'
             + '     <label for "userName">{$.labels.WEBEX_SIGNIN_EMAIL_FIELD_TITLE}</label><br />'
             + '     <input type="text" id="userName" name="userName" maxlength="256" /><br />'
             + '     <div class="webx-sio-password">'
             + '        <label for="password">{$.labels.WEBEX_SIGNIN_PASSWORD_FIELD_TITLE}</label><br />'
              + '        <input type="password" id="password" name="password" maxlength="256"><br />'
              + '        <a href="{$.labels.WEBEX_SIGNIN_LOST_PASSWORD_URL}">{$.labels.WEBEX_SIGNIN_LOST_PASSWORD_TEXT}</a>'
             + '     </div>'
             + '     <input id="signin" class="button" type="submit" value="{$.labels.WEBEX_SIGNIN_BUTTON_TEXT}" />'
             + '     <input type="hidden" name="component" value="{$.component}" />'
             + '     <input type="hidden" name="cmd" value="login" />'
//             + '<input type="hidden" name="callBackFunction" value="webx_login_callback" />'
             + '     </form>'
             + '   </div>'
             + '</div>\n'
             + '<div id="webx-sio-secondary" class="webx-sio">'
             + '   <h5>{$.labels.WEBEX_SIGNIN_SECONDARY_BOX_TITLE}</h5>'
             + '   <div class="webx-sio-content">'
             + '      {$.labels.WEBEX_SIGNIN_SECONDARY_BOX_HTML}'
             + '   </div>'
             + '</div>',
      "dto.resultCode" : function(x){
                            return (x=="0"?'style="display:none"':"");
                            }
      };
   

   // signout framework
   webx_signout_framework_rules =
      {"dto" : '<h2>{$.labels.WEBEX_FRAMEWORK_SUBPAGE_SIGNOUT_TITLE}</h2>\n'
      };

   // signout
   webx_signout_rules =
      {"dto" : '<div id="webx-sio-action" class="webx-sio">\n'
             + '     <h5>{$.labels.WEBEX_SIGNOUT_MAIN_BOX_TITLE}</h5>'
             + '     <div class="webx-sio-content">'
             + '        {$.labels.WEBEX_SIGNOUT_RETURN_SENTENCE_PREFIX} <a href="{$.labels.WEBEX_SIGNOUT_RETURN_SENTENCE_URL}">'
             + '        {$.labels.WEBEX_SIGNOUT_RETURN_SENTENCE_LINK}</a> {$.labels.WEBEX_SIGNOUT_RETURN_SENTENCE_SUFFIX}\n'
             + '        <p>{$.labels.WEBEX_SIGNOUT_SIGNIN_SENTENCE_PREFIX} <a href="{$.labels.WEBEX_SIGNOUT_SIGNIN_SENTENCE_URL}">'
             + '        {$.labels.WEBEX_SIGNOUT_SIGNIN_SENTENCE_LINK}</a> {$.labels.WEBEX_SIGNOUT_SIGNIN_SENTENCE_SUFFIX}</p>\n'
             + '     </div>\n'
             + '</div>\n' 
             + '<div id="webx-sio-secondary" class="webx-sio">'
             + '   <h5>{$.labels.WEBEX_SIGNOUT_SECONDARY_BOX_TITLE}</h5>'
             + '   <div class="webx-sio-content">'
             + '      {$.labels.WEBEX_SIGNOUT_SECONDARY_BOX_HTML}'
             + '   </div>'
             + '</div>'
      };

    } //endif spaces is false
    
webx_sio_collab_rules = 
   {"dto" : '<div id="webx-header">'
          + '</div>'
          + '<div id="webx-portal">'
          + '</div>'
   };

if (spaces_page){
   webx_spaces_framework_rules =
      {"dto" : '<div id="signout">{$.labels.WEBEX_FRAMEWORK_SIGNOUT_SENTENCE_PREFIX} <a href="{$.labels.WEBEX_FRAMEWORK_SIGNOUT_SENTENCE_URL}">'
                + '{$.labels.WEBEX_FRAMEWORK_SIGNOUT_SENTENCE_LINK}</a> {$.labels.WEBEX_FRAMEWORK_SIGNOUT_SENTENCE_SUFFIX}</div>\n'
                + '<h2>{$.labels.WEBEX_FRAMEWORK_SUBPAGE_SPACE_TITLE}</h2>\n'
      };
//alert("defining webx_collab_rules");
   webx_collab_rules = 
      {"self" : '<div id="webx-header">'
       + '</div>'
       + ' <div id="webx-spaces">'
       + ' </div>'
       + '<div id="webx-portal" class="webx-portal-collab">'
       + ' <div id="webx-titles">'
       + '     <h3>{$.displayText}&nbsp;</h3>'
       + '     <h4>{$.descriptionText}&nbsp;</h4>'
       + ' </div>'
       + ' <div id="webx-nav">'
       + '   <ul>'
       /*
       + '     <li id="webx-nav-one"><a href="javascript:void(0);" onclick="show_quitspace_dialog({$.idx});return false;" id="webx-quitspace">Quit Space</a></li>'
       + '     <li id="webx-nav-two"><a href="javascript:void(0);" id="webx-managespace">Manage Space <img class="webx-arrow" src="/web/fw/i/arrow-down.gif"></a>'          
       */
       +'      {$.roleActions}'
       + '          <div id="webx-managespace-wrapper">'
       + '          <div id="webx-managespace-bgleft"></div><div id="webx-managespace-bgright"></div>'
       + '          <div id="webx-managespace-container">'
       + '              <ul id="webx-managespace-menu">'
//       + '              <li><a href="javascript:void(0);" onclick="jQuery(\'#webx-dialog-nospace\').jqm({toTop:true}).jqmShow();" id="webx-managespace-drop">'+webx.spaces.dto.labels.WEBEX_SPACES_MANAGE_SPACE_LINK_TEXT+' <img class="webx-arrow" src="/web/fw/i/arrow-down.gif"></a></li>'
       + '              <li><a href="javascript:void(0);" id="webx-managespace-drop">'+webx.spaces.dto.labels.WEBEX_SPACES_MANAGE_SPACE_LINK_TEXT+' <img class="webx-arrow" src="/web/fw/i/arro	w-down.gif"></a></li>'
       + '              <li><a href="javascript:void(0);" onclick="show_editspace_dialog({$.idx});return false;">'+webx.spaces.dto.labels.WEBEX_SPACES_EDIT_SPACE_LINK_TEXT+'</a></li>'
       + '              <li><a href="javascript:void(0);" onclick="show_deletespace_dialog({$.idx});return false;">'+webx.spaces.dto.labels.WEBEX_SPACES_DELETE_SPACE_LINK_TEXT+'</a></li>'
       + '              </ul>'
       + '          </div>'
       + '      </li>'
       + '    </ul>'
       + ' </div>'
       + ' <div id="webx-main">'
       + ' <div id="webx-files">'
       + ' </div>'
       + ' <div id="webx-members">'
       + ' </div>'
       + ' </div>'
       + '</div>',
      "self.roleActions[*]" : 
            function(x){
               var _quit = '<li id="webx-nav-one"><a href="javascript:void(0);" onclick="show_quitspace_dialog();return false;" id="webx-quitspace">'+webx.spaces.dto.labels.WEBEX_SPACES_QUIT_SPACE_LINK_TEXT+'</a></li>';
               var _manage = '<li id="webx-nav-two"><a href="javascript:void(0);" id="webx-managespace">'+webx.spaces.dto.labels.WEBEX_SPACES_MANAGE_SPACE_LINK_TEXT+' <img class="webx-arrow" src="/web/fw/i/arrow-down.gif"></a>';
               if (x.toLowerCase()=="quit") return _quit;
               if (x.toLowerCase()=="manage") return _manage;
               if (x.toLowerCase()=="quit,manage") return _quit+_manage;
               return "";
               }
   };
   
} //endif spaces page

if (spaces_page == true){

   // **********************************************************
   // COMPONENT RULES
   
   
   webx_nospaces_framework_rules =
        {"dto" : '<h2>{$.labels.WEBEX_FRAMEWORK_SUBPAGE_NO_SPACE_TITLE}</h2>\n'
      	};
   
   webx_nospaces_rules = 
   {"dto" :       '<div id="webx-sio-action" class="webx-sio">\n'
                + '   <h5>{$.labels.WEBEX_SPACES_NOSPACE_MAIN_BOX_TITLE}</h5>\n'
                + '   <div class="webx-sio-content">\n'
                + '      {$.labels.WEBEX_SPACES_NOSPACE_MAIN_BOX_HTML}\n'
             	+ '<input type="button" class="button" value="{$.labels.WEBEX_SPACES_NOSPACE_MAIN_BOX_BUTTON_TEXT}" onclick="show_newspace_dialog();return false;" />' 
 		+ '   </div>\n'
                + '</div>\n'
                + '<div id="webx-sio-secondary" class="webx-sio">\n'
		+ '<h5>{$.labels.WEBEX_SPACES_SECONDARY_BOX_TITLE}</h5>\n'
		+ '	<div class="webx-sio-content">\n'
 		+ '	{$.labels.WEBEX_SPACES_SIGNOUT_SENTENCE_PREFIX} <a href="'+webx.framework.dto.labels.WEBEX_FRAMEWORK_SIGNOUT_SENTENCE_URL+'">{$.labels.WEBEX_SPACES_SIGNOUT_SENTENCE_LINK}</a> {$.labels.WEBEX_SPACES_SIGNOUT_SENTENCE_SUFFIX}.\n'
                + '      <p>{$.labels.WEBEX_SPACES_SECONDARY_BOX_HTML}</p>\n'
		+ '	</div>\n'
                + '</div>'
      };
   
      // accept/decline
      webx_accept_rules =
      	{"self" : '<div id="webx-invite">\n'
       		+ '<p class="webx-dialog-action">{$.ownerEmail} ' + webx.spaces.dto.labels.WEBEX_SPACES_OWNER_SENTENCE_SUFFIX + '</p>\n'
   	        + '<p>' + webx.spaces.dto.labels.WEBEX_SPACES_INVITATION_TEXT + '</p>\n'
   	        + '<form>\n'
   	        + '<input type="button" value="' + webx.spaces.dto.labels.WEBEX_SPACES_ACCEPT_BUTTON_TEXT + '" class="button" default="default" onclick="webx_acceptspace({$.idx});" /><input type="button" value="' + webx.spaces.dto.labels.WEBEX_SPACES_REJECT_BUTTON_TEXT + '" class="button webx-button-cancel jqmClose" onclick="webx_declinespace({$.idx}); return false;" />\n'
   	        + '</form>\n</div>'
   	};
   	
      webx_accept_fail_rules =
        {"dto" : '<div id="webx-invite">\n'
      		+ '<p>{$.resultMessage}</p>\n'
      		+ '</div>'
        };
   	
      webx_decline_fail_rules =
	{"dto" : '<div id="webx-invite">\n'
	      		+ '<p>{$.resultMessage}</p>\n'
	      		+ '</div>'
        };   
        
   // spaces
   webx_spaces_rules =
      {"dto" : '<h5>{$.labels.WEBEX_SPACES_TITLE}</h5>\n'
             + '<ul class="webx-listitem">\n{$.dataArray}</ul>\n' 
             + '<div class="buttonbar">' 
             + '<input type="button" class="button" value="'+webx.spaces.dto.labels.WEBEX_SPACES_BUTTON_TEXT+'" onclick="show_newspace_dialog();return false;" />' 
             + '</div>\n',
       "dto.dataArray[*]" : '<li class="{$.selectedFlag}{$.invitedFlag}workspaceId={$.keyId}" id="webx-space-{#}">{$.displayText}</a></li>',    
       "dto.dataArray[*].selectedFlag" : 
                 function(x){
                 return (x==1)?'webx-active':'';},
       "dto.dataArray[*].displayText":
            function(x){
               var len = 24;
               if (x.length > len) {
                  var x = x.substring(0, len);
                  x = x + '...';
               }
               return x;
            },
       "dto.dataArray[*].invitedFlag" : 
              function(x){
              	var s = "";
		if (x==1) {
	              	s = ' webx-invited"><a href="'+webx.spaces.dto.labels.WEBEX_SPACES_PAGE_URL+'?ivt=1&';
		}
		else {
	              	s = '"><a href="'+webx.spaces.dto.labels.WEBEX_SPACES_PAGE_URL+'?';
		}
              	return s; }
      };

   if (accepted_space) {
   // files
   webx_files_rules =
      {"dto" : '<h5>{$.labels.WEBEX_FILES_TITLE}</h5><div class="webx-component">\n<table class="webx-th" '
             + 'datatable="1" summary="Files header table. The Files for this space are displayed across two tables.  This first table contains the five column headers which are file type, name, added by, date added, and size. All except file type can be clicked to re-sort the data.  The second table contains the data.">\n'
             + '<tbody><tr><th class="webx-th_a">{$.labels.WEBEX_FILES_TABLE_TYPE}</th>'
             + '<th class="webx-th_b">{$.title_header}</th>'
             + '<th class="webx-th_c">{$.added_by_header}</th>'
             + '<th class="webx-th_d">{$.date_header}</th>'
             + '<th class="webx-th_e">{$.size_header}</th>'
             + '</tr></tbody></table>\n<div class="webx-tablescroll">\n'
             + '<table datatable="1" summary="Files data table.  The columns are file type, name, added by, date added, and size."><tbody>{$.dataArray}</tbody></table>\n</div>\n'
             + '<div class="buttonbar">'
             + '<input type="button" id="webx-addfile-button" class="button" value="{$.labels.WEBEX_FILES_BUTTON_TEXT}" onclick="show_addfile_dialog();return false" />'
             + '<span id="webx-addfile-status-msg"><span id="webx-addfile-status-filename">'
             + webx.files.dto.labels.WEBEX_FILES_WARNING_ADDING_FILE
             + '</span></span>'
             + ''
             + '</div></div>', 
       "dto.dataArray[*]" : '<tr{$.firstRow}><td class="webx-td_a">{$.fileType}</td>'
             + '<td class="webx-td_b"><a id="webx-file-{#}" href="{$.fileUrl}">{$.fileText}</a></td>'
             + '<td class="webx-td_c">{$.addedByEmail}</td><td class="webx-td_d">{$.fileUploaded}</td>'
             + '<td class="webx-td_e">{$.fileSize}</td></tr>',
       "dto.title_header" : function(x){
                 s = '<a href="javascript:void(0)" onclick="return webx_filessort('
                   + '\'title\',webx.files.dto.sortedOrder)">'
                   + webx.flab.WEBEX_FILES_TABLE_TITLE;
                 if (webx.files.dto.sortedBy == "title"){
                   s += ' <img src="/web/fw/i/';
                   if (webx.files.dto.sortedOrder == "ascending"){
                     s += 'arrow-up.gif';
                   }else{
                     s += 'arrow-down.gif';
                     }
                   s += '">';
                   }
                 s += '</a>';
                 return s;
                 },
       "dto.added_by_header" : function(x){
                 s = '<a href="javascript:void(0)" onclick="return webx_filessort('
                   + '\'email\',webx.files.dto.sortedOrder)">'
                   + webx.flab.WEBEX_FILES_TABLE_ADDED_BY;
                 if (webx.files.dto.sortedBy == "email"){
                   s += ' <img src="/web/fw/i/';
                   if (webx.files.dto.sortedOrder == "ascending"){
                     s += 'arrow-up.gif';
                   }else{
                     s += 'arrow-down.gif';
                     }
                   s += '">';
                   }
                 s += '</a>';
                 return s;
                 },
       "dto.date_header" : function(x){
                 s = '<a href="javascript:void(0)" onclick="return webx_filessort('
                   + '\'date\',webx.files.dto.sortedOrder)">'
                   + webx.flab.WEBEX_FILES_TABLE_DATE;
                 if (webx.files.dto.sortedBy == "date"){
                   s += ' <img src="/web/fw/i/';
                   if (webx.files.dto.sortedOrder == "ascending"){
                     s += 'arrow-up.gif';
                   }else{
                     s += 'arrow-down.gif';
                     }
                   s += '">';
                   }
                 s += '</a>';
                 return s;
                 },
       "dto.size_header" : function(x){
                 s = '<a href="javascript:void(0)" onclick="return webx_filessort('
                   + '\'size\',webx.files.dto.sortedOrder)">'
                   + webx.flab.WEBEX_FILES_TABLE_SIZE;
                 if (webx.files.dto.sortedBy == "size"){
                   s += ' <img src="/web/fw/i/';
                   if (webx.files.dto.sortedOrder == "ascending"){
                     s += 'arrow-up.gif';
                   }else{
                     s += 'arrow-down.gif';
                     }
                   s += '">';
                   }
                 s += '</a>';
                 return s;
                 },
       "dto.dataArray[*].firstRow" : 
              function(x){
                 return (x==1)?" class='webx-tr_a'":"";},
       "dto.dataArray[*].fileText":
            function(x){
               var len = 32;
               var y = x.length;
               if (y-3 > len) {
                  var z = x.substring(y-3, y+1);
                  var x = x.substring(0, len);
                  x = x + '...' + z;
               }
               return x;
            },
       "dto.dataArray[*].fileType" :
              function(x){
                 if (typeof(webx_fileType) == 'function'){
                     return webx_fileType(x,webx.flab)
                 }else{
                     return x;
                     }
                 },
       "dto.dataArray[*].fileUploaded" :
              function(x){
                 if (typeof(webx_fileUploaded) == 'function'){
                     return webx_fileUploaded(x)
                 }else{
                     return x;
                     }
                 },
       "dto.dataArray[*].fileSize" :
              function(x){
                 if (typeof(webx_fileSize) == 'function'){
                     return webx_fileSize(x)
                 }else{
                     return x;
                     }
                 }
      };

   // members
   webx_members_rules =
      {"dto" : '<h5>{$.labels.WEBEX_MEMBERS_TITLE}</h5>'
             + '<div class="webx-component">\n'
             + '<table class="webx-th" '
             + 'datatable="1" summary="Members header table. The members for this space are displayed across two tables.  This first table contains the two column headers which are member email address and member role.  Either header can be clicked to re-sort the data.  The second table contains the data.">'
             + '<tbody><tr>'
             + '<th class="webx-th_a">{$.email_header}</th>'
             + '<th class="webx-th_b">{$.role_header}</th>'
             + '</tr></tbody></table>'
             + '<div class="webx-tablescroll">'
             + '<table datatable="1" summary="Members data table.  The two columns are member email address and member role.">\n'
             + '<tbody>{$.dataArray}</tbody></table></div>'
             + '<div class="buttonbar">' 
             + '<input type="button" {$.isMember} value="{$.labels.WEBEX_MEMBERS_BUTTON_TEXT}" onclick="show_invitemembers_dialog();return false" />' 
             + '</div>\n</div>',
       "dto.isMember" :
               function(x){
                  return (x==1)?"class='button button-disabled' disabled='disabled'":"class='button'";},
       "dto.dataArray[*]" : '<tr{$.firstRow}><td class="webx-td_a"><a id="webx-member-{#}" href="mailto:{$.memberEmail}">{$.memberEmail}'
             + '</a></td><td class="webx-td_b">{$.memberRole}</td></tr>',
       "dto.email_header" : function(x){
                 s = '<a href="javascript:void(0)" onclick="return webx_memberssort('
                   + '\'email\',webx.members.dto.sortedOrder)">'
                   + webx.mlab.WEBEX_MEMBERS_TABLE_EMAIL;
                 if (webx.members.dto.sortedBy == "email"){
                   s += ' <img src="/web/fw/i/';
                   if (webx.members.dto.sortedOrder == "ascending"){
                     s += 'arrow-up.gif';
                   }else{
                     s += 'arrow-down.gif';
                     }
                   s += '">';
                   }
                 s += '</a>';
                 return s;
                 },
       "dto.role_header" : function(x){
                 s = '<a href="javascript:void(0)" onclick="return webx_memberssort('
                   + '\'role\',webx.members.dto.sortedOrder)">'
                   + webx.mlab.WEBEX_MEMBERS_TABLE_ROLE;
                 if (webx.members.dto.sortedBy == "role"){
                   s += ' <img src="/web/fw/i/';
                   if (webx.members.dto.sortedOrder == "ascending"){
                     s += 'arrow-up.gif';
                   }else{
                     s += 'arrow-down.gif';
                     }
                   s += '">';
                   }
                 s += '</a>';
                 return s;
                 },
       "dto.dataArray[*].firstRow" : 
              function(x){
                 return (x==1)?" class='webx-tr_a'":"";}
      };

   } //endif accepted_space

   // **********************************************************
   // HOVER RULES
   webx_space_hover_rules =
       {"self" : '<div id="hoverWrapper" class="webx-hover" style="top:'+this.pageY+';left:'+this.pageX+';">'
            +     '<div class="webx-hover-arrow"></div>'
            +     '<div id="leftHalf" class="arrow"></div><div id="rightHalf"></div>'
            +     '<div id="menuContainer">'
            +         '<div class="webx-hover-msg">'
            +             '<span class="webx-hover-title">{$.displayText}</span>'
            +'<div style="width:auto"><nobr>'  // fix for Arabic
            +             '{$.invitedFlag} {$.ownerEmail}'
            +'</nobr></div>'
            +         '</div>'
            +    '</div>'
            + '</div>',
         "self.displayText":
            function(x){
               /*var len = 32;
               if (x.length > len) {
                  var x = x.substring(0, len);
                  x = x + '...';
               }*/
               return x;
            },
         "self.invitedFlag" : 
              function(x){
                 return (x==1) ? webx.spaces.dto.labels.WEBEX_SPACES_INVITED_TEXT : webx.spaces.dto.labels.WEBEX_SPACES_OWNER_TEXT;
                 } 
      };

   
   if (accepted_space) {
   webx_file_hover_rules = 
       {"self" : '<div id="hoverWrapper" class="webx-hover" style="font-size:120%;top:'+this.pageY+';left:'+this.pageX+';">'
            +     '<div class="webx-hover-arrow"></div>'
            +     '<div id="leftHalf" class="arrow"></div><div id="rightHalf"></div>'
            +     '<div id="menuContainer">'
            +         '<div class="webx-hover-msg webx-hover-nav-row">'
            +             '<span class="webx-hover-title">{$.fileText}</span><br/>'
            +             '<a href="{$.fileUrl}" style="display:inline">'+webx.files.dto.labels.WEBEX_FILES_DOWNLOAD_LINK_TEXT+'</a> '
            +             ' | <a href="javascript:void(0);" style="display:inline" onclick="show_deletefile_dialog({$.idx});return false">'+webx.files.dto.labels.WEBEX_FILES_DELETE_LINK_TEXT+'</a>'
            +         '</div>'
            +     '</div>'
            + '</div>',
         "self.fileText":
            function(x){
               /*var len = 32;
               var y = x.length;
               if (y > len) {
                  var z = x.substring(y-3, y+1);
                  var x = x.substring(0, len);
                  x = x + '...' + z;
               }*/
               return x;
            }
      };

   webx_member_hover_rules =
      {"self" : '<div id="hoverWrapper" class="webx-hover" style="font-size:120%;top:'+this.pageY+';left:'+this.pageX+';">'
//      {"self" : '<div id="hoverWrapper" class="webx-hover" style="{$.isOwner}top:'+this.pageY+';left:'+this.pageX+';">'
            +     '<div class="webx-hover-arrow"></div>'
            +     '<div id="leftHalf" class="arrow"></div><div id="rightHalf"></div>'
            +     '<div id="menuContainer">'
            +         '<div class="webx-hover-msg webx-hover-nav-col">'
            +             '<span class="webx-hover-title">{$.memberEmail}</span><br/>'
            +             '<a style="{$.inviteeFlag}" href="javascript:void(0);" onclick="show_resendinvite_dialog({$.idx});return false">'+webx.members.dto.labels.WEBEX_MEMBERS_RESEND_INVITE_LINK_TEXT+'</a>'
            +             '<a style="{$.isEdit} {$.isOwner}" href="javascript:void(0);" onclick="show_editmember_dialog({$.idx});return false">'+webx.members.dto.labels.WEBEX_MEMBERS_CHANGE_ROLE_LINK_TEXT+'</a>'
//            +             '<a style="{$.isEdit}" href="javascript:void(0);" onclick="show_editmember_dialog({$.idx});return false">'+webx.members.dto.labels.WEBEX_MEMBERS_CHANGE_ROLE_LINK_TEXT+'</a>'
            +             '<a style="{$.isOwner}" href="javascript:void(0);" onclick="show_removemember_dialog({$.idx});return false">'+webx.members.dto.labels.WEBEX_MEMBERS_REMOVE_MEMBER_LINK_TEXT+'</a>'
//            +             '<a href="javascript:void(0);" onclick="show_removemember_dialog({$.idx});return false">'+webx.members.dto.labels.WEBEX_MEMBERS_REMOVE_MEMBER_LINK_TEXT+'</a>'
            +         '</div>'
            +     '</div>'
            + '</div>',
         "self.inviteeFlag" : 
            function(x){
               return (x==1)?'':'display:none; ';},
         "self.isEdit" : 
            function(x){
               return (x==1)?'display:none; ':'';},
         "self.isOwner" : 
            function(x){
                // Switch to resource bundle value
               return (x.toLowerCase()=="owner")?'display:none; ':'';}
      };
   } //endif accept_space
   } //endif spaces_page 




// *********************************************************
// AJAX(JSONP) FRAMEWORK
/*   For each dialog, there are the following
        - a routine to display the dialog (e.g., show_deletefile_dialog())
        - a routine to execute the operation (spawn the JSONP request/submit) (e.g., webx_deletefile())
        - a routine (the callback) to process the response (e.g., webx_deletefile_callback())
        - a jsonT transformation ruleset to render the dialog (e.g., webx_dialog_deletefile_rules)

     The exceptions are
     	- adding a file, which has to be done using special routines for displaying progress and completion.
	- accepting or declining an invitation, which is not triggered by a dialog.
*/

// **********************************************************
// ACCEPTING A SPACE
function webx_acceptspace(idx){
	var url = webx.spaces.dto.nextActionUrl;
      url += (url.indexOf("?")>=0)?"&":"?";
	url += "cmd=accept&component=webexSpaces&keyId=";
	url += webx.spaces.dto.dataArray[idx].keyId;
	url += "&callBackFunction=webx_acceptspace_callback";
     	webx_jsonp_request(url);
}

function webx_acceptspace_callback(response){
   
   if (response.dto.resultCode == "0"){
	var i = findSelectedSpace(webx.spaces.dto.dataArray);
	var newurl = response.dto.labels.WEBEX_SPACES_PAGE_URL + "?workspaceId=";
	newurl += webx.spaces.dto.dataArray[i].keyId;
	location.href = newurl;
   }
   else {
//   	alert("Accept Space Failed");
        document.getElementById("webx-main").innerHTML = jsonT(webx.spaces, webx_accept_fail_rules);
   }
}

// DECLINING A SPACE
function webx_declinespace(idx) {
	var url = webx.spaces.dto.nextActionUrl;
      url += (url.indexOf("?")>=0)?"&":"?";
	url += "cmd=decline&component=webexSpaces&keyId=";
	url += webx.spaces.dto.dataArray[idx].keyId;
	url += "&callBackFunction=webx_declinespace_callback";
     	webx_jsonp_request(url);
}

function webx_declinespace_callback(response){
   
   if (response.dto.resultCode == "0"){
	var newurl = response.dto.labels.WEBEX_SPACES_PAGE_URL;
	location.href = newurl;
   }
   else {
//   	alert("Decline Space Failed");
        document.getElementById("webx-main").innerHTML = jsonT(webx.spaces, webx_decline_fail_rules);
   }
}

// RESENDINVITEFNS
function show_resendinvite_dialog(idx){   
   webx.member_idx = idx;
   document.getElementById("webx-dialog-resendinvite").innerHTML
     = jsonT(webx.members, webx_dialog_resendinvite_rules);
   document.getElementById("webx-resendinvite-email").innerHTML = webx.members.dto.dataArray[idx].memberEmail;
   document.resendinvite_form.email_0.value = webx.members.dto.dataArray[idx].memberEmail;
   webx_restore_fields(webx.members,"webx-dialog-resendinvite");

   if(jQuery.browser.msie && parseInt(jQuery.browser.version)<7){  }
   else {
   // CK: Added for Modal Positioning
   jQuery(".cdc-fw").find(".jqmWindow").css('top',pos_modal()); // changed from #libra
      }
   jQuery('#webx-dialog-resendinvite').jqm({toTop:true}).jqmShow();
   webx_set_roleinfo_hovers('#webx-dialog-resendinvite');
   }

function webx_resendinvite(f){
     webx_jsonp_submit(f, f.action);
     }

function webx_resendinvite_callback(response){
//    alert(" in callback with: "+response.dto.component + " with " +response.dto.dataArray.length+ " members");

    webx.members = response;
    jQuery("#webx-dialog-resendinvite").jqmHide();
    if (response.dto.resultCode == "0"){
       setFirstRow(webx.members);
       displayInvitee();
       document.getElementById("webx-members").innerHTML = jsonT(webx.members, webx_members_rules);
       fillTable("webx-members",6);
       webx_set_members_hovers()
       }
    else {
   // determine which space we're in
   
       // redisplay the dialog, showing error messages
   show_resendinvite_dialog(webx.member_idx);
       }
    };

if (spaces_page == true && accepted_space){
   webx_dialog_resendinvite_rules =
     {"dto" : '<div id="modalWrapper">'
        +'<div id="leftHalf"></div><div id="rightHalf"></div>'
        +'<div id="menuContainer">'
        +'    <div class="webx-dialog-header">'
        +'        <h5>{$.labels.WEBEX_MEMBERS_RESEND_INVITE_TITLE}</h5>'
        +'    </div>'
        +'    <div class="webx-dialog-error" {$.resultCode}>'
        +'        <div><strong>{$.labels.WEBEX_MEMBERS_ERROR_PREFIX}</strong> {$.resultMessage}</div>'
        +'    </div>'
        +'    <form action="{$.nextActionUrl}" onsubmit="webx_resendinvite(this);return false" method="POST" name="resendinvite_form"><div class="webx-dialog-text">'
        +'        <div class="clearfix">'
        +'            <div id="webx-dialog-email" class="webx-dialog-form-noedit">'
        +'                <strong>'+webx.members.dto.labels.WEBEX_MEMBERS_EMAIL_FIELD_TITLE+'</strong><br/>'
        +'                <span id="webx-resendinvite-email"></span>'
        +'            </div>'
        +'            <div id="webx-dialog-role" class="webx-dialog-form-select">'
        +'            <table cellpadding="0">'
        +'                <tr><th class="webx-dialog-info"><label for="form-changerole">'+webx.members.dto.labels.WEBEX_MEMBERS_ROLE_FIELD_TITLE+'</label></th><th class="webx-dialog-roleinfo"><img src="/web/fw/i/icon-info.gif" alt="(i)"/></th></tr>'
        +'                <tr><td colspan="2"><select name="role_0" id="form-changerole"><option value="2">'
        + webx.members.dto.labels.WEBEX_MEMBERS_ROLE_VALUE_ARRAY[1]
  //      + 'Member'
        +'</option><option value="1">'
        + webx.members.dto.labels.WEBEX_MEMBERS_ROLE_VALUE_ARRAY[0]
  //      + 'Admin'
        +'</option></select></td></tr>'
        +'            </table>'
        +'            </div>'
        +'        </div>'
        +'        <div id="webx-dialog-invitemessage" class="webx-dialog-form-text">'
        +'            <label for="form-message"{$.form_message_error_class}>'+webx.members.dto.labels.WEBEX_MEMBERS_INVITE_MESSAGE_FIELD_TITLE+'</label>'
        +'            <textarea name="inviteText" id="form-message" type="text" cols="49" value="">'+webx.members.dto.labels.WEBEX_MEMBERS_INVITE_MESSAGE_EXAMPLE+'</textarea><br/>'
        +'{$.form_message_error}'
        +'        </div>'
        +        webx.members.dto.labels.WEBEX_MEMBERS_INVITE_MESSAGE_DESCRIPTION
        +'    </div>'
        +' <input type="hidden" name="cmd" value="add" />'
        +' <input type="hidden" name="component" value="webexMembers" />'
        +' <input type="hidden" name="email_0" value="" />'
        +' <input type="hidden" name="sortedBy" value="{$.sortedBy}" />'
        +' <input type="hidden" name="sortedOrder" value="{$.sortedOrder}" />'
        +' <input type="hidden" name="callBackFunction" value="webx_resendinvite_callback" />'
        +' <input type="hidden" name="workspaceId" value="{$.workspaceId}" />'
        +'    <div class="webx-dialog-buttonbar">'
        +'        <input type="submit" value="'+webx.members.dto.labels.WEBEX_MEMBERS_RESEND_INVITE_BUTTON_TEXT+'" class="button" default="default"/><input type="button" value="'+webx.members.dto.labels.WEBEX_MEMBERS_CANCEL_BUTTON_TEXT+'" class="button webx-button-cancel jqmClose" onclick="return webx_clear_error(webx.members)"/></form>'
        +'    </div>'
        +  '</div>'
        +'</div>',
"dto.resultCode" : function(x){
        return (x=="0")?'style="display:none"':"";
        },
"dto.form_message_error": function(x){
        return webx_form_error(webx.spaces,"inviteText", "div");
        },
"dto.form_message_error_class": function(x){
        return webx_form_error(webx.spaces,"inviteText", "newclass");
        }

    };
  }
  
// **********************************************************
// DELETEFILEFNS
function show_deletefile_dialog(idx){  
   // CK: Process Mimetype
   webx.files.dto.dataArray[idx].fileType = webx_fileType(webx.files.dto.dataArray[idx].fileType, webx.flab);
   
   document.getElementById("webx-dialog-deletefile").innerHTML
     = jsonT(webx.files.dto.dataArray[idx], webx_dialog_deletefile_rules);
//   alert(document.getElementById("webx-dialog-deletefile").innerHTML);

   // CK: Added for Modal Positioning
   if(jQuery.browser.msie && parseInt(jQuery.browser.version)<7){  }
   else {
   // CK: Added for Modal Positioning
   jQuery(".cdc-fw").find(".jqmWindow").css('top',pos_modal()); // changed from #libra
      }
   jQuery('#webx-dialog-deletefile').jqm({toTop:true}).jqmShow();
   }

function webx_deletefile(idx){
     var url = webx.files.dto.nextActionUrl;
// alert("nextActionUrl:"+url);
     url += (url.indexOf("?")>=0)?"&":"?";
     url += "cmd=delete&component=webexFiles&keyId=";
     url += webx.files.dto.dataArray[idx].keyId;
     url += "&workspaceId=" + webx.files.dto.workspaceId;
     url += "&sortedBy=" + webx.files.dto.sortedBy;
     url += "&sortedOrder=" + webx.files.dto.sortedOrder;
     url += "&callBackFunction=webx_deletefile_callback";
     webx_jsonp_request(url);
     }

function webx_deletefile_callback(response){
//    alert(" in Delete File callback with: "+response.dto.component + " with " +response.dto.dataArray.length+ " files");
    jQuery("#webx-dialog-deletefile").jqmHide();

    webx.files = response;
    setFirstRow(webx.files);
    document.getElementById("webx-files").innerHTML = jsonT(webx.files, webx_files_rules);
    fillTable("webx-files",6);
    jQuery('#webx-files th').find('img').parent().parent().addClass('webx-sortedby');
    webx_set_files_hovers();
    };

if (spaces_page == true && accepted_space){
   webx_dialog_deletefile_rules = 
     {"self" : '<div id="modalWrapper">'
        +'<div id="leftHalf"></div><div id="rightHalf"></div>'
        +'<div id="menuContainer">'
        +'    <div class="webx-dialog-header">'
        +'        <h5>'+webx.files.dto.labels.WEBEX_FILES_DELETE_TITLE+'</h5>'
        +'    </div>'
        +'    <div class="webx-dialog-warning">'
        +'       <div><strong>'+webx.files.dto.labels.WEBEX_FILES_WARNING_TEXT+'</strong> '+webx.files.dto.labels.WEBEX_FILES_DELETE_WARNING_TEXT+'</div>'
        +'    </div>'
        +'    <div class="webx-dialog-text">'
        +'        <div class="webx-dialog-file">'
        +'            {$.fileType}<div>{$.fileText}</div>'
        +'       </div>'
        +'        <span class="webx-dialog-action">'+webx.files.dto.labels.WEBEX_FILES_DELETE_HTML_ACTION+'</span>'
        +'    </div>'
        +'    <div class="webx-dialog-buttonbar">'
        +'        <input type="button" value="'+webx.files.dto.labels.WEBEX_FILES_DELETE_BUTTON_TEXT+'" class="button" default="default" onclick="webx_deletefile({$.idx})" /><input type="button" value="'+webx.files.dto.labels.WEBEX_FILES_CANCEL_BUTTON_TEXT+'" class="button webx-button-cancel jqmClose" onclick="return webx_clear_error(webx.files)" /> '
        +'    </div>'
        +'</div>'
        +'</div>',
     "self.fileText":
            function(x){
               var len = 40;
               var y = x.length;
               if (y-3 > len) {
                  var z = x.substring(y-3, y+1);
                  var x = x.substring(0, len);
                  x = x + '...' + z;
               }
               return x;
            }
        };
   };

// *******************************************************
// ADDFILEFNS
function show_addfile_dialog(){   
   document.getElementById("webx-dialog-addfile").innerHTML
     = jsonT(webx.files.dto, webx_dialog_addfile_rules);

   if(jQuery.browser.msie && parseInt(jQuery.browser.version)<7){  }
   else {
   // CK: Added for Modal Positioning
   jQuery(".cdc-fw").find(".jqmWindow").css('top',pos_modal()); // changed from #libra
      }
   jQuery('#webx-dialog-addfile').jqm({toTop:true}).jqmShow();
   }

function webx_addfile_start_callback() {
   // make something useful before submit (onStart)
   webx.files.dto.addFileUrl = document.getElementById("addfile").file.value;
   filename = webx.files.dto.addFileUrl.substring(webx.files.dto.addFileUrl.lastIndexOf("\\") + 1);
   var found = false;
   var i = 0;
   while ((found == false) && (i < webx.files.dto.dataArray.length)){
     found = (filename == webx.files.dto.dataArray[i].fileText);
     i++;
     }
// found = false; // **************** does not handle replace (temp)
   if ((found == true) && (document.getElementById("addfile").replace.value == "false")) {
     // replacing file
     document.getElementById("webx-replacefile-msg").style.display = "block";
     document.getElementById("webx-addfile-submit").value = 
          webx.files.dto.labels.WEBEX_FILES_REPLACE_BUTTON_TEXT;
     document.getElementById("addfile").replace.value = "true";
     return false;
     
/* ------------------------------
     jQuery("#webx-dialog-addfile").jqmHide();

     // explicitly clear out the addfile dialog because we don't want two forms to exist,
     //  each with the id "addfile"
     document.getElementById("webx-dialog-addfile").innerHTML = "";

     webx_create_div("webx-dialog-replacefile", "webx-dialog webx-dialog-form jqmWindow");

      document.getElementById("webx-dialog-replacefile").innerHTML
         = jsonT(webx.files.dto.dataArray[--i], webx_dialog_replacefile_rules);

      // CK: Added for Modal Positioning
      jQuery("#fw-mb .jqmWindow").css('top',pos_modal()); // changed from #libra
      jQuery('#webx-dialog-replacefile').jqm({toTop:true}).jqmShow();
      return false;
--------------------------- */
     }
   else {
      document.getElementById('webx-addfile-status-msg').innerHTML = webx.flab.WEBEX_FILES_ADDING_TEXT+'<span id="webx-addfile-status-filename"></span>';
               var x = filename;
               var len = 40;
               var y = x.length;
               if (y-3 > len) {
                  var z = x.substring(y-3, y+1);
                  var x = x.substring(0, len);
                  x = x + '...' + z;
               }
               filename = x;
            
      document.getElementById('webx-addfile-status-filename').innerHTML = filename;
      document.getElementById('webx-addfile-button').disabled = true;
//   if (document.getElementById("addfile").replace.value == "false") {
      jQuery("#webx-dialog-addfile").jqmHide();
//      }
//   else {
//      jQuery("#webx-dialog-replacefile").jqmHide();
//      }    
      return true;
      }
   }

function webx_addfile_callback(response) {
   // make something useful after (onComplete)
   // alert(response);
//    alert(" in Add File callback with: "+response.dto.component + " with " +response.dto.dataArray.length+ " files; resultCode="+response.dto.resultCode);
// alert(" in Add File callback: iframe content = "+response);
    document.getElementById('webx-addfile-button').disabled = false;

    webx.files = response;
    setFirstRow(webx.files);
    document.getElementById("webx-files").innerHTML = jsonT(webx.files, webx_files_rules);
    fillTable("webx-files",6);
    jQuery('#webx-files th').find('img').parent().parent().addClass('webx-sortedby');
    webx_set_files_hovers();
    if (webx.files.dto.resultCode == "0"){
       document.getElementById('webx-addfile-status-msg').innerHTML = webx.flab.WEBEX_FILES_ADDED_TEXT +'<span id="webx-addfile-status-done">&nbsp;&nbsp;&nbsp;&nbsp;</span> <span id="webx-addfile-status-filename"></span>';
               var x = filename;
               var len = 40;
               var y = x.length;
               if (y-3 > len) {
                  var z = x.substring(y-3, y+1);
                  var x = x.substring(0, len);
                  x = x + '...' + z;
               }
               filename = x;
            
      document.getElementById('webx-addfile-status-filename').innerHTML = filename;
      }else{
        // Need to localize, "Not Added"
       document.getElementById('webx-addfile-status-msg').innerHTML = webx.flab.WEBEX_FILES_NOT_ADDED_TEXT + " "+ webx.files.dto.resultMessage;
       }
   }

function webx_reset_addfile_form(){
     document.getElementById("webx-replacefile-msg").style.display = "none";
     document.getElementById("webx-addfile-submit").value = webx.flab.WEBEX_FILES_BUTTON_TEXT;
     document.getElementById("addfile").replace.value = "false";
   }

if (spaces_page == true && accepted_space){
   webx_dialog_addfile_rules = 
     {"self": '<div id="modalWrapper">'
        +'<div id="leftHalf"></div><div id="rightHalf"></div>'
        +'<div id="menuContainer">'
        +'    <div class="webx-dialog-header">'
        +'        <h5>{$.labels.WEBEX_FILES_ADD_TITLE}</h5>'
        +'    </div>'
         + '<form id="addfile" action="{$.nextActionUrl}&cmd=add&component=webexFiles&sortedBy={$.sortedBy}&sortedOrder={$.sortedOrder}&workspaceId={$.workspaceId}&callBackFunction=webx_addfile_callback" method="post" enctype="multipart/form-data" '
//         + 'onsubmit="return AIM.submit(this, {\'onStart\' : webx_addfile_start_callback, \'onComplete\' : webx_addfile_callback})" />'
         + 'onsubmit="return AIM.submit(this, {\'onStart\' : webx_addfile_start_callback})" />'
        +'    <!--<div class="webx-dialog-warning">'
        +'        <div><strong>{$.labels.WEBEX_FILES_ERROR_PREFIX}</strong> You\'ve exceeded your available storage space for files.</div>'
        +'    </div>-->'
        +'    <div class="webx-dialog-text">'
        +'        <div id="webx-dialog-filename" class="webx-dialog-form-input">'
        +'            <label for="form-filename"{$.form_file_error_class}>{$.labels.WEBEX_FILES_FILE_FIELD_TITLE}</label>'
        +'            <input type="file" id="form-filename" name="file" size="48" onchange="webx_reset_addfile_form()" /><br/>'
        + '<div class="webx-dialog-form-error" id="webx-replacefile-msg" style="display:none">'
        +'<img src="/web/fw/i/glyph-alert-error.gif" /> '
        + '{$.labels.WEBEX_FILES_REPLACE_WARNING_TEXT}' 
        + '</div>'
        +' <input type="hidden" name="sortedBy" value="{$.sortedBy}" />'
        +' <input type="hidden" name="sortedOrder" value="{$.sortedOrder}" />'
        +'    <input type="hidden" name="replace" value="false" />'

        +'       </div>'
        +'    </div>'
        +'    <div class="webx-dialog-buttonbar">'
        +'        <input type="submit" id="webx-addfile-submit" value="{$.labels.WEBEX_FILES_BUTTON_TEXT}" class="button" default="default"/><input type="button" value="{$.labels.WEBEX_FILES_CANCEL_BUTTON_TEXT}" class="button webx-button-cancel jqmClose" onclick="return webx_clear_error(webx.files)" /></form>'
        +'    </div>'
        +'</div>'
    +'</div>',
"dto.form_file_error": function(x){
        return webx_form_error(webx.spaces,"file", "div");
        },
"dto.form_file_error_class": function(x){
        return webx_form_error(webx.spaces,"file", "newclass");
        }

     };
   }

function webx_create_div(divid, _class){
   if (!document.getElementById(divid)){
      var d = document.createElement("DIV");
      d.id = divid;
      d.className = _class;
      document.body.appendChild(d);
      }
   };

// **********************************************************
// INVITEMEMBERSFNS
function show_invitemembers_dialog(idx){
   webx_create_div("webx-dialog-invitemembers", "webx-dialog webx-dialog-form jqmWindow");
   document.getElementById("webx-dialog-invitemembers").innerHTML
     = jsonT(webx.members.dto, webx_dialog_invitemembers_rules);
 
   for (var i = 0, count = 0; i<webx.saved_fields.length; i++){
      if (webx.saved_fields[i].name.indexOf("email_") == 0){
         if (count != 0){
            addMemberRow(0,webx.members);
            }
         count++;
         }
      }
   webx_restore_fields(webx.members,"webx-dialog-invitemembers");

   if(jQuery.browser.msie && parseInt(jQuery.browser.version)<7){  }
   else {
   // CK: Added for Modal Positioning
   jQuery(".cdc-fw").find(".jqmWindow").css('top',pos_modal()); // changed from #libra
      }
   jQuery('#webx-dialog-invitemembers').jqm({toTop:true}).jqmShow();
   webx_set_roleinfo_hovers('#webx-dialog-invitemembers');
   }

function webx_invitemembers(f){
     webx_jsonp_submit(f, f.action);
     }

function webx_invitemembers_callback(response){
   webx.members = response;
   jQuery("#webx-dialog-invitemembers").jqmHide();
   if (response.dto.resultCode == "0"){
      setFirstRow(webx.files);
      displayInvitee();
      document.getElementById("webx-members").innerHTML = jsonT(webx.members, webx_members_rules);
      fillTable("webx-members",6);
      webx_set_members_hovers();
      webx.saved_fields = [];
      }
   else {
      // determine which space we're in
/*      var idx = 0;
      while ((typeof (webx.spaces.dto.dataArray[idx].selectedFlag) == "undefined")
              || (webx.spaces.dto.dataArray[idx].selectedFlag != "1")) {
         idx++;
         }
*/
	var idx = findSelectedSpace(webx.spaces.dto.dataArray);
	show_invitemembers_dialog(idx);
      }
   };

if (spaces_page == true && accepted_space){
   webx_dialog_invitemembers_rules =
    {"self" : ''
        +'<div id="modalWrapper">'
        +'   <div id="leftHalf"></div><div id="rightHalf"></div>'
        +'   <div id="menuContainer">'
        +'      <div class="webx-dialog-header">'
        +'         <h5>{$.labels.WEBEX_MEMBERS_INVITE_MEMBER_TITLE}</h5>'
        +'      </div>'
        +'      <form action="{$.nextActionUrl}" onsubmit="webx_invitemembers(this);return false" method="POST">'
        +'      <div class="webx-dialog-scroll">'
        +'         <div class="webx-dialog-required-text"><span class="webx-dialog-required-symbol">*</span> {$.labels.WEBEX_MEMBERS_REQUIRED_FIELD_TEXT}</div>'
        +'         <div class="webx-dialog-error" {$.resultCode}>'
        +'            <div><strong>{$.labels.WEBEX_MEMBERS_ERROR_PREFIX}</strong> {$.resultMessage}</div>'
        +'         </div>'
        +'         <div class="webx-dialog-text">'
        +'            <div id="webx-dialog-inviteemail" class="webx-dialog-form-table">'
        +'               <table cellpadding="0" summary="">'
        +'               <thead>'
        +'               <tr><th{$.form_email_error_class}>{$.labels.WEBEX_MEMBERS_EMAIL_FIELD_TITLE}</th><th class="webx-dialog-info"><table summary="" cellpadding="0" id="webx-dialog-table-iefix"><tr><td>{$.labels.WEBEX_MEMBERS_ROLE_FIELD_TITLE}</td><td class="webx-dialog-roleinfo"><img src="/web/fw/i/icon-info.gif" alt="(i)"/></td></tr></table></th><th> </th></tr>'
        +'               </thead>'
        +'               <tbody>'
        +'               <tr><td><input id="form-email0" type="text" name="email_0" size="48" maxlength="256" value="" /></td><td colspan="2"><select name="role_0" id="form-changerole0"><option value="1">'
        +webx.members.dto.labels.WEBEX_MEMBERS_ROLE_VALUE_ARRAY[0]
  //      + 'Member'
        +'</option><option value="2">'
        +webx.members.dto.labels.WEBEX_MEMBERS_ROLE_VALUE_ARRAY[1]
  //      + 'Admin'
        +'</option></select></td><td> </td></tr>'
        +'               {$.form_email0_error}'
        +'               </tbody>'
        +'               </table>'
        +'               <div id="webx-dialog-invitelink"><a href="javascript:void(0)" onclick="addMemberRow(this,webx.members); return false;">{$.labels.WEBEX_MEMBERS_INVITE_ANOTHER_MEMBER_LINK_TEXT}</a></div>'
        +'            </div>'
        +'            <input type="hidden" name="cmd" value="add" />'
        +'            <input type="hidden" name="component" value="webexMembers" />'
        +'            <input type="hidden" name="sortedBy" value="' + webx.members.dto.sortedBy + '" />'
        +'            <input type="hidden" name="sortedOrder" value="' + webx.members.dto.sortedOrder + '" />'
        +'            <input type="hidden" name="workspaceId" value="{$.workspaceId}" />'
        +'            <input type="hidden" name="callBackFunction" value="webx_invitemembers_callback" />'
        +'            <div id="webx-dialog-invitemessage" class="webx-dialog-form-text">'
        +'               <label for="form-message"{$.form_message_error_class}>{$.labels.WEBEX_MEMBERS_INVITE_MESSAGE_FIELD_TITLE}</label>'
        +'               <textarea name="inviteText" id="form-message" type="text" cols="49" value="">{$.labels.WEBEX_MEMBERS_INVITE_MESSAGE_EXAMPLE}</textarea><br/>'
        +'               {$.form_message_error}'
        +'            </div>'
        +'            {$.labels.WEBEX_MEMBERS_INVITE_MESSAGE_DESCRIPTION}'
        +'         </div>'
        +'      </div>'
        +'      <div class="webx-dialog-buttonbar">'
        +'         <input type="submit" value="{$.labels.WEBEX_MEMBERS_INVITE_BUTTON_TEXT}" class="button" default="default"/><input type="button" value="{$.labels.WEBEX_MEMBERS_CANCEL_BUTTON_TEXT}" class="button webx-button-cancel jqmClose" onclick="return webx_clear_error(webx.members)" />'
        +'      </div>'
	+'      </form>'
        +'   </div>'
        +'</div>',
"self.resultCode" : function(x){
        return (x=="0")?'style="display:none"':"";
        },
"self.form_message_error": function(x){
        return webx_form_error(webx.members,"inviteText", "div");
        },
"self.form_message_error_class": function(x){
        return webx_form_error(webx.members,"inviteText", "newclass");
        },
"self.form_email0_error": function(x){
        return webx_form_error(webx.members,"email_0", "div");
        }
    };
   };


// **********************************************************
// NEWSPACEFNS moved to clb_newspace.js
    

// **********************************************************
// QUITSPACEFNS
function show_quitspace_dialog(){   
   // determine which space we're in
   var idx = 0;
   while ((typeof (webx.spaces.dto.dataArray[idx].selectedFlag) == "undefined")
           || (webx.spaces.dto.dataArray[idx].selectedFlag != "1")) {
       idx++;
       }
   // embed the idx into the data
   webx.spaces.dto.dataArray[idx].idx = idx;
   // render
   document.getElementById("webx-dialog-quitspace").innerHTML
     = jsonT(webx.spaces.dto.dataArray[idx], webx_dialog_quitspace_rules);

   if(jQuery.browser.msie && parseInt(jQuery.browser.version)<7){  }
   else {
   // CK: Added for Modal Positioning
   jQuery(".cdc-fw").find(".jqmWindow").css('top',pos_modal()); // changed from #libra
      }
   jQuery('#webx-dialog-quitspace').jqm({toTop:true}).jqmShow();
   }
   
function webx_quitspace(idx){
     var url = webx.spaces.dto.nextActionUrl;
     url += (url.indexOf("?")>=0)?"&":"?";
     url += "cmd=quit&component=webexSpaces&keyId=";
     url += webx.spaces.dto.dataArray[idx].keyId;
//     url += "&workspaceId=" + webx.spaces.dto.workspaceId;
     url += "&callBackFunction=webx_quitspace_callback";
     webx_jsonp_request(url);
     }

function webx_quitspace_callback(response){
//    alert(" in Quit Space callback with: "+response.dto.component + " with " +response.dto.dataArray.length+ " spaces");
    jQuery("#webx-dialog-quitspace").jqmHide();

    webx.spaces = response;
    if (response.dto.resultCode == "0"){
       location.href=webx.spaces.dto.labels.WEBEX_SPACES_PAGE_URL;
       }
    else {
       alert("Quit Space Failed: "+response.dto.resultMessage);
       document.getElementById("webx-spaces").innerHTML = jsonT(webx.spaces, webx_spaces_rules);
       webx_set_spaces_hovers();
       }
    };


if (spaces_page == true && accepted_space){
   webx_dialog_quitspace_rules = 
       {"self": '<div id="modalWrapper">'
        +'<div id="leftHalf"></div><div id="rightHalf"></div>'
        +'<div id="menuContainer">'
        +'    <div class="webx-dialog-header">'
        +'        <h5>' + webx.spaces.dto.labels.WEBEX_SPACES_QUIT_SPACE_TITLE + '</h5>'
        +'    </div>'
        +'    <div class="webx-dialog-warning">'
        +'        <div><strong>'+webx.spaces.dto.labels.WEBEX_SPACES_WARNING_TEXT+'</strong> '+ webx.spaces.dto.labels.WEBEX_SPACES_QUIT_SPACE_WARNING_PREFIX +' <strong>{$.displayText}</strong>' + webx.spaces.dto.labels.WEBEX_SPACES_QUIT_SPACE_WARNING_SUFFIX +'</div>'
        +'    </div>'
        +'    <div class="webx-dialog-text">'
        +'        <div class="webx-dialog-file">'
        +           webx.spaces.dto.labels.WEBEX_SPACES_QUIT_SPACE_HTML
        +'        </div>'
        +'        <span class="webx-dialog-action">' + webx.spaces.dto.labels.WEBEX_SPACES_QUIT_SPACE_HTML_ACTION + '</span>'
        +'    </div>'
        +'    <div class="webx-dialog-buttonbar">'
         +'        <form><input type="button" value="'+ webx.spaces.dto.labels.WEBEX_SPACES_QUIT_SPACE_BUTTON_TEXT +'" class="button" default="default" onclick="webx_quitspace({$.idx})"/><input type="button" value="' + webx.spaces.dto.labels.WEBEX_SPACES_CANCEL_BUTTON_TEXT + '" class="button webx-button-cancel jqmClose" onclick="return webx_clear_error(webx.spaces)" /></form> '
        +'    </div>'
        +'</div>'
        +'</div>'
     };
   };


// **********************************************************
// EDITSPACEFNS
function show_editspace_dialog(){   
   // determine which space we're in
   var idx = 0;
   while ((typeof (webx.spaces.dto.dataArray[idx].selectedFlag) == "undefined")
           || (webx.spaces.dto.dataArray[idx].selectedFlag != "1")) {
       idx++;
       }
   // embed the idx into the data
   webx.spaces.dto.dataArray[idx].idx = idx;
   // render
   document.getElementById("webx-dialog-editspace").innerHTML
     = jsonT(webx.spaces, webx_dialog_editspace_rules);
   webx_restore_fields(webx.spaces,"webx-dialog-editspace");

   if(jQuery.browser.msie && parseInt(jQuery.browser.version)<7){  }
   else {
   // CK: Added for Modal Positioning
   jQuery(".cdc-fw").find(".jqmWindow").css('top',pos_modal()); // changed from #libra
      }
   jQuery('#webx-dialog-editspace').jqm({toTop:true}).jqmShow();
   }

function webx_editspace(f){
//alert(f.tagName+" action:"+f.action);
     webx_jsonp_submit(f, f.action);
     }
   
function webx_editspace_callback(response){
//    alert(" in callback with: "+response.dto.component + " with " +response.dto.dataArray.length+ " spaces");
    webx.spaces = response;
    jQuery("#webx-dialog-editspace").jqmHide();
    if (response.dto.resultCode == "0"){
       document.getElementById("webx-spaces").innerHTML = jsonT(webx.spaces, webx_spaces_rules);
       webx_set_spaces_hovers();
       // update page titles
       document.getElementById("webx-titles").innerHTML =
         "<h3>" + webx.spaces.dto.dataArray[findSelectedSpace(webx.spaces.dto.dataArray)].displayText + "&nbsp;</h3>"
       + "<h4>" + webx.spaces.dto.dataArray[findSelectedSpace(webx.spaces.dto.dataArray)].descriptionText + "&nbsp;</h4>";
       }
    else {
       show_editspace_dialog();
       }
    };
    
if (spaces_page == true && accepted_space){
   webx_dialog_editspace_rules =
       {"dto": '<div id="modalWrapper">'
        +'<div id="leftHalf"></div><div id="rightHalf"></div>'
        +'<div id="menuContainer">'
        +'    <div class="webx-dialog-header">'
        +'        <h5>{$.labels.WEBEX_SPACES_EDIT_SPACE_TITLE}</h5>'
        +'    </div>'
        +'    <div class="webx-dialog-required-text">'
        +'        <span class="webx-dialog-required-symbol">*</span> {$.labels.WEBEX_SPACES_REQUIRED_FIELD_TEXT}'
        +'    </div>'
        +'    <div class="webx-dialog-error" {$.resultCode}>'
        +'        <div><strong>{$.labels.WEBEX_SPACES_ERROR_PREFIX}</strong> {$.resultMessage}</div>'
        +'    </div>'
        +'    <form action="{$.nextActionUrl}" onsubmit="webx_editspace(this);return false" method="POST"><div class="webx-dialog-text">'
        +'        <div id="webx-dialog-spacename" class="webx-dialog-form-example"> '
        +'            <label for="form-spacename"{$.form_spacename_error_class}>{$.labels.WEBEX_SPACES_EDIT_SPACE_FIELD_TITLE}<span class="webx-dialog-required-symbol">*</span></label>'
        +'            <input type="text" id="form-spacename" name="displayText" size="48" maxlength="256" value="{$.dataArray[findSelectedSpace(webx.spaces.dto.dataArray)].displayText}"><br/>'
        +'{$.form_spacename_error}'
        +'            <span class="webx-dialog-example">{$.labels.WEBEX_SPACES_EDIT_SPACE_FIELD_DESCRIPTION}</span>'
        +'        </div>'
        +'        <div id="webx-dialog-description" class="webx-dialog-form-input">'
        +'            <label for="form-description"{$.form_description_error_class}>{$.labels.WEBEX_SPACES_EDIT_SPACE_DESCRIPTION_TITLE}</label>'
        +'            <input type="text" id="form-description" name="spaceDesc" size="48" maxlength="256" value="{$.dataArray[findSelectedSpace(webx.spaces.dto.dataArray)].descriptionText}"><br/>'
        +'{$.form_description_error}'
        +'       </div>'
        +'    </div>'
        +'    <input type="hidden" name="cmd" value="edit" />'
        +'    <input type="hidden" name="keyId" value="{$.dataArray[findSelectedSpace(webx.spaces.dto.dataArray)].keyId}" />'
        +'    <input type="hidden" name="workspaceId" value="{$.dataArray[findSelectedSpace(webx.spaces.dto.dataArray)].keyId}" />'
        +'    <input type="hidden" name="component" value="webexSpaces" />'
        +'    <input type="hidden" name="callBackFunction" value="webx_editspace_callback" />'
        +'    <div class="webx-dialog-buttonbar">'
        +'        <input type="submit" value="{$.labels.WEBEX_SPACES_EDIT_SPACE_BUTTON_TEXT}" class="button" default="default"/><input type="button" value="{$.labels.WEBEX_SPACES_CANCEL_BUTTON_TEXT}" class="button webx-button-cancel jqmClose" onclick="return webx_clear_error(webx.spaces)"/></form>'
        +'    </div>'
        +'</div>'
        +'</div>',
"dto.resultCode" : function(x){
        return (x=="0")?'style="display:none"':"";
        },
"dto.form_spacename_error": function(x){
        return webx_form_error(webx.spaces,"displayText", "div");
        },
"dto.form_description_error": function(x){
        return webx_form_error(webx.spaces,"spaceDesc", "div");
        },
"dto.form_spacename_error_class": function(x){
        return webx_form_error(webx.spaces,"displayText", "newclass");
        },
"dto.form_description_error_class": function(x){
        return webx_form_error(webx.spaces,"spaceDesc", "newclass");
        }

     };
   };

// **********************************************************
// DELETESPACEFNS
function show_deletespace_dialog(){   
   // determine which space we're in
/*   var idx = 0;
   while ((typeof (webx.spaces.dto.dataArray[idx].selectedFlag) == "undefined")
           || (webx.spaces.dto.dataArray[idx].selectedFlag != "1")) {
      idx++;
   }
*/
   var idx = findSelectedSpace(webx.spaces.dto.dataArray);
   // embed the idx into the data
   webx.spaces.dto.dataArray[idx].idx = idx;
   // render
   document.getElementById("webx-dialog-deletespace").innerHTML
     = jsonT(webx.spaces.dto.dataArray[idx], webx_dialog_deletespace_rules);

   if(jQuery.browser.msie && parseInt(jQuery.browser.version)<7){  }
   else {
   // CK: Added for Modal Positioning
   jQuery(".cdc-fw").find(".jqmWindow").css('top',pos_modal()); // changed from #libra
      }
   jQuery('#webx-dialog-deletespace').jqm({toTop:true}).jqmShow();
   }

function webx_deletespace(idx){
     var url = webx.spaces.dto.nextActionUrl;
     url += (url.indexOf("?")>=0)?"&":"?";
     url += "cmd=delete&component=webexSpaces&keyId=";
     url += webx.spaces.dto.dataArray[idx].keyId;
     url += "&callBackFunction=webx_deletespace_callback";
     webx_jsonp_request(url);
     }

function webx_deletespace_callback(response){
//    alert(" in callback with: "+response.dto.component + " with " +response.dto.dataArray.length+ " spaces");
    jQuery("#webx-dialog-deletespace").jqmHide();

    webx.spaces = response;
    if (response.dto.resultCode == "0"){
      location.href = webx.spaces.dto.labels.WEBEX_SPACES_PAGE_URL;
      }
    else {
      alert("Delete Space Failed");
      document.getElementById("webx-spaces").innerHTML = jsonT(webx.spaces, webx_spaces_rules);
      webx_set_spaces_hovers();
      }
    };

if (spaces_page == true && accepted_space){
   webx_dialog_deletespace_rules =
    {"self" : '<div id="modalWrapper">'
        +'<div id="leftHalf"></div><div id="rightHalf"></div>'
        +'<div id="menuContainer">'
        +'    <div class="webx-dialog-header">'
         +'        <h5>'+webx.spaces.dto.labels.WEBEX_SPACES_DELETE_SPACE_TITLE+'</h5>'
        +'    </div>'
        +'    <div class="webx-dialog-warning">'
         +'        <div><strong>'+webx.spaces.dto.labels.WEBEX_SPACES_WARNING_TEXT+'</strong> '+webx.spaces.dto.labels.WEBEX_SPACES_DELETE_SPACE_WARNING_PREFIX+' <strong>{$.displayText}</strong>'+webx.spaces.dto.labels.WEBEX_SPACES_DELETE_SPACE_WARNING_SUFFIX+'</div>'
        +'    </div>'
        +'    <div class="webx-dialog-text">'
        +'        <div class="webx-dialog-file">'
	+		webx.spaces.dto.labels.WEBEX_SPACES_DELETE_SPACE_HTML
        +'        </div>'
         +'        <span class="webx-dialog-action">'+webx.spaces.dto.labels.WEBEX_SPACES_DELETE_SPACE_HTML_ACTION+'</span>'
        +'    </div>'
        +'    <div class="webx-dialog-buttonbar">'
         +'        <form><input type="button" value="'+webx.spaces.dto.labels.WEBEX_SPACES_DELETE_SPACE_BUTTON_TEXT+'" class="button" default="default" onclick="webx_deletespace({$.idx})" /><input type="button" value="'+webx.spaces.dto.labels.WEBEX_SPACES_CANCEL_BUTTON_TEXT+'" class="button webx-button-cancel jqmClose" onclick="return webx_clear_error(webx.spaces)" /></form>'
        +'    </div>'
        +'</div>'
    +'</div>'
     };
   };

if (spaces_page == true && accepted_space){
   webx_dialog_nospace_rules = 
     {"self": '<div id="modalWrapper">'
         + '    <div id="leftHalf"></div><div id="rightHalf"></div>'
         + '    <div id="menuContainer">'
         + '        <div class="webx-dialog-header">'
         + '            <h5>Not Enough Space</h5>'
         + '        </div>'
         + '        <div class="webx-dialog-error">'
         + '            <div><strong>{$.labels.WEBEX_SPACES_ERROR_PREFIX}</strong> There\'s not enough space available to add this file.</div>'
         + '        </div>'
         + '        <div class="webx-dialog-text">'
         + '            Please Contact the space owner:'
         + '            <div class="webx-dialog-file">'
         + '                <span class="webx-dialog-action">{$.ownerEmail}</span>'
         + '            </div>'
         + '            You can also delete files from this space ro create more room.'
         + '        </div>'
         + '        <div class="webx-dialog-buttonbar">'
         + '            <form><input type="button" value="OK" default="default" class="button jqmClose"/></form> '
         + '        </div>'
         + '    </div>'
         + '</div>'
      };
   

   webx_dialog_replacefile_rules = 
       {"self": '<div id="modalWrapper">'
        +'<div id="leftHalf"></div><div id="rightHalf"></div>'
        +'<div id="menuContainer">'
        +'    <div class="webx-dialog-header">'
        +'        <h5>Replace File</h5>'
        +'    </div>'
         + '<form id="addfile" action="{$.nextActionUrl}'
         + '&cmd=add&component=webexFiles&sortedBy='
         + webx.files.dto.sortedBy
         + '&sortedOrder=' + webx.files.dto.sortedOrder
         + '&workspaceId='+ webx.files.dto.workspaceId
         + '&callBackFunction=webx_addfile_callback" method="post" enctype="multipart/form-data" '
//         + 'onsubmit="return AIM.submit(this, {\'onStart\' : webx_addfile_start_callback, \'onComplete\' : webx_addfile_callback})" />'
         + 'onsubmit="return AIM.submit(this, {\'onStart\' : webx_addfile_start_callback})" />'

        +'    <div class="webx-dialog-warning">'
        +'        <div><strong>'+webx.files.dto.labels.WEBEX_FILES_WARNING_TEXT+'</strong> This file already exists:</div>'
        +'    </div>'
        +'    <div class="webx-dialog-text">'
        +'        <div class="webx-dialog-file">'
        +'            {$.fileType} <div>{$.fileText}</div>'
        +'        </div>'
        +'        <span class="webx-dialog-action">{$.labels.WEBEX_FILES_REPLACE_CONFIRM_TEXT}</span>'
        +'    </div>'
        +'    <input type="hidden" name="replace" value="true" />'
        +'    <input type="file" name="file" value="{$.addFileUrl}" style="visibility:hidden" />'
        +'    <div class="webx-dialog-buttonbar">'
        +'        <input type="submit" value="'+webx.files.dto.labels.WEBEX_FILES_BUTTON_TEXT+'" class="button" default="default"/><input type="button" value="'+webx.files.dto.labels.WEBEX_FILES_CANCEL_BUTTON_TEXT+'" class="button webx-button-cancel jqmClose" onclick="return webx_clear_error(webx.files)" /></form>'
        +'    </div>'
        +'</div>'
        +'</div>',
     "self.fileType" :
         function(x){
            if (typeof(webx_fileType) == 'function'){
               return webx_fileType(x,webx.flab)
            }else{
               return x;
            }
        },
     "self.addFileUrl":
            function(x){
              return webx.files.dto.addFileUrl;
              },
     "self.nextActionUrl":
            function(x){
              return webx.files.dto.nextActionUrl;
              },
     "self.fileText":
            function(x){
               var len = 40;
               var y = x.length;
               if (y-3 > len) {
                  var z = x.substring(y-3, y+1);
                  var x = x.substring(0, len);
                  x = x + '...' + z;
               }
               return x;
            }

      };
   };

// **********************************************************
// EDITMEMBERFNS
function show_editmember_dialog(idx){
   document.getElementById("webx-dialog-editmember").innerHTML
     = jsonT(webx.members.dto.dataArray[idx], webx_dialog_editmember_rules);

   if(jQuery.browser.msie && parseInt(jQuery.browser.version)<7){  }
   else {
   // CK: Added for Modal Positioning
   jQuery(".cdc-fw").find(".jqmWindow").css('top',pos_modal()); // changed from #libra
      }
   jQuery('#webx-dialog-editmember').jqm({toTop:true}).jqmShow();
   webx_set_roleinfo_hovers('#webx-dialog-editmember');
   }

function webx_editmember(f){
   webx_jsonp_submit(f, f.action);
   }

function webx_editmember_callback(response){
//    alert(" in callback with: "+response.dto.component + " with " +response.dto.dataArray.length+ " members");
   webx.members = response;
   jQuery("#webx-dialog-editmember").jqmHide();
   if (response.dto.resultCode == "0"){
      setFirstRow(webx.members);
      displayInvitee();
      document.getElementById("webx-members").innerHTML = jsonT(webx.members, webx_members_rules);
      fillTable("webx-members",6);
      webx_set_members_hovers()
      }
   else {
       // redisplay the dialog, showing error messages
      show_editmember_dialog(idx);
      };
   };

if (spaces_page == true && accepted_space){
   webx_dialog_editmember_rules = 
       {"self": '<div id="modalWrapper">'
        +'<div id="leftHalf"></div><div id="rightHalf"></div>'
        +'<div id="menuContainer">'
        +'    <div class="webx-dialog-header">'
         +'        <h5>'+webx.members.dto.labels.WEBEX_MEMBERS_CHANGE_ROLE_TITLE+'</h5>'
        +'    </div>'
        +'    <form action="'+ webx.members.dto.nextActionUrl +'" onsubmit="webx_editmember(this);return false" method="POST">'
        +'    <div class="webx-dialog-text clearfix">'
        +'        <div id="webx-dialog-email" class="webx-dialog-form-noedit">'
         +'            <label>'+webx.members.dto.labels.WEBEX_MEMBERS_EMAIL_FIELD_TITLE+'</label>'
        +'            <span>{$.memberEmail}</span>'
        +'        </div>'
        +'        <div id="webx-dialog-role" class="webx-dialog-form-select">'
        +'        <table cellpadding="0">'
         +'               <tr><th class="webx-dialog-info"><label for="form-changerole">'+webx.members.dto.labels.WEBEX_MEMBERS_ROLE_FIELD_TITLE+'</label></th><th class="webx-dialog-roleinfo"><img src="/web/fw/i/icon-info.gif" alt="(i)"/></th></tr>'
        +'                <tr><td colspan="2"><select name="role" id="form-changerole"><option value="1">'
        +webx.members.dto.labels.WEBEX_MEMBERS_ROLE_VALUE_ARRAY[0]
   //     + 'Member'
        +'</option><option value="2">'
        +webx.members.dto.labels.WEBEX_MEMBERS_ROLE_VALUE_ARRAY[1]
   //     + 'Admin'
        +'</option></select></td></tr>'
        +'            </table>'
        +'        </div>'
        +'    </div>'
        +'<input type="hidden" name="cmd" value="edit" />'
        +'<input type="hidden" name="currentRole" value="{$.memberRole}" />'
        +'<input type="hidden" name="component" value="webexMembers" />'
        +' <input type="hidden" name="sortedBy" value="' + webx.members.dto.sortedBy + '" />'
        +' <input type="hidden" name="sortedOrder" value="' + webx.members.dto.sortedOrder + '" />'
        +'<input type="hidden" name="workspaceId" value="{$.workspaceId}" />'
        +'<input type="hidden" name="callBackFunction" value="webx_editmember_callback" />'
        +'<input type="hidden" name="keyId" value="{$.keyId}" />'
        +'    <div class="webx-dialog-buttonbar">'
         +'        <input type="submit" value="'+webx.members.dto.labels.WEBEX_MEMBERS_CHANGE_ROLE_BUTTON_TEXT+'" class="button" default="default"/><input type="button" value="'+webx.members.dto.labels.WEBEX_MEMBERS_CANCEL_BUTTON_TEXT+'" class="button webx-button-cancel jqmClose" onclick="return webx_clear_error(webx.members)"/></form>'
        +'    </div>'
        +'</div>'
        +'</div>',
   "self.workspaceId" : function(x){
return (webx.spaces.dto.dataArray[findSelectedSpace(webx.spaces.dto.dataArray)].keyId);
           }
      };
   };


// **********************************************************
// REMOVEMEMBERFNS
function show_removemember_dialog(idx){
   // embed the idx into the data
   webx.members.dto.dataArray[idx].idx = idx;
   // render
   document.getElementById("webx-dialog-removemember").innerHTML
     = jsonT(webx.members.dto.dataArray[idx], webx_dialog_removemember_rules);

   if(jQuery.browser.msie && parseInt(jQuery.browser.version)<7){  }
   else {
   // CK: Added for Modal Positioning
   jQuery(".cdc-fw").find(".jqmWindow").css('top',pos_modal()); // changed from #libra
      }
   jQuery('#webx-dialog-removemember').jqm({toTop:true}).jqmShow();
   }

function webx_removemember(idx){
     var url = webx.members.dto.nextActionUrl;
     url += (url.indexOf("?")>=0)?"&":"?";
     url += "cmd=delete&component=webexMembers&keyId=";
     if ((webx.members.dto.dataArray[idx].keyId != "null")
         && (webx.members.dto.dataArray[idx].keyId != "")){
         url += webx.members.dto.dataArray[idx].keyId;
         }
     else {
         url += webx.members.dto.dataArray[idx].memberEmail;
         }
     url += ("&inviteeFlag=" + webx.members.dto.dataArray[idx].inviteeFlag);
     url += ("&workspaceId=" + webx.members.dto.workspaceId);
     url += ("&sortedBy=" + webx.members.dto.sortedBy);
     url += ("&sortedOrder=" + webx.members.dto.sortedOrder);
     url += "&callBackFunction=webx_removemember_callback";
     webx_jsonp_request(url);
     }

function webx_removemember_callback(response){
//    alert(" in callback with: "+response.dto.component + " with " +response.dto.dataArray.length+ " members");
    jQuery("#webx-dialog-removemember").jqmHide();

    webx.members = response;
    displayInvitee();

    setFirstRow(webx.members);
    document.getElementById("webx-members").innerHTML = jsonT(webx.members, webx_members_rules);
    fillTable("webx-members",6);
    webx_set_members_hovers();

    };

if (spaces_page == true && accepted_space){
   webx_dialog_removemember_rules = 
      {"self": '<div id="modalWrapper">'
        +'<div id="leftHalf"></div><div id="rightHalf"></div>'
        +'<div id="menuContainer">'
        +'    <div class="webx-dialog-header">'
         +'        <h5>'+webx.members.dto.labels.WEBEX_MEMBERS_REMOVE_MEMBER_TITLE+'</h5>'
        +'    </div>'
        +'    <div class="webx-dialog-warning">'
        +'       <div><strong>'+webx.members.dto.labels.WEBEX_MEMBERS_WARNING_TEXT+'</strong> '+webx.members.dto.labels.WEBEX_MEMBERS_REMOVE_MEMBER_WARNING_PREFIX+' <strong>{$.memberEmail}</strong> '+webx.members.dto.labels.WEBEX_MEMBERS_REMOVE_MEMBER_WARNING_SUFFIX+'</div>'
        +'    </div>'
        +'    <div class="webx-dialog-text">'
        +'        <div class="webx-dialog-file">'
         +           webx.members.dto.labels.WEBEX_MEMBERS_REMOVE_MEMBER_WARNING_HTML
        +'        </div>'
         +'        <span class="webx-dialog-action">'+webx.members.dto.labels.WEBEX_MEMBERS_REMOVE_MEMBER_WARNING_HTML_ACTION+'<span>'
        +'    </div>'
        +'    <div class="webx-dialog-buttonbar">'
         +'        <form><input type="button" value="'+webx.members.dto.labels.WEBEX_MEMBERS_REMOVE_MEMBER_BUTTON_TEXT+'" class="button" default="default" onclick="webx_removemember({$.idx}); return false" /><input type="button" value="'+webx.members.dto.labels.WEBEX_MEMBERS_CANCEL_BUTTON_TEXT+'" class="button webx-button-cancel jqmClose" onclick="return webx_clear_error(webx.members)" /></form> '
        +'    </div>'
        +'</div>'
        +'</div>'
      };
   };


   // *************************************************
   // jQuery SUPPORT FOR MODALS/HOVERS

   // jQuery Code for Space hover - pulled into clb_newspace.js

// jQuery Code for files hover
   function webx_set_files_hovers() {
      jQuery('#webx-files table:eq(1) a').bind('focus mouseenter',function(e){
         if (jQuery("#hoverWrapper").hasClass('webx-hover')){ 
            jQuery("#hoverWrapper").remove(); 
            }
         if (jQuery("td.webx-td_b").hasClass('webx-hilite')){ 
            jQuery('td.webx-td_b').removeClass('webx-hilite'); 
            } // QA-615

         jQuery(this).parent().addClass("webx-hilite");
         var idx = this.id.replace(/webx-file-/,"");
         // render bubble content
         webx.files.dto.dataArray[idx].idx=idx;
         
         var hovertext = jsonT(webx.files.dto.dataArray[idx], webx_file_hover_rules);

         // append to DOM as next sibling of anchor
         jQuery(this).parent().append(hovertext);
         // shadows req even width
         var _hw = jQuery('#hoverWrapper').width(); if (_hw%2) {_hw=_hw+1+"px"; jQuery("#hoverWrapper").css({width:_hw})} 
         
         // placement calculation (different if reached by mouse or by tab)
         var _a= jQuery(this); // _a = ahref
         var offset = _a.offset(); 
         if (e.type == "focus"){
            var _aw = offset.left+_a.width()+"px"; // _aw = ahref width
         }else{
            var _aw = e.pageX + 15 + "px"; // _aw = mouse location plus 15px;
            }
         var _li = offset.top+_a.height()/2+"px"; // _li = list item
         var _h = jQuery('#hoverWrapper').height(); _hm=(_h/2)-1+"px"; _h=-(_h/2)+"px"; // _h = hover    
         jQuery('#hoverWrapper').css('margin-top',_h).css('top',_li).css('left',_aw);  
         // arrow calculation
         // add class webx-hover-right to #hoverWrapper if necessary
         jQuery(".webx-hover .webx-hover-arrow").css('top',_hm); 

         if (jQuery.browser.msie) {
            var container = document.getElementById("menuContainer");
            var hoverWrapper = document.getElementById("hoverWrapper");
            //var neededWidth = container.offsetWidth + "px";
            //jQuery("#hoverWrapper").css({width: neededWidth, height: container.offsetHeight + "px"});
            jQuery("#hoverWrapper").css({width: container.offsetWidth + "px"});
            jQuery("#rightHalf").css({width: (hoverWrapper.offsetWidth-1) + "px", height: (hoverWrapper.offsetHeight-1) + "px"});
         } 
         hoverTrigger = 1;
      return false;});

      jQuery('#webx-files table:eq(1) a').bind('blur mouseout', function(){
         thisCell = this;
         jQuery(thisCell).parent().removeClass("webx-hilite");
         // Trigger Happy Hovers
         hoverTrigger=0;
         jQuery('#hoverWrapper').hover(function(e){
            jQuery(thisCell).parent().addClass("webx-hilite");
            hoverTrigger=1;
            },function(e){
            jQuery(thisCell).parent().removeClass("webx-hilite");
            jQuery("#hoverWrapper").remove();
            });
         jQuery('#hoverWrapper a').focus(function(e){
            jQuery(thisCell).parent().addClass("webx-hilite");
            hoverTrigger=1;
            });
         jQuery('#hoverWrapper a').blur(function(e){
            jQuery(thisCell).parent().removeClass("webx-hilite");
            hoverTrigger=0;
            var hoverTimer=setTimeout('removeHover()',50);
            });
         var hoverTimer=setTimeout('removeHover()',50);
      return false;
      });
   };

   // jQuery Code for members Hover
   function webx_set_members_hovers() {
     jQuery('#webx-members table:eq(1) a').bind('focus mouseenter', function(e){
      if (jQuery("#hoverWrapper").hasClass('webx-hover')){ 
         jQuery("#hoverWrapper").remove(); 
         }
      if (jQuery("td.webx-td_a").hasClass('webx-hilite')){ 
         jQuery('td.webx-td_a').removeClass('webx-hilite'); 
         } // QA-615

      jQuery(this).parent().addClass("webx-hilite");
      var idx = this.id.replace(/webx-member-/,"");
       
      if (webx.members.dto.isMember != 1) {
      
         // render bubble content
         webx.members.dto.dataArray[idx].idx=idx;
         // ck: adding variables for hover functionality
         webx.members.dto.dataArray[idx].isOwner=webx.members.dto.dataArray[idx].memberRole;
         webx.members.dto.dataArray[idx].isEdit=webx.members.dto.dataArray[idx].inviteeFlag;
         var hovertext = jsonT(webx.members.dto.dataArray[idx], webx_member_hover_rules);
   
         jQuery(this).parent().append(hovertext);

         // shadows req even width
         var _hw = jQuery('#hoverWrapper').width(); if (_hw%2) {_hw=_hw+1+"px"; jQuery("#hoverWrapper").css({width:_hw})} 
         
         // placement calculation
         var _a= jQuery(this); // _a = ahref
         var offset = _a.offset();
         if (e.type == "focus"){
            var _aw = offset.left+_a.width()+"px"; // _aw = ahref width
         }else{
            var _aw = e.pageX + 15 + "px"; // _aw = mouse location plus 15px;
            }
         var _li = offset.top+_a.height()/2+"px"; // _li = list item
         var _h = jQuery('#hoverWrapper').height(); _hm=(_h/2)-1+"px"; _h=-(_h/2)+"px"; // _h = hover /* QA-679 */
            jQuery('#hoverWrapper').css('margin-top',_h).css('top',_li).css('left',_aw);      
         // arrow calculation
         jQuery(".webx-hover .webx-hover-arrow").css('top',_hm); 
         
         if (jQuery.browser.msie) {
            var container = document.getElementById("menuContainer");
            var hoverWrapper = document.getElementById("hoverWrapper");
            //var neededWidth = container.offsetWidth + "px";
            //jQuery("#hoverWrapper").css({width: neededWidth, height: container.offsetHeight + "px"});
            jQuery("#hoverWrapper").css({width: container.offsetWidth + "px"});
            jQuery("#rightHalf").css({width: (hoverWrapper.offsetWidth-1) + "px", height: (hoverWrapper.offsetHeight-1) + "px"});
            }
         hoverTrigger = 1;
         return false;}});

       jQuery('#webx-members table:eq(1) a').bind('blur mouseout', function(){
         thisCell = this;
         jQuery(thisCell).parent().removeClass("webx-hilite");
         // Trigger Happy Hovers
         hoverTrigger=0;
         jQuery('#hoverWrapper').hover(function(e){
            jQuery(thisCell).parent().addClass("webx-hilite");
            hoverTrigger=1;
         }, function(){
            jQuery(thisCell).parent().removeClass("webx-hilite");
            jQuery("#hoverWrapper").remove();
         });
         jQuery('#hoverWrapper a').focus(function(e){
            jQuery(thisCell).parent().addClass("webx-hilite");
            hoverTrigger=1;
            });
         jQuery('#hoverWrapper a').blur(function(e){
            jQuery(thisCell).parent().removeClass("webx-hilite");
            hoverTrigger=0;
            var hoverTimer=setTimeout('removeHover()',50);
            });
         var hoverTimer=setTimeout('removeHover()',50);
         return false;
      });
   };


   // jQuery for Role's Info hover. pulled into clb_newspace.js

// jQuery Code for Management Space Rollover
jQuery().ready(function() {
   if (jQuery("#webx-sio-action").hasClass("webx-sio") || jQuery("#webx-sio-secondary").hasClass("webx-sio")){
      jQuery("#webx-collab").addClass("webx-collab-sio");
   } else {
      jQuery("#webx-collab").removeClass("webx-collab-sio");
   }

   // Removed Nav if on Accept/Decline
   if(jQuery("#webx-invite p").hasClass('webx-dialog-action')){
      jQuery("#webx-nav li").text('\xa0');
   } else {
   }
      jQuery('#webx-nav-two').hover(function(){
		 var _a = jQuery('#webx-managespace');
		 var _b = jQuery('#webx-managespace-wrapper');
 		 var _c = jQuery('#webx-managespace-menu');
        if(jQuery.browser.msie){
		    _b.css({'display':'block' , 'width':_c.width() , 'marginLeft':(_c.width()-3)+'px', 'height':_c.height()+2});
			if(parseInt(jQuery.browser.version)<7){ /* IE 6 */
	            _c.css('left','-'+(_c.width()+2)); /* plus 2 for the border */
	        } else if(parseInt(jQuery.browser.version)<8){ /* IE7 */
	            jQuery('#webx-managespace-container').css('left','-'+(_c.width()+2));
			} else { /* IE8+ */
				jQuery('#webx-managespace-menu li a').css({'backgroundColor':'#fff'});
				_b.css({'marginLeft':_c.offset().left + 174 + 'px', 'marginTop':'-14px'});
			}
         } else {
			// masterbrand now centers page.
            _c.css({ 'left' : _a.position().left+11 , 'top' : _a.position().top+15 , 'display' : 'block' });
			jQuery('#webx-nav').addClass('webx-nav-adjust');
         }
      }, function(){
         jQuery('#webx-managespace-wrapper').css("display","none");
         jQuery('#webx-nav').removeClass('webx-nav-adjust');
   });

   jQuery('#webx-managespace').focus(function(){
		 var _a = jQuery('#webx-managespace');
		 var _b = jQuery('#webx-managespace-wrapper');
 		 var _c = jQuery('#webx-managespace-menu');
        if(jQuery.browser.msie){
		    _b.css({'display':'block' , 'width':_c.width() , 'marginLeft':(_c.width()-3)+'px', 'height':_c.height()+2});
			if(parseInt(jQuery.browser.version)<7){ /* IE 6 */
	            _c.css('left','-'+(_c.width()+2)); /* plus 2 for the border */
	        } else if(parseInt(jQuery.browser.version)<8){ /* IE7 */
	            jQuery('#webx-managespace-container').css('left','-'+(_c.width()+2));
			} else { /* IE8+ */
				jQuery('#webx-managespace-menu li a').css({'backgroundColor':'#fff'});
				_b.css({'marginLeft':_c.offset().left + 174 + 'px', 'marginTop':'-14px'});
			}
         } else {
			// masterbrand now centers page.
            _c.css({ 'left' : _a.position().left+11 , 'top' : _a.position().top+15 , 'display' : 'block' });
			jQuery('#webx-nav').addClass('webx-nav-adjust');
         }
      }, function(){
         jQuery('#webx-managespace-wrapper').css("display","none");
         jQuery('#webx-nav').removeClass('webx-nav-adjust');
   });

   jQuery('#webx-managespace').blur(function(){
         jQuery('#webx-managespace-wrapper a').focus(function(e){
            manageTrigger=1;
            });
         jQuery('#webx-managespace-wrapper a').blur(function(e){
            jQuery('#webx-nav').removeClass('webx-nav-adjust');
            manageTrigger=0;
            var hoverTimer=setTimeout('removeManage()',50);
            });
         var hoverTimer=setTimeout('removeManage()',50);
   });

   webx_set_spaces_hovers();
   webx_set_files_hovers();
   webx_set_members_hovers(); 
});


//  here is the code that renders the actual content of the page from the JSON data
// alert(typeof webx.signout);
// is this a signin page?
if (typeof webx.signin != "undefined"){
   // container
   document.getElementById("webx-collab").innerHTML 
        = jsonT(webx.signin, webx_sio_collab_rules);

   document.getElementById("webx-header").innerHTML 
        = jsonT(webx.framework, webx_signin_framework_rules);

   document.getElementById("webx-portal").innerHTML 
        = jsonT(webx.signin, webx_signin_rules);
   }
else if (typeof webx.signout != "undefined"){
      // container
      document.getElementById("webx-collab").innerHTML 
           = jsonT(webx.signout, webx_sio_collab_rules);

      document.getElementById("webx-header").innerHTML 
           = jsonT(webx.framework, webx_signout_framework_rules);

      document.getElementById("webx-portal").innerHTML 
           = jsonT(webx.signout, webx_signout_rules);
      }
else {
      var idx = findSelectedSpace(webx.spaces.dto.dataArray);      

      if (typeof webx.spaces == "undefined" || typeof webx.framework == "undefined") {
      //output error message. cannot render page
      alert("missing either spaces or framework JSON.");
      }	
      // the user has no spaces
      else if (idx == -1) {
	    document.getElementById("webx-collab").innerHTML = jsonT(webx.spaces, webx_sio_collab_rules);
	    document.getElementById("webx-header").innerHTML = jsonT(webx.framework, webx_nospaces_framework_rules);
	    document.getElementById("webx-portal").innerHTML = jsonT(webx.spaces, webx_nospaces_rules);
      }
      else {
      	// embed the idx into the data
      	webx.spaces.dto.dataArray[idx].idx = idx;
      	document.getElementById("webx-collab").innerHTML = jsonT(webx.spaces.dto.dataArray[idx], webx_collab_rules);
      
      
      	// framework
           document.getElementById("webx-header").innerHTML = jsonT(webx.framework, webx_spaces_framework_rules);
        
      
      	// spaces
           webx.slab = webx.spaces.dto.labels;
           document.getElementById("webx-spaces").innerHTML = jsonT(webx.spaces, webx_spaces_rules);
        

      	if (webx.spaces.dto.dataArray[idx].invitedFlag == "1") {
      	   document.getElementById("webx-main").innerHTML = jsonT(webx.spaces.dto.dataArray[idx], webx_accept_rules);
      	}
      	else if (accepted_space && webx.spaces.dto.dataArray[idx].invitedFlag == "1") {
      	// error message. backend did not return files or members table.
      	alert("missing either files or members JSON");
      	}   
      	else {	
      	   // files
      	   if (typeof webx.files != "undefined"){
         	webx.flab = webx.files.dto.labels;
         	setFirstRow(webx.files);
         	document.getElementById("webx-files").innerHTML = jsonT(webx.files, webx_files_rules);
         	fillTable("webx-files",6);
		jQuery('#webx-files th').find('img').parent().parent().addClass('webx-sortedby');

           }
           
      	   // members
      	   if (typeof webx.members != "undefined"){
         	webx.mlab = webx.members.dto.labels;
         	setFirstRow(webx.members);
                displayInvitee();
                checkMember();
                document.getElementById("webx-members").innerHTML = jsonT(webx.members, webx_members_rules);
         	fillTable("webx-members",6);
		jQuery('#webx-members th').find('img').parent().parent().addClass('webx-sortedby');
           }         
       	} //else, show selected space's files & members
   } //else, the user has spaces	
} //else, show spaces page
   









