
/** 
 * Crimsonlive javascript file, implemented as a dynamic file so that we can create 
 * URLs dynamically for both development and production environments. 
 */

// Create javascript 'namespaces'
var crimsonlive; 
crimsonlive = {}; 
crimsonlive.album = {} 
crimsonlive.album.photo = {} 
crimsonlive.blog = {} 
crimsonlive.core = {} 
crimsonlive.core.imagepicker = {} 
crimsonlive.core.tag = {} 
crimsonlive.core.tagcloud = {} 
crimsonlive.my = {} 
crimsonlive.my.home = {} 
crimsonlive.my.alerts = {} 
crimsonlive.my.calendar = {} 
crimsonlive.my.interests = {}
crimsonlive.my.site = {} 
crimsonlive.my.site.comment = {} 
crimsonlive.search = {} 
crimsonlive.ui = {} 


/* ***************************************************************************
 * Image picker functions 
 * ***************************************************************************/
crimsonlive.core.imagepicker.imgUrl = function(bid) { 
    return '/images/cache/' + bid + '_h240_w320.jpg'
} 
crimsonlive.core.imagepicker.populateAlbums = function(imagePicker) { 
    dojo.io.bind({
        url: '/ajax/album/GetImagePickerAlbums.aspx?Eid=' + imagePicker.eid + '&t=' + Math.random(),
        load: function(type, data, evt){ 
            imagePicker.albums.innerHTML = data;
            imagePicker.doToggle();
        },
        error: function(type, error){ 
            // alert(error.message);
            imagePicker.albums.innerHTML = "We're sorry, we encountered an error"; 
            imagePicker.doToggle();
        },
        mimetype: "text/html"
    });
} 
crimsonlive.core.imagepicker.loadAlbumPhotos = function(imagePicker, cid) { 
    // Load the photos for this album 
    dojo.io.bind({
        url: '/ajax/album/photo/GetImagePickerPhotos.aspx?Cid=' + cid + '&t=' + Math.random(),
        load: function(type, data, evt){ 
            imagePicker.photos.innerHTML = data;
            dojo.fx.html.wipeIn(imagePicker.photosContainer, 250, null, false); 
        },
        error: function(type, error){ 
            // alert(error.message);
            imagePicker.photos.innerHTML = "We're sorry, we encountered an error"; 
        },
        mimetype: "text/html"
    });
} 

/* ***************************************************************************
 * User tagging functions 
 * ***************************************************************************/
// Global element caching variables 
var _divTaggableUsers = new Array();   // Cache of taggable user divs 
var _divTaggedUsers = new Array();     // Cache of tagged user divs 

// UI functions
crimsonlive.core.tag.id =                      function(id) { return id.substring(0, id.indexOf('.')); }
crimsonlive.core.tag.guid =                    function(id) { return id.substring(id.lastIndexOf("_") + 1); } 
crimsonlive.core.tag.tagees_add_link =         function(id) { return dojo.byId(id + '.userTagger_tagees_add_link'); } 
crimsonlive.core.tag.taggables =               function(id) { return dojo.byId(id + '.userTagger_taggables'); } 
crimsonlive.core.tag.taggables_filter =        function(id) { return dojo.byId(id + '.userTagger_taggables_filter'); } 
crimsonlive.core.tag.taggables_users =         function(id) { return dojo.byId(id + '.userTagger_taggables_users'); } 
crimsonlive.core.tag.taggables_user =          function(id, guid) { return _divTaggableUsers[id][guid]; } 
crimsonlive.core.tag.tagees =                  function(id) { return dojo.byId(id + '.userTagger_tagees'); }
crimsonlive.core.tag.tagees_none =             function(id) { return dojo.byId(id + '.userTagger_tagees_none'); }
crimsonlive.core.tag.tagees_add =              function(id) { return dojo.byId(id + '.userTagger_tagees_add'); }
crimsonlive.core.tag.tagees_user =             function(id, guid) { if (null == _divTaggedUsers[id]) _divTaggedUsers[id] = new Array(); return _divTaggedUsers[id][guid]; }
crimsonlive.core.tag.tagees_user_remove_link = function(id, guid) { return dojo.byId(id + '.userTagger_tagees_user_remove_link_' + guid); }

