new Asset.images([
	'../images/popup_tl.png', 
	'../images/popup_tr.png', 
	'../images/popup_content.png', 
	'../images/popup_bl.png', 
	'../images/popup_br.png', 
	'../images/popup_b.png'
]);

var message;

function createPopup()
{
	var table = new Element('table', {'id': 'popup_block'});
	table.cellPadding = '0';
	table.cellSpacing = '0';
	table.border = '0';

	var tbody = new Element('tbody').injectInside(table);
	var tr1 = new Element('tr').injectInside(tbody);
	new Element('td', {'class': 'popup_tl'}).injectInside(tr1);
	new Element('td', {'class': 'popup_content', 'id': 'popup_content'}).injectInside(tr1);
	new Element('td', {'class': 'popup_tr'}).injectInside(tr1);
	var tr2 = new Element('tr').injectInside(tbody);
	new Element('td', {'class': 'popup_bl'}).injectInside(tr2);
	new Element('td', {'class': 'popup_b'}).injectInside(tr2);
	new Element('td', {'class': 'popup_br'}).injectInside(tr2);

	return table;
}

window.addEvent('domready', function() {
	document.addEvent('click', function(event) {
		if (message)
		{
			message.fade('hide');
		}
	});

	window.addEvent('resize', function(event) {
		if (message && currentForm)
		{
			message.setStyles({
				'top': currentForm.getCoordinates().top - 60,
				'left': currentForm.getCoordinates().left
			});
		}
	});

	fixIePNG();

	if (document.messageText && document.messageForm)
	{
		createMessage($(document.messageForm));
	}

	$$('#navWrapper li:first-child').addClass('navFirstLi');
	$$('#navWrapper li:last-child').addClass('navLastLi');
	
	$$('.entry table thead tr th:first').addClass('firstTH');
	$$('.entry table tbody tr td:first-child').addClass('firstTD');

	$$('tbody tr:nth-child(odd)').addClass('odd'); // zebra table
});

function fixIePNG()
{
	if (Browser.Engine.trident4)
	{
		var rpng = new RegExp('url\\(([\.a-zA-Z0-9_/:-]+\.png)\\)');
		var search = new RegExp('(.+)popup\.css');

		for (var i = 0; i < document.styleSheets.length; i++)
		{
			if (document.styleSheets[i].href.match(/popup\.css$/))
			{
				var root = document.styleSheets[i].href.replace(search, '$1');
				var count = document.styleSheets[i].rules.length;
				
				for (var j = 0; j < count; j++)
				{
					var cssstyle = document.styleSheets[i].rules[j].style;
					var bgimage = root + cssstyle.backgroundImage.replace(rpng, '$1');
					
					if (bgimage && bgimage.match(/\.png/i))
					{
						var scale = (cssstyle.backgroundRepeat == 'no-repeat') ? 'crop' : 'scale';
						
						cssstyle.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, src=\'' + bgimage + '\', sizingMethod=\''+ scale +'\')';
						cssstyle.backgroundImage = 'none';
					}
				}
			}
		}
	}
}

function createMessage(form, messageText)
{
	if (form)
	{
		if (!messageText)
		{
			if (document.messageText)
			{
				messageText = document.messageText;
			}
		}

		if (messageText)
		{
			if (!$('popup_block'))
			{
				message = createPopup();
			}
			
			message.inject(document.body);

			message.setStyles({
				'top': form.getCoordinates().top - 60,
				'left': form.getCoordinates().left
			});

			$('popup_content').set('text', messageText);

			message.fade('show');

			var messageCoordinates = message.getCoordinates();

			if (window.getScrollTop() > messageCoordinates.top)
			{
				window.scrollTo(0, messageCoordinates.top - 10);
			}
		}
		else
		{
			if (message)
			{
					message.fade('hide');
			}
		}
	}
}

var currentForm = null;

