var RF = {
	pid: 0,
	url: 'http://reforum.ru/widgets.html',
	init: function(options) {
		if (options.partner_code) {
			RF.pid = options.partner_code;
		}
	},
	widget: function(params) {
		var divID = params.contID ? params.contID : 'RFWidgetSpec';
		var r = parseInt(Math.random()*1000000000);

		eval('RF.callback'+r+' = function(data){ document.getElementById("'+divID+'").innerHTML = data}');

		var src = RF.url+'?callback=RF.callback'+r+'&f=1&partner='+RF.pid+'&'+RF.param({params: params});
		var i = document.createElement('iframe');
		var fid = 'RF_iframe_'+r;
		i.id = fid;
		i.width = 0;
		i.height = 0;
		i.marginwidth=0;
		i.marginheight=0;
		i.frameBorder=0;

		var d = document.createElement('div');
		d.style.visibility = 'hidden';
		d.style.width = 0;
		d.style.height = 0;
		d.style.position = 'absolute';
		var s = document.getElementById(divID);
		s.parentNode.insertBefore(d, s);
		d.appendChild(i);

		RF.loadScript(1, fid, src);
	},
	Widget: function(widget, params) {
		RF.widget(params);
	},
	loadScript: function(n, fid, src) {
		var doc;
		if(n<10){
			try{
				if(document.all && !window.opera){
					doc = window.frames[fid].document;
				}else if(document.getElementById){
					doc = document.getElementById(fid).contentDocument;
				}
			}catch(e){}
			if(doc){
				doc.write('<scr'+'ipt type="text/javascript" src="'+src+'"><\/scr'+'ipt>');
			}else{
				setTimeout('RF.loadScript('+(++n)+','+fid+',"'+src+'");', 100);
			}
		}
	},
	param: function( a ) {
		var s = [],
		add = function( key, value ) {
			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
		};

		for ( var prefix in a ) {
			RF.buildParams( prefix, a[ prefix ], add );
		}

		var r20 = /%20/g;
		// Return the resulting serialization
		return s.join( "&" ).replace( r20, "+" );
	},
 	buildParams: function( prefix, obj, add ) {
		if (obj != null && typeof obj === "object" ) {
			// Serialize object item.
			for ( var name in obj ) {
				RF.buildParams( prefix + "[" + name + "]", obj[ name ], add );
			}
		} else {
			// Serialize scalar item.
			add( prefix, obj );
		}
	}
};