// Logic functions 
crimsonlive.core.tag.showTaggables = function(id) { 
    dojo.fx.html.explode(crimsonlive.core.tag.tagees_add_link(id), 
                         crimsonlive.core.tag.taggables(id), 
                         250, 
                         function() { 
                            crimsonlive.core.tag.taggables_filter(id).focus(); 
                         }, 
                         false); 

    crimsonlive.core.tag.populateUsers(id); 
    crimsonlive.core.tag.filterUsers(id); 
} 

crimsonlive.core.tag.hideTaggables = function(id) { 
    if ('none' != crimsonlive.core.tag.taggables(id).style.display) { 
        dojo.fx.html.implode(crimsonlive.core.tag.taggables(id), 
                             crimsonlive.core.tag.tagees_add_link(id), 
                             250, 
                             function() { 
                                 crimsonlive.core.tag.taggables_filter(id).value = ''; 
                             }, 
                             false); 
    }
} 

crimsonlive.core.tag.populateUsers = function(id) { 
    var divUsers = crimsonlive.core.tag.taggables_users(id); 
    if ('' == divUsers.innerHTML) {  
        _divTaggableUsers[id] = new Array(); 
        
        // Loop through users array and create checkbox selectors 
        for (var guid in _users) { 
            var name = _users[guid]; 

            // Create taggable entry 
            var divUser = document.createElement("div"); 
            divUser.id = id + '.userTagger_taggables_users_user_' + guid;
            divUser.innerHTML = 
                "<input type='checkbox' id='" + id + ".chkTag_" + guid + "'>"
                + "<label for='" + id + ".chkTag_" + guid + "'>" + name + "</label><br>";

            // Hide if this user is already tagged 
            if (null != crimsonlive.core.tag.tagees_user(id, guid)) { 
                divUser.className = "invisible"; 
            } 

            // Attach node and connect event handlers 
            divUsers.appendChild(divUser); 
            dojo.event.connect(dojo.byId(id + '.chkTag_' + guid), 'onclick', crimsonlive.core.tag, 'chkTag_OnClick'); 

            // Cache the user div so we don't have to look it up later 
            //  via dojo.byId (extremely slow as the # of users increases) 
            _divTaggableUsers[id][guid] = divUser; 
        } 
    } 
} 

crimsonlive.core.tag.filterUsers = function(id) { 
    var filterValue = crimsonlive.core.tag.taggables_filter(id).value.toLowerCase(); 
    if ('' == filterValue) filterValue = null; 

    // Loop through users array and show/hide appropriately 
    for (var guid in _users) { 
        var divUser = crimsonlive.core.tag.taggables_user(id, guid); 
        
        // Hide if this user's name does not match the filter 
        if (filterValue != null 
                && -1 == _users[guid].toLowerCase().indexOf(filterValue)) { 
            divUser.className = "invisible"; 
        }
        // Hide if this user is already tagged 
        else if (null != crimsonlive.core.tag.tagees_user(id, guid)) { 
            divUser.className = "invisible"; 
        } 
        else { 
            divUser.className = "visible"; 
        }
    } 
} 

