/** ELEMENT EDIT CODE **/

function makeEditable(id){
  Event.observe(id, 'click', function(){try { edit($(id));$(id+'_edit').select(); } catch (e) { void(0); }}, false);
  Event.observe(id, 'mouseover', function(){showAsEditable($(id))}, false);
  Event.observe(id, 'mouseout', function(){showAsEditable($(id), true)}, false);

  var id_split = id.split('_')
  if (id_split[0] in {'phototitle':0, 'photodesc':0}) {
    $(id).innerHTML = ptools.format_description( editBlankField( _ZGLOBAL[id_split[1]][ id_split[0] == 'phototitle' ? 'title' : 'description' ] ) );
  }
}

var _PAGE_LOAD_EVENTS = [];
function startLoadEvents() { for (var i=0;_PAGE_LOAD_EVENTS.length > i;i++) _PAGE_LOAD_EVENTS[i](); };
function addLoadEvent(func) {
  if (_PAGE_LOAD_EVENTS.length == 0 && typeof window.onload == 'function') {
    var pre_func = window.onload;
    _PAGE_LOAD_EVENTS.push( pre_func );
  }
  window.onload = startLoadEvents;
  _PAGE_LOAD_EVENTS.push( func );
};

function edit(obj){
  var obj_height = obj.clientHeight,
      obj_width  = obj.clientWidth;
  Element.hide(obj);
  var quot = /"/g; //"
  var obj_split = obj.id.split('_')

  if (obj_split[0] == 'photolicense') {
        var editarea = '<div id="'+obj.id+'_editor"><strong>'+ gettext("Note: You should only license photos you have the copyright to.") + '</strong><br />';
        editarea += '<select id="'+obj.id+'_edit" name="'+obj.id+'">';
        editarea += '<option value="0" '+(_ZGLOBAL[obj_split[1]].license==0?'selected':'')+'>'+ gettext("None (All rights reserved)") + '</option>';
        editarea += '<option value="1" '+(_ZGLOBAL[obj_split[1]].license==1?'selected':'')+'>'+ gettext("Attribution License") + '</option>';
        editarea += '<option value="2" '+(_ZGLOBAL[obj_split[1]].license==2?'selected':'')+'>'+ gettext("Attribution-NoDerivs License") + '</option>';
        editarea += '<option value="3" '+(_ZGLOBAL[obj_split[1]].license==3?'selected':'')+'>'+ gettext("Attribution-NonCommercial-NoDerivs License") + '</option>';
        editarea += '<option value="4" '+(_ZGLOBAL[obj_split[1]].license==4?'selected':'')+'>'+ gettext("Attribution-NonCommercial License") + '</option>';
        editarea += '<option value="5" '+(_ZGLOBAL[obj_split[1]].license==5?'selected':'')+'>'+ gettext("Attribution-NonCommercial-ShareAlike License") + '</option>';
        editarea += '<option value="6" '+(_ZGLOBAL[obj_split[1]].license==6?'selected':'')+'>'+ gettext("Attribution-ShareAlike License") + '</option></select><br />';
        editarea += '<input id="'+obj.id+'_save" type="button" class="sm_button" value="'+ gettext("SAVE") +'" /> OR <input id="'+obj.id+'_cancel" type="button" value="'+ gettext("CANCEL") +'" class="sm_cancel_button" /></div>';

        new Insertion.After(obj, '<div style="text-align:left;"'+editarea+'</div>');

  } else if (obj_split[0] == 'photoprivacy') {
        var editarea = '<div id="'+obj.id+'_editor">';

        editarea += '<input type="radio" name="is_public_' + obj_split[1]+'" id="is_private_' + obj_split[1]+'" value="0" '+(_ZGLOBAL[obj_split[1]].privacy & 2 ?'checked':'')+' onchange="_change_privacy_form(0, '+obj_split[1]+');" onclick="_change_privacy_form(0, '+obj_split[1]+');" />';
        editarea += '<label for="is_private_' + obj_split[1]+'"><img src="http://assets2.zooomr.com/images/silk/lock.png" border="0" alt="lock" style="vertical-align:middle;" /> ' + gettext("Mark as Private") + '</label><br />';
        editarea += '<div style="padding-left: 20px;">';
        editarea += '    <input type="checkbox" name="is_friend_' + obj_split[1]+'" id="is_friend_' + obj_split[1]+'" value="1" '+(_ZGLOBAL[obj_split[1]].privacy & 4 ?'checked':'')+' />';
        editarea += '    <label for="is_friend_' + obj_split[1]+'"><img src="http://assets2.zooomr.com/images/silk/key_add.png" border="0" alt="key" style="vertical-align:middle;" /> ' + gettext("Visible to Friends") + '</label><br />';
        editarea += '    <input type="checkbox" name="is_family_' + obj_split[1]+'" id="is_family_' + obj_split[1]+'" value="1" '+(_ZGLOBAL[obj_split[1]].privacy & 8 ?'checked':'')+' />';
        editarea += '    <label for="is_family_' + obj_split[1]+'"><img src="http://assets2.zooomr.com/images/silk/key_add.png" border="0" alt="key" style="vertical-align:middle;" /> ' + gettext("Visible to Family") + '</label><br />';
        editarea += '</div>';
        editarea += '<input type="radio" name="is_public_' + obj_split[1]+'" id="is_public_' + obj_split[1]+'" '+(_ZGLOBAL[obj_split[1]].privacy & 1 ?'checked':'')+' value="1" onchange="_change_privacy_form(1, '+obj_split[1]+');" onclick="_change_privacy_form(1, '+obj_split[1]+');" />';
        editarea += '<label for="is_public_' + obj_split[1]+'"><img src="http://assets2.zooomr.com/images/silk/lock_open.png" border="0" alt="open lock" style="vertical-align:middle;" /> ' + gettext("Mark as Public") + '</label><br />';

        editarea += '<input id="'+obj.id+'_save" type="button" class="sm_button" value="'+gettext("SAVE")+'" /> OR <input id="'+obj.id+'_cancel" type="button" value="'+gettext("CANCEL")+'" class="sm_cancel_button" /></div>';

        new Insertion.After(obj, '<div style="text-align:left;"'+editarea+'</div>');

        _change_privacy_form(Boolean(_ZGLOBAL[obj_split[1]].privacy & 1), obj_split[1]);

  }else{
        if (obj_split[0] == 'photodesc' || obj_split[0] == 'profilebio' || obj_split[0] == 'setdesc') {
            var editarea = '<div id="'+obj.id+'_editor"><textarea class="editable" id="'+obj.id+'_edit" name="'+obj.id+'" rows="7" style="width:100%;">'+_ZGLOBAL[obj_split[1]].description+'</textarea>';
        }else{
            var editarea = '<div id="'+obj.id+'_editor"><form action="javascript:void(0);" id="'+obj.id+'_edit_form"><input type="text" class="editable" id="'+obj.id+'_edit" name="'+obj.id+'" value="'+_ZGLOBAL[obj_split[1]].title.replace(quot,"&quot;")+'" style="width:' + (obj_width ? obj_width + 'px' : '99%') + ';font-weight:bold;font-size:' + (obj.tagName == 'H1' ? 23 : (obj.tagName == 'H2' ? 19 : 15)) + 'px;" /></form>';
        }
        var button   = '<div><input id="'+obj.id+'_save" type="button" class="reg_button" value="'+gettext("SAVE")+'" /> OR <input id="'+obj.id+'_cancel" type="button" value="'+gettext("CANCEL")+'" class="cancel_button" /></div></div>';
        new Insertion.After(obj, '<div style="text-align:left;"'+editarea+button+'</div>');
        if (obj_split[0] != 'photodesc' && obj_split[0] != 'profilebio' && obj_split[0] != 'setdesc') {
            Event.observe(obj.id+'_edit', 'keyup', function(oEvent){if (_ZGLOBAL['onphotopage'] !== undefined) {window.document.title=$F(obj.id+'_edit') + ' | ' + gettext('Zooomr Photo Sharing') }}, false);
            Event.observe(obj.id+'_edit_form', 'submit', function(oEvent){ saveChanges( obj ); }, false);
        } //else{
          //  tinyMCE.execCommand("mceAddControl", false, obj.id+'_edit');
        //}
    }

    // Event.observe('bob', 'submit', function(oEvent){ alert( oEvent ); });

  Event.observe(obj.id+'_save', 'click', function(){saveChanges(obj)}, false);

  Event.observe(obj.id+'_cancel', 'click', function(){cleanUp(obj)}, false);

}