function submitForm(form, container, method, onsuccess, stripHeader)
{
	document.messageText = '';
	document.reportSuccess = false;
	
	currentForm = $(form);

	createMessage(currentForm, 'Processing...');
	
	currentForm.onsuccess = onsuccess;

	new Request.HTML({
		url: currentForm.action,
		data: currentForm,
		evalScripts: false,
		method: method ? method : 'post',
		onSuccess: function(tree, elements, html, javascript) {
			if (container && html)
			{
				$(container).set('html', html);
			}

			$exec(javascript);

			(function(){
				createMessage(currentForm);

				if (typeof currentForm.onsuccess == 'function' && document.reportSuccess)
				{
					document.reportSuccess = false;
					
					currentForm.onsuccess.run();
				}
			}).delay(50); // need to set a delay - FF bug
		},
		onFailure: function() 
		{
			createMessage(currentForm, 'Request failed.');
		}
	}).send();

	return false;
}

var dataIFrame;

function submitFile(form, container, msg_owner)
{	
	document.messageText = '';
	currentForm = $(msg_owner) || form;

	createMessage($(currentForm), 'Processing...');

	if (!dataIFrame)
	{
		dataIFrame = new IFrame({
			id: 'formUpload',
			styles: {
				display: 'none'
			}
		});
		
		dataIFrame.inject($(document.body));
	
		dataIFrame.addEvent('load', function() {
			var IFrameObj = this;

			if (IFrameObj.contentDocument) {
				// For NS6 
				IFrameDoc = IFrameObj.contentDocument; 
			} else if (IFrameObj.contentWindow) {
				// For IE5.5 and IE6
				IFrameDoc = IFrameObj.contentWindow.document;
			} else if (IFrameObj.document) {
				// For IE5
				IFrameDoc = IFrameObj.document;
			}

			if (IFrameDoc.location.href != 'about:blank')
			{
				html = $(IFrameDoc.body).get('html');
	
				if (html)
				{
					var scripts = '';
					html = html.replace(/\[script[^\]]*\]([\s\S]*?)\[\/script\]/gi, function(){
						scripts += arguments[1] + '\n';
						return '';
					});
					
					if (container && html)
					{
						$(container).set('html', html);
					}
	
					$exec(scripts);
				}
	
				(function(){createMessage($(currentForm));}).delay(50); // need to set a delay - FF bug
			}
		});
	}

	form.target = dataIFrame.id;

	(function(){form.submit()}).delay(150); // need to set a delay - IE bug
	
	return false;
}

function clearForm(form)
{
	if (form)
	{
		targetForm = form;
	}
	else if (currentForm)
	{
		targetForm = currentForm;
	}

	if (targetForm)
	{
		var elements = getFormElements($(targetForm));
		
		elements.each(function(element)
		{
			switch (element.get('tag'))
			{
				case 'select':
					if (element.multiple)
					{
						element.value = null;
					}
					else
					{
						element.value = '';
					}
					element.fireEvent('change');
					
					break;
					
				case 'textarea': 
					element.value = element.defaultValue;
					element.fireEvent('change');
					
					break;
					
				case 'input': 
					if (['checkbox', 'radio'].contains(element.type))
					{
						element.checked = element.defaultChecked; 
						element.fireEvent('click');
					}
					else if (['text', 'password', 'file'].contains(element.type))
					{
						element.value = element.defaultValue;
						element.fireEvent('change');
					}
					else if (element.type == 'hidden' && element.className == 'reset')
					{
						element.value = element.defaultValue;
						element.fireEvent('change');
					}
					
					break;
			}
		});
			
		var elements = $(targetForm).getElements(".clearable");

		elements.each(function(element)
		{
			if (element.get('tag') == 'input')
			{
				element.value = element.defaultValue;
			}
			
			element.fireEvent('change');
		});
	}

	return false;
}

