function InitKeywordSearchForm( id ) {
	$("#"+id).click( function() { document.frm_free_search.kwd_search.focus(); } );
	if ($("#kwd_search").val()=="") $("#kwd_search").val( aJSLangDefs.Freetext_search );
	$("#kwd_search").bind( "blur" , function() { KeywordSearchFieldBlur(); } );
	$("#kwd_search").bind( "focus" , function() { KeywordSearchFieldFocus(); } );
}

function KeywordSearchFormSubmit( oF ) {
	var v = $("#kwd_search").val();
	if (v.length==0 || v==aJSLangDefs.Freetext_search) {
		alert( aJSLangDefs.Freetext_search_no_search_phrase_given );
		return false;
	}
	return true;
	
}

function KeywordSearchFieldBlur() {
	if ($("#kwd_search").val()=="")
		$("#kwd_search").val( aJSLangDefs.Freetext_search );
}

function KeywordSearchFieldFocus() {
	if ($("#kwd_search").val()==aJSLangDefs.Freetext_search )
		$("#kwd_search").val( "" );
}

function RefreshFrontendMenu() {
	$.ajax(
		{
			type: "POST",
			cache: false,
			data: (
				{
					inajax : 1,
					ajaxevent : "refresh_frontendmenu"
				}
			),
			success: function(ret) {
				req = eval( ret );
				$("div.FrontendMenu").html(req.htmlsource);
			}
		}
	);
}

function InitFrontendMenu( id ) {
	// $("#"+id+"_user_menu_ul").addClass( "sf-menu" );
	$("#"+id+"_user_menu_ul").superfish();
}
function FrontendSelectNonEmptyChanged( id ) {
    o = $("#"+id);
    bValid = (o.val()!="");
    if (bValid) {
        if (o.hasClass( "invalid" )) o.removeClass( "invalid" );
    } else {
        if (!o.hasClass( "invalid" )) o.addClass( "invalid" );
    }
}
function InitFNTHAutocomplete( id , cls ) {
	o = $("#"+id );
	o.attr( "autocomplete" , "off" );
	o.data( "prevval" , o.val() );
	o.data( "id" , id );
	o.data( "class" , cls );
	o.data( "mouseovertooltip" , false );

	ul = $("<ul></ul>");
	ul.data( "parent" , o );
	ul.mouseover( function() {
			o = $(this).data("parent");
			o.data( "mouseovertooltip" , true );
		}
	);
	ul.mouseout( function() {
			o = $(this).data("parent");
			o.data( "mouseovertooltip" , false );
		}
	);
		
	ul.attr( "id" , id + "_items" );
	ul.addClass( "hitems" );
	o.data( "ul" , ul );

	$("#"+id+"_cont").append( ul );
	o.focus( function() { FNTHAutocompleteOnFocus( $(this) ); } );
	o.blur( function() { FNTHAutocompleteOnBlur( $(this) ); } );
	o.keyup( function() { FNTHAutocompleteOnKeyup( $(this) ); } );
}

function FNTHAutocompleteOnFocus( o ) {
}

function FNTHAutocompleteOnBlur( o ) {
	if (!o.data( "mouseovertooltip" ))
		FNTHAutocompleteShowTooltip( o , false );
}

function FNTHAutocompleteOnKeyup( o ) {
	if (o.data("prevval")!=o.val()) {
		FNTHAutocompleteGetDatas( o );
		o.data("prevval",o.val());
	}
}

function FNTHAutocompleteHourglass( o , b ) {
	if (b)
		o.addClass( "working" );
	else
		o.removeClass( "working" );
}

function FNTHAutocompleteGetDatas( o ) {
	FNTHAutocompleteHourglass( o , true );
	$.ajax(
		{
			type: "POST",
			cache: false,
			context: o,
			data: (
				{
					inajax : 1,
					ajaxobject : o.data( "id" ),
					ajaxevent : "get_datas",
					ac_filter : o.val()
				}
			),
			success: function(ret) {
				a = eval( ret );
				$(this).data( "datas" , a );
				FNTHAutocompleteRegenerateTooltip( o );
				FNTHAutocompleteHourglass( o , false );
			}
		}
	);
}

function FNTHAutocompleteOnClickItem( i ) {
	o = i.data( "parent" );
	n = i.data( "num" );
	d = o.data( "datas" ).items;
	o.val( d[n].value );
	FNTHAutocompleteShowTooltip( o , false );
	o.focus();
}

function FNTHAutocompleteShowTooltip( o , b ) {
	if (b) {
		o.data( "ul" ).removeClass( "hitems" );
	} else {
		o.data( "ul" ).addClass( "hitems" );
		o.data( "mouseovertooltip" , false );
	}
}

function FNTHAutocompleteRegenerateTooltip( o ) {
	ul = $("#" + o.data("id") + "_items" );
	o.data( "ul" , ul );
	ul.html( "" );
	ad = o.data( "datas" );
	d = ad.items;
	if (d.length) {
		for (i in d ) {
			li = $("<li></li>");
			li.data( "parent" , o );
			li.data( "num" , i );
			li.click( function() { FNTHAutocompleteOnClickItem( $(this) ); } );
			li.html( d[i].title );
			ul.append( li );
		}
		FNTHAutocompleteShowTooltip( o , true );
	} else {
		FNTHAutocompleteShowTooltip( o , false );
	}
}
function SelectedTranslatorsRefreshAjax( mode , uid ) {
	$.ajax(
		{
			type: "POST",
			cache: false,
			data: (
				{
					inajax : 1,
					ajaxevent : mode,
					user_id : uid
				}
			),
			success: function(ret) {
				data = eval( ret );
				SelectedTranslatorsRefreshTable( data );
			}
		}
	);
}

function SelectedTranslatorGroupNameFocus( id ) {
	if ($("#"+id).val()==aJSLangDefs.Translator_group_name) {
		$("#"+id).val( "" );
		$("#"+id).css( "color" , "black" );
	}
}

function SelectedTranslatorGroupNameBlur( id ) {
	if ($("#"+id).val()=="") {
		$("#"+id).val( aJSLangDefs.Translator_group_name );
		$("#"+id).css( "color" , "#808080" );
	}
}

function SelectedTranslatorsAddTranslator( id ) {
	SelectedTranslatorsRefreshAjax( "add_selected_user" , id );
}

function SelectedTranslatorsDeleteTranslator( id ) {
	SelectedTranslatorsRefreshAjax( "del_selected_user" , id );
}

