function doPaneAction(getorpost,controller,action,pane,params,isRelative,noIndicators,loadingImageID,removePaneHtml,loadingText,isBackground)
{
	var myAjax = new Ajax('/' + controller + '/' + action,
							{method: getorpost, 
							 update: $(pane), 
							 onRequest: function(){	
													var curWidth = $(pane).getSize().size.x;
													var curHeight = $(pane).getSize().size.y;

													var curLeft = $(pane).getPosition().x;
													var curTop = $(pane).getPosition().y;

													if (!$defined(loadingImageID))
													{
														loadingImageID = '';
													}

													if (!$defined(loadingText))
													{
														loadingText = '';
													}

													if (!$defined(isBackground))
													{
														isBackground = true;
													}

													if (removePaneHtml)
													{
														//$(pane).setStyles({'width': curWidth, 'height': curHeight, 'display': 'block'});
														$(pane).setHTML('');
													}
													

													if (!noIndicators)
													{
														/*$(pane).setStyles({'position':'relative',
																			'top':'0px'
																			});
														*/
														overlay = new Element('div',{'styles': 
																						{
																							'opacity': '0.8',
																							'width': curWidth + 'px',
																							'height': curHeight + 'px',
																							'text-align': 'center',
																							'z-index': 20000,
																							'position': 'absolute',
																							'top': curTop +'px',
																							'left': curLeft + 'px',
																							'background-color': '#ffffff'
																						}
																					});
														if (!isBackground)
														{
															overlay.setStyle('background','none');
														}

														if (isRelative)
														{
															overlay.setStyles(
																	{
																		'position':'relative',
																		'top': '0px',
																		'left': '0px'
																	});
														}
														loadingImg = new Element('img',{
																						'id': 'loadingImg',
																						'src': '/images/loading' + loadingImageID + '.gif'
																					});
														loadingTextElement = new Element('div',{
																						'id': 'loadingTextDiv',
																						'styles': 
																							{
																								'display': 'block',
																								'z-index': 30000,
																								'padding': '10px'
																							}
																					});
														loadingTextElement.setHTML(loadingText);
						
														/* This seems to make a js error "this.removeEvent is not a function"
														loadingImg = new Asset.image('/images/loading' + loadingImageID + '.gif',{
																						'id': 'loadingImg'
																					});
														*/
														loadingImg.injectInside(overlay);
														overlay.injectInside(pane);
														
														//loadingImgHeight = 66;
														loadingImgHeight = loadingImg.getSize().size.y;
														loadingImgTop = (curHeight - loadingImgHeight) / 2;
														if (window.ie6)
														{
															loadingImgTop = 0;
														}
														loadingImg.setStyles({
																		'position': 'relative',
																		'top': loadingImgTop + 'px'
																		});
														if (loadingText)
														{
															loadingTextElement.injectInside(overlay);										
															loadingTextElement.setStyles({
																		'position': 'relative',
																		'top': '2px'
																		});
														}
														
													}
												  }, 
							  onComplete: function(){
													 // $$('select').forEach(function(item,index) {item.setOpacity(1)});
												  },
							  evalScripts:true,
							  evalResponse:false,
							  data:params
							 }).request();
}

function doPaneActionMulti(model,view,action,paramString,pane)
{

	var MultiAjax = Ajax.extend({
			onComplete: function(){
				if (this.options.update)
				{
					$each(this.options.update,
							function(item,index)
							{
								item.empty().setHTML(this.response.text);
							},this
						);
				}
				if (this.options.evalScripts || this.options.evalResponse) this.evalScripts();
				this.fireEvent('onComplete', [this.response.text, this.response.xml], 20);
			}
		});
		
	
	var myAjax = new MultiAjax('/controller.php?model=' + model + '&view=' + view + '&action=' + action + paramString,
							{method: 'get', 
							 update: $$('#'+pane), 
							 onRequest: function(){	
													$(pane).empty().setHTML('<img id="loadingImg" src="images/loading.gif" />');
													$('loadingImg').setStyle('position','absolute');
													$('loadingImg').setStyle('top',(window.getHeight()/3));
													$('loadingImg').setStyle('left',((window.getWidth()/2)-($('loadingImg').getCoordinates()['width']/2)));
												  }, 
							  evalScripts:true,
							  evalResponse:false
							 }).request();
}

function obscure(id)
{
	var opacityFx = new Fx.Style(id, 'opacity').start(1,0.2,{duration:500});
	//opacityFx.start();
}

function unobscure(id)
{
	$(id).setOpacity(1);
}


