﻿/// <reference path="jquery-1.3.2.js" />
String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, "");
};
String.prototype.ltrim = function() {
    return this.replace(/^\s+/, "");
};
String.prototype.rtrim = function() {
    return this.replace(/\s+$/, "");
};
jQuery.fn.allData = function() {
    var intID = jQuery.data(this.get(0));
    return (jQuery.cache[intID]);
};

var d = new Date();
function Session(prjID, prjName, conID, conName, fileID, fileName, folderID, folderName, companyID, companyName, userID, userName, contactSortBy, noteSortBy, projectSortBy, fileSortBy, imageSortBy, viewID, viewName, id, uploadServer, folderType) {
    var _id = id;
    var _uploadServer = uploadServer;

    var _project = prjID;
    var _projectName = prjName
    var _sProject; 
    var _sProjectName;

    var _file = fileID;
    var _fileName = fileName;

    var _sFile;
    var _sFileName;

    var _folder = folderID;
    var _folderName = folderName;
    var _folderType = folderType;

    var _sFolder;
    var _sFolderName;

    var _contact = conID;
    var _contactName = conName;

    var _sContact;
    var _sContactName;
    var _user = userID;
    var _userName = userName;

    var _company = companyID;
    var _companyName = companyName;

    var _context;
    var _multi; //json object

    var _contactSortBy = contactSortBy;
    var _noteSortBy = noteSortBy;
    var _projectSortBy = projectSortBy;
    var _fileSortBy = fileSortBy;
    var _imageSortBy = imageSortBy;

    var _view = viewID;
    var _viewName = viewName;
    
    var _sTitle;
    var _sNote;

    return {
        setter: function(context, id, name) {
            this.setContext(context);
            switch (context) {
                case "I": // IMAGE
                case "F": // FILE
                    this.setSelectedFile(id, name);
                    break;

                case "H": // FOLDER
                case "A": // ALBUM
                    this.setSelectedFolder(id, name);
                    break;

                case "P": // PROJECT
                    this.setSelectedProject(id, name);
                    break;

                case "C": // CONTACT
                case "M": // COMPANY
                    this.setSelectedContact(id, name);
                    break;
                    
                case "N": //NOTE
                    this.setSelectedNote(id, name);
                    break;
            }
        },
        id: function() { return _id; },
        uploadServer: function() { return _uploadServer; },
        getProject: function() {
            if (_context != "P") {
                return _project;
            }
            else {
                return _sProject;
            }
        },
        getProjectName: function() {
            if (_context != "P") { return _projectName; } else { return _sProjectName; }
        },
        setSelectedProject: function(id, name) {
            _sProject = id;
            _sProjectName = name;
        },
        setProject: function(id, name) {
            _project = id;
            _projectName = name;
        },
        getFile: function() {
            if (_context == "F" || _context == "I") { return _sFile; } else { return _file; }
        },
        getFileName: function() {
            if (_context == "F" || _context == "I") { return _sFileName; } else { return _fileName; }
        },
        setSelectedFile: function(id, name) {
            _sFile = id;
            _sFileName = name;
        },
        getFolder: function(ignoreContext) {
            if (ignoreContext) {
                return _folder;
            }
            else {
                if (_context == "H" || _context == "A") { return _sFolder; } else { return _folder; }
            }
        },
        getFolderName: function(ignoreContext) {
            if (ignoreContext) {
                return _folderName;
            }
            else {
                if (_context == "H" || _context == "A") { return _sFolderName; } else { return _folderName; }
            }
        },
        getFolderType: function() {
            return _folderType;

        },
        setSelectedFolder: function(id, name) {
            _sFolder = id;
            _sFolderName = name;
        },
        setMulti: function(multi) { _multi = multi; },
        getMulti: function() {
            return _multi;
        },
        getUser: function() {
            return _user;
        },
        getUserName: function() {
            return _userName;
        },
        getCompany: function() {
            return _company;
        },
        getCompanyName: function() {
            return _companyName;
        },
        setSelectedNote: function(id, name) {
            _sNote = id;
            _sTitle = name;
        },
        getNote: function() {
            return _sNote;
        },
        getTitle: function() {
            return _sTitle;
        },        
        getContact: function() {
            if (_context == "C" || _context == "M") { return _sContact; } else { return _contact; }
        },
        getContactName: function() {
            if (_context == "C" || _context == "M") { return _sContactName; } else { return _contactName; }
        },
        setSelectedContact: function(id, name) {
            _sContact = id;
            _sContactName = name;
        },
        getContext: function() {
            return _context;
        },
        setContext: function(context) {
            _context = context;
        },
        getContactSortBy: function() {
            return _contactSortBy;
        },
        getNoteSortBy: function() {
            return _noteSortBy;
        },
        getProjectSortBy: function() {
            return _projectSortBy;
        },
        getFileSortBy: function() {
            return _fileSortBy;
        },
        getImageSortBy: function() {
            return _imageSortBy;
        },
        getView: function() {
            return _view;
        },
        getViewName: function() {
            return _viewName;
        }
    };
}
var s = Session();
function Modals() {
    return {
        $SoAContact: function() {
            if (!this._SoAContact) { this._SoAContact = $("#modalSearchOrAddContact"); }
            return this._SoAContact;
        },
        $SoACompany: function() {
            if (!this._SoACompany) { this._SoACompany = $("#modalSearchOrAddCompany"); }
            return this._SoACompany;
        },
        $alert: function() {
            if (!this._alert) { this._alert = $("#modalAlert"); }
            return this._alert;
        },
        $contact: function() {
            if (!this._contact) { this._contact = $("#modalContact"); }
            return this._contact;
        },
        $contactSearchResults: function() {
            if (!this._contactSearchResults) { this._contactSearchResults = $("#modalContactSearchResults"); }
            return this._contactSearchResults;
        },
        $confirmAddContact: function() {
            if (!this._confirmAddContact) { this._confirmAddContact = $("#modalConfirmAddContact"); }
            return this._confirmAddContact;
        },
        $duplicateProject: function() {
            if (!this._duplicateProject) { this._duplicateProject = $("#modalDuplicateProject"); }
            return this._duplicateProject;
        },
        $note: function() {
            if (!this._note) { this._note = $("#modalNote"); }
            return this._note;
        },
        $feedback: function() {
            if (!this._feedback) { this._feedback = $("#modalFeedback"); }
            return this._feedback;
        },
        $help: function() {
            if (!this._help) { this._help = $("#modalHelp"); }
            return this._help;
        },
        $invite: function() {
            if (!this._invite) { this._invite = $("#modalInvite"); }
            return this._invite;
        },
        $textEntry: function() {
            if (!this._textEntry) { this._textEntry = $("#modalTextEntry"); }
            return this._textEntry;
        },
        $manageAdministrators: function() {
            if (!this._manageAdministrators) { this._manageAdministrators = $("#modalManageAdministrators"); }
            return this._manageAdministrators;
        },
        $confirm: function() {
            if (!this._confirm) { this._confirm = $("#modalConfirm"); }
            return this._confirm;
        },
        $project: function() {
            if (!this._project) { this._project = $("#modalProject"); }
            return this._project;
        },
        $company: function() {
            if (!this._company) { this._company = $("#modalCompany"); }
            return this._company;
        },
        $share: function() {
            if (!this._share) { this._share = $("#modalShare"); }
            return this._share;
        },
        $move: function() {
            if (!this._move) { this._move = $("#modalMove"); }
            return this._move;
        },
        $upload: function() {
            if (!this._upload) { this._upload = $("#modalUpload"); }
            return this._upload;
        },
        $textMessage: function() {
            if (!this._textMessage) { this._textMessage = $("#modalTextMessage"); }
            return this._textMessage;
        }
    };
}
var m = Modals();
var ConstructionOnline = {
    decode: function(val) {
        return val.toString().replace("&amp;", "&").replace("&lt;", "<").replace("&gt;", ">");
    },
    alert: function(message) {
        ConstructionOnline.modals.alert_modal.show(message);
    },
    batch: false,
    clearNotification: function(id, all) {
        if (all) {
            //dont wait for a response, just wipe them out.
            ConstructionOnline.modal_actions.ajaxPost({ action: "ClearNotification", ALL: 1 })
            $("#ctl00_dlNotifications").stop().hide("fast");
            $("#ctl00_divNotificationsExclamation").stop().fadeOut("fast");
            $("#ctl00_divNotificationsLabel").text("Notifications (0)");
        } else {
            ConstructionOnline.modal_actions.ajaxPost({ action: "ClearNotification", NC: id })
            //$("#N" + id).hide("fast");
        }
        return false;
    },
    clickAddCompany: function() {
        Add("M");
    },
    clickAddProject: function() {
        Add("P");
    },
    clickAddAlbum: function() {
        Add("A");
    },
    clickAddFolder: function() {
        Add("H");
    },
    clickAddContact: function() {
        Add("C");
    },
    clickAddNote: function() {
        Add("N");
    },
    clickDelete: function() {
        Delete(s.getContext());
    },
    clickDownload: function() {
        Download(s.getContext());
    },
    clickEdit: function() {
        Edit(s.getContext());
    },
    clickMove: function() {
        Move(s.getContext());
    },
    clickShare: function() {
        Share(s.getContext());
    },
    clickUpload: function() {
        Upload();
    },
    clickView: function() {
        View(s.getContext());
    },
    clickTextMessage: function() {
        TextMessage(s.getContext());
    },
    deleteAnnouncement: function(id, title) {
        s.setSelectedNote(id, title);        
        Delete("N");
    },
    editAnnouncement: function(id, title) {
        s.setSelectedNote(id, title);        
        Edit("N");
    },
    getFileIcon: function(fileName) {
        switch (fileName) {
            case "P":
                return "FileTypesProject";
            case "H":
                return "FileTypesFolder";
            case "I":
                return "FileTypesIMG";
            case "A":
                return "FileTypesAlbum";
            default:
                if (fileName.match(new RegExp('\.(xlt|xls|csv|xlsx)$', 'i'))) { return "FileTypesXLS"; }
                else if ((fileName.match(new RegExp('\.(pdf)$', 'i')))) { return "FileTypesPDF"; }
                else if ((fileName.match(new RegExp('\.(ppt)$', 'i')))) { return "FileTypesPPT"; }
                else if ((fileName.match(new RegExp('\.(doc|dot|docx)$', 'i')))) { return "FileTypesDOC"; }
                else if ((fileName.match(new RegExp('\.(bmp|jpg|jpeg|png|gif|img|tif|tiff|ico|pic)$', 'i')))) { return "FileTypesIMG"; }
                else if ((fileName.match(new RegExp('\.(swf|avi|mpg|ram|wmv|mov)$', 'i')))) { return "FileTypesAVI"; }
                else if ((fileName.match(new RegExp('\.(mp3|wav|mid|wma|au|ogg)$', 'i')))) { return "FileTypesMP3"; }
                else if ((fileName.match(new RegExp('\.(csz|udz|csdb|udadb)$', 'i')))) { return "FileTypesCSZ"; }
                else if ((fileName.match(new RegExp('\.(exe|bat|cmd|bin|hqx|com|vbs|js)$', 'i')))) { return "FileTypesCMD"; }
                else if ((fileName.match(new RegExp('\.(zip|rar|z|gz|sit|7z|bz)$', 'i')))) { return "FileTypesZIP"; }
                else if ((fileName.match(new RegExp('\.(zip|rar|z|gz|sit|7z|bz|tar)$', 'i')))) { return "FileTypesZIP"; }
                else if ((fileName.match(new RegExp('\.(htm|html|asp|aspx|php|css)$', 'i')))) { return "FileTypesURL"; }
                else if ((fileName.match(new RegExp('\.(rtf|txt)$', 'i')))) { return "FileTypesTXT"; }
                else if ((fileName.match(new RegExp('\.(bim)$', 'i')))) { return "FileTypesCadsoft"; }
                else if ((fileName.match(new RegExp('\.(spd)$', 'i')))) { return "FileTypesSoftplan"; }
                else if ((fileName.match(new RegExp('\.(dxf)$', 'i')))) { return "FileTypesDXF"; }
                else if ((fileName.match(new RegExp('\.(dwg)$', 'i')))) { return "FileTypesDWG"; }
                else if ((fileName.match(new RegExp('\.(dwt|dwf|dwz)$', 'i')))) { return "FileTypesAutocad"; }
                else if ((fileName.match(new RegExp('\.(plan)$', 'i')))) { return "FileTypesChiefArchitect"; }
                else if ((fileName.match(new RegExp('\.(rvt|rfa|rte)$', 'i')))) { return "FileTypesRevit"; }
                else { return "FileTypesGeneric"; }
        } //end switch
    },
    getFieldThumbnail: function(fieldID) {
        switch (fieldID) {
            case 0:
            case '0':
                return "conFieldCompThumbnail2"
                break;
            case 1:
            case '1':
                return "conFieldProfessionArchThumbnail2"
                break;
            case 2:
            case '2':
                return "conFieldAttThumbnail2"
                break;
            case 3:
            case '3':
                return "conFieldBuildThumbnail2"
                break;
            case 4:
            case '4':
                return "conFieldCMThumbnail2"
                break;
            case 5:
            case '5':
                return "conFieldConThumbnail2"
                break;
            case 6:
            case '6':
                return "conFieldContThumbnail2"
                break;
            case 7:
            case '7':
                return "conFieldDBThumbnail2"
                break;
            case 8:
            case '8':
                return "conFieldDevThumbnail2"
                break;
            case 9:
            case '9':
                return "conFieldEngThumbnail2"
                break;
            case 10:
            case '10':
                return "conFieldGCThumbnail2"
                break;
            case 11:
            case '11':
                return "conFieldLendThumbnail2"
                break;
            case 12:
            case '12':
                return "conFieldOwnThumbnail2"
                break;
            case 13:
            case '13':
                return "conFieldRealThumbnail2"
                break;
            case 14:
            case '14':
                return "conFieldRemThumbnail2"
                break;
            case 15:
            case '15':
                return "conFieldSubThumbnail2"
                break;
            case 16:
            case '16':
                return "conFieldSupThumbnail2"
                break;
            case 17:
            case '17':
                return "conFieldVendThumbnail2"
                break;
            default:
                return "conFieldOtherThumbnail2"
                break;
        }
    },
    hasFlash: function() {
        if (swfobject) {
            return swfobject.hasFlashPlayerVersion("9.0.24");
        } else {
            return false;
        }
    },
    hilite: function(context, id, name, clickRightSidebar) {
        if (clickRightSidebar !== false) {
            clickRightSidebar = true;
        }
        s.setter(context, id, name);

        if (location.href.match("File3.aspx") == "File3.aspx") {
            switch (context) {
                case "I": // IMAGE
                case "F": // FILE
                    $("#rightSidebarButtonUpload").hide()
                    $("#rightSidebarButtonPermissions").hide()
                    $("#rightSidebarButtonShare").show()
                    $("#rightSidebarButtonDownload").show()
                    break;
                case "H": // FOLDER 
                case "A": // ALBUM
                case "P": // PROJECT
                case "N": // NOTE
                    $("#rightSidebarButtonUpload").show()
                    $("#rightSidebarButtonPermissions").show()
                    $("#rightSidebarButtonShare").hide()
                    $("#rightSidebarButtonDownload").hide()
                    break;
            }
        }
        evalToolbar();
        ConstructionOnline.resetHiliting();
        
        if ($("#" + context + id).find(".whiteRows").length > 0) {
            $("#" + context + id).removeClass("noliteRowWhite").addClass("hiliteRowWhite");
        } else {
            $("#" + context + id).addClass("hiliteRow").next(".inlineCommentsArea").addClass("hiliteRow").next(".inlineFilesArea").addClass("hiliteRow");
        }
        
        if ($("#" + context + id).find(".inlineFilesLink").length > 0 && $("#" + context + id).next(".inlineCommentsArea").next(".inlineFilesArea").hasClass("hidden")) {
            ConstructionOnline.master_page.viewInlineFiles($("#" + context + id).find(".inlineFilesLink"));
        }

        if (clickRightSidebar) {
            if ((location.href.match("Profile3.aspx") == "Profile3.aspx")) {
            } else if (location.href.match("ProjectDetails3.aspx") == "ProjectDetails3.aspx") {
            } else {
                ConstructionOnline.showRightSidebar();
            }
        } else if (context == "N") {
            ConstructionOnline.showRightSidebar();
        }
    },
    resetHiliting: function() {
        $(".hiliteRow").removeClass("hiliteRow");
        $(".hiliteRowWhite").removeClass("hiliteRowWhite").addClass("noliteRowWhite");
    },
    hover: function(obj, remove) {
        var $ele = $(obj);       
        var addString = ""
        switch ($ele.attr("id")) {
            case "imgLightBoxAddPhoto": addString = "rsbGalleryAddPhoto"; break;            
            case "imgLightBoxDownload": addString = "rsbGalleryDownload"; break;
            case "imgLightBoxShare": addString = "rsbGalleryShare"; break;
            case "imgToggleComments":                  
                if ($ele.hasClass("rsbGalleryComment") || $ele.hasClass("rsbGalleryCommentSelected")) {
                    addString = "rsbGalleryComment";                
                }else{
                    addString = "rsbGalleryThumbnails";             
                }                
                break; 
                
            case "mbbDelete": addString = "moreMenuButtonDelete"; break;
            case "mbbDownload": addString = "moreMenuButtonDownload"; break;
            case "mbbDuplicateNote": addString = "moreMenuButtonDuplicateNote"; break;
            case "mbbDuplicateProject": addString = "moreMenuButtonDuplicateProject"; break; 
            case "mbbEdit": addString = "moreMenuButtonEdit"; break;
            case "mbbFiles": addString = "moreMenuButtonFiles"; break;
            case "mbbGallery": addString = "moreMenuButtonGallery"; break;
            case "mbbImages": addString = "moreMenuButtonImages"; break;
            case "mbbInvite": addString = "moreMenuButtonInvite"; break;
            case "mbbMove": addString = "moreMenuButtonMove"; break;
            case "mbbPermissions": addString = "moreMenuButtonPermissions"; break;
            case "mbbResend": addString = "moreMenuButtonResend"; break;
            case "mbbShare": addString = "moreMenuButtonShare"; break;
            case "mbbSubfolder": addString = "moreMenuButtonSubFolder"; break;                                 
            case "mbbUpload": addString = "moreMenuButtonUpload"; break;           
            case "moreButtonBarClose": addString = "moreMenuButtonExit"; break;
            case "imgPreviewBack": addString = "galleryBack"; break;
            case "imgPreviewInfo": addString = "galleryInfo"; break;
            case "imgPreviewNext": addString = "galleryNext"; break;
        }
        if (addString.length > 0) {
            if (remove) {
                $ele.removeClass(addString + "Selected").addClass(addString);
            } else {
                $ele.removeClass(addString).addClass(addString + "Selected");
            }            
        }
        
        if ($ele.hasClass("buttonBase58")) {
            $ele.removeClass("buttonBase58").addClass("buttonBase58Hovered");
        } else if ($ele.hasClass("buttonBase58Hovered") && remove) {
            $ele.removeClass("buttonBase58Hovered").addClass("buttonBase58");
        } else if ($ele.hasClass("buttonBase108")) {
            $ele.removeClass("buttonBase108").addClass("buttonBase108Hovered");
        } else if ($ele.hasClass("buttonBase108Hovered") && remove) {
            $ele.removeClass("buttonBase108Hovered").addClass("buttonBase108");
        } else if ($ele.hasClass("buttonBase128")) {
            $ele.removeClass("buttonBase128").addClass("buttonBase128Hovered");
        } else if ($ele.hasClass("buttonBase128Hovered") && remove) {
            $ele.removeClass("buttonBase128Hovered").addClass("buttonBase128");
        } else if ($ele.hasClass("galleryViewAsGallery")) {
            $ele.removeClass("galleryViewAsGallery").addClass("galleryViewAsGallerySelected");
        } else if ($ele.hasClass("galleryViewAsGallerySelected") && remove) {
            $ele.removeClass("galleryViewAsGallerySelected").addClass("galleryViewAsGallery");            
        } else if ($ele.hasClass("newCompanyFooter")) {
            $ele.removeClass("newCompanyFooter").addClass("newCompanyFooterSelected");
        } else if ($ele.hasClass("newCompanyFooterSelected") && remove) {
            $ele.removeClass("newCompanyFooterSelected").addClass("newCompanyFooter");            
        } else if ($ele.hasClass("newContactFooter")) {
            $ele.removeClass("newContactFooter").addClass("newContactFooterSelected");
        } else if ($ele.hasClass("newContactFooterSelected") && remove) {
            $ele.removeClass("newContactFooterSelected").addClass("newContactFooter");            
        } else if ($ele.hasClass("newProjectFooter")) {
            $ele.removeClass("newProjectFooter").addClass("newProjectFooterSelected");
        } else if ($ele.hasClass("newProjectFooterSelected") && remove) {
            $ele.removeClass("newProjectFooterSelected").addClass("newProjectFooter");            
        } else if ($ele.hasClass("uploadFileFooter")) {
            $ele.removeClass("uploadFileFooter").addClass("uploadFileFooterSelected");
        } else if ($ele.hasClass("uploadFileFooterSelected") && remove) {
            $ele.removeClass("uploadFileFooterSelected").addClass("uploadFileFooter");
        } else if ($ele.hasClass("projectsToggle")) {
            $ele.removeClass("projectsToggle").addClass("projectsToggleHovered");
        } else if ($ele.hasClass("projectsToggleHovered") && remove) {
            $ele.removeClass("projectsToggleHovered").addClass("projectsToggle");            
        } else if ($ele.hasClass("filesToggle")) {
            $ele.removeClass("filesToggle").addClass("filesToggleHovered");
        } else if ($ele.hasClass("filesToggleHovered") && remove) {
            $ele.removeClass("filesToggleHovered").addClass("filesToggle");            
        } else if ($ele.hasClass("imagesToggle")) {
            $ele.removeClass("imagesToggle").addClass("imagesToggleHovered");
        } else if ($ele.hasClass("imagesToggleHovered") && remove) {
            $ele.removeClass("imagesToggleHovered").addClass("imagesToggle");            
        } else if ($ele.hasClass("historyToggle")) {
            $ele.removeClass("historyToggle").addClass("historyToggleHovered");
        } else if ($ele.hasClass("historyToggleHovered") && remove) {
            $ele.removeClass("historyToggleHovered").addClass("historyToggle");            
        } else if ($ele.hasClass("moreMenuButton")) {
            $ele.removeClass("moreMenuButton").addClass("moreMenuButtonHovered");
        } else if ($ele.hasClass("moreMenuButtonHovered") && remove) {
            $ele.removeClass("moreMenuButtonHovered").addClass("moreMenuButton");
            
        }
    },
    preloadImages: function() {
        setTimeout("ConstructionOnline.preloadImagesHelper(" + (ConstructionOnline.imagesToPreload.length - 1) + ")", 10);
    },
    preloadImagesHelper: function(index) {
        var img = new Image();
        img.src = ConstructionOnline.imagesToPreload[index];
        if (index > 0) {
            setTimeout("ConstructionOnline.preloadImagesHelper(" + (index - 1) + ")", 10);
        }
    },
    imagesToPreload: [
        "/imageBank/liveSpinnerTrans.gif",
        "/imageBank/gallery/gallerySpinner.gif"
    ],
    clicked: function(obj, remove) {
        var $ele = $(obj);
        var h = $ele.height();
    },
    disabled: function(obj, remove) {
        var $ele = $(obj);
       
        var h = $ele.height();
    },
    //be careful about using this until after Document.ready has fired, as the IE6 div might not be available until then,
    IE6: false,
    isNaN: function(value) {
        if (value && value.toString().length === 0) {
            return true;
        }
        return isNaN(value);
    },
    setState: function(id, enabled) {
        var classname = "";
        switch (id) {                      
            case "#buttonAddAlbum": classname = "toolbarAddAlbum"; break;
            case "#buttonAddContact": classname = "toolbarAddContact"; break;
            case "#buttonAddFolder": classname = "toolbarAddFolder"; break;
            case "#buttonAddProject": classname = "toolbarAddProject"; break;
            case "#buttonDelete": classname = "toolbarDelete"; break;
            case "#buttonDownload": classname = "toolbarDownload"; break;
            case "#buttonEdit": classname = "toolbarEdit"; break;
            case "#buttonMove": classname = "toolbarMove"; break;
            case "#buttonShare": classname = "toolbarShare"; break;
            case "#buttonUpload": classname = "toolbarUpload"; break;
        }
        if (classname.length > 0) {
            if (enabled) {
                $(id).removeClass(classname + "Disabled").removeClass("Disabled").addClass(classname);
            } else {
                $(id).removeClass(classname).addClass("Disabled").addClass(classname + "Disabled");
            }
        }
    },
    showRightSidebar: function() {
        var $rsbSelected = $("#rightSidebar .selected");
        if ($rsbSelected) {
            switch ($rsbSelected.attr("id")) {
                case "rightSidebarButtonUpload":
                case "rightSidebarButtonShare":
                case "rightSidebarButtonDownload":
                    break;
                case "rightSidebarButtonPermissions":
                    if ((s.getContext() == "F") || (s.getContext() == "I")) {
                        $rsbSelected.removeClass('selected');
                        $rsbSelected = $("#rightSidebarButtonDetails").addClass("rsbTabDetailsSelected").addClass("selected");
                    }
                default:
                    $rsbSelected.click();
            }
        }
    },
    currentDialog: undefined,
    showDialog: function(modal, width, fn, fnClose) {
        $("#sortBy").hide().siblings("label").hide();
        this.currentDialog = modal;
        modal.dialog({
            close: function() { $("#sortBy").show().siblings("label").show(); },
            closeOnEscape: true,
            bgiframe: true,
            autoOpen: false,
            width: width,
            modal: true,
            resizable: false
        });
        if (fn && typeof (fn) == "function") {
            fn();
        }
        if (fnClose && typeof (fnClose) == "function") {
            modal.bind('dialogbeforeclose', fnClose);
        }
        modal.dialog("open");
    },
    closeDialog: function() {
        this.currentDialog.dialog("close");
    },
    gallery_page: {
        isShowingComments: 0,
        transitioning: 0,
        visiblePanel: "tblImgPreview",
        imageData: undefined,
        bindToolbar: function() {
            $("#imgEmptyAlbum").click(ConstructionOnline.clickUpload);
            $("#linkToggleComments").click(function() { ConstructionOnline.gallery_page.toggleComments(); return false; })
            $("#imgPreviewBack").click(ConstructionOnline.gallery_page.previousImage);
            $("#imgPreviewNext").click(ConstructionOnline.gallery_page.nextImage);
            $("#imgLightBoxDownload").click(ConstructionOnline.clickDownload);
            $("#imgLightBoxAddPhoto").click(ConstructionOnline.clickUpload);
            $("#imgGalAddPhoto").click(ConstructionOnline.clickUpload);
            $("#imgLightBoxShare").click(ConstructionOnline.clickShare);
            $("#imgToggleComments").click(ConstructionOnline.gallery_page.toggleComments);
            $("#imgPreviewInfo").click(ConstructionOnline.gallery_page.showImageInfo);
            $("#divCloseOverlay").click(ConstructionOnline.gallery_page.showImageInfo);            
        },
        gotoAddNew: function() {
            $("#divAddNewPhoto").css("display", "block");
            $("#divSpinner").css("display", "none");
            $("#tblImgPreview").css("display", "none");
            $("#divImageFooter").css("display", "none");
            ConstructionOnline.gallery_page.visiblePanel = "divAddNewPhoto";
            ConstructionOnline.gallery_page.moveTable(0);
        },
        gotoImage: function() {
            $("#divAddNewPhoto").css("display", "none");
            $("#divSpinner").css("display", "none");
            $("#tblImgPreview").css("display", "block");
            $("#divImageFooter").css("display", "block");
            $("#loadingImagesText").html("Loading Image...");
            ConstructionOnline.gallery_page.visiblePanel = "tblImgPreview";
            ConstructionOnline.gallery_page.moveTable(0);
        },
        gotoSpinner: function() {
            $("#divAddNewPhoto").css("display", "none");
            $("#divSpinner").css("display", "block");
            $("#tblImgPreview").css("display", "none");
            $("#divImageFooter").css("display", "none");
            ConstructionOnline.gallery_page.visiblePanel = "divSpinner"
            ConstructionOnline.gallery_page.moveTable(0);
        },
        imgPreviewClick: function() {
            Download(s.getContext(), s.getFile());
        },
        moveTable: function(animateTime) {
            if (ConstructionOnline.gallery_page.imageData) {
                var origWidth = ConstructionOnline.gallery_page.imageData.imageWidth;
                var origHeight = ConstructionOnline.gallery_page.imageData.imageHeight;
                origWidth = (origWidth == NaN || origWidth == '') ? 10 : origWidth;
                origHeight = (origHeight == NaN || origHeight == '') ? 10 : origHeight;
                var origRatio = origHeight / origWidth;
                var imgWidth = $("#outer_tblImgPreview").width();
                var imgHeight = imgWidth * origRatio;
                if (imgWidth > 800) {
                    imgWidth = 800;
                    imgHeight = imgWidth * origRatio;
                }
                if (imgHeight > 600) {
                    imgHeight = 600;
                    imgWidth = imgHeight / origRatio;
                }
                if (imgHeight + 300 > $(window).height()) {
                    imgHeight = $(window).height() - 300;
                    imgWidth = imgHeight / origRatio;
                }
                if (imgHeight < 128 || imgWidth < 128) {
                    imgWidth = 128;
                    imgHeight = imgWidth * origRatio;
                }
                if (imgWidth > origWidth || imgHeight > origHeight) {
                    imgWidth = origWidth;
                    imgHeight = origHeight;
                }
                var newPos = $(window).scrollTop() + 25;
                if ($(window).scrollTop() < 247) { newPos = 247; }
                var maxWidth = $(window).width();
                var leftPos = 244 + ((maxWidth - 244 - 362 - imgWidth) / 2)
                if (leftPos < 244) leftPos = 244;
                var footerTop = newPos + imgHeight + 12 + "px";
                var footerWidth = maxWidth - 244 - 362
                if (footerWidth < imgWidth) footerWidth = imgWidth;
                footerWidth += "px";
                imgHeight += "px";
                imgWidth += "px";
                leftPos += "px";
                $("#tblImgPreview").css("position", "absolute");
                $("#divSpinner").css("position", "absolute");
                $("#divImageFooter").css("position", "absolute");
                if (ConstructionOnline.gallery_page.visiblePanel == "tblImgPreview") {
                    $("#tblImgPreview").stop().animate({ top: newPos, left: leftPos, maxWidth: imgWidth, width: imgWidth }, animateTime);
                    $("#imgPreview").stop().animate({ maxWidth: imgWidth, width: imgWidth, maxHeight: imgHeight, height: imgHeight }, animateTime);
                    $("#divImageFooter").css("left", "244px").css("top", footerTop).stop().animate({ maxWidth: footerWidth, width: footerWidth }, animateTime);
                } else {
                    $("#tblImgPreview").css("left", leftPos).css("top", newPos).css("width", imgWidth);
                }
                if (ConstructionOnline.gallery_page.visiblePanel == "divSpinner") {
                    $("#divSpinner").stop().animate({ top: newPos, left: leftPos, maxWidth: imgWidth, width: imgWidth }, animateTime);
                } else {
                    $("#divSpinner").css("left", leftPos).css("top", newPos).css("width", imgWidth).stop().hide();
                }

                var img = $("#imgPreview");
                var overlay = $("#divImageOverlay");
                var posX = img.width() + img.position().left - overlay.width() - 16 + "px";
                var posY = img.height() + img.position().top - overlay.height() - 16 + "px";
                overlay.css("position", "absolute").css("left", posX).css("top", posY);
                overlay.stop().animate({ top: posY, left: posX }, animateTime);
            }
        },
        nextImage: function() {
            var img = $("#I" + s.getFile()).next("img.thumbnailImage");
            if (img.attr("id") == undefined) { img = $("img.thumbnailImage:first"); }
            img.click();
        },
        previousImage: function() {
            var img = $("#I" + s.getFile()).prev("img.thumbnailImage");
            if (img.attr("id") == undefined) { img = $("img.thumbnailImage:last"); }
            img.click();
        },
        resetImages: function() {
            $("img.selectedThumbnail").removeClass("selectedThumbnail");
        },
        setupPage: function() {
            if ($("#imgPreview").attr("src") == "/imageBank/blank.gif") {
                ConstructionOnline.gallery_page.gotoAddNew();
            } else {
                ConstructionOnline.gallery_page.gotoImage();
            }

            ConstructionOnline.gallery_page.moveTable(0);
            $(window).bind("resize scroll", function() {
                if (ConstructionOnline.gallery_page.transitioning == 0) {
                    ConstructionOnline.gallery_page.moveTable(100);
                }
            })
        },
        showComments: function() {
            ConstructionOnline.gallery_page.isShowingComments = 1;
            ConstructionOnline.gallery_page.transitioning = 1;
            $("#linkToggleComments").html("View Thumbnails");
            $("#imgToggleComments").removeClass("rsbGalleryComment").removeClass("rsbGalleryCommentSelected").removeClass("rsbGalleryThumbnailsSelected").addClass("rsbGalleryThumbnails");
            $("#rightHeader").css("display", "block");
            $("#ctl00_cphBody_lblLightBoard").slideUp(400, function() {
                $("#comments").slideDown(200, function() {
                    ConstructionOnline.gallery_page.moveTable(0);
                    ConstructionOnline.gallery_page.transitioning = 0;
                    $("#comments").find(".txtAddComment").focus();
                });
            });
            $(window).scrollTop(0);
        },
        showImage: function(tiny, name, date, number, id) {
            $("#divImageOverlay").hide();
            ConstructionOnline.gallery_page.gotoSpinner();
            s.setSelectedFile(id, name);
            s.setContext("I");
            ConstructionOnline.gallery_page.resetImages();

            ConstructionOnline.modal_actions.ajaxGet({ action: "ImageDataJSON", "id": id }, function(data, text, dataObj) {
                ConstructionOnline.gallery_page.imageData = data;

                $("#divOverlayFilename").text(ConstructionOnline.gallery_page.imageData.imageFileName);
                $("#spanOverlaySize").text(ConstructionOnline.gallery_page.imageData.imageSize);
                $("#spanOverlayDate").text(ConstructionOnline.gallery_page.imageData.imageUploaded);
                $("#spanOverlayUploaded").text(ConstructionOnline.gallery_page.imageData.imageUploadedBy);
                $("#spanOverlayNumComments").text(ConstructionOnline.gallery_page.imageData.imageNumComments);
                if (ConstructionOnline.gallery_page.imageData.imageNumComments == 0) {
                    $("#spanOverlayAddComment").text("Add Comment");
                } else {
                    $("#spanOverlayAddComment").text("View Comments");
                }                
                $("#spanOverlayLastCommentDate").text(ConstructionOnline.gallery_page.imageData.imageLastCommentDate);

                var orig = $("#I" + id);
                ConstructionOnline.gallery_page.transitioning = 1;
                $("#imgPreview").attr("src", "/picture/PREVIEW/" + tiny);
                orig.addClass("selectedThumbnail");

                $("#imgPreview").load(function(data) {
                    var jn = $("#imgPreview");
                    jn.queue("fx", function() { ConstructionOnline.gallery_page.moveTable(100); ConstructionOnline.gallery_page.transitioning = 0; $(this).dequeue(); });
                    $("#previewName").html(name);
                    $("#previewDate").html(date);
                    $("#previewNumber").html(number);
                    ConstructionOnline.gallery_page.gotoImage();
                });

                evalToolbar();
            });

            ConstructionOnline.gallery_page.loadComments(id);
        },
        loadComments: function(id) {
            ConstructionOnline.modal_actions.ajaxGet({ action: "GetComments", ID: "I" + id }, function(data, textStatus, dataObj) {
                var $t = $("#comments");
                if (textStatus == "success" || textStatus == "notmodified") {
                    $t.html($("<div/>").append(data.getcomments.replace(/<script(.|\s)*?\/script>/g, "")))
                }
            });
        },
        showImageInfo: function() {
            var img = $("#imgPreview");
            var overlay = $("#divImageOverlay");

            if (overlay.css("display") == "block") {
                overlay.hide();
            } else {
                var posX = img.width() + img.position().left - overlay.width() - 16 + "px";
                var posY = img.height() + img.position().top - overlay.height() - 16 + "px";
                overlay.css("position", "absolute").css("left", posX).css("top", posY).show();
            }
        },
        setViewCommentsText: function() {
            if (ConstructionOnline.numComments !== undefined) {
                if (ConstructionOnline.numComments == 0) {
                    $("#linkToggleComments").html("Add Comment");
                } else {
                    $("#linkToggleComments").html("View Comments (" + ConstructionOnline.numComments + ")");
                }                
            } else {
                $("#linkToggleComments").html("View Comments");
            }
        },
        showThumbnails: function() {
            ConstructionOnline.gallery_page.isShowingComments = 0;
            ConstructionOnline.gallery_page.transitioning = 1;
            ConstructionOnline.gallery_page.setViewCommentsText();
            $("#imgToggleComments").removeClass("rsbGalleryThumbnails").removeClass("rsbGalleryThumbnailsSelected").removeClass("rsbGalleryCommentSelected").addClass("rsbGalleryComment");
            $("#rightHeader").css("display", "none");
            $("#comments").slideUp(0, function() {
                $("#ctl00_cphBody_lblLightBoard").slideDown(0, function() {
                    ConstructionOnline.gallery_page.moveTable(0);
                    ConstructionOnline.gallery_page.transitioning = 0;
                });
            });
        },
        toggleComments: function() {
            if (s.getContext() != undefined) {
                if (ConstructionOnline.gallery_page.isShowingComments == 1) {
                    ConstructionOnline.gallery_page.showThumbnails();
                } else {
                    ConstructionOnline.gallery_page.showComments();
                }
            }
        }
    }, // end ConstructionOnline.gallery_page
    image_page: {
        setup_page: function() {
            $(".albumImageSubcontainer").hover(function() { if ($(this).children("img.curl").attr("id").indexOf("-1") == -1) { $(this).children("img.curl").animate({ "nonsense": "1000" }, 300).show(); } }, function() { $(this).children("img.curl").hide(); });
            $("img.curl").click(function() {
                id = $(this).attr("id");
                name = id.substring(id.indexOf("_curl_") + 6);
                id = id.substring(0, id.indexOf("_curl_"));
                showModalRenameAlbum2(id, name);
            });
        }
    },
    master_page: {
        bindHover: function() {
            //these have to be split up, do not combine this,  this function also only needs to be bound
            //once per page, dont continually rebind this. it will handle newly added elements
            $(".hoverable").die("mouseover");
            $(".hoverable").die("mouseout");
            $(".hoverLine").die("mouseover");
            $(".hoverLine").die("mouseout");
            $(".hoverable").live("mouseover", function() {
                ConstructionOnline.hover($(this), false);
                return false;
            });
            $(".hoverLine").live("mouseover", function() {
                $(this).css("text-decoration", "underline");
                return false;
            });
            $(".hoverable").live("mouseout", function() {
                ConstructionOnline.hover($(this), true);
                return false;
            });
            $(".hoverLine").live("mouseout", function() {
                $(this).css("text-decoration", "none");
                return false;
            });
        },
        bindToolbar: function() {
            $("#ctl00_leftToolbar").click(function(e) {
                var cell = $(e.target);
                if (!cell.hasClass("Disabled")) {
                    switch (cell.attr("ID")) {
                        case "buttonAddProject":
                            ConstructionOnline.clickAddProject();
                            break;
                        case "buttonAddAlbum":
                            ConstructionOnline.clickAddAlbum();
                            break;
                        case "buttonAddFolder":
                            ConstructionOnline.clickAddFolder();
                            break;
                        case "buttonAddContact":
                            ConstructionOnline.clickAddContact();
                            break;
                        case "buttonUpload":
                            ConstructionOnline.clickUpload();
                            break;
                        case "buttonDownload":
                            ConstructionOnline.clickDownload();
                            break;
                        case "buttonDelete":
                            ConstructionOnline.clickDelete();
                            break;
                        case "buttonEdit":
                            ConstructionOnline.clickEdit();
                            break;
                        case "buttonShare":
                            ConstructionOnline.clickShare();
                            break;
                        case "buttonMove":
                            ConstructionOnline.clickMove();
                            break;
                    }
                }
            }).find(".toolbarButton").hover(function() {                              
                var btn = $(this);
                if (!btn.hasClass("Disabled")) {
                    switch (btn.attr("id")) {
                        case "buttonAddAlbum": btn.removeClass("toolbarAddAlbum").addClass("toolbarAddAlbumHovered"); break;
                        case "buttonAddContact": btn.removeClass("toolbarAddContact").addClass("toolbarAddContactHovered"); break;
                        case "buttonAddFolder": btn.removeClass("toolbarAddFolder").addClass("toolbarAddFolderHovered"); break;
                        case "buttonAddProject": btn.removeClass("toolbarAddProject").addClass("toolbarAddProjectHovered"); break;
                        case "buttonDelete": btn.removeClass("toolbarDelete").addClass("toolbarDeleteHovered"); break;
                        case "buttonDownload": btn.removeClass("toolbarDownload").addClass("toolbarDownloadHovered"); break;
                        case "buttonEdit": btn.removeClass("toolbarEdit").addClass("toolbarEditHovered"); break;
                        case "buttonMove": btn.removeClass("toolbarMove").addClass("toolbarMoveHovered"); break;
                        case "buttonShare": btn.removeClass("toolbarShare").addClass("toolbarShareHovered"); break;
                        case "buttonUpload": btn.removeClass("toolbarUpload").addClass("toolbarUploadHovered"); break;
                    }                                
                }
            }, function() {
                var btn = $(this);
                if (!btn.hasClass("Disabled")) {
                    switch (btn.attr("id")) {
                        case "buttonAddAlbum": btn.addClass("toolbarAddAlbum").removeClass("toolbarAddAlbumHovered"); break;
                        case "buttonAddContact": btn.addClass("toolbarAddContact").removeClass("toolbarAddContactHovered"); break;
                        case "buttonAddFolder": btn.addClass("toolbarAddFolder").removeClass("toolbarAddFolderHovered"); break;
                        case "buttonAddProject": btn.addClass("toolbarAddProject").removeClass("toolbarAddProjectHovered"); break;
                        case "buttonDelete": btn.addClass("toolbarDelete").removeClass("toolbarDeleteHovered"); break;
                        case "buttonDownload": btn.addClass("toolbarDownload").removeClass("toolbarDownloadHovered"); break;
                        case "buttonEdit": btn.addClass("toolbarEdit").removeClass("toolbarEditHovered"); break;
                        case "buttonMove": btn.addClass("toolbarMove").removeClass("toolbarMoveHovered"); break;
                        case "buttonShare": btn.addClass("toolbarShare").removeClass("toolbarShareHovered"); break;
                        case "buttonUpload": btn.addClass("toolbarUpload").removeClass("toolbarUploadHovered"); break;
                    }       
                }
            });
        },
        bindMoreButtonBar: function() {
            $("body").click(function() {
                $("div.moreMenuButton").removeClass().addClass("moreMenuButton clickable hoverable");
                $("div.moreMenuButtonSelected").removeClass().addClass("moreMenuButton clickable hoverable");
                $("div.moreMenuButtonHovered").removeClass().addClass("moreMenuButton clickable hoverable");
                $("#moreButtonBar").removeClass("block").addClass("hidden");
            });
            $("#moreButtonBar").click(function(e) {
                var cell = $(e.target);
                switch (cell.attr("ID")) {
                    case "moreButtonBarClose":
                        break;
                    case "mbbSubfolder":
                        showModalCreateNewFolderIn($(".hiliteRow:first").attr("context"), $(".hiliteRow:first").attr("entity"));
                        break;
                    case "mbbFiles":
                        location.href = location.protocol + '//' + location.host + '/File3.aspx?PID=' + s.getProject();
                        break;
                    case "mbbImages":
                        location.href = location.protocol + '//' + location.host + '/Image3.aspx?PID=' + s.getProject() + '#P' + s.getProject();
                        break;
                    case "mbbInvite":
                        Invite(s.getContext());
                        break;
                    case "mbbPermissions":
                        Permissions(s.getContext());
                        break;
                    case "mbbDuplicateProject":
                        ConstructionOnline.modals.duplicateProject_modal.show(s.getProject(), s.getProjectName());
                        break;
                    case "mbbUpload":
                        UploadInto($(".hiliteRow:first").attr("id").substring(0,1), $(".hiliteRow:first").attr("id").substring(1), $(".hiliteRow:first").attr("name"));
                        break;
                    case "mbbDownload":
                        Download(s.getContext());
                        break;
                    case "mbbShare":
                        Share(s.getContext());
                        break;
                    case "mbbEdit":
                        Edit(s.getContext());
                        break;
                    case "mbbDelete":
                        Delete(s.getContext());
                        break;
                    case "mbbMove":
                        Move(s.getContext());
                        break;
                    case "mbbGallery":
                        switch (s.getContext()) {
                            case "A":
                                window.location = "/Gallery3.aspx?HID=" + s.getFolder();
                                break;
                            case "I":
                                window.location = "/Gallery3.aspx?FID=" + s.getFile();
                                break;
                        }
                        break;
                    case "mbbResend":
                        ConstructionOnline.modals.note_modal.show(s.getNote(), s.getTitle(), "resend");
                        break;
                    case "mbbDuplicateNote":
                        ConstructionOnline.modals.note_modal.show(s.getNote(), s.getTitle(), "duplicate");
                        break;
                        
                    default:
                        e.stopPropagation();
                        break;
                }
            });
        },
        bindRightSideBar: function() {
            $("#rightSidebar .rightSidebarButton").click(function() {
                var $hiID;
                var $hiName;
                if ((location.href.match("Profile3.aspx") == "Profile3.aspx")) {
                    $hiID = "C" + s.getView();
                    $hiName = s.getViewName();
                } else if (location.href.match("ProjectDetails3.aspx") == "ProjectDetails3.aspx") {
                    $hiID = "P" + s.getProject();
                    $hiName = s.getProjectName();
                } else if (location.href.match("CompanyDetails.aspx") == "CompanyDetails.aspx") {
                    $hiID = $("#companyID").attr("value");
                    $hiName = s.getCompanyName();
                } else {
                    $hiID = $(".hiliteRow:first").attr("id");
                    $hiName = $(".hiliteRow:first").attr("name");
                }

                if ($hiID !== undefined) {
                    var $t = $(this);
                    var $div = $("#" + $t.attr("id").replace("Button", ""));

                    switch ($div.attr("id")) {
                        case "rightSidebarUpload":
                            //ConstructionOnline.clickUpload();
                            UploadInto($hiID.substr(0,1), $hiID.substr(1), $hiName);
                            break;
                        case "rightSidebarShare":
                            ConstructionOnline.clickShare();
                            break;
                        case "rightSidebarDownload":
                            ConstructionOnline.clickDownload();
                            break;
                        default:
                            $div.siblings().slideUp("slow");
                            ConstructionOnline.modal_actions.ajaxGet({ action: $div.attr("id").replace("rightSidebar", "") + "AJAX", ID: $hiID }, function(data, textStatus, dataObj) {
                                var $t = $('#rightSidebar' + dataObj.action.replace("AJAX", ""))

                                if (textStatus == "success" || textStatus == "notmodified") {
                                    $t.html($("<div/>").append(data[dataObj.action.toLowerCase()].replace(/<script(.|\s)*?\/script>/g, "")))
                                }
                                $t.slideDown("slow").siblings().slideUp("fast");
                            });
                            var lblDetails = $div.attr("id").replace("rightSidebar", "").replace("My", "My ");

                            $("#rightHeader").html(lblDetails);
                                      
                            $("#rightSidebarButtonContacts").removeClass("rsbTabContactsSelected").addClass("rsbTabContacts").removeClass("selected");
                            $("#rightSidebarButtonComments").removeClass("rsbTabCommentSelected").addClass("rsbTabComment").removeClass("selected");
                            $("#rightSidebarButtonDetails").removeClass("rsbTabDetailsSelected").addClass("rsbTabDetails").removeClass("selected");
                            $("#rightSidebarButtonDownload").removeClass("rsbTabDownloadSelected").addClass("rsbTabDownload").removeClass("selected");
                            $("#rightSidebarButtonHistory").removeClass("rsbTabHistorySelected").addClass("rsbTabHistory").removeClass("selected");
                            $("#rightSidebarButtonMyContacts").removeClass("rsbTabContactsSelected").addClass("rsbTabContacts").removeClass("selected");
                            $("#rightSidebarButtonMyDetails").removeClass("rsbTabDetailsSelected").addClass("rsbTabDetails").removeClass("selected");
                            $("#rightSidebarButtonMyHistory").removeClass("rsbTabHistorySelected").addClass("rsbTabHistory").removeClass("selected");
                            $("#rightSidebarButtonMyProjects").removeClass("rsbTabProjectsSelected").addClass("rsbTabProjects").removeClass("selected");
                            $("#rightSidebarButtonPermissions").removeClass("rsbTabPermissionsSelected").addClass("rsbTabPermissions").removeClass("selected");
                            $("#rightSidebarButtonPhotos").removeClass("rsbTabPhotosSelected").addClass("rsbTabPhotos").removeClass("selected");
                            $("#rightSidebarButtonProjects").removeClass("rsbTabProjectsSelected").addClass("rsbTabProjects").removeClass("selected");
                            $("#rightSidebarButtonShare").removeClass("rsbTabShareSelected").addClass("rsbTabShare").removeClass("selected");
                            $("#rightSidebarButtonUpload").removeClass("rsbTabUploadSelected").addClass("rsbTabUpload").removeClass("selected");                          
                            switch ($t.attr("id")) {
                                case "rightSidebarButtonContacts": $t.addClass("rsbTabContactsSelected").addClass("selected"); break;
                                case "rightSidebarButtonComments": $t.addClass("rsbTabCommentSelected").addClass("selected"); break;
                                case "rightSidebarButtonDetails": $t.addClass("rsbTabDetailsSelected").addClass("selected"); break;
                                case "rightSidebarButtonDownload": $t.addClass("rsbTabDownloadSelected").addClass("selected"); break;
                                case "rightSidebarButtonHistory": $t.addClass("rsbTabHistorySelected").addClass("selected"); break;
                                case "rightSidebarButtonMyContacts": $t.addClass("rsbTabContactsSelected").addClass("selected"); break;
                                case "rightSidebarButtonMyDetails": $t.addClass("rsbTabDetailsSelected").addClass("selected"); break;
                                case "rightSidebarButtonMyHistory": $t.addClass("rsbTabHistorySelected").addClass("selected"); break;
                                case "rightSidebarButtonMyProjects": $t.addClass("rsbTabProjectsSelected").addClass("selected"); break;
                                case "rightSidebarButtonPermissions": $t.addClass("rsbTabPermissionsSelected").addClass("selected"); break;
                                case "rightSidebarButtonPhotos": $t.addClass("rsbTabPhotosSelected").addClass("selected"); break;
                                case "rightSidebarButtonProjects": $t.addClass("rsbTabProjectsSelected").addClass("selected"); break;
                                case "rightSidebarButtonShare": $t.addClass("rsbTabShareSelected").addClass("selected"); break;
                                case "rightSidebarButtonUpload": $t.addClass("rsbTabUploadSelected").addClass("selected"); break;
                            }
                    }
                }
            });
        },
        hideInlineFiles: function(cell) {
            cell.parents("tr:first").next(".inlineCommentsArea").next(".inlineFilesArea").addClass("hidden");
            cell.parents("tr:first").find(".arrowDownGray:first").removeClass("arrowDownGray").addClass("arrowNextGray");
        },
        viewInlineFiles: function(cell) {
            var id = cell.parents("tr").attr("id");
            if (id[0] == "P" || id[0] == "F" || id[0] == "I") {
                return;
            }
           
            ConstructionOnline.modal_actions.ajaxGet( { action: "GetInlineFiles", id: cell.parents("tr").attr("id") }, function(data, text, dataObj) { 
                if(text == "success") {
                    var hilitedRowId = $(".hiliteRow:first").attr("id");
                    cell.parents("tr.listRow").next(".inlineCommentsArea").next(".inlineFilesArea").removeClass("hidden").children("td").html("<span class='inlineFilesContainer'>" + data.getinlinefiles.replace(/<script(.|\s)*?\/script>/g, "") + "</span>");
                    cell.parents("tr.listRow").find(".arrowNextGray:first").removeClass("arrowNextGray").addClass("arrowDownGray");
                    $("#" + hilitedRowId).click();
                } else {
                    ConstructionOnline.master_page.hideInlineComments(cell);
                }
            }, undefined );   
        },
        hideInlineComments: function(cell) {
            cell.parents("tr.listRow").find(".hideInlineComments").removeClass("hideInlineComments").addClass("viewInlineComments").find(".commentsLabel").html(cell.html().replace("Hide", "View"));
            cell.parents("tr.listRow").next("tr .inlineCommentsArea").addClass("hidden");
        },
        viewInlineComments: function(cell) {
            ConstructionOnline.modal_actions.ajaxGet( { action: "GetInlineComments", id: cell.parents("tr").attr("id") }, function(data, text, dataObj) { 
                if(text == "success") {
                    cell.parents("tr.listRow").next("tr .inlineCommentsArea").removeClass("hidden").children("td").html("<span class='inlineCommentsContainer'>" + data.getinlinecomments.replace(/<script(.|\s)*?\/script>/g, "") + "</span>");
                    cell.parents("tr.listRow").find(".viewInlineComments").removeClass("viewInlineComments").addClass("hideInlineComments")
                    cell.parents("tr.listRow").find(".commentsLabel").html("Hide Comments(" + cell.parents("tr").next("tr .inlineCommentsArea").find(".comment").length + ")");
                } else {
                    ConstructionOnline.master_page.hideInlineComments(cell);
                }
            }, undefined );        
        },
        bindTable: function() {
            $(".contentMaintableSubTable").live("click", function(e) {
                var rtnValue = true;
                var cell = $(e.target);
                if(cell.parents(".viewInlineComments").length > 0) {
                    ConstructionOnline.master_page.viewInlineComments(cell);
                } else if(cell.parents(".hideInlineComments").length > 0) {
                    ConstructionOnline.master_page.hideInlineComments(cell);
                }
                var $mbb = $("#moreButtonBar");
                var $tr = cell.closest("tr.listRow");
                if(cell.parents("tr").hasClass("inlineCommentsArea")) {
                    $tr = cell.parents("tr").prev(".listRow");
                }
                if(cell.parents("tr").hasClass("inlineFilesArea") && cell.parents(".contentMaintableSubTable").parents(".inlineFilesArea").length == 0) {
                    $tr = cell.parents("tr").prev(".inlineCommentsArea").prev(".listRow");
                }

                if ($tr.size() > 0) {
                    if(cell.hasClass("inlineFilesLink")) {
                        if ($tr.hasClass("hiliteRow")) {
                            if (!$tr.next(".inlineCommentsArea").next(".inlineFilesArea").hasClass("hidden")) {
                                ConstructionOnline.master_page.hideInlineFiles(cell);
                            } else {
                                ConstructionOnline.master_page.viewInlineFiles(cell);
                            }
                        }
                    }
                    if (!$tr.hasClass("hiliteRow")) {
                        ConstructionOnline.hilite($tr.attr("context"), $tr.attr("entity"), $tr.attr("name"), !((cell.is("a") || (cell.parents("a").size() > 0))));
                    }
                    $mbb.removeClass("block").addClass("hidden");
                    if (!cell.hasClass("moreMenuButton")) {
                        $(".moreMenuButton").removeClass().addClass("moreMenuButton clickable hoverable");
                        $(".moreMenuButtonSelected").removeClass().addClass("moreMenuButton clickable hoverable");
                        $(".moreMenuButtonHovered").removeClass().addClass("moreMenuButton clickable hoverable");
                    }
                }
                if(cell.hasClass("inlineFilesLink")) {
                    return true;
                }
                if(cell.parents("tr").hasClass("inlineCommentsArea")) {
                    return true;
                }
                if (cell.hasClass("moreMenuButton") || cell.hasClass("moreMenuButtonHovered") || cell.hasClass("moreMenuButtonSelected") || cell.hasClass("showMoreMenuButton")) {
                    ConstructionOnline.master_page.processMoreButtonClick(cell, cell.parents("tr").attr("id").substr(0, 1));                    
                }

                e.stopPropagation();
                return rtnValue;
            }).css("border-collapse", "separate"); //.find(".listRow:last").children("td").css("border-bottom", ""); //end click
            
            $("#ctl00_cphBody_listlogs").css("border-collapse", "separate").find(".listRow:last").children("td").css("border-bottom", "");

            //click the top row in the datalist if possible, otherwise just run eval toolbar so that it defaults the buttons
            var $crickIT;
            if (location.hash) {
                $crickIT = $(location.hash) //try to crick off of the hash, if that doesn't work, just get the first one
            } else {
                $crickIT = $(".listRow:first");
            }
            if (($crickIT.length > 0)) {
                //$crickIT.click();
                ConstructionOnline.hilite($crickIT.attr("context"), $crickIT.attr("entity"), $crickIT.attr("name"), false);
            } else {
                evalToolbar();
            }
        }, //end bindTable
        processMoreButtonClick: function(cell, context) {
            var $mbb = $("#moreButtonBar");
            if (cell.hasClass("moreMenuButtonSelected")) {
                cell.removeClass("moreMenuButtonSelected").addClass("moreMenuButton");
            } else {
                $(".moreMenuButton").removeClass().addClass("moreMenuButton clickable hoverable");
                $(".moreMenuButtonSelected").removeClass().addClass("moreMenuButton clickable hoverable");
                $(".moreMenuButtonHovered").removeClass().addClass("moreMenuButton clickable hoverable");

                switch (context) {
                    case "P": //project
                        $mbb.children("#mbbSubfolder").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbFiles").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbImages").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbInvite").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbUpload").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbDownload").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbShare").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbEdit").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbDelete").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbMove").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbSeparator").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbGallery").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbPermissions").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbDuplicateProject").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbResend").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbDuplicateNote").removeClass("IE6IB").addClass("hidden");
                        $mbb.width((6 * 60) + 65); //(number of regular IE6IBs * 60) + 65 for permissions
                        break;
                    case "H": //folder
                        $mbb.children("#mbbSubfolder").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbFiles").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbImages").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbInvite").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbUpload").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbDownload").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbShare").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbEdit").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbDelete").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbMove").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbSeparator").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbGallery").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbPermissions").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbDuplicateProject").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbResend").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbDuplicateNote").removeClass("IE6IB").addClass("hidden");
                        $mbb.width((4 * 60) + 65 + 70); //(number of regular IE6IBs * 60) + 65 for permissions + 70 for subfolder
                        break;
                    case "A": //album
                        $mbb.children("#mbbSubfolder").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbFiles").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbImages").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbInvite").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbUpload").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbDownload").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbShare").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbEdit").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbDelete").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbMove").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbSeparator").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbGallery").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbPermissions").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbDuplicateProject").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbResend").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbDuplicateNote").removeClass("IE6IB").addClass("hidden");
                        $mbb.width((4 * 60) + 65 + 13 + 65); //(number of regular IE6IBs * 60) + 65 for gallery + 13 for separator + 65 for permissions
                        break;
                    case "F": //file
                        $mbb.children("#mbbSubfolder").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbFiles").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbImages").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbInvite").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbUpload").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbDownload").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbShare").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbEdit").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbDelete").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbMove").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbSeparator").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbGallery").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbPermissions").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbDuplicateProject").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbResend").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbDuplicateNote").removeClass("IE6IB").addClass("hidden");
                        $mbb.width(5 * 60); //number of IE6IBs * 60
                        break;
                    case "I": //image
                        $mbb.children("#mbbSubfolder").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbFiles").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbImages").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbInvite").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbUpload").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbDownload").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbShare").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbEdit").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbDelete").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbMove").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbSeparator").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbGallery").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbPermissions").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbDuplicateProject").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbResend").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbDuplicateNote").removeClass("IE6IB").addClass("hidden");
                        $mbb.width((5 * 60) + 78); //(number of regular IE6IBs * 60) + 65 for gallery + 13 for separator
                        break;
                    case "C": //contact
                        $mbb.children("#mbbSubfolder").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbFiles").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbImages").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbInvite").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbUpload").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbDownload").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbShare").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbEdit").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbDelete").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbMove").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbSeparator").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbGallery").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbPermissions").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbDuplicateProject").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbResend").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbDuplicateNote").removeClass("IE6IB").addClass("hidden");                        
                        $mbb.width((3 * 60) + 65); //(number of regular IE6IBs * 60) + 65 for permissions
                        break;
                    case "N": //note
                        $mbb.children("#mbbSubfolder").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbFiles").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbImages").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbInvite").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbUpload").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbDownload").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbShare").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbEdit").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbDelete").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbMove").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbSeparator").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbGallery").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbPermissions").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbDuplicateProject").removeClass("IE6IB").addClass("hidden");
                        $mbb.children("#mbbResend").removeClass("hidden").addClass("IE6IB");
                        $mbb.children("#mbbDuplicateNote").removeClass("hidden").addClass("IE6IB");
                        $mbb.width((3 * 60) + 70); //(number of regular IE6IBs * 60) + 70 for resend
                        break;
                } //end switch

                var $mb = cell;
                if (!cell.hasClass("moreMenuButton")) {
                    $mb = cell.parents("tr:first").find(".moreMenuButton:first");
                    rtnValue = false;
                }
                $mb.removeClass("moreMenuButton").addClass("moreMenuButtonSelected");
                $mbb.css("top", $mb.offset().top + $mb.height() + "px").css("left", $mb.offset().left + $mb.width() - $mbb.width() - 10).removeClass("hidden").addClass("block");
            }        
        }, //processMoreButtonClick
        bindCommentFunctions: function() {
            $(".btnClearComment").live("click", ConstructionOnline.comments.ClearCommentField);
            $(".btnAddComment").live("click", ConstructionOnline.comments.AddComment);
            $(".txtAddComment").live("keyup", ConstructionOnline.comments.txtAddComment_onKeyUp);
            $(".txtAddComment").live("click", ConstructionOnline.comments.txtAddComment_onFocus);
        },
        setActiveButtons: function(project, album, folder, contact, upload, download, delet, edit, share, move) {
            ConstructionOnline.setState("#buttonAddProject", project);
            ConstructionOnline.setState("#buttonAddAlbum", album);
            ConstructionOnline.setState("#buttonAddFolder", folder);
            ConstructionOnline.setState("#buttonAddContact", contact);
            ConstructionOnline.setState("#buttonUpload", upload);
            ConstructionOnline.setState("#buttonDownload", download);
            ConstructionOnline.setState("#buttonDelete", delet);
            ConstructionOnline.setState("#buttonEdit", edit);
            ConstructionOnline.setState("#buttonShare", share);
            ConstructionOnline.setState("#buttonMove", move);
        }
    },
    comments: {
        setCommentFieldHeight: function() {
            $(".txtAddComment").each(function() {
                var text = $(this).attr("value").toString()
                var newHeight = $(this).attr("scrollHeight");
                var diff = $(this).height() - newHeight
                if (Math.abs(diff) > 4) {
                    $(this).stop().animate({ height: newHeight }, 100);
                }
            });
        },
        refreshVisibleComments: function() {
            if( $("#rightSidebarComments").is(':visible') ) {
               $("#rightSidebarButtonComments").click();
            }
            if( $("#comments").is(':visible') ) {
               ConstructionOnline.gallery_page.loadComments(s.getFile());
            }
            $(".hideInlineComments").each( function() { ConstructionOnline.master_page.viewInlineComments($(this)); } );
        },
        setSortOrder: function(order) {
            $.post("/post/submits.aspx", { "action": "SetCommentSortOrder", "order": order }, function(data, textStatus) {
                if (textStatus == "success") {
                    ConstructionOnline.comments.refreshVisibleComments();
                } else {
                    ConstructionOnline.alert("Your changes were unable to be completed at this time, please try the action again.\n  Status:" + textStatus);
                }
            });
        },
        sortFirstPosted: function() {
            ConstructionOnline.comments.setSortOrder(0);
        },
        sortMostRecent: function() {
            ConstructionOnline.comments.setSortOrder(1);
        },
        ClearCommentField: function() {
            var $txtAddComment = $(this).parent().find(".txtAddComment");
            $txtAddComment.removeClass("typing");
            $txtAddComment.attr("value", "Enter Comment");
            var newHeight = 17;
            if($txtAddComment.parents(".inlineCommentsArea").length > 0) {
                newHeight = 50;
            }
            var diff = $txtAddComment.height() - newHeight
            $txtAddComment.stop().animate({ height: newHeight }, 300);
            ConstructionOnline.comments.setCommentFieldHeight();
        },
        txtAddComment_onKeyUp: function(e) {
            if (!$(this).hasClass("typing")) {
                $(this).addClass("typing");
            }
            var keynum;

            if (window.event) // IE
            {
                keynum = e.keyCode;
            }
            else if (e.which) // Netscape/Firefox/Opera
            {
                keynum = e.which;
            }
            if (keynum == 13 && !e.shiftKey && !e.ctrlKey) {
                $(this).parent().find(".btnAddComment").click();
            }

            ConstructionOnline.comments.setCommentFieldHeight();
        },
        txtAddComment_onFocus: function() {
            if (!$(this).hasClass("typing") && $(this).attr("value") == "Enter Comment") {
                $(this).attr("value", "");
                $(this).addClass("typing");
            }
            ConstructionOnline.comments.setCommentFieldHeight();
        },
        AddComment: function() {
            var $txtAddComment = $(this).parent().find(".txtAddComment");
            if ($txtAddComment.hasClass("typing")) {
                var text = $txtAddComment.attr("value").replace(/^\s+|\s+$/, '');
                $(this).parent().find(".btnClearComment").click();
                ConstructionOnline.comments.ClearCommentField();
                $txtAddComment.focus();
                if (text.length > 0) {
                    var id = $(".hiliteRow:first").attr("id");
                    if (location.href.match("Gallery3.aspx")) {
                        id = s.getContext() + s.getFile()
                    }

                    $.post("/post/submits.aspx", { "action": "PostComment", "ID": id, "data": text }, function(data, textStatus) {
                        if (textStatus == "success") {
                            ConstructionOnline.comments.refreshVisibleComments();
                        } else {
                            ConstructionOnline.alert("Your changes were unable to be completed at this time, please try the action again.\n  Status:" + textStatus);
                        }
                    });
                }
            }
        }
    },
    modal_actions: {
        ajaxGets: {},
        ajaxPosts: {},
        ajaxGet: function(dataObj, onSuccess, modal) {
            var action
            if (typeof dataObj == "string") {
                var vars = dataObj.split("&")
                $.each(vars, function(i) {
                    var pair = vars[i].split("=")
                    if (pair[0].toLowerCase() == "action") {
                        action = pair[1].toLowerCase()
                        return false;
                    }
                });
            } else if (dataObj.action) {
                action = dataObj.action.toLowerCase();
            } else if (dataObj.Action) {
                action = dataObj.Action.toLowerCase();
            }
            if (!action) {
                ConstructionOnline.alert("There is not a declared action for this request, please define an action for this request to Information.aspx to be valid");
                return false;
            }
            if (modal) {
                modal.find(".mdlProcessingWrapper").stop().fadeIn(50).find(".processorText").text("Loading, please wait");
                modal.find(".submitButton,.cancelButton").stop().hide(0);
            }
            if (ConstructionOnline.modal_actions.ajaxGets[action]) {
                switch (ConstructionOnline.modal_actions.ajaxGets[action].readyState) {
                    case 0: //not started
                    case 1: //opened
                    case 2: //sending
                    case 3: //begun loading
                        if (action.match(/ajax$/)) {
                            $.each(ConstructionOnline.modal_actions.ajaxGets, function(i) {
                                //if the pending request is an ajax request (rsb) then look for other RSB requests and terminate them as well
                                if ((i.match(/ajax$/)) && (this)) { this.abort(); }
                            });
                        }
                        if(action != "getinlinecomments") {
                            ConstructionOnline.modal_actions.ajaxGets[action].abort();
                        }
                        break;
                    case 4: //finished
                        break;
                    default:
                        break;
                }
            }
            
            ConstructionOnline.modal_actions.ajaxGets[action] = $.ajax({
                type: "POST",
                url: "/post/Information.aspx",
                data: dataObj,
                dataType: "json",
                cache: false,
                success: function(data, text) {
                    if (data.error != undefined) {
                        ConstructionOnline.alert(data.error);
                        if (ConstructionOnline.mustReload === true) {
                            location.reload();
                        } else if (modal) {
                            modal.dialog("close");
                        }
                    } else if (data.info) {
                        ConstructionOnline.alert(data.info);
                    } else {
                        onSuccess(data, text, dataObj);
                    }
                    //ConstructionOnline.modal_actions.ajaxGet[action] = undefined; //we are done with this request
                    if (modal) {
                        modal.find(".mdlProcessingWrapper").stop().hide(0).find(".processorText").text("Processing, please wait");
                        modal.find(".submitButton,.cancelButton").stop().show(0);
                        $("#mdlShareCheckboxWrapper").stop().show(0);
                    }
                },  //end success
                error: function(XMLHttpRequest, textStatus, errorThrown) {
                    if (XMLHttpRequest.status == 200) {
                        var str = XMLHttpRequest.responseText;
                        if (str.indexOf("action=\"Entry.aspx") != -1 || str.indexOf("action=Entry.aspx") != -1 || textStatus != "success") {
                            location.reload();
                            return;
                        }
                    } else if (XMLHttpRequest.status == 0) { //ignore errors with status = 0.  comes up if you click a link while an ajax request is pending.
                    } else {
                        ConstructionOnline.alert("The Information request was unable to be completed at this time, please try the action again.\n  Status:" + textStatus + "\n  Error:" + errorThrown);
                        location.reload();
                    }
                    //ConstructionOnline.modal_actions.ajaxGets[action] = undefined; //we are done with this request
                }
            });
            return ConstructionOnline.modal_actions.ajaxGets[action];
        },
        ajaxPost: function(dataString, fn) {
            var action;
            if (typeof dataString == "string") {
                var vars = dataString.split("&")
                $.each(vars, function(i) {
                    var pair = vars[i].split("=")
                    if (pair[0].toLowerCase() == "action") {
                        action = pair[1].toLowerCase();
                        return false;
                    }
                });
            } else if (dataString.action) {
                action = dataString.action.toLowerCase();
            } else if (dataString.Action) {
                action = dataString.Action.toLowerCase();
            }
            if (!action) {
                ConstructionOnline.alert("There is not a declared action for this request, please define an action for this request to Submits.aspx to be valid");
                return false;
            }
            ConstructionOnline.modal_actions.ajaxPosts[action] = $.ajax({
                type: "POST",
                url: "/post/submits.aspx",
                data: dataString,
                dataType: "json",
                cache: false,
                success: function(data, textStatus) {
                    if (data.error) {
                        ConstructionOnline.alert(data.error);
                        location.reload();
                        return;
                    } else if (data.info) {
                        if (data.info == "Permissions Saved Successfully") {
                            $("#rightSidebarButtonPermissions").click();
                            ConstructionOnline.alert(data.info)
                        } else if (data.info == "No Search Results") {
                            ConstructionOnline.closeDialog();
                            ConstructionOnline.modals.contact_modal.createNewContactNoSearchResults($("#mdlTextEntryText").val());
                        } else {
                            ConstructionOnline.alert(data.info)
                        }
                    } else if (data.success) {
                        ConstructionOnline.alert(data.success);
                        if (data.reload) {
                            location.reload();
                            return;
                        } else {
                            ConstructionOnline.closeDialog();
                        }
                    } else if (data.invite) {
                        if ((data.context == "H") || (data.context == "A")) {
                            location.hash = "#" + data.context + data.invite;
                            location.search = "?find=" + data.context + data.invite + "&unused=" + (new Date()).getTime();
                            return;
                        } else if (data.context == "P") {
                            if (ConstructionOnline.modals.project_modal.adding) {
                                location.search = "?APID=" + data.invite + "&unused=" + (new Date()).getTime();
                                return;
                            } else {
                                location.hash = "#P" + data.invite;
                                location.search = "?find=P" + data.invite + "&unused=" + (new Date()).getTime();
                                return;
                            }
                        } else if (data.context == "C") {
                            if (ConstructionOnline.modals.contact_modal.adding) {
                                location.search = "?CID=" + data.invite + "&unused=" + (new Date()).getTime();
                                return;
                            } else {
                                location.hash = "#C" + data.invite;
                                location.search = "?find=C" + data.invite + "&unused=" + (new Date()).getTime();
                                return;
                            }
                        }
                    } else if (data.companyadd) {
                        location.search = "?MID=" + data.companyadd + "&unused=" + (new Date()).getTime();
                        return;
                    } else if (data.companyedit) {
                        location.hash = "#M" + data.companyedit;
                        location.search = "?find=M" + data.companyedit + "&unused=" + (new Date()).getTime();
                        return;
                    } else if (data.contactadd) {
                        ConstructionOnline.mustReload = true;
                        ConstructionOnline.modals.invite_modal.show("C", data.contactadd, ConstructionOnline.modals.invite_modal.submit)
                    } else if (data.contactaddfriend) {
                        ConstructionOnline.closeDialog();
                        ConstructionOnline.mustReload = true;
                        ConstructionOnline.modals.invite_modal.show("C", data.contactaddfriend, ConstructionOnline.modals.invite_modal.submit)
                    } else if (data.contactedit) {
                        if (data.contactedit == "next") {
                            ConstructionOnline.mustReload = true;
                            ConstructionOnline.modals.contact_modal.changeTab(2);
                        } else {
                            location.hash = "#C" + data.contactedit;
                            location.search = "?find=C" + data.contactedit + "&unused=" + (new Date()).getTime();
                            return;
                        }
                    } else if ((data.profileprofession) || data.profileportraitupload || data.profilelogoupload) {
                        if (data.profileprofession == "next") {
                            ConstructionOnline.mustReload = true;
                            ConstructionOnline.modals.contact_modal.changeTab(3);
                        }
                    } else if (data.clearnotification) {
                        if (data.clearnotification.all == "1") {
                            //do nothing, they should have cleared immedatly
                        } else {
                            $("#ctl00_divNotificationsLabel").text("Notifications (" + data.clearnotification.count + ")");
                            if (data.clearnotification.count > 2) {
                                $.each(data.clearnotification.notifications, function(i) {
                                    if (($("#N" + this.id).size() == 0) && ($("#ctl_dlNotifications").find(".sidebarNotificationRow").size() < 3)) {
                                        $("#ctl00_dlNotifications").find(".sidebarNotificationRow:last").closest("tr").after("<tr id=N" + this.id + " style='height: 0px;'><td style='width: 8px;'></td><td class='sidebarNotificationRow'><div style='float: left; width: 132px;'>" + this.html + "</div><div style='float: right; width: 13px; padding:  14px 2px 14px 0px'><div class='grayExit clickable' onclick='ConstructionOnline.clearNotification(" + this.id + ")'></div></div></td><td style='width: 8px;'></td></tr>")
                                        $("#N" + dataString.NC).remove();
                                        $("#N" + this.id).show("fast");
                                    }
                                });
                            } else {
                                if (data.clearnotification.count == 0) {
                                    $("#notificationFooter").hide("fast");
                                    $("#ctl00_dlNotifications").stop().hide("fast");
                                    $("#ctl00_divNotificationsExclamation").stop().hide("fast");
                                }
                                $("#N" + dataString.NC).remove();
                            }
                        }
                    } else if (data.contactsearch) {
                        ConstructionOnline.closeDialog();
                        ConstructionOnline.modals.contact_search_results_modal.show(data, ConstructionOnline.modals.confirm_add_contact_modal.submit);
                    } else if (data.contactaddfriend) {
                        ConstructionOnline.closeDialog();
                        ConstructionOnline.mustReload = true;
                        ConstructionOnline.modals.invite_modal.show("C", data.confirmaddcontact, ConstructionOnline.modals.invite_modal.submit);
                    } else if (data.foldercreate) {
                        location.hash = "#H" + data.foldercreate;
                        location.search = "?find=H" + data.foldercreate + "&unused=" + (new Date()).getTime();
                        return;
                    } else if (data.folderrename) {
                        location.hash = "#" + data.context + data.folderrename;
                        location.search = "?find=" + data.context + data.folderrename + "&unused=" + (new Date()).getTime();
                        return;
                    } else if (data.albumcreate) {
                        location.hash = "#A" + data.albumcreate;
                        location.search = "?find=A" + data.albumcreate + "&unused=" + (new Date()).getTime();
                        return;
                    } else if (data.notesave) {
                        ConstructionOnline.modals.note_modal.id = data.notesave;
                        ConstructionOnline.mustReload = true;
                        ConstructionOnline.modals.note_modal.changeTab(2);                    
                    } else if (data.projectadd) {
                        ConstructionOnline.modals.project_modal.id = data.projectID;
                        ConstructionOnline.mustReload = true;
                        ConstructionOnline.modals.project_modal.changeTab(data.projectadd);
                    } else if (data.projectedit) {
                        ConstructionOnline.modals.project_modal.id = data.projectID;
                        ConstructionOnline.mustReload = true;
                        ConstructionOnline.modals.project_modal.changeTab(data.projectedit);
                    } else if (data.filerename) {
                        location.hash = "#" + data.context + data.filerename;
                        location.search = "?find=" + data.context + data.filerename + "&unused=" + (new Date()).getTime();
                        return;
                    } else if (data.projectrelations) {
                        if (ConstructionOnline.modals.project_modal.adding) {
                            ConstructionOnline.mustReload = true;
                            ConstructionOnline.modals.invite_modal.show("P", data.projectrelations, ConstructionOnline.modals.invite_modal.submit)
                        } else {
                            location.hash = "#P" + data.projectrelations;
                            location.search = "?find=P" + data.projectrelations + "&unused=" + (new Date()).getTime();
                            return;
                        }
                    } else if (data.search) {
                        location.search = data + "&unused=" + (new Date()).getTime();
                    } else if (data.reload) {
                        location.reload();
                        return;
                    } else if (data.verifyPermission) {
                        fn();
                    } else if (data.feedback) {
                        ConstructionOnline.modals.feedback_modal.showSuccessMessage();
                    } else {
                        ConstructionOnline.alert("Your changes were unable to be completed at this time, please try the action again.");
                        location.reload();
                        return;
                    }
                    if (ConstructionOnline.currentDialog) {
                        if (data.feedback) {
                            ConstructionOnline.currentDialog.find(".mdlProcessingWrapper").stop().hide(0);
                            ConstructionOnline.currentDialog.find(".cancelButton").stop().show(0);
                        } else {
                            ConstructionOnline.currentDialog.find(".mdlProcessingWrapper").stop().hide(0);
                            ConstructionOnline.currentDialog.find(".submitButton,.cancelButton").stop().show(0);
                            $("#mdlShareCheckboxWrapper").stop().show(0);
                        }
                    }
                    //ConstructionOnline.modal_actions.ajaxPosts[action] = undefined; //we are done with this request
                },
                error: function(XMLHttpRequest, textStatus, errorThrown) {
                    ConstructionOnline.alert("Your changes were unable to be completed at this time, please try the action again.\n  Status:" + textStatus + "\n  Error:" + errorThrown);
                    location.reload();
                    //ConstructionOnline.modal_actions.ajaxPosts[action] = undefined; //we are done with this request
                }
            });
            return ConstructionOnline.modal_actions.ajaxPosts[action];
        },
        company: function() {
            var $modal = $(m.$company());
            var company = $modal.find("#mdlCompanyCompany");
            var email = $modal.find("#mdlCompanyEmail");
            var addr = $modal.find("#mdlCompanyAddress");
            var city = $modal.find("#mdlCompanyCity");
            var state = $modal.find("#mdlCompanyState");
            var zip = $modal.find("#mdlCompanyZip");
            var phone = $modal.find("#mdlCompanyPhone");
            var mobile = $modal.find("#mdlCompanyMobile");
            var fax = $modal.find("#mdlCompanyFax");
            var provider = $modal.find("#mdlCompanyProvider");

            $modal.find("input").removeClass("modal-field-error");

            company.val(company.val().trim());
            email.val(email.val().trim());
            addr.val(addr.val().trim());
            city.val(city.val().trim());
            state.val(state.val().trim());
            zip.val(zip.val().trim());
            phone.val(phone.val().trim());
            mobile.val(mobile.val().trim());
            fax.val(fax.val().trim());
            provider.val(provider.val().trim());

            var cmpValid = true;
            var emailValid = true;
            var addrValid = true;
            var cityValid = true;
            var stateValid = true;
            var zipValid = true;
            var phoneValid = true;
            var mobileValid = true;
            var faxValid = true;
            var providerValid = true;

            cmpValid = ConstructionOnline.validation.checkRegExp(company, ConstructionOnline.validation.names, true);
            emailValid = ConstructionOnline.validation.checkLength(email, 5, 64) && ConstructionOnline.validation.checkRegExp(email, ConstructionOnline.validation.email, true);
            addrValid = ConstructionOnline.validation.checkRegExp(addr, ConstructionOnline.validation.names, false);
            cityValid = ConstructionOnline.validation.checkRegExp(city, ConstructionOnline.validation.names, false);
            stateValid = ConstructionOnline.validation.checkRegExp(state, ConstructionOnline.validation.names, false);
            zipValid = ConstructionOnline.validation.checkRegExp(zip, ConstructionOnline.validation.names, false);
            phoneValid = ConstructionOnline.validation.checkRegExp(phone, ConstructionOnline.validation.names, false);
            mobileValid = ConstructionOnline.validation.checkRegExp(mobile, ConstructionOnline.validation.names, false);
            faxValid = ConstructionOnline.validation.checkRegExp(fax, ConstructionOnline.validation.names, false);
            providerValid = ConstructionOnline.validation.checkRegExp(provider, ConstructionOnline.validation.provider, false);

            if (cmpValid && emailValid && addrValid && cityValid && zipValid && stateValid && phoneValid && mobileValid && faxValid && providerValid) {
                var dataString = "&company=" + escape(company.val()) + "&email=" + escape(email.val()) + "&addr=" + escape(addr.val()) + "&city=" + escape(city.val()) + "&zip=" + escape(zip.val()) + "&state=" + escape(state.val()) + "&phone=" + escape(phone.val()) + "&mobile=" + escape(mobile.val()) + "&fax=" + escape(fax.val()) + "&provider=" + escape(provider.val());
                return dataString;
            } else {
                var errorMessage = "";
                if (!cmpValid) {
                    errorMessage += "<b>Company</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                }
                if (!emailValid) {
                    errorMessage += "<b>Email</b> : " + ConstructionOnline.validation.emailText + "\n\n";
                }
                if (!addrValid) {
                    errorMessage += "<b>Street Address</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                }
                if (!cityValid) {
                    errorMessage += "<b>City</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                }
                if (!stateValid) {
                    errorMessage += "<b>State</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                }
                if (!zipValid) {
                    errorMessage += "<b>Zip</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                }
                if (!phoneValid) {
                    errorMessage += "<b>Phone</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                }
                if (!mobileValid) {
                    errorMessage += "<b>Mobile</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                }
                if (!faxValid) {
                    errorMessage += "<b>Fax</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                }
                if (!providerValid) {
                    errorMessage += "<b>Mobile Provider</b> : " + ConstructionOnline.validation.providerText + "\n\n";
                }
                ConstructionOnline.alert(errorMessage);
                return -1;
            }
        },
        getVisibleSections: function() {
            var visibleSections = 0;
            if (document.getElementById("mdlPublicProfileShowWebsite").checked) { visibleSections += 1; }
            if (document.getElementById("mdlPublicProfileShowRecentProjects").checked) { visibleSections += 2; }
            if (document.getElementById("mdlPublicProfileShowRecentPhotos").checked) { visibleSections += 4; }
            if (document.getElementById("mdlPublicProfileShowPhone").checked) { visibleSections += 8; }
            if (document.getElementById("mdlPublicProfileShowMobile").checked) { visibleSections += 16; }
            if (document.getElementById("mdlPublicProfileShowFax").checked) { visibleSections += 32; }
            if (document.getElementById("mdlPublicProfileShowSummary").checked) { visibleSections += 64; }
            if (document.getElementById("mdlPublicProfileShowExperience").checked) { visibleSections += 128; }
            if (document.getElementById("mdlPublicProfileShowAddress").checked) { visibleSections += 256; }
            return visibleSections;
        },
        manageAdministrators: function() {
            var $checkboxes = $(m.$manageAdministrators()).find("input[type='checkbox']:checked");

            var result = "";

            $checkboxes.each(function(pos) {
                if (pos > 0) { result += ","; }
                result += escape($(this).attr("name"));
            });

            return result;
        },
        move: function() {
            var $modal = $(m.$move());

            var destination = $modal.find(".destination").closest("div");

            var dataString = "&destination=" + escape(destination.attr("name"));
            return dataString;
        },
        textEntry: function() {
            var $modal = $(m.$textEntry());
            var text = $modal.find("#mdlTextEntryText");
            text.val(text.val().trim());
            text.removeClass("modal-field-error");
            var isAlbum = "0";
            if ($modal.find("#mdlTextEntryChkIsAlbum:checked").size() > 0) {
                isAlbum = "1";
            }
            if (ConstructionOnline.validation.checkRegExp(text, ConstructionOnline.validation.names, true)) {
                return "&text=" + escape(text.val()) + "&isAlbum=" + escape(isAlbum);
            } else {
                ConstructionOnline.alert(ConstructionOnline.validation.namesText);
                return -1;
            }
        },
        textEntryEmail: function() {
            var $modal = $(m.$textEntry());
            var text = $modal.find("#mdlTextEntryText");
            text.val(text.val().trim());
            text.removeClass("modal-field-error");

            if (ConstructionOnline.validation.checkLength(text, 5, 64) && ConstructionOnline.validation.checkRegExp(text, ConstructionOnline.validation.email, true)) {
                return "&text=" + escape(text.val());
            } else {
                ConstructionOnline.alert(ConstructionOnline.validation.namesText);
                return -1;
            }
        },
        textEntryNameOrEmail: function() {
            var $modal = $(m.$textEntry());
            var text = $modal.find("#mdlTextEntryText");
            text.val(text.val().trim());
            text.removeClass("modal-field-error");

            var validName = ConstructionOnline.validation.checkRegExp(text, ConstructionOnline.validation.names, true);
            var validEmail = (ConstructionOnline.validation.checkLength(text, 5, 64) && ConstructionOnline.validation.checkRegExp(text, ConstructionOnline.validation.email, true));
            text.removeClass("modal-field-error");            

            if (validName || validEmail) {
                return "&text=" + escape(text.val());
            } else {
                text.addClass("modal-field-error");
                if (!validEmail) {
                    ConstructionOnline.alert(ConstructionOnline.validation.emailText);
                } else {
                    ConstructionOnline.alert(ConstructionOnline.validation.namesText);
                }
                return -1;
            }
        },
        textMessage: function() {
            var $modal = $(m.$textMessage());

            var subject = $modal.find("#mdlTextMessageSubject").val().replace("&", "%26");
            var message = $modal.find("#mdlTextMessageMessage").val().replace("&", "%26");

            return "&subject=" + escape(subject) + "&message=" + escape(message);
        },
        share: function(action, id) {
            var $modal = $(m.$share());

            var email = $modal.find("#mdlShareEmail");
            var message = $modal.find("#mdlShareMessage");
            var includeComments = $modal.find("#mdlShareIncludeComments");
            $modal.find(".modal-field-error").removeClass("modal-field-error");

            emailValid = ConstructionOnline.validation.checkLength(email, 5, 64) && ConstructionOnline.validation.checkRegExp(email, ConstructionOnline.validation.email, true);

            if (emailValid) {
                var includeCommentsVal = "off";
                if(includeComments.is(":checked")) {
                    includeCommentsVal = "on";
                }
                var datastring = "action=" + escape(action) + "&id=" + escape(id) + "&email=" + escape(email.val()) + "&message=" + escape(message.val()) + "&includeComments=" + escape(includeCommentsVal);
                return datastring;
            } else {
                var errorMessage = "";
                if (!emailValid) {
                    errorMessage += "Email : " + ConstructionOnline.validation.emailText + "\n\n";
                }
                ConstructionOnline.alert(errorMessage);
                return -1;
            }
        },
        upload: function() {
            var $uploads = $("#mdlUploadFile").find("input.upload");
            var dataString = "/post/submits.aspx?action=fileUpload&prjID=" + escape(s.getProject()) + "&prnID=" + escape(s.getFolder(true));
            return dataString;
        },
        submitAlbumCreate: function() {
            $(m.$textEntry()).find(".mdlProcessingWrapper").stop().show(0);
            $(m.$textEntry()).find(".submitButton,.cancelButton").stop().hide(0);
            var valid = this.textEntry();
            if (valid != -1) {
                var dataString = "action=albumCreate&prnID=" + escape(s.getFolder(true)) + "&prjID=" + escape(s.getProject()) + valid;
                ConstructionOnline.modal_actions.ajaxPost(dataString);
            } else {
                $(m.$textEntry()).find(".mdlProcessingWrapper").stop().hide(0);
                $(m.$textEntry()).find(".submitButton,.cancelButton").stop().show(0);
            }
        },
        submitCompanySearch: function() {
            $(m.$textEntry()).find(".mdlProcessingWrapper").stop().show(0);
            $(m.$textEntry()).find(".submitButton,.cancelButton").stop().hide(0);
            var valid = this.textEntryEmail();
            if (valid != -1) {
                var datastring = "action=companySearch" + valid;
                ConstructionOnline.modal_actions.ajaxPost(datastring);
            } else {
                $(m.$textEntry()).find(".mdlProcessingWrapper").stop().hide(0);
                $(m.$textEntry()).find(".submitButton,.cancelButton").stop().show(0);
            }
        },
        submitContactSearch: function() {
            $(m.$textEntry()).find(".mdlProcessingWrapper").stop().show(0);
            $(m.$textEntry()).find(".submitButton,.cancelButton").stop().hide(0);
            var valid = this.textEntryNameOrEmail();
            if (valid != -1) {
                var datastring = "action=contactSearch" + valid;
                ConstructionOnline.modal_actions.ajaxPost(datastring);
            } else {
                $(m.$textEntry()).find(".mdlProcessingWrapper").stop().hide(0);
                $(m.$textEntry()).find(".submitButton,.cancelButton").stop().show(0);
            }
        },
        submitCompanyAdd: function() {
            $(m.$company()).find(".mdlProcessingWrapper").stop().show(0);
            $(m.$company()).find(".submitButton,.cancelButton").stop().hide(0);
            var valid = this.company();
            if (valid != -1) {
                var datastring = "action=companyAdd" + valid;
                ConstructionOnline.modal_actions.ajaxPost(datastring);
            } else {
                $(m.$company()).find(".mdlProcessingWrapper").stop().hide(0);
                $(m.$company()).find(".submitButton,.cancelButton").stop().show(0);
            }
        },
        submitCompanyEdit: function(id) {
            $(m.$company()).find(".mdlProcessingWrapper").stop().show(0);
            $(m.$company()).find(".submitButton,.cancelButton").stop().hide(0);
            var valid = this.company();
            if (valid != -1) {
                var datastring = "action=companyEdit&id=" + escape(id) + valid;
                ConstructionOnline.modal_actions.ajaxPost(datastring);
            } else {
                $(m.$company()).find(".mdlProcessingWrapper").stop().hide(0);
                $(m.$company()).find(".submitButton,.cancelButton").stop().show(0);
            }

        },
        submitContactDelete: function(id) {
            $(m.$confirm()).find(".mdlProcessingWrapper").stop().show(0);
            $(m.$confirm()).find(".submitButton,.cancelButton").stop().hide(0);
            var datastring = "action=contactDelete&id=" + escape(id);
            ConstructionOnline.modal_actions.ajaxPost(datastring);
        },
        submitNoteDelete: function(id) {
            $(m.$confirm()).find(".mdlProcessingWrapper").stop().show(0);
            $(m.$confirm()).find(".submitButton,.cancelButton").stop().hide(0);
            var datastring = "action=noteDelete&id=" + escape(id);
            ConstructionOnline.modal_actions.ajaxPost(datastring);
        },
        submitContactRemove: function(id) {
            $(m.$confirm()).find(".mdlProcessingWrapper").stop().show(0);
            $(m.$confirm()).find(".submitButton,.cancelButton").stop().hide(0);
            var datastring = "action=contactRemove&id=" + escape(id);
            ConstructionOnline.modal_actions.ajaxPost(datastring);
        },
        submitFileDelete: function(id) {
            $(m.$confirm()).find(".mdlProcessingWrapper").stop().show(0);
            $(m.$confirm()).find(".submitButton,.cancelButton").stop().hide(0);
            var datastring = "action=fileDelete&id=" + escape(id);
            ConstructionOnline.modal_actions.ajaxPost(datastring);
        },
        submitFileRename: function(id) {
            $(m.$textEntry()).find(".mdlProcessingWrapper").stop().show(0);
            $(m.$textEntry()).find(".submitButton,.cancelButton").stop().hide(0);
            var valid = this.textEntry();
            if (valid != -1) {
                var dataString = "action=fileRename&id=" + escape(id) + valid;
                ConstructionOnline.modal_actions.ajaxPost(dataString);
            } else {
                $(m.$textEntry()).find(".mdlProcessingWrapper").stop().hide(0);
                $(m.$textEntry()).find(".submitButton,.cancelButton").stop().show(0);
            }

        },
        submitFileShare: function(id) {
            $(m.$share()).find("#mdlShareCheckboxWrapper").stop().hide();
            $(m.$share()).find(".mdlProcessingWrapper").stop().show(0);
            $(m.$share()).find(".submitButton,.cancelButton").stop().hide(0);
            var valid = this.share("shareFile", id);
            if (valid != -1) {
                ConstructionOnline.modal_actions.ajaxPost(valid);
            } else {
                $(m.$share()).find(".mdlProcessingWrapper").stop().hide(0);
                $(m.$share()).find(".submitButton,.cancelButton").stop().show(0);
                $(m.$share()).find("#mdlShareCheckboxWrapper").stop().show();
            }
        },
        submitFileUpload: function() {
            $(m.$upload()).find(".mdlProcessingWrapper").stop().show(0);
            $(m.$upload()).find(".submitButton,.cancelButton").stop().hide(0);
            var valid = this.upload();
            if (valid != -1) {
                $("#mdlUploadContentTitle").text("Files are uploading...");
                $("#mdlUploadContentSubTitle").show().text("The window will automatically refresh when complete.");
                $("#mdlUploadContentLabel").hide();
                $("#mdlUploadFile").attr("action", valid).submit();
            } else {
                ConstructionOnline.alert("A file has not been selected to upload.");
                $(m.$upload()).find(".mdlProcessingWrapper").stop().hide(0);
                $(m.$upload()).find(".submitButton,.cancelButton").stop().show(0);
            }
        },
        submitFolderDelete: function(id) {
            $(m.$confirm()).find(".mdlProcessingWrapper").stop().show(0);
            $(m.$confirm()).find(".submitButton,.cancelButton").stop().hide(0);
            var datastring = "action=folderDelete&id=" + escape(id);
            ConstructionOnline.modal_actions.ajaxPost(datastring);
        },
        submitFolderCreate: function(context, id) {
            $(m.$textEntry()).find(".mdlProcessingWrapper").stop().show(0);
            $(m.$textEntry()).find(".submitButton,.cancelButton").stop().hide(0);
            var valid = this.textEntry();
            if (valid != -1) {
                if (context == "P") {
                  id = "";
                }
                var dataString = "action=folderCreate&prnID=" + escape(id) + "&prjID=" + escape(s.getProject()) + valid;
                ConstructionOnline.modal_actions.ajaxPost(dataString);
            } else {
                $(m.$textEntry()).find(".mdlProcessingWrapper").stop().hide(0);
                $(m.$textEntry()).find(".submitButton,.cancelButton").stop().show(0);
            }
        },
        submitFolderRename: function(id) {
            $(m.$textEntry()).find(".mdlProcessingWrapper").stop().show(0);
            $(m.$textEntry()).find(".submitButton,.cancelButton").stop().hide(0);
            var valid = this.textEntry();
            if (valid != -1) {
                var dataString = "action=folderRename&id=" + escape(id) + valid;
                ConstructionOnline.modal_actions.ajaxPost(dataString);
            } else {
                $(m.$textEntry()).find(".mdlProcessingWrapper").stop().hide(0);
                $(m.$textEntry()).find(".submitButton,.cancelButton").stop().show(0);
            }

        },
        submitManageAdministrators: function(id) {
            $(m.$manageAdministrators()).find(".mdlProcessingWrapper").stop().show(0);
            $(m.$manageAdministrators()).find(".submitButton,.cancelButton").stop().hide(0);
            var valid = this.manageAdministrators();
            if (valid != -1) {
                var datastring = "action=manageAdministrators&id=" + escape(id) + "&admins=" + valid;
                ConstructionOnline.modal_actions.ajaxPost(datastring);
            } else {
                $(m.$manageAdministrators()).find(".mdlProcessingWrapper").stop().hide(0);
                $(m.$manageAdministrators()).find(".submitButton,.cancelButton").stop().show(0);
            }
        },
        submitMove: function(id) {
            $(m.$move()).find(".mdlProcessingWrapper").stop().show(0);
            $(m.$move()).find(".submitButton,.cancelButton").stop().hide(0);
            var valid = this.move();
            if (valid != -1) {
                var datastring = "action=move&id=" + escape(id) + valid;
                ConstructionOnline.modal_actions.ajaxPost(datastring);
            } else {
                $(m.$move()).find(".mdlProcessingWrapper").stop().hide(0);
                $(m.$move()).find(".submitButton,.cancelButton").stop().show(0);
            }
        },
        submitProjectDelete: function(id) {
            $(m.$confirm()).find(".mdlProcessingWrapper").stop().show(0);
            $(m.$confirm()).find(".submitButton,.cancelButton").stop().hide(0);
            var datastring = "action=projectDelete&id=" + escape(id);
            ConstructionOnline.modal_actions.ajaxPost(datastring);
        },
        submitTextMessage: function(id) {
            $(m.$textMessage()).find(".mdlProcessingWrapper").stop().show(0);
            $(m.$textMessage()).find(".submitButton,.cancelButton").stop().hide(0);
            var valid = this.textMessage();
            if (valid != -1) {
                var dataString = "action=textMessage&id=" + escape(id) + valid;
                ConstructionOnline.modal_actions.ajaxPost(dataString);
            } else {
                $(m.$textMessage()).find(".mdlProcessingWrapper").stop().hide(0);
                $(m.$textMessage()).find(".submitButton,.cancelButton").stop().show(0);
            }
        }
    },
    modals: {
        alert_modal: {
            show: function(message) {
                $("select").hide();
                var $modal = $(m.$alert());
                $modal.find("#mdlAlertMessage").html(message);
                $modal.find("#mdlAlertSubmit").unbind("click").click(function() { if (ConstructionOnline.mustReload === true) { location.reload(); } else { $("select").show(); $modal.dialog("close"); } });
                var cd = ConstructionOnline.currentDialog;
                ConstructionOnline.showDialog($modal, 480);
                ConstructionOnline.currentDialog = cd;
            }
        },
        contact_search_results_modal: {
            addContact: function(id) {
                ConstructionOnline.modals.confirm_add_contact_modal.show(ConstructionOnline.modals.contact_search_results_modal.data[id]);
            },
            show: function(data, submit) {
                var $modal = $(m.$contactSearchResults());

                var resultsHTML = "";
                
                ConstructionOnline.modals.contact_search_results_modal.data = new Array();
                $.each(data.contacts, function(index, obj) {
                    ConstructionOnline.modals.contact_search_results_modal.data[obj.id] = obj;
                    resultsHTML += '<div style="border-bottom: thin solid rgb(153, 153, 153); background-color: white; position: relative; height: 45px;">';
                    resultsHTML += '<div class="blueContact" style="position: absolute; top: 14px; left: 10px;"></div>';
                    resultsHTML += '<div style="position: absolute; top: 8px; left: 40px;">' + obj.firstName + ' ' + obj.lastName + '</div>';
                    resultsHTML += '<div style="position: absolute; top: 22px; left: 40px; color: rgb(153, 153, 153);">' + obj.company + '</div>';
                    resultsHTML += '<div style="position: absolute; top: 8px; right: 80px; color: rgb(153, 153, 153);">' + obj.city + '</div>';
                    resultsHTML += '<div style="position: absolute; top: 22px; right: 80px; color: rgb(153, 153, 153);">' + obj.state + '</div>';
                    resultsHTML += '<div style="position: absolute; top: 13px; right: 10px; display: block;" class="buttonBase58 clickable hoverable" onclick="ConstructionOnline.modals.contact_search_results_modal.addContact(' + obj.id + ');return false;">';
                    resultsHTML += '<a style="color: rgb(224, 225, 226); font-size: 9pt; font-weight: bold; text-decoration: none; position: absolute; left: 18px;" href="" onclick="return false;">Add</a>';
                    resultsHTML += '</div>';
                    resultsHTML += '</div>';
                });
                
                resultsHTML += '<div style="position: relative; background-color: white; height: 45px;">';
                resultsHTML += '<a class="clickable" style="font-weight: bold; color: rgb(52, 110, 148);" href="" onclick="ConstructionOnline.modals.contact_modal.createNewContact();return false;">';
                resultsHTML += '<div style="position: absolute; right: 120px; top: 6px; background-color: white;" class="newContactFooter"></div>';
                resultsHTML += '<div style="position: absolute; right: 10px; top: 15px; text-decoration:underline">Add New Contact</div>';
                resultsHTML += '</a>';
                resultsHTML += '</div>';

                $modal.find("#mdlContactSearchResultsResults").html(resultsHTML);

                $modal.find("#mdlContactSearchResultsCancel").unbind("click").click(function() { if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); } });

                ConstructionOnline.showDialog($modal, 756);
            }
        },
        confirm_add_contact_modal: {
            show: function(data) {
                var $modal = $(m.$confirmAddContact());

                if (!data.profilePicture || data.profilePicture.length == 0) {
                    data.width = 0; 
                    $modal.find("#mdlConfirmAddContactPicture").css("margin-right", 0);
                } else {
                    $modal.find("#mdlConfirmAddContactPicture").css("margin-right", 20);
                }
                $modal.find("#mdlConfirmAddContactPicture").html("&nbsp;").css("background-image", "url(" + data.profilePicture + ")").css("width", data.width).css("height", data.height);
                $modal.find("#mdlConfirmAddContactName").html(data.firstName + " " + data.lastName);
                $modal.find("#mdlConfirmAddContactCompany").html(data.company);
                $modal.find("#mdlConfirmAddContactAddress").html(data.address);
                $modal.find("#mdlConfirmAddContactCity").html(data.city);
                if (data.state.length > 0) { data.state = ", " + data.state; }
                $modal.find("#mdlConfirmAddContactState").html(data.state);
                $modal.find("#mdlConfirmAddContactZip").html("&nbsp;" + data.zip);
                $modal.find("#mdlConfirmAddContactPhone").html(data.phone);
                $modal.find("#mdlConfirmAddContactEmail").html(data.email);
                $modal.find("#mdlConfirmAddContactSubmit").unbind("click").click(ConstructionOnline.modals.confirm_add_contact_modal.submit);

                $modal.find("#mdlConfirmAddContactCancel").unbind("click").click(function() { if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); } });

                ConstructionOnline.modals.confirm_add_contact_modal.id = data.id;

                ConstructionOnline.showDialog($modal, 756);
            },
            submit: function() {
                var datastring = "action=contactaddfriend&id=" + escape(ConstructionOnline.modals.confirm_add_contact_modal.id);
                ConstructionOnline.modal_actions.ajaxPost(datastring);
            }
        },
        contact_modal: {
            id: undefined,
            adding: false,
            changeTab: function(tabIndex) {
                var $modal = $(m.$contact)
                $modal.find("input").removeClass("modal-field-error");
                //make it change the submit function each time
                //make new submit functions
                switch (tabIndex) {
                    case 1:
                    case "1":
                        //$modal.find("#mdlContactHeaderProgress").html("Step 1 of 3");
                        $modal.find("#mdlContactSecondPane, #mdlContactThirdPane").stop().hide(0);
                        $modal.find("#mdlContactFirstPane").stop().show(0);
                        $modal.find("#mdlContactNotificationText").stop().show(0).removeClass().css("font-size", "").addClass("requiredFieldInformation").text("* Required Field");
                        break;
                    case 2:
                    case "2":
                        //$modal.find("#mdlContactHeaderProgress").html("Step 2 of 3");
                        $modal.find("#mdlContactProfessionImage").removeClass().addClass(ConstructionOnline.getFieldThumbnail($modal.find("#ctl00_mdlContactField").val()));
                        $modal.find("#mdlContactSubmit").unbind("click").click(ConstructionOnline.modals.contact_modal.submitPicture)
                        $modal.find("#mdlContactTitle").text("Select and Upload Your Profile Image");
                        $modal.find("#mdlContactFirstPane, #mdlContactThirdPane").stop().hide(0);
                        $modal.find("#mdlContactSecondPane").stop().show(0);
                        $modal.find("#mdlContactNotificationText").stop().show(0).removeClass().css("font-size", "11px").text("Acceptable image file types are JPG, GIF, BMP, TIFF & PNG");
                        break;
                    case 3:
                    case "3":
                        //$modal.find("#mdlContactHeaderProgress").html("Step 3 of 3");
                        $modal.find("#mdlContactSubmit").unbind("click").click(ConstructionOnline.modals.contact_modal.submitProfile)
                        $modal.find("#mdlContactTitle").text("Choose Public Profile Settings");
                        $modal.find("#mdlContactIcon").removeClass().addClass("modalHeaderIcon modalHeaderPublicProfile");
                        $modal.find("#mdlContactSecondPane, #mdlContactFirstPane").stop().hide(0);
                        $modal.find("#mdlContactThirdPane").stop().show(0);
                        $modal.find("#mdlContactNotificationText").stop().hide(0);
                        break;
                    default:
                        ConstructionOnline.alert("unknown tab");
                }
                $modal.find(".mdlProcessingWrapper").stop().hide();
                $modal.find(".submitButton,.cancelButton").stop().show(0);
            },
            createNewContact: function() {
                ConstructionOnline.modals.contact_modal.noSearchResults = false;
                ConstructionOnline.modals.contact_modal.show(undefined, ConstructionOnline.modals.contact_modal.submitAdd);
            },
            createNewContactNoSearchResults: function(email) {
                ConstructionOnline.modals.contact_modal.noSearchResults = true;
                ConstructionOnline.modals.contact_modal.email = email;
                ConstructionOnline.modals.contact_modal.show(undefined, ConstructionOnline.modals.contact_modal.submitAdd);
            },
            editContact: function() {
                ConstructionOnline.modals.contact_modal.noSearchResults = false;
                ConstructionOnline.modals.contact_modal.show(s.getContact(), ConstructionOnline.modals.contact_modal.submitEdit);
            },
            editUser: function() {
                ConstructionOnline.modals.contact_modal.show(s.getUser(), ConstructionOnline.modals.contact_modal.submitEdit);
            },
            forceEditUser: function() {
                ConstructionOnline.modals.contact_modal.show(s.getUser(), ConstructionOnline.modals.contact_modal.submitEdit, undefined, function() { ConstructionOnline.alert('You must enter a password and save your profile.'); return false; }, true);
            },
            load: function(firstName, middleInitial, lastName, field, company, email, address, city, state, zip, fax, phone, mobile, provider, website, visibleSections, summary, experience, profilePicture, useLogo) {
                var $modal = $(m.$contact());
                $modal.find("#mdlContactFirstName").val(ConstructionOnline.decode(firstName));
                $modal.find("#mdlContactMiddleInitial").val(ConstructionOnline.decode(middleInitial));
                $modal.find("#mdlContactLastName").val(ConstructionOnline.decode(lastName));
                $modal.find("#ctl00_mdlContactField").val(ConstructionOnline.decode(field));
                $modal.find("#mdlContactCompany").val(ConstructionOnline.decode(company));
                $modal.find("#mdlContactEmail").val(ConstructionOnline.decode(email));
                $modal.find("#mdlContactAddress").val(ConstructionOnline.decode(address));
                $modal.find("#mdlContactCity").val(ConstructionOnline.decode(city));
                $modal.find("#mdlContactState").val(ConstructionOnline.decode(state));
                $modal.find("#mdlContactZip").val(ConstructionOnline.decode(zip));
                $modal.find("#mdlContactFax").val(ConstructionOnline.decode(fax));
                $modal.find("#mdlContactPhone").val(ConstructionOnline.decode(phone));
                $modal.find("#mdlContactMobile").val(ConstructionOnline.decode(mobile));
                $modal.find("#mdlContactProvider").val(ConstructionOnline.decode(provider));
                $modal.find("#mdlContactWebsite").val(ConstructionOnline.decode(website));
                $modal.find("#mdlContactProfessionImage").removeClass().addClass(ConstructionOnline.getFieldThumbnail(field));
                if (profilePicture) { //if they have a profile picture
                    if (useLogo == 1) {
                        $modal.find("#mdlContactCompanyLogoImage").removeClass().css("background-image", "url(" + profilePicture + ")")
                        $modal.find("#mdlContactCompanyLogoRadio").click();
                    } else {
                        $modal.find("#mdlContactPortraitImage").removeClass().css("background-image", "url(" + profilePicture + ")")
                        $modal.find("#mdlContactPortraitRadio").click();                                           
                    }
                } else {
                    $modal.find("#mdlContactPortraitImage").css("background-image", "").addClass("theRumor")
                    $modal.find("#mdlContactCompanyLogoImage").css("background-image", "").addClass("blankCompanyLogo")
                    $modal.find("#mdlContactProfessionRadio").click();
                }

                if (summary.toString().length == 0) {
                    $modal.find("#mdlPublicProfileSummary").val("Your Summary should give a brief description of your current position and employer. You may want to describe any special skills and/or interests.").css("color", "#bbbbbb").attr("default", "true").focus(function() { if ($(this).attr("default") == "true") { $(this).attr("default", "false").css("color", "").val(""); } });
                } else {
                    $modal.find("#mdlPublicProfileSummary").val(ConstructionOnline.decode(summary));
                }

                if (experience.toString().length == 0) {
                    $modal.find("#mdlPublicProfileExperience").val("- Primary specialties (eg Single-Family Residential)\n- Number of years in the industry\n- Professional associations (eg NAHB, AIA, etc)").css("color", "#bbbbbb").attr("default", "true").focus(function() { if ($(this).attr("default") == "true") { $(this).attr("default", "false").css("color", "").val(""); } });
                } else {
                    $modal.find("#mdlPublicProfileExperience").val(ConstructionOnline.decode(experience));
                }

                document.getElementById("mdlPublicProfileShowWebsite").checked = visibleSections & 1;
                document.getElementById("mdlPublicProfileShowRecentProjects").checked = visibleSections & 2;
                document.getElementById("mdlPublicProfileShowRecentPhotos").checked = visibleSections & 4;
                document.getElementById("mdlPublicProfileShowPhone").checked = visibleSections & 8;
                document.getElementById("mdlPublicProfileShowMobile").checked = visibleSections & 16;
                document.getElementById("mdlPublicProfileShowFax").checked = visibleSections & 32;
                document.getElementById("mdlPublicProfileShowSummary").checked = visibleSections & 64;
                document.getElementById("mdlPublicProfileShowExperience").checked = visibleSections & 128;
                document.getElementById("mdlPublicProfileShowAddress").checked = visibleSections & 256;
            },
            show: function(id, action, fn, fnClose, hidePassword) {
                ConstructionOnline.modals.contact_modal.id = id;
                var $modal = $(m.$contact());
                var password = "none";
                var details = "none";
                var title;
                var icon;
                
                ConstructionOnline.modals.contact_modal.changeTab(1);

                $modal.find("#mdlContactSecondPane").unbind("click").click(function(e) {
                    var input = $(e.target);
                    if (input.attr("id") == "mdlContactCompanyLogoImage") {
                        $("#mdlContactCompanyLogoRadio").click();
                    } else if (input.attr("id") == "mdlContactPortraitImage") {
                        $("#mdlContactPortraitRadio").click();
                    } else if (input.attr("id") == "mdlContactProfessionImage") {
                        $("#mdlContactProfessionRadio").click();
                    }
                    if (input.val() == "companylogo") {
                        $("#mdlContactUploadPortrait").stop().fadeOut(100, function() { $("#mdlContactUploadCompanyLogo").stop().fadeIn(100); });
                    } else if (input.val() == "portrait") {
                        $("#mdlContactUploadCompanyLogo").stop().fadeOut(100, function() { $("#mdlContactUploadPortrait").stop().fadeIn(100); });
                    } else if (input.val() == "profession") {
                        $("#mdlContactUploadCompanyLogo").stop().fadeOut(100);
                        $("#mdlContactUploadPortrait").stop().fadeOut(100);
                    }
                });

                $modal.find("#mdlContactPicturesIframe").unbind("load").bind("load", function() {
                    if ($(this).contents().text().indexOf('next') > 0) {
                        ConstructionOnline.modals.contact_modal.changeTab(3);
                    }
                }).contents().html("");

                var goAheadAndShow = false;

                if (ConstructionOnline.modals.contact_modal.id == s.getUser()) {
                    $("#editProfileHeader").show();
                    $("#mdlContactHeaderTitle").html("Please Complete the Fields Below");
                    $("#mdlContactHeaderContent").html("Get the most out of ConstructionOnline by completing your profile. You may edit this information at any time by using the \"Edit Your Profile\" link on your Profile page.");
                    ConstructionOnline.modals.contact_modal.adding = false;
                    title = "Edit Your Personal Information";
                    icon = "modalHeaderContact";
                    password = "";
                    details = "";

                    ConstructionOnline.modal_actions.ajaxGet({ action: "ContactDataJSON", "id": ConstructionOnline.modals.contact_modal.id }, function(data, text, dataObj) {
                        ConstructionOnline.modals.contact_modal.load(data.firstName, data.middleInitial, data.lastName, data.field, data.company, data.email, data.address, data.city, data.state, data.zip, data.fax, data.phone, data.mobile, data.provider, data.website, data.visibleSections, data.summary, data.experience, data.profilePicture, data.useLogo);
                        ConstructionOnline.modals.contact_modal.showAfterLoading($modal, fn, fnClose);
                    }, $modal);

                    goAheadAndShow = false;
                } else if (ConstructionOnline.modals.contact_modal.id) {
                    $("#editProfileHeader").hide();
                    ConstructionOnline.modals.contact_modal.adding = false;
                    title = "Edit " + s.getContactName();
                    icon = "modalHeaderEdit";
                    details = "";

                    ConstructionOnline.modal_actions.ajaxGet({ action: "ContactDataJSON", "id": ConstructionOnline.modals.contact_modal.id }, function(data, text, dataObj) {
                        ConstructionOnline.modals.contact_modal.load(data.firstName, data.middleInitial, data.lastName, data.field, data.company, data.email, data.address, data.city, data.state, data.zip, data.fax, data.phone, data.mobile, data.provider, data.website, data.visibleSections, data.summary, data.experience, data.profilePicture, data.useLogo);
                        ConstructionOnline.modals.contact_modal.showAfterLoading($modal, fn, fnClose);
                    }, $modal);

                    goAheadAndShow = false;
                } else if (ConstructionOnline.modals.contact_modal.noSearchResults === true) {
                    $("#editProfileHeader").show();
                    $("#mdlContactHeaderTitle").html("No Contacts Match Your Search");
                    $("#mdlContactHeaderContent").html("Enter the information for the contact you wish to add below.  The contact will receive an <br/>email inviting them to join ConstructionOnline.");
                    ConstructionOnline.modals.contact_modal.adding = true;
                    title = "Contact Not Found";
                    icon = "modalHeaderContact";
                    ConstructionOnline.modals.contact_modal.load("", "", "", 6, "", ConstructionOnline.modals.contact_modal.email, "", "", "", "", "", "", "", "", "", "", 0, "", "", "");

                    goAheadAndShow = true;
                } else {
                    $("#editProfileHeader").show();
                    $("#mdlContactHeaderTitle").html("Please Complete the Fields Below");
                    $("#mdlContactHeaderContent").html("Enter the information for the contact you wish to add below.  The contact will receive an <br/>email inviting them to join ConstructionOnline.");
                    ConstructionOnline.modals.contact_modal.adding = true;
                    title = "Create New Contact";
                    icon = "modalHeaderNewContact";
                    ConstructionOnline.modals.contact_modal.load("", "", "", 6, "", "", "", "", "", "", "", "", "", "", "", "", 0, "", "", "");

                    goAheadAndShow = true;
                }

                $modal.find("#mdlContactTitle").html(title);
                $modal.find("#mdlContactIcon").removeClass().addClass("modalHeaderIcon " + icon);
                $modal.find("#mdlContactPasswordBlock").css("display", password);
                $modal.find("#mdlContactDetailsBlock").css("display", details);

                $modal.find("#mdlContactSubmit").unbind("click").click(action);
                $modal.find("#mdlContactCancel").unbind("click").click(function() { if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); } });

                if (goAheadAndShow === true) {
                    ConstructionOnline.modals.contact_modal.showAfterLoading($modal, fn, fnClose);
                }
                
                if (hidePassword != true) {
                    $modal.find("#mdlContactPassword").val("##--**##");
                    $modal.find("#mdlContactPassword2").val("##--**##");
                }
            },
            showAfterLoading: function($modal, fn, fnClose) {
                ConstructionOnline.showDialog($modal, 756, fn, fnClose);
            },
            submitAdd: function() {
                $(m.$contact()).find(".mdlProcessingWrapper").stop().show(0);
                $(m.$contact()).find(".submitButton,.cancelButton").stop().hide(0);
                var valid = ConstructionOnline.modals.contact_modal.validateContact();
                if (valid != -1) {
                    var datastring = "action=contactAdd" + valid;
                    ConstructionOnline.modal_actions.ajaxPost(datastring);
                } else {
                    $(m.$contact()).find(".mdlProcessingWrapper").stop().hide(0);
                    $(m.$contact()).find(".submitButton,.cancelButton").stop().show(0);
                }
            },
            submitEdit: function() {
                $(m.$contact()).find(".mdlProcessingWrapper").stop().show(0);
                $(m.$contact()).find(".submitButton,.cancelButton").stop().hide(0);

                var valid = ConstructionOnline.modals.contact_modal.validateContact();
                if (valid != -1) {
                    var datastring = "action=contactEdit&id=" + escape(ConstructionOnline.modals.contact_modal.id) + valid;
                    ConstructionOnline.modal_actions.ajaxPost(datastring);
                } else {
                    $(m.$contact()).find(".mdlProcessingWrapper").stop().hide(0);
                    $(m.$contact()).find(".submitButton,.cancelButton").stop().show(0);
                }
            },
            submitPicture: function() {
                $(m.$contact()).find(".mdlProcessingWrapper").stop().show(0);
                $(m.$contact()).find(".submitButton,.cancelButton").stop().hide(0);

                var which = $("#mdlContactSecondPane input:checked").val()
                var file;
                if (which == "portrait") {
                    file = $("#mdlContactUploadPortrait").val()
                    if (file) {
                        if (ConstructionOnline.getFileIcon(file) != "FileTypesIMG") {
                            ConstructionOnline.alert("Acceptable image file types are JPG, GIF, BMP, TIFF & PNG")
                            return false;
                        }
                        $("#mdlcontactUploadPortraitForm").submit()
                    } else {
                        ConstructionOnline.modals.contact_modal.changeTab(3);
                    }
                } else if (which == "companylogo") {
                    file = $("#mdlContactUploadCompanyLogo").val()
                    if (file) {
                        if (ConstructionOnline.getFileIcon(file) != "FileTypesIMG") {
                            ConstructionOnline.alert("Acceptable image file types are JPG, GIF, BMP, TIFF & PNG")
                            return false;
                        }
                        $("#mdlContactUploadLogoForm").submit()
                    } else {
                        ConstructionOnline.modals.contact_modal.changeTab(3);
                    }
                } else if (which == "profession") {
                    ConstructionOnline.modal_actions.ajaxPost("action=profileProfession");
                }
            },
            submitProfile: function() {
                $(m.$contact()).find(".mdlProcessingWrapper").stop().show(0);
                $(m.$contact()).find(".submitButton,.cancelButton").stop().hide(0);

                var valid = ConstructionOnline.modals.contact_modal.validateProfile();
                if (valid != -1) {
                    var datastring = "action=profileEdit" + valid;
                    ConstructionOnline.modal_actions.ajaxPost(datastring);
                } else {
                    $(m.$contact()).find(".mdlProcessingWrapper").stop().hide(0);
                    $(m.$contact()).find(".submitButton,.cancelButton").stop().show(0);
                }
            },
            validateContact: function() {
                var $modal = $(m.$contact());

                $modal.find("input").removeClass("modal-field-error");

                var firstName = $modal.find("#mdlContactFirstName");
                var middleInitial = $modal.find("#mdlContactMiddleInitial");
                var lastName = $modal.find("#mdlContactLastName");
                var field = $modal.find("#ctl00_mdlContactField");
                var company = $modal.find("#mdlContactCompany");
                var email = $modal.find("#mdlContactEmail");
                var addr = $modal.find("#mdlContactAddress");
                var city = $modal.find("#mdlContactCity");
                var state = $modal.find("#mdlContactState");
                var zip = $modal.find("#mdlContactZip");
                var fax = $modal.find("#mdlContactFax");
                var phone = $modal.find("#mdlContactPhone");
                var mobile = $modal.find("#mdlContactMobile");
                var provider = $modal.find("#mdlContactProvider");
                var website = $modal.find("#mdlContactWebsite");
                var pw1 = $modal.find("#mdlContactPassword");
                var pw2 = $modal.find("#mdlContactPassword2");

                firstName.val(firstName.val().trim());
                middleInitial.val(middleInitial.val().trim());
                lastName.val(lastName.val().trim());
                company.val(company.val().trim());
                field.val(field.val().trim());
                email.val(email.val().trim());
                addr.val(addr.val().trim());
                city.val(city.val().trim());
                state.val(state.val().trim());
                zip.val(zip.val().trim());
                fax.val(fax.val().trim());
                phone.val(phone.val().trim());
                mobile.val(mobile.val().trim());
                provider.val(provider.val().trim());
                website.val(website.val().trim());
                pw1.val(pw1.val().trim());
                pw2.val(pw2.val().trim());

                var fnValid = true;
                var middleInitialValid = true;
                var lnValid = true;
                var fieldValid = true;
                var cmpValid = true;
                var emailValid = true;
                var addrValid = true;
                var cityValid = true;
                var stateValid = true;
                var zipValid = true;
                var faxValid = true;
                var phoneValid = true;
                var mobileValid = true;
                var providerValid = true;
                var websiteValid = true;
                var passwordMatch = true;
                var passwordValid = true;

                fnValid = ConstructionOnline.validation.checkRegExp(firstName, ConstructionOnline.validation.names, true);
                middleInitialValid = ConstructionOnline.validation.checkRegExp(middleInitial, ConstructionOnline.validation.names, false);
                lnValid = ConstructionOnline.validation.checkRegExp(lastName, ConstructionOnline.validation.names, true);
                fieldValid = true;
                cmpValid = ConstructionOnline.validation.checkRegExp(company, ConstructionOnline.validation.names, false);
                emailValid = ConstructionOnline.validation.checkLength(email, 5, 64) && ConstructionOnline.validation.checkRegExp(email, ConstructionOnline.validation.email, true);
                addrValid = ConstructionOnline.validation.checkRegExp(addr, ConstructionOnline.validation.names, false);
                cityValid = ConstructionOnline.validation.checkRegExp(city, ConstructionOnline.validation.names, false);
                stateValid = ConstructionOnline.validation.checkRegExp(state, ConstructionOnline.validation.names, false);
                zipValid = ConstructionOnline.validation.checkRegExp(zip, ConstructionOnline.validation.names, false);
                faxValid = ConstructionOnline.validation.checkRegExp(fax, ConstructionOnline.validation.names, false);
                phoneValid = ConstructionOnline.validation.checkRegExp(phone, ConstructionOnline.validation.names, false);
                mobileValid = ConstructionOnline.validation.checkRegExp(mobile, ConstructionOnline.validation.names, false);
                providerValid = ConstructionOnline.validation.checkRegExp(provider, ConstructionOnline.validation.provider, false);
                websiteValid = true;
                passwordMatch = ConstructionOnline.validation.checkMatch(pw1, pw2);
                passwordValid = ConstructionOnline.validation.checkLength(pw1, 0, 64);

                if (!passwordMatch) {
                    ConstructionOnline.alert("A new password wasn't typed twice successfully.  If you do not wish to change you password at this time, please clear both boxes.");
                    return -1;
                }
                if (!passwordValid) {
                    ConstructionOnline.alert("Passwords must be between less than 64 characters");
                    return -1;
                }

                if (fnValid && middleInitialValid && lnValid && fieldValid && cmpValid && emailValid && addrValid && cityValid && zipValid && stateValid && phoneValid && mobileValid && faxValid && providerValid && websiteValid && passwordMatch) {
                    var dataString = "&firstName=" + escape(firstName.val()) + "&middleInitial=" + escape(middleInitial.val()) + "&lastName=" + escape(lastName.val()) + "&field=" + escape(field.val()) + "&company=" + escape(company.val()) + "&email=" + escape(email.val()) + "&addr=" + escape(addr.val()) + "&city=" + escape(city.val()) + "&zip=" + escape(zip.val()) + "&state=" + escape(state.val()) + "&phone=" + escape(phone.val()) + "&mobile=" + escape(mobile.val()) + "&fax=" + escape(fax.val()) + "&provider=" + escape(provider.val()) + "&website=" + escape(website.val()) + "&pw=" + escape(pw1.val());
                    return dataString;
                } else {
                    var errorMessage = "";
                    if (!fnValid) {
                        errorMessage += "<b>First Name</b> : " + ConstructionOnline.validation.namesText + "<br/>";
                    }
                    if (!middleInitialValid) {
                        errorMessage += "<b>Middle Initial</b> : " + ConstructionOnline.validation.namesText + "<br/>";
                    }
                    if (!lnValid) {
                        errorMessage += "<b>Last Name</b> : " + ConstructionOnline.validation.namesText + "<br/>";
                    }
                    if (!cmpValid) {
                        errorMessage += "<b>Company</b> : " + ConstructionOnline.validation.namesText + "<br/>";
                    }
                    if (!emailValid) {
                        errorMessage += "<b>Email</b> : " + ConstructionOnline.validation.emailText + "<br/>";
                    }
                    if (!addrValid) {
                        errorMessage += "<b>Street Address</b> : " + ConstructionOnline.validation.namesText + "<br/>";
                    }
                    if (!cityValid) {
                        errorMessage += "<b>City</b> : " + ConstructionOnline.validation.namesText + "<br/>";
                    }
                    if (!stateValid) {
                        errorMessage += "<b>State</b> : " + ConstructionOnline.validation.namesText + "<br/>";
                    }
                    if (!zipValid) {
                        errorMessage += "<b>Zip</b> : " + ConstructionOnline.validation.namesText + "<br/>";
                    }
                    if (!faxValid) {
                        errorMessage += "<b>Fax</b> : " + ConstructionOnline.validation.namesText + "<br/>";
                    }
                    if (!phoneValid) {
                        errorMessage += "<b>Phone</b> : " + ConstructionOnline.validation.namesText + "<br/>";
                    }
                    if (!mobileValid) {
                        errorMessage += "<b>Mobile</b> : " + ConstructionOnline.validation.namesText + "<br/>";
                    }
                    if (!providerValid) {
                        errorMessage += "<b>Mobile Provider</b> : " + ConstructionOnline.validation.providerText + "<br/>";
                    }
                    ConstructionOnline.alert(errorMessage);
                    return -1;
                }
            },
            validateProfile: function() {
                var $modal = $(m.$contact());

                var summary = $modal.find("#mdlPublicProfileSummary");
                var experience = $modal.find("#mdlPublicProfileExperience");

                $modal.find("input").removeClass("modal-field-error");

                summary.val(summary.val().trim());
                experience.val(experience.val().trim());
                if (summary.attr("default") == "true") {
                    summary.val("");
                }
                if (experience.attr("default") == "true") {
                    experience.val("");
                }
                var visibleSections = ConstructionOnline.modal_actions.getVisibleSections();
                var summaryValid = true;
                var experienceValid = true;

                summaryValid = ConstructionOnline.validation.checkRegExp(summary, ConstructionOnline.validation.names, false); ;
                experienceValid = ConstructionOnline.validation.checkRegExp(experience, ConstructionOnline.validation.names, false); ;

                if (summaryValid && experienceValid) {
                    var dataString = "&visibleSections=" + escape(visibleSections) + "&summary=" + escape(summary.val()) + "&experience=" + escape(experience.val());
                    return dataString;
                } else {
                    var errorMessage = "";
                    if (!summaryValid) {
                        errorMessage += "<b>Summary</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    }
                    if (!experienceValid) {
                        errorMessage += "<b>Experience</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    }
                    ConstructionOnline.alert(errorMessage);
                    return -1;
                }
            }
        },
        note_modal: {
            changeTab: function(tabIndex) {
                var $modal = $(m.$note());   
                        
                if (tabIndex == 1) {
                    $modal.find("input").removeClass("modal-field-error");
                    $modal.find("#mdlNoteStepLbl").text("Step 1 of 2");
                    $modal.find("#mdlNoteDetailsBlock").show();
                    $modal.find("#mdlNoteContent").show();          
                    $modal.find("#mdlNoteFirstPane").show();                    
                    $modal.find("#mdlNoteSecondPane").hide();
                    $modal.find("#mdlNoteSubmit").removeClass().addClass("buttonBase128 modalButton128 submitButton hoverable").text("Save and Continue");                                     
                    
                    switch (ConstructionOnline.modals.note_modal.mode) {
                        case "edit":
                            $modal.find("#mdlNoteModalTitle").html("Edit Project Announcement");
                            $modal.find("#mdlNoteModalIcon").removeClass().addClass("modalHeaderIcon modalHeaderEdit");
                            $modal.find("#mdlNoteCreateInstructionsLbl").html("Please Edit Project Announcement Below");
                            $modal.find("#mdlNoteCreateInstructionsBody").html("Edit your project announcement below. When you are done, click<br>\"Save and Continue\". You can choose to re-email the announcement in the next step.");
                            $modal.find("#mdlNoteSubmit").unbind("click").click(ConstructionOnline.modals.note_modal.submitSave); 
                            break;
                        case "resend":
                            $modal.find("#mdlNoteModalTitle").html("Resend Project Announcement");
                            $modal.find("#mdlNoteModalIcon").removeClass().addClass("modalHeaderIcon modalHeaderResend");
                            $modal.find("#mdlNoteCreateInstructionsLbl").html("Please Edit Project Announcement Below (If Necessary)");
                            $modal.find("#mdlNoteCreateInstructionsBody").html("If you need to edit the project announcement, please do so below.<br> Click \"Save and Continue\" when you are done.");
                            $modal.find("#mdlNoteSubmit").unbind("click").click(ConstructionOnline.modals.note_modal.submitSave); 
                            break;
                        case "duplicate":
                            $modal.find("#mdlNoteModalTitle").html("Duplicate Project Announcement");
                            $modal.find("#mdlNoteModalIcon").removeClass().addClass("modalHeaderIcon modalHeaderCopyNote");
                            $modal.find("#mdlNoteCreateInstructionsLbl").html("Please Edit Project Announcement Below (If Necessary)");
                            $modal.find("#mdlNoteCreateInstructionsBody").html("If you need to edit the project announcement, please do so below.<br>The duplicated announcement will be reposted on the project details page.");
                            $modal.find("#mdlNoteSubmit").unbind("click").click(ConstructionOnline.modals.note_modal.submitAdd); 
                            break;
                        case "add":
                            $modal.find("#mdlNoteModalTitle").html("New Project Announcement");
                            $modal.find("#mdlNoteModalIcon").removeClass().addClass("modalHeaderIcon modalHeaderAnnounce");
                            $modal.find("#mdlNoteCreateInstructionsLbl").html("Please Enter Project Announcement Below");
                            $modal.find("#mdlNoteCreateInstructionsBody").html("Enter your project announcement below and set the priority.<br>You will select which contacts will receive email notifications in the next step.");
                            $modal.find("#mdlNoteSubmit").unbind("click").click(ConstructionOnline.modals.note_modal.submitAdd); 
                            break;
                    }
                } else {                    
                    $("#mdlNoteID").val(ConstructionOnline.modals.note_modal.id);
                    $modal.find("input").removeClass("modal-field-error");
                    $modal.find("#mdlNoteStepLbl").text("Step 2 of 2");
                    $modal.find("#mdlNoteFirstPane").hide();                
                    $modal.find("#mdlNoteSecondPane").show();       
                    $modal.find("#mdlNoteSubmit").removeClass().addClass("buttonBase58 modalButton58 submitButton hoverable").text("Send");
                    $modal.find("#mdlNoteSubmit").unbind("click").click(ConstructionOnline.modals.note_modal.submitSend);                
                    
                    $modal.find("#mdlNoteModalTitle").html("Optional Email to Contacts");
                    $modal.find("#mdlNoteModalIcon").removeClass().addClass("modalHeaderIcon modalHeaderAnnounce");
                    $modal.find("#mdlNoteCreateInstructionsLbl").html("Optional Email to Contacts");
                    $modal.find("#mdlNoteCreateInstructionsBody").html("Select contacts below who will receive email notifications of this announcement<br><b>Note:</b> All contacts for the project are able to view the announcement on the project details page.");
                    
                    $modal.find("#mdlNotesCheckAll").unbind("click").click(ConstructionOnline.modals.note_modal.selectAll);
                }
                
                $modal.find(".mdlProcessingWrapper").stop().hide(0);
                $modal.find(".submitButton,.cancelButton").stop().show(0);
            },
            create: function() {},
            edit: function() {},
            load: function(title, message, priority, contacts) {
                $("#mdlNoteTitle").val(ConstructionOnline.decode(title));
                $("#mdlNoteMessage").val(ConstructionOnline.decode(message));
                $('input[name="notePriority"]')[ConstructionOnline.decode(priority)].checked = true; 
                
                var html = "<table width=100% cellpadding=0 cellspacing=0>";
                for (var i in contacts) {
                    var entry = contacts[i];
                    html += "<tr style='height: 48px;'>" +
                        "<td style='width: 32px;border-bottom: solid 1px #AFAFAF; padding: 0px 8px 0px 16px;'><div class='" + ((entry["isuser"] == "1") ? "blueContact" : "blueContactDisabled") + "'><!--dude--></div></td>" +
                        "<td style='border-bottom: solid 1px #AFAFAF'><b>" + entry["name"] + "</b><br />" + entry["company"] + "</td>" +
                        "<td style='width: 72px;border-bottom: solid 1px #AFAFAF'><input type=checkbox id='NN" + entry["id"] + "' name='noteCheck' " + ((entry["selected"] == "1") ? "checked='checked'" : "") + " /></td></tr>";
                }        
                html += "</table>";
                $("#mdlNoteContactTable").html(html);        
            },
            selectAll: function() {
                var $modal = $(m.$note()); 
                
                var chk = $modal.find("#mdlNotesCheckAll").attr("checked");
                var entries = $('input[name=noteCheck]');
                for(i=0;i<entries.length;i++) {
                    entries.attr("checked", chk);
                }                            
            },
            submitAdd: function() {  
                var $modal = $(m.$note());                                         
                                                  
                $modal.find(".mdlProcessingWrapper").stop().show(0);
                $modal.find(".submitButton,.cancelButton").stop().hide(0);
                
                var title = $modal.find("#mdlNoteTitle").val();
                var message = $modal.find("#mdlNoteMessage").val();
                var priority = $('input[name=notePriority]:checked').val();
                var project = s.getProject();
                                  
                if(ConstructionOnline.modals.note_modal.validateDetails() == 1) {
                    var dataString = "action=noteSave&title=" + escape(title) + "&message=" + escape(message) + "&priority=" + escape(priority) + "&project=" + escape(project);
                    ConstructionOnline.modal_actions.ajaxPost(dataString);                           
                } else {
                    $modal.find(".mdlProcessingWrapper").stop().hide(0);
                    $modal.find(".submitButton,.cancelButton").stop().show(0);
                }                                          
            },
            submitSave: function() { 
                var $modal = $(m.$note());                                                                           
                
                $modal.find(".mdlProcessingWrapper").stop().show(0);
                $modal.find(".submitButton,.cancelButton").stop().hide(0);
                
                var title = $modal.find("#mdlNoteTitle").val();
                var message = $modal.find("#mdlNoteMessage").val();
                var priority = $('input[name=notePriority]:checked').val();
                var project = s.getProject();
                    
                if(ConstructionOnline.modals.note_modal.validateDetails() == 1) {
                    var dataString = "action=noteSave&noteID=" + escape(ConstructionOnline.modals.note_modal.id) + "&title=" + escape(title) + "&message=" + escape(message) + "&priority=" + escape(priority) + "&project=" + escape(project);
                    ConstructionOnline.modal_actions.ajaxPost(dataString);                            
                } else {
                    $modal.find(".mdlProcessingWrapper").stop().hide(0);
                    $modal.find(".submitButton,.cancelButton").stop().show(0);
                }
            },
            submitSend: function() {
                var $modal = $(m.$note());
                
                $modal.find(".mdlProcessingWrapper").stop().show(0);
                $modal.find(".submitButton,.cancelButton").stop().hide(0);
                
                var noteID = $("#mdlNoteID").val();
                var cons = $('input[name=noteCheck]:checked');
                var ids = ".";
                
                for(i=0;i<cons.length;i++) {
                    ids += cons[i].id.substr(2) + ".";   
                }
                
                var dataString="action=noteSend&noteID=" + escape(noteID) + "&conIDS=" + escape(ids);
                ConstructionOnline.modal_actions.ajaxPost(dataString);                 
            },         
            show: function(id, name, mode) {
                $("#mdlNoteID").val(id);
                ConstructionOnline.modals.note_modal.id = id;
                ConstructionOnline.modals.note_modal.mode = mode;
                               
                var $modal = $(m.$note());                
                ConstructionOnline.modals.note_modal.changeTab(1);                                                         
                                                                              
                $modal.find("#mdlNoteCancel").unbind("click").click(function() { if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); } });                
                                
                ConstructionOnline.modal_actions.ajaxGet({ action: "NoteDataJSON", "id": ConstructionOnline.modals.note_modal.id, "projectID": s.getProject }, function(data, text, dataObj) {
                    ConstructionOnline.modals.note_modal.load(data.title, data.message, data.priority, data.contacts);
                    ConstructionOnline.showDialog($modal, 756);
                }, $modal);
            },
            validateDetails: function() {
                var $modal = $(m.$note());
                
                var subject = $modal.find("#mdlNoteTitle");
                
                var subjectValid = true;
               
                $modal.find("input").removeClass("modal-field-error");

                subject.val(subject.val().trim());
               
                subjectValid = ConstructionOnline.validation.checkRegExp(subject, ConstructionOnline.validation.names, true);
                
                if (subjectValid) {                    
                    return 1
                } else {
                    var errorMessage = "";
                    if (!subjectValid) {
                        errorMessage += "<b>Announcement Subject</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    }                    
                    ConstructionOnline.alert(errorMessage);
                    return -1;
                }
            }
        },
        duplicateProject_modal: {
            show: function(id, name) {
                ConstructionOnline.modals.duplicateProject_modal.id = id;
                
                var $modal = $(m.$duplicateProject());
                
                $modal.find("#mdlDuplicateProjectNewName").val("Copy of " + name);                
                
                $modal.find("input:checkbox").attr("checked", false);
                
                $modal.find("#mdlDuplicateProjectChkFiles").unbind("change").bind("change", function() {
                    if($(this).is(":checked")) {
                        $("#mdlDuplicateProjectChkFolders").attr("checked", true);
                    }
                }).unbind("click").bind("click", function() {
                    $(this).change();
                });
                $modal.find("#mdlDuplicateProjectChkImages").unbind("change").bind("change", function() {
                    if($(this).is(":checked")) {
                        $("#mdlDuplicateProjectChkFolders").attr("checked", true);
                    }
                }).unbind("click").bind("click", function() {
                    $(this).change();
                });
                $modal.find("#mdlDuplicateProjectChkFolders").unbind("change").bind("change", function() {
                    if(!$(this).is(":checked")) {
                        $("#mdlDuplicateProjectChkFiles").attr("checked", false);
                        $("#mdlDuplicateProjectChkImages").attr("checked", false);
                    }
                }).unbind("click").bind("click", function() {
                    $(this).change();
                });
                
                
                $modal.find("#mdlDuplicateProjectChkKeyRoles").unbind("change").bind("change", function() {
                    if($(this).is(":checked")) {
                        $("#mdlDuplicateProjectChkContacts").attr("checked", true);
                    }
                }).unbind("click").bind("click", function() {
                    $(this).change();
                });
                $modal.find("#mdlDuplicateProjectChkPermissions").unbind("change").bind("change", function() {
                    if($(this).is(":checked")) {
                        $("#mdlDuplicateProjectChkContacts").attr("checked", true);
                    }
                }).unbind("click").bind("click", function() {
                    $(this).change();
                });
                $modal.find("#mdlDuplicateProjectChkContacts").unbind("change").bind("change", function() {
                    if(!$(this).is(":checked")) {
                        $("#mdlDuplicateProjectChkKeyRoles").attr("checked", false);
                        $("#mdlDuplicateProjectChkPermissions").attr("checked", false);
                    }
                }).unbind("click").bind("click", function() {
                    $(this).change();
                });
                
                
                $modal.find("#mdlDuplicateProjectCancel").unbind("click").click(function() {
                    if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); }
                });
                
                $modal.find("#mdlDuplicateProjectSubmit").unbind("click").click(ConstructionOnline.modals.duplicateProject_modal.submit);
                
                $("#mdlDuplicateProjectChkProjectInformation").attr("checked", true);
                ConstructionOnline.showDialog($modal, 800);
            },
            submit: function() {
                var origID = ConstructionOnline.modals.duplicateProject_modal.id;
                var folders = $("#mdlDuplicateProjectChkFolders").is(":checked");
                var files = $("#mdlDuplicateProjectChkFiles").is(":checked");
                var images = $("#mdlDuplicateProjectChkImages").is(":checked");
                var projectInformation = $("#mdlDuplicateProjectChkProjectInformation").is(":checked");
                var contacts = $("#mdlDuplicateProjectChkContacts").is(":checked");
                var keyRoles = $("#mdlDuplicateProjectChkKeyRoles").is(":checked");
                var permissions = $("#mdlDuplicateProjectChkPermissions").is(":checked");
                var comments = $("#mdlDuplicateProjectChkComments").is(":checked");
                
                var $nameDOM = $("#mdlDuplicateProjectNewName");
                $nameDOM.val($nameDOM.val().trim());
                var nameValid = ConstructionOnline.validation.checkRegExp($nameDOM, ConstructionOnline.validation.names, true);
                if (nameValid) {
                    $nameDOM.removeClass("modal-field-error");
                    var newName = $nameDOM.val().trim();
                    
                    var $modal = $(m.$duplicateProject());
                    $modal.find(".mdlProcessingWrapper").stop().show(0);
                    $modal.find(".submitButton,.cancelButton").stop().hide(0);                
                    
                    var datastring = "action=duplicateproject" 
                                   + "&origID=" + escape(origID) 
                                   + "&newName=" + escape(newName) 
                                   + "&folders=" + escape(folders) 
                                   + "&files=" + escape(files) 
                                   + "&images=" + escape(images) 
                                   + "&projectInformation=" + escape(projectInformation) 
                                   + "&contacts=" + escape(contacts) 
                                   + "&keyRoles=" + escape(keyRoles) 
                                   + "&permissions=" + escape(permissions) 
                                   + "&comments=" + escape(comments);                               
                    ConstructionOnline.modal_actions.ajaxPost(datastring);
                } else {
                    var errorMessage = "<b>Project Name</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    ConstructionOnline.alert(errorMessage);
                }
            }
        },
        feedback_modal: {
            show: function() {
                var $modal = $(m.$feedback());
                $modal.find(".mdlProcessingWrapper").stop().hide();
                $modal.find("#mdlFeedbackNature").val("Feature Request");
                $modal.find("#mdlFeedbackMessage").html("").val("");
                $modal.find("#mdlFeedbackSubmit").unbind("click").click(ConstructionOnline.modals.feedback_modal.submit);
                $modal.find("#mdlFeedbackCancel").unbind("click").click(function() {
                    if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); }
                });
                
                $modal.find("#mdlFeedbackTitle").html("Feedback");
                $modal.find("#mdlFeedbackSubmit").show();
                $modal.find("#mdlFeedbackCancel a").html("Cancel");
                $modal.find("#mdlFeedbackContent").show();
                $modal.find("#mdlFeedbackConfirmation").hide();
                
                ConstructionOnline.showDialog($modal, 480);
            },
            showSuccessMessage: function() {
                var $modal = $(m.$feedback());
                
                $modal.find("#mdlFeedbackTitle").html("Thank You For Your Feedback");
                $modal.find("#mdlFeedbackCancel a").html("Close");
                $modal.find("#mdlFeedbackContent").hide();
                $modal.find("#mdlFeedbackConfirmation").show();

                ConstructionOnline.showDialog($modal, 480);
            },
            submit: function() {
                var $modal = $(m.$feedback());
                $modal.find(".mdlProcessingWrapper").stop().show(0);
                $modal.find(".submitButton,.cancelButton").stop().hide(0);
                var nature = $modal.find("#mdlFeedbackNature").val();
                var message = $modal.find("#mdlFeedbackMessage").val();
                var datastring = "action=feedback&nature=" + escape(nature) + "&message=" + escape(message);
                ConstructionOnline.modal_actions.ajaxPost(datastring);
            }
        },
        help_modal: {
            show: function() {
                var $modal = $(m.$help());
                $modal.find("#mdlHelpClose").unbind("click").click(function() {
                    if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); }
                });
                ConstructionOnline.showDialog($modal, 556);
            }
        },
        invite_modal: {
            context: undefined,
            id: undefined,
            inviteSpecificContact: function(id) { ConstructionOnline.modals.invite_modal.show("C", id, ConstructionOnline.modals.invite_modal.submit) },
            inviteContact: function() { ConstructionOnline.modals.invite_modal.show("C", s.getContact(), ConstructionOnline.modals.invite_modal.submit) },
            inviteProject: function() { ConstructionOnline.modals.invite_modal.show("P", s.getProject(), ConstructionOnline.modals.invite_modal.submit) },
            inviteFolder: function() { ConstructionOnline.modals.invite_modal.show("H", s.getFolder(), ConstructionOnline.modals.invite_modal.submit) },
            permissionsContact: function() { ConstructionOnline.modals.invite_modal.show("Cp", s.getContact(), ConstructionOnline.modals.invite_modal.submit) },
            permissionsProject: function() { ConstructionOnline.modals.invite_modal.show("Pp", s.getProject(), ConstructionOnline.modals.invite_modal.submit) },
            permissionsFolder: function() { ConstructionOnline.modals.invite_modal.show("Hp", s.getFolder(), ConstructionOnline.modals.invite_modal.submit) },
            load: function(data) {
                var div = $("#mdlInviteList");
                $("#mdlInviteTitle").text($("#mdlInviteTitle").text().replace("!NAME!", data.name));
                var html = ""

                for (var x in data.entries) {
                    html += "<div class='mdlInviteContact'>";

                    //html += "<input type='checkbox' name='" + data.entries[x].id + "'>";
                    html += "<div style='float:left;width:32px;'><div class='" + data.entries[x].icon + "' style='float:left;margin-top:6px;'></div></div>";
                    html += "<div class='mdlInviteWrapper'>";
                    html += "<div class='mdlInviteContactName'>" + data.entries[x].name + "</div>";
                    html += "<div class='mdlInviteContactCompany'>" + data.entries[x].company + "</div>";
                    html += "</div>";
                    html += "<select name='" + data.entries[x].id + "'>";
                    html += "<option value='0'";
                    if (data.entries[x].permission == "0") { html += " selected"; }
                    if (ConstructionOnline.modals.invite_modal.context == "H") {
                        html += ">Inherit</option>";
                        html += "<option value='1'";
                        if (data.entries[x].permission == "1") { html += " selected"; }
                        html += ">None</option>";
                    } else {
                        html += ">None</option>";
                        html += "<option value='1'";
                        if (data.entries[x].permission == "1") { html += " selected"; }
                        html += ">View</option>";
                    }
                    html += "<option value='2'";
                    if (data.entries[x].permission == "2") { html += " selected"; }
                    html += ">View, Upload, Download</option>";
                    html += "<option value='3'";
                    if (data.entries[x].permission == "3") { html += " selected"; }
                    html += ">View, Upload, Download, Edit</option>";
                    html += "<option value='4'";
                    if (data.entries[x].permission == "4") { html += " selected"; }
                    html += ">View, Upload, Download, Edit, Delete</option>";
                    html += "<option value='5'";
                    if (data.entries[x].permission == "5") { html += " selected"; }
                    html += ">Administrator</option>";
                    html += "</select>";
                    if (data.entries[x].relation) {
                        html += "<span class='mdlInviteRelation'>";
                        html += data.entries[x].relation.toString().replace(/,/g, "<br/>");
                        //$.each(data.entries[x].relation, function(key, object) { }, );
                        html += "</span>";
                    }


                    html += "</div>";
                }

                if (html == "") {
                    if (data.context == "C") {
                        ConstructionOnline.alert("There are no projects to share.");
                    } else {
                        ConstructionOnline.alert("There are no contacts to share with.");
                    }
                    ConstructionOnline.closeDialog();
                }

                div.html(html);                
                div.find("select").change(function() { $(this).attr("hasChanged", true); if ($(this).val() == 0) { $(this).siblings(".mdlInviteRelation").css("text-decoration", "line-through"); } else { $(this).siblings(".mdlInviteRelation").css("text-decoration", "none"); } })                
            },
            show: function(context, id, action) {
                ConstructionOnline.modals.invite_modal.context = context;
                ConstructionOnline.modals.invite_modal.id = id;

                var $modal = $(m.$invite());
                $modal.find(".mdlProcessingWrapper").stop().hide();
                $("#mdlInviteList").html("Building list...");
                if (ConstructionOnline.modals.invite_modal.context == "C") {
                    $("#mdlInviteTitle").html("Invite Contact to Join Project(s)");
                    $("#mdlInviteIcon").removeClass().addClass("modalHeaderIcon modalHeaderInvite");
                    $("#mdlInviteLabel1").html("Project");
                    $("#mdlInviteLabel2").html("&nbsp;");
                    $("#mdlInviteContactInstructionsLbl").hide();
                    $("#mdlInviteContactInstructionsBody").hide();
                    $("#mdlInviteProjectInstructionsLbl").show();
                    $("#mdlInviteProjectInstructionsBody").show();
                    $("#mdlInviteContactPermissionsLbl").hide();
                    $("#mdlInviteContactPermissionsBody").hide();
                    $("#mdlInviteContactFolderPermissionsLbl").hide();
                    $("#mdlInviteContactFolderPermissionsBody").hide();
                } else if (ConstructionOnline.modals.invite_modal.context == "Cp") {
                    ConstructionOnline.modals.invite_modal.context = "C";
                    $("#mdlInviteTitle").html("Set Permissions for !NAME!");
                    $("#mdlInviteIcon").removeClass().addClass("modalHeaderIcon modalHeaderPermission");
                    $("#mdlInviteLabel1").html("Project");
                    $("#mdlInviteLabel2").html("&nbsp;");
                    $("#mdlInviteContactInstructionsLbl").hide();
                    $("#mdlInviteContactInstructionsBody").hide();
                    $("#mdlInviteProjectInstructionsLbl").hide();
                    $("#mdlInviteProjectInstructionsBody").hide();
                    $("#mdlInviteContactPermissionsLbl").show();
                    $("#mdlInviteContactPermissionsBody").show();
                    $("#mdlInviteContactFolderPermissionsLbl").hide();
                    $("#mdlInviteContactFolderPermissionsBody").hide();
                } else if (ConstructionOnline.modals.invite_modal.context == "Pp") {
                    ConstructionOnline.modals.invite_modal.context = "P";
                    $("#mdlInviteTitle").html("Set Permissions for !NAME!");
                    $("#mdlInviteIcon").removeClass().addClass("modalHeaderIcon modalHeaderPermission");
                    $("#mdlInviteLabel1").html("Contact");
                    $("#mdlInviteLabel2").html("Key Role");
                    $("#mdlInviteContactInstructionsLbl").show();
                    $("#mdlInviteContactInstructionsBody").show();
                    $("#mdlInviteProjectInstructionsLbl").hide();
                    $("#mdlInviteProjectInstructionsBody").hide();
                    $("#mdlInviteContactPermissionsLbl").hide();
                    $("#mdlInviteContactPermissionsBody").hide();
                    $("#mdlInviteContactFolderPermissionsLbl").hide();
                    $("#mdlInviteContactFolderPermissionsBody").hide();
                } else if (ConstructionOnline.modals.invite_modal.context == "P") {
                    $("#mdlInviteTitle").html("Set Permissions for !NAME!");
                    $("#mdlInviteIcon").removeClass().addClass("modalHeaderIcon modalHeaderPermission");
                    $("#mdlInviteLabel1").html("Contact");
                    $("#mdlInviteLabel2").html("Key Role");
                    $("#mdlInviteContactInstructionsLbl").show();
                    $("#mdlInviteContactInstructionsBody").show();
                    $("#mdlInviteProjectInstructionsLbl").hide();
                    $("#mdlInviteProjectInstructionsBody").hide();
                    $("#mdlInviteContactPermissionsLbl").hide();
                    $("#mdlInviteContactPermissionsBody").hide();
                    $("#mdlInviteContactFolderPermissionsLbl").hide();
                    $("#mdlInviteContactFolderPermissionsBody").hide();
                } else if (ConstructionOnline.modals.invite_modal.context == "Hp") {
                    ConstructionOnline.modals.invite_modal.context = "H";
                    $("#mdlInviteTitle").html("Manage Folder Permissions");
                    $("#mdlInviteIcon").removeClass().addClass("modalHeaderIcon modalHeaderPermission");
                    $("#mdlInviteLabel1").html("Contact");
                    $("#mdlInviteLabel2").html("Key Role");
                    $("#mdlInviteContactInstructionsLbl").hide();
                    $("#mdlInviteContactInstructionsBody").hide();
                    $("#mdlInviteProjectInstructionsLbl").hide();
                    $("#mdlInviteProjectInstructionsBody").hide();
                    $("#mdlInviteContactPermissionsLbl").hide();
                    $("#mdlInviteContactPermissionsBody").hide();
                    $("#mdlInviteContactFolderPermissionsLbl").show();
                    $("#mdlInviteContactFolderPermissionsBody").show();
                } else if (ConstructionOnline.modals.invite_modal.context == "H") {
                    $("#mdlInviteTitle").html("Manage Folder Permissions");
                    $("#mdlInviteIcon").removeClass().addClass("modalHeaderIcon modalHeaderPermission");
                    $("#mdlInviteLabel1").html("Contact");
                    $("#mdlInviteLabel2").html("Key Role");
                    $("#mdlInviteContactInstructionsLbl").hide();
                    $("#mdlInviteContactInstructionsBody").hide();
                    $("#mdlInviteProjectInstructionsLbl").hide();
                    $("#mdlInviteProjectInstructionsBody").hide();
                    $("#mdlInviteContactPermissionsLbl").hide();
                    $("#mdlInviteContactPermissionsBody").hide();
                    $("#mdlInviteContactFolderPermissionsLbl").show();
                    $("#mdlInviteContactFolderPermissionsBody").show();
                }

                ConstructionOnline.modal_actions.ajaxGet({ action: "InviteJSON", "id": ConstructionOnline.modals.invite_modal.id, "context": ConstructionOnline.modals.invite_modal.context }, function(data, text, dataObj) {
                    ConstructionOnline.modals.invite_modal.load(data);
                    ConstructionOnline.modals.invite_modal.showAfterLoading($modal);
                }, $modal);

                $modal.find("#mdlInviteSubmit").unbind("click").click(action);
                $modal.find("#mdlInviteCancel").unbind("click").click(function() {
                    if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); }
                });

            },
            showAfterLoading: function($modal) {
                ConstructionOnline.showDialog($modal, 800);
                $(m.$contact()).dialog("close");
                $(m.$project()).dialog("close");
                
//                try {
//                    var scroller = new TouchScroll(document.querySelector("#mdlInviteList"), {elastic: true});
//                } catch (err) {
//                }
            },
            submit: function() {
                var $modal = $(m.$invite());
                $modal.find(".mdlProcessingWrapper").stop().show(0);
                $modal.find(".submitButton,.cancelButton").stop().hide(0);

                if ($modal.find("select[hasChanged=true]").size() > 0) {
                    var valid = ConstructionOnline.modals.invite_modal.validate();
                    if (valid != -1) {
                        var datastring = "action=invite&id=" + escape(ConstructionOnline.modals.invite_modal.id) + "&context=" + escape(ConstructionOnline.modals.invite_modal.context) + "&data=" + valid;
                        ConstructionOnline.modal_actions.ajaxPost(datastring);
                    } else {
                        if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); }
                    }
                } else {
                    if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); }
                }
            },
            validate: function() {
                var $modal = $(m.$invite());
                var $selects = $modal.find("select[hasChanged=true]");
                var returnValue = "";
                var separator = "";
                $selects.each(function() {
                    var $this = $(this);
                    returnValue += separator + $this.attr("name") + ":" + $this.val();
                    separator = ",";
                });
                if (returnValue == "") {
                    returnValue = "-1";
                }
                return escape(returnValue);
            }
        },
        project_modal: {
            id: undefined,
            adding: false,
            changeTab: function(tabIndex) {
                var $modal = $(m.$project)
                $modal.find("input").removeClass("modal-field-error");
                //make it change the submit function each time
                //make new submit functions
                switch (tabIndex) {
                    case 1:
                    case "1":
                        $modal.find("#mdlProjectSubmit").removeClass("buttonBase58 modalButton58").addClass("buttonBase128 modalButton128").text("Save and Continue")
                        $modal.find("#mdlProjectImageCell").width("40px");
                        $modal.find("#mdlProjectImage").show();
                        $modal.find("#mdlProjectStepLbl").text("Step 1 of 2");
                        $modal.find("#mdlProjectSecondPane").stop().hide(0);
                        $modal.find("#mdlProjectFirstPane").stop().show(0);
                        $modal.find("#mdlProjectNotificationText").stop().show(0);
                        $modal.find("#mdlProjectEditProfile").stop().show(0);
                        $modal.find("#mdlProjectNameLbl").stop().show(0);
                        $modal.find("#mdlProjectAddressLbl").stop().show(0);
                        $modal.find("#mdlProjectTypeLbl").stop().show(0);
                        $modal.find("#mdlProjectCreateInstructionsLbl").stop().hide();
                        $modal.find("#mdlProjectCreateInstructionsBody").stop().hide();
                        $modal.find("#mdlProjectAssignInstructionsLbl").stop().hide();
                        $modal.find("#mdlProjectAssignInstructionsBody").stop().hide();
                        break;
                    case 2:
                    case "2":
                        $modal.find("#mdlProjectIcon").removeClass().addClass("modalHeaderIcon modalHeaderEdit");
                        $modal.find("#mdlProjectImageCell").width("30px");
                        $modal.find("#mdlProjectImage").hide();
                        if ($modal.find("#mdlProjectStepLbl").text() == "Step 1 of 2") {
                            $modal.find("#mdlProjectTitle").text("Edit Key Roles for " + $modal.find("#mdlProjectName").val());
                            $modal.find("#mdlProjectStepLbl").text("Step 2 of 2");
                            $modal.find("#mdlProjectSubmit").removeClass("buttonBase128 modalButton128").addClass("buttonBase58 modalButton58").text("Save").unbind("click").click(ConstructionOnline.modals.project_modal.submitRelations)
                        } else {
                            $modal.find("#mdlProjectTitle").text("Assign Key Roles for " + $modal.find("#mdlProjectName").val());
                            $modal.find("#mdlProjectStepLbl").text("Step 2 of 3");
                            $modal.find("#mdlProjectSubmit").unbind("click").click(ConstructionOnline.modals.project_modal.submitRelations)
                        }
                        $modal.find("#mdlProjectFirstPane").stop().hide(0);
                        $modal.find("#mdlProjectSecondPane").stop().show(0);
                        $modal.find("#mdlProjectNotificationText").stop().hide(0);
                        $modal.find("#mdlProjectNameLbl").stop().hide(0);
                        $modal.find("#mdlProjectAddressLbl").stop().hide(0);
                        $modal.find("#mdlProjectTypeLbl").stop().hide(0);
                        $modal.find("#mdlProjectCreateInstructionsLbl").stop().hide();
                        $modal.find("#mdlProjectCreateInstructionsBody").stop().hide();
                        $modal.find("#mdlProjectAssignInstructionsLbl").stop().show();
                        $modal.find("#mdlProjectAssignInstructionsBody").stop().show();
                        $("#mdlInviteStepLbl").show();

                        $modal.find("#mdlProjectCancel").unbind("click").click(function() {
                            if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); }
                        });
                        break;
                    default:
                        ConstructionOnline.alert("unknown tab");
                }
                $modal.find(".mdlProcessingWrapper").stop().hide();
                $modal.find(".submitButton,.cancelButton").stop().show(0);
            },
            create: function() { ConstructionOnline.modals.project_modal.show(undefined, ConstructionOnline.modals.project_modal.submitAdd); },
            edit: function() { ConstructionOnline.modals.project_modal.show(s.getProject(), ConstructionOnline.modals.project_modal.submitEdit); },
            load: function(name, address, city, state, zip, number, type, source, Client, Owner, Builder, Contractor, GeneralContractor, ProjectManager, ProjectCoordinator, Superintendent, SiteForeman, Estimator, AdministrativeManager, AccountingManager, ConstructionManager, Architect, LandscapeArchitect, Designer, InteriorDesigner, Engineer, CivilEngineer, MechanicalEngineer, ElectricalEngineer, StructuralEngineer, Surveyor, Lender, Developer, Realtor, relatedContacts, relatedCompanies) {
                var $modal = $(m.$project());
                $modal.find("#mdlProjectNameLbl").html(name);
                $modal.find("#mdlProjectAddressLbl").html(address);
                $modal.find("#mdlProjectTypeLbl").html(type);

                $modal.find("#mdlProjectName").val(ConstructionOnline.decode(name));
                $modal.find("#mdlProjectAddress").val(ConstructionOnline.decode(address));
                $modal.find("#mdlProjectCity").val(ConstructionOnline.decode(city));
                $modal.find("#mdlProjectState").val(ConstructionOnline.decode(state));
                $modal.find("#mdlProjectZip").val(ConstructionOnline.decode(zip));
                $modal.find("#mdlProjectNumber").val(ConstructionOnline.decode(number));
                $modal.find("#mdlProjectType").val(type);
                if ($modal.find("#mdlProjectType").val() != type) {
                    $modal.find("#mdlProjectType").prepend($("<option></option>").val(type).html(type));
                    $modal.find("#mdlProjectType").find("[value='" + type + "']").attr("selected", "selected");
                }

                //dropdowns with related contacts
                var dropdowns = $modal.find("#mdlProjectClient,#mdlProjectOwner,#mdlProjectBuilder,#mdlProjectContractor, #mdlProjectGeneralContractor,#mdlProjectManager,#mdlProjectCoordinator,#mdlProjectSuperintendent,#mdlProjectSiteForeman,#mdlProjectEstimator,#mdlProjectAdministrativeManager,#mdlProjectAccountingManager,#mdlProjectConstructionManager, #mdlProjectArchitect,#mdlProjectLandscapeArchitect,#mdlProjectDesigner,#mdlProjectInteriorDesigner,#mdlProjectEngineer,#mdlProjectCivilEngineer,#mdlProjectMechanicalEngineer,#mdlProjectElectricalEngineer,#mdlProjectStructuralEngineer,#mdlProjectSurveyor,#mdlProjectLender,#mdlProjectDeveloper,#mdlProjectRealtor");

                var textToReplace = "<option value='0'>--none--</option>";
                $.each(relatedContacts, function(index, obj) {
                    textToReplace += "<option value='" + obj.id + "'>" + ConstructionOnline.decode(obj.name) + "</option>";
                });
                $.each(dropdowns, function(index, obj) {
                    $(obj).replaceWith("<select id='" + obj.id + "' style='width: 175px;'>" + textToReplace + "</select>");
                });

                //dropdowns with related companies
                dropdowns = $modal.find("#mdlProjectSource");
                textToReplace = ""
                $.each(relatedCompanies, function(index, obj) {
                    textToReplace += "<option value='" + obj.id + "'>" + ConstructionOnline.decode(obj.name) + "</option>";
                });
                if (textToReplace.indexOf("value='" + s.getUser() + "'>") == -1) {
                    textToReplace = "<option value='" + s.getUser() + "'>" + ConstructionOnline.decode(s.getUserName()) + "</option>" + textToReplace;
                }
                $.each(dropdowns, function(index, obj) {
                    $(obj).replaceWith("<select id='" + obj.id + "' style='width: 200px; position: absolute; top: 160px; left: 362px;'>" + textToReplace + "</select>");
                });

                $modal.find("#mdlProjectSource").find("[value='" + source + "']").attr("selected", "selected");
                                                                                                                  
                $modal.find("#mdlProjectClient").find("[value='" + Client + "']").attr("selected", "selected");
                $modal.find("#mdlProjectOwner").find("[value='" + Owner + "']").attr("selected", "selected");
                $modal.find("#mdlProjectBuilder").find("[value='" + Builder + "']").attr("selected", "selected");
                $modal.find("#mdlProjectContractor").find("[value='" + Contractor + "']").attr("selected", "selected");
                $modal.find("#mdlProjectGeneralContractor").find("[value='" + GeneralContractor + "']").attr("selected", "selected");
                $modal.find("#mdlProjectManager").find("[value='" + ProjectManager + "']").attr("selected", "selected");
                $modal.find("#mdlProjectCoordinator").find("[value='" + ProjectCoordinator + "']").attr("selected", "selected");
                $modal.find("#mdlProjectSuperintendent").find("[value='" + Superintendent + "']").attr("selected", "selected");
                $modal.find("#mdlProjectSiteForeman").find("[value='" + SiteForeman + "']").attr("selected", "selected");
                $modal.find("#mdlProjectEstimator").find("[value='" + Estimator + "']").attr("selected", "selected");
                $modal.find("#mdlProjectAdministrativeManager").find("[value='" + AdministrativeManager + "']").attr("selected", "selected");
                $modal.find("#mdlProjectAccountingManager").find("[value='" + AccountingManager + "']").attr("selected", "selected");
                $modal.find("#mdlProjectConstructionManager").find("[value='" + ConstructionManager + "']").attr("selected", "selected");
                $modal.find("#mdlProjectArchitect").find("[value='" + Architect + "']").attr("selected", "selected");
                $modal.find("#mdlProjectLandscapeArchitect").find("[value='" + LandscapeArchitect  + "']").attr("selected", "selected");
                $modal.find("#mdlProjectDesigner").find("[value='" + Designer + "']").attr("selected", "selected");
                $modal.find("#mdlProjectInteriorDesigner").find("[value='" + InteriorDesigner + "']").attr("selected", "selected");
                $modal.find("#mdlProjectEngineer").find("[value='" + Engineer + "']").attr("selected", "selected");
                $modal.find("#mdlProjectCivilEngineer").find("[value='" + CivilEngineer + "']").attr("selected", "selected");
                $modal.find("#mdlProjectMechanicalEngineer").find("[value='" + MechanicalEngineer + "']").attr("selected", "selected");
                $modal.find("#mdlProjectElectricalEngineer").find("[value='" + ElectricalEngineer + "']").attr("selected", "selected");
                $modal.find("#mdlProjectStructuralEngineer").find("[value='" + StructuralEngineer + "']").attr("selected", "selected");
                $modal.find("#mdlProjectSurveyor").find("[value='" + Surveyor + "']").attr("selected", "selected");
                $modal.find("#mdlProjectLender").find("[value='" + Lender + "']").attr("selected", "selected");
                $modal.find("#mdlProjectDeveloper").find("[value='" + Developer + "']").attr("selected", "selected");
                $modal.find("#mdlProjectRealtor").find("[value='" + Realtor + "']").attr("selected", "selected");

            },
            show: function(id, action) {
                ConstructionOnline.modals.project_modal.id = id;
                var $modal = $(m.$project());
                var title;
                var icon;

                ConstructionOnline.modals.project_modal.changeTab(1);

                $modal.find("input").removeClass("modal-field-error");
                if (ConstructionOnline.modals.project_modal.id) {
                    ConstructionOnline.modals.project_modal.adding = false;
                    title = "Edit Project";
                    icon = "modalHeaderEdit";
                    $modal.find("#mdlProjectStepLbl").text("Step 1 of 2");

                    ConstructionOnline.modal_actions.ajaxGet({ action: "ProjectDataJSON", "id": ConstructionOnline.modals.project_modal.id }, function(data, text, dataObj) {
                        ConstructionOnline.modals.project_modal.load(data.name, data.address, data.city, data.state, data.zip, data.number, data.type, data.source, data.Client, data.Owner, data.Builder, data.Contractor, data.GeneralContractor, data.ProjectManager, data.ProjectCoordinator, data.Superintendent, data.SiteForeman, data.Estimator, data.AdministrativeManager, data.AccountingManager, data.ConstructionManager, data.Architect, data.LandscapeArchitect, data.Designer, data.InteriorDesigner, data.Engineer, data.CivilEngineer, data.MechanicalEngineer, data.ElectricalEngineer, data.StructuralEngineer, data.Surveyor, data.Lender, data.Developer, data.Realtor, data.relatedContacts, data.relatedCompanies);
                        ConstructionOnline.showDialog($modal, 756);
                    }, $modal);
                }
                else {
                    //$modal.find("#mdlProjectImageCell").width("30px");
                    $modal.find("#mdlProjectImage").hide();
                    $modal.find("#mdlProjectCreateInstructionsLbl").stop().show();
                    $modal.find("#mdlProjectCreateInstructionsBody").stop().show();
                    $modal.find("#mdlProjectAssignInstructionsLbl").stop().hide();
                    $modal.find("#mdlProjectAssignInstructionsBody").stop().hide();
                    $modal.find("#mdlProjectStepLbl").text("Step 1 of 3");
                    ConstructionOnline.modals.project_modal.adding = true;
                    title = "Create New Project";
                    icon = "modalHeaderNewProject";
                    ConstructionOnline.modal_actions.ajaxGet({ action: "RelatedContactsAndCompaniesJSON" }, function(data, text, dataObj) {
                        ConstructionOnline.modals.project_modal.load("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", data.relatedContacts, data.relatedCompanies);
                        ConstructionOnline.showDialog($modal, 756);
                    }, $modal);
                }

                $modal.find("#mdlProjectTitle").html(title);
                $modal.find("#mdlProjectIcon").removeClass().addClass("modalHeaderIcon " + icon);
                $modal.find("#mdlProjectSubmit").unbind("click").click(action);
                $modal.find("#mdlProjectCancel").unbind("click").click(function() { if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); } });

            },
            submitAdd: function() {
                $(m.$project()).find(".mdlProcessingWrapper").stop().show(0);
                $(m.$project()).find(".submitButton,.cancelButton").stop().hide(0);
                var valid = ConstructionOnline.modals.project_modal.validateDetails();
                if (valid != -1) {
                    var dataString = "action=projectAdd" + valid;
                    ConstructionOnline.modal_actions.ajaxPost(dataString);
                } else {
                    $(m.$project()).find(".mdlProcessingWrapper").stop().hide(0);
                    $(m.$project()).find(".submitButton,.cancelButton").stop().show(0);
                }
            },
            submitEdit: function() {
                $(m.$project()).find(".mdlProcessingWrapper").stop().show(0);
                $(m.$project()).find(".submitButton,.cancelButton").stop().hide(0);
                var valid = ConstructionOnline.modals.project_modal.validateDetails();
                if (valid != -1) {
                    var dataString = "action=projectEdit&id=" + escape(ConstructionOnline.modals.project_modal.id) + valid;
                    ConstructionOnline.modal_actions.ajaxPost(dataString);
                } else {
                    $(m.$project()).find(".mdlProcessingWrapper").stop().hide(0);
                    $(m.$project()).find(".submitButton,.cancelButton").stop().show(0);
                }
            },
            submitRelations: function() {
                $(m.$project()).find(".mdlProcessingWrapper").stop().show(0);
                $(m.$project()).find(".submitButton,.cancelButton").stop().hide(0);
                var valid = ConstructionOnline.modals.project_modal.validateRelations();
                if (valid != -1) {
                    var dataString = "action=projectRelations&id=" + escape(ConstructionOnline.modals.project_modal.id) + valid;
                    ConstructionOnline.modal_actions.ajaxPost(dataString);
                } else {
                    $(m.$project()).find(".mdlProcessingWrapper").stop().hide(0);
                    $(m.$project()).find(".submitButton,.cancelButton").stop().show(0);
                }
            },
            validateDetails: function() {
                var $modal = $(m.$project());
                var name = $modal.find("#mdlProjectName");
                var addr = $modal.find("#mdlProjectAddress");
                var city = $modal.find("#mdlProjectCity");
                var state = $modal.find("#mdlProjectState");
                var zip = $modal.find("#mdlProjectZip");
                var num = $modal.find("#mdlProjectNumber");
                var type = $modal.find("#mdlProjectType");
                var source = $modal.find("#mdlProjectSource");

                var nameValid = true;
                var addrValid = true;
                var cityValid = true;
                var stateValid = true;
                var zipValid = true;
                var numValid = true;
                var typeValid = true;
                var sourceValid = true;
                $modal.find("input").removeClass("modal-field-error");

                name.val(name.val().trim());
                addr.val(addr.val().trim());
                city.val(city.val().trim());
                state.val(state.val().trim());
                zip.val(zip.val().trim());
                num.val(num.val().trim());
                type.val(type.val().trim());
                source.val(source.val().trim());

                nameValid = ConstructionOnline.validation.checkRegExp(name, ConstructionOnline.validation.names, true);
                addrValid = ConstructionOnline.validation.checkRegExp(addr, ConstructionOnline.validation.names, false);
                cityValid = ConstructionOnline.validation.checkRegExp(city, ConstructionOnline.validation.names, false);
                stateValid = ConstructionOnline.validation.checkRegExp(state, ConstructionOnline.validation.names, false);
                zipValid = ConstructionOnline.validation.checkRegExp(zip, ConstructionOnline.validation.names, false);
                numValid = ConstructionOnline.validation.checkRegExp(num, ConstructionOnline.validation.names, false);
                typeValid = ConstructionOnline.validation.checkRegExp(type, ConstructionOnline.validation.names, false);
                sourceValid = ConstructionOnline.validation.checkRegExp(source, ConstructionOnline.validation.names, false);

                if (nameValid && addrValid && cityValid && stateValid && zipValid && numValid && typeValid && sourceValid) {
                    var dataString = "&name=" + escape(name.val()) + "&addr=" + escape(addr.val()) + "&city=" + escape(city.val()) + "&state=" + escape(state.val()) + "&zip=" + escape(zip.val()) + "&num=" + escape(num.val()) + "&type=" + escape(type.val()) + "&source=" + escape(source.val());
                    return dataString;
                } else {
                    var errorMessage = "";
                    if (!nameValid) {
                        errorMessage += "<b>Project Name</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    }
                    if (!addrValid) {
                        errorMessage += "<b>Street Address</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    }
                    if (!cityValid) {
                        errorMessage += "<b>City</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    }
                    if (!stateValid) {
                        errorMessage += "<b>State</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    }
                    if (!zipValid) {
                        errorMessage += "<b>Zip</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    }
                    if (!numValid) {
                        errorMessage += "<b>Project Number</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    }
                    if (!typeValid) {
                        errorMessage += "<b>Project Type</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    }
                    if (!sourceValid) {
                        errorMessage += "<b>Source</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    }
                    ConstructionOnline.alert(errorMessage);
                    return -1;
                }
            },
            validateRelations: function() {
                var $modal = $(m.$project());
                var Client = $modal.find("#mdlProjectClient");
                var Owner = $modal.find("#mdlProjectOwner");
                var Builder = $modal.find("#mdlProjectBuilder");
                var Contractor = $modal.find("#mdlProjectContractor");
                var GeneralContractor = $modal.find("#mdlProjectGeneralContractor");
                var ProjectManager = $modal.find("#mdlProjectManager");
                var ProjectCoordinator = $modal.find("#mdlProjectCoordinator");
                var Superintendent = $modal.find("#mdlProjectSuperintendent");
                var SiteForeman = $modal.find("#mdlProjectSiteForeman");
                var Estimator = $modal.find("#mdlProjectEstimator");
                var AdministrativeManager = $modal.find("#mdlProjectAdministrativeManager");
                var AccountingManager = $modal.find("#mdlProjectAccountingManager");
                var ConstructionManager = $modal.find("#mdlProjectConstructionManager");
                var Architect = $modal.find("#mdlProjectArchitect");
                var LandscapeArchitect = $modal.find("#mdlProjectLandscapeArchitect");
                var Designer = $modal.find("#mdlProjectDesigner");
                var InteriorDesigner = $modal.find("#mdlProjectInteriorDesigner");
                var Engineer = $modal.find("#mdlProjectEngineer");
                var CivilEngineer = $modal.find("#mdlProjectCivilEngineer");
                var MechanicalEngineer = $modal.find("#mdlProjectMechanicalEngineer");
                var ElectricalEngineer = $modal.find("#mdlProjectElectricalEngineer");
                var StructuralEngineer = $modal.find("#mdlProjectStructuralEngineer");
                var Surveyor = $modal.find("#mdlProjectSurveyor");
                var Lender = $modal.find("#mdlProjectLender");
                var Developer = $modal.find("#mdlProjectDeveloper");
                var Realtor = $modal.find("#mdlProjectRealtor");

                var ClientValid = true;
                var OwnerValid = true;
                var BuilderValid = true;
                var ContractorValid = true;
                var GeneralContractorValid = true;
                var ProjectManagerValid = true;
                var ProjectCoordinatorValid = true;
                var SuperintendentValid = true;
                var SiteForemanValid = true;
                var EstimatorValid = true;
                var AdministrativeManagerValid = true;
                var AccountingManagerValid = true;
                var ConstructionManagerValid = true;
                var ArchitectValid = true;
                var LandscapeArchitectValid = true;
                var DesignerValid = true;
                var InteriorDesignerValid = true;
                var EngineerValid = true;
                var CivilEngineerValid = true;
                var MechanicalEngineerValid = true;
                var ElectricalEngineerValid = true;
                var StructuralEngineerValid = true;
                var SurveyorValid = true;
                var LenderValid = true;
                var DeveloperValid = true;
                var RealtorValid = true;
               
                $modal.find("input").removeClass("modal-field-error");

                Client.val(Client.val().trim()); 
                Owner.val(Owner.val().trim());
                Builder.val(Builder.val().trim());
                Contractor.val(Contractor.val().trim());
                GeneralContractor.val(GeneralContractor.val().trim());
                ProjectManager.val(ProjectManager.val().trim());
                ProjectCoordinator.val(ProjectCoordinator.val().trim());
                Superintendent.val(Superintendent.val().trim());
                SiteForeman.val(SiteForeman.val().trim());
                Estimator.val(Estimator.val().trim());
                AdministrativeManager.val(AdministrativeManager.val().trim());
                AccountingManager.val(AccountingManager.val().trim());
                ConstructionManager.val(ConstructionManager.val().trim());
                Architect.val(Architect.val().trim());
                LandscapeArchitect.val(LandscapeArchitect.val().trim());
                Designer.val(Designer.val().trim());
                InteriorDesigner.val(InteriorDesigner.val().trim());
                Engineer.val(Engineer.val().trim());
                CivilEngineer.val(CivilEngineer.val().trim());
                MechanicalEngineer.val(MechanicalEngineer.val().trim());
                ElectricalEngineer.val(ElectricalEngineer.val().trim());
                StructuralEngineer.val(StructuralEngineer.val().trim());
                Surveyor.val(Surveyor.val().trim());
                Lender.val(Lender.val().trim());
                Developer.val(Developer.val().trim());
                Realtor.val(Realtor.val().trim());

                ClientValid = ConstructionOnline.validation.checkRegExp(Client, ConstructionOnline.validation.names, false);
                OwnerValid = ConstructionOnline.validation.checkRegExp(Owner, ConstructionOnline.validation.names, false);
                BuilderValid = ConstructionOnline.validation.checkRegExp(Builder, ConstructionOnline.validation.names, false);
                ContractorValid = ConstructionOnline.validation.checkRegExp(Contractor, ConstructionOnline.validation.names, false);
                GeneralContractorValid = ConstructionOnline.validation.checkRegExp(GeneralContractor, ConstructionOnline.validation.names, false);
                ProjectManagerValid = ConstructionOnline.validation.checkRegExp(ProjectManager, ConstructionOnline.validation.names, false);
                ProjectCoordinatorValid = ConstructionOnline.validation.checkRegExp(ProjectCoordinator, ConstructionOnline.validation.names, false);
                SuperintendentValid = ConstructionOnline.validation.checkRegExp(Superintendent, ConstructionOnline.validation.names, false);
                SiteForemanValid = ConstructionOnline.validation.checkRegExp(SiteForeman, ConstructionOnline.validation.names, false);
                EstimatorValid = ConstructionOnline.validation.checkRegExp(Estimator, ConstructionOnline.validation.names, false);
                AdministrativeManagerValid = ConstructionOnline.validation.checkRegExp(AdministrativeManager, ConstructionOnline.validation.names, false);
                AccountingManagerValid = ConstructionOnline.validation.checkRegExp(AccountingManager, ConstructionOnline.validation.names, false);
                ConstructionManagerValid = ConstructionOnline.validation.checkRegExp(ConstructionManager, ConstructionOnline.validation.names, false);
                ArchitectValid = ConstructionOnline.validation.checkRegExp(Architect, ConstructionOnline.validation.names, false);
                LandscapeArchitectValid = ConstructionOnline.validation.checkRegExp(LandscapeArchitect, ConstructionOnline.validation.names, false);
                DesignerValid = ConstructionOnline.validation.checkRegExp(Designer, ConstructionOnline.validation.names, false);
                InteriorDesignerValid = ConstructionOnline.validation.checkRegExp(InteriorDesigner, ConstructionOnline.validation.names, false);
                EngineerValid = ConstructionOnline.validation.checkRegExp(Engineer, ConstructionOnline.validation.names, false);
                CivilEngineerValid = ConstructionOnline.validation.checkRegExp(CivilEngineer, ConstructionOnline.validation.names, false);
                MechanicalEngineerValid = ConstructionOnline.validation.checkRegExp(MechanicalEngineer, ConstructionOnline.validation.names, false);
                ElectricalEngineerValid = ConstructionOnline.validation.checkRegExp(ElectricalEngineer, ConstructionOnline.validation.names, false);
                StructuralEngineerValid = ConstructionOnline.validation.checkRegExp(StructuralEngineer, ConstructionOnline.validation.names, false);
                SurveyorValid = ConstructionOnline.validation.checkRegExp(Surveyor, ConstructionOnline.validation.names, false);
                LenderValid = ConstructionOnline.validation.checkRegExp(Lender, ConstructionOnline.validation.names, false);
                DeveloperValid = ConstructionOnline.validation.checkRegExp(Developer, ConstructionOnline.validation.names, false);
                RealtorValid = ConstructionOnline.validation.checkRegExp(Realtor, ConstructionOnline.validation.names, false);

                if (ClientValid && OwnerValid && BuilderValid && ContractorValid && GeneralContractorValid && ProjectManagerValid && ProjectCoordinatorValid && SuperintendentValid && SiteForemanValid && EstimatorValid && AdministrativeManagerValid && AccountingManagerValid && ConstructionManagerValid && ArchitectValid && LandscapeArchitectValid &&  DesignerValid && InteriorDesignerValid && EngineerValid && CivilEngineerValid && MechanicalEngineerValid && ElectricalEngineerValid && StructuralEngineerValid && SurveyorValid && LenderValid && DeveloperValid && RealtorValid) {
                    var dataString = "&Client=" + escape(Client.val()) + "&Owner=" + escape(Owner.val()) + "&Builder=" + escape(Builder.val()) + "&Contractor=" + escape(Contractor.val()) + "&GeneralContractor=" + escape(GeneralContractor.val()) + "&ProjectManager=" + escape(ProjectManager.val()) + "&ProjectCoordinator=" + escape(ProjectCoordinator.val()) + "&Superintendent=" + escape(Superintendent.val()) + "&SiteForeman=" + escape(SiteForeman.val()) + "&Estimator=" + escape(Estimator.val()) + "&AdministrativeManager=" + escape(AdministrativeManager.val()) + "&AccountingManager=" + escape(AccountingManager.val()) + "&ConstructionManager=" + escape(ConstructionManager.val()) + "&Architect=" + escape(Architect.val()) + "&LandscapeArchitect=" + escape(LandscapeArchitect.val()) + "&Designer=" + escape(Designer.val()) + "&InteriorDesigner=" + escape(InteriorDesigner.val()) + "&Engineer=" + escape(Engineer.val()) + "&CivilEngineer=" + escape(CivilEngineer.val()) + "&MechanicalEngineer=" + escape(MechanicalEngineer.val()) + "&ElectricalEngineer=" + escape(ElectricalEngineer.val()) + "&StructuralEngineer=" + escape(StructuralEngineer.val()) + "&Surveyor=" + escape(Surveyor.val()) + "&Lender=" + escape(Lender.val()) + "&Developer=" + escape(Developer.val()) + "&Realtor=" + escape(Realtor.val());                    
                    
                    return dataString;
                } else {
                    var errorMessage = "";
                    
                    if (!ClientValid) errorMessage += "<b>Client</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!OwnerValid) errorMessage += "<b>Owner</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!BuilderValid) errorMessage += "<b>Builder</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!ContractorValid) errorMessage += "<b>Contractor</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!GeneralContractorValid) errorMessage += "<b>General Contractor</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!ProjectManagerValid) errorMessage += "<b>Project Manager</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!ProjectCoordinatorValid) errorMessage += "<b>Project Coordinator</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!SuperintendentValid) errorMessage += "<b>Site Superintendent</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!SiteForemanValid) errorMessage += "<b>Site Foreman</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!EstimatorValid) errorMessage += "<b>Estimator</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!AdministrativeManagerValid) errorMessage += "<b>Administrative Manager</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!AccountingManagerValid) errorMessage += "<b>Accounting Manager</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!ConstructionManagerValid) errorMessage += "<b>Construction Manager</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!ArchitectValid) errorMessage += "<b>Architect</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!LandscapeArchitectValid) errorMessage += "<b>Landscape Architect</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!DesignerValid) errorMessage += "<b>Designer</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!InteriorDesignerValid) errorMessage += "<b>Interior Designer</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!EngineerValid) errorMessage += "<b>Engineer</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!CivilEngineerValid) errorMessage += "<b>Civil Engineer</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!MechanicalEngineerValid) errorMessage += "<b>Mechanical Engineer</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!ElectricalEngineerValid) errorMessage += "<b>Electrical Engineer</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!StructuralEngineerValid) errorMessage += "<b>Structural Engineer</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!SurveyorValid) errorMessage += "<b>Surveyor</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!LenderValid) errorMessage += "<b>Lender</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!DeveloperValid) errorMessage += "<b>Developer</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    if (!RealtorValid) errorMessage += "<b>Realtor</b> : " + ConstructionOnline.validation.namesText + "\n\n";
                    
                    ConstructionOnline.alert(errorMessage);
                    return -1;
                }
            }
        },
        loadCompany: function(company, email, address, city, state, zip, fax, phone, mobile, provider) {
            var $modal = $(m.$company());
            $modal.find("#mdlCompanyCompany").val(company);
            $modal.find("#mdlCompanyEmail").val(email);
            $modal.find("#mdlCompanyAddress").val(address);
            $modal.find("#mdlCompanyCity").val(city);
            $modal.find("#mdlCompanyState").val(state);
            $modal.find("#mdlCompanyZip").val(zip);
            $modal.find("#mdlCompanyFax").val(fax);
            $modal.find("#mdlCompanyPhone").val(phone);
            $modal.find("#mdlCompanyMobile").val(mobile);
            $modal.find("#mdlCompanyProvider").val(provider);
        },
        loadCompanyAdministrators: function(data) {
            var div = $("#mdlManageAdministratorsList");

            var html = "";

            for (var x in data.contacts) {
                html += "<div class='mdlCompanyAdministratorsContact'>"
                html += "<input type='checkbox' name='C" + data.contacts[x].id + "'";
                if (data.contacts[x].admin == 1) { html += " checked='checked'"; }
                html += "/>"
                html += "<div class='" + data.contacts[x].icon + " blueContact'></div>";
                html += "<div class='mdlCompanyAdministratorsWrapper'>";
                html += "<div class='mdlCompanyAdministratorsContactName'>" + data.contacts[x].name + "</div>";
                html += "<div class='mdlCompanyAdministratorsContactCompany'>" + data.contacts[x].company + "</div>"; ;
                html += "</div>";
                html += "</div>";
            }

            div.html(html);
        },

        showConfirmation: function(title, icon, label, action, submitText) {
            var $modal = $(m.$confirm());
            $modal.find(".mdlProcessingWrapper").stop().hide();
            $modal.find("#mdlConfirmTitle").html(title);
            $modal.find("#mdlConfirmIcon").removeClass().addClass("modalHeaderIcon " + icon);
            $modal.find("#mdlConfirmLabel").html(label);
            $modal.find("#mdlConfirmSubmitText").html(submitText);
            $modal.find("#mdlConfirmSubmit").unbind("click").click(action);
            $modal.find("#mdlConfirmCancel").unbind("click").click(function() { if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); } });
            ConstructionOnline.showDialog($modal, 480);
        },
        showSearchOrAddCompany: function() {
            var $modal = $(m.$SoACompany());
            $modal.find(".mdlProcessingWrapper").stop().hide();
            $modal.find(".search").unbind("click").click(function() { $modal.dialog("close"); showModalSearchCompany(); });
            $modal.find(".create").unbind("click").click(function() { $modal.dialog("close"); showModalCreateNewCompany(); });
            $modal.find("#mdlSoACompanyCancel").unbind("click").click(function() { if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); } });
            ConstructionOnline.showDialog($modal, 480);
        },
        showSearchOrAddContact: function() {
            var $modal = $(m.$SoAContact());
            $modal.find(".mdlProcessingWrapper").stop().hide();
            $modal.find(".search").unbind("click").click(function() { $modal.dialog("close"); showModalSearchContact(); });
            $modal.find(".create").unbind("click").click(function() { $modal.dialog("close"); ConstructionOnline.modals.contact_modal.createNewContact() });
            $modal.find("#mdlSoAContactCancel").unbind("click").click(function() { if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); } });
            ConstructionOnline.showDialog($modal, 480);
        },
        showCompany: function(id, action) {
            var $modal = $(m.$company());
            var title;
            var icon;
            $modal.find(".mdlProcessingWrapper").stop().hide();
            $modal.find("input").removeClass("modal-field-error");

            var goAheadAndShow = false;

            if (id) {
                title = "Edit " + s.getContactName();
                icon = "modalHeaderEdit";
                details = "";
                ConstructionOnline.modal_actions.ajaxGet({ action: "CompanyDataJSON", "id": id }, function(data, text, dataObj) {
                    ConstructionOnline.modals.loadCompany(data.company, data.email, data.address, data.city, data.state, data.zip, data.phone, data.mobile, data.provider);
                    ConstructionOnline.showDialog($modal, 480);
                }, $modal);

                goAheadAndShow = false;
            } else {
                title = "Create New Company";
                icon = "modalHeaderNewCompany";
                ConstructionOnline.modals.loadCompany("", "", "", "", "", "", "", "", "", "");

                goAheadAndShow = true;
            }

            $modal.find("#mdlCompanyTitle").html(title);
            $modal.find("#mdlCompanyIcon").removeClass().addClass("modalHeaderIcon " + icon);

            $modal.find("#mdlCompanySubmit").unbind("click").click(action);
            $modal.find("#mdlCompanyCancel").unbind("click").click(function() { if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); } });

            if (goAheadAndShow === true) {
                ConstructionOnline.showDialog($modal, 480);
            }

        },
        showManageAdministrators: function(id, action) {
            var $modal = $(m.$manageAdministrators());
            $modal.find(".mdlProcessingWrapper").stop().hide();

            ConstructionOnline.modal_actions.ajaxGet({ action: "CompanyAdministratorsJSON", "id": id }, function(data, text, dataObj) {
                ConstructionOnline.modals.loadCompanyAdministrators(data);
                ConstructionOnline.showDialog($modal, 480);
            }, $modal);

            $modal.find("#mdlManageAdministratorsSubmit").unbind("click").click(action);
            $modal.find("#mdlManageAdministratorsCancel").unbind("click").click(function() { if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); } });

        },
        showMove: function(title, modalIcon, id, action) {
            var $modal = $(m.$move());
            $modal.find(".mdlProcessingWrapper").stop().hide();
            $modal.find("#mdlMoveTree").html("Building tree...");
            ConstructionOnline.modal_actions.ajaxGet({ action: "ProjectsTreeJSON", "id": id }, function(data, text, dataObj) {
                var $modal = $(m.$move());
                $modal.find("#mdlMoveTree").html(buildProjectsAndFoldersTree(data)).find("[name=" + data.currentParent + "]").click();
                $modal.find("#mdlMoveTree").find(".folderTreeRow:first").css("border", "none");
                $modal.find("#mdlMoveFileName").html(data.filename);
                $modal.find("#mdlMoveLocation").html(data.location);
                $modal.find("#mdlMoveFileSize").html(data.filesize);
                $modal.find("#mdlMoveComments").html(data.comments);
                $modal.find("#mdlMoveFileIcon").removeClass().addClass(data.icon);
                ConstructionOnline.showDialog($modal, 800);
            }, $modal);

            $modal.find("#mdlMoveTitle").html(title);
            $modal.find("#mdlMoveIcon").removeClass().addClass("modalHeaderIcon " + modalIcon);
            $modal.find("#mdlMoveSubmit").unbind("click").click(action);
            $modal.find("#mdlMoveCancel").unbind("click").click(function() { if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); } });
        },
        showNotification: function() {
        },
        showShare: function(title, icon, sharedID, action) {
            var $modal = $("#modalShare");
            $modal.find(".modal-field-error").removeClass("modal-field-error");
            ConstructionOnline.modal_actions.ajaxGet({ action: "FileDataJSON", "id": sharedID }, function(data, text, dataObj) {
                var $modal = $("#modalShare");
                $modal.find("#mdlShareFileName").html(data.filename);
                $modal.find("#mdlShareFileImage").removeClass().addClass(data.icon);
                $modal.find("#mdlShareFileModified").html("<b>" + data.date + "</b> at <b>" + data.time + "</b> by <b>" + data.contact + "</b>");
                $modal.find("#mdlShareFileSize").html(data.filesize);
                $modal.find("#mdlShareComments").html(data.numComments + " comments");
                ConstructionOnline.showDialog($modal, 480);
            }, $modal);

            $modal.find("#mdlShareTitle").html(title);
            $modal.find("#mdlShareEmail").val("");
            $modal.find("#mdlShareMessage").val("");
            $modal.find("#mdlShareIcon").removeClass().addClass("modalHeaderIcon " + icon);
            $modal.find("#mdlShareSubmit").unbind("click").click(action);
            $modal.find("#mdlShareCancel").unbind("click").click(function() { if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); } });

        },
        showTextEntry: function(title, icon, label, defaultText, action, buttonText) {
            var $modal = $(m.$textEntry());
            $modal.find(".mdlProcessingWrapper").stop().hide();
            $modal.find("#mdlTextEntryExtra").hide();
            $modal.find("input").removeClass("modal-field-error");
            $modal.find("#mdlTextEntryTitle").html(title);
            $modal.find("#mdlTextEntryIcon").removeClass().addClass("modalHeaderIcon " + icon);
            $modal.find("#mdlTextEntryLabel").html(label);
            $modal.find("#mdlTextEntryText").attr("value", ConstructionOnline.decode(defaultText)).unbind("keyup").keyup(function(e) { if (e.which == 13) { $("#mdlTextEntrySubmit").click(); } });
            $modal.find("#mdlTextEntrySubmit").show().unbind("click").click(action).find("a").text(buttonText);
            $modal.find("#mdlTextEntryCancel").show().unbind("click").click(function() { if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); } });

            ConstructionOnline.showDialog($modal, 480, function() { $("#mdlTextEntryText").focus(); });
        },
        showUpload: function(title, icon, image, prjID, prjName, folID, folName, cntTtl, cntSTtlDsp, cntLblDsp, action, isAlbum) {
            var $modal = $(m.$upload());
            $modal.find(".mdlProcessingWrapper").stop().hide();
            if (ConstructionOnline.hasFlash() && !(ConstructionOnline.IE6)) { //do ie6 check here as well
                $modal.find("#mdlUploadSubmit").remove();
                $("#mdlUploadFile").replaceWith('<div id="mdlUploadFile" style="width: 100%; text-align: center;" ><div id="' + ConstructionOnline.modals.upload_events.uploadInput + '" class="upload"/></div>');
            } else {
                $modal.find("#chkCloseWindow, #chkCloseWindowLabel").hide();
                $modal.find("#mdlUploadSubmit").unbind("click").click(action);
            }

            ConstructionOnline.modals.upload_events.uploadTitle = cntTtl;
            $modal.find("#mdlUploadTitle").html(title);
            $modal.find("#mdlUploadIcon").removeClass().addClass("modalHeaderIcon " + icon);
            $modal.find("#mdlUploadImage").removeClass().addClass(image);
            if (folName != "") {
                if (isAlbum === true) {
                    $modal.find("#mdlUploadSelectedProject").html("album <b>" + folName + "</b> in project <b>" + prjName + "</b>");
                } else {
                    $modal.find("#mdlUploadSelectedProject").html("folder <b>" + folName + "</b> in project <b>" + prjName + "</b>");
                }
            }
            else {
                $modal.find("#mdlUploadSelectedProject").html("project <b>" + prjName + "</b>");
            }
            $modal.find("#mdlUploadContentTitle").html(cntTtl);
            $modal.find("#mdlUploadContentSubTitle").css("display", cntSTtlDsp);
            //$modal.find("#mdlUploadContentLabel").css("display", cntLblDsp);
            //$modal.find("#mdlUploadSubmit").unbind("click").click(action);
            $modal.find("#mdlUploadCancel").unbind("click").click(function() { if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); } });

            ConstructionOnline.showDialog($modal, 480, function() {
                if (ConstructionOnline.hasFlash() && !(ConstructionOnline.IE6)) {
                    var checkScript = '/post/Information.aspx?action=FileExists%26prnID=' + folID + '%26prjID=' + prjID;
                    $('#' + ConstructionOnline.modals.upload_events.uploadInput).uploadify({
                        'uploader': '/js/uploadify/uploadify.swf',
                        'script': 'http://' + s.uploadServer() + '/post/submits.aspx',
                        'checkScript': checkScript,
                        'folder': '/post',
                        'cancelImg': '/js/uploadify/cancel.png',
                        'hideButton': true,
                        'multi': true,
                        'auto': true,
                        'width': 79,
                        'height': 29,
                        'wmode': 'transparent',
                        'scriptData': { 'fromFlash': 1, 'ASPSESSID': s.id(), 'action': 'fileUpload', 'prnID': folID, 'prjID': prjID },
                        'onInit': ConstructionOnline.modals.upload_events.onInit,
                        'onSelect': ConstructionOnline.modals.upload_events.onSelect,
                        'onSelectOnce': ConstructionOnline.modals.upload_events.onSelectOnce,
                        'onCancel': ConstructionOnline.modals.upload_events.onCancel,
                        'onClearQueue': ConstructionOnline.modals.upload_events.onClearQueue,
                        'onQueueFull': ConstructionOnline.modals.upload_events.onQueueFull,
                        'onError': ConstructionOnline.modals.upload_events.onError,
                        'onProgress': ConstructionOnline.modals.upload_events.onProgress,
                        'onComplete': ConstructionOnline.modals.upload_events.onComplete,
                        'onAllComplete': ConstructionOnline.modals.upload_events.onAllComplete,
                        'onCheck': ConstructionOnline.modals.upload_events.onCheck
                    });
                }
            }, function() {
                if (ConstructionOnline.hasFlash() && !(ConstructionOnline.IE6)) {
                    if (ConstructionOnline.modals.upload_events.uploading) {
                        var close = confirm("Closing this form will cancel all pending uploads, do you want to cancel all of your in progress and pending uploads?");
                        if (!close) { return false; }
                        $("#" + ConstructionOnline.modals.upload_events.uploadInput).uploadifyClearQueue();
                    }

                    if ((!ConstructionOnline.isNaN($("#" + ConstructionOnline.modals.upload_events.uploadInput).attr("numUploaded"))) && ($("#" + ConstructionOnline.modals.upload_events.uploadInput).attr("numUploaded") > 0)) {
                        location.reload();
                    }
                    return true;
                } else { return true; }
            });
        },
        showTextMessage: function(id, action) {
            var $modal = $(m.$textMessage());
            $modal.find(".mdlProcessingWrapper").stop().hide();
            $modal.find("#mdlTextMessageSubmit").unbind("click").click(action);
            $modal.find("#mdlTextMessageCancel").unbind("click").click(function() { if (ConstructionOnline.mustReload === true) { location.reload(); } else { $modal.dialog("close"); } });

            ConstructionOnline.showDialog($modal, 480);
        },
        upload_events: {
            uploadTitle: " ",
            totalUploads: 0,
            uploadInput: "mdlUploadFileInput",
            uploading: false,
            showUploading: function() {
                $("#mdlUploadContentTitle").text("Uploading ... Please Wait");
                $("#mdlUploadContentSubTitle").hide(0);
                $("#mdlUploadContentLabel").hide(0);
                $('#' + ConstructionOnline.modals.upload_events.uploadInput + "Uploader").css("background-image", "none");
                if ($("#uploadCounter").size() === 0) {
                    $('#' + ConstructionOnline.modals.upload_events.uploadInput + "Uploader").before("<div id='uploadCounter'><span id='completedUploads'>1</span> of <span id='totalUploads'>3</span> completed</div>");
                }
            }, //end showUploading
            hideUploading: function() {
                $("#mdlUploadContentTitle").text(ConstructionOnline.modals.upload_events.uploadTitle);
                $("#mdlUploadContentSubTitle").show(0);
                $("#mdlUploadContentLabel").show(0);
                $("#uploadCounter").remove();
                $('#' + ConstructionOnline.modals.upload_events.uploadInput + "Uploader").css("background-image", "");
            }, //end hideUPloading
            onInit: function() {
                return true;
            }, //end onInit
            onSelect: function(event, queueID, fileObj) {
                var byteSize = Math.round(fileObj.size / 1024 * 100) * .01;
                var suffix = 'KB';
                if (byteSize > 1000) {
                    byteSize = Math.round(byteSize * .001 * 100) * .01;
                    suffix = 'MB';
                }
                var sizeParts = byteSize.toString().split('.');
                if (sizeParts.length > 1) {
                    byteSize = sizeParts[0] + '.' + sizeParts[1].substr(0, 2);
                } else {
                    byteSize = sizeParts[0];
                }
                if (fileObj.name.length > 32) {
                    fileName = fileObj.name.substr(0, 32) + '...';
                } else {
                    fileName = fileObj.name;
                }
                queue = '#' + ConstructionOnline.modals.upload_events.uploadInput + 'Queue';
                if (event.data.queueID) {
                    queue = '#' + event.data.queueID;
                }

                if (jQuery(queue + ' .uploadifyQueueItem').size() >= 3) { // remove the background image and set the autoscroll so it
                    jQuery(queue).css("background-image", "none").css("overflow", "auto");
                }

                jQuery(queue).append('<div id="' + ConstructionOnline.modals.upload_events.uploadInput + queueID + '" class="uploadifyQueueItem" >\
                                <div class="icon">\
                                    <div class="' + ConstructionOnline.getFileIcon(fileObj.name) + '"></div>\
                                </div>\
								<div class="cancel">\
									<div class="uploadButton cs-ui-icon-spinner-cancel" onclick="javascript:jQuery(\'#' + ConstructionOnline.modals.upload_events.uploadInput + '\').uploadifyCancel(\'' + queueID + '\')"></div>\
								</div>\
								<div>\
								    <div class="uploadTop">\
								        <span class="fileName" >' + fileName + '</span>\
								        <span class="percentage" >Pending</span>\
								    </div>\
								    <div class="uploadBottom" >\
								        <span class="fileSize">' + byteSize + ' ' + suffix + '</span>\
								        <div class="uploadifyProgress">\
									        <div id="' + ConstructionOnline.modals.upload_events.uploadInput + queueID + 'ProgressBar" class="uploadifyProgressBar"><!--Progress Bar--></div>\
								        </div>\
								    </div>\
								</div>\
								</div>');

                if (jQuery(queue + ' .uploadifyQueueItem').size() >= 4) { // fix the widths for the new scroll area, do it after adding so it modifies the new items
                    jQuery(queue + " .uploadBottom").css("width", "287px");
                    jQuery(queue + " .uploadifyProgress").css("width", "220px");
                }

                return false;
            }, //end onSelect
            onSelectOnce: function(event, data) {
                ConstructionOnline.modals.upload_events.uploading = true;
                ConstructionOnline.modals.upload_events.showUploading();
                $("#completedUploads").text("0");
                ConstructionOnline.modals.upload_events.totalUploads = data.fileCount;
                $("#totalUploads").text(data.fileCount);
                jQuery(queue + ' .uploadifyQueueItem:first').css("margin-top", "0px");
                return true;
            }, //end onSelectOnce
            onCancel: function(event, queueID, fileObj, data, clearFast) {
                var queue = '#' + ConstructionOnline.modals.upload_events.uploadInput + 'Queue';
                ConstructionOnline.modals.upload_events.totalUploads = data.fileCount
                $("#totalUploads").text(data.fileCount);

                var fadeSpeed = (clearFast == true) ? 0 : 250;
                jQuery('#' + ConstructionOnline.modals.upload_events.uploadInput + queueID).fadeOut(fadeSpeed, function() {
                    jQuery(this).remove()

                    jQuery(queue + ' .uploadifyQueueItem:first').css("margin-top", "0px");

                    if (jQuery(queue + ' .uploadifyQueueItem').size() <= 3) {
                        jQuery(queue).css("overflow", "").css("background-image", "url(/imageBank/uploadQBG.gif)");
                        jQuery(queue + " .uploadBottom").css("width", "307px");
                        jQuery(queue + " .uploadifyProgress").css("width", "240px");
                    }

                });

                if (data.fileCount == 0) {
                    ConstructionOnline.modals.upload_events.uploading = false;
                    ConstructionOnline.modals.upload_events.hideUploading();
                }
                return false;
            }, //end onCancel
            onClearQueue: function(event, data) {
                ConstructionOnline.modals.upload_events.uploading = false;
                ConstructionOnline.modals.upload_events.hideUploading();
                return true;
            }, //end onClearQueue
            onQueueFull: function(event, queueSizeLimit) {
                return true;
            }, //end onQueueFull
            onError: function(event, queueID, fileObj, errorObj) {
                jQuery("#" + ConstructionOnline.modals.upload_events.uploadInput + queueID + " .percentage").click(function() { ConstructionOnline.alert("Error: " + errorObj.type + "\n Message: " + errorObj.info) });
                return true;
            }, //end onProgress
            onProgress: function(event, queueID, fileObj, data) {
                jQuery("#" + ConstructionOnline.modals.upload_events.uploadInput + queueID + "ProgressBar").css('width', data.percentage + '%');
                if (event.data.toDisplay == 'percentage') displayData = data.percentage + '% Complete';
                if (event.data.toDisplay == 'speed') displayData = data.speed + 'KB/s';
                if (event.data.toDisplay == null) displayData = ' ';
                jQuery("#" + ConstructionOnline.modals.upload_events.uploadInput + queueID + " .percentage").text(displayData);
                return false;
            }, //end onProgress
            onComplete: function(event, queueID, fileObj, reponse, data) {
                $("#completedUploads").text(ConstructionOnline.modals.upload_events.totalUploads - data.fileCount);
                var s = reponse.toString();
                if (s.substring(0, 1) !== "1") {
                    jQuery("#" + ConstructionOnline.modals.upload_events.uploadInput + queueID).addClass('uploadifyError').find(".percentage").text('Failed').click(function() { ConstructionOnline.alert(reponse) });

                } else {
                    jQuery("#" + ConstructionOnline.modals.upload_events.uploadInput + queueID + " .percentage").text('Completed');
                }

                jQuery("#" + ConstructionOnline.modals.upload_events.uploadInput + queueID + " .cancel").click(function(e) {
                    //an exception is going to be thrown by the flash when you click the cancel button here to clear
                    //a completed item, calling stop propagation or whatever doesn't make a difference
                    $(this).parent().fadeOut(250, function() {
                        $(this).remove();
                        var queue = '#' + ConstructionOnline.modals.upload_events.uploadInput + 'Queue';
                        jQuery(queue + ' .uploadifyQueueItem:first').css("margin-top", "0px");

                        if (jQuery(queue + ' .uploadifyQueueItem').size() <= 3) {
                            jQuery(queue).css("overflow", "").css("background-image", "url(/imageBank/uploadQBG.gif)");
                            jQuery(queue + " .uploadBottom").css("width", "307px");
                            jQuery(queue + " .uploadifyProgress").css("width", "240px");
                        }
                    });
                }).children(".uploadButton").removeClass().addClass("uploadButton cs-ui-icon-spinner-check")
                return false;
            }, //end onComplete
            onAllComplete: function(event, data) {
                jQuery("#" + ConstructionOnline.modals.upload_events.uploadInput).attr("numUploaded", data.filesUploaded);
                ConstructionOnline.modals.upload_events.uploading = false;
                ConstructionOnline.modals.upload_events.hideUploading();
                $("#chkCloseWindow:checked").each(function() {
                    $("#mdlUploadCancel").click();
                });
                return true;
            }, //end onAllCompelte
            onCheck: function(event, checkScript, fileQueue, folder, single) {
                return true;
            } //end onCheck
        }
    },
    //ConstructionOnline.validation
    validation: {
        provider: /^([\s0-9a-zA-Z\.])+$/, // only allow : a-z 0-9 .
        providerText: "The value may only contain numbers, letters and periods",
        names: /^([\s0-9&a-zA-Z_'-\.,?!\/#])+$/i,  //may consist of a-z, 0-9, underscores, ', -
        namesText: "The value may only contain numbers, letters, underscores, hyphens, apostrophes, commas, forward slashes and hashmarks",
        alphanum: /^([\s0-9a-zA-Z])+$/, // only allow : a-z 0-9
        alphanumText: "The value may only contain numbers and letters",
        email: /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i,
        emailText: "Email address is too long or improperly formatted",
        checkRegExp: function(dom, regexp, required) {
            if (!required && dom.val().length == 0) {
                return true
            } else if (!(regexp.test(dom.val()))) {
                dom.addClass("modal-field-error");
                return false;
            }
            else {
                return true;
            }
        }, //end ConstructionOnline.validation.checkRegExp
        checkLength: function(dom, min, max) {
            if (dom.val().length > max || dom.val().length < min) {
                dom.addClass("modal-field-error");
                return false;
            } else {
                return true;
            }

        }, //end ConstructionOnline.validation.checkLength
        checkMatch: function(first, second) {
            if (first.val() !== second.val()) {
                first.addClass("modal-field-error");
                second.addClass("modal-field-error");
                return false;
            }
            return true;
        }
    }, //end ConstructionOnline.validation
    verifyPermissions: function(permission, context, id, fn) {
        ConstructionOnline.modal_actions.ajaxPost({ action: "verifyPermissions", "perm": permission, "context": context, "id": id }, fn)
    }
} //end ConstructionOnline

        function buildFolderTree(data, level) {
            var result = "<div class='folderTreeRow clickable "
            if (data.id.toString().charAt(0) == "P") {
                result += "notBuilt "
            }
            if (data.children.length > 0) {
                result += "folderTreeRowCollapsed' name='" + data.id + "'>";
            } else {
                result += "folderTreeRowNoChildren' name='" + data.id + "'>";
            }
            result += "<span class='folderTreeRowSpan'><span class='arrow' style='margin-left:" + (40 + (level * 27)) + "px;'></span><span class='" + data.className + "' style='margin-left: 5px; float: left; display:block;'></span><span class='label'>" + data.name + "</span></span>";
            for (var i = 0; i < data.children.length; i++) {
                result += buildFolderTree(data.children[i], level + 1);
            }
            result += "</div>";
            return result;
        }
        function buildProjectsAndFoldersTree(data) {
            var level = 0;
            var result = "";
            for (var i = 0; i < data.projects.length; i++) {
                result += buildFolderTree(data.projects[i], level);
            }
            return result;
        }
        function showModalSearchOrAddContact() {
            ConstructionOnline.modals.showSearchOrAddContact();
        }
        function showModalSearchContact() {
            ConstructionOnline.modals.showTextEntry("Add/Search for Contact", "modalHeaderContact", "Name or Email Address:", "", function() { ConstructionOnline.modal_actions.submitContactSearch(); }, "Search");
        }
        function showModalSearchOrAddCompany() {
            ConstructionOnline.modals.showSearchOrAddCompany();
        }
        function showModalSearchCompany() {
            ConstructionOnline.modals.showTextEntry("Search for Company", "modalHeaderCompany", "Enter an email address:", "", function() { ConstructionOnline.modal_actions.submitCompanySearch(); }, "Search");
        }
        function showModalCreateNewAlbum() {
            var context = "A";
            var id = s.getFolder(true);
            if (id == "") {
                id = s.getProject();
                context = "P";
            }
            ConstructionOnline.verifyPermissions("AddAlbums", context, id, function() {
                ConstructionOnline.modals.showTextEntry("Create New Album", "modalHeaderNewAlbum", "Enter Album Name:", "", function() { ConstructionOnline.modal_actions.submitAlbumCreate(); }, "Create");
            });
        }
        function showModalCreateNewFolder() {
            var context = "H";
            var id = s.getFolder(true);
            if (id == "") {
                id = s.getProject();
                context = "P";
            }
            showModalCreateNewFolderIn(context, id);
        }
        function showModalCreateNewFolderIn(context, id) {
            ConstructionOnline.verifyPermissions("AddFolders", context, id, function() {
                ConstructionOnline.modals.showTextEntry("Create New Folder", "modalHeaderNewFolder", "Enter Folder Name:", "", function() { ConstructionOnline.modal_actions.submitFolderCreate(context, id); }, "Create");
            });
        }
        function showModalCreateNewCompany() {
            ConstructionOnline.modals.showCompany(undefined, function() { ConstructionOnline.modal_actions.submitCompanyAdd(); });
        }
        function showModalEditCompany() {
            ConstructionOnline.modals.showCompany(s.getContact(), function() { ConstructionOnline.modal_actions.submitCompanyEdit(s.getContact()); });
        }
        function showModalDeleteAlbum() {
            ConstructionOnline.verifyPermissions("DeleteFolders", "H", s.getFolder(), function() {
                ConstructionOnline.modals.showConfirmation("Delete Album", "modalHeaderDelete", "Are you sure you want to delete the album '" + s.getFolderName() + "'?", function() { ConstructionOnline.modal_actions.submitFolderDelete(s.getFolder()); }, "Delete");
            });
        }
        function showModalDeleteContact() {
            ConstructionOnline.modals.showConfirmation("Delete Contact", "modalHeaderDelete", "Are you sure you want to delete the contact '" + s.getContactName() + "'?", function() { ConstructionOnline.modal_actions.submitContactDelete(s.getContact()); }, "Delete");
        }
        function showModalDeleteFile() {
            ConstructionOnline.verifyPermissions("DeleteFiles", "F", s.getFile(), function() {
                ConstructionOnline.modals.showConfirmation("Delete File", "modalHeaderDelete", "Are you sure you want to delete the file '" + s.getFileName() + "'?", function() { ConstructionOnline.modal_actions.submitFileDelete(s.getFile()); }, "Delete");
            });
        }
        function showModalDeleteFolder() {
            ConstructionOnline.verifyPermissions("DeleteFolders", "H", s.getFolder(), function() {
                ConstructionOnline.modals.showConfirmation("Delete Folder", "modalHeaderDelete", "Are you sure you want to delete the folder '" + s.getFolderName() + "'?", function() { ConstructionOnline.modal_actions.submitFolderDelete(s.getFolder()); }, "Delete");
            });
        }
        function showModalDeleteImage() {
            ConstructionOnline.verifyPermissions("DeleteFiles", "I", s.getFile(), function() {
                ConstructionOnline.modals.showConfirmation("Delete Image", "modalHeaderDelete", "Are you sure you want to delete the image '" + s.getFileName() + "'?", function() { ConstructionOnline.modal_actions.submitFileDelete(s.getFile()); }, "Delete");
            });
        }
        function showModalDeleteProject() {
            ConstructionOnline.verifyPermissions("DeleteProject", "P", s.getProject(), function() {
                ConstructionOnline.modals.showConfirmation("Delete Project", "modalHeaderDelete", "Are you sure you want to delete the project '" + s.getProjectName() + "'?", function() { ConstructionOnline.modal_actions.submitProjectDelete(s.getProject()); }, "Delete");
            });
        }
        function showModalManageAdministrators(id) {
            ConstructionOnline.modals.showManageAdministrators(id, function() { ConstructionOnline.modal_actions.submitManageAdministrators(id); });
        }
        function showModalRenameAlbum() {
            showModalRenameAlbum2(s.getFolder(), s.getFolderName())
        }
        function showModalRenameAlbum2(id, name) {
            ConstructionOnline.verifyPermissions("EditFolders", "H", id, function() {
                ConstructionOnline.modals.showTextEntry("Rename Album", "modalHeaderEdit", "Enter New Album Name:", name, function() { ConstructionOnline.modal_actions.submitFolderRename(id); }, "Rename");
                ConstructionOnline.modal_actions.ajaxGet({ action: "folderDataAJAX", "id": id }, function(data, textStatus, dataObj) {
                    var $xtra = $("#mdlTextEntryExtra");
                    $xtra.html($("<div/>").append(data.folderdataajax.replace(/<script(.|\s)*?\/script>/g, ""))).slideDown(200);
                });
            });
        }
        function showModalRenameFile() {
            ConstructionOnline.verifyPermissions("EditFiles", "F", s.getFile(), function() {
                ConstructionOnline.modals.showTextEntry("Rename File", "modalHeaderEdit", "Enter New File Name:", s.getFileName(), function() { ConstructionOnline.modal_actions.submitFileRename(s.getFile()); }, "Rename");
            });
        }
        function showModalRenameFolder() {
            showModalRenameFolder2(s.getFolder(), s.getFolderName())
        }
        function showModalRenameFolder2(id, name) {
            ConstructionOnline.verifyPermissions("EditFolders", "H", id, function() {
                ConstructionOnline.modals.showTextEntry("Rename Folder", "modalHeaderEdit", "Enter New Folder Name:", name, function() { ConstructionOnline.modal_actions.submitFolderRename(id); }, "Rename");
                ConstructionOnline.modal_actions.ajaxGet({ action: "folderDataAJAX", "id": id }, function(data, textStatus, dataObj) {
                    var $xtra = $("#mdlTextEntryExtra");
                    $xtra.html($("<div/>").append(data.folderdataajax.replace(/<script(.|\s)*?\/script>/g, ""))).slideDown(200);
                });
            });
        }
        function showModalRemoveContact() {
            ConstructionOnline.modals.showConfirmation("Remove Contact", "modalHeaderDelete", "Are you sure you want to remove the contact,'" + s.getContactName() + "', from your contact list?", function() { ConstructionOnline.modal_actions.submitContactRemove(s.getContact()); }, "Remove");
        }
        function showModalRemoveNote() {
            ConstructionOnline.modals.showConfirmation("Remove Note", "modalHeaderDelete", "Are you sure you want to remove the announcement,<br> '" + s.getTitle() + "'?", function() { ConstructionOnline.modal_actions.submitNoteDelete(s.getNote()); }, "Remove");
        }
        function showModalShareFile() {
            ConstructionOnline.modals.showShare("Share File", "modalHeaderEmail", s.getFile(), function() { ConstructionOnline.modal_actions.submitFileShare(s.getFile()); });
        }
        function showModalSharePhoto() {
            ConstructionOnline.modals.showShare("Share Photo", "modalHeaderPhoto", s.getFile(), function() { ConstructionOnline.modal_actions.submitFileShare(s.getFile()); });
        }
        function showModalMoveFile() {
            ConstructionOnline.modals.showMove("Move File to the Selected Location", "modalHeaderMoveFile", s.getFile(), function() { ConstructionOnline.modal_actions.submitMove(s.getFile()); });
        }
        function showModalMoveImage() {
            ConstructionOnline.modals.showMove("Move Image to the Selected Location", "modalHeaderPhoto", s.getFile(), function() { ConstructionOnline.modal_actions.submitMove(s.getFile()); });
        }
        function showModalMoveFolder() {
            ConstructionOnline.modals.showMove("Move Folder to the Selected Location", "modalHeaderMoveFolder", s.getFolder(), function() { ConstructionOnline.modal_actions.submitMove(s.getFolder()); });
        }
        function showModalMoveAlbum() {
            ConstructionOnline.modals.showMove("Move Album to the Selected Location", "modalHeaderPhoto", s.getFolder(), function() { ConstructionOnline.modal_actions.submitMove(s.getFolder()); });
        }
        function showModalUploadFile(context, id, folName) {
            var isAlbum = false;
            if (context == "A") {
                isAlbum = true;
            }
            if (context == "P") {
                folID = "";
                folName = "";
            } else {
                folID = id;
            }
            ConstructionOnline.modals.showUpload("Upload Files(s)", "modalHeaderUpload", "grayEmptyFileUpload", s.getProject(), s.getProjectName(), folID, folName, "Please Select File(s) to Upload", "none", "none", function() { ConstructionOnline.modal_actions.submitFileUpload(); }, isAlbum);
        }
        function showModalUploadImage(context, id, folName) {
            var isAlbum = false;
            if (context == "A") {
                isAlbum = true;
            }
            if (context == "P") {
                folID = "";
                folName = "";
            } else {
                folID = id;
            }
            ConstructionOnline.modals.showUpload("Upload Image(s)", "modalHeaderUpload", "grayImgUploadPhotos", s.getProject(), s.getProjectName(), folID, folName, "Please Select Image(s) to Upload", "", "", function() { ConstructionOnline.modal_actions.submitFileUpload(); }, isAlbum);
        }
        function showModalTextMessage(id) {
            ConstructionOnline.modals.showTextMessage(id, function() { ConstructionOnline.modal_actions.submitTextMessage(id); });
        }

        function TextMessage(context) {
            switch (context) {
                case "I": // IMAGE
                    break;

                case "F": // FILE
                    break;

                case "H": // FOLDER
                    break;

                case "A": // ALBUM
                    break;

                case "P": // PROJECT
                    break;

                case "C": // CONTACT
                    showModalTextMessage(s.getContact());
                    break;

                case "M": // COMPANY
                    showModalTextMessage(s.getContact());
                    break;

                default:
                    ConstructionOnline.alert('TextMessage -> Context: ' + context);
            }
        }
        function Add(context) {
            switch (context) {
                case "H": // FOLDER
                    showModalCreateNewFolder();
                    break;

                case "A": // ALBUM
                    showModalCreateNewAlbum();
                    break;

                case "P": // PROJECT
                    ConstructionOnline.modals.project_modal.create();
                    break;

                case "C": // CONTACT
                    //showModalCreateNewContact();
                    //showModalSearchOrAddContact();
                    showModalSearchContact();
                    break;

                case "M": // COMPANY
                    //showModalCreateNewCompany();
                    showModalSearchOrAddCompany();
                    break;
                    
                case "N": // NOTE
                    ConstructionOnline.modals.note_modal.show(undefined, "", "add");          
                    break;

                default:
                    ConstructionOnline.alert('Add Me -> Context: ' + context);
            }
        }
        function Delete(context) {
            switch (context) {
                case "I": // IMAGE
                    showModalDeleteImage();
                    break;

                case "F": // FILE
                    showModalDeleteFile();
                    break;

                case "H": // FOLDER
                    showModalDeleteFolder();
                    break;

                case "A": // ALBUM
                    showModalDeleteAlbum();
                    break;

                case "P": // PROJECT
                    showModalDeleteProject();
                    break;

                case "C": // CONTACT
                case "M": // COMPANY
                    showModalRemoveContact();
                    break;
                    
                case "N": //NOTE
                    showModalRemoveNote();
                    break;

                default:
                    ConstructionOnline.alert('Delete Me -> Context: ' + context);
            }
            //todo: what should it do when context is bad or undefined?

        }
        function Download(context, id) {
            switch (context) {
                case "I": // IMAGE 
                case "F": // FILE 
                    if (id !== null) {
                        id = s.getFile();
                    }
                    ConstructionOnline.verifyPermissions("DownloadFiles", context, id, function() {
                        window.location.search = "?FID=" + id + "&download=1&unused=" + (new Date()).getTime();
                        return;
                    });
                    break;

                //todo: what should it do if you try to download anything other than files or images?                                                                                       
                case "H": // FOLDER
                    if (id !== null) {
                        id = s.getFolder();
                    }
                    break;

                case "A": // ALBUM
                    if (id !== null) {
                        id = s.getFolder();
                    }
                    break;

                case "P": // PROJECT
                    if (id !== null) {
                        id = s.getProject();
                    }
                    break;

                case "C": // CONTACT
                    if (id !== null) {
                        id = s.getContact();
                    }
                    break;

                default:
                    ConstructionOnline.alert('Download Me-> Context: ' + context + ' ID: ' + id);
            }

        }
        function Edit(context) {
            switch (context) {
                case "I": // IMAGE
                    showModalRenameFile();
                    break;

                case "F": // FILE
                    showModalRenameFile();
                    break;

                case "H": // FOLDER
                    showModalRenameFolder();
                    break;

                case "A": // ALBUM
                    showModalRenameAlbum();
                    break;

                case "P": // PROJECT
                    ConstructionOnline.modals.project_modal.edit();
                    break;

                case "C": // CONTACT
                    ConstructionOnline.modals.contact_modal.editContact();
                    break;

                case "M": // COMPANY
                    showModalEditCompany();
                    break;

                case "N": // NOTE
                    ConstructionOnline.modals.note_modal.show(s.getNote(), s.getTitle(), "edit");          
                    break;

                default:
                    ConstructionOnline.alert('Edit Me-> Context: ' + context);
            }
        }
        function Share(context, id) {
            switch (context) {
                case "I": // IMAGE
                    if (id !== null) {
                        id = s.getFile();
                    }
                    showModalSharePhoto();
                    return true;
                    break;

                case "F": // FILE
                    if (id !== null) {
                        id = s.getFile();
                    }
                    showModalShareFile();
                    return true;
                    break;

                case "H": // FOLDER
                    if (id !== null) {
                        id = s.getFolder();
                    }
                    break;

                case "A": // ALBUM
                    if (id !== null) {
                        id = s.getFolder();
                    }
                    break;

                case "P": // PROJECT
                    if (id !== null) {
                        id = s.getProject();
                    }
                    break;

                case "C": // CONTACT
                    if (id !== null) {
                        id = s.getContact();
                    }
                    break;

                default:
                    ConstructionOnline.alert('Share Me-> Context: ' + context + ' ID: ' + id);
            }

        }

        function Move(context) {
            switch (context) {
                case "I": // IMAGE
                    showModalMoveImage();
                    break;
                case "F": // FILE
                    showModalMoveFile();
                    break;

                case "H": // FOLDER
                    showModalMoveFolder();
                    break;
                case "A": // ALBUM
                    showModalMoveAlbum();
                    break;


                case "P": // PROJECT
                    break;

                case "C": // CONTACT
                    break;

                default:
                    ConstructionOnline.alert('Move Me-> Context: ' + context);
            }

        }
        function Permissions(context) {
            switch (context) {
                case "P": // PROJECT
                    ConstructionOnline.modals.invite_modal.permissionsProject();
                    break;

                case "C": // CONTACT
                    ConstructionOnline.modals.invite_modal.permissionsContact();
                    break;

                case "H":
                case "A":
                    ConstructionOnline.modals.invite_modal.permissionsFolder();
                    break;

                default:
                    ConstructionOnline.alert('Invite Me-> Context: ' + context);
            }
        }
        function Invite(context) {
            switch (context) {
                case "P": // PROJECT
                    ConstructionOnline.modals.invite_modal.inviteProject();
                    break;

                case "C": // CONTACT
                    ConstructionOnline.modals.invite_modal.inviteContact();
                    break;

                case "H":
                case "A":
                    ConstructionOnline.modals.invite_modal.inviteFolder();
                    break;

                default:
                    ConstructionOnline.alert('Invite Me-> Context: ' + context);
            }
        }

        function Upload() {
            var context = "H";
            var id = s.getFolder(true);
            var name = s.getFolderName(true);
            if (id == "") {
                id = s.getProject();
                name = s.getProjectName(true);
                context = "P";
            }
//            will allow you to upload directly into the project, without having to create an album first.            
//            if (location.href.match("Gallery3.aspx") == "Gallery3.aspx") {
//                context = "A";
//            }
            
            UploadInto(context, id, name);
        }
        
        function UploadInto(context, id, name) {
            ConstructionOnline.verifyPermissions("AddFiles", context, id, function() {
                switch (context) {
                    case "A": // Album
                    case "I": // Image
                        showModalUploadImage(context, id, name);
                        break;
                    case "H": // Folder
                    case "F": // File
                    case "P": // Project
                        showModalUploadFile(context, id, name);
                        break;
                        
                    default:
                        ConstructionOnline.alert('Upload Me-> Context: ' + context);
                }
            });
        }

        function View(context, id) {
            switch (context) {
                case "I": // IMAGE
                    if (id !== null) {
                        id = s.getFile();
                    }
                    break;

                case "F": // FILE
                    if (id !== null) {
                        id = s.getFile();
                    }
                    break;

                case "H": // FOLDER
                    if (id !== null) {
                        id = s.getFolder();
                    }
                    break;

                case "A": // ALBUM
                    if (id !== null) {
                        id = s.getFolder();
                    }
                    break;

                case "P": // PROJECT
                    if (id !== null) {
                        id = s.getProject();
                    }
                    break;

                case "C": // CONTACT
                    if (id !== null) {
                        id = s.getContact();
                    }
                    break;

                default:

            }

            ConstructionOnline.alert('View Me-> Context: ' + s.getContext() + ' ID: ' + id);
        }
        
        
var Search = {
    $ProjectTab: function() {
        if (!this._projectTab) {
            this._projectTab = $("#searchProjectTab");
        }
        return this._projectTab;
    }, //$ProjectTab
    $FileTab: function() {
        if (!this._fileTab) {
            this._fileTab = $("#searchFileTab");
        }
        return this._fileTab;
    }, //$FileTab
    $ContactTab: function() {
        if (!this._contactTab) {
            this._contactTab = $("#searchContactTab");
        }
        return this._contactTab;
    }, //$ContactTab

    $ProjectResults: function() {
        if (!this._projectResults) {
            this._projectResults = $("#searchProjectResults");
        }
        return this._projectResults;
    }, //$ProjectResults
    $FileResults: function() {
        if (!this._fileResults) {
            this._fileResults = $("#searchFileResults");
        }
        return this._fileResults;
    }, //$FileResults
    $ContactResults: function() {
        if (!this._contactResults) {
            this._contactResults = $("#searchContactResults");
        }
        return this._contactResults;
    }, //$ContactResults

    clickProjects: function() { 
        Search.$FileResults().hide();
        Search.$ContactResults().hide();
        Search.$ProjectResults().show();
        
        Search.$FileTab().removeClass("searchTabSelected").addClass("searchTab").find("a").css("color","black");
        Search.$ContactTab().removeClass("searchTabSelected").addClass("searchTab").find("a").css("color","black");
        Search.$ProjectTab().removeClass("searchTab").addClass("searchTabSelected").find("a").css("color","white");
        
        $("#searchPageProjectSorting").show();
        $("#searchPageFileSorting").hide();
        $("#searchPageContactSorting").hide();
        
        $("#searchPageWrapper").height(200 + $("#searchProjectResults").height());
        
        $("#searchPageSelectedTab").val("project");
    }, //clickProjects
    
    clickFiles: function() { 
        Search.$ContactResults().hide();
        Search.$ProjectResults().hide();
        Search.$FileResults().show();
    
        Search.$ContactTab().removeClass("searchTabSelected").addClass("searchTab").find("a").css("color","black");
        Search.$ProjectTab().removeClass("searchTabSelected").addClass("searchTab").find("a").css("color","black");
        Search.$FileTab().removeClass("searchTab").addClass("searchTabSelected").find("a").css("color","white");
        
        $("#searchPageProjectSorting").hide();
        $("#searchPageFileSorting").show();
        $("#searchPageContactSorting").hide();
        
        $("#searchPageWrapper").height(200 + $("#searchFileResults").height());
        
        $("#searchPageSelectedTab").val("file");
    }, //clickFiles
    
    clickContacts: function() { 
        Search.$FileResults().hide();
        Search.$ProjectResults().hide();
        Search.$ContactResults().show();
    
        Search.$FileTab().removeClass("searchTabSelected").addClass("searchTab").find("a").css("color","black");
        Search.$ProjectTab().removeClass("searchTabSelected").addClass("searchTab").find("a").css("color","black");
        Search.$ContactTab().removeClass("searchTab").addClass("searchTabSelected").find("a").css("color","white");
        
        $("#searchPageProjectSorting").hide();
        $("#searchPageFileSorting").hide();
        $("#searchPageContactSorting").show();
        
        $("#searchPageWrapper").height(200 + $("#searchContactResults").height());
        
        $("#searchPageSelectedTab").val("contact");
    }, //clickContacts
   
    init: function() {
        $(".hiliteable").live("click", function() {
            var id = $(this).attr("id");
            var context = id.substr(0, 1);
            var idNum = id.substr(1);
            var name = $("#" + id + "_name").text();
            
            $("div.hiliteRow").removeClass("hiliteRow");
            $(this).addClass("hiliteRow");
        
            s.setter(context,idNum,name);
            
            evalToolbar();
        });
        $(".moreMenuButton").live("click", function() {
            var $parent = $(this).parents(".hiliteable")
            $parent.click();
            ConstructionOnline.master_page.processMoreButtonClick($(this), $parent.attr("id").substr(0,1));
            return false;
        });
        $(".hiliteable.album a").live("click", function() {
            var $parent = $(this).parents(".hiliteable")
            window.location = "/Gallery3.aspx?HID=" + $parent.attr("id").substr(1);
            return false;
        });
        $(".hiliteable.folder a").live("click", function() {
            var $parent = $(this).parents(".hiliteable")
            window.location = "/File3.aspx?find=H" + $parent.attr("id").substr(1) + "#H" + $parent.attr("id").substr(1);
            return false;
        });
        $(".hiliteable.file a").live("click", function() {
            var $parent = $(this).parents(".hiliteable")
            $parent.find(".moreMenuButton").click();
            return false;
        });
        switch($("#searchPageSelectedTab").val()) {
        case "contact":
            Search.clickContacts();
            break;
            
        case "file":
            Search.clickFiles();
            break;
            
        default:
            Search.clickProjects();
        }
        
        
    }, //bindHiliteable
    
    ToggleComments: function(id) {
//        var $comments = $("#" + id + "_comments");
//        var $label = $("#" + id + "_commentsLabel");
//        if ($label.text() == "Hide Comments") {
//            $comments.hide();
//            if ($label.attr("numComments") == 0) {
//                $label.text("Add Comment");
//            } else {
//                $label.text("View Comments(" + $label.attr("numComments") + ")");
//            }
//        } else {
//            $label.text("Hide Comments");
//        }
    } //ToggleComments
};