function SelectedTranslatorsRefreshTable( data ) {
	if (typeof RefreshJobRecipients == "function") {
		RefreshJobRecipients( "offer_recipients" );
	}
}

function SelectedTranslatorsClickDeleteTranslator( id ) {
	// delete user from selection if exists
	if (typeof UserNameTagDeleteUserByMap == "function") {
		UserNameTagDeleteUserByMap( id );
	}
	SelectedTranslatorsDeleteTranslator( id );
}

function SelectedTranslatorsChanged( ) {
	// TODO szurkiteni a torles es egyeb gombokat
}

function STLoad() {
	var t = $("#translator_groups").val()[0];
	$("#translator_group_name").val( $("#translator_groups :selected").text() );
	$.ajax(
		{
			type: "POST",
			cache: false,
			data: (
				{
					inajax : 1,
					ajaxevent : "load_translators",
					template_id : t
				}
			),
			success: function(ret) {
				data = eval( ret );
			}
		}
	);
}

function STDelete() {
	if (!window.confirm( aJSLangDefs.confirm_Delete_translator_group )) return;
	var t = $("#translator_groups").val()[0];
	$("#translator_group_name").val( $("#translator_groups :selected").text() );
	$.ajax(
		{
			type: "POST",
			cache: false,
			data: (
				{
					inajax : 1,
					ajaxevent : "del_translators",
					template_id : t
				}
			),
			success: function(ret) {
				data = eval( ret );
			}
		}
	);
}

function STSave() {
	if ( $("#translator_group_name").val().length == 0 ) {
		alert( aJSLangDefs.No_group_name_given );
		return;
	}
	$.ajax(
		{
			type: "POST",
			cache: false,
			data: (
				{
					inajax : 1,
					ajaxevent : "save_translators",
					template_name : $("#translator_group_name").val()
				}
			),
			success: function(ret) {
				data = eval( ret );
			}
		}
	);
}
function InitSearchPane( id , data ) {
	$("#"+id).data( "data" , data );
}

function SearchInactiveHandler( id ) {
	if ($("#inactive").attr("checked")) {
		$("#number_of_agencies").html( $("#"+id).data( "data").all_agencies );
		$("#number_of_freelancers").html( $("#"+id).data( "data").all_freelancers );
	} else {
		$("#number_of_agencies").html( $("#"+id).data( "data").active_agencies );
		$("#number_of_freelancers").html( $("#"+id).data( "data").active_freelancers );
	}
}
function BotJSBeforeSubmit( id ) {
	$("#"+id).val("mintahuzat");
}

function InitBotJS( id ) {
	$("#"+id).val( "nemaz" );
}
function JobSimpleEval( e ) {
	if (typeof e.error!="undefined") alert( e.error );
	if (typeof e.evaluate!="undefined") eval( e.evaluate );
}


function JobSubmitDialog() {
	var d = $("#dlg_job_action").data( "submitparams" );
	JobSendRequest( d , JobSimpleEval );
}

function JobCancelDialog() {
	$("#dlg_job_action").dialog( "close" );
	$("#dlg_job_action").dialog( "destroy" );
}

function JobDialogCallback( d ) {
	// error van
	if (typeof d.error!="undefined") {
		alert( d.error );
		if (typeof d.evaluate != "undefined") JobSimpleEval( d );
		return;
	}
	if (typeof d.evaluate != "undefined") JobSimpleEval( d );
	// van dialog
	if (typeof d.dlg=="undefined") return;

	$("#dlg_job_action").html( d.dlg );
	var dlg = {};
	if (typeof d.dlg_ttl!="undefined") dlg.title = d.dlg_ttl;
	dlg.modal = true;
	dlg.width = 600;
	dlg.height = 400;
	if (typeof d.buttons!="undefined") {
		var btns = {};
		for (var i in d.buttons) {
			if (d.buttons[i]!=false) {
				$("#dlg_job_action").data( "submitparams" , d.buttons[i] );
				btns[i] = function() { JobSubmitDialog( ); }
			} else {
				btns[i] = function() { JobCancelDialog(); }
			}
			dlg.buttons = btns;
		}
	}
	$("#dlg_job_action").dialog( dlg );
}


function JobSendRequest( d , cb ) {
	d["inajax"]=1;
	$.ajax(
		{
			type: "POST",
			cache: false,
			data: d,
			success: cb
		}
	);
}

function ActivateJob( hash ) {
	var d = {
		"ajaxevent" : "dlg_activate_job",
		"hash" : hash
	};
	JobSendRequest( d , JobDialogCallback );
}

function CloseJob( job_id ) {
	var d = {
		"ajaxevent" : "dlg_close_job",
		"job_id" : job_id
	};
	JobSendRequest( d , JobDialogCallback );
}

function RevokeJob( job_id ) {
	var d = {
		"ajaxevent" : "dlg_revoke_job",
		"job_id" : job_id
	};
	JobSendRequest( d , JobDialogCallback );
}

function RefreshQuoteName( id , n ) {
	$("#"+id+"_cont").html( n );
}
function FrontendTextboxNonEmptyChanged( id ) {
    o = $("#"+id);
    bValid = (o.val().length>0);
    if (bValid) {
        if (o.hasClass( "invalid" )) o.removeClass( "invalid" );
    } else {
        if (!o.hasClass( "invalid" )) o.addClass( "invalid" );
    }
}
function QuoteLoginTriesExceeded( id , req ) {
	QuoteLoginWarn( id , aJSLangDefs.Login_tries_exceeded );
}

function QuoteLoginWarn( id , msg ) {
	var warn = $("#"+id+"_warning");
	if (!warn.length) {
		warn = $("<div></div>" );
		warn.attr( "id" , id + "_warning" );
		warn.addClass( "QuoteLoginWarning" );
		$("#"+id+"_cont").append( warn );
	}
	warn.html( msg );
}

function QuoteLoginFailed( id , req ) {
	var pwd = $("#"+id+"_pwd");
	pwd.val( "" );

	var lnk = $("<a></a>").addClass( "nrm" ).attr("target","_blank").attr( "href" , req.url_forgotten_password ).html( req.ttl_forgotten_password );
	$("#offer_contact_name_comment").html( "" );
	$("#offer_contact_name_comment").append( lnk );

	QuoteLoginWarn( id , aJSLangDefs.login_Failed );
}

function QuoteLoginClose( id ) {
	if (typeof $("#"+id).data("isopened") == "undefined") return;
	if (!$("#"+id).data("isopened")) return;
	$("#"+id).css("width", "" );
	$("#"+id+"_cont_span").html( "" );
	$("#"+id+"_warning").html( "" );

	$("#"+id).data("isopened",false);
}

