/*
 * Common - 2009.06.19
 */


function MCPPEventRegister(object, eventName, handler)
{
	if (object.addEventListener)
		object.addEventListener(eventName, handler, false);
	else if (object.attachEvent)
		object.attachEvent('on' + eventName, handler);
}

function MCPPEventUnregister(object, eventName, handler)
{
	if (object.removeEventListener)
		object.removeEventListener(eventName, handler, false);
	else if (object.detachEvent)
		object.detachEvent('on' + eventName, handler);
}

function MCPPEventStopPropagation(event)
{
	if (event.stopPropagation)
		event.stopPropagation();
	else
		event.cancelBubbel = true;
	
	if (event.preventDefault)
		event.preventDefault();
	else
		event.returnValue = false;
}

function MCPPSetOpacity(object, opacity)
{
	if (opacity < 1.0 && opacity > 0.0)
	{
		object.style.display = "block";
		object.style.opacity = opacity;
		object.style.MozOpacity = opacity;
		object.style.filter = "alpha(opacity=" + (opacity * 100) + ")";
	}
	else if (opacity >= 1.0)
	{
		object.style.display = "block";
		
		MCPPRemoveStyle(object, 'opacity');
		MCPPRemoveStyle(object, 'MozOpacity');
		MCPPRemoveStyle(object, 'filter');
	}
	else if (opacity <= 0.0)
	{
		object.style.display = "none";
		
		MCPPRemoveStyle(object, 'opacity');
		MCPPRemoveStyle(object, 'MozOpacity');
		MCPPRemoveStyle(object, 'filter');
	}
}

function MCPPRemoveStyle(object, style)
{
	if (object.style.removeAttribute)
		object.style.removeAttribute(style);
	else
		object.style.removeProperty(style);
}

function MCPPGetElementByClassName(parent, className)
{
	if (parent)
	{
		var enumerator = parent.childNodes;
		
		for (i = 0; i < enumerator.length; ++i)
		{
			if (enumerator[i].className == className)
				return enumerator[i];
		}
	}
	
	return null;
}

function MCPPRemoveOverflow(id, tagName, className)
{
	var container = document.getElementById(id);
	
	if (container)
	{
		return MCPPRemoveOverflowFromContainer(container, tagName, className);
	}
}

function MCPPRemoveOverflowFromContainer(container, tagName, className)
{
	var enumerator = container.getElementsByTagName(tagName);
	var i = enumerator.length;
	
	while (container.scrollHeight > container.clientHeight && i > 0)
	{
		var item = enumerator[--i];
		
		if (item.className == className)
			item.parentNode.removeChild(item);
	}
}

var vMCPPOnFormSubmits = new Array();

function MCPPAddPlaceholder(input, text, color, trim)
{
	input._didfocus = function()
	{
		if (input._placeholder)
		{
			input._placeholder = false;
			input.value = '';
			MCPPRemoveStyle(input, 'color');
		}
	};
	
	input._didblur = function()
	{
		input._placeholder = false;
		if (MCPPTrim(input.value) == '')
		{
			input._placeholder = true;
			input.value = text;
			input.style.color = color;
		}
		else if (trim)
		{
			input.value = MCPPTrim(input.value);
		}
	};
	
	MCPPEventRegister(input, "focus", input._didfocus);
	MCPPEventRegister(input, 'blur', input._didblur);
	
	
	MCPPEventRegister(window, 'load', function()
	{
		var mForm = MCPPFormFor(input);
		
		if (mForm)
		{
			vMCPPOnFormSubmits[vMCPPOnFormSubmits.length] = function()
			{
				MCPPEventUnregister(input, "focus", input._didfocus);
				MCPPEventUnregister(input, 'blur', input._didblur);
				
				if (input._placeholder)
					input.value = '';
				
				return true;
			}
			
			mForm.onsubmit = function(e)
			{
				for (var i = 0; i < vMCPPOnFormSubmits.length; ++i)
					vMCPPOnFormSubmits[i]();
			}
		}
	});
	
	
	input._didblur();
}

function MCPPFormFor(input)
{
	var mForm = input.parentNode;
	
	while (mForm.tagName != 'FORM')
	{
		mForm = mForm.parentNode;
	}
	
	return mForm;
}

function MCPPInitPlaceholder(inputId, text, color, trim)
{
	return MCPPAddPlaceholder(document.getElementById(inputId), text, color, trim)
}

function MCPPTrim(string)
{
	return string.replace(/^\s+|\s+$/g, '');
}

function MCPPInitSelectSearch(selectId, searchId, staticSize, partialMatch)
{
	var select = document.getElementById(selectId);
	var search = document.getElementById(searchId);
	
	var districts = new Array()
	var options = select.getElementsByTagName('option');
	
	for (var i = 0; i < options.length; ++i)
	{
		districts[i] = new Array;
		
		districts[i]['name'] = options[i].innerHTML;
		districts[i]['code'] = options[i].value;
		districts[i]['selected'] = options[i].selected;
	}
	
	search._didchange = function()
	{
		while (select.hasChildNodes())
			select.removeChild(select.firstChild);
		
		var size = 0;
		
		for (var i = 0; i < districts.length; ++i)
		{
			if (/*districts[i]['selected'] ||*/
					simplify(districts[i]['name'], partialMatch)
						.indexOf(simplify(search.value, partialMatch)) != -1)
			{
				var option = document.createElement('option');
				
				option.innerHTML = districts[i]['name'];
				option.value = districts[i]['code'];
				option.selected = districts[i]['selected'];
				
				select.appendChild(option);
				
				++size;
			}
		}
		
		if (!staticSize)
		{
			if (size >= 10 && size <= 30) size = 10;
			else if (size > 30) size = 1;
			else if (size <= 1) size = 2;
			
			select.size = size;
		}
	};
	
	MCPPEventRegister(search, 'keyup', search._didchange);
	
	MCPPEventRegister(search, 'blur', function()
	{
		if (!select.hasChildNodes())
		{
			search.value = '';
			search._didchange();
		}
	});
	
	MCPPEventRegister(search, 'keydown', function(e)
	{
		if (e.keyCode == 13)
		{
			if (select.children.length == 1 && __doPostBack)
			{
				search._placeholder = true;
				search.value = '';
				
				setTimeout('__doPostBack(\'' + selectId + '\',\'\')', 0)
			}
			else
				select.focus();
		}
		
		return true;
	});
	
	search._didchange();
	
	function simplify(s, partialMatch)
	{
		var a = s.split(' ');
		var r = ' ';
		
		for (var i = 0; i < a.length; ++i)
			if (a[i] != '')
				r += a[i].toUpperCase() + ' ';
		
		if (partialMatch)
			return r.substring(1, r.length - 1);
		else
			return r.substring(0, r.length - 1);
	}
}


