
(function () {
    var DEFAULT_BASE = "http://auth.tbn.ru:8080/jdb/crm";
    
    var waitingFor = function (f_cond, f_call) {
        var x = function () { f_cond() ? f_call() : setTimeout(x, 100); }
        return x;
    };

    var waitCrm = function (f_call) {
        waitingFor(function () { return !!window.AgavaAPI }, f_call)();
    };
    
    window.loadAgavaCrm = function (callback, base) {
        var s = document.createElement("script");
        s.setAttribute("src", (base || DEFAULT_BASE) + "/scripts/path.settings.no-cache.js");
        s.setAttribute("type", "text/javascript");
        document.getElementsByTagName("head")[0].appendChild(s);
        waitCrm(callback);
    };
})();
function doMyStuff() {
    var config = {
        project_id: "http://ad.agava.net/registry/project/maillist"
    };
    AgavaAPI.CRM.setup(config);
    AgavaAPI.load("CRM");

};

loadAgavaCrm(doMyStuff);
var localReturnUrl;
var localAuthNeeded;
var authEventSubscription = new Array();
var exitEventSubscription = new Array();
var onLocalAuthError = new Array();
var onBeforLocalAuth = new Array();

function DoRegistry(){
  AgavaAPI.CRM.DoRegistry();  
}
function localAuth() {
	try { localReturnUrl = url; } catch (ex) {
		localReturnUrl = getArgumentFromQuery('url');
	}
	if (! localReturnUrl) {
		localReturnUrl = 'http://www.maillist.ru/cgi/console.cgi';
	}
	var exitFlag = getArgumentFromQuery('sid');
	if (exitFlag && exitFlag == '_') {
		exitFromProject();
	}
	else {

    	    localAuthNeeded = 1;
	    AgavaAPI.CRM.DoAuth(authCallback);
	}
}

function localAuth_devel() {
  try { localReturnUrl = url; } catch (ex) {
    localReturnUrl = getArgumentFromQuery('url');
  }
  if (! localReturnUrl) {
    localReturnUrl = 'http://www.maillist.ru/cgi/console.cgi';
  }
  var exitFlag = getArgumentFromQuery('sid');
  if (exitFlag && exitFlag == '_') {
    exitFromProject();
  }
  else {
   AgavaAPI.CRM.DoAuth(authCallback);
  }
}

function authCallback(ClientContext) {
	if (ClientContext && ClientContext.isAuth() == true && ClientContext.isAnonymous() == false) {
		var _redirOnly = '';
		try { _redirOnly = redirOnly; } catch (ex) {};
		if ((!_getCookie('.maillist.ru_sid')) && _getCookie('lpa')==2){localAuthNeeded=1};
		if (_redirOnly) {			
			window.location.href = unescape(url);
		}		
		else if (localAuthNeeded){
		      for (var action in onBeforLocalAuth) {
			        try {
			          eval(onBeforLocalAuth[action]);
			        }
			        catch (ex) {};
		      }	

			authByEcid(['ecid__'+ClientContext.getEcid(), 'NO_CACHE'], [projectAuthCallback]);
		}
	}
  }
  
  
function projectAuthCallback(sid, supurl) {
	
	if (sid && sid != '0' && sid.match('^[0-9a-f]+$')) {
		
		if (_getCookie('isguest')!=null && _getCookie('isguest')==1) {
			_setCookie('.maillist.ru_sid', sid,0, '/', '.maillist.ru'); _setCookie('support_url', supurl,0, '/', '.maillist.ru');
		} else {
			//_setCookie('.maillist.ru_sid', sid, 5*3600*1000, '/', '.maillist.ru');
			_setCookie('.maillist.ru_sid', sid, 0, '/', '.maillist.ru');
			_setCookie('support_url', supurl, 5*3600*1000, '/', '.maillist.ru');
		};
		
		localReturnUrl = window.location;
		
		if (! localReturnUrl) {
			try { localReturnUrl = url; } catch (ex) {};
		}
		if (localReturnUrl) {
			window.location.href = unescape(localReturnUrl);
		}
		else {
			try { onAuth(); } catch (ex) {};
		}
	} else {
		    for (var action in onLocalAuthError) {
		      try {
		        eval(onLocalAuthError[action]);
		      }
		      catch (ex) {};
		    } 
    sid = sid.substr(30)+'...';
    alert("Ошибка авторизации. Пожалуйста обратитесь в службу тех. поддержки: http://support.maillist.ru\n\n"+sid);
    exitFromProject();
	}
}

function exitFromProject(urlToExit) {
  _deleteCookie('.maillist.ru_sid', '/', '.maillist.ru');
  _deleteCookie('support_url', '/', '.maillist.ru');
  for (var action in exitEventSubscription) {
    try {
      eval(exitEventSubscription[action]);
    }
    catch (ex) {};
  }
  if (!urlToExit || urlToExit == '') {
    urlToExit = 'http://www.maillist.ru/';
  }
 AgavaAPI.CRM.DoLogout(function () { exitFromAuthCallBack(urlToExit)}); 
}