crimsonlive.core.tag.tag = function(id, guid, removable) { 
    removable = (undefined == removable) ? true : removable; 
    
    if (null == _divTaggedUsers[id]) _divTaggedUsers[id] = new Array(); 
    
    // Create tagged div entry 
    var divUser = document.createElement("div"); 
    divUser.id = id + ".userTagger_tagees_user_" + guid; 
    divUser.className = 'invisible';
    if (_users[guid] != null) {
		var html = 
			_users[guid] 
			+ ' <input type="hidden" name="' + id + '.UserTags" value="' + guid + ':' + _users[guid] + '">'; 

        if (true == removable) { 
            html = html 
    			+ " <a href='#' id='" + id + ".userTagger_tagees_user_remove_link_" + guid + "' onclick='return false;'>remove</a>" 
        } 
        
        divUser.innerHTML = html; 
        
        // Cache the user div so we don't have to look it up later 
        //  via dojo.byId (slow in IE) 
        _divTaggedUsers[id][guid] = divUser; 
	}
    
    // Add user to the tagees list 
    crimsonlive.core.tag.tagees(id).insertBefore(divUser, crimsonlive.core.tag.tagees_add(id)); 
    if (_users[guid] != null
        && true == removable) {
      dojo.event.connect(crimsonlive.core.tag.tagees_user_remove_link(id, guid), 'onclick', crimsonlive.core.tag, 'linkRemove_OnClick'); 
    } 
    dojo.fx.html.wipeIn(divUser, 250, null, false); 

    //  Uncheck the tag checkbox 
    var chkTag = dojo.byId(id + ".chkTag_" + guid); 
    if (chkTag != null) chkTag.checked = false; 
    
    // Hide the no users div 
    var divNoUsers = crimsonlive.core.tag.tagees_none(id);
    if ('none' != divNoUsers.style.display) { 
        dojo.fx.html.wipeOut(divNoUsers, 250, null, false); 
    }
} 

crimsonlive.core.tag.untag = function(id, guid) { 
    // Remove taggee div 
    var divUser = crimsonlive.core.tag.tagees_user(id, guid);
    dojo.fx.html.wipeOut(divUser, 
                         250, 
                         function() { 
                            crimsonlive.core.tag.tagees(id).removeChild(divUser); 
                            _divTaggedUsers[id][guid] = null; 
                            // Show the no users div if we have no tagees 
                            if (2 == crimsonlive.core.tag.tagees(id).childNodes.length) { 
                                dojo.fx.html.wipeIn(crimsonlive.core.tag.tagees_none(id), 250, null, false); 
                            }
                         }, 
                         false); 

    // Hide taggables 
    crimsonlive.core.tag.hideTaggables(id); 
} 


// Event handling functions 
crimsonlive.core.tag.linkAdd_OnClick = function(evt) { 
    crimsonlive.core.tag.showTaggables(crimsonlive.core.tag.id(evt.target.id)); 
} 

crimsonlive.core.tag.linkRemove_OnClick = function(evt) { 
    crimsonlive.core.tag.untag(crimsonlive.core.tag.id(evt.target.id), crimsonlive.core.tag.guid(evt.target.id)); 
} 

crimsonlive.core.tag.txtFilter_OnChange = function(evt) { 
    var id = crimsonlive.core.tag.id(evt.target.id); 
    if ("27" == evt.keyCode) { 
        // Esc key pressed, hide taggables 
        crimsonlive.core.tag.hideTaggables(id); 
    } 
    else if ("13" == evt.keyCode) { 
        // Enter key pressed, see if we can tag a single user 
        var divUsers = crimsonlive.core.tag.taggables_users(id); 
        var matchCount = 0; 
        var matchUser = null; 
        for (var i = 0; i < divUsers.childNodes.length; i++) { 
            var divUser = divUsers.childNodes[i]; 
            if ('invisible' != divUser.className) { 
                matchUser = divUser; 
                matchCount += 1; 
            } 
        } 
        if (1 == matchCount) { 
            crimsonlive.core.tag.tag(id, crimsonlive.core.tag.guid(matchUser.id)); 
            crimsonlive.core.tag.hideTaggables(id); 
        }
    } 
    else { 
        // We are filtering the list 
        crimsonlive.core.tag.filterUsers(id); 
    } 
} 

crimsonlive.core.tag.chkTag_OnClick = function(evt) { 
    var id = crimsonlive.core.tag.id(evt.target.id); 
    crimsonlive.core.tag.tag(id, crimsonlive.core.tag.guid(evt.target.id)); 
    
    // Hide taggables 
    crimsonlive.core.tag.hideTaggables(id); 
} 

crimsonlive.core.tag.btnCancel_OnClick = function(evt) { 
    crimsonlive.core.tag.hideTaggables(crimsonlive.core.tag.id(evt.target.id)); 
} 


/* ****************************************************************************
 * Tagcloud functions 
 * ****************************************************************************/