function QuoteLoginOpen( id ) {
	if ($("#"+id).data("isopened")) return;

	$("#"+id).css("width", 120 );
	var cont = $("#"+id+"_cont_span");
	if (cont.length == 0) {
		cont = $("<span></span>").attr( "id" , id + "_cont_span" );
		$("#"+id+"_cont").append( cont );
	}
	cont.append( aJSLangDefs.login_Password + ":" );
	var pwd = $("<input></input>");
	pwd.attr( "type" , "password" );
	pwd.attr( "name" , id + "_pwd" );
	pwd.attr( "id" , id + "_pwd" );
	pwd.addClass( "FrontendTextbox" );
	pwd.addClass( "QuoteLoginEmailPassword" );


	pwd.keydown( function(e) { return QuoteLoginPasswordDoNotSubmit(id,e); } );
	
	var smb = $("<input></input>" );
	smb.attr( "type" , "button" );
	smb.attr( "id" , id + "_login" );
	smb.attr( "name" , id + "_login" );
	smb.addClass( "minismb" );
	smb.click( function() {
		QuoteLoginOnTheFly( id );
	} );
	smb.val( aJSLangDefs["login_Login"] );
	cont.append( " " );
	cont.append( pwd );
	cont.append( " " );
	cont.append( smb );
	pwd.focus();
	$("#"+id).data("isopened",true);
}

function QuoteLoginUser( id , req ) {
	var uname = $("#"+id).val();
	var pwd = $("#"+id+"_pwd").val();
	var cont = $("#"+id+"_cont");
	cont.html( uname );
	var ql = $("#"+id );
	ql.data( "loggedin" , true );	
	ql.data( "opened" ,false );
	
	$("#offer_contact_name_comment").html( "" );
	if (typeof RefreshFrontendMenu != "undefined") RefreshFrontendMenu();
	if (typeof RefreshLoginBox != "undefined") RefreshLoginBox();
	if (typeof RefreshQuoteName != "undefined") RefreshQuoteName( "offer_contact_name" , req.user_name );
	if (typeof RefreshQuotePhone != "undefined") RefreshQuotePhone( "offer_contact_phone" , req.contact_phone );
}

function QuoteLoginOnTheFly( id ) {
	var ql = $("#"+id);
	if (ql.data( "loggedin" )) return;	// vazze ag
	var u_name = ql.val();
	if (!u_name.length) {
		// alert( aJSLangDefs.quotepage_error_Contact_email_not_filled );
		return;
	}
	var passwd = $("#"+id+"_pwd").val();
	// tehat meg nincs belepve
	var cont = $("#"+id+"_cont");
	$.ajax(
		{
			type: "POST",
			cache: false,
			data: (
				{
					inajax: 1,
					ajaxevent: "login-on-the-fly",
					uname: u_name,
					pwd: passwd
				}
			),
			success: function( r ) {
				req = eval( r );
				if (typeof req.logins_exceeded!="undefined") {
					// login tries exceeded
					QuoteLoginTriesExceeded( id , req );
				} else if (typeof req.login_failed!="undefined") {
					// login failed
					QuoteLoginFailed( id , req );
				} else if (typeof req.user_existing!="undefined") {
					// existing user, should bring up password
					if (req.user_existing) QuoteLoginOpen( id , req );
				} else if (typeof req.login_succeeded!="undefined") {
					// login succeeded
					QuoteLoginUser( id , req );
				}
			}
		}
	);
}

function QuoteLoginUserLostFocus( id ) {
	if ($("#"+id).val().length==0) return;
	// megnezzuk, hogy van-e nalunk ilyen user
	$.ajax(
		{
			type: "POST",
			cache: false,
			data: (
				{
					inajax: 1,
					ajaxevent: "login-email-request",
					email: $("#"+id).val()
				}
			),
			success: function( r ) {
				req = eval( r );
			}
		}
	);
}


function QuoteLoginEmailDoNotSubmit( o , e) {
	if (e.keyCode==13) {
		o.focusNextInputField();
		return false;
	}
}

function QuoteLoginPasswordDoNotSubmit( id , e ) {
	if (e.keyCode==13) {
		QuoteLoginOnTheFly( id );
		return false;
	}
}

$.fn.focusNextInputField = function() {
    return this.each(function() {
        var fields = $(this).parents('form:eq(0),body').find('button,input,textarea,select');
        var index = fields.index( this );
        if ( index > -1 && ( index + 1 ) < fields.length ) {
			fields.eq( index ).blur();
            fields.eq( index + 1 ).focus();
        }
        return false;
    });
};

function InitQuoteLoginEmail( id , loggedin ) {
	var ql = $("#"+id);
	ql.data( "loggedin" , loggedin );
	if (!loggedin) ql.data( "opened" , false );
	if (ql.attr("type")=="text") {
		ql.blur( function() { QuoteLoginUserLostFocus( id ) } );
	}
	ql.keypress( function(e) { return QuoteLoginEmailDoNotSubmit(ql,e); } );
	ql.keydown( function(e) { return QuoteLoginEmailDoNotSubmit(ql,e); } );
}

function RefreshQuotePhone( id , n ) {
	$("#"+id+"_cont").html( n );
}

function InitJobServices( id , datas ) {
	var js = $("#"+id);
	js.data( "datas" , datas );
	var checks = $("input[id^="+id+"]");
	for (i=0;i<checks.length;i++) {
		var ochk = $(checks[i]);
		if (ochk.attr("type")!="checkbox") continue;
		// go through checkboxes
		ochk.click( function() { JobServiceTypeChanged( $(this) , id ); } );
	}
	RegenerateJobServices( id );
}

function RefreshJobServices( id ) {
	var js = $("#"+id);
	var d = new Object();
	for (i in aServiceTypes) {
		if (!($("#"+id+"_"+i).attr("checked"))) continue;
		var q = new Object();
		q.unit = $("#"+id+"_unit_"+i).val();
		q.quantity = $("#"+id+"_q_"+i).val();
		q.loc = $("#"+id+"_loc_"+i).val();
		d[i]=q;
	}
	js.data( "datas" , d );
}

function JobServiceTypeChanged( o , id ) {
	RefreshJobServices( id );
	RegenerateJobServices( id );
}

function GenerateSelectOnServiceType( id , servicetype_id ) {
	var sid = id + "_unit_"+servicetype_id;
	var sel = $("<select></select>" ).attr( "id" , sid ).attr("name",sid);
	sel.append( $("<option></option>").html( aJSLangDefs.Choose ).val("") );
	var avail = aXrefServiceTypeUnits[servicetype_id];
	for (i=0;i<avail.length;i++) 
		sel.append( $("<option></option>").html( aServiceTypeUnits[avail[i]] ).val( avail[i] ) );
	return sel;
}