function showAsEditable(obj, clear){
  if (!clear){
    Element.addClassName(obj, 'editable');
  }else{
    Element.removeClassName(obj, 'editable');
  }
}

function saveChanges(obj){
  var the_split = obj.id.split('_');

  var success = function(t){editComplete(t, obj);}
  var failure = function(t){editFailed(t, obj);}

  if (the_split[0] == 'photoprivacy') {
    data = {photo_id:the_split[1], is_public:($( 'is_private_' + the_split[1] ).checked ? 0 : 1), is_friend:($( 'is_friend_' + the_split[1] ).checked ? 1 : 0), is_family:($( 'is_family_' + the_split[1] ).checked ? 1 : 0) };

    obj.innerHTML = '<img src="http://assets2.zooomr.com/images/tidbits/progress.gif" style="vertical-align:middle;" border="0" /> ' + gettext("Saving...");
    cleanUp(obj, true);

    ZAPI.callMethodJSON( 'zooomr.photos.setperms', data , {onSuccess:success, onFailure:failure });
    return;

  } else {
    var content = $F(obj.id+'_edit');
    obj.innerHTML = '<img src="http://assets2.zooomr.com/images/tidbits/progress.gif" style="vertical-align:middle;" border="0" /> ' + gettext("Saving...");
    cleanUp(obj, true);
  }

  if (the_split[0] == 'phototitle') {
    ZAPI.callMethodJSON( 'zooomr.photos.setmeta', {photo_id:the_split[1], title:content, description:_ZGLOBAL[the_split[1]].description } , {onSuccess:success, onFailure:failure });
  }else if (the_split[0] == 'photodesc') {
    ZAPI.callMethodJSON( 'zooomr.photos.setmeta', {photo_id:the_split[1], title:_ZGLOBAL[the_split[1]].title, description:content } , {onSuccess:success, onFailure:failure });
  }else if (the_split[0] == 'photolicense'){
      _ZGLOBAL[the_split[1]].license = content;
  }

}

