// ************************************
// ERROR HANDLING FOR MODALS
// $Revision: 1.9 $

if ((((typeof webx.spaces) != "undefined")?1:0)
        + (((typeof webx.files) != "undefined")?1:0)
        + (((typeof webx.members) != "undefined")?1:0) != 3){
    if (((typeof webx.signin) == "undefined")
      && ((typeof webx.signout) == "undefined")){
document.write('<div id="webx-collab" class="webx-collab-sio">'
		+'    <div id="webx-header">'
		+'        <h2>System Unavailable</h2>'
		+'    </div>'
		+'    <div id="webx-portal">'
		+'        <div id="webx-sio-secondary" class="webx-sio webx-javascript">'
		+'            <h5>The system is temporarily unavailable.</h5>'
		+'            <div class="webx-sio-content">'
		+'                <p>Please try again later.</p>'
		+'            </div>'
		+'        </div>'
		+'    </div>'
		+'</div>');
         }
      }

webx.saved_fields = new Array();  // set in webx_jsonp_submit()

function webx_form_error(component, field, restype){
   var found = false, i = 0;
   while ((found==false) && (i<component.dto.statusArray.length)){
     found = (component.dto.statusArray[i].field == field);
     i++;
     }
   if (found == true){
      if (restype == "addclass"){
         return (" webx-dialog-form-error");
         }
      else {
         if (restype == "newclass"){
            return (' class="webx-dialog-form-error"');
            }
         else {
            return '<div class="webx-dialog-form-error">'
               +'<img src="/web/fw/i/glyph-alert-error.gif" /> '
               + component.dto.statusArray[i-1].msg 
               + '</div>';
              }
          }
       }
    else {
      return "";
      }
   }

function webx_clear_error(component){
   component.dto.resultCode = "0";
   component.dto.resultMessage = "";
   component.dto.statusArray = [];
   webx.saved_fields = [];
   return true;
   }

function webx_restore_fields(component, mid){
   if (component.dto.resultCode == "0"){
      return;
      }
   if (webx.saved_fields.length == 0){
      return;
      }
   var f = document.getElementById(mid).getElementsByTagName("FORM")[0];
   for (var i = 0; i<f.elements.length; i++){
      if ((f.elements[i].type == "text") || (f.elements[i].type == "textarea")){
         for (var j = 0; j<webx.saved_fields.length; j++){
            if (webx.saved_fields[j].name == f.elements[i].name){
               f.elements[i].value = webx.saved_fields[j].value;
               }
            }
         }
      }
   }
   
   // hover positioning
   function pos_modal(){
         //return jQuery(window).scrollTop() + 134 + 'px';
         posModal = 126+'px';
         return posModal;
      }

   // jQuery for Role's Info hover. 
   function webx_set_roleinfo_hovers(_modalName) {
      jQuery(_modalName + ' .webx-dialog-roleinfo').hover(function(e){
         var hovertext = ''
         +'<div id="infoWrapper" class="webx-hover">'
         +'    <div class="webx-hover-arrow"></div>'
         +'    <div id="leftHalf"></div><div id="rightHalf"></div>'
         +'        <div id="menuContainer">'
         + webx.spaces.dto.labels.WEBEX_SPACES_INFO_BUBBLE_TEXT
         +'    </div>'
         +'</div>';
         jQuery(_modalName + ' #menuContainer').prepend(hovertext);
         // placement calculation
         var adjustHoverTop = 0;
         var adjustHoverLeft = 0;
         if (_modalName == "#webx-dialog-newspace") { adjustHoverTop=20; adjustHoverLeft=30;  } else { adjustHoverTop=6;adjustHoverLeft=20;  }
         if (jQuery.browser.msie) { adjustHoverTop=20; adjustHoverLeft=20; }
         var mOffset = jQuery(_modalName).offset(); // modal info
         var iOffset = jQuery(_modalName + ' .webx-dialog-roleinfo').offset(); // icon info
         var _h = jQuery(_modalName + ' #infoWrapper').height();
         iOffsetTop = iOffset.top-mOffset.top-_h/2+adjustHoverTop;
         iOffsetLeft = iOffset.left-mOffset.left+adjustHoverLeft;
   
         jQuery(_modalName + ' #infoWrapper').css('top',iOffsetTop).css('left',iOffsetLeft).css('display','block');      

         // arrow calculation
         jQuery(_modalName + ' .webx-hover .webx-hover-arrow').css('top',_h/2);
         jQuery(_modalName + ' #infoWrapper').css('display','block');  
  
         if (jQuery.browser.msie) {
            jQuery(_modalName + ' #infoWrapper').css("display","block").css('width',jQuery(_modalName + ' #infoWrapper #menuContainer').width()).css('height',jQuery(_modalName + ' #infoWrapper #menuContainer').height()+2).css('top',iOffsetTop-15).css('left',iOffsetLeft+10);
            jQuery(_modalName + ' #infoWrapper #menuContainer').css('left','0') /* plus 2 for the border */
         }
      }, function(){
         jQuery(_modalName + ' #infoWrapper').remove();
      });    
   };

     