function GenerateInputOnServiceType( id , servicetype_id ) {
	var sid = id + "_q_"+servicetype_id;
	var inp = $("<input></input>" ).attr( "id" , sid ).attr("name",sid);
	inp.attr( "class" , "FrontendTextbox" );
	return inp;
}

function GenerateLocationInputOnServiceType( id , servicetype_id ) {
	var sid = id + "_loc_"+servicetype_id;
	var inp = $("<input></input>" ).attr( "id" , sid ).attr("name",sid);
	inp.attr( "class" , "FrontendTextbox" );
	return inp;
}

function RegenerateJobServices( id ) {
	var o = $("#"+id);
	o.html( "" );
	datas = o.data( "datas" );
	for (servicetype_id in datas) {
		// title
		o.append( $("<div></div>").addClass( "ttl" ).html( aServiceTypes[servicetype_id] + ":" ) );
		// input
		var inp = GenerateInputOnServiceType( id , servicetype_id );
		inp.val( datas[servicetype_id].quantity );
		o.append( $("<div></div>").addClass( "unit").html( "").append( inp ) );
		// select
		var sel = GenerateSelectOnServiceType( id , servicetype_id );
		sel.val( datas[servicetype_id].unit );
		o.append( $("<div></div>").addClass( "sel" ).html( "" ).append( sel ) );
		// cleardiv
		o.append( $("<div></div>").addClass( "clr" ) );
		if (servicetype_id==2) {
			// title
			o.append( $("<div></div>").addClass( "ttl ttlloc" ).html( " - " + aJSLangDefs.interpret_location + ":" ) );
			// input
			var inp = GenerateLocationInputOnServiceType( id , servicetype_id );
			o.append( $("<div></div>").addClass( "sel").html( "").append( inp ) );
			
			o.append( $("<div></div>").addClass( "clr" ) );
		}
	}
}

function ValidateJobServices( id ) {
	RefreshJobServices( id );
	var datas = $("#"+id).data( "datas" );
	var num = 0;
	for (i in datas) {
		num++;
		var u = datas[i].unit;
		if (i == 2 ) {
			if (datas[i].loc.length==0) {
				alert( aJSLangDefs.Location_empty );
				$("#loc").focus();
				return false;
			}
		}
		var min = Math.floor( aServiceTypeMinLengths[u] );
		if (!datas[i].unit.length && min>0) {
			alert( aJSLangDefs.quotepage_error_No_service_unit_filled );
			$("#"+id+"_unit_"+i).focus();
			return false;
		} else {
			// ki van toltve, hogy miben, csak hogy mennyi az a nem mindegy
			var curr = (datas[i].quantity.length) ? Math.floor( datas[i].quantity ) : 0;
			if (curr<min) {
				var al = aJSLangDefs.quotepage_error_Service_size_too_small + "\n- ";
				al+= aJSLangDefs.Minimal_service_size_needed;
				al+=aServiceTypeMinLengths[1] + " " + aServiceTypeUnits[1] + ", ";
				al+=aServiceTypeMinLengths[2] + " " + aServiceTypeUnits[2] + ", ";
				al+=aServiceTypeMinLengths[3] + " " + aServiceTypeUnits[3] + "\n\n";
				al+=aJSLangDefs.quotepage_error_Service_size_too_small2;
				alert( al );
				$("#"+id+"_q_"+i).focus();
				return false;
			}
		}
	}
	if (!num) {
		alert( aJSLangDefs.quotepage_error_No_service_filled );
		return false;
	}
	return true;
}
function JobQuoteDeadlineOnClose( o ) {
	if (typeof QuotePaneChangeQuoteDeadline != "undefined")
		QuotePaneChangeQuoteDeadline();
}
function JobQuoteDeadlineOnChange( o ) {
	if (typeof QuotePaneChangeQuoteDeadline != "undefined")
		QuotePaneChangeQuoteDeadline();
}
function InitFrontendDatetime( id , datas , extraeval ) {
	var d = {
		closeText: aJSLangDefs.datetimepicker_save,
		dateFormat: 'yy.mm.dd',
		duration: '',
		showTime: true,
		constrainInput: true,
		stepMinutes: 1,  
		stepHours: 1,  
		time24h: true
	};
	if (typeof extraeval!="undefined") {
		if (extraeval.length) eval( extraeval );
	}
	for (var i in datas) d[i] = datas[i];
	$("#"+id).datepicker( d );
}
function InitFrontendDate( id , datas ) {
	var d = {
		dateFormat: 'yy.mm.dd',
		duration: '',
		showTime: false,
		constrainInput: true,
		stepMinutes: 1,  
		stepHours: 1,  
		time24h: true
	};
	for (var i in datas) d[i] = datas[i];
	$("#"+id).datepicker( d );
}
function FrontendTextareaMaxLength( id , maxlength ) {
	$("#"+id).data( "maxlength" , maxlength );
	$("#"+id).keypress( function() { FrontendTextareaLimitLength( id , maxlength ) } );
}

function FrontendTextareaLimitLength( id , maxlength ) {
	var v = $("#"+id).val();
	if (v.length<=maxlength) return;
	v = v.substr( 0 , maxlength );
	$("#"+id).val( v );
}
function MultiLangPairAddLangPair( id ) {
	var d = $("#"+id+"_body" );
	var i = d.data("numoflanguages" );
		
	var trnew = $("<div></div>").attr( "class" , "row" ).attr( "id" , id + "_row_" + i );

	var tdsrclang = $("<div></div>").attr( "class" , "srcl" ).append( MultiLangMakeLangSelect( id + "_srclang_"+i ,0 ) );
	var tdsep = $("<div></div>").addClass( "sep" ).html("-");

	var tddstlang = $("<div></div>").attr( "class" , "dstl" ).append( MultiLangMakeLangSelect( id + "_dstlang_"+i , 0 ) );

	var tdinp = $("<div></div>" ).addClass( "inp" );
	var iinp = $("<input></input>").attr( "type" , "button" ).attr( "id" , id + "_rowbtn_" + i ).addClass( "minismb" ).data("parent",id).data("rownum",i).attr( "value" , aJSLangDefs.Delete_languagepair );
	iinp.click( function() { MultiLangPairDelLang( $(this ) ); } );

	tdinp.append( iinp );

	var tdclr = $("<div></div>" ).addClass( "clr" );

	trnew.append( tdsrclang );
	trnew.append( tdsep );	
	trnew.append( tddstlang );
	trnew.append( tdinp );
	trnew.append( tdclr );

	if (jQuery.browser.mozilla) trnew.css( "display" , "none" );
	d.append( trnew );
	if (jQuery.browser.mozilla) trnew.fadeIn("slow");
	d.data("numoflanguages",i+1);
}