crimsonlive.core.tagcloud.MAX_DISPLAY_COUNT = 5;        // Maximum number of tags to display in the cloud 
crimsonlive.core.tagcloud.MIN_LEVEL_DISPLAY_COUNT = 1;  // Minimum number of tags to display for a single level 
        
crimsonlive.core.tagcloud.filterTags = function(evt) { 
    dojo.require("dojo.collections.ArrayList");
    var filterValue = (evt != null) ? evt.target.value.toLowerCase() : dojo.byId('txtTagFilter').value.toLowerCase();
    if ('' == filterValue || 'type to filter tags' == filterValue) filterValue = null; 

    // Loop through each tag and see if it matches the filter string 
    var matchesByLevel = new Array(); 
    var matchCount = 0;

    for (var tag in _tags) { 
        var tagDiv = _tags[tag]; 
        if (filterValue != null 
            && 0 != tag.indexOf(filterValue)) { 
            // No match, hide this tag 
            tagDiv.style.display = 'none'; 
        } 
        else { 
            if (null == matchesByLevel[tagDiv.className]) matchesByLevel[tagDiv.className] = new dojo.collections.ArrayList(new Array()); 
            matchesByLevel[tagDiv.className].add(tagDiv); 
            matchCount += 1; 
        } 
    } 

    // Trim down the list of displayed tags if there are more than what 
    //  we want to display: remove the least significant tags at random, 
    //  but maintain at least the minimum number of level tags so that 
    //  there's at least some tags at all levels for visual differentiation 
    var level = 1; 
    while (matchCount > crimsonlive.core.tagcloud.MAX_DISPLAY_COUNT) { 
        var levelMatches = matchesByLevel['level'+level]; 
        if (null == levelMatches
            || crimsonlive.core.tagcloud.MIN_LEVEL_DISPLAY_COUNT >= levelMatches.count) { 
            level += 1; 
        } 
        else { 
            // Remove one element at random 
            var removee = null; 
            while (null == removee) { 
                var candidate = levelMatches.item(Math.floor(levelMatches.count * Math.random())); 
                if (null == filterValue 
                    && candidate == _tags[_currentTag]) { 
                    // This is the currently selected tag and we're not 
                    //  filtering, don't remove it 
                    continue; 
                } 
                removee = candidate; 
            } 

            removee.style.display = 'none'; 
            levelMatches.remove(removee); 
            matchCount -= 1; 
        } 
    } 

    if (0 == matchCount) { 
        dojo.byId('notags').innerHTML = 'There are no tags starting with <b>' + filterValue + '</b>'; 
    } 
    else { 
        dojo.byId('notags').innerHTML = '';
        // Make all remaining matches visible 
        for (var level in matchesByLevel) { 
            var list = matchesByLevel[level]; 
            for (var i=list.count-1; i>=0; i--) { 
                list.item(i).style.display = 'inline';
            } 
        } 
    }
} 


/* ****************************************************************************
 * My Home functions 
 * ****************************************************************************/ 
// Show/hide site teasers on the /my/home page 
crimsonlive.my.home.toggleTeaser = function(link) { 
    // Retrieve the id of the div to toggle 
    var eid = link.id.substring(link.id.indexOf("-") + 1);

    var div = document.getElementById(eid); 
    var img = document.getElementById('img-' + eid); 
    if ("content siteteaser invisible" == div.className) { 
        if (-1 == div.innerHTML.indexOf('<')) { 
            dojo.io.bind({
                url: '/ajax/blog/GetRecentBlogEntries.aspx?Eid=' + eid + '&t=' + Math.random(),
                load: function(type, data, evt){ 
                    div.innerHTML = data;
                    dojo.fx.html.wipeIn(div, 250, null, false); 
                },
                error: function(type, error){ 
                    // alert(error.message);
                    div.innerHTML = "Could not load data: " + error; 
                },
                mimetype: "text/html"
            });
        } 
        else { 
            dojo.fx.html.wipeIn(div, 250, null, false); 
        }
        
        div.className = "content siteteaser visible";
        img.src = '/images/btn_hide.gif'; 
        img.alt = 'Hide'; 
    } 
    else { 
        div.className = "content siteteaser invisible";
        img.src = '/images/btn_show.gif'; 
        img.alt = 'Show';
        dojo.fx.html.wipeOut(div, 250, null, false); 
    }
} 