function cleanUp(obj, keepEditable){
//  tinyMCE.execCommand("mceRemoveControl", false, obj.id+'_edit');
    var the_split = obj.id.split('_');
  if (the_split[0] == 'phototitle' && _ZGLOBAL['onphotopage'] !== undefined) {
        window.document.title=_ZGLOBAL[the_split[1]].title + ' | ' + gettext('Zooomr Photo Sharing');
    }
  Element.remove(obj.id+'_editor');
  Element.show(obj);
  if (!keepEditable) showAsEditable(obj, true);
}

function editBlankField(str) {
  return str == '' ? '<em>' + gettext("Click here to add...") + '</em>' : str;
}

function editComplete(t, obj){
  var the_split = obj.id.split('_');

/*  if (the_split[0] == 'phototitle') {
    obj.innerHTML =
  }else if (the_split[0] == 'photodesc') {
    obj.innerHTML = editBlankField(_ZGLOBAL[the_split[1]].description);
  }else if (the_split[0] == 'photolicense'){
    _ZGLOBAL[the_split[1]].license = content;
  }else if (the_split[0] == 'photoprivacy'){
    _ZGLOBAL[the_split[1]].privacy = content;
  } */


  ptools.refresh_data(the_split[1]);

  showAsEditable(obj, true);
}

