function taskWindowOpen() { return; }
function taskWindowResize() { return; }
function fixDialogLook() {}
function removeDialog() {
    removeDialogResidue();
    $(this).dialog('destroy').remove();
    dialogWindowClosed();
}
// residue from datepicker and autocomplete
function removeDialogResidue() {
    $('#dueDate').datepicker("hide");
    $('#targetDate').datepicker("hide");
}

function movePreloader(){
    var offset = $(document).scrollTop() + ($(window).height() / 2);
    $('#ajaxPreloader').css("top",offset);
    offset = $(document).scrollLeft() + ($(window).width() / 2);
    $('#ajaxPreloader').css("left",offset);
}
function mmDisplayRemoteMessage(msg) {
    showRemoteMessage('messageDiv', msg);
}
function mmDisplayRemoteErrorMessage(msg) {
    showRemoteMessage('errorMessageDiv', msg);
}
function showRemoteMessage(errorDivName, data) {
    $("#" + errorDivName).html(data).show();
    $('.ui-dialog-buttonpane').unblock();
}
function setupTextCssClass() {
    /*
    var css = '<style type="text/css">pre {';
    if (!$.support.opacity) { //if ($.browser.msie) {
        css += "white-space:pre;word-wrap:break-word";
    }
//    else if ($.browser.mozilla) {
//        css += "white-space:-moz-pre-wrap";
//    }
//    else if ($.browser.opera) {
//        css += "white-space:-o-pre-wrap";
//    }
    else {
        css += "white-space:pre-wrap";
    }
    css += '}</style>';
    $('head').append(css);
    */
}
function selectAllEmailsInputs(ch){
    if(ch.checked){
        $(ch).parents('.emailList').find(".emailNotifications").attr('checked', 'checked')
    }
    else{
        $(ch).parents('.emailList').find(".emailNotifications").removeAttr('checked')
    }
}
function initializeDatePickerById(objid, noMinDate) {
    initializeDatePickerByElem($("#"+objid), noMinDate);
}
function initializeDatePickerByElem(elem, noMinDate) {
    if (noMinDate) {
        var dpOptions = {
            changeMonth: true,
			changeYear: true,
            dateFormat: userDateFormat,
            beforeShow:brintDPToTop,
            onClose:enableDateField
        };
    }
    else {
        var dpOptions = {
            changeMonth: true,
			changeYear: true,
            minDate:new Date(),
            dateFormat: userDateFormat,
            beforeShow:brintDPToTop,
            onClose:enableDateField
        };
    }
    $(elem).next().datepicker(dpOptions).unbind('keypress');
}
// begin multiUserInputControl
function initMultiUserInputControl(inputName, submittedInputName, src) {
    $("#" + inputName).autocomplete(usersArr.length > 0 ? usersArr : autoCompleteUrl, {
        minChars: 2,
        cacheLength: 1,
        autoFill: false,
        formatItem: function(row, i, max) {
            if ($.trim(row[0]) == $.trim(row[1])) {
                return row[0];
            }
            else if (($.trim(row[1])).indexOf('@linkedin.manymoon.com') >= 0)
                        return row[0] + ' - ' + 'LinkedIn';
            else
                return row[0] + ' - ' + row[1];
        },
        formatMatch: function(row, i, max) {
            return row[0] + " " + row[1];
        },
        formatResult: function(row) {
            return row[1];
        }
    }).result(function(event, item) {
        doAddEmailToList($(this), submittedInputName, item[0], item[1], src);
        if ($('.mmQ').size() > 0) setQHintPos();
    });
}
function initMultiUserInputControlByElem(container) {
    var input = $(container).find('input[type="text"]');
    var inputToSubmit = $(container).find('input[type="hidden"]');

    $(input).keyup(function(event) {
        if (isKeyToNext(event.keyCode)) addEmailToListByElem(this,inputToSubmit);
    });
    $(input).blur(function() {
        addEmailToListByElem(this,inputToSubmit);
    });

    $(input).autocomplete(usersArr.length > 0 ? usersArr : autoCompleteUrl, {
        minChars: 2,
        matchContains: true,
        multiple: false,
        multipleSeparator: ',',
        autoFill: false,
        cacheLength: 1,
        formatItem: function(row, i, max) {
            if ($.trim(row[0]) == $.trim(row[1]))
                return row[0];
            else if (($.trim(row[1])).indexOf('@linkedin.manymoon.com') >= 0)
                        return row[0] + ' - ' + 'LinkedIn';
            else
                return row[0] + ' - ' + row[1];
        },
        formatMatch: function(row, i, max) {
            return row[0] + " " + row[1];
        },
        formatResult: function(row) {
            return row[1];
        }
    }).result(function(event, item) {
        doAddEmailToListByElem($(this), inputToSubmit, item[0], item[1]);
        if ($('.mmQ').size() > 0) setQHintPos();
    });

}
function removeUserFromList(inputName, email, buttonElem) {
    var emails = $('#' + inputName).val();
    var tmp = emails.split(',');
    emails = '';
    for (var i = 0; i < tmp.length; i++)
        if (tmp[i] != '' && tmp[i] != email) emails += tmp[i] + ',';
    $('#' + inputName).val(emails);
    $(buttonElem).parent().remove();
}
function removeUserFromListByElem(email, buttonElem) {
    var inputElem = $(buttonElem).closest('.holder').next();
    var emails = $(inputElem).val();
    var tmp = emails.split(',');
    emails = '';
    for (var i = 0; i < tmp.length; i++)
        if (tmp[i] != '' && tmp[i] != email) emails += tmp[i] + ',';
    $(inputElem).val(emails);
    $(buttonElem).parent().remove();
}
function updateUserList(oldList, excludeList) {
    var oldArr = oldList.split(',');
    var excArr = excludeList.split(',');
    var newList = '';
    var found = false;
    $.each(oldArr, function(i,oldItem) {
        if (oldItem != '') {
            found = false;
            $.each(excArr, function(j, excItem) {
                if (excItem != '' && excItem == oldItem) found = true;
            });
            if (!found) newList += oldItem + ',';
        }
    });
    return newList;
}
function addEmailToList(inputElem, inputName, src) {
    addEmailToListByElem(inputElem, $('#' + inputName), src);
}
function addEmailToListByElem(inputElem, inputToSubmit, src) {
    var email = $(inputElem).val();
    if (email.indexOf(',') >= 0 || email.indexOf(';') >= 0)
        email = email.substring(0,email.length-1);
    email = $.trim(email);
    if (email != '' && isEmail(email)) {
        doAddEmailToListByElem(inputElem, inputToSubmit, email, email, src)
    }
}
function doAddEmailToList(inputElem, inputName, name, email, src) {
    doAddEmailToListByElem(inputElem, $('#' + inputName), name, email, src);
}
function doAddEmailToListByElem(inputElem, inputToSubmit, name, email, src) {
    if (!(inEmailListByElem(inputToSubmit, email))) {
        var content = '';
        content = '<li class="bit-box" ' + (name.length > 18 ? 'title="' + name + '"' : '') + '>';
        if (name.length > 18) name = name.substring(0,15) + '...';
        content += name + '<span class="closebutton mmImg2" onclick="removeUserFromListByElem(\'' + email + '\', this);">&nbsp;</span></li>';
        $(inputElem).parent().before(content);
        var emails = $(inputToSubmit).val();
        emails += email + ',';
        $(inputToSubmit).val(emails);
        if (src == 'oldTask') {
            //update email noti list
            if (name != email) updateEmailNotiListByVal(name, email, false);
            else updateEmailNotiList($('#tid_tPopup').val(), false);
        }
    }
    $(inputElem).val('');
}
function resetMultiUserInput(inputContainer) {
    resetMultiUserInputByElem($('#' + inputContainer));
}
function resetMultiUserInputByElem(inputContainer) {
    $(inputContainer).find('.bit-box').remove();
    $(inputContainer).find('input[type="text"]').val('');
    $(inputContainer).next('input[type="hidden"]').val('');
}
function addConnectionsToAddMemberDialog(selectedConns) {
    addConnectionsToMultiUserInput(selectedConns, 'goalUsers', 'goalUsers_input');
}
function addConnectionsToMultiUserInput(selectedConns, targetElem, targetElem_input) {
    addConnectionsToMultiUserInputByElem(selectedConns, $('#' + targetElem), $('#' + targetElem_input));
}
function addConnectionsToMultiUserInputByElem(selectedConns, targetElem, targetElem_input) {
    var emailList = $(targetElem).val().split(',');
    var name = '';
    var email = '';
    var content = '';
    for (var i = 0; i < selectedConns.size(); i++) {
        email = $(selectedConns[i]).val();
        name =  $.trim($(selectedConns[i]).parent().text());
        if (!inList(emailList, email)) {
            doAddEmailToListByElem(targetElem_input, targetElem, name, email);
        }
    }
}
function addEmailsOnload(emails, inputElem, inputToSubmit) {
    if ($(inputElem).size() == 0) return;
    var emailList = emails.split(',');
    var tmp;
    $.each(emailList, function(i,n) {
        if (n != '') {
            tmp = n.split('___');
            if (tmp.length > 1) doAddEmailToList($(inputElem), inputToSubmit, tmp[1], tmp[0]);
            else doAddEmailToList($(inputElem), inputToSubmit, n, n);
        }
    });
    $(inputElem).val('').blur();
}
// end multiUserInputControl
var timeArr = [['0:00','12:00 am'],['0:30','12:30 am'],
    ['1:00','1:00 am'],['1:30','1:30 am'],
    ['2:00','2:00 am'],['2:30','2:30 am'],
    ['3:00','3:00 am'],['3:30','3:30 am'],
    ['4:00','4:00 am'],['4:30','4:30 am'],
    ['5:00','5:00 am'],['5:30','5:30 am'],
    ['6:00','6:00 am'],['6:30','6:30 am'],
    ['7:00','7:00 am'],['7:30','7:30 am'],
    ['8:00','8:00 am'],['8:30','8:30 am'],
    ['9:00','9:00 am'],['9:30','9:30 am'],
    ['10:00','10:00 am'],['10:30','10:30 am'],
    ['11:00','11:00 am'],['11:30','11:30 am'],
    ['12:00','12:00 pm'],['12:30','12:30 pm'],
    ['13:00','1:00 pm'],['13:30','1:30 pm'],
    ['14:00','2:00 pm'],['14:30','2:30 pm'],
    ['15:00','3:00 pm'],['15:30','3:30 pm'],
    ['16:00','4:00 pm'],['16:30','4:30 pm'],
    ['17:00','5:00 pm'],['17:30','5:30 pm'],
    ['18:00','6:00 pm'],['18:30','6:30 pm'],
    ['19:00','7:00 pm'],['19:30','7:30 pm'],
    ['20:00','8:00 pm'],['20:30','8:30 pm'],
    ['21:00','9:00 pm'],['21:30','9:30 pm'],
    ['22:00','10:00 pm'],['22:30','10:30 pm'],
    ['23:00','11:00 pm'],['23:30','11:30 pm']];