function MultiLangPairDelLang( obj ) {
	var id = $(obj).data("parent");
	var n = $(obj).data("rownum");
	
	var trold = $("#" + id + "_row_" + n );
	var d = $("#"+id+"_body" );
	var maxlang = d.data("numoflanguages" );
	trold.remove();
	var x = n;
	x++;
	while (x<maxlang) {
		$("#" + id + "_row_" + x ).attr( "id" , id + "_row_" + (x-1) );
		$("#" + id + "_rowbtn_" + x ).attr( "id" , id + "_rowbtn_" + (x-1) ).data( "rownum" , (x-1) );
		$("#" + id + "_srclang_" + x).attr( "id" , id + "_srclang_" + (x-1) ).attr( "name" , id + "_srclang_" + (x-1) );
		$("#" + id + "_dstlang_" + x).attr( "id" , id + "_dstlang_" + (x-1) ).attr( "name" , id + "_dstlang_" + (x-1) );
		x++;
	}
	d.data( "numoflanguages" , maxlang - 1 );
}

function MultiLangMakeLangSelect( n , s ) {
	var x = $("<select></select>" ).addClass( "multilangsel" ).attr( "name" , n ).attr( "id" , n );
	var i;
	for (i=0;i<aLangs.length;i++)
		x.append( $("<option></option>").attr( "value" , aLangs[i][0] ).html( aLangs[i][1] ) );
	x.val( s );
	return x;
}

function MultiLangPairInit( id , a ) {
	var i;	
	var d = $("#"+id+"_body" );
	d.data( "numoflanguages" , a.length );

	for (i=0;i<a.length;i++) {
		var trnew = $("<div></div>");
		trnew.attr( "class" , "row" );
		trnew.attr( "id" , id + "_row_" + i );

		var tdsrclang = $("<div></div>");
		tdsrclang.attr( "class" , "srcl" );
		tdsrclang.append( MultiLangMakeLangSelect( id + "_srclang_" + i , a[i]["source_language_id"] ) );

		var tdsep = $("<div>-</div>");
		tdsep.attr( "class" , "sep" );

		var tddstlang = $("<div></div>");
		tddstlang.attr( "class" , "dstl" );
		tddstlang.append( MultiLangMakeLangSelect( id + "_dstlang_" + i , a[i]["target_language_id"] ) );

		var tdinp = $("<div></div>" ).addClass( "inp" );

		var iinp = $("<input></input>").attr( "type" , "button" ).attr( "id" , id + "_rowbtn_" + i ).addClass( "minismb" ).data( "parent" , id ).data( "rownum" , i ).attr( "value" , aJSLangDefs.Delete_languagepair );
		iinp.click( function() { MultiLangPairDelLang( $(this ) ); } );

		tdinp.append( iinp );

		var tdclr = $("<div></div>" ).addClass( "clr" );

		trnew.append( tdsrclang );
		trnew.append( tdsep );	
		trnew.append( tddstlang );
		trnew.append( tdinp );
		trnew.append( tdclr );

		d.append( trnew );
	}
}
function InitJobRecipients( id ) {

}

function RefreshJobRecipientsCallback( id , data ) {
	var i;
	var s = "";
	for (i in data) {
		s+="<input type=\"checkbox\" checked=\"checked\" name=\""+id+"_"+i+"\" id=\""+id+"_"+i+"\" />";
		s+=data[i] + "<br/>";
	}
	var o = $("#"+id+"_customs");
	s+="<div class=\"selrecipients\"><span class=\"nrmlink\" onclick=\"if (typeof switchTab == 'function') switchTab( 'search_quote' , 1 );\">" + aJSLangDefs["Modify_job_recipients"] +" &raquo;</span></div>";
	o.html( s );
	if (s!="") {
		$("#"+id+"_custom").attr("checked","checked" );
		$("#td_"+id+"_custom").css("display","table-cell");
		o.css("display","block");
	} else {
		$("#"+id+"_all").attr("checked","checked" );
		$("#td_"+id+"_custom").css("display","none");
		o.css("display","none" );
	}
}

function RefreshJobRecipients( id ) {
	$.ajax(
		{
			type: "POST",
			cache: false,
			data: (
				{
					inajax : 1,
					ajaxevent : "refresh_job_recipients",
					wid : id
				}
			),
			success: function(ret) {
				var data = eval( ret );
				RefreshJobRecipientsCallback( id , data );
			}
		}
	);
}
function RenderJobAttachments( id ) {
	var o = $("#"+id);
	var datas = o.data( "datas" );
	var files = datas["files"];
	var i = 0;
	for (i in files) {
		var file = files[i];
		AddJobAttachment( id , file , datas.bReadOnly );
	}
}

function AddJobAttachment( id , file , ro ) {
	var o = $("#"+id);
	
	var dattach = $("<div></div>").addClass( "JobAttachment" ).data( "parent" , o );
	var sid = id + "_attach_" + o.data("numoffiles" );
	dattach.attr( "id" , sid );
	
	// title
	var dtitle = $("<div></div>").addClass( "ttl" );
	dtitle.html( "#" + (Math.floor(o.data( "numoffiles" ))+1) );
	dattach.append( dtitle );

	// upload
	var dupl = $("<div></div>").addClass( "upl");
	var a = $("<a></a>").attr( "href" , file.www_path ).attr( "target" , "attachment" ).html( file.filename );
	dupl.append( a );
	dattach.append( dupl );

	// comment
	var dcomment = $("<div></div>").addClass( "comment" );
	var dcomm = $("<div></div>").html( file.comment );

	dcomment.append( dcomm );
	dattach.append( dcomment );

	if (!ro) {
		// del
		var ddel = $("<div></div>").addClass( "del" );
		var inp = $("<input></input>").attr("type","button").attr("id",id+"_del_"+o.data("numoffiles") ).val(aJSLangDefs.Del_attachment).addClass( "minismb" );
		inp.click( function() { DeleteJobAttachment( id , $(this) ); } );
		ddel.append( inp );

		dattach.append( ddel );
	}

	dattach.append( $("<div></div>").addClass("clr")  );
	
	o.append( dattach );
	o.data( "numoffiles" , o.data( "numoffiles" ) + 1 );
}

