﻿//v1.0
//Copyright 2006 Adobe Systems, Inc. All rights reserved.
function AC_AddExtension(src, ext)
{
  if (src.indexOf('?') != -1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs) 
{ 
  var str = '<object ';
  for (var i in objAttrs)
    str += i + '="' + objAttrs[i] + '" ';
  str += '>';
  for (var i in params)
    str += '<param name="' + i + '" value="' + params[i] + '" /> ';
  str += '<embed ';
  for (var i in embedAttrs)
    str += i + '="' + embedAttrs[i] + '" ';
  str += ' ></embed></object>';

  document.write(str);
}

function AC_FL_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_SW_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"
     , null
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  for (var i=0; i < args.length; i=i+2){
    var currArg = args[i].toLowerCase();    

    switch (currArg){	
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] = args[i+1];
        break;
      case "src":
      case "movie":	
        args[i+1] = AC_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] = args[i+1];
        ret.params[srcParamName] = args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblClick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
        ret.objAttrs[args[i]] = args[i+1];
        break;
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "id":
      case "tabindex":
        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
        break;
      default:
        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}

function json2string(strObject) {
 var c, i, l, s = '', v, p; 

 switch (typeof strObject) {
 case 'object':
  if (strObject) {
   if (strObject.length && typeof strObject.length == 'number') {
    for (i = 0; i < strObject.length; ++i) {
     v = json2string(strObject[i]);
     if (s) {
      s += ',';
     }
     s += v;
    }
    return '[' + s + ']';
   } else if (typeof strObject.toString != 'undefined') {
    for (i in strObject) {
     v = strObject[i];
     if (typeof v != 'undefined' && typeof v != 'function') {
      v = json2string(v);
      if (s) {
       s += ',';
      }
      s += json2string(i) + ':' + v;
     }
    }
    return '{' + s + '}';
   }
  }
  return 'null';
 case 'number':
  return isFinite(strObject) ? String(strObject) : 'null';
 case 'string':
  l = strObject.length;
  s = '"';
  for (i = 0; i < l; i += 1) {
   c = strObject.charAt(i);
   if (c >= ' ') {
    if (c == '\\' || c == '"') {
     s += '\\';
    }
    s += c;
   } else {
    switch (c) {
     case '\b':
      s += '\\b';
      break;
     case '\f':
      s += '\\f';
      break;
     case '\n':
      s += '\\n';
      break;
     case '\r':
      s += '\\r';
      break;
     case '\t':
      s += '\\t';
      break;
     default:
      c = c.charCodeAt();
      s += '\\u00' + Math.floor(c / 16).toString(16) +
       (c % 16).toString(16);
    }
   }
  }
  return s + '"';
 case 'boolean':
  return String(strObject);
 default:
  return 'null';
 }
}

function sendAJAX(cmd, data, cb) {
    $.ajax({
        type: "POST",
        url: "/SocialService.svc/" + cmd,
        data: json2string(data),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: cb,
        error : function () { alert("error"); }
    });
}