function constructTimePicker() {
    if ($('#stCombobox').is('div')) return;
    var content = '<div id="stCombobox" class="mm-hidden" style="overflow: auto; position: absolute; width: 95px; height: 120px; z-index: 200000;">';
    content +=  '<select id="stComboList" size="5">';
    $.each(timeArr, function(i, n) {
        content += '<option value="' + n[1] + '">' + n[1] + '</option>';
    });
    content += '</select></div>';
    content += '<div id="etCombobox" class="mm-hidden" style="overflow: auto; position: absolute; width: 95px; height: 120px; z-index: 200000;"></div>';
    $('body').append(content);
}
function showTimepicker(inputElem, type) {
    if (!$('#stCombobox').is('div')) constructTimePicker();
    var tl = getTopLeft(inputElem);
    if (type == 'start') {
        $('#stCombobox').css('top',tl.Top+20).css('left',tl.Left).show();
        $('#stComboList').click(function() {
            $(inputElem).val($(this).val());
            $('#stCombobox').hide();
            if ($(this).val() == '11:30 pm') $(inputElem).next().val('11:59 pm');
            else $(inputElem).next().val($(this).children('option:selected').next().val());
            $(this).unbind();
            $(this).removeData('focus');
        });
        $('#stComboList').focus(function() {
            $(this).data('focus',true);
        });
        $('#stComboList').blur(function() {
            $(this).removeData('focus');
            setTimeout("hideStartTime()", 500);
        });

        $(inputElem).blur(function() {
            setTimeout("hideStartTime()", 500);
        });
        if ($(inputElem).val() == '') $('#stComboList').val($('#stComboList').val("8:00 am"));//$('#stComboList option[value="8:00 am"]').attr('selected','selected');
        else {
            $('#stComboList').val($(inputElem).val());
        }
        var index = (document.getElementById('stComboList').selectedIndex) -  2;
        $('#stComboList').scrollTop(index * $('#stComboList option:first').height());
    }
    else {
        var startVal = $(inputElem).prev().val();
        if(startVal != '') {
            var found = false;
            var content = '<select id="etComboList" size="5">';
            var count = 0;
            $.each(timeArr, function(i, n) {
                if (startVal == n[1]) found = true;
                if (found) {
                    content += '<option value="' + n[1] + '">' + n[1] + '</option>';
                    count++;
                }
            });
            // count == 1 means starttime is 11:30pm, so need to manually add 11:59 pm
            if (count == 1) {
                content += '<option value="11:59 pm">11:59 pm</option>';
            }
            content += '</select>';
            $(inputElem).blur(function() {
                setTimeout("hideEndTime()", 500);
            });

        }
        else {
            var content = "<div style='background-color:gray;padding:5px;'>Please select start time first.</div>";
            $(inputElem).blur(function() {
                $('#etCombobox').hide();
            });
        }
        $('#etCombobox').html(content);
        $('#etCombobox').css('top',tl.Top+20).css('left',tl.Left).show();
        $('#etComboList').click(function() {
            $(inputElem).val($(this).val());
            $('#etCombobox').hide();
            $(this).unbind();
            $(this).removeData('focus');
        });
        $('#etComboList').focus(function() {
            $(this).data('focus',true);
        });
        $('#etComboList').blur(function() {
            $(this).removeData('focus');
            setTimeout("hideEndTime()", 500);
        });
        var index = (document.getElementById('etComboList').selectedIndex) -  2;
        $('#etComboList').scrollTop(index * $('#etComboList option:first').height());
    }
}
function hideEndTime() {
    if($('#etComboList').data('focus')) return;
    else {
        $('#etCombobox').hide();
        $('#etComboList').unbind();
//        $('#etComboList').removeData('focus');
    }
}
function hideStartTime() {
    if($('#stComboList').data('focus')) return;
    else {
        $('#stComboList').unbind();
//        $('#stComboList').removeData('focus');
        $('#stCombobox').hide();
    }
}
function getEmailCount(emails) {
    var count = 0;
    var emArr = emails.split(',');
    $.each(emArr, function(i,n) {
        if (n != '') count++;
    });
    return count;
}
function showHideShareboxSetup(inputName, shareboxContainerName) {
    if (inputName == 'name_q') {
        $('#' + inputName).focus(function() {
            $('#' + shareboxContainerName).show();
            if ($('#taskOptionTbl').css('display') == 'none') $('#goal_q2_div').show();
            else $('#goal_q2_div').hide();
        });
    }
    else {
        $('#' + inputName).focus(function() {
           $('#' + shareboxContainerName).show();
        });
    }
    /*
    $('#' + inputName).blur(function() {
       if($.trim($(this).val()) == '' || $(this).hasClass('labelHighlight')) $('#' + shareboxContainerName).hide();
    });
    */
}
function isValidTime(val) {
    return /^(?:0?[1-9]:[0-5]|1(?=[012])\d:[0-5])\d( )?(AM|am|aM|Am|PM|pm|pM|Pm)$/.test(val);
}
// tagging related
function setupBubbleInput(inputElemName, type) {
    var inputElem = $('#' + inputElemName);
    var holder = $(inputElem).closest('ul');
    var inputToSubmit = $(holder).next('input:hidden');

    if ( !(window.location.pathname.indexOf('auth/') >= 0) )
        initTagAutocomplete(inputElem, inputToSubmit, type);

    $(holder).click(function () {
      $(inputElem).focus();
    });
//    $(inputElem).keydown(function (event) {
////        alert(event.keyCode);
//      if (isKeyToNextAllowedSpaceNoEnter(event.keyCode)) addBubbleToListByElem(inputElem, inputToSubmit, type);
//    });
    $(inputElem).keyup(function (event) {
        if (isKeyToNextAllowedSpace(event.keyCode)) addBubbleToListByElem(inputElem, inputToSubmit, type);
    });
//    $(inputElem).blur(function () {
//      addBubbleToListByElem(inputElem, inputToSubmit);
//    });
}
function addBubbleToListByElem(inputElem, inputToSubmit, type) {
    if($(inputElem).hasClass('labelHighlight')) return;
    var tags = [];
    var tags2 = [];
    var tagAdded = false;
    var tag = $.trim($(inputElem).val());
    if (tag.indexOf('/') >= 0 && (type && type.indexOf('Cust') >= 0)) {
        showErrMsgDialog('Forward slash (/) charcter not allowed for custom field value.',[420,115]);
        return;
    }
    tags = tag.split(',');
    $.each(tags,function(i,n) {
        tags2 = n.split(';');
        $.each(tags2, function(j,m) {
            var tagVal = $.trim(m);
            if (tagVal != '' && !(inListByElem(inputToSubmit, tagVal))) {
                doAddBubbleToListByElem(inputElem, inputToSubmit, type, tagVal);
                tagAdded = true;
            }
        });
    });
    if (tagAdded) {
        processPostAddDeleteBubble(inputElem, inputToSubmit, type);
        if ($('.mmQ').size() > 0) setQHintPos();
    }
    $(inputElem).val('');
}
function doAddBubbleToListByElem(inputElem, inputToSubmit, type, tag) {
    var content = '';
    content = '<li class="bit-box">';
    content += tag + '<span class="closebutton mmImg2" onclick="removeBubbleFromListByElem(\'' + tag + '\', this, \'' + type + '\');">&nbsp;</span></li>';
    $(inputElem).parent().before(content);
    var tags = $(inputToSubmit).val();
    if (tags == '') tags = tag;
    else tags += ',' + tag;
    $(inputToSubmit).val(tags);
}
function bulbOnOff(bulb, action) {
    if (action == 'on') {
        $(bulb).next().hide();
        $(bulb).show();
    }
    else {
        $(bulb).hide();
        $(bulb).next().show();
    }
}
function addBubbleListToListByElem(inputElem, inputToSubmit, tagListStr, type) {
    var tagList = tagListStr.split(',');
    $.each(tagList,function(i,n) {
        var tag = n;
        var content = '';
        content = '<li class="bit-box">';
        content += tag + '<span class="closebutton mmImg2" onclick="removeBubbleFromListByElem(\'' + tag + '\', this, \'' + type + '\');">&nbsp;</span></li>';
        $(inputElem).parent().before(content);
        var tags = $(inputToSubmit).val();
        if (tags == '') tags = tag;
        else tags += ',' + tag;
        $(inputToSubmit).val(tags);
    });
    processPostAddDeleteBubble(inputElem, inputToSubmit, type, tagListStr);
}
function removeBubbleFromListByElem(email, buttonElem, type) {
    var holder = $(buttonElem).closest('ul');
    var inputElem = $(holder).find('input:text');
    var inputToSubmit = $(holder).next();
    var listStr = $(inputToSubmit).val();
    var tmp = listStr.split(',');
    listStr = '';

    for (var i = 0; i < tmp.length; i++) {
        if (tmp[i] != '' && tmp[i] != email) {
            if (listStr == '') listStr = tmp[i];
            else listStr += ',' + tmp[i];
        }
    }
    $(inputToSubmit).val(listStr);
    $(buttonElem).parent().remove();
    processPostAddDeleteBubble(inputElem, inputToSubmit, type, listStr);
}
function resetBubbleInput(inputContainer, type) {
    $('#' + inputContainer + ' .bit-box').remove();
    $('#' + inputContainer).find("input:hidden").val('');
    var txtInput = $('#' + inputContainer).find('input:text');
    $(txtInput).val('').parent().show();
    $(txtInput).labelify('show');

    if (type == 'newTask') {
        bulbOnOff('#ntBulb', 'off');
    }
}