function exitFromAuthCallBack(urlis){    
  if (!urlis || urlis == '') {
    urlis = 'http://www.maillist.ru/';
  };   
    window.location.href = urlis;
}

function processAuth() {
  	if (document.getElementById('supportMode').value == 1) {
  		window.location.href = url;
  	}
	else if (document.getElementById('autoTry').value == 1) {

	}
	else {
		AgavaAPI.CRM.DoAuth(authCallback);
	}
}

function ml_anonAuthCallback() {
    // callback after anonymauth
}

function tryCookie() {
    AgavaAPI.CRM.IsAuth(function (context) {
	if(context.isAuth()) {
		if (!_getCookie('.maillist.ru_sid')){
		    authByEcid(['ecid__'+context.getEcid(), 'NO_CACHE'], [projectAuthCallback]);
		}
		else{
		    onAuth();
		}
	}
	else{
	    if (_getCookie('.maillist.ru_sid')){
		onAuth();
	    }
	    else{
		document.getElementById('login_form').style.display = 'block';
		document.getElementById('authProgr').style.display = 'none';
	    }
	}
    }); 
 
}

function onAuth() {
  for (var action in authEventSubscription) {
    try {
      eval(authEventSubscription[action]);
    }
    catch (ex) {};
  }
}

function setEcidValue(field) {
  var fl;
  try { fl = document.getElementById(field);} catch(ex) {};
  if (! fl) { return; }
  try { fl.value = AgavaAuth.getClientContext().getEcid(); } catch(ex) {};
}