function setRating(itemId, itemKey, value, cb) {
    if (ensureLogin()) {
        data = { "itemId" : itemId, "itemKey" : itemKey, "value" : value };
        sendAJAX("setRating", data, cb);
    }
}
function getRating(itemId, itemKey, cb) {
    data = { "itemId" : itemId, "itemKey" : itemKey };
    sendAJAX("getRating", data, cb);
}
function setFavorite(itemId, itemKey, cb) {
    data = { "itemId" : itemId, "itemKey" : itemKey };
    sendAJAX("setFavorite", data, cb);
}
function removeFavorite(itemId, itemKey, cb) {
    data = { "itemId" : itemId, "itemKey" : itemKey };
    sendAJAX("removeFavorite", data, cb);
}
function isFavorite(itemId, itemKey, cb) {
    data = { "itemId" : itemId, "itemKey" : itemKey };
    sendAJAX("isFavorite", data, cb);
}
function postComment(itemId, itemKey, body, cb) {
    data = { "itemId" : itemId, "itemKey" : itemKey, "body" : body};
    sendAJAX("postComment", data, cb);
}
function deleteComment(itemId, cb) {
    data = { "commentId" : itemId };
    sendAJAX("deleteComment", data, cb);
}
function deleteUser(userId, cb) {
    data = { "userId": userId };
    sendAJAX("deleteUser", data, cb);
}
function deleteTag(itemId, cb) {          
    data = { "tagId" : itemId };
    sendAJAX("deleteTag", data, cb);
}
function getComments(itemId, itemKey, cb) {
    data = { "itemId" : itemId, "itemKey" : itemKey };
    sendAJAX("getComments", data, cb);
}
function reportComment(commentId, cb) {
    if (ensureLogin()) {
        data = { "commentId" : commentId };
        sendAJAX("reportComment", data, cb);
    }
}
function tag(itemId, itemKey, tag, x, y, w, h, cb) {
    data = { "itemId" : itemId, "itemKey" : itemKey, "tag" : tag, "x" : x, "y" : y, "w" : w, "h" : h };
    sendAJAX("tag", data, cb);
}
function setProfilePic(itemId, itemKey, x, y, w, h, cb) {
    data = { "itemId" : itemId, "itemKey" : itemKey, "x" : x, "y" : y, "w" : w, "h" : h };
    sendAJAX("setProfilePicture", data, cb);
}
function updateUserNickname(nickname, cb) {
    data = { "nickname" : nickname };
    sendAJAX("updateUserNickname", data, cb);
}
function getItemData(itemId, cb) {
    data = { "itemId" : itemId };
    sendAJAX("getItemData", data, cb);
}
function getItemData(itemId, cb) {
    data = { "itemId": itemId };
    sendAJAX("getItemData", data, cb);
}
function updateUserUpload(itemId, title, desc, date, cb) {
    data = { "itemId": itemId, "title": title, "date": date, "desc": desc };
    sendAJAX("updateUserUpload", data, cb);
}
function deleteUserUpload(itemId, cb) {
    data = { "itemId": itemId };
    sendAJAX("deleteUserUpload", data, cb);
}
function getTags(itemId, itemKey) {
    if (_galleryData && _galleryData.Tags) {
        return $.grep(_galleryData.Tags, function(n, i) {
            return (n.ItemKey == itemKey.toLowerCase()) && (n.ItemId == itemId.toLowerCase());
        });
    }   
}

function getFav(itemKey) {
    var isFav = false;
    if (_galleryData && _galleryData.UserFavorites) {
        $.each(_galleryData.UserFavorites, function() {
            if (this.ItemKey == itemKey.toLowerCase()) {
                isFav = true;
            }
        });
    }
    return isFav;
}

function isUserLoggedIn() {
    return (_galleryData && (null != _galleryData.User));
}

function getNickname() {    
    if (_galleryData) {
        return _galleryData.User.Nickname;
    }   
}

function setNicknameCb(nickname) {    
    if (_galleryData) {
        _galleryData.User.Nickname = nickname;
    }   
}

function getProfilePic() {    
    if (_galleryData) {
        return _galleryData.User.ProfilePicture;
    }   
}
function setProfilePicCb(pic) {    
    if (_galleryData) {
        _galleryData.User.ProfilePicture = pic;
    }   
}

function addFavCb(obj) {
    if (_galleryData) {
        _galleryData.UserFavorites.push(obj.d);
    }
}
function remFavCb(obj) {
    if (_galleryData) {
        _galleryData.UserFavorites = $.grep(_galleryData.UserFavorites, function(n, i) {
            return n.Id != obj.d.Id;
        });
    }
}

function addTagCb(tag) {
    if (_galleryData && tag) {
        _galleryData.Tags.push(tag);
    }   
}
function remTagCb(obj) {
    if (_galleryData) {
        _galleryData.Tags = $.grep(_galleryData.Tags, function(n, i) {
            return n.Id != obj;
        });
    }
}

function ensureLogin() {
    if (isUserLoggedIn() == false) {
        var url = $('.mosaic').attr('data-galleryUrl'); 
        if (!url) {
            url = document.location.href;
        }
        document.location.href = "/Login.aspx?p=" + encodeURIComponent(url);
        return false;
    }
    return true;
}
function ensureAccess(userId) {
    if (_galleryData && _galleryData.User) {
        return ((_galleryData.User.Id == userId) || 
                (_galleryData.User.Status == 1)); 
    }  
    return false;
}

function _alert(text, cbYes) {
    $('#dialog_content').find('.text').text(text);
    $('.dialog').click();
    
    setTimeout( function () {
        $('.sd_content').find('.yes').click(function() {
            if (cbYes) cbYes();
            $.simpleDialog.close();            
        });              
    }, 1000);
}

function _confirm(text, cbYes, cbNo) {
    $('#confirm_content').find('.text').text(text);
    $('.confirmDialog').click();
    
    setTimeout( function () {
        $('.sd_content').find('.yes').click(function() {
            if (cbYes) cbYes();
            $.simpleDialog.close();            
        });
        $('.sd_content').find('.no').click(function() {
            if (cbNo) cbNo();
            $.simpleDialog.close();         
        });        
    }, 1000);
}

