//
// BEGIN FLOCK GPL
//
// Copyright Flock Inc. 2005-2008
// http://flock.com
//
// This file may be used under the terms of the
// GNU General Public License Version 2 or later (the "GPL"),
// http://www.gnu.org/licenses/gpl.html
//
// Software distributed under the License is distributed on an "AS IS" basis,
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
// for the specific language governing rights and limitations under the
// License.
//
// END FLOCK GPL
//

const FLOCK_PHOTO_CID = Components.ID('{5844743e-41a6-400c-a659-93e0067d1d68}');
const FLOCK_PHOTO_CONTRACTID = '@flock.com/photo;1';
const FLOCK_PHOTO_IID = Components.interfaces.flockIPhoto;


function flockPhoto() {
}

flockPhoto.prototype= {
    id: "",
    thumbnail: "",
    webPageUrl: "",
    midSizePhoto: "",
    largeSizePhoto: "",
    title: "",
    username: "",
    userid: "",
    is_public: "true",
  	is_video: "false",
    buildTooltip: function( ) { 
      // do we have to use document from the window to ceate elements? -- ja
      var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
                         .getService(Components.interfaces.nsIWindowMediator);
      var win = wm.getMostRecentWindow('navigator:browser');
      if (!win) return;

      var lbl = win.document.createElement('label');
      lbl.setAttribute('value', this.title );
      return lbl;
    },
    buildHTML: function( ) {
      return '<a title="'+this.title+'" href="'+this.webPageUrl+'"><img src="'+this.midSizePhoto+'" border="0" /></a>';
    },
    buildBBCode: function ( ) {
      return '[url=' + this.webPageUrl + '][img]'+ this.midSizePhoto +'[/img][/url]';
    },
    buildMiniPage: function ( ) {
      return '<html><head><title>' + this.title +
        ' (' + this.username + ')</title></head><body><center>' +
        this.buildHTML( ) + '</center></body></html>';
    },
    QueryInterface: function(iid) {
        if (!iid.equals(Components.interfaces.nsISupports) &&
            !iid.equals(FLOCK_PHOTO_IID))
            throw Components.results.NS_ERROR_NO_INTERFACE;
        return this;
    }
};


var flockPhotoModule = {
    registerSelf: function(compMgr, fileSpec, location, type) {
        compMgr = compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar);
        compMgr.registerFactoryLocation(FLOCK_PHOTO_CID, 
                                        "flockPhoto JS component", 
                                        FLOCK_PHOTO_CONTRACTID, 
                                        fileSpec, 
                                        location,
                                        type);
    },

    getClassObject: function(compMgr, cid, iid) {
        if (!cid.equals(FLOCK_PHOTO_CID))
            throw Components.results.NS_ERROR_NO_INTERFACE;

        if (!iid.equals(Components.interfaces.nsIFactory))
            throw Components.results.NS_ERROR_NOT_IMPLEMENTED;

        return flockPhotoFactory;
    },

    canUnload: function(compMgr) { return true; }
};

var flockPhotoFactory = {
    createInstance: function(outer, iid) {
        if (outer != null)
            throw Components.results.NS_ERROR_NO_AGGREGATION;
    
        if (!iid.equals(FLOCK_PHOTO_IID) &&
            !iid.equals(Components.interfaces.nsISupports))
            throw Components.results.NS_ERROR_INVALID_ARG;

        return new flockPhoto();
    }
}

/* module initialisation */
function NSGetModule(comMgr, fileSpec) { return flockPhotoModule; }

