document.write('<script type="text/javascript" src="/static/yui/yahoo-dom-event.js"></script>');
document.write('<script type="text/javascript" src="/static/yui/utilities.js"></script>');
document.write('<script type="text/javascript" src="/static/yui/dragdrop-min.js"></script>');
document.write('<script type="text/javascript" src="/static/yui/animation-min.js"></script>');
document.write('<script type="text/javascript" src="/static/yui/slider-min.js"></script>');
document.write('<script type="text/javascript" src="/static/yui/container_core-min.js"></script>');
document.write('<script type="text/javascript" src="/static/yui/container-min.js"></script>');
document.write('<script type="text/javascript" src="/static/yui/yahoo-min.js"></script>');
document.write('<script type="text/javascript" src="/static/yui/event-min.js"></script>');
document.write('<script type="text/javascript" src="/static/yui/connection-min.js"></script>');
document.write('<script type="text/javascript" src="/static/yui/menu-min.js"></script>');
document.write('<link type="text/css" rel="stylesheet" href="/static/yui/container.css">');
document.write('<link type="text/css" rel="stylesheet" href="/static/yui/menu.css">');
document.write('<script type="text/javascript" src="/static/ckeditor/ckeditor.js"></script>');

var highestZIndex = 10;
var ajaxSuccess = function(o){
	handleAJAXResult(o);
}   
var ajaxFailure = function(o){   
	alert('Sorry, the background function call failed.');
}   
function ajaxExecuteMainService(methodName, arg1, val1, arg2, val2, arg3, val3, arg4, val4, arg5, val5, arg6, val6, arg7, val7, arg8, val8, arg9, val9, arg10, val10) {
	return ajaxExecuteGet('/mainService_' + methodName + '.action', arg1, val1, arg2, val2, arg3, val3, arg4, val4, arg5, val5, arg6, val6, arg7, val7, arg8, val8, arg9, val9, arg10, val10);
}
function ajaxExecuteMainServiceNoCallback(methodName, arg1, val1, arg2, val2, arg3, val3, arg4, val4, arg5, val5, arg6, val6, arg7, val7, arg8, val8, arg9, val9, arg10, val10) {
	return ajaxExecuteGetNoCallback('/mainService_' + methodName + '.action', arg1, val1, arg2, val2, arg3, val3, arg4, val4, arg5, val5, arg6, val6, arg7, val7, arg8, val8, arg9, val9, arg10, val10);
}
function ajaxExecuteGet(url, arg1, val1, arg2, val2, arg3, val3, arg4, val4, arg5, val5, arg6, val6, arg7, val7, arg8, val8, arg9, val9, arg10, val10) {
	var params = getParamString(arg1, val1, arg2, val2, arg3, val3, arg4, val4, arg5, val5, arg6, val6, arg7, val7, arg8, val8, arg9, val9, arg10, val10);
	if (params != '') url += '?' + params;

	var ajaxCallback =
	{
		cache:false,
		success:ajaxSuccess,
		failure:ajaxFailure
	};

	YAHOO.util.Connect.asyncRequest('GET', url, ajaxCallback);
	return ajaxCallback;
}
function ajaxExecuteGetNoCallback(url, arg1, val1, arg2, val2, arg3, val3, arg4, val4, arg5, val5, arg6, val6, arg7, val7, arg8, val8, arg9, val9, arg10, val10) {
	var params = getParamString(arg1, val1, arg2, val2, arg3, val3, arg4, val4, arg5, val5, arg6, val6, arg7, val7, arg8, val8, arg9, val9, arg10, val10);
	if (params != '') url += '?' + params;

	var ajaxCallback =
	{
		cache:false,
		failure: ajaxFailure
	};

	YAHOO.util.Connect.asyncRequest('GET', url, ajaxCallback);
	return ajaxCallback;
}
function ajaxExecutePost(url, arg1, val1, arg2, val2, arg3, val3, arg4, val4, arg5, val5, arg6, val6, arg7, val7, arg8, val8, arg9, val9, arg10, val10) {
	var postData = getParamString(arg1, val1, arg2, val2, arg3, val3, arg4, val4, arg5, val5, arg6, val6, arg7, val7, arg8, val8, arg9, val9, arg10, val10);
	var ajaxCallback =
	{
		cache:false,
		success:ajaxSuccess,
		failure: ajaxFailure
	};

	YAHOO.util.Connect.asyncRequest('POST', url, ajaxCallback, postData);
	return ajaxCallback;
}
function ajaxExecutePostWithForm(url, form, withFile) {
	var ajaxCallback =
	{
		cache:false,
		success:ajaxSuccess,
		failure: ajaxFailure
	};

	updateTextAreasFromCKeditors();
	YAHOO.util.Connect.setForm(form, withFile);
	YAHOO.util.Connect.asyncRequest('POST', url, ajaxCallback);
	return ajaxCallback;
}
function ajaxExecutePostWithFormByID(url, formID, withFile) {
	return ajaxExecutePostWithForm(url, document.getElementById(formID), withFile);
}
function ajaxGetReturnValue(o, methodName) {
    return ajaxGetResultValue(o, methodName, 'Return');
}
function ajaxGetExtraData(o, methodName) {
    return ajaxGetResultValue(o, methodName, 'ExtraData');
}
function ajaxGetResultValue(o, methodName, dataElement) {
    if (o.responseText == undefined) return undefined;
	var root = o.responseXML.documentElement;
	if (root == undefined) return undefined;
	var elems = root.getElementsByTagName(methodName + dataElement);
	if (elems == undefined) return undefined;
	var first = elems[0];
	if (first == undefined) return undefined;
	return first.firstChild.nodeValue;
}
function getParamString(arg1, val1, arg2, val2, arg3, val3, arg4, val4, arg5, val5, arg6, val6, arg7, val7, arg8, val8, arg9, val9, arg10, val10) {
	var str = '';
	if (val1 != undefined) str += arg1 + '=' + escape(val1); else return str;
	if (val2 != undefined) str += '&' + arg2 + '=' + escape(val2); else return str;
	if (val3 != undefined) str += '&' + arg3 + '=' + escape(val3); else return str;
	if (val4 != undefined) str += '&' + arg4 + '=' + escape(val4); else return str;
	if (val5 != undefined) str += '&' + arg5 + '=' + escape(val5); else return str;
	if (val6 != undefined) str += '&' + arg6 + '=' + escape(val6); else return str;
	if (val7 != undefined) str += '&' + arg7 + '=' + escape(val7); else return str;
	if (val8 != undefined) str += '&' + arg8 + '=' + escape(val8); else return str;
	if (val9 != undefined) str += '&' + arg9 + '=' + escape(val9); else return str;
	if (val10 != undefined) str += '&' + arg10 + '=' + escape(val10);
	return str;
}
function isMSIE() {
	var s = navigator.userAgent.toLowerCase();
	return s.indexOf('msie') >= 0;
}
function isMSIE8() {
	var s = navigator.userAgent.toLowerCase();
	return s.indexOf('msie 8') >= 0;
}
function isOpera() {
	var s = navigator.userAgent.toLowerCase();
	return s.indexOf('opera') >= 0;
}
function toggleHTMLEditor(name, tlb) {
	var txtArea = document.getElementById(name) ;
	if (txtArea.style.display != '') {
		switchToText(name);
	} else {
		switchToHTML(name, tlb);
	}
}
function switchToHTML(name, tlb) {
	initHTMLeditor(name, tlb);
	ajaxExecuteMainServiceNoCallback('setHTMLeditingOn');
}
function initHTMLeditor(name, tlb) {
	if (!tlb) tlb = 'CW';
	CKEDITOR.BasePath = '/static/ckeditor/';
	CKEDITOR.replace(name, {toolbar:tlb});
	spn = document.getElementById("spnToggle_" + name);
	if (spn != undefined) spn.innerHTML = "Switch to basic text editor";
}
function updateTextAreasFromCKeditors() {
	for (var name in CKEDITOR.instances) {
		var oEditor = CKEDITOR.instances[name];
		oEditor.updateElement();
	}
}
function switchToText(name) {
	updateTextAreasFromCKeditors();
	var editor = CKEDITOR.instances[name];
	if (editor == undefined) return;
	CKEDITOR.remove(editor);
	editor.destroy();
	
	var origTxtArea = document.getElementById(name);
	if (origTxtArea == undefined) return;
	origTxtArea.style.display = '';
	origTxtArea.style.visibility = '';

	spn = document.getElementById("spnToggle_" + name);
	if (spn != undefined) spn.innerHTML = "Switch to HTML editor";
	
	ajaxExecuteMainServiceNoCallback('setHTMLeditingOff');
}
function showNonModalPanel(name, w, header, body, clearOnClose, isFixedCenter, displayContext) {
	return showPanel(name, w, header, body, clearOnClose, false, isFixedCenter, displayContext);
}
function showModalPanel(name, w, header, body, clearOnClose, isFixedCenter, displayContext) {
	return showPanel(name, w, header, body, clearOnClose, true, isFixedCenter, displayContext);
}
function currentZIndex() {
	return highestZIndex;
}
function nextZIndex() {
	return ++highestZIndex;
}
function showPanel(name, w, header, body, clearOnClose, isModal, isFixedCenter, displayContext) {
	if (isFixedCenter == null) isFixedCenter = true;	// Default
	if (isMSIE8()) isModal = false;	// Prevent background from going black
	
	var pnl = new YAHOO.widget.Panel(name,
	            { width:w,
	              fixedcenter:isFixedCenter,
	              context:displayContext,
	              close:true,
	              draggable:true,
	              modal:isModal,
	              zIndex:nextZIndex(),
	              visible:false
	            }    
	        );   
	
	pnl.setHeader(header);   
	pnl.setBody(body);
	pnl.render(document.body);
	pnl.show();
	pnl.body.yuiPanel = pnl;
	if (clearOnClose) pnl.hideEvent.subscribe(onPanelClose);
	return pnl;
}
function getPanelBodyDivFromElement(element) {
	while (element != null) {
		if (element.yuiPanel != undefined) {
			return element;
		}
		element = element.parentNode;
	}
	return null;
}
function getPanelFromElement(element) {
	var bodyDiv = getPanelBodyDivFromElement(element);
	if (bodyDiv) 
		return bodyDiv.yuiPanel;
	else
		return null;
}
function closePanel(element) {
	var panel = getPanelFromElement(element);
	if (panel) panel.hide();
}
function onPanelClose() {
	this.body.innerHTML = '';
}
function replaceSingleQuotes(str) {
	return str.replace(/\'/g, "\\'");
}
function singleQuoteString(str) {
	return "'" + replaceSingleQuotes(str) + "'";
}
function escapeHTML(str) {
    return str.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;');
}
function getValueFromSelect(select) {
	var idx = select.selectedIndex;
	if (idx < 0) return null;
	return select.options[idx].value;
}
function getTextField(fld) {
	var elem = document.getElementById(fld);
	if (!elem) return null;
	if (elem.tagName.toUpperCase() == 'INPUT' && elem.type.toUpperCase() == 'TEXT') return elem;
	if (elem.type.toUpperCase() == 'TEXT') return elem;
	if (elem.type.toUpperCase() == 'PASSWORD') return elem;
	return null;
}
function focusTextField(fld) {
	var elem = getTextField(fld);
	if (!elem) return false;
	elem.focus();
	return true;
}
function focusTextFieldIfEmpty(fld) {
	var elem = getTextField(fld);
	if (!elem) return false;
	if (elem.value != '') return false;
	elem.focus();
	return true;
}
function getForm(name) {
	var elem = document.getElementById(name);
	if (!elem) return null;
	if (elem.tagName.toUpperCase() == 'FORM') return elem;
	return null;
}
function submitFormAction(formName, action) {
	var form = getForm(formName);
	if (!form) return null;
	form.action = action;
	form.submit();
}
function getParentForm(element) {
	while (element != null) {
		if (element.tagName.toUpperCase() == 'FORM') return element;
		element = element.parentNode;
	}
	return null;
}
function showDivByID(id, show) {
	showDiv(document.getElementById(id), show);
}
function showDiv(div, show) {
	if (show) {
		div.style.visibility = "visible";
		div.style.height = "";
	} else {
		div.style.visibility = "hidden";
		div.style.height = "0";
	}
}
function isVisible(elem) {
	return (elem.style.visibility != "hidden");
}
function toggleVisibility(elem) {
	showDiv(elem, !isVisible(elem));
}
function getCheckboxes(from) {
	var inputs = from.getElementsByTagName('input');
	var i;
	var arr = new Array();
	for (i=0; i < inputs.length; i++) {
		if (inputs[i].type == 'checkbox') arr.push(inputs[i]);
	}
	return arr;
}
function getCheckedCheckboxes(from) {
	var arr = getCheckboxes(from);
	var newArr = new Array();
	var i;
	for (i=0; i < arr.length; i++) {
		if (arr[i].checked) newArr.push(arr[i]);
	}
	return newArr;
}
function setCheckboxesChecked(from, check) {
	var arr = getCheckboxes(from);
	var i;
	for (i=0; i < arr.length; i++) {
		arr[i].checked = check;
	}
}
function copyToClipboard(text) {
  if (window.clipboardData) {
    window.clipboardData.setData("Text",text);
  } 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="/static/js/clipboard.swf" FlashVars="clipboard='+escape(text)+'" width="0" height="0" type="application/x-shockwave-flash"></embed>';
    document.getElementById(flashcopier).innerHTML = divinfo;
  }
}
function handleCalendarSelection(p_sType, p_aArgs, obj) {
	if (p_aArgs) {
		var aDate = p_aArgs[0][0];
		var elem = obj.textElement;
		if (elem) elem.value = "" + aDate[1] + "/" + aDate[2] + "/" + aDate[0];
		obj.hide();
	}
}
function enableElement(elem, enable) {
	if (enable) {
		elem.disabled = "";
	} else {
		elem.disabled = "disabled";
	}
}
function trim (str) {
	if (str == null) return '';
	str = str.replace(/^\s+/, '');
	for (var i = str.length - 1; i >= 0; i--) {
		if (/\S/.test(str.charAt(i))) {
			str = str.substring(0, i + 1);
			break;
		}
	}
	return str;
}
function showPreview(id, type) {
	updateTextAreasFromCKeditors();
	var txt = document.getElementById(id).value;
	if (trim(txt) == '') {
		alert('There is no ' + type + ' to preview!');
		return;
	}
	var div = document.getElementById("divPreview_" + id);
	showDiv(div, true);
	div.innerHTML = "<br/>Generating preview...<br/><br/><img src=\"/images/loading2.gif\"/>";
	var cb = ajaxExecuteGet('/previewComment.action', 'id', id, 'comment', txt, 'type', type);
	ajaxPopulateElement(cb, div);
}
function ajaxPopulateElement(cb, elem, withScript) {
	cb.success = ajaxSuccessForElement;
	if (cb.argument) {
		cb.argument.element = elem;
	} else {
		cb.argument = {element:elem};
	}
	if (withScript) cb.argument.withScript = withScript;
}
function ajaxPopulateElementByID(cb, id, withScript) {
	ajaxPopulateElement(cb, document.getElementById(id), withScript);
}
function ajaxSuccessForElement(o) {
	var elem = o.argument.element;
	if (o.argument.withScript)
		setInnerHTMLwithScript(elem, o.responseText);
	else
		elem.innerHTML = o.responseText;
}
function showGroupPopup(groupID, imgID) {
	if (!groupID || groupID == 0) return;
	var pnlInfo = showModalPanel(
		'groupInfo' + groupID,
		'300px',
		'Group Information',
		'<div id="divInfo">Loading group info...<br/><br/><img src="/images/loading2.gif"/></div>',
		false,
		false,
		[imgID,"bl","tr"]
		);
	var cb = ajaxExecuteGet('/groupInfo.action', 'id', groupID);
	ajaxPopulateElementByID(cb, "divInfo");
}
function showFlagPopup(id, type, anchorID, fromCorner, toCorner) {
	if (!fromCorner) fromCorner = 'bl';
	if (!toCorner) toCorner = 'tr';
	showModalPanel(
		'pnlFlag',
		'350px',
		'Flag Content',
		'<div id="divFlag">Loading...<br/><br/><img src="/images/loading2.gif"/></div>',
		false,
		false,
		[anchorID,fromCorner,toCorner]
		);
	var cb = ajaxExecuteGet('/flagContent.action', 'id', id, 'type', type);
	ajaxPopulateElementByID(cb, "divFlag");
}
function showUserPopup(userID, elementID, left) {
	if (userID == '') return;
	if (left == undefined) left = false;
	var pnlInfo = showModalPanel(
		'userInfo',
		'500px',
		'User Info',
		'<div id="divUserInfo">Loading user info...<br/><br/><img src="/images/loading2.gif"/></div>',
		false,
		false,
		[elementID,left?"br":"bl",left?"tl":"tr"]
		);
	var cb = ajaxExecuteGet('/profile_popup.action', 'id', userID);
	ajaxPopulateElementByID(cb, "divUserInfo");
}
function showFeedbackPopup(id, elementID, left) {
	if (id == '') return;
	if (left == undefined) left = false;
	var pnlInfo = showModalPanel(
		'feedback' + id,
		'500px',
		'Feedback',
		'<div id="divFeedback' + id + '">Loading feedback...<br/><br/><img src="/images/loading2.gif"/></div>',
		false,
		true,
		null
		);
	var cb = ajaxExecuteGet('/feedbackDetail_popup.action', 'id', id);
	ajaxPopulateElementByID(cb, "divFeedback" + id, true);
}
function showFeedbackRequestPopup(id, elementID, left) {
	if (id == '') return;
	if (left == undefined) left = false;
	var pnlInfo = showModalPanel(
		'feedbackRequest' + id,
		'500px',
		'Feedback Request',
		'<div id="divFeedbackRequest' + id + '">Loading request...<br/><br/><img src="/images/loading2.gif"/></div>',
		false,
		true,
		null
		);
	var cb = ajaxExecuteGet('/feedbackRequest_popup.action', 'id', id);
	ajaxPopulateElementByID(cb, "divFeedbackRequest" + id);
}
function toggleExpansion(name, stateElementID, callback, marginTop) {
	var elem = document.getElementById("img_" + name + "Expand");
	if (elem == undefined) return;
	var expanded = (elem.src.indexOf('contract') > 0);
	if (expanded)
		contractSection(name, stateElementID, callback);
	else
		expandSection(name, stateElementID, callback, true, marginTop);
}
function expandSection(name, stateElementID, callback, fade, marginTop) {
	var elem = document.getElementById("img_" + name + "Expand");
	if (!elem) return;
	
	elem.src = '/images/icon-contract.gif';
	elem = document.getElementById("div_" + name);
	var innerElem = document.getElementById("div_" + name + "_inner");

	if (marginTop && (innerElem != undefined)) {
		innerElem.style.marginTop = marginTop;
	}
	
	if (fade && (innerElem != undefined)) {
		innerElem.style.opacity = 0.0;
		innerElem.style.filter = 'alpha(opacity=0)';
	}
	
	showDiv(elem, true);
	
	if (fade && (innerElem != undefined)) {
	    var attributes = {opacity: { from: 0.0, to: 1.0}};
	    var anim = new YAHOO.util.Anim("div_" + name + "_inner", attributes, 1);   
	    anim.animate();
		anim.onComplete.subscribe(function(element) {
			innerElem.style.filter = '';
			innerElem.style.opacity = '';
			});
	}
	
	if (stateElementID) {
		elem = document.getElementById(stateElementID);
		if (elem) elem.value = "true";
	}
	if (callback) callback(name, true);
}
function contractSection(name, stateElementID, callback) {
	var elem = document.getElementById("img_" + name + "Expand");
	if (!elem) return;
	
	elem.src = '/images/icon-expand.gif';
	elem = document.getElementById("div_" + name);
	showDiv(elem, false);
	if (stateElementID) {
		elem = document.getElementById(stateElementID);
		if (elem) elem.value = "false";
	}

	var innerElem = document.getElementById("div_" + name + "_inner");
	if (innerElem) {
		innerElem.style.marginTop = 0;
	}

	if (callback) callback(name, false);
}
function followUser(userID, loggedIn, spnID) {
	if (!loggedIn) {
		if (!confirm('To follow people, you must first be logged in so we know where to send notifications.\n\nYou will now be redirected to the registration page.')) return;
		window.location = '/accountTypes.action';
	} else {
		var spn = document.getElementById(spnID);
		spn.innerHTML = '<img src="/images/working.gif" border="0"/>';
		var cb = ajaxExecuteMainService('addUserContact', 'id', userID);
		cb.success = onFollowSuccess;
		cb.argument = {element:spn};
	}
}
function onFollowSuccess(o) {
	var elem = o.argument.element;
	elem.innerHTML = '<font class="success">Done!</font>';
	alert("This person has been added to your contacts list with all notifications enabled.\nTo manage these settings, go to My Stuff, Contacts and Groups.");
}
function setInnerHTMLwithScript(div, html, lookForString) {
	div.innerHTML = html;
	
	var scripts = div.getElementsByTagName("script");
	var found = false;
	for(var i=0; i < scripts.length; i++) {
		var script = scripts[i];
		eval(script.text);
		if (lookForString != undefined) {
			 if (script.text.indexOf(lookForString) >= 0) found = true;
		} else {
			found = true;
		}
	}
	
	if (!found) {	// IE
		var pos = html.indexOf("<script");
		html = html.substring(pos);
		pos = html.indexOf(">");
		html = html.substring(pos + 1);
		pos = html.indexOf("<\/script>");
		var script = html.substring(0, pos);
		var scriptElem = document.createElement('script');
		scriptElem.text = script;
		document.appendChild(scriptElem);
	}
}