comflow = {
	_p_doc: undefined,
	_p_adminForm: undefined,
	_doc: undefined,
	_adminForm: undefined,
	_lin: undefined,
	_set: undefined,
	_ak: undefined,
	_form: undefined,
	_task: undefined,
	_width: undefined,
	_height: undefined,
	_elements: undefined,
	_triggers: undefined,
	_tgnum: undefined,
	_store_onclick: undefined,
	_store_submit: undefined,
	init: function (params) {
		if (params.form) _form = params.form;
		else _form = 'adminForm';

		_doc = eval('window.document');
		_adminForm = eval('window.document.' + _form);
		
		if (params.element) element= params.element;
		else element= 'submit';

		var trigger = _doc.getElementById(element);
		if (!trigger) {
			ancs = $$('a');
			tgs = ancs.filter(function(elm, i) {
				return elm.href.contains(element);
			});
			if (!comflow.isdefined('_tgnum')) _tgnum = 0;
			tgs.each(function(elm, i) {
				elm.id = 'flow' + _tgnum;
				_tgnum++;
			});
			//alert(tgs[0].id);
			if (tgs[0])	element = tgs[0].id;
		}

		if (!comflow.isdefined('_elements')) _elements = new Array();
		_elements.push(element);

		if (!comflow.isdefined('_task')) _task = new Array();
		if (params.task) _task[element] = params.task;
		else _task[element] = 'display';
		//alert(element);

		if (!comflow.isdefined('_source')) _source = new Array();
		if (params.source) _source[element] = params.source;
		else _source[element] = 'application';

		if (!comflow.isdefined('_width')) _width = new Array();
		if (params.width) _width[element] = params.width;
		else _width[element] = '840';

		if (!comflow.isdefined('_height')) _height = new Array();
		if (params.height) _height[element] = params.height;
		else _height[element] = '370';

		/*_p_doc = eval('window.parent.document');
		_p_adminForm = eval('window.parent.document.' + _form);
		* */

		if (!comflow.isdefined('_store_onclick')) _store_onclick = new Array();
		if (!comflow.isdefined('_store_submit')) _store_submit = new Array();

		if (!comflow.isdefined('_lin')) _lin = false;
		if (!comflow.isdefined('_set')) _set = false;
		if (!comflow.isdefined('_ak')) _ak = false;
		if (_set) {
			comflow.setTrigger(element);
		}
		if (!_ak) {
			comflow.isLoggedIn();
		}
	},
	isdefined: function(v) {
    return (typeof(window[v]) == "undefined")?false:true;
	},
	isLoggedIn: function () {
		_ak = true;
		var roken = _doc.getElementById('roken');
		var url = flow_host + "index.php?option=com_flow&task=lin&format=raw&" + roken.value + "=1";
		comflow.loadData(url);
		//alert('returned');
	},
	flowup: function (e) {
		if (e) {
			var elm = e.currentTarget.id;
		} else {
			var elm = window.event.srcElement.id;
		}
		//alert(_task[elm]);
		if (_task[elm] == 'link') {
			if (!comflow.isdefined('_hrefs')) return;
			link = _hrefs[elm];
			SqueezeBox.initialize();
			SqueezeBox.setOptions({size: {x: _width[elm], y: _height[elm]}}).setContent('iframe', link + '&tmpl=component');
		} else {
			SqueezeBox.initialize();
			SqueezeBox.setOptions({size: {x: _width[elm], y: _height[elm]}}).setContent('iframe', flow_host + 'index.php?option=com_flow&task=' + _task[elm] + '&tmpl=component');
		}
		return;
		//_doc.getElementById('sbox-window').close();
	},
	flowquest: function (elm, qs) {
		//alert(_task[elm]);
		var roken = _doc.getElementById('roken');
		SqueezeBox.initialize();
		SqueezeBox.setOptions({size: {x: _width[elm], y: _height[elm]}}).setContent('iframe', flow_host + 'index.php?option=com_flow&task=questionset&qs=' + qs + '&tmpl=component&' + roken.value + '=1');
		return;
	},
	flowlogin: function (elm) {
		//alert(_task[elm]);
		SqueezeBox.initialize();
		SqueezeBox.setOptions({size: {x: _width[elm], y: _height[elm]}}).setContent('iframe', flow_host + 'index.php?option=com_flow&task=login&tmpl=component');
		return;
	},
	flowt: function (elm, com) {
		//alert(_task[elm]);
		SqueezeBox.initialize();
		SqueezeBox.setOptions({size: {x: _width[elm], y: _height[elm]}}).setContent('iframe', flow_host + 'index.php?' + com);
		return;
	},
	flowdown: function () {
		if (_onclick) {
			var trigger = _doc.getElementById(element);
			trigger.onclick = null;
			trigger.onclick = _store_onclick;
			trigger.submit = _store_submit;
		}
		_doc.getElementById('sbox-window').close();
	},
	setTriggers: function () {
		for (i=0; i < _elements.length; i++) {
			comflow.setTrigger(_elements[i]);
		}
		_set = true;
	},
	setTrigger: function (element) {
		//alert(_task[element]);
		var tg = false;
		if (_source[element] == 'application' && _task[element] == 'display' && !_lin) tg = true;
		if (_source[element] == 'mod_flow') tg = true;
		if (_source[element] == 'flow') tg = true;
		if (tg) {
			//var trigger = _doc.getElementById(element);
			var trigger = $(element);
			if (!trigger) return;
			_store_onclick[element] = trigger.onclick;
			_store_submit[element] = trigger.submit;
			trigger.onclick = null;
			//trigger.addEvent('click', comflow.flowup);
			trigger.onclick = comflow.flowup;
			trigger.type = 'button';
			if (trigger.submit) {
				if (!comflow.isdefined('_triggers')) _triggers = new Array();
				_triggers[element] = trigger.submit;
				trigger.submit = null;
			}
			if (trigger.href) {
				if (!comflow.isdefined('_hrefs')) _hrefs = new Array();
				_hrefs[element] = trigger.href;
				trigger.href = '#';
			}
		} else {
			_store_onclick[element] = false;
			//alert('logged in');
		}
	},
	getTransport: function () {
		req = false;
		if(window.XMLHttpRequest) {
			try { req = new XMLHttpRequest(); } catch(e) { req = false; }
		} else if(window.ActiveXObject) {
			try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {
				try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { req = false; }
			}
		}
		return req;
	},
	loadData: function (url) {
		req = comflow.getTransport();
		if(req) {
			req.onreadystatechange = comflow.putData;
			req.open("POST", url, true);
			req.send("");
		}
	},
	putData: function () {
		var dinfo;
		if (req.readyState == 4) {
			stat = req.status;
			if (BrowserDetect.browser == 'Konqueror') {
				stat = 200;
			}
			if (stat == 200 ) {
				//alert(req.responseText);
				if (req.responseText.indexOf("Restricted access") != -1) {
					window.location.reload();
				}
				if (!_lin) {
					if (req.responseText == 'yin') {
						_lin = true;
					} else {
						_lin = false;
					}
				}
				comflow.setTriggers();
				return;
				/*} else {
					data = req.responseText.split('=');
					err = data[1];
					$$('messages').innerHTML = err;
				}*/
			} else {
				alert("There was a problem retrieving the XML data:\n" +
				req.statusText);
			}
		}
	}
}

//This prototype is provided by the Mozilla foundation and
//is distributed under the MIT license.
//http://www.ibiblio.org/pub/Linux/LICENSES/mit.license

if (!Array.prototype.lastIndexOf)
{
  Array.prototype.lastIndexOf = function(elt /*, from*/)
  {
    var len = this.length;

    var from = Number(arguments[1]);
    if (isNaN(from))
    {
      from = len - 1;
    }
    else
    {
      from = (from < 0)
           ? Math.ceil(from)
           : Math.floor(from);
      if (from < 0)
        from += len;
      else if (from >= len)
        from = len - 1;
    }

    for (; from > -1; from--)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

