function isAlien(a) {
   return isObject(a) && typeof a.constructor != 'function';
}

function isArray(a) {
    return isObject(a) && a.constructor == Array;
}

function isBoolean(a) {
    return typeof a == 'boolean';
}

function isEmpty(o) {
    var i, v;
    if (isObject(o)) {
        for (i in o) {
            v = o[i];
            if (isUndefined(v) && isFunction(v)) {
                return false;
            }
        }
    }
    return true;
}

function isFunction(a) {
    return typeof a == 'function';
}

function isNull(a) {
    return typeof a == 'object' && !a;
}

function isNumber(a) {
    return typeof a == 'number' && isFinite(a);
}

function isObject(a) {
    return (a && typeof a == 'object') || isFunction(a);
}

function isString(a) {
    return typeof a == 'string';
}

function isUndefined(a) {
    return typeof a == 'undefined';
} 

function defaultBool(a, value) {
	
	value = isUndefined(value) ? false : true;
	
	if (isUndefined(a)) {
		a = value;
	}
	
	return a;
}

function printProperties(obj)
{
	var str=""; //variable which will hold property values
	for(prop in obj)
	{
		str+=prop + " value :"+ obj[prop]+"<br><br>";//Concate prop and its value from object
	}
	return str;
}

function clearForm(_form, use_blank_on_pulldowns) 
{ 

	use_blank_on_pulldowns = defaultBool(use_blank_on_pulldowns, true);
	
	var elements = _form.elements;
	
	for (var i = 0; i < elements.length; i++) {
		
		if (elements[i].tagName == 'INPUT') {	
			if (elements[i].type == "text") {
				elements[i].value = '';
			} else if (elements[i].type == 'checkbox' || elements[i].type == 'radio') {
				elements[i].checked = false;
			} 
		} else if (elements[i].tagName == "TEXTAREA") {
				elements[i].value = '';				
		} else if (elements[i].tagName == "SELECT") {
			if (use_blank_on_pulldowns) {
				if (elements[i].options[0].value == '' || elements[i].options[0].value == '0' || elements[i].options[0].value == 0) {
					elements[i].selectedIndex = 0;
				}
			} else {
				elements[i].selectedIndex = -1;
			}
		}
	}

}

function stripTags(str)
{
	return str.replace(/<.*?>/g, '');
}

function inArray(needle, haystack, strict)
{
	
	if (!haystack) return true;
	
	if (!strict) strict = false;
	
	for (var i = 0; i < haystack.length; i++) {
		
		if (!strict) {
			if (haystack[i] == needle) return true;
		} else {
			if (haystack[i] === needle) return true;
		}
	}
	
	return false;	
}

function isEnter(event)
{
  return event.keyCode == 13;
}

function sure(str)
{
	if (isUndefined(str)) {
		return confirm("Are you sure?");
	} else {
		return confirm(str);
	}
}

function reallySure()
{
	if(confirm("Are you sure (first confirmation)?")) {
		return confirm("Are you really sure you want to do this (second confirmation)?");
	} else {
		return false;
	}
}

function setFocus(obj, _class)
{
  obj.focus();
  
  if (_class) {
  	obj.className = _class;
  }
  
}

function setDefaultFocus(form)
{
	var tmp;
	if (form) {
		tmp = form;	
	} else {
		tmp = document.forms['theForm'];
	}

	for (var i = 0; i < tmp.elements.length; i++) { 
		if (tmp.elements[i].type != 'hidden') {
			//alert(tmp.elements[i].type);
			tmp.elements[i].focus();
			//alert(tmp.elements[i].name);
			break;
		}
	}
}

function errorString(errorStr)
{
	if (!errorStr) {
		return true;
	} else {
		alert(errorStr);
		return false;	
	}				
}

function runRemoteJS(url)
{
	var e = document.createElement( "script" );
	e.src = url;
	e.type = "text/javascript";
	document.getElementsByTagName("head")[0].appendChild(e);
}

function getCheckedRadioChoice(radio_array)
{
	for (var i = 0; i < radio_array.length; i++) {
		if (radio_array[i].checked)
			return radio_array[i];
	}
	return false;
}

function getCheckedCheckboxChoices(checkbox_array)
{
	var tmp = new Array();
	for (var i = 0; i < checkbox_array.length; i++) {
		if (checkbox_array[i].checked)
			tmp.push(checkbox_array[i]);
	}
	return tmp;	
}

function getSelectedSelectChoice(select_array)
{
	for (var i = 0; i < select_array.length; i++) {
		if (select_array[i].selected)
			return select_array[i];
	}
	return false;
}

function getSelectedSelectChoices(select_array)
{
	var tmp = new Array();
	for (var i = 0; i < select_array.length; i++) {
		if (select_array[i].selected)
			tmp.push(select_array[i]);
	}
	return tmp;	
}

function getSingleValue(control)
{
	if (control.value) {
		value = control.value;
	} else if (_x = getSelectedSelectChoice(control)) {
		value = _x.text;	
	} else if (_x = getCheckedRadioChoice(control)){
		value = _x.value;	
	} else {
		value = '';
	}
	
	return value;
}

function getMultipleValues(control, join_array_with)
{
	
	var tmp = new Array();
	
	if (_x = getCheckedCheckboxChoices(control)) {
		
		for (var i = 0; i < _x.length; i++) {
			tmp.push(_x[i].value);	
		}
			
	} else if (_x = getSelectedSelectChoices(control)) {

		var tmp = new Array();

		for (var i = 0; i < _x.length; i++) {
			tmp.push(_x[i].text);	
		}
		
	}	
	
	if (join_array_with) {
		if (tmp.length) 
			return tmp.join(join_array_with);
		else
			return ''; 		
	} else {
		return tmp;	
	}
	
}

function setSelectedSelectChoice(select_array, value)
{
	for (var i = 0; i < select_array.length; i++) {
		if (select_array[i].value == value) {
			select_array[i].selected = true;
			return true;
		}
	}
	return false;
}

