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++;
			});
			//if (tgs[0])	element = tgs[0].id;
			tgs.each(function(elm, i) {
				comflow.storeElement(elm.id, params);
			});
		} else {
			comflow.storeElement(element, params);
		}

		/*_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();
		}
	},
	storeElement: function(element, params) {
		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';

		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';

		if (!comflow.isdefined('_qid')) _qid = new Array();
		if (params.qid) _qid[element] = params.qid;
		else _qid[element] = '0';
	},
	isdefined: function(v) {
    return (typeof(window[v]) == "undefined")?false:true;
	},
	isLoggedIn: function () {
		_ak = true;
		if (!roken) {
			var token = _doc.getElementById('roken');
			roken = token.value;
		}
		var url = flow_host + "index.php?option=com_flow&task=lin&norem=1&format=raw&" + roken + "=1";
		comflow.loadData(url);
	},
	flowup: function (e) {
		if (e) {
			var elm = e.currentTarget.id;
		} else {
			var elm = window.event.srcElement.id;
		}
		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 if (_task[elm] == 'question') {
			comflow.flowquest(elm, _qid[elm]);
		} else {
			SqueezeBox.initialize();
			SqueezeBox.setOptions({size: {x: _width[elm], y: _height[elm]}});
			//SqueezeBox.toggleLoading(true);
			SqueezeBox.setContent('iframe', flow_host + 'index.php?option=com_flow&task=' + _task[elm] + '&norem=1&tmpl=component');
			//SqueezeBox.applyContent(flow_host + 'index.php?option=com_flow&task=' + _task[elm] + '&tmpl=component', {x: _width[elm], y: _height[elm]});
		}
		return;
	},
	flowquest: function (elm, qs) {
		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) {
		SqueezeBox.initialize();
		SqueezeBox.setOptions({size: {x: _width[elm], y: _height[elm]}}).setContent('iframe', flow_host + 'index.php?option=com_flow&task=login&norem=1&elm=' + elm + '&tmpl=component');
		return;
	},
	flowt: function (elm, com) {
		SqueezeBox.initialize();
		SqueezeBox.setOptions({size: {x: _width[elm], y: _height[elm]}}).setContent('iframe', flow_host + 'index.php?' + com);
		return;
	},
	flowdown: function (elm) {
		_doc.getElementById('sbox-window').close();
		return;
	},
	flowonbehind: function (elm) {
		var trigger = _doc.getElementById(elm);
		trigger.onclick = '';
		trigger.onclick = _store_onclick[elm];
		trigger.submit = _store_submit[elm];
		if (trigger.name) trigger.name = 'continue';
		if (trigger.href) trigger.href = _hrefs[elm];
	},
	flowon: function (id, elm) {
		//comflow.flowonbehind(elm);
		var goon = _doc.getElementById(id);
		if (goon.href) goon.href = _hrefs[elm];
		else goon.onclick = 'parent.document.location = \'' + _hrefs[elm] + '\';';
		//if (trigger.name) trigger.name = 'continue';
	},
	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);
			}
		}
	}
}
reflow = {
	load: function(url) {
		var rem = new Ajax(url, {
			method: 'post',
			onComplete: function(r) { reflow.page(r);/*alert(r);*/ }
			});
		rem.request();
	},
	page: function(res) {
		//alert(res);
		//alert(document.documentElement.innerHTML);return;
		//var phtml = document.html;
		var html;
		if (res.indexOf('<html') != -1) {
			html = res.split('<html');
		} else {
			html = res.split('<HTML');
		}
		var body = html[1];
		var bend;
		if (bend = body.indexOf('</html>') == -1) {
			html = body.split('</html>');
		} else {
			html = body.split('</HTML>');
		}
		body = html[0];
		body = body.slice(body.indexOf('>')+1);
		//alert(body);return;
		
		document.documentElement.innerHTML = '';
		document.documentElement.innerHTML = body;
		reloadModals();
	}
}

//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;
  };
}

