/*
  Copyright 2008, Stanziq  Inc.
*/

Peeq.PubSub.prototype = {
    
    createNode: function(jid,service,node,options) {
	var iqid = app.connection.getUniqueId("pubsubcreatenode");

	var iq = $iq({from:jid, to:service, type:'set', id:iqid});

	iq.c('pubsub',
	     {xmlns:Peeq.NS.PUBSUB}).c('create',
	     {node:node});

	app.connection.send(iq.tree());
	return iqid;
    },

    subscribe: function(jid,service,node,options, call_back) {

	var subid = app.connection.getUniqueId("subscribenode");

	//create subscription options
	var sub_options = Strophe.xmlElement("options",[]);
	var x = Strophe.xmlElement("x",[["xmlns","jabber:x:data"]]);
	var form_field = Strophe.xmlElement("field",[["var","FORM_TYPE"],
						     ["type","hidden"]]);
	var value = Strophe.xmlElement("value",[]);
	var text = Strophe.xmlTextNode(Peeq.NS.PUBSUB_SUBSCRIBE_OPTIONS);
	value.appendChild(text);
	form_field.appendChild(value);
	x.appendChild(form_field);
	
	jQuery.each(options, function(i, val) {
	    x.appendChild(val);
	});
	if(options.length != 0) {
	    sub_options.appendChild(x);
	}
	
	var sub = $iq({from:jid, to:service, type:'set', id:subid})
	sub.c('pubsub', { xmlns:Peeq.NS.PUBSUB }).c('subscribe',
	    {node:node,jid:jid}).up().cnode(sub_options);



	app.connection.send(sub.tree());

	app.connection.addHandler(call_back,
				  null,
				  'iq',
				  null,
				  subid,
				  null);
	
	return subid;
	
    },
    unsubscribe: function(jid,service,node, call_back) {

	var subid = app.connection.getUniqueId("unsubscribenode");

	
	var sub = $iq({from:jid, to:service, type:'set', id:subid})
	sub.c('pubsub', { xmlns:Peeq.NS.PUBSUB }).c('unsubscribe',
	    {node:node,jid:jid});


	
	app.connection.send(sub.tree());

	app.connection.addHandler(call_back,
				  null,
				  'iq',
				  null,
				  subid,
				  null);
	
	return subid;
	
    },    
    publish: function(jid, service, node, items, call_back) {
	var pubid = app.connection.getUniqueId("publishnode");


	var publish_elem = Strophe.xmlElement("publish",
					      [["node",
						node],
					       ["jid",
						jid]]);
	jQuery.each(items, function(i, val) {
	    var item = Strophe.xmlElement("item",[]);
	    var entry = Strophe.xmlElement("entry",[]);
	    var t = Strophe.xmlTextNode(val);
	    entry.appendChild(t);
	    item.appendChild(entry);
	    publish_elem.appendChild(item);
	});
	
	var pub = $iq({from:jid, to:service, type:'set', id:pubid})
	pub.c('pubsub', { xmlns:Peeq.NS.PUBSUB }).cnode(publish_elem);


	app.connection.send(pub.tree());

	app.connection.addHandler(call_back,
				  null,
				  'iq',
				  null,
				  pubid,
				  null);
	
	return pubid;
    }
};
