/**
 * This file contains routines for standard secure login interface
 * Login state changes are exposed by login_statechange controller event
 * SVN: $Id: slogin.js 6163 2008-08-14 14:36:31Z mjezierski $
 */
JMF.Login = JMF.Login || {};

JMF.Login.SLogin = {
	ifr:null,
	controllers:[],
	appLog:112,
	appId:112,
	frameUrl:'/_x/sidebar/[param],slogin.html',
   frameUrl:'/_s/jmf-tvn/[param],slogin.html',
	state:null,
	login:function(login,pass,ssl) {
		if(JMF.Login.SLogin.getState() !== JMF.Login.SLogin.ST_READY) {
			setTimeout(function(){
				JMF.Login.SLogin.login(login,pass,ssl);
			},1000);
			return;
		}
      JMF.Login.SLogin.state = JMF.Login.SLogin.ST_LOGIN;
      JMF.Login.SLogin.ifr.login(login,pass,ssl,JMF.Login.SLogin.appLog,JMF.Login.SLogin.appId);

	},
	logout:function() {
      if(JMF.Login.SLogin.getState() !== JMF.Login.SLogin.ST_READY) {
         setTimeout(function(){
            JMF.Login.SLogin.logout();
         },1000);
         return;
      }
      JMF.Login.SLogin.state = JMF.Login.SLogin.ST_LOGOUT;
      JMF.Login.SLogin.ifr.logout(JMF.Login.SLogin.appLog);
	},
	getState:function(){
	    if(JMF.Login.SLogin.state !== JMF.Login.SLogin.ST_READY) {
			if(!JMF.Login.SLogin.ifr) {
				var ifr = document.createElement('iframe');
				JMF.$H(ifr).css('position:absolute;border:0;width:1px;height:1px;opacity:0;bottom:0;left:0;overflow:hidden');
	         ifr.id = JMF.uId();
	         ifr.src = JMF.Login.SLogin.frameUrl.replace(/\[param\]/,(new Date()).getTime()) /*+'?'+(new Date()).getTime()*/;
				ifr = document.getElementsByTagName('body')[0].appendChild(ifr);
				if(JMF.browser.IE) {
					document.frames[ifr.id] = ifr;
				}
				JMF.Login.SLogin.ifrH = ifr;
			}
			return false;
	    }
       return JMF.Login.SLogin.ST_READY;
	},
	setApps:function(appId,appLog) {
		if(appId) {
         JMF.Login.SLogin.appId = appId;
		}
		if(appLog) {
		 	JMF.Login.SLogin.appLog = appLog;
		}
	},
	setState:function(result){
		if(!JMF.Login.SLogin.ifr) {
			JMF.Login.SLogin.ifr = JMF.Login.SLogin.ifrH.contentWindow;
		}

		if(!result) {
			JMF.Login.SLogin.state = JMF.Login.SLogin.ST_READY;
			return;
		}
		var state = JMF.Login.SLogin.state;
		setTimeout(function(){JMF.Login.SLogin.dispatch(result == 1?0:-1,state);},0);
		JMF.Login.SLogin.state = JMF.Login.SLogin.ST_READY;
  	},
	attachController:function(controller) {
		JMF.Login.SLogin.controllers.push(controller);
	},
	detachController:function(controller) {
      for(var i=0;i<JMF.Login.SLogin.controllers.length;i++) {
      	if(JMF.Login.SLogin.controllers[i] == controller) {
      		JMF.Login.SLogin.controllers.splice(i,1);
      	}
      }
	},
	dispatch:function(status, state) {
		for(var i=0;i<JMF.Login.SLogin.controllers.length;i++) {
			if(typeof(JMF.Login.SLogin.controllers) == 'function') {
				JMF.Login.SLogin.controllers[i](status==1,state);
			} else {
			   JMF.Login.SLogin.controllers[i].process(
               JMF.Events.create('login_statechange',{status:status,operation:state})
			   );
			}
		}
	},
	ST_READY:1,
	ST_LOGIN:2,
	ST_LOGOUT:3
};