function InitJobAttachments( id , datas ) {
	var o = $("#"+id);
	if (!o.size()) return;
	o.data( "datas" , datas );
	o.data( "id" , id );
	o.data( "numoffiles" , 0 );
	RenderJobAttachments( id );
	// AddEmptyJobAttachment( id );
}

function MoveJA( id , postfix , num ) {
	var next = num + 1;
	$("#"+id+postfix+next).attr( "id" , id + postfix + num );
	if (typeof $("#"+id+postfix+next).attr("name") )
		$("#"+id+postfix+next).attr( "name" , id + postfix + num );
}

function DeleteJobAttachment( id , btn ) {
	var o = $("#"+id);
	var num = Math.floor( btn.attr("id").replace( o.data( "id" ) + "_del_" , "" ) );
	$.ajax(
		{
			type: "POST",
			cache: false,
			data: (
				{
					"inajax" : 1,
					"ajaxevent" : "delete_attachment",
					"jaid" : id,
					"num" : num
				}
			),
			success: function(ret) {
			}
		}
	);

	var f = $("#"+id+"_attach_"+num);
	f.remove();
	while (num<o.data( "numoffiles" )-1) {
		MoveJA( id , "_attach_" , num );
		MoveJA( id , "_file_" , num );
		MoveJA( id , "_comment_" , num );
		MoveJA( id , "_del_" , num );
		var dnum = id+"_attach_"+num;
		$("#"+dnum+" div.ttl").html( "#" + Math.floor(num+1) );
		num++;
	}
	o.data( "numoffiles" , o.data( "numoffiles" ) - 1 );
}

function AddEmptyJobAttachment( id ) {
	var o = $("#"+id);
	if (o.data( "numoffiles" )>=5) {
		alert( aJSLangDefs.Too_much_attachments );
		return;
	}
	var dattach = $("<div></div>").addClass( "JobAttachment" ).data( "parent" , o );
	var sid = id + "_attach_" + o.data("numoffiles" );
	dattach.attr( "id" , sid );
	dattach.data( "num" , o.data("numoffiles" ) );
	
	// title
	var dtitle = $("<div></div>").addClass( "ttl" );
	dtitle.html( "#" + (Math.floor(o.data( "numoffiles" ))+1) );
	dattach.append( dtitle );

	// upload
	var dupl = $("<div></div>").addClass( "upl");
	var inp = $("<input></input>").attr( "type" , "file");
	inp.attr( "name" , id + "_file_" + o.data("numoffiles") );
	inp.attr( "id" , id + "_file_" + o.data("numoffiles") );
	dupl.append( inp );
	dattach.append( dupl );

	// comment
	var dcomment = $("<div></div>").addClass( "comment" );
	var inp = $("<input></input>").attr( "type" , "text" );
	inp.attr( "name" , id + "_comment_" + o.data("numoffiles") );
	inp.attr( "id" , id + "_comment_" + o.data("numoffiles" ) );

	dcomment.append( inp );
	dattach.append( dcomment );

	// add
	var ddel = $("<div></div>").addClass( "del" );
	var inp = $("<input></input>").attr("type","button").attr("id",id+"_del_"+o.data("numoffiles") ).val(aJSLangDefs.Del_attachment).addClass( "minismb" );
	inp.click( function() { DeleteJobAttachment( id , $(this) ); } );
	ddel.append( inp );

	dattach.append( ddel );
	dattach.append( $("<div></div>").addClass("clr")  );

	o.append( dattach );
	o.data( "numoffiles" , o.data( "numoffiles" ) + 1 );
}
function GetOfferRecipientsVal() {
	if ($("#offer_recipients_custom").attr("checked")) return "custom";
	if ($("#offer_recipients_agencies").attr("checked")) return "agencies";
	if ($("#offer_recipients_freelancers").attr("checked")) return "freelancers";
	if ($("#offer_recipients_all").attr("checked")) return "all";
	return false;
}

function SearchQuoteSubmit() {
	BotJSBeforeSubmit( "BotJS" );
	// check for empty language
	var emptylang = false;
	$("select.multilangsel").each( function() {
			if (!emptylang) {
				if (!parseInt( $(this).val() ) ) {
					$(this).focus();
					emptylang = true;
				}
			}
		}
	);
	if (emptylang) {
		alert( aJSLangDefs.quotepage_error_One_or_more_language_not_defined );
		return false;
	}
	/*
	if (!($("#offer_title").val().length)) {
		alert( aJSLangDefs.quotepage_error_Title_not_filled );
		$("#offer_title").focus();
		return false;
	}
	*/
	// check for service
	if (!ValidateJobServices( "offer_services" ))
		return false;
	// check description
	if (!$("#offer_description").val().length) {
		alert( aJSLangDefs.quotepage_error_Description_not_filled );
		$("#offer_description").focus();
		return false;
	}

	// check for quote deadline
	


	// check for contact name
	if (typeof $("#offer_contact_name").val() != "undefined" ) {
		if (!($("#offer_contact_name").val().length)) {
			alert( aJSLangDefs.quotepage_error_Contact_name_not_filled );
			$("#offer_contact_name").focus();
			return false;
		}
	}
	// check for contact email
	if (typeof $("#offer_contact_email").val() !="undefined" ) {
		if (!($("#offer_contact_email").val().length) ) {
			alert( aJSLangDefs.quotepage_error_Contact_email_not_filled );
			$("#offer_contact_email").focus();
			return false;
		}
	}
	// check for contact phone
	if (typeof $("#offer_contact_phone").val() !="undefined" ) {
		if (!($("#offer_contact_phone").val().length) ) {
			alert( aJSLangDefs.quotepage_error_Contact_phone_not_filled );
			$("#offer_contact_phone").focus();
			return false;
		}
	}

	// check for recipients
	if (GetOfferRecipientsVal()=="custom") {
		var numofcustoms = $("input[name^=offer_recipients_]:checked").length;
		if (!numofcustoms) {
			alert( aJSLangDefs.quotepage_error_No_custom_recipient );
			return false;
		}
	}
	return true;
}

function QuotePaneChangeSpecialty( o ) {
	var vis = (o.val()=="0");
	if (vis) {
		$("#offer_custom_specialty").removeClass( "invis" );
	} else {
		$("#offer_custom_specialty").addClass( "invis" );
	}
}