function switchToFile()
{
	$('editorLabelCell').setStyle('display','none');
	$('editorInputCell').setStyle('display','none');
	$('fileLabelCell').setStyle('display',switchingDisplay);
	$('fileInputCell').setStyle('display',switchingDisplay);
	$('is_file').value = '1';
	$('article_type_id').value = '0';
	getCategories($('article_type_id').value,$('language').value);
}

function switchToEditor()
{
	$('fileLabelCell').setStyle('display','none');
	$('fileInputCell').setStyle('display','none');
	$('editorLabelCell').setStyle('display',switchingDisplay);
	$('editorInputCell').setStyle('display',switchingDisplay);
	$('is_file').value = '0';
	$('article_type_id').value = '1';
	getCategories($('article_type_id').value,$('language').value);
}

function getCategories(articleTypeID,languageID)
{
	doPaneAction('get','submit','categories','categoriesDiv',{'articleTypeID':articleTypeID,'languageID':languageID});
}

function suffixToArticleTypeID(fileInputID,fileTypeID)
{
	allowedExtensions = new Array();
	allowedExtensions[1] = ["doc","txt","rtf","wps","docx","odt","wpd"];
	allowedExtensions[2] = ["mpeg","mpg","avi","wmv","mov","3gp","mp4"];
	allowedExtensions[3] = ["mp3","wav","wma"];
	allowedExtensions[4] = ["jpg","jpeg","gif","png"];

	filename =  $(fileInputID).value;
	suffix = filename.substring(filename.lastIndexOf(".")+1);
	suffix = suffix.toLowerCase();

	if ((filename=='') || (filename==null))
	{
		$(fileTypeID).value = 0;
		return false;
	}
	else
	{
		for (i=1; i<=4; i++)
		{
			if (allowedExtensions[i].contains(suffix))
			{
				$(fileTypeID).value = i;
				return true;
			}
		}
	}
}

function switchCategories()
{
	if ($('is_file').value == '1')
	{
		suffixToArticleTypeID('article_file','article_type_id');
	}
	getCategories($('article_type_id').value,$('language').value);
}

function togglePlatformDependent()
{
	switch ($('website_platform_type_id').value)
	{
		case "":
			//$('external_div').setStyle('display','none');
			$('url_div').setStyle('display','none');			
			break;
		case "2":
			//$('external_div').setStyle('display','block');
			$('url_div').setStyle('display','block');			
			break;
		case "1":
		case "3":
			//$('external_div').setStyle('display','block');
			$('url_div').setStyle('display','none');			
			break;
	}
}

function confirmDeleteArticle(message,itemID,params)
{
	obscure(itemID);
	ret = confirm(message);
	if (ret)
	{
		doPaneAction('post','content','delete-article','pendingContentDiv',params)
	}
	else
	{
		unobscure(itemID);
	}
}

function confirmDeletePublishedArticle(message,itemID,params)
{
	obscure(itemID);
	ret = confirm(message);
	if (ret)
	{
		doPaneAction('post','content','delete-published-article','publishedContentDiv',params)
	}
	else
	{
		unobscure(itemID);
	}
}

function confirmDeleteWebsite(message,websiteID,params)
{
	obscure(websiteID);
	ret = confirm(message);
	if (ret)
	{
		doPaneAction('post','websites','delete','websitesListContentDiv',params)
	}
	else
	{
		unobscure(websiteID);
	}
}


function confirmDeleteComment(message,itemID,params)
{
	obscure(itemID);
	ret = confirm(message);
	if (ret)
	{
		doPaneAction('post','content','spam-comment','commentsDiv',params)
	}
	else
	{
		unobscure(itemID);
	}
}

function setIsFile(isFileID,fileInputID)
{
	if ($(fileInputID).value!="")
	{
		$(isFileID).value="1";
	}
	else
	{
		$(isFileID).value="0";
	}
}

function deleteWriterMessage(writer_message_id)
{
	var ret;
	var params = {"writer_message_id": writer_message_id};
	var jSonRequest = new Json.Remote('/community/delete-message', 
		{
		method: 'post', 
		onComplete: function(answer){
			ret = answer.success;
		}
	}).send(params);

	return ret;
}

function confirmDeleteMessage(message,itemID,params)
{
	obscure(itemID);
	ret = confirm(message);
	if (ret)
	{
		doPaneAction('post','community','delete-message','inboxDiv',params)
	}
	else
	{
		unobscure(itemID);
	}
}

function confirmRemoveFriend(message)
{
	ret = confirm(message);
	if (ret)
	{
		return true;
	}
	else
	{
		return false;
	}
}