function initTagAutocomplete(input, inputToSubmit, type) {
    $(input).autocomplete(tagAutoCompleteUrl, {
        selectFirst: false,
        minChars: 2,
        matchContains: true,
        multiple: false,
        multipleSeparator: ',',
        autoFill: false,
        cacheLength: 1
    }).result(function(event, item) {
        if (!(inListByElem(inputToSubmit, item + ''))) {
            addBubbleListToListByElem(input, inputToSubmit, item + '', type);
            $(input).val('');
        }
    });

}
function showFloatingElem(target, dim) {
    if (currFloatingElem != null) {
        resetFloatingElem();
    }
    currFloatingElem = target;
    $(target).css(dim).show();
    setTimeout('setupCloseElemOnClick()',500);
}
function setupCloseElemOnClick() {
    $('body').click(function(e) {
          resetFloatingElem();
     });
}
function resetFloatingElem() {
    $(currFloatingElem).hide();
    if ($(currFloatingElem).attr('id').indexOf('newTask') >= 0) {
        $('.taskActivityContainer').css('border-width','1px').addClass('ui-corner-all');
        var targetLinkElem = $('.taskActivityContainer').find('#' + $(currFloatingElem).attr('target'));
        $(targetLinkElem).html($(targetLinkElem).html().replace('&lt;&lt;','&gt;&gt;'));
    }
    $('body').unbind('click');
}
function insertCurrTime(stElem, etElem) {
    var now = new Date();
    var hrs = now.getHours();
    var mins = now.getMinutes();

    if (mins > 30) {
        mins = '00';
        hrs++;
    }
    else mins = 30;
    var ampm = hrs < 12 || hrs ==24? 'am' : 'pm';
    if (hrs > 12) hrs = hrs - 12;
    if (hrs == 0) hrs = 12;
    var stStr = hrs + ':' + mins + ' ' + ampm;
    var etStr = '';
    $.each(timeArr, function(i, n) {
        if (stStr == n[1]) {
            if (i != timeArr.length - 1) etStr = timeArr[i+1][1];
            else etStr = '11:59 pm';
        }
    });
    $(stElem).val(stStr);
    $(etElem).val(etStr);
}
function processCheckbox(cbElem, closestParent) {
    if (cbElem.checked) {
        $(cbElem).closest(closestParent).find('input:checked').removeAttr('checked');
        $(cbElem).attr('checked','checked');
    }
}
// for getting the top left coordinate of elem in relation to the page
function getTopLeft(elm) {
    var x, y = 0;
    //set x to elm’s offsetLeft
    x = elm.offsetLeft;
    //set y to elm’s offsetTop
    y = elm.offsetTop;
    //set elm to its offsetParent
    elm = elm.offsetParent;

    //use while loop to check if elm is null
    // if not then add current elm’s offsetLeft to x
    //offsetTop to y and set elm to its offsetParent
    while(elm != null)
     {
        x = parseInt(x) + parseInt(elm.offsetLeft);
        y = parseInt(y) + parseInt(elm.offsetTop);
        elm = elm.offsetParent;
     }
    return {Top:y, Left: x};
}
function getTimeStamp() {
	return (new Date()).getTime();
}
function mmTs() {
	return (new Date()).getTime();
}
function isChecked(cbName) {
    if (document.getElementById(cbName) == null) return false;
    if (document.getElementById(cbName).checked) return true;
    else return false;
}
// need a better regex so won't need http:// in front
function convertToLinks(x)
{
  function convert(str, p1, offset, s)
  {
    return '<a href="' + p1 + '" target="_blank">' + p1 + '</a>';
  }
  var s = String(x);
    var test = /((\s?)(mailto\:|(news|(ht|f)tp(s?))\:\/\/){1}\S+)/gi;
  return s.replace(test, convert);
}
function isEmail(email) {
    return /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(email);
}
function convertHtmlTags(s) {
    if (!s || s == null || s == '') return '';
    s=s.replace(/&/g,'&amp;');
    s=s.replace(/</g,'&lt;');
    s=s.replace(/>/g,'&gt;');
//    s=s.replace(/\n/g,'<br />\n');
    s=s.replace(/\r/g,'');
    return s;
}
// enforce maxlength for textarea
function enforceMaxLength(inputElem, maxLength) {
    if ($(inputElem).val().length >= maxLength) $(inputElem).val($(inputElem).val().substring(0, maxLength));
}
function inList(list, value) {
    for (var i = 0; i < list.length; i++) {
        if (value == list[i]) return true;
    }
    return false;
}
function checkBlockElem(cbElem, elemToBlock) {
    if (cbElem.checked) {
        $('#' + elemToBlock).block({ message: null });
    }
    else {
        $('#' + elemToBlock).unblock();
    }
}
function extractFileName(what) {
    var answer;
    if (what.indexOf('/') > -1)
        answer = what.substring(what.lastIndexOf('/')+1,what.length);
    else
        answer = what.substring(what.lastIndexOf('\\')+1,what.length);
    return answer;
}
function isValidFileType(what) {
    var ext = what.substring(what.lastIndexOf('.')+1,what.length).toLowerCase();
    return !(ext == 'exe' || ext == 'dll' || ext == 'ocx' || ext == 'com' || ext == 'bat');
}
function dialogWindowClosed(obj, data) {
    if (typeof document.body.style.maxHeight === "undefined") {//if IE 6
        $('#TB_HideSelect').trigger("unload").unbind().remove();
    }
    $('.ui-dialog-buttonpane').unblock();
}
function checkUncheckAllCb(allCb, container) {
    if ($(container).find('input:checkbox').size() == $(container).find('input:checked').size())
        $(allCb).attr('checked','checked');
    else
        $(allCb).removeAttr('checked');
}
function checkAll(cbElem, container) {
    if (cbElem.checked) {
        $(container).find('input:checkbox').attr('checked','checked');
    }
    else {
        $(container).find('input:checkbox').removeAttr('checked');
    }
}
function checkAllCb(checked, container) {
    if (checked) {
        $(container).find('input:checkbox').attr('checked','checked');
    }
    else {
        $(container).find('input:checkbox').removeAttr('checked');
    }
}
function selectAllCb(cb, formName) {
    if ($(cb).attr('checked')) {
        $('#' + formName + ' input[type = "checkbox"]').attr('checked','checked');
    }
    else {
        $('#' + formName + ' input[type = "checkbox"]').removeAttr('checked');
    }
}
function initTextareaAutoHeight() {
    $('textarea.regular').data('doneSetup','y');
    $('textarea').each(function(i,n) {
        setupTextareaAutoHeight(n, null);
    });
}
function setupTextareaAutoHeight(textbox, divClass) {
    if ($(textbox).data('doneSetup') == 'y') return;

    var targetDiv = getTargetDivForTextbox(textbox);
    setupTextareaAutoHeight2(textbox, divClass, targetDiv);
    textbox.onpaste = function() { setTimeout(function() {
        sizeTextarea($(textbox), targetDiv);
        if ($(textbox).attr('id') == 'shareText') sTxtLimit();
    },500); };
}
var times = function(string, number) {
                    for (var i = 0, r = ''; i < number; i ++) r += string;
                    return r;
                };