function QuotePaneChangeQuoteDeadline( o ) {
	var quote_deadline = $("#offer_quote_deadline");
	var deadline = $("#offer_deadline");

	if (quote_deadline.val().length!=16) return;
	if (deadline.val()<quote_deadline.val()) {
		deadline.datepicker( "option" , "minDate" , quote_deadline.val() );
		deadline.val( quote_deadline.val() );
	}
}

function InitQuotePane( id ) {
	$("#offer_specialty").change( function() { QuotePaneChangeSpecialty( $(this) ); } );
	$("#offer_quote_deadline").change( function() { JobQuoteDeadlineOnChange( $(this) ); } );
}
function RenderTranslatorBox( id , datas ) {
	// make link
	var _a = $("<a></a>");
	_a.attr( "href" , datas.member.member_url );
	_a.attr( "target" , "_blank" );
	_a.attr( "class" , "nrmorange" );
	_a.html( datas.member.localized_name );
	$("#"+id+"_link").html( _a );

	var _img = $("<img></img>");
	if (typeof datas.member.thumburlwww != "undefined") {
		_img.attr( "src" , datas.member.thumburlwww );
	} else {
		_img.attr( "src" , "/images/nopic.png" );
	}
	$("#"+id+"_img").html( _img );
	$("#"+id+"_wl").html( datas.member.languages );
}

function InitTranslatorBox( id , datas ) {
	$("#"+id).data( "datas" , datas );
	RenderTranslatorBox( id , datas );
}

function TranslatorBoxPostEvent( id , evt_type ) {
	$.ajax(
		{
			type: "POST",
			cache: false,
			data: (
				{
					inajax : 1,
					ajaxevent : evt_type,
					ajaxtarget : id,
					member_id : $("#"+id).data( "datas" ).member.member_id,
					member_type : $("#"+id).data( "datas" ).member.member_type
				
				}
			),
			success: function(ret) {
				var datas = eval( ret );
				$("#"+id).data( "datas" , datas );
				RenderTranslatorBox( id , datas );
			}
		}
	);
}

function TranslatorBoxNext( id ) {
	TranslatorBoxPostEvent( id , "translatorbox_next" );
}

function TranslatorBoxPrev( id ) {
	TranslatorBoxPostEvent( id , "translatorbox_prev" );
}
function SearchTranslatorsSubmit() {
	if ($.browser.msie) {
		// internet explorer submit hack workaround
		var v =$("#smb_search").val();
		var f = $("#frm_translator_search" );
		var i = $("<input></input>").attr( "type" , "hidden" ).attr( "name" , "smb_search" );
		i.val( v );
		f.append( i );
	}
	return true;
}
function switchTab( prefix , tabnum ) {
	hdr1 = $("#"+prefix+"Tab2hdr1");
	hdr2 = $("#"+prefix+"Tab2hdr2");
	c1 = $("#"+prefix+"tab1");
	c2 = $("#"+prefix+"tab2");
	if (tabnum==1) {
		hdr1.removeClass( "tab1" ).addClass( "tab1hl" );
		hdr2.removeClass( "tab2hl" ).addClass( "tab2" );
		c1.removeClass( "tabi" ).addClass( "taba" );
		c2.removeClass( "taba" ).addClass( "tabi" );
	} else {
		hdr1.removeClass( "tab1hl" ).addClass( "tab1" );
		hdr2.removeClass( "tab2" ).addClass( "tab2hl" );
		c1.removeClass( "taba" ).addClass( "tabi" );
		c2.removeClass( "tabi" ).addClass( "taba" );
	}
}
function FNTHSuperGridPagerGoPage( id , url ) {
	var i = Math.floor( $("#"+id+"_pn" ).val() );
	i--;
	var gurl = url + i;
	document.location.href=gurl;
	return false;
}

function FNTHSuperGridPagerTBKeydown( id , event ) {
	var pn = $("#"+id+"_pn" );
	if (event.keyCode=='13') {
		var pd = pn.data( "pager_data" );
		FNTHSuperGridPagerGoPage( id , pd.empty_url );
		return false;
	}
	return true;
}

function InitFNTHSuperGridPager( id , pd ) {
	$("#"+id+"_pn").data( "pager_data" , pd );
	$("#"+id+"_pn").keydown( function( event ) { return FNTHSuperGridPagerTBKeydown( id , event ); } );
}
function FNTHSuperGrid_ToolbarId( tblid , tbrid ) {
	return tblid+"_tbrbutton_"+tbrid;
}

function FNTHSuperGridSelectAll( tblid , val ) {
	switch (val) {
	case 1:
		$("input.FNTHSuperGridRowCheck").attr( "checked" , "checked" );
		break;
	case 0:
		$("input.FNTHSuperGridRowCheck").removeAttr( "checked" );
		break;
	case -1:
		$("input.FNTHSuperGridRowCheck").each( function( index , elem ) {
			var e = $(elem);
			if (e.attr("checked")) {
				e.removeAttr( "checked" );
			} else {
				e.attr( "checked" , "checked" );
			}
		} );
		break;
	}

}
function RefreshLoginBox() {
	$.ajax(
		{
			type: "POST",
			cache: false,
			data: (
				{
					inajax : 1,
					ajaxevent : "refresh_loginbox"
				}
			),
			success: function(ret) {
				req = eval( ret );
				RefreshDGreenBox( "LoginBox" , req.htmlsource );
			}
		}
	);
}

function InitLoginBox( id ) {
}
function RefreshDGreenBox( id , content ) {
	$("#"+id).html( content );
}
function dictionary_submit( ) {
	var f = document.forms['sztaki_szotar'];
	if (f.W.value.length<2) {
		alert( aJSLangDefs.Please_type_at_least_2_chars );
		return false;
	}
	var url = f.action+"?";
	for (i=0; i<f.elements.length; i++) {
		if (f.elements[i].name == "L")
			url += f.elements[i].name +"="+f.elements[i].options[f.elements[i].selectedIndex].value+"&";
		else
			url += f.elements[i].name +"="+f.elements[i].value+"&";
	}
	w = window.open (url, 'sztaki_szotar', 'toolbar=no,scrollbars=yes,width=500,height=350');
	w.focus();
	return false;
} 

function HandleGlobalInfo( globalinfo ) {
	if (typeof globalinfo.t_numofagencies!="undefined")
		$("#numofagencies").html( globalinfo.t_numofagencies );
	if (typeof globalinfo.t_numoffreelancers!="undefined")
		$("#numoffreelancers").html( globalinfo.t_numoffreelancers );
	if (typeof globalinfo.t_numofparttimers!="undefined")
		$("#numofparttimers").html( globalinfo.t_numofparttimers );
	if (typeof globalinfo.t_numoftranslationjobs!="undefined")
		$("#numoftranslationjobs").html( globalinfo.t_numoftranslationjobs );
	if (typeof globalinfo.t_online_users!="undefined")
		$("#numofonlineusers").html( globalinfo.t_online_users );
	if (typeof globalinfo.t_online_members!="undefined")
		$("#numofonlinemembers").html( globalinfo.t_online_members );
}