/*************************************************************************************************/
/** Misc query param getter
*/
function getArgumentFromQuery(paramName) {
		var mainURL = window.location + "";
		var URLparts = mainURL.split('?');
		if(URLparts.length < 2){
			return null;
		}
		var arguments = URLparts[1].split('&');
		for (i = 0; i < arguments.length; i++) {
			var pair = arguments[i].split('=');
		  	if(pair[0] == paramName){
		  		return arguments[i].substring(arguments[i].indexOf(pair[1]));
		  	}
	  	}
}
/*************************************************************************************************/
/**
*   Get cookie
*/
function _getCookie(name) {
    var prefix = name + "=";
    var cookieStartIndex = document.cookie.indexOf(prefix);
    if(cookieStartIndex == -1) return null;
    var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length);
    if(cookieEndIndex == -1) cookieEndIndex = document.cookie.length;
    return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex));
}
/*************************************************************************************************/
/**
*	set cookies
*/
function _setCookie( name, value, expires, path, domain, secure ){
	var today = new Date();
	var expires_date;
	today.setTime( today.getTime() );
	if (expires){
		expires_date = new Date( today.getTime() + (expires) );
	}
	document.cookie = name + "=" +escape( value ) +
	( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
	( ( path ) ? ";path=" + path : "" ) +
	( ( domain ) ? ";domain=" + domain : "" ) +
	( ( secure ) ? ";secure" : "" );
}
/*************************************************************************************************/
/**
*	delete cookies
*/
function _deleteCookie (name, path, domain) {
	var value = _getCookie(name);
	if (value != null)
		document.cookie = name + '=' + ((path) ? '; path=' + path : '') + ((domain) ? '; domain=' + domain : '') + '; expires=' + new Date(0).toGMTString();
}

/********************
 * Local project ajax authrorization code
 */
//<![CDATA[
var ajax = [];

function pjx(args,fname,method) {
	 this.target=args[1];
	 this.args=args[0];
	 method=(method) ? method : 'GET';
	 if(method=='post'){method='POST';} 
	 this.method = method;
	 this.r=ghr();
	 this.url = this.getURL(fname);
}

function formDump(){
	 var all = []; 
	 var fL = document.forms.length;
	 for(var f = 0; f<fL; f++){ 
	 	var els = document.forms[f].elements;
	 	for(var e in els){
	 		 var tmp = (els[e].id != undefined) ? els[e].id : els[e].name;
	 		 if(typeof tmp != 'string'){continue;} 
	 		 if(tmp){ all[all.length]=tmp}
	 	}
	 }
	 return all;
}

function getVal(id) {
	 if (id.constructor == Function ) { return id(); }
	 if (typeof(id)!= 'string') { return id; }
	 var element = document.getElementById(id);
	 if( !element ) { 
	 	for( var i=0; i<document.forms.length; i++ ){ 
	 		element = document.forms[i].elements[id];
	 		if( element ) break; 
	 	}
	 	if( element && !element.type ) element = element[0]; 
	 } 
	 if(!element){ 
	 	alert('ERROR: Cant find HTML element with id or name: ' + id+'. Check that an element with name or id='+id+' exists');
	 	return 0; 
	 } 
	 if(element.type == 'select-one') { 
	 	if(element.selectedIndex == -1) return;
	 	var item = element[element.selectedIndex];
	 	return item.value || item.text; 
	 } 
	 if(element.type == 'select-multiple') { 
	 	var ans = []; 
	 	var k =0; 
	 	for (var i=0;i<element.length;i++) {
	 		 if (element[i].selected || element[i].checked ) { 
	 		 	ans[k++]= element[i].value || element[i].text; 
	 		 } 
	 	} return ans; 
	 } 
	 if(element.type == 'radio' || element.type == 'checkbox'){ 
	 	var ans =[]; 
	 	var elms = document.getElementsByTagName('input'); 
	 	var endk = elms.length; 
	 	var i =0; 
	 	for(var k=0; k<endk; k++){ 
	 		if(elms[k].type== element.type && elms[k].checked && (elms[k].id==id||elms[k].name==id)){ 
	 			ans[i++]=elms[k].value; 
	 		} 
	 	}
	 	return ans; 
	 } 
	 if( element.value == undefined ){ 
	 	return element.innerHTML; 
	 } else { return element.value; }
}

function fnsplit(arg) { 
	var url=""; 
	if(arg=='NO_CACHE'){return '&pjxrand='+Math.random()}; 
	if((typeof(arg)).toLowerCase() == 'object'){ 
		for(var k in arg){ url += '&' + k + '=' + arg[k]; }
	} else if (arg.indexOf('__') != -1) { 
		arga = arg.split(/__/); 
		url += '&' + arga[0] +'='+ escape(arga[1]); 
	} else { 
		var res = getVal(arg) || ''; 
		if(res.constructor != Array){res = [res]}; 
		for(var i=0;i<res.length;i++) { 
			url += '&args=' + escape(res[i]) + '&' + arg + '=' + escape(res[i]);
		}
	}
	return url;
	}
	
	pjx.prototype = { send2perl : function(){ 
		var r = this.r;
		var dt = this.target; 
		this.pjxInitialized(dt); 
		var url=this.url; 
		var postdata; 
		if(this.method=="POST"){ 
			var idx=url.indexOf('?'); 
			postdata = url.substr(idx+1); 
			url = url.substr(0,idx); 
		} 
		r.open(this.method,url,true);
		if(this.method=="POST"){ 
			r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			r.send(postdata); 
		} 
		if(this.method=="GET"){ r.send(null); } 
			r.onreadystatechange = handleReturn; 
		}, pjxInitialized : function(){}, pjxCompleted : function(){}, readyState4 : function(){ var rsp = unescape(this.r.responseText); /* the response from perl */ var splitval = '__pjx__'; /* to split text */ /* fix IE problems with undef values in an Array getting squashed*/ rsp = rsp.replace(splitval+splitval+'g',splitval+" "+splitval); var data = rsp.split(splitval); dt = this.target; if (dt.constructor != Array) { dt=[dt]; } if (data.constructor != Array) { data=[data]; } if (typeof(dt[0])!='function') { for ( var i=0; i<dt.length; i++ ) { var div = document.getElementById(dt[i]); if (div.type =='text' || div.type=='textarea' || div.type=='hidden' ) { div.value=data[i]; } else{ div.innerHTML = data[i]; } } } else if (typeof(dt[0])=='function') { dt[0].apply(this,data); } this.pjxCompleted(dt); }, getURL : function(fname) { var args = this.args; var url= 'fname=' + fname; for (var i=0;i<args.length;i++) { url=url + args[i]; } return url; }};handleReturn = function() { for( var k=0; k<ajax.length; k++ ) { if (ajax[k].r==null) { ajax.splice(k--,1); continue; } if ( ajax[k].r.readyState== 4) { ajax[k].readyState4(); ajax.splice(k--,1); continue; } }};var ghr=getghr();function getghr(){ if(typeof XMLHttpRequest != "undefined") { return function(){return new XMLHttpRequest();} } var msv= ["Msxml2.XMLHTTP.7.0", "Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"]; for(var j=0;j<=msv.length;j++){ try { A = new ActiveXObject(msv[j]); if(A){ return function(){return new ActiveXObject(msv[j]);} } } catch(e) { } } return false;}function jsdebug(){ var tmp = document.getElementById('pjxdebugrequest').innerHTML = "<br><pre>"; for( var i=0; i < ajax.length; i++ ) { tmp += '<a href= '+ ajax[i].url +' target=_blank>' + decodeURI(ajax[i].url) + ' </a><br>'; } document.getElementById('pjxdebugrequest').innerHTML = tmp + "</pre>";}

function authByEcid() {
	 var args = authByEcid.arguments;
 	 for( var i=0; i<args[0].length;i++ ) {
 	 	 args[0][i] = fnsplit(args[0][i]); 
 	 } 
 	 var l = ajax.length;
 	 ajax[l]= new pjx(args,"authByEcid",args[2]);
 	 ajax[l].url = '/cgi/ajax/login_ajax.cgi?' + ajax[l].url; 
 	 ajax[l].send2perl(); 
}
//]]>