function setupTextareaAutoHeight2(textbox, divClass, targetDiv) {
    $(textbox).css('overflow-y','hidden');
    $(textbox).height(minTextboxHeight + growBy);

    if (!targetDiv) targetDiv = getTargetDivForTextbox(textbox, divClass);

    $(textbox).keyup(function() { sizeTextarea(textbox, targetDiv); });
    //$(textbox).click(function() { sizeTextarea(textbox, targetDiv); });
    $(textbox).data('doneSetup','y');
    return targetDiv;
}
function getTargetDivForTextbox(textbox, divClass) {
    var $this       = $(textbox);
    var id = mmTs();
            var shadow = $('<div id="' + id + '" class="tbDiv"></div>').css({
                position:   'absolute',
                top:        -10000,
                left:       -10000,
                width:      $(textbox).innerWidth(),
                fontSize:   $this.css('fontSize'),
                fontFamily: $this.css('fontFamily'),
                lineHeight: $this.css('lineHeight'),
                resize:     'none'
            }).appendTo(document.body);
    if (divClass) $(shadow).addClass(divClass);
    $this.attr('tbDivId', id);
    return shadow;
}
function sizeTextarea(textbox, targetDiv) {
    var text = $(textbox).val().replace(/<br \/>&nbsp;/, '<br />')
                              .replace(/<|>/g, ' ')
                              .replace(/&/g,"&amp;")
                              .replace(/\n/g, '<br />&nbsp;');
    $(targetDiv).html(text);
    var textHeight = $(targetDiv).height();
    if ( textHeight > maxTextboxHeight ){
      textHeight = maxTextboxHeight ;
      $(textbox).css('overflow', 'auto');
    }
    if ( textHeight < minTextboxHeight ) {
      textHeight = minTextboxHeight ;
    }
    $(textbox).height(textHeight + growBy);
}
function resetTextareaHeight(textbox) {
    setTimeout(function() {
        $(textbox).height(minTextboxHeight + growBy).css('overflow-y','hidden');
    }, 500);
 }