function editFailed(t, obj){
  obj.innerHTML = gettext("Sorry, the update failed.");
  cleanUp(obj);
}

/** END ELEMENT EDIT CODE **/

/** PHOTO TOOLS **/

ptools = {

  refresh_data : function(pid, sExec) {

    var success = function(t) {
                  var data = json_parse(t.responseText);
                  _ZGLOBAL[data.photo.id].title = data.photo.title._content;
                  _ZGLOBAL[data.photo.id].description = data.photo.description._content;

/*                  var p_lvl = data.photo.visibility.ispublic ? 1 : 2;
                  if (data.photo.visibility.isfriend) p_lvl += 4;
                  if (data.photo.visibility.isfamily) p_lvl += 8;

                  _ZGLOBAL[data.photo.id].privacy = p_lvl; */

                  $('phototitle_' + data.photo.id).innerHTML = editBlankField(_ZGLOBAL[data.photo.id].title);
                  $('photodesc_' + data.photo.id).innerHTML = ptools.format_description( editBlankField(_ZGLOBAL[data.photo.id].description) );
                  //$('photoprivacy_' + data.photo.id).innerHTML = ptools.format_privacy( _ZGLOBAL[data.photo.id].privacy );

                  //console.log("Refresh for photo " + data.photo.id + " is complete!");

                  if (sExec) sExec(data); //Special Execute method

                  }

    ZAPI.callMethodJSON( 'zooomr.photos.getInfo', {photo_id:pid} , {onSuccess:success});
  },


  get_largest_size : function(pid, return_func, threshold) {
    var threshold = threshold ? threshold : 16;

    var success = function(t) {
      var sizes = json_parse(t.responseText)['sizes']['size'];
          sizes.reverse();
      for(var s = 0; s < sizes.length; s++) {
        if (sizes[s]['typeid'] <= threshold) {
          return_func(sizes[s]);
          return;
        }
      }
    }

    ZAPI.callMethodJSON( 'zooomr.photos.getsizes', {photo_id:pid} , {onSuccess:success});

  },


  format_description : function(str) {
    if (typeof str == 'number') {
      str = ''+str;
    }
    return str.replace(/\n/g, "<br />");
  },

  format_privacy : function(p_lvl) {

    switch (p_lvl) {
      case 1:
        var icon = 'lock_open',
            text = gettext('This photo is Public');
        break;
      case 6:
        var icon = 'shield',
            text = gettext('Shared with Friends');
        break;
      case 2:
        var icon = 'lock',
            text = gettext('Not Shared (Private)');
        break;
      case 14:
        var icon = 'shield',
            text = gettext('Shared with Friends & Family');
        break;
      case 10:
        var icon = 'shield',
            text = gettext('Shared with Family');
        break;

    }
    return '<img src="http://assets2.zooomr.com/images/silk/' + icon + '.png" alt="Icon" width="14" height="14" style="vertical-align:bottom" /> ' + text;
  },

  build_html : function(id, ssecret, size_id, title, urlname) {
    return '<div class="ImageContainer" style="margin:auto;" onmouseover="$(\'extraspace_' + id + '\').style.display=\'block\';" onmouseout="$(\'extraspace_' + id + '\').style.display=\'none\';"><a href="/photos/' + urlname + '/' + id + '/" class="image_link"><img src="' + _photo_root + id + '_' + ssecret + size_id + '.jpg' + '" alt="' + title + '" title="' + title + '"  /></a><div id="extraspace_' + id + '" class="ImagePitBox"><a href="javascript:void(0);" rel="lightbox[' + id + '|' + urlname + ']" alt="' + title + '" class="iconlink"><img src="http://assets2.zooomr.com/images/silk/image.png" alt="" /></a></div></div>';
  }

}