function messageSent(messageBox,messagingLog,messageSentMessage)
{
	$$('#'+messagingLog).getLast().setHTML(messageSentMessage);
	setTimeout('messageSentRemove("'+messageBox+'","'+messagingLog+'")',500);
}
function messageNotSent(messageBox,messagingLog,messageNotSentMessage)
{
	$$('#'+messagingLog).getLast().setHTML(messageNotSentMessage);
}


function messageSentRemove(messageBox,messagingLog)
{
	$$('#'+messageBox).getLast().value="";
	$$('#'+messagingLog).getLast().empty();
	TB_remove();
}



function sendWriterMessage(fromWriterID,toWriterID,body,privacyLevel,replyToMessageID,updatePane,messageBox,messagingLog,messageSentMessage,messageNotSentMessage)
{
	if (body.trim() != '')
	{
		var myAjax = new Ajax('/community/process-send-message/',
		{method: 'post', 
		onSuccess: function(){messageSent(messageBox,messagingLog,messageSentMessage);},
		onFailure: function(){messageNotSent(messageBox,messagingLog,messageNotSentMessage);},
		evalScripts:true,
		evalResponse:true,
		data: 'from_writer_id=' + fromWriterID + '&to_writer_id=' + toWriterID + '&body=' + escape(body) + '&privacy_level=' + privacyLevel + '&reply_to_writer_message_id=' + replyToMessageID
		}).request();
	}
	else
	{
	}
}

function turnToPassword() 
{
	$('shmasword').setStyle('display','none');
	$('password').setStyle('display','block');
	$('password').focus();
}

function markPayment(id)
{
	$$('.markedPayment').forEach(function(item,index){ item.removeClass('markedPayment');});
	if ($defined(id))
	{
		$(id).toggleClass('markedPayment');
	}
	
}

function getSelectedCategories(selectObject)
{
	var names = [];
	var ids = [];
	if (selectObject)
	{
		$each(selectObject.options, function(option){
			if (option.selected)
			{
				names.push(option.text);
				ids.push(option.value);
			}
		});
	}
	var values = {'names': names, 'ids': ids};
	return values;
}

function loadBlogListIfNeccessary(clear_external_data)
{
	if ($('website_external_username').value != ''
		&& 
		$('website_external_password').value != ''
		&& 
		(
			($('website_platform_type_id').value == '1' || $('website_platform_type_id').value == '3') 
			|| 
			($('website_platform_type_id').value == '2' && $('website_url_display').value != '')
		)
	   )
	{
		
		$('external_div').setStyle('display','block');
		doPaneAction('post'
					,'websites'
					,'blogs-list'
					,'external_div'
					,{	'website_platform_type_id': $('website_platform_type_id').value
						,'website_external_username': $('website_external_username').value
						,'website_external_password': $('website_external_password').value
						,'website_url':$('website_url_display').value
						,'website_external_id':$('website_external_id').value
						,'clear_external_data': clear_external_data
					 }
					,false
					,false
					,'s'
					,true
					,loadingBlogListText
					,false
					);
	}
}

function setAdPreview()
{
	$('adPickerPreviewDiv').setStyle('background',$('text_ad_color_background').value);
	$('adPickerPreviewTitle').setStyle('color',$('text_ad_color_title').value);
	$('adPickerPreviewText').setStyle('color',$('text_ad_color_text').value);
	$('adPickerPreviewUrl').setStyle('color',$('text_ad_color_url').value);
	$('adPickerPreviewDiv').setStyle('border','1px solid ' + $('text_ad_color_border').value);
}

function toggleAdPreview(isShow)
{
	if (isShow)
	{
		$('adPickerDiv').setStyle('display','block');
	}
	else
	{
		$('adPickerDiv').setStyle('display','none');
	}
}

var MAX_DUMP_DEPTH = 10;

      

       function dumpObj(obj, name, indent, depth) {

              if (depth > MAX_DUMP_DEPTH) {

                     return indent + name + ": <Maximum Depth Reached>\n";

              }

              if (typeof obj == "object") {

                     var child = null;

                     var output = indent + name + "\n";

                     indent += "\t";

                     for (var item in obj)

                     {

                           try {

                                  child = obj[item];

                           } catch (e) {

                                  child = "<Unable to Evaluate>";

                           }

                           if (typeof child == "object") {

                                  output += dumpObj(child, item, indent, depth + 1);

                           } else {

                                  output += indent + item + ": " + child + "\n";

                           }

                     }

                     return output;

              } else {

                     return obj;

              }

       }