function normalizeHref(href) { 
    href = href.toLowerCase();
    if (href.indexOf('http://') == 0)
    {
        href = href.substr(7);
        var idx = href.indexOf('/');
        href = href.substr(idx);
    }
    for (var i = 0; i < 20; i++) {
        href = href.replace("%20", " ");
    }
    return href;
}

var _tagSelection;
var _slideShow = false;
var _slideShowCtr = 0;
var _imageVisible = false;
var _imageUrl;
var _imageElt;
var _imagesByHref = [];
var _imagesByItemKey = [];
var _imageInit = false;
var _areaSelectInstance = null;
var _galleryData;
var _tagVisible = false;
var _leftPaneVisible = true;
var _strings = {};

function heartbeat() {
    var imageVisible = $('#jquery-lightbox').is(':visible');
    if (_imageVisible != imageVisible) {
        _imageVisible = imageVisible;
        if (!_imageVisible) {        
            _slideShow = false;
            _slideShowCtr = 0;
            _imageUrl = null;
            
            if (_areaSelectInstance) {
                _areaSelectInstance.setOptions({ hide: true });
                _areaSelectInstance.update();
            }            
        } 
    }

    var imageLoaded = $('#lightbox-image').is(':visible');
    if (imageLoaded) {
        var imageUrl = $('#lightbox-image').attr('src');
        
        if (_imageUrl != imageUrl) {
            _imageUrl = imageUrl;
            _imageElt = _imagesByHref[normalizeHref(_imageUrl)];
            _slideShowCtr = 0;
            
            var isGalleryPage = $('.mosaic').attr('data-itemId');
            var itemId = $('.mosaic').attr('data-itemId') || $(_imageElt).attr("data-galleryId");
            var itemKey = $(_imageElt).attr("data-itemKey");
            var galleryUrl = $('.mosaic').attr('data-galleryUrl') || $(_imageElt).attr("data-galleryUrl");
            var photoUrl = galleryUrl + itemKey.toLowerCase();

            if (itemKey) {
                // Set up community feature specific to this photo 
                var cont = $('#lightbox-container-image-data-box');            
                cont.find(".imageData").remove();
                var node = $('.imageData').eq(0).clone().css('display', 'inline-block');
                cont.append(node); 
                
                if (!isGalleryPage) {
                    node.find('.goGallery').show().attr('href', photoUrl);    
                    node.find('.photoFavorite').hide(); 
                    node.find('.imageTags').hide(); 
                    node.find('.imageTag').hide();                                                                      
                } else {                                    
                    // Set up fav
                    var favElt = cont.find('.photoFavorite');
                    var isFav = getFav(itemKey);
                    favElt.attr('data-itemId', itemId).attr('data-itemKey', itemKey);   
                    bindFavorite(favElt, isFav);
                }

                // Set up permalink
                node.find('.permalink').attr('href', imageUrl);                 
                
                // Set up add button
                var addElt = cont.find('.atbutton');
                addElt.attr('id', 'atbutton');
                addElt.addClass('addthis_toolbox addthis_default_style');                
                try 
                {
                    var photoFileUrl = "http://" + document.location.hostname + imageUrl;

                    var html = "";
                    var svcs = { email: 'Email', facebook: 'Facebook', twitter: 'Twitter' };                     
                    for (var s in svcs) {
                        html += '<a class="addthis_button_' + s + '" title=' + svcs[s] + '></a>';
                    }
                    addElt.html(html);
                    addthis.toolbox("#atbutton", {}, { url: photoUrl, email_template: "edp", email_vars: { photoUrl: photoFileUrl} });          
                } catch (e) {}
                                                      
                // Set up add tag      
                var imageTag = cont.find('.imageTag');                                                             
                imageTag.click(function () {            
                    if (!ensureLogin())
                        return false;
                        
                    var textField = $('<input class="imageTagInput" value="' + _strings["YourTag"] + '"></input>');
                    $('#lightbox-container-image').append(textField);
                                     
                    _areaSelectInstance = $('#lightbox-image').imgAreaSelect({ instance: true, onSelectEnd : function(img, selection) {                             
                            selection.x1 += 10;
                            selection.y1 += 10;
                            if ((selection.width > 10) && 
                                (selection.height > 10)) {
                                textField.css({ 'visibility': 'visible', left : selection.x1 , top : selection.y1 + selection.height, width : Math.max(selection.width - 5, 20) });
                                
                                if (!_tagSelection ||
                                    ((selection.x1 != _tagSelection.x1) ||
                                     (selection.y1 != _tagSelection.y1) ||
                                     (selection.x2 != _tagSelection.x2) ||
                                     (selection.y2 != _tagSelection.y2))) {
                                    var cover = $(".imgareaselect-outer:last");
                                    cover.css({ 'top' : cover.offset().top + 21, 'height' : Math.max( cover.height() - 20 , 0) });
                                }
                                _tagSelection = selection;
                            } else {
                                _areaSelectInstance.setOptions({ hide: true });
                                _areaSelectInstance.update();                            
                                textField.remove();
                                imageTag.show();
                            } 
                        }, onSelectChange : function(img, selection) {                            
                            selection.x1 += 10;
                            selection.y1 += 10;
                            textField.css({ left : selection.x1, top : selection.y1 + selection.height, width : Math.max(selection.width - 5, 20) });             
                        } 
                    });
                    
                    textField.keydown(function(e) {
                        if (13 == e.which) {
                            var tagText = textField[0].value;
                            if (!tagText.length) {                                                               
                                return false;    
                            }
                            if (tagText.length > 50) {
                                alert(_strings["TagTooLong"]);
                                return false;
                            }
                            
                            tag(itemId, itemKey, tagText, _tagSelection.x1, _tagSelection.y1, _tagSelection.width, _tagSelection.height, function (obj) {
                                addTagCb(obj.d);   
                                setupTags(itemId, itemKey);                                
                            });
                            
                            _areaSelectInstance.setOptions({ hide: true });
                            _areaSelectInstance.update();                         
                            textField.remove();
                            imageTag.show();
                            
                            // profile pic
                            var pic = getProfilePic();
                            if (pic == null || !pic.length)
                            {                                    
                                var callback = function() {
                                    setProfilePic(itemId, itemKey, _tagSelection.x1, _tagSelection.y1, _tagSelection.width, _tagSelection.height, function (obj) {
                                        if (obj) {
                                            setProfilePicCb(obj);
                                        }                                       
                                    });
                                }
                                confirm(_strings["ProfilePictureSelection"], callback);
                            }
                            return false;
                        }                                                    
                    }).click(function () {
                        textField.select();
                        return false;
                    });       
                    
                    // Set default selection
                    _areaSelectInstance.setSelection(10, 10, 100, 100, true);
                    _areaSelectInstance.setOptions({ show: true });
                    _areaSelectInstance.update();
                                    
                    imageTag.hide();
                    _slideShow = false;
                    return false; 
                }); 
            
                                       
                // Set up tags
                function setupTags(contextItemId, contextItemKey) {
                    var imgElt = $('#lightbox-container-image');
                    imgElt.find(".imageTagArea").remove();
                    imgElt.find(".imageTagAreaText").remove();
                    imgElt.find(".imageTagAreaDelete").remove();

                    if ($(_imageElt).attr("data-itemKey") == contextItemKey) {
                        var tags = getTags(contextItemId, contextItemKey);
                        if (tags) {
                            var tagCount = cont.find('.imageTagsCount');
                            tagCount.text(tags.length);
                                                     
                            $.each(tags, function(i, n) {
                                var tag = this;
                                var area = $('<div class="imageTagArea"><div class="imageTagAreaFill"></div></div>');
                                area.css({ left : this.LocationX, top : this.LocationY, width : this.LocationWidth, height : this.LocationHeight });                    
                                area.find(".imageTagAreaFill").css('opacity', 0.3);
                                imgElt.append(area);
                                var areaText = $('<div class="imageTagAreaText"></div>');
                                var tagText = this.Text;
                                areaText.css({ left : this.LocationX, top : this.LocationY + this.LocationHeight + 10, 'z-index' : 1001 }).text(tagText);
                                imgElt.append(areaText);
                                var areaTextShadown = $('<div class="imageTagAreaText"></div>');
                                areaTextShadown.css({ left : this.LocationX + 1, top : this.LocationY + this.LocationHeight + 10 + 1, color: '#555555', 'z-index' : 1000}).text(tagText);
                                imgElt.append(areaTextShadown);
                                var areaTextDelete = $('<div class="imageTagAreaDelete"></div>');
                                areaTextDelete.css({ left : this.LocationX + areaText.width() + 5, top : this.LocationY + this.LocationHeight + 10, 'z-index' : 1001 }).text("(" + _strings["Delete"] + ")");
                                if (ensureAccess(this.UserId)) {
                                    imgElt.append(areaTextDelete);
                                }
                                
                                area.click(function () {
                                    return false;
                                }).mouseover(function() {
                                                       
                                }).mouseout(function() {
                                    
                                });    
                                areaText.click(function () {
                                    document.location.href = "/search/?q=" + encodeURIComponent(tagText) + "&tag=1";
                                    return false;
                                });  
                                areaTextDelete.click(function () {
                                    deleteTag(tag.Id, function (obj) {
                                        if (obj) {
                                            areaText.remove();
                                            areaTextShadown.remove();
                                            areaTextDelete.remove();
                                            area.remove();
                                            remTagCb(tag.Id);
                                        }
                                    });
                                    return false;
                                });  
                            }); 
                            $("#lightbox-container-image-box").mouseover(function() {
                                _tagVisible = true;                    
                            }).mouseout(function() {
                                _tagVisible = false;
                            });  
                        }          
                    }
                }
                if (itemId) {
                    setupTags(itemId, itemKey);
                }
            }
        }
    } else {
        // image is loading
        _tagVisible = false;
    }
    
    var imgElt = $('#lightbox-container-image');
    var vis = _tagVisible ? "visible" : "hidden";
    imgElt.find(".imageTagArea").css('visibility', vis);
    imgElt.find(".imageTagAreaText").css('visibility', vis);
    imgElt.find(".imageTagAreaDelete").css('visibility', vis);

    if (_slideShow) {
        if (imageLoaded) {
            _slideShowCtr++;
            if (_slideShowCtr > 6) {
                _slideShowCtr = 0;
                $('#lightbox-nav-btnNext').click();
            }
        } 
    }              
}