faves = {

  toggle : function(pid,showTxt) {
    showTxt = showTxt !== undefined ? showTxt : true;
    var faveBox = $('photofave_'+pid);
    var faveLink = faveBox.firstChild;
        faveLink.href = "javascript:void(0);"

//XXX    zloader.enable($('zloader_PhotoContainer'),_zlang['display-quikedit-saving']);

    var success = function(t){
      _ZGLOBAL[pid].afave = !(_ZGLOBAL[pid].afave);

      if (_ZGLOBAL[pid].afave) {
        faveBox.innerHTML = '<a href="javascript:faves.toggle('+pid+','+(showTxt+0)+');" class="'+(showTxt ? 'smalllink_ltgrey' : 'iconlink')+'"><img src="http://assets2.zooomr.com/images/silk/heart.png" style="vertical-align:top;" border="0" />'+(showTxt ? ' ' + gettext('A Fave') : '')+'</a>';
      } else {
        faveBox.innerHTML = '<a href="javascript:faves.toggle('+pid+','+(showTxt+0)+');" class="'+(showTxt ? 'smalllink_ltgrey' : 'iconlink')+'"><img src="http://assets2.zooomr.com/images/silk/heart_open.png" style="vertical-align:top;" border="0" />'+(showTxt ? ' ' + gettext('Fave?') : '')+'</a>';
      }
//XXX      zloader.disable($('zloader_PhotoContainer'));
    }


    if ( !(_ZGLOBAL[pid].afave) ) {
      ZAPI.callMethodJSON( 'zooomr.favorites.add', {photo_id:pid} , {onSuccess:success});
    } else {
      ZAPI.callMethodJSON( 'zooomr.favorites.remove', {photo_id:pid} , {onSuccess:success});
    }

  }

}

seekr = {

  go_prev : function() {
    $('seekr_button_prev').disabled = true;
    $('seekr_button_next').disabled = true;

//    console.log('prev');

    var success = function(t) {
        var data = json_parse(t.responseText);
//        console.log( data );

        if (data.extra > 0) {
          $('seekr_button_prev').disabled = false;
          $('seekr_button_next').disabled = false;
        }

        var out = '';
        for(var k = 0; k < data.photos.photo.length; k++) {
          if (k == 0) _ZGLOBAL['seekr']['prev_key'] = data.photos.photo[k].id
          if (k == data.photos.photo.length - 1) _ZGLOBAL['seekr']['next_key'] = data.photos.photo[k].id
          out = out + '<div class="SqStreamBit float">' + ptools.build_html(data.photos.photo[k].id, data.photos.photo[k].secret, '_s', data.photos.photo[k].title, data.photos.photo[k].ownerurl) + '</div>';
        }

        var left = $('seekr_right');
        left.style.display = 'none';
        left.innerHTML = out;
        left.style.display = 'inline';
//        new Effect.SlideLeft( left );
//        new Effect.SlideLeftAndRight( left );
    }


    ZAPI.callMethodJSON( 'zooomr.photos.getdirectionalcontext', {photo_id: _ZGLOBAL['seekr']['prev_key'], direction:'prev'}, {onSuccess:success});

  },

  go_next : function() {
    $('seekr_button_prev').disabled = true;
    $('seekr_button_next').disabled = true;

    var success = function(t) {
        var data = json_parse(t.responseText);

        if (data.extra > 0) {
          $('seekr_button_prev').disabled = false;
          $('seekr_button_next').disabled = false;
        }

        var out = '';
        for(var k = 0; k < data.photos.photo.length; k++) {
          if (k == 0) _ZGLOBAL['seekr']['prev_key'] = data.photos.photo[k].id
          if (k == data.photos.photo.length - 1) _ZGLOBAL['seekr']['next_key'] = data.photos.photo[k].id
          out = out + '<div class="SqStreamBit float">' + ptools.build_html(data.photos.photo[k].id, data.photos.photo[k].secret, '_s', data.photos.photo[k].title, data.photos.photo[k].ownerurl) + '</div>';
        }

        var left = $('seekr_right');
        left.style.display = 'none';
        left.innerHTML = out;
        left.style.display = 'inline';
//        new Effect.SlideLeft( left );
//        new Effect.SlideLeftAndRight( left );
    }


    ZAPI.callMethodJSON( 'zooomr.photos.getdirectionalcontext', {photo_id: _ZGLOBAL['seekr']['next_key'], direction:'next'}, {onSuccess:success});

  }

}