// submit a form
// note: this will not work without a backend.
function webx_jsonp_submit(f,url){
    // assumes that callbackFunction is one of the fields
    if (url.match(/\?/)) {
       url += '&';
    }
    else {
       url += '?';
    }
    webx.saved_fields = []; 

    // this code constructs the URL and handles skipped email/role fields
    //   when the user has added extra rows in New Space and Invite Members
    var email_counter = 0;
    var current_email_counter = 0;
    var field_name = "";
    var field_value= "";
    var skip_role = false;
    var has_email_fields = false;
    for (var i=0; i<f.elements.length; i++){
       if ((f.elements[i].type != "submit") && (f.elements[i].type != "button")){
          field_name = f.elements[i].name;
          field_value = f.elements[i].value;
          if (field_name.indexOf("email_") == 0){
             has_email_fields = true;
             if (field_value != ""){
                field_name = "email_" + email_counter;
                current_email_counter = email_counter++;
                url += field_name + '='+ encodeURIComponent(cdc.util.htmlEscape(field_value)) + '&';
                webx.saved_fields.push(new Object({"name":field_name,
                                             "value":field_value}));
                skip_role = false;
                }
             else {
                skip_role = true;
                }
             }
          else {
             if ((field_name.indexOf("role_") == 0)){
//                alert(skip_role);
                if (skip_role == false){
                   field_name = "role_" + current_email_counter;
                   url += field_name + '='+ encodeURIComponent(cdc.util.htmlEscape(field_value)) + '&';
                   webx.saved_fields.push(new Object({"name":field_name,
                                                "value":field_value}));
                   }
                }
             else {
                skip_role = false;
                url += field_name + '='+ encodeURIComponent(cdc.util.htmlEscape(field_value)) + '&';
                webx.saved_fields.push(new Object({"name":field_name,
                                             "value":field_value}));
                }
             }
          }
       } 
    if ((has_email_fields == true) && (email_counter == 0)){
       // we've removed all the email fields; put one back
       url += "email_0=&role_0=1&";
       webx.saved_fields.push(new Object({"name":"email_0",
                                             "value":""}));
       webx.saved_fields.push(new Object({"name":"role_0",
                                             "value":"1"}));
       }
    url += 'ts=' + new Date().getTime().toString(); // prevent caching
// alert("Submitting: "+url.substring(url.indexOf("?")));
    if ((url.indexOf("next action URL")>= 0)
       || (url.indexOf("next%20action%20URL")>=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);
       }
    }

   // jQuery Code for Space hover
   function webx_set_spaces_hovers() {
      jQuery('#webx-spaces li a').bind('focus mouseenter', function(e){
         if (jQuery(this).parent().hasClass("webx-hilite")){
            return;
            }
         jQuery(this).parent().addClass("webx-hilite");
         var idx = this.id.replace(/webx-space-/,"");
         // render bubble content
         // embed index (i.e., which file?) into the data for later use
         webx.spaces.dto.dataArray[idx].idx = idx;
      
         var hovertext = jsonT(webx.spaces.dto.dataArray[idx], webx_space_hover_rules);
         jQuery('#fw-mb').prepend(hovertext); // changed from #libra
         
         // 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 + 30 + "px"; // _aw = mouse location plus 30px;
            }
         var _li = offset.top+_a.parent().height()/2+"px"; // _li = list item
         var _h = jQuery('#hoverWrapper').height(); _hm=(_h/2)+"px"; _h=-(_h/2)+"px"; // _h = hover
         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"});
         }});
      jQuery('#webx-spaces li a').bind('blur mouseout', function(e){
         jQuery(this).parent().removeClass("webx-hilite");
         jQuery("#hoverWrapper").remove();
      });
   };

  /*
  Adds another row to the 'Create New Space' dialog to allow another member to be invited.
  The index of the row needs to be calculated as one up from the index of the last row.
  
  param: Node cn = 'invite another member' node
         comp = webx.spaces or webx.members
  not very useful right now because FF doesn't seem to recognize firstChild
  */
  function addMemberRow(cn,comp) {
        var rl = "";
        var tn = document.getElementById('webx-dialog-inviteemail').getElementsByTagName('table')[0];
        if (comp.dto.component == "webexSpaces"){
           rl = webx.spaces.dto.labels.WEBEX_SPACES_REMOVE_LINK_TEXT;
           }
        else {
           rl = webx.members.dto.labels.WEBEX_MEMBERS_REMOVE_LINK_TEXT;
           }
	var inputs = tn.getElementsByTagName('input');
	var indexstring = inputs[inputs.length-1].id;
	var lastindex = parseInt(indexstring.slice(indexstring.length-1));
	lastindex += 1;
	
	var tr = tn.insertRow(tn.rows.length);
	tr.className = "webx-dialog-table-row";

	var td1 = tr.insertCell(0);
	var td2 = tr.insertCell(1);
	var td3 = tr.insertCell(2);
        //Can attribute be set before the table column is created? In IE, this causes an issue
        //td2.setAttribute("colspan","2");
        td3.setAttribute("class","webx-dialog-remove");
	td1.innerHTML="<input name=\"email_" + lastindex +"\" id=\"form-email" + lastindex + "\" maxlength=\"256\" size=\"48\" value=\"\" type=\"text\">";
	td2.innerHTML="<select name=\"role_" + lastindex +"\" id=\"form-changerole" + lastindex + "\"><option value=\"1\">"
         + webx.spaces.dto.labels.WEBEX_SPACES_MEMBERS_ROLE_VALUE_ARRAY[0]
 //        + "Member"
         + "</option><option value=\"2\">"
         + webx.spaces.dto.labels.WEBEX_SPACES_MEMBERS_ROLE_VALUE_ARRAY[1]
 //        + "Admin"
         + "</option></select>";
        td3.innerHTML="<a href=\"\" onclick=\"removeMemberRow(this); return false;\">" + rl + "</a>";

        var err_str = webx_form_error(comp,"email_"+lastindex, "div");
        if (err_str != ""){
           tr = tn.insertRow(tn.rows.length);
           tr.className = "webx-dialog-table-row";
           td1 = tr.insertCell(0);
           td1.setAttribute("colspan","3");
           td1.innerHTML = err_str;
           }
  }
  
  /*
  Removes the specified table row in the invitees table of the 'Create New Space' dialog
  All DOM manipulation. If the invitees table markup changes, this needs to be updated accordingly.
  This function keys off of the 'webx-dialog-inviteemail' div id.
  
  param: Node: rlink = node of the 'remove' link
  */
  function removeMemberRow(rlink) {
  	var rn=rlink.parentNode.parentNode;
  	var i=rn.rowIndex;
  	var tn=rn.parentNode.parentNode;
/* IE 6: all three work. FF 1.5: firstChild doesn't seem to work 
	window.alert(tn.innerHTML);  	
  	window.alert(document.getElementById('webx-dialog-inviteemail').getElementsByTagName('table')[0].innerHTML);
	window.alert(document.getElementById('webx-dialog-inviteemail').firstChild.innerHTML);
*/
	tn.deleteRow(i);
  }

     
