/*
//
// JSActions script
// capture.photozou.js
//
// Original auther:  KUMAGAI Kentaro <ku@ido.nu>
//
// Released under the Creative Commons Attribution-ShareAlike licence.
// http://creativecommons.org/licenses/by-sa/3.0/
//
*/
const CC = Components.classes;
const CI = Components.interfaces;
const ios = CC["@mozilla.org/network/io-service;1"].getService(CI.nsIIOService);

function trace(e) {
	if ( Firebug && Firebug.Console && Firebug.Console.log ) {
		Firebug.Console.log(e);
	} else {
		alert(e);
	}
}

String.prototype.qq = function ( ) {
	return '"' + this.toString() + '"';
}

Function.prototype.bind = function(object) {
  var __method = this;
    return function() {
	    __method.apply(object, arguments);
	}
}

var JSActions = _jsaCScript;
JSActions.Helper = {
		me: null,
		load: function (scriptname) {
			var uri = this.resolve( scriptname );
			var loader = CC["@mozilla.org/moz/jssubscript-loader;1"]
							.createInstance(CI.mozIJSSubScriptLoader);
			try {
				return loader.loadSubScript(uri);
			} catch (e) {
				trace(e);
				return null;
			}
		},
		resolve: function(path) {
			if ( this.me == null ) {
				this.me = CC["@mozilla.org/file/local;1"].createInstance(CI.nsILocalFile);
				this.me.initWithPath( JSActions.currentScriptPath );
			}
			var uri = ios.newFileURI(this.me);
			var resolved = uri.resolve(path);
			return resolved;
		}
};

JSActions.Helper.load('sbme.jslib');
JSActions.Helper.load('imagesaver.jslib');
var conf = JSActions.Helper.load( 'capture.photozou.conf' );

window.cc = Components;

var WWW = { Service: { Photozou: {
	//endpoint: 'http://api.photozou.jp/rest/',
	endpoint: 'http://dokodemo/mox/t.html',
	save: function (canvas_stream, title_in_unicode) {
		var nc = {
			// nsIInterfaceRequester interface
			QueryInterface: function ( iid ) {
				trace("qi: " + iid);
				if ( iid.equals(Components.interfaces.nsIAuthPrompt) ||
						iid.equals(Components.interfaces.nsISupports) ||
						iid.equals(Components.interfaces.nsIInterfaceRequestor)
				) {
					return this;
				} else {
					Components.returnCode = Components.results.NS_ERROR_NO_INTERFACE;
					return null;
				}
				
			},
			getInterface: function(iid, result){
				trace("nc: " + iid);
				if ( iid.equals(Components.interfaces.nsIAuthPrompt) ) {
					return this;
				} else {
					Components.returnCode = Components.results.NS_ERROR_NO_INTERFACE;
					return null;
				}
			},
			promptUsernameAndPassword: function (dialogTitle , text , passwordRealm , savePassword , user , pwd, checkMsg , checkValue   ) {
				var p = Components.classes["@mozilla.org/network/default-auth-prompt;1"]
									.getService(Components.interfaces.nsIAuthPrompt);
				var r =  p.promptUsernameAndPassword(
					dialogTitle, text, passwordRealm, savePassword, user, pwd, checkMsg, checkValue);
				//JSActions.pref.setUniChar('fls.jsactions.capture.photozou.user', user);
				//JSActions.pref.setUniChar('fls.jsactions.capture.photozou.pwd', pwd);
				trace("Components.results.NS_OK");
				trace(Components.results.NS_OK);
				trace("r");
				trace(r);
				//r = (Components.results.NS_OK);
				trace(user);
				trace(pwd);
				return false;
				return r;
			}
		};

		var endpoint = this.endpoint + 'photo_add';
		var sourceUri = ios.newURI(endpoint, null, null);
		var channel = ios.newChannelFromURI( sourceUri );

		var self = this;

		var uc = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]
							.createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
		uc.charset = 'UTF-8';

		var title = uc.ConvertFromUnicode( title_in_unicode );
		
		var query = {
				album_id: conf.album_id,
				photo_title: title,
				photo: canvas_stream
			};
		
		SBME.httpRequest( {
			uri: endpoint,
			post: query,
			notificationCallbacks: nc,
			callback: function (raw, req) {
				try {
					trace(req);
					if ( ! raw  ) {
						throw null;
					}	
					var channel = req.QueryInterface(Components.interfaces.nsIHttpChannel);

					trace( [raw, channel, req] );

					if ( ! channel.requestSucceeded ) 
						throw channel.responseStatusText;

					if(raw.match(/^<\?xml/)) {
						raw = raw.replace(/<\?xml.*?\?>/, '');
					}
					var xml = new XML(raw);

					var html = new XML ( "<root>" + xml.large_tag.toString() + "</root>" );
					var href = ( html.a[1].@href );

					var stat = xml.@stat;
					if ( stat == 'ok' ) {
						html = '<a href="' + href + '" style="color: white;">' + stat + '</a>';
					} else {
						throw stat;
					}
				} catch ( e ) {
					trace(e);
					html = e || 'failed...';
				}
				ImageSaver.GUI.cleanup(html);
			}.bind(self),
			method: 'POST',
		} );
		

	}
} } };


ImageSaver.capture_rect( WWW.Service.Photozou.save.bind(WWW.Service.Photozou) );