function URLencode(str) 
{
	return escape(str).replace(/\+/g, '%2C').replace(/\"/g,'%22').replace(/\'/g, '%27');
}

function setPointer(theRow, classn)
{
	if (typeof(theRow.style) == 'undefined') {
		return false;
		
	}
	theRow.className = classn;
}

function insertAtCursor(myField, myValue) {
	
	//IE support
	if (document.selection) {
		myField.focus();
		sel = document.selection.createRange();
		sel.text = myValue;
	}
	//MOZILLA/NETSCAPE support
	else if (myField.selectionStart || myField.selectionStart == '0') {	
		replaceSelection(myField,myValue);
	} else {
		myField.value += myValue;
	}
	
}

function getSelectionParts(controlObject) {
	
	// IE
	if (document.selection) {
		// set 0th element to be the same as for a regex to be consistent.
		var parts = [controlObject.value, '', '', ''];
		// arbitrary marker so we know what to replace.
		var textMarker = '#$%^%$#';
		var textRange = document.selection.createRange()
		// if it's not this control, then exit.
		if (textRange.parentElement() != controlObject) return null;
		parts[2] = textRange.text;
		textRange.text = textMarker;
		splitMarker = controlObject.value.split(textMarker);
		textRange.moveStart('character', -textMarker.length);
		textRange.text = parts[2];
		parts[1] = splitMarker[0];
		parts[3] = splitMarker[1];
	// MOZILLA
	} else {
		if (controlObject.selectionStart == controlObject.selectionEnd) return null;
		parts = (new RegExp('([\x00-\xff]{'+controlObject.selectionStart+'})([\x00-\xff]{'+(controlObject.selectionEnd - controlObject.selectionStart)+'})([\x00-\xff]*)')).exec(controlObject.value);
	}
	return parts;
	
}

function moveCursor(input, delta)
{
	if (document.selection) {
		var range = document.selection.createRange();
		if (range.parentElement() == input) {
			range.moveStart('character', delta);
			range.moveEnd('character', delta);	
			range.select();
		}
	} else if (input.setSelectionRange) {
		var selectionStart = input.selectionStart;
		var selectionEnd = input.selectionEnd;		
		setSelectionRange(input, selectionStart + delta, selectionStart + delta);
	}
}

function insertTag(controlObject, tagName, tagEndName, tagLeft, tagRight, noEndTag) {

	if (!tagEndName) tagEndName = tagName;	
	
	if (noEndTag) noEndTag = true; else noEndTag = false;	
	
	if (!tagLeft) tagLeft = '{';
	if (!tagRight) tagRight = '}';
	
	selectionParts = getSelectionParts(controlObject);
	
	endTag = tagEndName ? tagEndName : tagName;
	
	if (!selectionParts) {
		insertAtCursor(controlObject, tagLeft + tagName + tagRight + '' + (!noEndTag ? (tagLeft + '/' + endTag + tagRight) : ''));
		if (!noEndTag)
			moveCursor(controlObject, -endTag.length - 3);
	} else {
		replaceSelection(controlObject, tagLeft + tagName + tagRight + selectionParts[2] + (!noEndTag ? (tagLeft + '/' + endTag + tagRight) : ''));
	}	
}

function setSelectionRange(input, selectionStart, selectionEnd) {
	if (input.setSelectionRange) {
		input.focus();
		input.setSelectionRange(selectionStart, selectionEnd);
	}
	else if (input.createTextRange) {
		var range = input.createTextRange();
		range.collapse(true);
		range.moveEnd('character', selectionEnd);
		range.moveStart('character', selectionStart);
		range.select();
	}
}

function getSelectionText(input)
{
	if (input.setSelectionRange) {	
		var selectionStart = input.selectionStart;
		var selectionEnd = input.selectionEnd;
		if (selectionStart && selectionEnd) {
			return input.value.substring(selectionStart, selectionEnd);			
		} else {
			return '';	
		}
	} else {
		var range = document.selection.createRange();
		if (range.parentElement() == input) {
			return range.text;
		} else {
			return '';	
		}
	}
}

function replaceSelection (input, replaceString) {
	var scrollPos = input.scrollTop;
	if (input.setSelectionRange) {
		var selectionStart = input.selectionStart;
		var selectionEnd = input.selectionEnd;
		input.value = input.value.substring(0, selectionStart) + replaceString + input.value.substring(selectionEnd);		
		if (selectionStart != selectionEnd){ 
			setSelectionRange(input, selectionStart, selectionStart + replaceString.length);
		} else {
			setSelectionRange(input, selectionStart + replaceString.length, selectionStart + replaceString.length);
		}
	} else if (document.selection) {
	
		var range = document.selection.createRange();
		
		if (range.parentElement() == input) {
			var isCollapsed = range.text == '';
			range.text = replaceString;
			
			if (!isCollapsed)  {
				range.moveStart('character', -replaceString.length);
				range.select();
			}
		}
	}
	input.scrollTop = scrollPos;
}

function processTabs(event, obj) {
	var tabKeyCode = 9;
	if (event.keyCode == tabKeyCode) {
		var selectedText = getSelectionText(obj);
		
		if (event.shiftKey) {
			if (selectedText) {
				replaceSelection(obj, selectedText.replace(/\t(.*)/g, '$1'));
			} else {
//				replaceSelection(obj, String.fromCharCode(tabKeyCode));
			}
		} else {
			if (selectedText) {
				replaceSelection(obj, selectedText.replace(/(.+)/g, String.fromCharCode(tabKeyCode) + '$1'));
			} else {
				replaceSelection(obj, String.fromCharCode(tabKeyCode));
			}
		}
//		setTimeout("document.getElementById('"+obj.id+"').focus();", 0);
		setTimeout(function () { obj.focus(); }, 0);	// works if even if "id" attribute isn't set
		return false;
	}
}

function hideWindow(id)
{
	document.getElementById(id).style.visibility = 'hidden';
}

function showWindow(id)
{
	document.getElementById(id).style.visibility = 'visible';
}

function dd(e)
{
	if (!ddEnabled) return;
	whichDog.style.left = isIE ? nowX + event.clientX-offsetx : nowX + e.clientX - offsetx; 
	whichDog.style.top = isIE ? nowY + event.clientY-offsety : nowY + e.clientY - offsety;
	return false;  
}

function removeHandler(target, eventName, handler) 
{
	if (target.removeEventListener) {
		target.removeEventListener(eventName, handler, false);
	} else if (target.detachEvent) {
		target.detachEvent("on" + eventName, handler);
	} else return false;
}

function addHandler(target, eventName, handler) 
{
	if (target.addEventListener) {
		target.addEventListener(eventName, handler, false);
	} else if (target.attachEvent) {
		target.attachEvent("on" + eventName, handler);
	} else return false;
}

function getValue(thePrompt, defaultValue)
{
	if (isUndefined(defaultValue)) {
		defaultValue = '';	
	}
	
	return  prompt(thePrompt, defaultValue);
}

function hidePseudoHTMLAll(id)
{
	document.getElementById('__' + id + '_preview').style.visibility = 'hidden';
	document.getElementById('__' + id + '_code').style.visibility = 'hidden';
	document.getElementById('__' + id + '_edit').style.visibility = 'hidden';
	document.getElementById('__' + id + '_spell').style.visibility = 'hidden';
}

function goClick(id, action, target)
{
  var the_form = document.getElementById('__' + id).form;
  
  var oldTarget = the_form.target;
  var oldAction = the_form.action;
  
  the_form.target = target;
  the_form.action = action;
  
  the_form.submit();
  
  the_form.target = oldTarget;
  the_form.action = oldAction;
}

function showPseudoHTMLPreview(id, add_params, callback)
{
	var the_id = document.getElementById('__' + id);
	
	if (isFunction(callback)) callback.call(the_id, id, add_params);
	hidePseudoHTMLAll(id);
	goClick(id, './preview.php?action=preview&text=' + escape(id) + (add_params ? '&' + add_params : ''), '__' + id + '_iframe_preview');
	document.getElementById('__' + id + '_preview').style.visibility = 'visible';
	document.getElementById('__' + id + '_iframe_preview').style.width = document.getElementById('__' + id + '_container').offsetWidth;
	document.getElementById('__' + id + '_iframe_preview').style.height = document.getElementById('__' + id + '_container').offsetHeight;
}

function showPseudoHTMLCode(id, add_params, callback)
{
	var the_id = document.getElementById('__' + id);
	
	if (isFunction(callback)) callback.call(the_id, id, add_params);
	hidePseudoHTMLAll(id);
	goClick(id, './preview.php?action=code&text=' + escape(id) + (add_params ? '&' + add_params : ''), '__' + id + '_iframe_code');
	document.getElementById('__' + id + '_code').style.visibility = 'visible';
	document.getElementById('__' + id + '_iframe_code').style.width = document.getElementById('__' + id + '_container').offsetWidth;
	document.getElementById('__' + id + '_iframe_code').style.height = document.getElementById('__' + id + '_container').offsetHeight;
}

function showSpellCheck(id, tab_select_counter)
{
	hidePseudoHTMLAll(id);
	goClick(id, './spell_check.php?action=code&text=' + escape(id) + '&tab_select_counter=' + tab_select_counter, '__' + id + '_iframe_spell');	
	document.getElementById('__' + id + '_spell').style.visibility = 'visible';
	document.getElementById('__' + id + '_iframe_spell').style.width = document.getElementById('__' + id + '_container').offsetWidth;
	document.getElementById('__' + id + '_iframe_spell').style.height = document.getElementById('__' + id + '_container').offsetHeight;
}

function showPseudoHTMLEdit(id)
{
	hidePseudoHTMLAll(id);
	document.getElementById('__' + id + '_edit').style.visibility = 'visible';
}

function setHTMLEdit(id, text, index)
{
	document.getElementById('__' + id).value = text;
}

function changeTabSelectMenu(section, counter)
{
	
	for  (x=0; document[('ts_left' + x) + '_' + counter]; x++) {
		document[('ts_left'+x)+ '_' + counter].src = '/shared_dir/editor/pics/tabselect/tab_left.gif';
		document[('ts_right'+x)+ '_' + counter].src = '/shared_dir/editor/pics/tabselect/tab_right.gif';
		document.getElementById(('ts_middle'+x)+ '_' + counter).style.backgroundImage = "url(/shared_dir/editor/pics/tabselect/tab_middle.gif)";
		document.getElementById(('ts_tab'+x)+ '_' + counter).style.color = "#000000";								
	}
	
	document[('ts_left'+section)+ '_' + counter].src = '/shared_dir/editor/pics/tabselect/tab_left_blue.gif';
	document[('ts_right'+section)+ '_' + counter].src = '/shared_dir/editor/pics/tabselect/tab_right_blue.gif';
	document.getElementById(('ts_middle'+section)+ '_' + counter).style.backgroundImage = "url(/shared_dir/editor/pics/tabselect/tab_middle_blue.gif)";		
	document.getElementById(('ts_tab'+section)+ '_' + counter).style.color = "#ffffff";					
}

function setFileControlDelete(id, value)
{	
	document.getElementById(id).disabled = value;
}

var __tmp_search = new Array();
var __search_timer = null;
var __search_tmp_array = new Array();

function searchPulldownSearch(name, query, options)
{
	__search_name = name;
	__search_query = query;
	__search_options = options;
	
	if (__search_timer) {
		clearTimeout(__search_timer)
	}
		
	__search_timer = setTimeout('_searchPulldownSearch(__search_name, __search_query, __search_options);', 900);		
}

function getSearchPulldownQuery(name)
{
	return document.getElementById('____' + name).value;
}

function _searchPulldownSearch(name, query)
{
	
//	var options = __tmp_search[name];
	var options = $(document.getElementById('____tmp_search[' + name + ']')).find('option').clone().get();
	
	var options_length = options.length;
	var query_tolowercase = query.toLowerCase();

	var the_name = '__' + name;
	var the_control = document.getElementById(the_name);
	
	var selected = $(the_control).val();	// remember selection option
	
	var is_multiple = (the_control.type == 'select-multiple');
	
	if (is_multiple) {
		
		var the_control_options_length = the_control.options.length;

		if (isUndefined(__search_tmp_array[name])) {
			__search_tmp_array[name] = new Array();
		}
		
		for (var i = 0; i < the_control_options_length; ++i) {
			
			if (the_control.options[i].selected) {
			
				__search_tmp_array[name].push(the_control.options[i].value);
					
			}
			
		}	
	
		the_control.selectedIndex = -1;
		
	}
	
	the_control.options.length = 0;
	
	for (var i = 0; i < options_length; ++i) {
		if (options[i].text.toLowerCase().indexOf(query_tolowercase) != -1) {
			if (is_multiple)
				the_control.options[the_control.options.length] = new Option(options[i].text, options[i].value, inArray(options[i].value, __search_tmp_array[name]), inArray(options[i].value, __search_tmp_array[name]));			
			else {
//				options[i].innerHTML = html_entity_decode(options[i].innerHTML); // does not work in ie since options[i] does not have innerHTML (not part of DOM tree), better off setting innerHTML = text after its in the DOM tree
				$(the_control).append(options[i]);
//				the_control.options[the_control.options.length] = options[i];
//				the_control.options[the_control.options.length-1].innerHTML = the_control.options[the_control.options.length-1].text;
			}
		}
	}
	
	$(the_control).val(selected); // reselect selected option
	
	if (query == '' && is_multiple) {
		__search_tmp_array[name] = new Array();
	}
	
}

var __checkboxlist_tmp_search = new Array();
var __checkboxlist_search_timer = null;
var __checkboxlist_search_tmp_array = new Array();

function searchCheckboxListSearch(name, query, options)
{
	__checkboxlist_search_name = name;
	__checkboxlist_search_query = query;
	__checkboxlist_search_options = options;
	
	if (__checkboxlist_search_timer) {
		clearTimeout(__checkboxlist_search_timer)
	}
		
	__checkboxlist_search_timer = setTimeout('_searchCheckboxListSearch(__checkboxlist_search_name, __checkboxlist_search_query, __checkboxlist_search_options);', 900);		
}

function _searchCheckboxListSearch(name, query)
{	
	var query_tolowercase = query.toLowerCase();
	var collection = document.getElementsByName('______' + name);
	var collection_length = collection.length;
//	alert(collection_length);
	for (var i = 0; i < collection_length; i++) {
		
		var text_to_search = collection[i].innerHTML.toLowerCase().replace(/<.*?>\s*/g, ' ');
		
		if (text_to_search.indexOf(query_tolowercase) == -1) {
			collection[i].style.display = 'none';	
		} else {
			collection[i].style.display = 'block';	
		}
		
	}
}


function searchCheckboxListCheckAllDisplayed(name)
{	
	var collection = document.getElementsByName('______' + name);
	var collection_length = collection.length;
	
	for (var i = 0; i < collection_length; i++) {

		if (collection[i].style.display != 'none' && collection[i].childNodes.item(1).disabled != true) {
			collection[i].childNodes.item(1).checked = true;
		}
		
	}
}

function searchCheckboxListUncheckAllDisplayed(name)
{	
	var collection = document.getElementsByName('______' + name);
	var collection_length = collection.length;

	for (var i = 0; i < collection_length; i++) {
		
		if (collection[i].style.display != 'none') {
			collection[i].childNodes.item(1).checked = false;
		}
		
	}
}


function searchCheckboxListTableSearch(name, query, options)
{
	__checkboxlist_search_name = name;
	__checkboxlist_search_query = query;
	__checkboxlist_search_options = options;
	
	if (__checkboxlist_search_timer) {
		clearTimeout(__checkboxlist_search_timer)
	}
		
	__checkboxlist_search_timer = setTimeout('_searchCheckboxListTableSearch(__checkboxlist_search_name, __checkboxlist_search_query, __checkboxlist_search_options);', 900);		
}

function _searchCheckboxListTableSearch(name, query)
{	
	var query_tolowercase = query.toLowerCase();
	var collection = document.getElementsByName('______' + name);
	var collection_length = collection.length;
	
	var display_checked_input = (document.getElementsByName('______' + 'display_checked_' + name));
	if (!display_checked_input.length || display_checked_input[0].checked) display_checked = true;
	else display_checked = false;
	
	var display_unchecked_input = (document.getElementsByName('______' + 'display_unchecked_' + name));
	if (!display_unchecked_input.length || display_unchecked_input[0].checked) display_unchecked = true;
	else display_unchecked = false;
	
	if (!display_checked && !display_unchecked) display_checked_input[0].checked = display_checked = display_unchecked_input[0].checked = display_unchecked = true;
	
	for (var i = 0; i < collection_length; i++) {
		
		var text_to_search = collection[i].innerHTML.toLowerCase().replace(/<.*?>\s*/g, ' ');
		
		if (text_to_search.indexOf(query_tolowercase) == -1 || 
			(collection[i].childNodes[0].childNodes[0].checked && !display_checked) || 
			(!collection[i].childNodes[0].childNodes[0].checked && !display_unchecked)) {
			collection[i].style.display = 'none';
		} else {
			collection[i].style.display = '';
		}
		
	}
}

function searchCheckboxListTableDisplayChecked(name)
{	
	var collection = document.getElementsByName('______' + name);
	var collection_length = collection.length;

	for (var i = 0; i < collection_length; i++) {
		
		if (collection[i].style.display != 'none' && collection[i].childNodes[0].childNodes[0].disabled != true) {
			if (collection[i].childNodes[0].childNodes[0].checked) collection[i].childNodes[0].childNodes[0].checked = false;
			else collection[i].childNodes[0].childNodes[0].checked = true;	
		}
		
	}
}

function searchCheckboxListTableCheckAllDisplayed(name)
{	
	var collection = document.getElementsByName('______' + name);
	var collection_length = collection.length;
	
	for (var i = 0; i < collection_length; i++) {
		if (collection[i].style.display != 'none' && collection[i].childNodes[0].childNodes[0].disabled != true) {
			collection[i].childNodes[0].childNodes[0].checked = true;
		}
		
	}
}

function searchCheckboxListTableUncheckAllDisplayed(name)
{	
	var collection = document.getElementsByName('______' + name);
	var collection_length = collection.length;

	for (var i = 0; i < collection_length; i++) {
		
		if (collection[i].style.display != 'none' && collection[i].childNodes[0].childNodes[0].disabled != true) {
			collection[i].childNodes[0].childNodes[0].checked = false;	
		}
		
	}
}

function searchCheckboxListTableToggleAllDisplayed(name)
{	
	var collection = document.getElementsByName('______' + name);
	var collection_length = collection.length;

	for (var i = 0; i < collection_length; i++) {
		
		if (collection[i].style.display != 'none' && collection[i].childNodes[0].childNodes[0].disabled != true) {
			if (collection[i].childNodes[0].childNodes[0].checked) collection[i].childNodes[0].childNodes[0].checked = false;
			else collection[i].childNodes[0].childNodes[0].checked = true;	
		}
		
	}
}



function openPopupWindow(url, width, height, left, top, parameters, focus)
{

	if (!left && !top) {
	 	left = 0;
	 	top = 0;
		left = (screen.width / 2) - (width / 2);
		top = (screen.height / 2) - (height / 2);
	 }
	
	 if (!parameters) {
	 	parameters = 'toolbar=no,menubar=no,resizable=yes,scrollbars=no,status=no,location=no';	
	 }

	 if (isUndefined(focus)) {
	 	focus = true;	
	 }
	  
	 var all_parameters = '';
	 
	 if (parameters) {
	 	all_parameters += parameters + ',';
	 }
	 
	 all_parameters += 'left=' + left + ',top=' + top + ',width=' + width + ',height=' + height;
	 
     newWindow = window.open(url, '_blank', all_parameters);
     
     if (focus) {
     	newWindow.focus();	
     }
}

function resizeWindow(width, height)
{
	window.resizeTo(width, height);
}

function closeWindow()
{
	self.close();
}

function isLeapYear(year)
{
	return (year % 4 == 0 || year % 100 == 0);	
}

function getDaysInMonth(year, month)
{
	if (inArray(month, new Array(4,6,9,11))) {
		return 30;	
	} else {
		
		if (month == 2) {
			
			if (isLeapYear(year)) {
				return 29;		
			} else {
				return 28;	
			}
			
		} else {
			return 31;	
		}	
	}
}

function getPageInternalLink(href)
{
	if (!href) {
		href = document.location.href;	
	}
	return href.match(/#(.*)/) ? href.match(/#(.*)/)[1] : null;
}

function updateSimpleDate(name)
{

	var year = document.getElementById('_' + name + '_year').value;
	var month = document.getElementById('_' + name + '_month').value;	
	
	year = (year ? year : '0');
	month = (month ? month : '0');
	
	if (document.getElementById('_' + name + '_day')) {
	
		var day = document.getElementById('_' + name + '_day').value;
		
		day = (day ? day : '0');
		
		var days_in_month = getDaysInMonth(year, month);
		
		var the_control = document.getElementById('_' + name + '_day');
		
		var add_blank = the_control.options[0].text == '';
		
		var old_value = the_control.value;
		
		the_control.options.length = 0;
		
		if (add_blank) {
			the_control.options[the_control.options.length] = new Option('', '');			
		}
	
		for (var i = 1; i <= days_in_month; i++) {
			the_control.options[the_control.options.length] = new Option(i, i);			
		}
		
		the_control.value = old_value;
		
		document.getElementById('_' + name).value = year + '-' + month + '-' + day;
	} else {
    	document.getElementById('_' + name).value = year + '-' + month;
	}
}

var xmlHttp;

function getXMLHttpObject()
{
	if (!isUndefined(xmlHttp)) {
		return true;	
	}
	
	xmlHttp = false;
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
	try {
	  xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
	  try {
	    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	  } catch (e2) {
	    xmlHttp = false;
	  }
	}
	@end @*/
	if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
	  xmlHttp = new XMLHttpRequest();
	}
}

function sendXMLRequest(url, callback_function, method, async) {
  
  if (!method) {
  	method = 'GET';
  }	
	
  if (isUndefined(async)) {
  	async = true
  }
  
  // Open a connection to the server
  xmlHttp.open(method, url, async);

  // Setup a function for the server to run when it's done
  xmlHttp.onreadystatechange = callback_function;

  // Send the request
  xmlHttp.send(null);
}

function getXMLResponseText() {
  if (xmlHttp.readyState == 4) {
    return xmlHttp.responseText;
  } else {
  	return '';
  }
}

function getXMLResponseHeaders() {
  if (xmlHttp.readyState == 4) {
    return xmlHttp.getAllResponseHeaders();
  } else {
  	return '';
  }
}

function getXMLResponseStatus() {
  return xmlHttp.status;
}
 
function runXMLResponseText() {
  if (xmlHttp.readyState == 4) {
    xmlHttp.responseText.eval();
    return true;
  } else {
  	return false;
  }
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

//function addHandler(obj, event, handler) 
//{	
//	if (obj.addEventListener) {
//		//alert(1);
//		obj.addEventListener(event, handler, false);
//	} else if(obj.attachEvent) {
//		//alert(2);
//		obj.attachEvent('on' + event, handler);
//	} else if(window.onload)
//	{ 
//		var oldHandler = eval('obj.on' + event);
//		eval('obj.on' + event) = function piggyBack()
//		{
//			oldHandler();
//			handler();
//		};
//	} else {
//		eval('obj.on' + event) = handler;
//	}
//}

var dropList_active_id = null;
var dropList_active_id_i = null;

var dropList_visible = false;

var dropList_mouse_disabled = false;
var __DL_timer = null;

function containsDOM(container, containee)
{
	
	var isParent = false;
	do {
		if ((isParent = container == containee))
			break;
		
		if (isUndefined(containee) || isUndefined(containee.parentNode)) {
			containee = null;
		} else {
			containee = containee.parentNode;
		}
		//containee = (!isUndefined(containee.parentNode) ? containee.parentNode : null);
	}
	while (containee != null);
	return isParent;
}

function checkMouseEnter(element, evt)
{
	if (element.contains && evt.fromElement) {
		return !element.contains(evt.fromElement);
	} else if (evt.relatedTarget) {
		return !containsDOM(element, evt.relatedTarget);
	}
}

function checkMouseLeave(element, evt)
{
	if (element.contains && evt.toElement) {
		return !element.contains(evt.toElement);
	} else if (evt.relatedTarget) {
		return !containsDOM(element, evt.relatedTarget);
	}
}

function setDLIDOut(event, hide_on_mouse_out)
{
	
	if (checkMouseLeave(document.getElementById(dropList_active_id), event)) {
		
		if (hide_on_mouse_out) { 
			__DL_timer = setTimeout("hideDL()", isBoolean(hide_on_mouse_out) ? 1000 : hide_on_mouse_out);		 	
		} 	
		
	}
	
}

function setActiveDL(id)
{
	if (id != dropList_active_id) {
		hideDL();	
	}
	
	dropList_active_id = id;
	dropList_active_id_i = null;
}

function hideDL()
{	
	if (document.getElementById(dropList_active_id)) {
		document.getElementById(dropList_active_id).style.display = 'none';	
		dropList_visible = false;
	}
	dropList_active_id_i = null;	
}

function clickHideDL(e)
{	
	var tgt = !isUndefined(e.target) ? e.target : window.event.srcElement; 
	
	if (!containsDOM(document.getElementById(dropList_active_id), tgt)) {
		hideDL();
	}
}

function cancelTimer()
{
	clearTimeout(__DL_timer)
}

function setDLID(i, by_mouse)
{	
	by_mouse = defaultBool(by_mouse);

	if (by_mouse && dropList_mouse_disabled) {
		return;
	}
	
	if (document.getElementById(dropList_active_id + '_' + i)) {
		
		if (dropList_active_id != null && dropList_active_id_i != null)	
			setPointer(document.getElementById(dropList_active_id + '_' + dropList_active_id_i), 'dropList_off');

		setPointer(document.getElementById(dropList_active_id + '_' + i), 'dropList_on');		

		dropList_active_id_i = i;

		if (!by_mouse) {
			
			var list_height = document.getElementById(dropList_active_id).style.height.replace(/px/, '');
			
			var list_top = document.getElementById(dropList_active_id).scrollTop;
			var element_top = (document.getElementById(dropList_active_id + '_' + i).offsetTop);
			var element_height = (document.getElementById(dropList_active_id + '_' + i).offsetHeight);
			
			if (list_top < element_top - list_height + element_height) {			
				var _tmp = element_top - list_height + element_height;
				_tmp = _tmp > 0 ? _tmp : 0;
				document.getElementById(dropList_active_id).scrollTop = _tmp;
			} else if (element_top < list_top) {
				var _tmp = element_top;
				document.getElementById(dropList_active_id).scrollTop = _tmp;				
			}
			
			if (i == 0) {
				document.getElementById(dropList_active_id).scrollTop = 0;
			}
			
		}
				
	}
	
	cancelTimer();
}

function clickDLID(i)
{
	if (document.getElementById(dropList_active_id + '_' + i))
		document.getElementById(dropList_active_id + '_' + i).onclick();
}

function dropList(items, the_id, width, padding, spacing, hide_on_mouse_out, javascript_links, topmsg, height, textboxid, ontop)
{	
	var output = '';
	var _width = width ? " width:" + width + "px; " : '';
	var _padding = !isUndefined(padding) ? " padding:" + padding + "px; " : ' ';
	var _spacing = !isUndefined(spacing) ? " margin:" + spacing + "px; " : ' ';
	var _id = the_id ? " id='" + the_id + "' " : ' ';

	var _height = height ? " height:" + height + "px; overflow:auto; " : ' ';
	
	javascript_links = !isUndefined(javascript_links) ? javascript_links : false;
	
	hide_on_mouse_out = !isUndefined(hide_on_mouse_out) && hide_on_mouse_out;
	textboxid = !isUndefined(textboxid) ? textboxid : '';
	ontop = defaultBool(ontop);	
	
	if (ontop && height && textboxid) {
		var _box_pos = findPosY(document.getElementById(textboxid)) + document.getElementById(textboxid).clientHeight;
		var _amount_scrolled = document.body.scrollTop;
		var _browser_height = document.body.clientHeight;
		ontop = ((_box_pos + height) > (_browser_height+_amount_scrolled)); 
		//ontop = false;
	} else {
		ontop = false;
	}
	
	if (ontop) {
		var _textbox_pos = findPosY(document.getElementById(textboxid));
		var _amount_scrolled = document.body.scrollTop;
		if ((_textbox_pos-_amount_scrolled) > height) {
			var _ontop = 'position: relative; top:-' + (height + document.getElementById(textboxid).clientHeight + 4) + 'px;'
		} else {
			var _ontop = '';
		}
	} else {
		var _ontop = '';
	}
	
	output += '<div ' + 'class=\'dropList\'' + _id + 'style="' + _height + _width + _ontop + '" ' + 'onMouseMove="dropList_mouse_disabled = false" onMouseOut="setDLIDOut(event, ' + hide_on_mouse_out + ')"' + '>';

	if (!isUndefined(topmsg)) {
		output += '<div>' + topmsg + '</div>';	
	}		
	
	for (var i = 0; i < items.length; i++) {
		var __id = the_id ? " id='" + the_id + '_' + i + "'" : ' ';
		//output += '<tr>';
		
		if (javascript_links) {
			link_code = "onClick=\"" + items[i][0] + "\"";	
		} else {
			link_code = "onClick=\"location.href='" + items[i][0] + "'\"";	
		}
		
		output += '<div ' + link_code + ' class="dropList_off"' + __id + 'style="' + _padding + _spacing + '" ' + ' onmouseover="setDLID(' + i + ', true);">' + items[i][1] + '</div>';
		//output += '</tr>';
	}
	output += '</div>';
	dropList_visible = true;
	return output;
}

function getDropListItem(id, index)
{
	var tmp = document.getElementById(id + '_' + index);
	_y = String(tmp.onclick).match(/"(.*?)"/);
	return new Array((_y ? _y[1] : ''), stripTags(tmp.innerHTML));
}

function auto_complete(event, str, id, page, onkeyup, textboxid, rightcomplete, ontop)
{
	dropList_mouse_disabled = true;
	onkeyup = defaultBool(onkeyup);
	rightcomplete = defaultBool(rightcomplete);
	ontop = defaultBool(ontop) ? 1 : 0;
	textboxid = !isUndefined(textboxid) ? textboxid : '';
	
	if (onkeyup && textboxid && rightcomplete && dropList_active_id_i != null && event.keyCode == 39) {
		document.getElementById(textboxid).value = getDropListItem(id, dropList_active_id_i)[1];
		hideDL();
		return false;
	}			
	
	if (!onkeyup) {
							
		if (event.keyCode == 38) {

			if (!dropList_visible) {
   				runRemoteJS(page + '?q=' + URLencode(str) + '&select=' + event.keyCode + '&id=' + id + '&textboxid=' + textboxid + '&ontop=' + ontop); 						
			} else if (dropList_active_id_i == 0) {
				hideDL();
			} else {
				setDLID(dropList_active_id_i-1);
			}
			
			return false;
			
		} else if (event.keyCode == 40) {
		
			if (!dropList_visible) {
   				runRemoteJS(page + '?q=' + URLencode(str) + '&select=' + event.keyCode + '&id=' + id + '&textboxid=' + textboxid + '&ontop=' + ontop); 					
			} else if (dropList_active_id_i == null) {		
				setDLID(0);
			} else {
				setDLID(dropList_active_id_i+1);				
			}

			return false;
			
		} else if (event.keyCode == 13) {
		
			if (dropList_active_id_i != null) {
				clickDLID(dropList_active_id_i);
				return false;
			} else {
				return true;	
			}
		
		} else if (event.keyCode == 27) {
		
			hideDL();
			return false;
		
		} else if (event.keyCode == 37) {
		
			return true;
		
		} else if (event.keyCode == 39) {
		
			return true;
		
		}
				
	} else {
				
		if (window.event && navigator.userAgent.indexOf("Opera") == -1 && navigator.appName != 'Safari') {
				
			if (event.keyCode == 38) {
			
				if (dropList_active_id_i == 0) {
					hideDL();
				} else {
					setDLID(dropList_active_id_i-1);
				}
				return false;
				
			} else if (event.keyCode == 40) {
			
				if (!dropList_visible) {
	   				runRemoteJS(page + '?q=' + URLencode(str) + '&select=' + event.keyCode + '&id=' + id + '&textboxid=' + textboxid + '&ontop=' + ontop); 					
				} else if (dropList_active_id_i == null) {		
					setDLID(0);
				} else {
					setDLID(dropList_active_id_i+1);				
				}
				return false;
				
			}		
		}
				
		if (!inArray(event.keyCode, [38,40,13,27,37,39])) {
   			runRemoteJS(page + '?q=' + URLencode(str) + '&select=' + event.keyCode + '&id=' + id + '&textboxid=' + textboxid + '&ontop=' + ontop); 		
		}
		
	}	
}

function getPageX()
{
	return (document.all)?document.body.scrollLeft:window.pageXOffset;
}

function getPageY()
{
	return (document.all)?document.body.scrollTop:window.pageYOffset;
}

function setPagePosition(x, y)
{
	scroll(x,y);
}

function getPageHeight()
{

	if (document.body.scrollHeight > document.body.offsetHeight) {
		return document.body.scrollHeight;
	} else {
		return document.body.offsetHeight;
	}
	
}

function setProgressBarAjax(name, percent) 
{
	document.getElementById(name + '_percent').style.width = percent + '%';
	document.getElementById(name + '_percent_number').innerHTML = document.getElementById(name + '_percent').style.width;	
}

function showUploadProgressBar(id, params) {
	
	if (isUndefined(params)) {
		params = '';	
	}
	
	window.setTimeout('_showUploadProgressBar("' + id + '", "' + params + '")', 1000);
}

function _showUploadProgressBar(id, params) {
	//alert(params);
	document.getElementById('_file_upload_div').innerHTML = '<iframe frameborder="0" scrolling="no" style="border:0px" width="100%" src="' + "/shared_dir/scripts/file_progress_bar.php?UPLOAD_IDENTIFIER=" + id + "&" + params + '"></iframe>';
}

function setClipboardFF(text) {
	var url = [
		'data:text/html;charset=utf-8;base64,PGJvZHk+PC9ib2',
		'R5PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKGZ1',
		'bmN0aW9uKGVuY29kZWQpe3ZhciBzd2ZfZGF0YSA9IFsKICdkYX',
		'RhOmFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoO2Jhc2U2',

		'NCxRMWRUQjJ3JywKICdBQUFCNG5EUGdZbGpBd01qSTRNejAlMk',
		'YlMkY5JTJGZTJaZkJnYUdhV3dNRE1uNUthJywKICdrTU10TjRH',
		'ZGdaZ1NJTXdaWEZKYW01UUFFJTJCQm9iaTFCTG5uTXlDcFB6RW',
		'9oU0dJJywKICdQRnAlMkZBeHNEREJRa3BGWkRGUUZGQ2d1eVM4',

		'QXlqSTRBRVVCaXkwVndBJTNEJTNEJwpdLmpvaW4oIiIpOwpkb2',
		'N1bWVudC5ib2R5LmlubmVySFRNTCA9IFsKICc8ZW1iZWQgc3Jj',
		'PSInLHN3Zl9kYXRhLCciICcsCiAnRmxhc2hWYXJzPSJjb2RlPS',
		'csZW5jb2RlZCwnIj4nLAogJzwvZW1iZWQ+JwpdLmpvaW4oIiIp',
		'Owp9KSgi',btoa(encodeURIComponent(text)+'")</'+'script>')
		].join("");
	var tmp = document.createElement("div");
	tmp.innerHTML = '<iframe src="'+url+'" width="0" height="0"></iframe>';
	with(tmp.style){
		position ="absolute";
		left = "-10px";
		top  = "-10px";
		visibility = "hidden";
	};
	document.body.appendChild(tmp);
	setTimeout(function(){
	document.body.removeChild(tmp)},1000);
}

function setClipboardIE(text) {
	var holdtext = document.createElement("textarea");
	holdtext.innerText = text;
	Copied = holdtext.createTextRange();
	Copied.execCommand("RemoveFormat");
	Copied.execCommand("Copy");	
}

function setClipboard(text) {
	if (window.event) {
		setClipboardIE(text);
	} else{
		setClipboardFF(text);
	}
}

function setClipboardFlash(inElement){
	if(!FlashDetect.installed) {
		setClipboard(inElement);   	
	} else {
  	  	var flashcopier = 'flashcopier';
  		if(!document.getElementById(flashcopier)) {
  		   var divholder = document.createElement('div');
  		   divholder.id = flashcopier;
  		   document.body.appendChild(divholder);
    	}
    	document.getElementById(flashcopier).innerHTML = '';
    	var divinfo = '<embed src="/_clipboard.swf" FlashVars="clipboard='+encodeURIComponent(inElement)+'" width="0" height="0" type="application/x-shockwave-flash"></embed>';
    	document.getElementById(flashcopier).innerHTML = divinfo;
	}
}

function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function padNumber(number,length) {
    var str = '' + number;
    while (str.length < length)
        str = '0' + str;
    return str;
}

//obj can be any valid jquery selector or javascript object
function cloneMe(obj/*, options*/)
{
	/*var o = options || {};
	
	if (o.target) $theObj = $(o.target);
	else */if ($(obj).hasClass('clone_trigger')) $theObj = $(obj).prev();
	else  $theObj = $(obj);
	
	$clonedObj = $theObj.clone().css({/*marginTop: '5px',*/ opacity: 0}).find('input[type=text], textarea').attr('value','').end().find('option').removeAttr('selected').filter(':first').attr('selected', 'selected').end().end();
//	alert($theObj.find('input, select, textarea').get());//.children('input, select, textarea').length);//.attr('value','').length);
//	alert($theObj.siblings('span').length);
	if ($theObj.siblings($theObj.attr('nodeName')).length == 0) {
		$clonedObj.prepend('<div style="height:5px; overflow:hidden;">&nbsp;</div>');
	}
	
	$theObj.after($clonedObj);
//					$clonedObj.hide().insertAfter($theObj);
	
	$clonedObj.animate({opacity: 1},1000)./*contents().filter*/find('input, select').eq(0).focus();
	return $clonedObj;
}

//obj can be any valid jquery selector or javascript object
function removeClone(obj, silent)
{
	if ($(obj).hasClass('clone_remove_trigger')) {
		$theObj = $(obj).parent();
	} else {
		$theObj = $(obj);
	}
	
	$siblings = $theObj.siblings($theObj.attr('nodeName'));
	
	if ($siblings.length > 0) {
		if (silent) {
			$theObj.fadeOut('slow',function () {$theObj.remove(); $siblings.eq(0).children().eq(0).remove('div');});
		} else {
			if (sure("Are you sure you want to remove this?")) $theObj.fadeOut('slow',function () {$theObj.remove(); $siblings.eq(0).children().eq(0).remove('div');});
		}
	}
}

function getCCType(cardnumber, amex, mc, disc, visa, unknown) 
{
	var amex = (amex || 'AMEX'), 
		mc = (mc || 'MASTERCARD'), 
		disc = (disc || 'DISCOVER'), 
		visa = (visa || 'VISA'), 
		unknown = (unknown || 'OTHER');
	
	cardnumber = cardnumber.replace('#[^0-9]#', '');
	
	if (cardnumber.substr(0, 1) == '3') cardtype = amex;
	else if (cardnumber.substr(0, 1) == '6') cardtype = disc;
	else if (cardnumber.substr(0, 1) == '5') cardtype = mc;
	else if (cardnumber.substr(0, 1) == '4') cardtype = visa;
	else cardtype = unknown;
	
	return cardtype;
}

function html_entity_decode(str)
{
	var $el = $('<div style="display:none;"><textarea style="display:none;">' + str + '</textarea></div>')/*.html(str)*/.appendTo('body');
	var txt = $el.find('textarea').val();
//	alert($el.find('textarea').html());
	$el.remove();
	return txt;
}
//
//function print_ar(a, appendTo)
//{
//	appendTo = appendTo || 'body';
//	$el = $(appendTo);
//	
//	str = '';
//	for (var i in a) {
//		if (isObject(a[i])) print_ar(a, $el);
//		else str .= i + ':<div style="display:inline-block;">' + a[i] + "</div>");
//	}
//	
//	$el.append(str);
//}