var widgets = {
    domain: 'http://passport.pravda.ru/',
    jsPath: 'http://www.pravda.ru/js/',    
    javascripts: [], 
    options: {},
    pageData: '',
    addScript: function(src) {
		this.javascripts.push(src);
	},
    loadNextScript: function(callback) {
		if (widgets.javascripts.length > 0) {
			var src = widgets.javascripts.shift();
			if (widgets.javascripts.length > 0) //Не последний
				widgets.includeJS(src, widgets.loadNextScript);
			else //Последний, после загрузки продолжаем инициализацию
				widgets.includeJS(src, callback);
		} else {
            return callback();
        }
	},
    includeJS: function(url, callback) {
		var js = document.createElement('script');
		js.setAttribute('language', 'javascript');
		js.setAttribute('type', 'text/javascript');
		js.setAttribute('src', url);
		if("attachEvent" in js) {
	                js.attachEvent("onload", callback);
	        } else if("addEventListener" in js) {
	                js.addEventListener("load", callback, false);
		} else {
	                js.onload=callback;
		}
		
		if( (!("attachEvent" in js) || !("addEventListener" in js)) && "onreadystatechange" in js) {
	                js.onreadystatechange=function(){if(this.readyState=="loaded" || this.readyState=="complete") callback()};
		} 
	        
		document.getElementsByTagName('head')[0].appendChild(js);
	},
    getPageData: function () {
        if (!this.pageData.length) {
          var metas = document.getElementsByTagName('meta'), pData = {}, keys = ['description', 'title', 'url', 'image'], metaName;
          for (var i in metas) {
            if (!metas[i].getAttribute) continue;
            if (metas[i].getAttribute && ((metaName = metas[i].getAttribute('name')) || (metaName = metas[i].getAttribute('property')))) {
              for (var j in keys) {
                if (metaName == keys[j] || metaName == 'og:'+keys[j] || metaName == 'vk:'+keys[j]) {
                  pData[keys[j]] = metas[i].content;
                }
              }
            }
          }
          pData.title = pData.title || document.title || '';
          pData.description = pData.description || '';
          pData.image = pData.image || '';
          
          var loc = document.location.href.replace(/#.*$/, '');
          if (!pData.url || !pData.url.indexOf(loc)) {
            pData.url = loc;
          }
          this.pageData = '{title: "'+escape(pData.title)+'", description: "'+escape(pData.description)+'", image: "'+escape(pData.image)+'", url: "'+escape(pData.url)+'"}';
        } 
        return this.pageData;
    },
    initBase: function() {
        try {
            new easyXDM.Socket();
        } catch (e) {
            this.addScript(this.jsPath + 'easyXDM/easyXDM.min.js');
        }
    },    
    comments: function(options) {
        this.initBase();
        if (!options.container) {
            options.container = 'pravda-cmt-'+Math.floor(Math.random()*100);
            var cEl = document.createElement('div');
            cEl.id = options.container;
            document.body.appendChild(cEl);
        }
        document.getElementById(options.container).innerHTML = '<span id="comments_loading" style="vertical-align: top;"><img src="http://pravda-team.ru/pravda/pix/facebox_loading.gif" style="width:24px; margin-right:5px;">Идет загрузка комментариев. Пожалуйста, подождите...</span>';
        if (!options.siteId) {
            document.getElementById(options.container).innerText = 'Site id not defined';
            return;
        }    
        if (!options.id)
            options.id = 0;
        if (!options.type)
            options.type = 1;
        this.options = options;
        this.loadNextScript(this.initComments);
    },
    initComments: function() {
        var transport = new easyXDM.Socket({
                remote: widgets.domain+"?area=ajaxCommentActions&action=init&site="+widgets.options.siteId+"&id="+widgets.options.id+"&type="+widgets.options.type,
                swf: widgets.jsPath+"easyXDM/easyxdm.swf",
                container: widgets.options.container,
                props: {scrolling: "no", style: {width:"100%", height:"200px", backgroundColor:"white"}},
                onMessage: function(message, origin){
                    data = eval('(' + message + ')');
                    if (data.type == 'height') {
                        this.container.getElementsByTagName("iframe")[0].style.height = data.value + "px";
                        document.getElementById('comments_loading').style.display = 'none';
                    }
                    if (data.type == 'info') {
                        try {
                            setUserInfo();
                        } catch (e) {}
                    }
                    if (data.type == 'pageData') {
                        transport.postMessage(widgets.getPageData());
                    }
                }
        });
    },
    auth: function(options) {
        
        this.initBase();
        
        if (!options.siteId) {
            document.getElementById(options.container).innerText = 'Site id not defined';
            return;
        }
        
        this.options = options;
        
        this.loadNextScript(this.initAuth);
        
    },
    initAuth: function() {
        var transport = new easyXDM.Socket({
                remote: widgets.domain+"?area=ajaxAuthActions",
                swf: widgets.jsPath+"easyXDM/easyxdm.swf",
                container: widgets.options.container,
                props: {scrolling: "no", style: {width:"100%",height:"280px"}},
                onMessage: function(message, origin){
                    data = eval('(' + message + ')');
                    if (data.type == 'info') {
                        try {
                            setUserInfo();
                        } catch (e) {}
                    }
                }
        });
    }
}