/** END PHOTO TOOLS **/

/** TOOLS **/

function newNode(txt) { return document.createElement(txt); }

function _change_privacy_form( setting, pid ) {
    $( 'is_friend' + (pid ? '_'+pid : '') ).disabled = setting
    $( 'is_family' + (pid ? '_'+pid : '') ).disabled = setting
    if (setting == 1) {
        $( 'is_friend' + (pid ? '_'+pid : '') ).checked = false
        $( 'is_family' + (pid ? '_'+pid : '') ).checked = false
    }
}


function addZGlobal(key,value) { //Adds a value to a ZGLOBAL Key
  if (_ZGLOBAL[key] === undefined) {
    _ZGLOBAL[key] = value;
  } else {
    for (x in value) {
      _ZGLOBAL[key][x] = value[x];
    }
  }
  return _ZGLOBAL[key]
}


zloader = {

    build : function(id,element,text,width,docenter) {
        _id = id || "zloader";
        _element  = element || document.getElementsByTagName("body").item(0);
        _text = text || "Loading...";
        _width = width || 100
        _docenter = docenter || false;

        var objZLoader = document.createElement("div");
            objZLoader.setAttribute('id',_id);
            objZLoader.style.width = _width + 'px';
            objZLoader.style.height = '16px';
            objZLoader.className = 'zloader';
            objZLoader.innerHTML = '<img src="http://assets2.zooomr.com/images/tidbits/refresh.gif" style="vertical-align:top;float:left;" /> <span>'+_text+'</span>';


        if (_docenter) {
          var windowWidth, windowHeight;
          if (_element.offsetWidth) { // all except Explorer
            windowWidth = _element.offsetWidth;
            windowHeight = _element.offsetHeight;
          } else if (document.documentElement && _element.clientHeight) { // Explorer 6 Strict Mode
            windowWidth = _element.clientWidth;
            windowHeight = _element.clientHeight;
          } else if (document.body) { // other Explorers
            windowWidth = _element.offsetWidth;
            windowHeight = _element.offsetHeight;
          }

          objZLoader.style.top = ((windowHeight - parseInt(objZLoader.style.height)) / 2) + 'px';
          objZLoader.style.left = ((windowWidth - parseInt(objZLoader.style.width)) / 2) + 'px';
        }

        _element.insertBefore(objZLoader, _element.firstChild);
        return objZLoader;
    },

    enable : function(element,text) {
      _element = element ? element : $('zloader');
      try {
        _element.style.display = 'block';
        if (text) _element.childNodes[1].innerHTML = text;
      } catch (e) {
      //
      }
    },

    disable : function(element) {
      _element = element ? element : $('zloader');
      try {
        _element.style.display = 'none';
      } catch (e) {
      //
      }
    }

}

function $RF(el, radioGroup) {
  if($(el).type == 'radio') {
    var el = $(el).form;
    var radioGroup = $(el).name;
  } else if ($(el).tagName.toLowerCase() != 'form') {
    return false;
  }
  return $F($(el).getInputs('radio', radioGroup).find(
    function(re) {return re.checked;}
  ));
}

function isChild(s,d) {
  while(s) {
    if (s==d)
      return true;
    s=s.parentNode;
  }
  return false;
}

/** END TOOLS **/