function cleanUpTbDiv() {
    $.each($('div.tbDiv'), function (i,n) {
        if ($('textarea[tbDivId="' + $(n).attr('id') + '"]').size() == 0) $(n).remove();
    });
}
function isKeyToNext(key) {
    if (key == 13 || key == 9 || key == 188 || key == 59 || key == 32) return true;
    return false;
}
function isKeyToNextAllowedSpace(key) {
    if (key == 13 || key == 9 || key == 188 || key == 59) return true;
    return false;
}
function isKeyToNextAllowedSpaceNoEnter(key) {
    if (key == 9 || key == 188 || key == 59) return true;
    return false;
}
function inEmailList(inputName, email) {
    var emails = $('#' + inputName).val();
    var tmp = emails.split(',');
    for (var i = 0; i < tmp.length; i++)
        if (tmp[i] == email) return true;
    return false;
}
function inEmailListByElem(inputElem, email) {
    var emails = $(inputElem).val();
    var tmp = emails.split(',');
    for (var i = 0; i < tmp.length; i++)
        if (tmp[i] == email) return true;
    return false;
}
function inListByElem(inputElem, email) {
    var emails = $(inputElem).val();
    var tmp = emails.split(',');
    for (var i = 0; i < tmp.length; i++)
        if (tmp[i] == email) return true;
    return false;
}
// script by Josh Fraser (http://www.onlineaspect.com)
// return the offset in milliseconds and daylight saving. ex: -180000,1 or -180000,0 (0-no DST, 1-has DST)
function calculateZoneOffset() {
	var rightNow = new Date();
	var jan1 = new Date(rightNow.getFullYear(), 0, 1, 0, 0, 0, 0);  // jan 1st
	var june1 = new Date(rightNow.getFullYear(), 6, 1, 0, 0, 0, 0); // june 1st
	var temp = jan1.toGMTString();
	var jan2 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));
	temp = june1.toGMTString();
	var june2 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));
	var std_time_offset = (jan1 - jan2);
	var daylight_time_offset = (june1 - june2);
	var dst;
	if (std_time_offset == daylight_time_offset) {
		dst = "0"; // daylight savings time is NOT observed
	} else {
		// positive is southern, negative is northern hemisphere
		var hemisphere = std_time_offset - daylight_time_offset;
		if (hemisphere >= 0)
			std_time_offset = daylight_time_offset;
		dst = "1"; // daylight savings time is observed
	}
    return std_time_offset+","+dst;
}
function isValidDate(value, element) {
    var dateStr = $.trim(value);
    var targetElem = $(element).prev();
    if (dateStr == '') {
        $(targetElem).val('');
        return true;
    }
    try {
        var date = $.datepicker.parseDate( userDateFormat, dateStr );
        $(targetElem).val($.datepicker.formatDate( "mm/dd/yy", date ));
        return true;
    }
    catch (ex) {
        return false;
    }
}
function mmInsertDate(elem) {
    var dateStr = $(elem).val();
    var targetElem = $(elem).next();
    if (dateStr == '') $(targetElem).val('');
    else {
        var date = $.datepicker.parseDate( "mm/dd/yy", dateStr );
        $(targetElem).val($.datepicker.formatDate( userDateFormat, date ));
    }
}
function brintDPToTop(inp, dp) {
    $(dp.dpDiv).css("z-index", "2000");
}
function enableDateField(inp, dp) {
    //$('#' + dp.id).removeAttr('readonly');
}
function initSuedoElem(suedoElem, targetElem, targetInput) {
    $(suedoElem).bind('click focus keydown keypress',function() {
        $(targetElem).show();
        $(this).hide();
        $(targetInput).focus();
    });
    $(targetInput).blur(function() {
      setTimeout(function() {
        if ($(targetInput).val() == '') {
          $(suedoElem).show();
          $(targetElem).hide();
        }
      }, 1000);
    });
}
function setUserDateFormat(locale) {
    try {
      userDateFormat = mmDateFormat[locale];
      userLanguage = locale.split('_')[0];
    }
    catch(ex) {
      userDateFormat = 'mm/dd/yy';
      userLanguage = 'en';
    }
    if (!userDateFormat) {
      userDateFormat = 'mm/dd/yy';
      userLanguage = 'en';
    }
}
function showModalMsgDialog(msg, dimension) {
    if (dimension == null) {
        dimension = getMsgDlgDimension(msg);
    }
    if ($('#mpModalMsgDialog').size() == 0) {
        $('body').append('<div id="mpModalMsgDialog" class="mmDialog" title="Message from Manymoon"><div class="mmDialogBody" style="margin-top:10px;"><span id="mpModalMsgDiv" class="mmImg mmInfoWithText">' + msg + '</span></div></div>');
        $("#mpModalMsgDialog").dialog({
            width:dimension ? dimension[0] : 350,
            height:dimension ? dimension[1] : 115,
            minHeight:80,
            bgiframe: true,
            modal: true
        });
    }
    else {
        $('.ui-dialog-buttonpane').unblock();
        $('#mpModalMsgDiv').html(msg);
        if (dimension) {
            $('#mpModalMsgDialog').dialog('option', 'width', dimension[0]);
            $('#mpModalMsgDialog').dialog('option', 'height', dimension[1]);
        }
        $('#mpModalMsgDialog').dialog('open');
    }
}
function showMsgDialog(msg, dimension, action, id) {
    if (dimension == null) {
        dimension = getMsgDlgDimension(msg);
    }
    if ($('#mpMsgDialog').size() == 0) {
        $('body').append('<div id="mpMsgDialog" class="mmDialog" title="Message from Manymoon"><div class="mmDialogBody" style="margin-top:10px;"><span id="mpMsgDiv" class="mmImg mmInfoWithText">' + msg + '</span></div></div>');
        $("#mpMsgDialog").dialog({
            width:dimension ? dimension[0] : 350,
            height:dimension ? dimension[1] : 115,
            minHeight:80,
            bgiframe: true,
//            modal: true,
            buttons: {
                Ok: function() {
                    $(this).dialog('close');
                    if($(this).data('action') == 'teamMigrate') {
//                        window.location.reload();
                    }
                    else if($(this).data('action') == 'teamRenew') {
                        window.location = $(this).data('actionId');
                    }
                    else if($(this).data('action') == 'newEv') {
                        postMkEvent($(this).data('actionId'));
                    }
                    else if($(this).data('action') == 'goHome') {
                        window.location = homeURL;
                    }
                }
            }
        });
    }
    else {
        $('.ui-dialog-buttonpane').unblock();
        $('#mpMsgDiv').html(msg);
        if (dimension) {
            $('#mpMsgDialog').dialog('option', 'width', dimension[0]);
            $('#mpMsgDialog').dialog('option', 'height', dimension[1]);
        }
        $('#mpMsgDialog').dialog('open');
    }
    $('#mpMsgDialog').data('action',action);
    $('#mpMsgDialog').data('actionId',id);
}
function showNoBtnMsgDialog(msg, dimension, action, id) {
    if (dimension == null) {
        dimension = getMsgDlgDimension(msg);
    }
    var dlg = '#mpNoBtnMsgDialog';
    if ($(dlg).size() == 0) {
        $('body').append('<div id="mpNoBtnMsgDialog" class="mmDialog" title="Message from Manymoon"><div class="mmDialogBody" style="margin-top:10px;"><span id="mpMsgDiv" class="mmImg mmInfoWithText">' + msg + '</span></div></div>');
        $(dlg).dialog({
            width:dimension ? dimension[0] : 350,
            height:dimension ? dimension[1] : 115,
            minHeight:80,
            bgiframe: true
        });
    }
    else {
        $('.ui-dialog-buttonpane').unblock();
        $(dlg).html(msg);
        if (dimension) {
            $(dlg).dialog('option', 'width', dimension[0]);
            $(dlg).dialog('option', 'height', dimension[1]);
        }
        $(dlg).dialog('open');
    }
    $(dlg).data('action',action);
    $(dlg).data('actionId',id);
}
function getMsgDlgDimension(msg) {
    if (msg.length < 40) return [350, 115];
    else if (msg.length < 80) return [350, 140];
//    else if (msg.length < 120) return [450,140];
    else return [450, 140];
}
function showErrMsgDialog(msg, dimension, action, id) {
    if (dimension == null) {
        dimension = getMsgDlgDimension(msg);
    }
    if ($('#mpErrMsgDialog').size() == 0) {
        $('body').append('<div id="mpErrMsgDialog" class="mmDialog" title="Message from Manymoon"><div class="mmDialogBody" style="margin-top:10px;"><span id="mpErrMsgDiv" class="mmImg mmErrorWithText">' + msg + '</span></div></div>');
        $("#mpErrMsgDialog").dialog({
            width:dimension ? dimension[0] : 350,
            height:dimension ? dimension[1] : 115,
            minHeight:80,
            bgiframe: true,
//            modal: true,
            buttons: {
                Ok: function() {
                    $(this).dialog('close');
                    if($(this).data('action') == 'refresh') {
                        window.location.reload();
                    }
                    else if($(this).data('action') == 'login') {
                        window.location = loginUrl;
                    }
                    else if($(this).data('action') == 'showTaskDueDP') {
                        var taskId = $(this).data('actionId');
                        var targetElem = $('#tDate_' + taskId);
                        changeTaskDueDate(targetElem, taskId);
                    }
                    else if($(this).data('action') == 'mkEvGCalErr') {
                        var eventId = $(this).data('actionId');
                        postShareEvent(eventId);
                    }
                }
            }
        });

    }
    else {
        $('.ui-dialog-buttonpane').unblock();
        $('#mpErrMsgDiv').html(msg);
        if (dimension) {
            $('#mpMsgDialog').dialog('option', 'width', dimension[0]);
            $('#mpMsgDialog').dialog('option', 'height', dimension[1]);
        }
        $('#mpErrMsgDialog').dialog('open');
    }
    $('#mpErrMsgDialog').data('action',action);
    $('#mpErrMsgDialog').data('actionId',id);
}
function showConfirmMsgDialog(msg, action, id, dimension, extraObj) {
    if (dimension == null) {
        dimension = getMsgDlgDimension(msg);
    }
    if ($('#mpConfirmMsgDialog').size() == 0) {
        $('body').append('<div id="mpConfirmMsgDialog" class="mmDialog" title="Message from Manymoon"><div class="mmDialogBody" style="margin-top:10px;"><span id="mpConfirmMsgDiv" class="mmImg mmInfoWithText">' + msg + '</span></div></div>');
        $("#mpConfirmMsgDialog").dialog({
            width:dimension ? dimension[0] : 350,
            height:dimension ? dimension[1] : 115,
            minHeight:80,
            bgiframe: true,
            modal: true,
            buttons: {
                Ok: function() {
                    var action = $(this).data('action');
                    if(action == 'gAppsImport') {
                        doSubmitGAppsImport();
                        showDialogButtonPaneMsg('Please wait...');
                        return;
                    }
                    else if(action == 'delGoal') {
                        showDialogButtonPaneMsg('Please wait...');
                        $.get(deleteGoalUrl, {'id':$(this).data('actionId'),ts:mmTs()}, function(data){
                                if (data == 'success') {
                                    if (document.referrer.indexOf('team/admin') > 0) window.location = teamAdminUrl + '&target=goal';
                                      else window.location = homeURL;
                                  }
                                else {
                                    $('#mpConfirmMsgDialog').dialog('close');
                                    $('.ui-dialog-buttonpane').unblock();
                                    showErrMsgDialog(data,[200,115]);
                                }
                            }
                        );
                        return;
                    }
                    $(this).dialog('close');
                    if(action == 'updateStatus') {
                        doSaveUserTextStatus(true);
                    }
                    else if(action == 'postLink') {
                        previewLink(null, true);
                    }
                    else if(action == 'hideDoc') {
                        doHideDoc($(this).data('actionId'), 'hide');
                    }
                    else if(action == 'unhideDoc') {
                        doHideDoc($(this).data('actionId'), 'unhide');
                    }
                    else if(action == 'upgrade') {
                        window.location = $('#upgradeLink').attr('href');
                    }
                    else if(action == 'sModDocUpload') {
                        doAddDoc('sModule', null, null, true);
                    }
                    else if(action == 'sModDocUpload_v2') {
                        doShareDoc();
//                        doFileUpload_v2(sModUploadArr, 0, 'sMod');
                    }
                    else if(action == 'addEvMem') {
                        doAddEvMemViaDlg();
                    }
                    else if(action == 'updateGoalMem') {
                        doUpdateGoalMember($(this).data('actionId'));
                    }
                    else if(action == 'archiveGoal_myGoals') {
                        archiveGoalRemote($(this).data('actionId'), true);
                    }
                    else if(action == 'archiveGoal_goalHome') {
                        archiveGoal(true);
                    }
                    else if(action == 'delTmpl') {
                        doDeleteTemplate($(this).data('actionId'), $(this).data('extraObj'));
                    }
                },
                Cancel: function() {
                    var action = $(this).data('action');
                    if(action == 'updateStatus') {
                        $('#sharedWywo_input').focus();
                    }
                    else if(action == 'postLink') {
                        $('#sLink_input').focus();
                    }
                    $(this).dialog('close');
                }
            }
        });

    }
    else {
        $('.ui-dialog-buttonpane').unblock();
        $('#mpConfirmMsgDiv').html(msg);
        if (dimension) {
            $('#mpMsgDialog').dialog('option', 'width', dimension[0]);
            $('#mpMsgDialog').dialog('option', 'height', dimension[1]);
        }
        $('#mpConfirmMsgDialog').dialog('open');
    }
    $('#mpConfirmMsgDialog').data('action',action);
    $('#mpConfirmMsgDialog').data('actionId',id);
    $('#mpConfirmMsgDialog').data('extraObj',extraObj);
}
function processPostAddDeleteBubble(inputElem, inputToSubmit, type) {
    if (type && type != '') {
        if (type == 'userTag') {
            profileChanged = true;
        }
        else if (type.indexOf('Tag') >= 0) {
            var listStr = $(inputToSubmit).val();
            var limit = 5;//(type == 'ntTag' || type == 'otTag') ? 2 : type == 'ngTag' ? 1 : 5;
            var count = 0;
            if (listStr != '') count = listStr.split(',').length;
            if (count >= limit) $(inputElem).parent().hide();
            else $(inputElem).parent().show();
            if (!isGadget && (type == 'ntTag' || type == 'otTag' || type == 'ngTag')) {
                var targetBulb = tagBulbArr[type];
                if (count > 0) {
                    $.post(getSuggestCountURL, {tags:listStr}, function (data) {
                        var scount = parseInt(data);
                        if (scount > 0) {
                            bulbOnOff(targetBulb, 'on');
                        }
                        else {
                            bulbOnOff(targetBulb, 'off');
                        }
                    });

                }
                else {
                    bulbOnOff(targetBulb, 'off');
                }
            }
        }
    }
}
function initLeftMenu(noborder) {
    $('.rightPanel').show();
    if ($('.actionMenu').size() > 0) {
        $('.actionMenu li').unbind('mouseover');
        $('.actionMenu li').unbind('mouseout');
          $('.actionMenu li[target]').mouseover(function() {
            if (!$(this).hasClass('selected') && !noborder) $(this).addClass('actionMenuHover');
          });
          $('.actionMenu li[target]').mouseout(function() {
              if (!$(this).hasClass('selected')) $(this).removeClass('actionMenuHover');
          });
//          $('.actionMenu .selected').unbind('click');
          $('.actionMenu .greyOut').unbind();
    }

    $('#leftActionMenu li[index]').click(function() {
      var index = $(this).attr('index');
      reloader.currentSection = index;
      reloader.update(index);
      var target = $(this).attr('target');
      $('.menuItem').hide();
      $('.menuItem_sub').hide();
      $('#' + target).show();
      $('#' + target + '_sub').show();
      $('#leftActionMenu li[target]').removeClass('selected').css('background-color','');
      if (!noborder) $('#leftActionMenu li[target]').css('border-bottom','1px solid #A6C9E2');
      $(this).addClass('selected').removeClass('actionMenuHover').css('border','none');
      $(this).prev().css('border-width','0px');
    $.cookie(pageCookie, target, { path: '/'});
  });

  $('#leftActionMenu li[target]').each(function(i,n) {
      $('#' + $(n).attr('target')).addClass('menuItem');
      $('#' + $(n).attr('target') + '_sub').addClass('menuItem_sub');
      if ($(n).hasClass('selected')) {
          currMenuIndex = $(n).attr('index');
          $(this).prev().css('border-width','0px');
      }
      else {
          $('#' + $(n).attr('target')).hide();
      }
  });
    //team switching
    $('#teamSelected').bind('change', function(){
     $('#teamSelectedForm').submit()
    });
    $('#' + $('#leftActionMenu .selected').attr('target')).show();
}
function doLogo() {
    if ($('#logo').find('a').size() > 0 && !(window.location.pathname.indexOf('users/main') >= 0)) {
        $('#logo').mouseover(function() { $(this).addClass('logoHover'); }).mouseout(function() { $(this).removeClass('logoHover'); });
    }
}
function initDocUpload(upId, type) {
    var myUpload = $(upId).upload({
        name: 'user_document',
        action: uploadFileUrl,
        enctype: 'multipart/form-data',
        params: {}
    });
    myUpload.set({
        autoSubmit: false,
        onSubmit: function() { },
        onComplete: function(data) {
            doFileUpload_v2(currUploaderMap.currUploadArr, currUploaderMap.index+1, currUploaderMap.type);
        },
        onSelect: function() {
    //            $(upId).parent().hide();
            var targetP = $(upId).parent();
            var targetForm = targetP.find('form');
            $(upId).addClass('upFileHolder_' + type);
            targetForm.attr('upId', upId);
            targetP.hide().find('form input:file').attr('doc_' + type,'y');
            var elemName = (new Date()).getTime();
            $(targetP).closest('li').prepend('<div id="' + elemName + '">&nbsp;</div>');
            initDocUpload('#' + elemName, type);

            var fnLimit = 15;
            var tmpName = myUpload.filename();
            var tmp = tmpName;
            if (type == 'newTask' && tmpName.length > fnLimit) tmpName = tmpName.substring(0, fnLimit) + '...';
            else if (type == 'sDoc' && tmpName.length > docDisplayLimit) tmpName = tmpName.substring(0, docDisplayLimit) + '...';
            var content = '<div><span class="mmImg2 mmGenericDoc" title="' + tmp + '">' + tmpName + '</span>';
            content += ' <span class="mmsmall_nm">[<span class="mm_lk" onclick="removeDocFromList(this, \'1clickFile\',\'' + type + '\',\'' + upId + '\');">Remove</span>]';
            content += '<br/><input type="checkbox" class="mmCheckbox_mid" value="y" id="upGDocCb_' + upId + '" onclick="doCheckbox(this);"' + (uafPref ? 'checked' : '') + '/>Store in Google Docs</span></div>';

            if (type == 'sDoc') {
                $('#sModuleDocDiv').append(content);
                showShareObj('Doc');
            }
            else if (type == 'newTask') $('#gDocDiv_q').append(content);
            else if (type == 'oldTask') $('#gDocDiv').append(content);
            else if (type == 'newEvent') $('#newEvDocDiv').append(content);
            setQHintPos();
        }
    });
    sModUploadArr.push(myUpload);
}