// **********************************************************
// NEWSPACEFNS
function show_newspace_dialog(){   
   document.getElementById("webx-dialog-newspace").innerHTML
     = jsonT(webx.spaces, webx_dialog_newspace_rules);
   // add more member rows if needed for error reporting
   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.spaces);
            }
         count++;
         }
      }
   webx_restore_fields(webx.spaces,"webx-dialog-newspace");



   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-newspace').jqm({toTop:true}).jqmShow();
   webx_set_roleinfo_hovers('#webx-dialog-newspace');
   }

function webx_newspace(f){
     webx_jsonp_submit(f, f.action);
     }

//this callback is shared between collab spaces page & the backpack
function webx_newspace_callback(response){
//    alert(" in callback with: "+response.dto.component + " with " +response.dto.dataArray.length+ " spaces; resultCode="+response.dto.resultCode);
    webx.spaces = response;
    jQuery("#webx-dialog-newspace").jqmHide();
    if (response.dto.resultCode == "0"){
       if (typeof (webx.framework) != "undefined") { //we are on the collab spaces page
       	if (webx.spaces.dto.dataArray.length == 1) {
       		var newurl = webx.spaces.dto.labels.WEBEX_SPACES_PAGE_URL + "?workspaceId=";
		newurl += webx.spaces.dto.dataArray[0].keyId;
		location.href = newurl;
       	}
       	else {
	       document.getElementById("webx-spaces").innerHTML = jsonT(webx.spaces, webx_spaces_rules);
	       webx_set_spaces_hovers();       	
       	}
       }
       else { //we are in the backpack
          if (typeof(cdc) != "undefined") {
             cdc.backpack.manageSpaces.addCallback({'manageSpaces': webx.spaces.dto});
          }
          else {
             alert("cannot call cdc.backpack.manageSpaces.addCallback()");
          }
       }
    }
    else {
       show_newspace_dialog();
       }
    };

//*******************************************************
// 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;
}

