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,
	_modids: undefined,
	_triggers: undefined,
	_tgnum: undefined,
	_store_onclick: undefined,
	_store_submit: undefined,
	_htmlcache: undefined,
	init: function (params) {
		if (!this._htmlcache) this._htmlcache = new Array();
		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);
				element = elm.id;
			});
		} else {
			comflow.storeElement(element, params);
		}
		//this.cachestage(params.load);

		/*_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();
		}
		if (params.load) {
			switch(_task[element]) {
				case 'login' : comflow.flowlogin(element);break;
				default : comflow.flowup(element);break;
			}
		}
	},
	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('_tmpl')) _tmpl = new Array();
		if (params.tmpl) _tmpl[element] = true;
		else _tmpl[element] = false;

		if (!comflow.isdefined('_modids')) _modids = new Array();
		if (params.modid) _modids[element] = params.modid;
		else _modids[element] = '0';

		if (!comflow.isdefined('_qid')) _qid = new Array();
		if (params.qid) _qid[element] = params.qid;
		else _qid[element] = '0';
	},
	cachestage: function(load) {
		url = flow_host + 'index.php?option=com_flow&task=login&norem=1&tmpl=component';
		var rem = new Ajax(url, {
			method: 'get',
			onComplete: function(r) {
				comflow.cache(r, 'flowgin', load);
			}
		});
		rem.request();
	},
	cache: function(e, name, load) {
		this._htmlcache[name] = e;
		if (load) comflow.flowlogin(name);
	},
	has: function(name) {
		if (typeof(this._htmlcache) != 'Array') return false;
		if (this._htmlcache.indexOf(name) == -1) {
			return false;
		} else {
			return true;
		}
	},
	isdefined: function(v) {
    return (typeof(window[v]) == "undefined")?false:true;
	},
	isLoggedIn: function () {
		_ak = true;
		if (!comflow.isdefined('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 (elm) {
		/*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];
			if (_tmpl[elm]) link = link + '&tmpl=component';
			SqueezeBox.initialize();
			SqueezeBox.setOptions({size: {x: _width[elm], y: _height[elm]}}).setContent('iframe', link);
		} else if (_task[elm] == 'question') {
			comflow.flowquest(elm, _qid[elm]);
		} else {
			var spin = flow_host + 'index.php?option=com_flow&view=login&layout=spinner&norem=1&tmpl=component';
			var content = flow_host + 'index.php?option=com_flow&task=' + _task[elm] + (_modids[elm]?'&mi=' + _modids[elm]:'') + '&norem=1&tmpl=component';
			SqueezeBox.initialize();
			SqueezeBox.setOptions({size: {x: _width[elm], y: _height[elm]}, fxOverlayDuration: 30, closable: false});
			SqueezeBox.content.setProperty('class', 'sbox-content-' + 'iframe');
			SqueezeBox.applyContent(SqueezeBox.handlers['iframe'].call(SqueezeBox, spin));
			SqueezeBox.toggleLoading(true);
			SqueezeBox.toggleOverlay(true);
			SqueezeBox.fx.overlay.start(SqueezeBox.options.overlayOpacity);
			SqueezeBox.reposition();
			SqueezeBox.applyTimer = SqueezeBox.applyContent.delay(30, SqueezeBox, [SqueezeBox.handlers['iframe'].call(SqueezeBox, content)]);
		}
		return false;
	},
	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 false;
	},
	flowlogin: function (elm) {
		//if (!comflow.has(elm)) return;
		var spin = flow_host + 'index.php?option=com_flow&view=login&layout=spinner&norem=1&tmpl=component';
		//var spin = new Element('div', {'id':'spin','class':'spinbox'});
		var content = flow_host + 'index.php?option=com_flow&controller=bod&task=login&norem=1&elm=' + elm + '&tmpl=component';
		SqueezeBox.initialize();
		SqueezeBox.setOptions({size: {x: _width[elm], y: _height[elm]}, fxOverlayDuration: 30, closable: false});
		SqueezeBox.content.setProperty('class', 'sbox-content-' + 'iframe');
		SqueezeBox.applyContent(SqueezeBox.handlers['iframe'].call(SqueezeBox, spin));
		//if (SqueezeBox.overlay.opacity) return SqueezeBox;
		SqueezeBox.toggleOverlay(true);
		SqueezeBox.fx.overlay.start(SqueezeBox.options.overlayOpacity);
		SqueezeBox.reposition();
		SqueezeBox.applyTimer = SqueezeBox.applyContent.delay(30, SqueezeBox, [SqueezeBox.handlers['iframe'].call(SqueezeBox, content)]);
		//SqueezeBox.setContent('iframe', content);
		return;

		SqueezeBox.initialize();
		SqueezeBox.setOptions({sizeLoading: {x: 200, y: 60}, size: {x: _width[elm], y: _height[elm]}, fxOverlayDuration: 30, overlayOpacity: 0.5})
		SqueezeBox.applyTimer = SqueezeBox.applyContent.delay(100, SqueezeBox, this._htmlcache['flowgin']);
		SqueezeBox.toggleOverlay(true);
		SqueezeBox.fx.overlay.start(SqueezeBox.options.overlayOpacity);
		return false;
	},
	flowt: function (elm, com) {
		SqueezeBox.initialize();
		SqueezeBox.setOptions({size: {x: _width[elm], y: _height[elm]}}).setContent('iframe', flow_host + 'index.php?' + com);
		return false;
	},
	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 () {
		if (!comflow.isdefined('_elements')) _elements = new Array();
		for (i=0; i < _elements.length; i++) {
			comflow.setTrigger(_elements[i]);
		}
		_set = true;
	},
	setTrigger: function (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 = $(element);
			if (!trigger) return;
			_store_onclick[element] = trigger.onclick;
			_store_submit[element] = trigger.submit;
			trigger.onclick = null;
			trigger.onclick = comflow.flowup.pass(element);
			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 = '#';
			}
			if (!trigger.id) trigger.id = element;
		} else {
			_store_onclick[element] = false;
		}
	},
	loadData: function (url) {
		var rem = new Ajax(url, {
			method: 'post',
			onComplete: function(r) { 
				if (r.indexOf("Restricted access") != -1) {
					window.location.reload();
					return;
				}
				if (!comflow._lin) {
					if (r == 'yin') {
						comflow._lin = true;
					} else {
						comflow._lin = false;
					}
				}
				comflow.setTriggers();
			}
			});
		rem.request();
	}
}
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;
  };
}