function popupWindow(url, width, height, scrollbars, left, top, id)
{
	width = width || 500;
	height = height || 500;
	scrollbars = scrollbars || 'yes';
	left = left || 200;
	top = top || 100;

	day = new Date();

	if (!id)
	{
		id = day.getTime();
	}

	eval("page" + id + " = self.open(url, '" + id + "','scrollbars="+ scrollbars +",width="+ width +",height="+ height +",left = "+ left +",top = "+ top +"');");
	eval("page" + id +".focus()");

	return false;
}

function trim(str)
{
	return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

function UpdateContent(container, url, method, init_data)
{
	if (init_data)
	{
		document.messageText = '';
		currentForm = $(container);

		createMessage($(currentForm), 'Processing...');
	}

	new Request.HTML({
		url: url,
		evalScripts: false,
		method: method || 'get',
		data: init_data ? $(container) : null,
		onSuccess: function(tree, elements, html, javascript) {
			html = trim(html);
			
			if (container && html)
			{
				$(container).set('html', html);
			}

			$exec(javascript);
			
			if (init_data)
			{
				(function(){createMessage($(container));}).delay(50); // need to set a delay - FF bug
			}
		},
		onFailure: function() 
		{
			createMessage($(container), 'Request failed.');
		}
	}).send();

	return false;
}

function getFormElements(form)
{
	return $$(form.getElements("input"), form.getElements("select"), form.getElements("textarea"));
}

function goTo(url)
{
	document.location.href = url;
}

function setState(state, elements, type)
{
	var type = type || 'disabled';
	
	$$(elements).each(function(el){
	    el.setProperty(type, state);
	}); 
}

function replaceUrl(obj)
{
	if (obj.href)
	{
		window.location.replace(obj.href);
	}
	
	return false;
}

var Toggler = new Class({

	Extends: Fx.Elements,

	initialize: function(togglers, elements, handlers){
		this.togglers = $$(togglers);
		this.elements = $$(elements);
		this.handlers = $$(handlers);

		for (var i = 0, l = this.togglers.length; i < l; i++) 
		{
			this.togglers[i].addEvent('click', this.display.bind(this, i));
		}
	},

	display: function(id){

		var class_active = 'toggler_item_active';
		var class_handler_active = 'toggler_handle_active';

		for (var i = 0, l = this.elements.length; i < l; i++) 
		{
			if (i != id)
			{
				this.elements[i].removeClass(class_active);
				this.handlers[i].removeClass(class_handler_active);
			}
		}

		this.elements[id].toggleClass(class_active);
		this.handlers[id].toggleClass(class_handler_active);
	}
});
				
var Tabs = new Class({

	Extends: Fx.Elements,

	initialize: function(togglers, elements)
	{
		this.togglers = $$(togglers);
		this.elements = $$(elements);

		for (var i = 0, l = this.togglers.length; i < l; i++) 
		{
			this.togglers[i].addEvent('click', this.display.bind(this, i));
		}
		
		if (this.togglers.length)
		{
			this.togglers[0].fireEvent('click');
		}
	},

	display: function(id)
	{
		var class_active = 'tabs_container_active';
		var class_toggler_active = 'tabs_handle_active';

		if (this.elements[id].hasClass(class_active))
		{
			return;
		}
		
		for (var i = 0, l = this.elements.length; i < l; i++) 
		{
			if (i != id)
			{
				this.elements[i].removeClass(class_active);
				this.togglers[i].removeClass(class_toggler_active);
			}
		}

		this.elements[id].toggleClass(class_active);
		this.togglers[id].toggleClass(class_toggler_active);
	}
});
				
function checkLength(obj, status, maxLength)
{
	var maxLength = maxLength || 160;
	
	if (obj.value.length > maxLength)
	{
		obj.value = obj.value.substr(0, maxLength);
	}
	
	$(status).set('html', maxLength - obj.value.length);
}

function itemClicked(node)
{
	if (node)
	{
		markNode(node, !node.data.checked);
		markSubNodes(node);
		node.update(true);
		checkParentNode(node);
	}
}

function initTree(id, name)
{
	return new MooTreeControl({
		div: id,
		mode: 'folders',
		grid: false,
		theme: 'images/mootree.gif',
		onClick: function(node) {
			itemClicked(node);
		}
	},{
		text: name,
		open: true
	});
}

function getPhones(obj, draft)
{
	var phones = new Array();
	
	if (tree.root.nodes)
	{
		tree.root.nodes.forEach(function(group) {
			if (group.nodes)
			{
				group.nodes.forEach(function(phone) {
					if (phone.data.checked)
					{
						phones.push(phone.id);
					}
				});
			}
		});
		
		$(obj).value = phones.join(',');
	}
	
	if (phones.length && !draft)
	{
		return confirm('Are you sure you want to send ' + phones.length + ' message(s)?');
	}
	else
	{
		return true;
	}
}

function markNode(node, state)
{
	if (state)
	{
		node.data.checked = true;
		node.data.marked = false;
		node.icon = node.control.theme + '#15';
	}
	else
	{
		node.data.checked = false;
		node.data.marked = false;
		node.icon = node.control.theme + '#11';
	}
	
	if (node.parent && node.parent != node.control.root)
	{
		node.parent.amount = state ? node.parent.amount + 1 : Math.max(node.parent.amount - 1, 0);
	}
}

function markParent(node, state)
{
	if (state)
	{
		node.data.marked = true;
		node.data.checked = false;
		node.icon = node.control.theme + '#16';
	}
	else
	{
		node.data.marked = false;
		node.data.checked = false;
		node.icon = node.control.theme + '#11';
	}
}

function markSubNodes(node)
{
	if (node.nodes.length)
	{
		node.nodes.forEach(function(sub_node) {
			sub_node.icon = node.icon;
			sub_node.data.checked = node.data.checked;
			
			markSubNodes(sub_node);
		});
	}
	
	if (node != node.control.root)
	{
		node.amount = node.data.checked ? node.nodes.length : 0;
	}
}

function checkParentNode(node)
{
	if (node.parent)
	{
		var checked = 0;
		var marked = 0;
		
		node.parent.nodes.forEach(function(sub_node) {
			if (sub_node.data.checked && !sub_node.data.marked)
			{
				checked++;
			}
			
			if (sub_node.data.marked)
			{
				marked++;
			}
		});

		if (checked == node.parent.nodes.length)
		{
			markNode(node.parent, true);
		}
		else if (checked > 0 || marked > 0)
		{
			markParent(node.parent, true);
		}
		else if (!marked)
		{
			markParent(node.parent, false);
		}
		else
		{
			markNode(node.parent, false);
		}
		
		node.parent.update(false);
		
		checkParentNode(node.parent);
	}
}

function applyChecks(obj)
{
	if ($(obj).value)
	{
		$(obj).value.split(',').forEach(function(id) {
			var node = tree.get(id);

			if (node)
			{
				itemClicked(node);
			}
		});
	}
	else
	{
		markNode(tree.root, false);
		
		if (tree.root.nodes)
		{
			tree.root.nodes.forEach(function(group) {
				markNode(group, false);
				if (group.nodes)
				{
					group.nodes.forEach(function(phone) {
						markNode(phone, false);
					});
				}
			});
		}

		tree.root.update(true);
	}
}

function highlightItem(id)
{
	var obj = $(id);

	if (obj)
	{
		obj.highlight('#abe3f7');
	}
}


function addUploadFile(form, input_src, input_dst)
{	
	var cur_input_src = $(input_src);
	
	cur_input_src.clone(true, true).injectAfter(cur_input_src);
	
	var id = $(input_dst).get('id');

	cur_input_src.replaces($(input_dst)).set({'id': id, 'name': 'file'});
	
	$(form).onsubmit.run();
	
	return false;
}

function displayLayer(layer, state)
{
	$(layer).setStyle('display', state ? 'block' : 'none');
}

function printopen(url)
{
	var width = 700;
	var height = screen.height-200;
	
	var printWin = popupWindow(url, width, height, 1, (screen.width/2 - width/2), 20, 'guestcard');
}

