var billing_port = '8445';
var server_url = 'mybilling.telinta.com';
var logout_string = 'logout';
var api = 'current';

var original_params = $H(document.location.search.toQueryParams());

var newscript = function(url) {
	var script = document.createElement('script');
	script.type = 'text/javascript';
	script.src = url;
	document.getElementsByTagName('head')[0].appendChild(script);
};
if (navigator.userAgent.indexOf('AppleWebKit/') > -1) // necessary because Chrome doesn't have a "head" object while loading
	document.write ("<script src = 'config.js' type = 'text/javascript'></script>");
else
	newscript('config.js');

var progress_timeout;
var uniq = function() { return (new Date).getTime(); };
var realm = function(s) { return s.replace(/REALM/,billing_port==8445?'account':'customer'); };

var portaurl = function(tail) { return 'https://'+server_url+':'+billing_port+tail; };

var load = function(url,params) {
	url = url.replace(/^https?:.*\//,''); // Opera fix
	progress_timeout = setTimeout("$('progress_indicator').show()",500);
	newscript(realm(portaurl('/ls/'+url+'.mcomp?'+original_params.merge(params).merge({_:uniq(),api:api}).toQueryString())));
};

var go = function(c) {
	window.location.href = window.location.href.replace(/([^?]*)\/.*/,'$1/'+c+'.html?_='+uniq());
};
var reload = function() {
	Try.these(
		function() { window.location.reload(); }
	, function() { window.location.href = window.location.href.sub(/\??(.*)?$/,function(m) { return '?'+$H(m[1].toQueryParams()).merge({_:uniq()}).toQueryString(); }); }
	);
};
var fill = function(d) {
	$A(document.body.getElementsByTagName('SPAN')).each(function(e) {
		e = $(e);
		var v = d[e.className];
		if (v) e.replace(v);
	});
	$A(document.getElementsByTagName('INPUT')).each(function(e) {
		e = $(e);
		var v = d[e.className];
		if (v) {
			e.value = v;
			e.enable();
		}
		var f = window['click_'+e.tagName];
		if (f !== undefined) {
			e.stopObserving('click',f);
			e.observe('click',f);
		}
		var f = window['keypress_'+e.tagName];
		if (f !== undefined) {
			e.stopObserving('keypress',f);
			e.observe('keypress',f);
		}
	});
	$A(document.getElementsByTagName('FORM')).map(Form.enable);
	if (progress_timeout) clearTimeout(progress_timeout);
	$('progress_indicator').hide();
	if (window.ready) window.ready();
};

var click_INPUT_element = function(e) {
	if (e.type != 'button') return false;
	var f = e.up('form');
	var a = f.readAttribute('action');
	a = a.replace(/^https?:.*\//,''); // Opera fix
	if (!a.startsWith(':')) {
		load(a,f.serialize(true));
	} else {
		var formdata = $H(f.serialize(true));
		a = a.sub(/^:/,'');
		$(a.sub(/^:|_.*/,'',2)).innerHTML = '<span class="_'+realm(a)+'"></span>';
		load('index',formdata.merge({v:'_'+a}));
	}
	$A(document.getElementsByTagName('FORM')).map(Form.disable);
	return true;
};
var click_INPUT = function(evt) {
	if (!click_INPUT_element($(Event.element(evt)))) return true;
	Event.stop(evt);
	return false;
};

var keypress_INPUT = function(evt) {
	if (evt.keyCode != Event.KEY_RETURN) return;
	var f = $(Event.element(evt)).up('form');
	var save = document.getElementsByClassName('save', f)[0];
	if (save && click_INPUT_element(save)) Event.stop(evt);
};

var ls = function() {
	var v = $A(document.body.getElementsByTagName('SPAN')).pluck('className').grep(/^_/);
	v.map(function(c) { return document.getElementsByClassName(c); }).flatten().each(function(e) { e.innerHTML = '&nbsp'; });
	var i = $A(document.body.getElementsByTagName('INPUT')).pluck('className').grep(/^_/);
	v = v.concat(i);
	i.map(function(c) { return $$('.'+c) }).flatten().each(function(e) { $(e).disable(); });
	if (!$('progress_indicator')) {
		var pi = document.createElement('div');
		pi.id = 'progress_indicator';
		document.body.appendChild(pi);
	}
	if (v.length) load('index',{v:v.toString()}); else fill({});
};
Event.observe(window,'load',ls);

var fail = function(reason) {
	if (reason) alert(reason);
};
var logout = function() {
	load('index',{action:logout_string,pb_auth_user:null,pb_auth_password:null});
};

var datetimeChanged = function(sel, linked) {
  var val = '';
  if (linked && sel && sel.selectedIndex > -1) {
  	val = sel.item(sel.selectedIndex).value;
  	if (val != '') linked.value = val;
		linked.readOnly = (val == '') ? false : true;
  }
};