crimsonlive.my.home.preload = function(eid) { 
    var div = document.getElementById(eid); 
    dojo.io.bind({
        url: '/ajax/blog/GetRecentBlogEntries.aspx?Eid=' + eid + '&t=' + Math.random(), 
        load: function(type, data, evt){ 
            div.innerHTML = data;
        },
        error: function(type, error){ 
            // alert(error.message);
            div.innerHTML = "Could not load data: " + error.message; 
        },
        mimetype: "text/html"
    });
} 

/* ****************************************************************************
 * My Facebook Home functions 
 * ****************************************************************************/ 
// Show/hide site teasers on the /my/home page 
crimsonlive.my.home.toggleTeaserFacebook = function(link) { 
    // Retrieve the id of the div to toggle 
    var eid = link.id.substring(link.id.indexOf("-") + 1);

    var div = document.getElementById(eid); 
    var img = document.getElementById('img-' + eid); 
    if ("content siteteaser invisible" == div.className) { 
        if (-1 == div.innerHTML.indexOf('<')) { 
            dojo.io.bind({
                url: '/ajax/blog/FacebookGetRecentBlogEntries.aspx?Eid=' + eid + '&t=' + Math.random(),
                load: function(type, data, evt){ 
                    div.innerHTML = data;
                    dojo.fx.html.wipeIn(div, 250, null, false); 
                },
                error: function(type, error){ 
                    // alert(error.message);
                    div.innerHTML = "Could not load data: " + error; 
                },
                mimetype: "text/html"
            });
        } 
        else { 
            dojo.fx.html.wipeIn(div, 250, null, false); 
        }
        
        div.className = "content siteteaser visible";
        img.src = '/images/btn_hide.gif'; 
        img.alt = 'Hide'; 
    } 
    else { 
        div.className = "content siteteaser invisible";
        img.src = '/images/btn_show.gif'; 
        img.alt = 'Show';
        dojo.fx.html.wipeOut(div, 250, null, false); 
    }
} 

crimsonlive.my.home.Facebookpreload = function(eid) { 
    var div = document.getElementById(eid); 
    dojo.io.bind({
        url: '/ajax/blog/FacebookGetRecentBlogEntries.aspx?Eid=' + eid + '&t=' + Math.random(), 
        load: function(type, data, evt){ 
            div.innerHTML = data;
        },
        error: function(type, error){ 
            // alert(error.message);
            div.innerHTML = "Could not load data: " + error.message; 
        },
        mimetype: "text/html"
    });
} 


/* ***************************************************************************
 * My Alerts functions 
 * ***************************************************************************/

crimsonlive.my.alerts.linkMoreInfo_OnClick = function(evt) { 
    // Retrieve the id of the div to toggle 
    var id = evt.target.id.substring(evt.target.id.indexOf('-') + 1);; 

    var div = document.getElementById(id); 
    var img = document.getElementById('img-' + id); 
    if ("none" == div.style.display) { 
        dojo.fx.html.wipeIn(div, 250, null, false); 
        img.src = '/images/btn_hideinfo.gif'; 
        img.alt = 'hide info'; 
    }
    else { 
        dojo.fx.html.wipeOut(div, 250, null, false); 
        img.src = '/images/btn_moreinfo.gif'; 
        img.alt = 'more info'; 
    }
} 


/* ***************************************************************************
 * My Album functions 
 * ***************************************************************************/
crimsonlive.album.photo.linkDelete_OnClick = function(evt) { 
    var iid = evt.target.id.substring(evt.target.id.indexOf('-') + 1); 
    var div = dojo.byId(iid);

    dojo.io.bind({ 
        url: '/ajax/album/photo/Delete.aspx?Iid=' + iid + '&t=' + Math.random(),
        load: function(type, data, evt) { 
            // Wipe out this event from the browser 
            dojo.fx.html.wipeOut(div, 250, null, false); 
        }, 
        error: function(type, error) { 
            alert('sorry, we encountered an error, please try again later'); 
        },
        mimetype: "text/html"
    }); 

    return false;     
} 