function LaterInfoPanel( id ) {
	var data = $("#"+id).data( "datas" );
	var i,url="";
	for (i in data.facebook_iframe_params) {
		if (url.length==0) url+="?"; else url+="&";
		url+=i;
		url+="=";
		url+=data.facebook_iframe_params[i];
	}
	$("#facebook_frame").attr( "src" , data.facebook_iframe_src + url );
}

function InitInfoPanel( id , data ) {
	$("#"+id).data( "datas" , data );
	setTimeout( "LaterInfoPanel( '"+id+"' );" , 1000 );
}
var iPagerMessageFromUserId = 0;

var iPagerMessagesLastMessageId = 0;
var bPagerMessagesInForm = false;
var bFrontendPageFirst = true;

function PagerMessagesCheckAwaitingMessages( data ) {
	if (bPagerMessagesInForm) return;
	if (!data.length) return;
	$("#pagermsg").data( "datas" , data );
	var msg = data[0];
	if (iPagerMessagesLastMessageId==msg.pager_message_id) return;
	bPagerMessagesInForm = true;
	// modal form
	iPagerMessagesLastMessageId = msg.pager_message_id;
	$("#pagermsg_poster_user").html( msg.user_name );
	$("#pagermsg_message").html( msg.message );
	$("#pagermsg").dialog( "open" );
}

function ClearPagerMessageForm() {
	$("#pager_target_user").val("");
	iPagermessageFromUserId = 0;
	$("#pager_message").val("");
}

function InitPagerMessageForm() {
	$("#pager_target_user").autocomplete( {
		source: function(request,response) {
			$.ajax({
				type: "POST",
				cache: false,
				data: {
					inajax : 1,
					ajaxevent : "target_user_autocomplete",
					name_filter: request.term
				},
				success: function( data ) {
					response($.map(data,function(item) {
						var img = (item.is_online) ? "/images/online.png" : "/images/offline.png";
						return {
							label: "<img src=\""+img+"\" /> " + item.user_name,
							value: item.user_name,
							uid: item.user_id
						}
					}))
				}
			});
		},
		minLength: 1,
		select: function(event,ui) {
			iPagerMessageFromUserId = (ui.item) ? ui.item.uid : 0;
		}
	});

	// init pager form
	var btns = new Object();
	btns[aJSLangDefs.pager_Cancel]=function() {
		$(this).dialog( "close" );
	}
	btns[aJSLangDefs.pager_Send]=function() {
		if (iPagerMessageFromUserId) {
			var postdata = new Object();
			postdata.inajax = 1;
			postdata.ajaxevent = "send_pager_message";
			postdata.target_user_id = iPagerMessageFromUserId;
			postdata.message = $("#pager_message").val();
			$.ajax(
				{
					type: "POST",
					cache: false,
					data: postdata,
					success: function( retval ) {
						$("#messagepager").dialog( "close" );
						ClearPagerMessageForm();
					}
				}
			);
		} else {
			// nem valid form
			alert( aJSLangDefs.pager_No_target_user_selected );
		}
	}

	$("#messagepager").dialog(
		{
			autoOpen : false,
			width: 400,
			height: 300,
			modal: true,
			buttons: btns,
			close: function() {
			}
		}
	);

	var btns = new Object();
	btns[aJSLangDefs.pager_Acknowledge_message]=function() {
		var postdata = new Object();
		postdata.inajax = 1;
		postdata.ajaxevent = "ack_pager_message";
		var data = $("#pagermsg").data( "datas" );
		var msg = data[0];
		postdata.pager_message_id = msg.pager_message_id;
		$.ajax(
			{
				type: "POST",
				cache: false,
				data: postdata,
				success: function( retval ) {
					$("#pagermsg").dialog( "close" );
				}
			}
		);
	}

	$("#pagermsg").dialog(
		{
			autoOpen : false,
			width: 400,
			height: 300,
			modal: true,
			buttons: btns,
			close: function() {
				bPagerMessagesInForm = false;
			}
		}
	);
}

function InitFrontendPage( id , datas ) {
	var o = $("#"+id );
	o.data( "datas" , datas );
	// InitPagerMessageForm();
	// FrontendPageGlobalAjax( id );
}

function FrontendPageGlobalAjax( id ) {
	var o = $("#"+id );
	var d = o.data( "datas" );

	var postdata = new Object();
	postdata.inajax = 1;
	postdata.ajaxevent = "refresh_infopanel";
	if (bFrontendPageFirst) {
		postdata.first = true;
		bFrontendPageFirst = false;
	}

	if (typeof ChatPanelInitPost!="undefined")
		postdata = ChatPanelInitPost( postdata );
	
	$.ajax(
		{
			type: "POST",
			cache: false,
			data: postdata,
			success: function(allinfo) {
				if (typeof HandleGlobalInfo!="undefined")
					HandleGlobalInfo( allinfo.globalinfo );
				if (typeof ChatPanelPostCallback!="undefined")
					ChatPanelPostCallback( allinfo.chat_messages );
				if (typeof ChatroomUserPanelPostCallback!="undefined" &&
					typeof allinfo.chatroom_users!="undefined")
					ChatroomUserPanelPostCallback( allinfo.chatroom_users );
				// check for pager messages
				if (typeof PagerMessagesCheckAwaitingMessages!="undefined" &&
					typeof allinfo.pager_messages != "undefined")
					PagerMessagesCheckAwaitingMessages( allinfo.pager_messages );
				if (typeof allinfo.stop_callback=="undefined") {
					var o = $("#"+id );
					var d = o.data( "datas" );
					if (d.refresh_time>0) setTimeout( "FrontendPageGlobalAjax('"+id+"');" , d.refresh_time );
				}
			}
		}
	);
}

function CheckValidEmail( s ) {
	var atpos = s.indexOf( "@");
	var dotpos = s.lastIndexOf( "." );
	if (atpos == -1) return false;
	if (dotpos == -1) return false;
	if (atpos>dotpos) return false;
	if (s.indexOf( "," )>=0 || s.indexOf( " " )>=0 || s.indexOf( ";" )>=0) return false;
	return true;
}

function PagerMessageForm() {
	$("#messagepager").dialog("open");
}