// this rule is written for the webx.spaces.dto object
if (typeof webx.spaces != "undefined"){
   webx_dialog_newspace_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_ADD_NEW_SPACE_TITLE}</h5>'
        +'      </div>'
        +'      <form action="{$.nextActionUrl}" onsubmit="webx_newspace(this);return false" method="POST">'
        +'      <div class="webx-dialog-scroll">'
        +'         <div class="webx-dialog-required-text">'
        +'            <span class="webx-dialog-required-symbol">{$.labels.WEBEX_SPACES_REQUIRED_FIELD_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>'
        +'         <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_SPACE_NAME_FIELD_TITLE}<span class="webx-dialog-required-symbol">{$.labels.WEBEX_SPACES_REQUIRED_FIELD_SYMBOL}</span></label>'
        +'               <input type="text" id="form-spacename" name="displayText" size="48" maxlength="256" value="">'
        +'               {$.form_spacename_error}'
        +'               <div class="webx-dialog-example">{$.labels.WEBEX_SPACES_SPACE_NAME_EXAMPLE}</div>'
        +'            </div>'
        +'            <div id="webx-dialog-description" class="webx-dialog-form-input">'
        +'               <label for="form-description"{$.form_description_error_class}>{$.labels.WEBEX_SPACES_DESCRIPTION_FIELD_TITLE}</label>'
        +'               <input type="text" id="form-description" name="spaceDesc" size="48" maxlength="256" value="" /><br/>'
        +'               {$.form_description_error}'
        +'            </div>'
        +'            <div id="webx-dialog-inviteemail">'
        +'               <table cellpadding="0" class="webx-dialog-form-table" summary="">'
        +'               <caption>{$.labels.WEBEX_SPACES_MEMBERS_SUBTITLE}</caption>'
        +'               <thead>'
        +'               <tr><th {$.form_email_error_class}>{$.labels.WEBEX_SPACES_EMAIL_FIELD_TITLE}</th><th class="webx-dialog-info"><table summary="" cellpadding="0" id="webx-dialog-table-iefix"><tr><td>{$.labels.WEBEX_SPACES_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><select name="role_0" id="form-changerole0"><option value="1">'
        + webx.spaces.dto.labels.WEBEX_SPACES_MEMBERS_ROLE_VALUE_ARRAY[0]
//        + 'Member'
        + '</option><option value="2">'
        + webx.spaces.dto.labels.WEBEX_SPACES_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.spaces); return false;">{$.labels.WEBEX_SPACES_INVITE_ANOTHER_MEMBER_LINK_TEXT}</a></div>'
        +'            </div>'
        +'            <div id="webx-dialog-invitemessage" class="webx-dialog-form-text">'
        +'               <label for="form-message"{$.form_message_error_class}>{$.labels.WEBEX_SPACES_INVITE_MESSAGE_FIELD_TITLE}</label>'
        +'               <textarea name="inviteText" id="form-message" type="text" cols="49" value="">{$.labels.WEBEX_SPACES_INVITE_MESSAGE_EXAMPLE}</textarea><br/>'
        +'               {$.form_message_error}'
        +'            </div>'
        +'            <div id="webx-dialog-msg">{$.labels.WEBEX_SPACES_INVITE_MESSAGE_DESCRIPTION}</div>'
        +'         </div>'                  
        +'      </div>'
        +'      <div class="webx-dialog-buttonbar">'
        +'         <input type="hidden" name="cmd" value="add" />'
        +'         <input type="hidden" name="component" value="webexSpaces" />'
        +'         <input type="hidden" name="workspaceId" value="{$.workspaceId}" />'
        +'         <input type="hidden" name="callBackFunction" value="webx_newspace_callback" />'
        +'         <input type="submit" value="{$.labels.WEBEX_SPACES_CREATE_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)" />'
        +'      </div>'
        +'      </form>'
        +'   </div>'
        +'</div>',
"dto.resultCode" : function(x){
        return (x=="0")?'style="display:none"':"";
        },
"dto.workspaceId" : function(x){
        if (findSelectedSpace(webx.spaces.dto.dataArray) >= 0){
           return webx.spaces.dto.dataArray[findSelectedSpace(webx.spaces.dto.dataArray)].keyId;
           }
        else {
           return "";
           }
        },
"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_message_error": function(x){
        return webx_form_error(webx.spaces,"inviteText", "div");
        },
"dto.form_email0_error": function(x){
        return webx_form_error(webx.spaces,"email_0", "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");
        },
"dto.form_message_error_class": function(x){
        return webx_form_error(webx.spaces,"inviteText", "newclass");
        },
"dto.form_email_error_class": function(x){
        for (var i=0;i<webx.spaces.dto.statusArray.length;i++){
         if((webx_form_error(webx.spaces,"email_"+i, "newclass")) != ""){
           return (webx_form_error(webx.spaces,"email_"+i, "newclass"));
           }
         }
        return "";
        },
"dto.form_email0_error_class": function(x){
        return webx_form_error(webx.spaces,"email_0", "newclass");
        }
   }
}