/* ***************************************************************************
 * Blog functions 
 * ***************************************************************************/
crimsonlive.blog.linkToggleFullPost_OnClick = function(evt) { 
    var iid = evt.target.id.substring(22);
    var fullpost = crimsonlive.blog.getFullPost(iid); 

    if (fullpost != null) { 
        if ('none' == dojo.style.getComputedStyle(fullpost, 'display')) { 
            dojo.fx.html.wipeIn(fullpost, 250, null, false); 
            // fullpost.style.display = 'block';
            evt.target.innerHTML = 'contract post &raquo;';
        } 
        else { 
            dojo.fx.html.wipeOut(fullpost, 250, null, false); 
            // fullpost.style.display = 'none';
            evt.target.innerHTML = 'expand post &raquo;';
        } 
    } 
    
    return false; 
} 

crimsonlive.blog.initToggleFullPostLink = function(link) { 
    var iid = link.id.substring(22);
    if (null != crimsonlive.blog.getFullPost(iid)) { 
        link.style.display = 'inline';
    }
} 

crimsonlive.blog.getFullPost = function(iid) { 
    var postbody = dojo.byId('postbody-' + iid); 
    if (postbody != null) { 
        for (var i=0; i < postbody.childNodes.length; i++) {
            var childNode = postbody.childNodes[i];
            if ('fullpost' == childNode.className) { 
                return childNode; 
            } 
        }
    } 
    return null;
} 


/* ****************************************************************************
 * My Calendar functions 
 * ****************************************************************************/ 
crimsonlive.my.calendar.deleteEvent = function(link) { 
    
    if(confirm("This will delete all occurence(s) of this event") == false)
	{				
			return false;
	}
				
    // Get the event div 
    var iid = link.id.substring(link.id.indexOf("-") + 1);
    var div = dojo.byId('item-' + iid);
    
    dojo.io.bind({ 
        url: '/ajax/calendar/calendarevent/Delete.aspx?Iid=' + iid + '&t=' + Math.random(),
        load: function(type, data, evt) { 
        
          var DELDIV;
           DELDIV =getElementsByAttribute("div","id",'item-'+iid);
           if (typeof DELDIV!="undefined")
           {
				for(i=0;i<DELDIV.length;i++) //></ReminderTag.length>
				{
				div=DELDIV[i];
            // Wipe out this event from the browser 
            dojo.fx.html.wipeOut(div, 250, null, false); 

            // If this event is the first of the day, find the next event and make it the first 
            if (div.className.indexOf("first") > -1) { 
                // Get the next sibling item 
                for (var node = div.nextSibling; node != null; node = node.nextSibling) { 
                    if (node.id != null 
                        && node.id.indexOf('item-') > -1) { 
                        // We have found the next event, add 'first' to its classname 
                        node.className += ' first'; 
                        break; 
                    }                
                }
            } 
				}
			}
            else
            {
            
            // Wipe out this event from the browser 
            dojo.fx.html.wipeOut(div, 250, null, false); 

            // If this event is the first of the day, find the next event and make it the first 
            if (div.className.indexOf("first") > -1) { 
                // Get the next sibling item 
                for (var node = div.nextSibling; node != null; node = node.nextSibling) { 
                    if (node.id != null 
                        && node.id.indexOf('item-') > -1) { 
                        // We have found the next event, add 'first' to its classname 
                        node.className += ' first'; 
                        break; 
                    }                
                }
            } 
            
           } 
        }, 
        error: function(type, error) { 
            alert('sorry, we encountered an error, please try again later'); 
        },
        mimetype: "text/html"
    }); 

    return false;     
} 