function bindFavorite(elt, isFav) {
    var itemId = $(elt).attr("data-itemId");   
    var itemKey = $(elt).attr("data-itemKey");            
    var addElt = $(elt).find(".add");
    var remElt = $(elt).find(".rem");
    addElt.click(function() {
        if (ensureLogin()) {
            addElt.hide();
            remElt.css("display", "inline-block");       
            setFavorite(itemId, itemKey, addFavCb);
        }
        return false;           
    });
    remElt.click(function() {
        addElt.css("display", "inline-block");       
        remElt.hide();       
        removeFavorite(itemId, itemKey, remFavCb);  
        return false;         
    });
    if (isFav) {
        addElt.hide();
        remElt.css("display", "inline-block"); 
    } else {
        addElt.css("display", "inline-block");       
        remElt.hide(); 
    }
}
function isIE8() {
    return $.browser.msie && ($.browser.version == "8.0");
}

$(document).ready(function() {
    // init strings
    $('.clientStrings span').each(function() {
        _strings[$(this).attr('id')] = $(this).text();
    });

    //init ads
    $('.flashOverlay').each(function() {
        var url = $(this).attr('data-href');
        $(this).css('background-color', '#000').css('opacity', 0);
        if (url) {
            $(this).click(function() {
                document.location.href = url;
            });
        }
    });

    $('.flashAd').each(function() {
        var node = $(this).parents(".headerAd");
        var expandWidth = $(this).attr('data-expandWidth');
        var expandHeight = $(this).attr('data-expandHeight');
        if ((expandWidth > 0) && (expandHeight > 0)) {
            node.css("overflow", "hidden");

            window["expandCreative"] = function() {
                node.css("overflow", "visible");
                $(".videoList").css("visibility", "hidden");
                if (isIE8()) {
                    $(".menu").fadeOut();
                    $(".pageContent").fadeOut();
                }
            };
            window["collapseCreative"] = function() {
                setTimeout(function() {
                    node.css("overflow", "hidden");
                    $(".videoList").css("visibility", "visible");
                    if (isIE8()) {
                        $(".menu").fadeIn();
                        $(".pageContent").fadeIn();
                    }
                }, 500);
            };
        }
    });


    // initshowcases
    $(".showcaseContent").each(function() {
        var elt = $(this);
        var imgs = elt.find("img");

        imgs.click(function() {
            var target = $(this).attr("data-target");
            document.location.href = target;
        });

        var cycleAfterCb = function(currSlideElement, nextSlideElement, options, forwardFlag) {
            var textNode = $(elt).parent().find(".text");
            var nextTitle = $(nextSlideElement).attr("title");
            var nextDescription = $(nextSlideElement).attr("alt");
            var nextTarget = $(nextSlideElement).attr("data-target");
            var nextPosition = $(nextSlideElement).attr("data-pos");
            var w = $(currSlideElement).width();
            var h = $(currSlideElement).height();
            textNode.css("visibility", "visible");

            if (nextDescription && nextDescription.length > 170) {
                nextDescription = nextDescription.substr(0, 170) + " ...";
            }

            switch (nextPosition) {
                case "right":
                    textNode.css({ width: "20%", height: h, top: 0, bottom: "auto", left: "auto", right: 0 });
                    textNode.slideDown(500);
                    break;

                case "left":
                    textNode.css({ width: "20%", height: h, top: 0, bottom: "auto", left: 0, right: "auto" });
                    textNode.slideDown(500);
                    break;

                case "bottom":
                    textNode.css({ width: w, height: "20%", top: "auto", bottom: "0", left: 0, right: "auto" });
                    textNode.slideDown(500);
                    break;

                case "top":
                    textNode.css({ width: w, height: "20%", top: 0, bottom: "auto", left: 0, right: "auto" });
                    textNode.slideDown(500);
                    break;
            }

            textNode.find(".title").text(nextTitle);
            textNode.find(".description").text(nextDescription);
            textNode.find(".more").attr("href", nextTarget);
        }

        elt.cycle({
            fx: elt.attr("data-trans"),
            pause: elt.attr("data-pause"),
            sync: elt.attr("data-sync"),
            before: function(currSlideElement, nextSlideElement, options, forwardFlag) {
                var textNode = $(elt).parent().find(".text");
                if (textNode.find(".title").text().length > 0) {
                    textNode.slideUp(500);
                }
            },
            after: cycleAfterCb
        });

        // hanlde case where only 1 pic
        if (imgs.length == 1) {
            cycleAfterCb(imgs[1], imgs[1]);
        }

    });


    $('.deleteProfilePic').click(function() {
        setProfilePic("00000000-0000-0000-0000-000000000000", null, 0, 0, 0, 0, function(obj) {
            document.location.reload();
        });
    });
    $('.changeProfilePic').click(function() {
        document.location.href = "/pages/help.aspx#pf";
    });

    $('.mosaic').each(function() {
        if (!$(this).hasClass("noLightbox")) {
            $(this).find("a").lightBox({ keyToClose: null, keyToPrev: null, keyToNext: null, frameEnabled: document.location.href.indexOf("frame=1") > 0 });
        }
    });
    $('.mosaic a').each(function() {
        var href = normalizeHref($(this).attr('href'));
        _imagesByHref[href] = this;

        var itemKey = $(this).attr('data-itemKey');
        if (itemKey) {
            _imagesByItemKey[itemKey.toLowerCase()] = this;
        }
    });

    $('.hidedetails').click(function() {
        _leftPaneVisible = !_leftPaneVisible;
        var detailsElt = $(this);
        var leftPaneElt = $('.leftPane');
        var rightPaneElt = $('.rightPane');
        if (_leftPaneVisible) {
            rightPaneElt.animate({ "width": 600 }, 'slow', function() {
                leftPaneElt.fadeIn(500);
            });
            detailsElt.text(_strings["HideDetails"]);
        } else {
            leftPaneElt.fadeOut(500, function() {
                rightPaneElt.animate({ "width": 960 }, 'slow');
            });
            detailsElt.text(_strings["ShowDetails"]);
        }
    });

    $('.slideshow').click(function() {
        $('.mosaic a').eq(0).click();
        _slideShow = true;
    });

    $('.adjustsize').click(function() {
        var size = $(this).attr("size") || 90;
        if (size == 90) {
            size = 135;
        } else if (size == 135) {
            size = 45;
        } else {
            size = 90;
        }
        $(this).attr("size", size);
        $('.mosaic img').attr("width", size).attr("height", size);
    });

    $('.addacomment').click(function() {
        var y = $('.comments .form').offset().top;
        $('html, body').animate({ scrollTop: y }, 'slow');
    });

    $('.uploadEditFormSubmit').click(function() {
        var p = $('.uploadEditForm');
        var title = p.find(".uploadEditTitle").attr('value');
        var desc = p.find(".uploadEditDesc").text();
        var date = p.find(".uploadEditDate").attr('value');
        var itemId = p.find(".uploadId").attr('value');

        if (!title.length) {
            alert(_strings["UploadPhotoTitleNecessary"]);
            return;
        }
        updateUserUpload(itemId, title, desc, date, function() {
            alert(_strings["UploadPhotoUpdated"]);
        })
    });

    $('.uploadEditFormDelete').click(function() {
        var p = $('.uploadEditForm');
        var itemId = p.find(".uploadId").attr('value');
        var callback = function() {
            deleteUserUpload(itemId, function() {
                alert(_strings["UploadPhotoDeleted"]);
            })
        }
        confirm(_strings["UploadPhotoDelete"], callback);
    });



    $('.showcase .text').click(function() {

    });

    // handle permalink
    $('.mosaic .autoplay').click();

    // init heartbeat function
    setInterval(heartbeat, 500);

    $('.mosaic').find('.thumb').find('img').each(function() {
        if ($(this).parent().hasClass('inactive')) {
            $(this).fadeTo('fast', 0.35);
            $(this).attr('title', _strings["UploadPhotoRejected"]);
        } else {
            $(this).hover(
		    function() {
		        $(this).not('.selected').fadeTo('fast', 0.8);
		    },
		    function() {
		        $(this).not('.selected').fadeTo('fast', 1);
		    });
        }
    });

    // load gallery data
    var galleryItemId = $('.mosaic').attr('data-itemId');
    if (galleryItemId) {
        getItemData(galleryItemId, function(obj) {
            _galleryData = obj.d;

            $(".favorite").each(function() {
                var isFav = getFav("");
                bindFavorite(this, isFav);
            });

            $.each(_galleryData.Tags, function(i, n) {
                var itemKey = this.ItemKey.toLowerCase();
                var img = _imagesByItemKey[itemKey];
                if (img) {
                    var title = $(img).attr('title');
                    if (title.length > 0) {
                        title += ", ";
                    }
                    title += this.Text;
                    $(img).attr('title', title);
                }
            });
        });
    } else {
        if (typeof (_clientObj) != "undefined") {
            _galleryData = {};
            _galleryData.Tags = _clientObj["Tags"];
            _galleryData.User = _clientObj["User"];
        }
    }

    // animate search bar
    if (galleryItemId) {

        function searchBarAnim() {
            $(".searchBar").css("opacity", 0).animate({ "bottom": "0", "opacity": 0.9 }, 'slow');
        }
        setTimeout(searchBarAnim, 3000);

        //        $(".sbCat").change(function() {
        //            var catId = $(this).find("option:selected")[0].value;
        //            if (catId) {
        //                document.location.href = "/category/?cat=" + encodeURIComponent(catId);
        //            }
        //            return false;
        //        });

        if ($(this).find("option:selected").length > 0) {
            _originalValue = $(this).find("option:selected")[0].value;
        }

        setInterval(function() {
            var catId = $(".searchBar").find("option:selected")[0].value;
            if (catId && catId != _originalValue) {
                document.location.href = "/category/?cat=" + encodeURIComponent(catId);
            }
        }, 1000);

        $(".searchBarCloseButton").click(function() {
            $(".searchBar").fadeOut();
        });

//        var galleryNumber = $(".sbLink a");
//        setInterval(function() {
//            galleryNumber.css({ color: '#fff' });
//            galleryNumber.animate({ color: '#ffffff' }, 500, function() {
//                galleryNumber.animate({ color: '#df3e44' }, 500);
//            });
//        }, 5000);
    }


    // truncate elemets
    $(".truncate").each(function() {
        var elts = $(this).find(".desc");
        if (elts.length > 1) {
            var moreElt = $('<span class="truncateMore">' + _strings["SeePlus"] + '</span>');
            var lessElt = $('<span class="truncateLess">' + _strings["SeeLess"] + '</span>');

            elts.eq(0).after(moreElt);
            elts.eq(elts.length - 1).after(lessElt);

            elts = $(this).find(".desc:gt(0)");
            moreElt.click(function() {
                elts.css("display", "block");
                moreElt.css("display", "none");
                lessElt.css("display", "block");
            });
            lessElt.click(function() {
                elts.css("display", "none");
                moreElt.css("display", "block");
                lessElt.css("display", "none");
            });
            lessElt.click();


        }
    });

    // init comment
    $(".comment .entry").each(function(i, n) {
        var elt = $(this);
        var url = $(this).attr("data-galleryUrl");
        var commentId = $(this).attr("data-commentId");

        if (url) {
            $(this).find('.body').css("cursor", "pointer").click(function() {
                document.location.href = url;
            });
        }

        var report = $(this).find('.report');
        var del = $(this).find('.delete');

        $(this).mouseover(function() {
            report.css("visibility", "visible");
            del.css("visibility", "visible");
        }).mouseout(function() {
            report.css("visibility", "hidden");
            del.css("visibility", "hidden");
        });
        report.click(function() {
            if (!ensureLogin())
                return false;

            reportComment(commentId, function(obj) {
                if (obj) {
                    alert(_strings["CommentReported"]);
                }
            });
            return false;
        });
        del.click(function() {
            deleteComment(commentId, function(obj) {
                if (obj) {
                    document.location.reload();
                }
            });
            return false;
        });
    });

    $('.simpleDialog').simpleDialog({ showCloseLabel: false });

    if ($('.confirmDialog').length) {
        window.alert = _alert;
        window.confirm = _confirm;
    }

    $(".rating").each(function() {
        var elt = this;
        $(this).find(".stars").click(function(event) {
            if (ensureLogin()) {
                var offsetX = event.offsetX;
                if (typeof offsetX == 'undefined') {
                    var offset = $(event.target).offset(false);
                    offsetX = event.pageX - offset.left;
                }
                var rating = Math.ceil(offsetX / 15);
                var x = 75 - Math.round(rating) * 15;
                var cssValue = (-1 * x) + "px -28px";
                $(this).css("background-position", cssValue);

                var itemId = $(elt).attr("data-itemId");
                var itemKey = $(elt).attr("data-itemKey");
                setRating(itemId, itemKey, rating);
            }
        });
    });

    $(".comment").each(function() {
        var elt = this;
        var itemId = $(elt).attr("data-itemId");
        var itemKey = $(elt).attr("data-itemKey");
        var bodyElt = $(elt).find(".inputComment")[0];
        $(this).find(".inputSubmit").click(function(event) {
            var body = bodyElt.value;
            if (body.length > 0) {
                if (body.length > 2000) {
                    alert(_strings["CommentTooLong"]);
                    return false;
                }
                postComment(itemId, itemKey, body, function() {
                    var url = $('.mosaic').attr('data-galleryUrl');
                    if (url.length) {
                        document.location.href = url;
                    } else {
                        document.location.reload();
                    }
                });
                bodyElt.value = "";
            }
        });
        $(this).find(".inputDiscard").click(function(event) {
            bodyElt.value = "";
        });
        $(this).find(".inputComment").focus(function() {
            ensureLogin();
        });
    });

    // init search box
    $(".searchBox").each(function() {
        var defaultValue = this.value;
        var elt = this;
        $(this).keydown(function(e) {
            if (13 == e.which) {
                var term = elt.value;
                document.location.href = "/search/?q=" + encodeURIComponent(term);
                return false;
            }
        }).focus(function() {
            if (this.value == defaultValue) {
                this.select();
            }
        });
        $(this).parent().find(".searchButton").click(function() {
            var term = elt.value;
            document.location.href = "/search/?q=" + encodeURIComponent(term);
            return false;

        });
    });

    // init imageFlow
    $(".imageflow").each(function(i, n) {
        var id = "imageFlowModule" + i;
        $(this).attr("id", id);
        var count = $(this).attr("data-count");
        var ratio = parseFloat($(this).attr("data-ratio"));
        var startId = count > 1 ? 2 : 1;
        var anim = (id == 0);
        var instance = new ImageFlow();
        instance.init({ ImageFlowID: id, scrollbarP: 0.9, startID: startId, aspectRatio: ratio, imagesM: 0.95, opacity: true, opacityArray: [10, 9, 8, 7, 2], startAnimation: anim, reflections: false, buttons: true, imageCursor: "pointer", slider: true });
    });

    // init imageFlow
    $(".changeNickname").each(function(i, n) {
        var visible = false;
        $(this).click(function() {
            if (visible) {
                $(".changeNicknameContainer").fadeOut();
            } else {
                $(".changeNicknameContainer").fadeIn();
            }
            visible = !visible;
        });
    });

    $(".changeNicknameContainer").each(function(i, n) {
        var elt = this;
        $(elt).find(".changeNicknameSubmit").click(function() {
            var nickname = $(elt).find(".nickname")[0].value;
            if (nickname.length > 0) {
                updateUserNickname(nickname, function(obj) {
                    if (obj) {
                        document.location.reload();
                    }
                });
            }
        });
    });

    if (typeof isHomepage == 'boolean') {
        function reloadPage() {
            document.location.reload();
        }
        setInterval(reloadPage, 2 * 60 * 1000);
    }

    var cityCount = 0;
    function showCity() {
        var cities = $(".citiesHeader").find(".city");
        if (cityCount < cities.length) {
            $(cities[cityCount]).fadeIn(2000);
            cityCount++;
            setTimeout(showCity, 500);
        }
    }
    setTimeout(showCity, 100);

    //    $("object").each(function (i, n) {        
    //        var child = this.childNodes;
    //        for (var i = 0; i < child.length; i++)
    //        {
    //            var d = $("<div></div>").text(child[i].outerHTML);
    //            $("body").append(d);
    //        }
    //    });

});