crimsonlive.my.calendar.hideEvent = function(link) { 
    // Get the event div 
    var iid = link.id.substring(link.id.indexOf("-") + 1);
    var div = dojo.byId('item-' + iid);
    
    dojo.io.bind({ 
        url: '/ajax/calendar/calendarevent/Hide.aspx?Iid=' + iid + '&t=' + Math.random(),
        load: function(type, data, evt) { 
            // Wipe out this event from the browser 
            dojo.fx.html.wipeOut(div, 250, null, false); 

            // If this event is the first of the day, find the next event and make it the first 
            if (div.className.indexOf("first") > -1) { 
                // Get the next sibling item 
                for (var node = div.nextSibling; node != null; node = node.nextSibling) { 
                    if (node.id != null 
                        && node.id.indexOf('item-') > -1) { 
                        // We have found the next event, add 'first' to its classname 
                        node.className += ' first'; 
                        break; 
                    }                
                }
            } 
        }, 
        error: function(type, error) { 
            alert('sorry, we encountered an error, please try again later'); 
        },
        mimetype: "text/html"
    }); 

    return false;     
} 

crimsonlive.my.calendar.toggleEventReminder = function(link) { 
				
		if("on" == link.className)
		{
			if(confirm("This will cancel reminder(s) for all occurence(s) of this event") == false)
			{				
					return false;
			}
		}	
    // Retrieve the id of the div to toggle 
    var iid = link.id.substring(link.id.indexOf("-") + 1);
    
    var targetColor = ("on" == link.className) ? [255,255,255] : [255,255,153]; 
    var imgSrc = ("on" == link.className) ? '/images/btn_setreminder.gif' : '/images/btn_unsetreminder.gif';

    dojo.io.bind({ 
        url: '/ajax/calendar/calendarevent/ToggleReminder.aspx?Iid=' + iid + '&t=' + Math.random(), 
        load: function(type, data, evt) { 
			var ReminderDIV,ReminderImg,Reminderahr;
			ReminderDIV =getElementsByAttribute("div","id",'item-'+iid);
			Reminderahr =getElementsByAttribute("a","id", 'remind-'+iid);
			ReminderImg =getElementsByAttribute("img","id", 'img-reminder-' + iid);
			if (typeof ReminderDIV!="undefined")
			{
				for(i=0;i<ReminderDIV.length;i++) //></ReminderTag.length>
				{
				dojo.graphics.htmlEffects.colorFadeTo(ReminderDIV[i], targetColor, 500, 0);
				Reminderahr[i].className = ("on" == Reminderahr[i].className) ? "off" : "on"; 
				ReminderImg[i].src = imgSrc;
				ReminderImg[i].title = ("on" == Reminderahr[i].className) ? "cancel reminder" : "add reminder";
				}	
			}
				else		
				{
            dojo.graphics.htmlEffects.colorFadeTo(dojo.byId('item-' + iid), targetColor, 500, 0);
            link.className = ("on" == link.className) ? "off" : "on"; 

            var img = dojo.byId('img-reminder-' + iid);
            img.src = imgSrc;
            img.title = ("on" == link.className) ? "cancel reminder" : "add reminder";
				}
        }, 
        error: function(type, error) { 
            alert('sorry, we encountered an error, please try again later'); 
        },
        mimetype: "text/html"
    }); 

	
    return false; 
} 

/* ****************************************************************************
 * My Interests functions 
 * ****************************************************************************/ 
// Show/hide site teasers on the /my/home page 
crimsonlive.my.interests.toggleTeaser = function(link) { 
    // Retrieve the id of the div to toggle 
    var feedid = link.id.substring(link.id.indexOf("-") + 1);

    var div = document.getElementById(feedid); 
    var img = document.getElementById('img-' + feedid); 
    if ("content siteteaser invisible" == div.className) { 
		if (-1 == div.innerHTML.indexOf('<')) { 
            dojo.io.bind({
                url: '/ajax/feed/GetLatestPosts.aspx?FeedId=' + feedid + '&t=' + Math.random(), 
                load: function(type, data, evt){ 
                    div.innerHTML = data;
                    dojo.fx.html.wipeIn(div, 250, null, false); 
                },
                error: function(type, error){ 
                    // alert(error.message);
                    div.innerHTML = "Could not load data: " + error; 
                },
                mimetype: "text/html"
            });
        } 
        else {
			dojo.fx.html.wipeIn(div, 250, null, false); 
		}
        div.className = "content siteteaser visible";
        img.src = '/images/btn_hide.gif'; 
        img.alt = 'Hide';
    } 
    else { 
		dojo.fx.html.wipeOut(div, 250, null, false); 
        div.className = "content siteteaser invisible";
        img.alt = 'Show';
        img.src = '/images/btn_show.gif'; 
    }
}

crimsonlive.my.interests.preload = function(feedid) { 
    var div = document.getElementById(feedid); 
    dojo.io.bind({
        url: '/ajax/feed/GetLatestPosts.aspx?FeedId=' + feedid + '&t=' + Math.random(), 
        load: function(type, data, evt){ 
            div.innerHTML = data;
        },
        error: function(type, error){ 
            // alert(error.message);
            div.innerHTML = "Could not load data: " + error.message; 
        },
        mimetype: "text/html"
    });
} 


/* ****************************************************************************
 * Site management functions 
 * ****************************************************************************/ 
// Show display div on custom banner upload page 
crimsonlive.my.site.showBanner = function(evt) { 
    dojo.fx.html.wipeOut(dojo.byId('divUpload'), 250, null, false); 
    dojo.fx.html.wipeIn(dojo.byId('divDisplay'), 250, null, false);     
} 

// Show upload div on custom banner upload page 
crimsonlive.my.site.showUpload = function(evt) { 
    dojo.fx.html.wipeOut(dojo.byId('divDisplay'), 250, null, false); 
    dojo.fx.html.wipeIn(dojo.byId('divUpload'), 250, null, false);   
	dojo.fx.html.wipeOut(parent.document.getElementById('CustomBannerImageMap'), 1 , null, false);
} 

// Show/hide comment body on manage comments page 
crimsonlive.my.site.comment.toggleContent = function(link) { 
    // Retrieve the id of the div to show/hide
    var iid = link.id.substring(link.id.indexOf("-") + 1);

    var div = dojo.byId('div-' + iid); 
    var img = dojo.byId('img-' + iid); 
    if (div.className.indexOf('invisible') > -1) { 
        dojo.fx.html.wipeIn(div, 250, null, false); 
        div.className = div.className.replace('invisible', 'visible');
        img.src = '/images/btn_hide.gif'; 
    } 
    else { 
        div.className = div.className.replace('visible', 'invisible'); 
        img.src = '/images/btn_show.gif'; 
        dojo.fx.html.wipeOut(div, 250, null, false); 
    }
} 


/* ***************************************************************************
 * Search functions 
 * ***************************************************************************/
crimsonlive.search.submitSearch = function(form, siteEid) { 
    if ("True" == "False") { 
        form.action = '/my/search/Results.aspx'; 
    }
    else { 
        form.action = '/search/Results.aspx'; 
    } 
    
    if (siteEid != null
        && siteEid != '') { 
        form.action += '?Eid=' + siteEid; 
    }
} 


/* ***************************************************************************
 * UI functions 
 * ***************************************************************************/
crimsonlive.ui.yellowFade = function(node) { 
    node = dojo.byId(node); 
    if (node != null) { 
      dojo.graphics.htmlEffects.highlight(node, [255, 255, 156], 3000, 0);
    }
} 



function getElementsByAttribute( strTagName, strAttributeName, strAttributeValue){
    var arrElements = document.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    var oAttributeValue = (typeof strAttributeValue != "undefined")? new RegExp("(^|\\s)" + strAttributeValue + "(\\s|$)") : null;
    var oCurrent;
    var oAttribute;
    for(var i=0; i<arrElements.length; i++){
        oCurrent = arrElements[i];
        oAttribute = oCurrent.getAttribute(strAttributeName);
        if(typeof oAttribute == "string" && oAttribute.length > 0){
            if(typeof strAttributeValue == "undefined" || (oAttributeValue && oAttributeValue.test(oAttribute))){
                arrReturnElements.push(oCurrent);
            }
        }
    }
    return arrReturnElements;
}





