var BLACKLIST_TAB_NAME = 'Blacklist' ;

/***********************************************
*
**/
function InitBlacklist()
{
	// the background seo setting panel
	var SettingPan = document.createElement('DIV');
	Element.extend(SettingPan);
	
	var SetW = 600;
	var SetH = 300;
	var a_PageDim = GetPageSize() ;
	
	SettingPan.id = BLACKLIST_TAB_NAME ;
	SettingPan.style.zIndex = 1200 ;
	SettingPan.style.top = ((a_PageDim[3] / 2) - (SetH / 2)) + 'px' ;
	SettingPan.style.left = ((a_PageDim[2] / 2) - (SetW / 2)) + 'px' ;
	SettingPan.style.width = SetW + 'px' ;
	SettingPan.style.height = SetH + 'px' ;
	SettingPan.addClassName('SettingPanel') ;
	SettingPan.hide();
	
	var ABody = document.getElementsByTagName("body") ;
	ABody[0].appendChild(SettingPan) ;
	
	// the title
	var DivTitle = document.createElement('H1');
	Element.extend(DivTitle);
	DivTitle.innerHTML = txt_MyBlacklist ;
	DivTitle.addClassName('setting_title') ;
	SettingPan.appendChild(DivTitle) ;
	
	// div to contain the tabs of the dialog box
	var DivTabs = document.createElement('div');
	Element.extend(DivTabs);
	DivTabs.id = 'BlacklistTabs' ;	// just like MainTabs or SEOSettingTabs
	SettingPan.appendChild(DivTabs) ;
	
	// div for tab 1 = current tab of the main gui
	var DivTab1 = GiveMeATab() ;
	DivTabs.appendChild(DivTab1) ;
	
	// div for tab 1 = current tab of the main gui
	var DivTab2 = GiveMeATab() ;
	DivTabs.appendChild(DivTab2) ;
	
	// the form for audit blacklist
	var FormAuditParam = document.createElement('form');
	Element.extend(FormAuditParam);
	// FormAuditParam.name = 'form_audit_blacklist' ;
	FormAuditParam.id = 'FormAuditBlacklist' ;
	DivTab1.appendChild(FormAuditParam) ;
	
	InitBlacklistContent(FormAuditParam, a_AuditBlacklist) ;
	
	// the form for audit blacklist
	var FormUserParam = document.createElement('form');
	Element.extend(FormUserParam);
	// FormUserParam.name = 'form_user_blacklist' ;
	FormUserParam.id = 'FormUserBlacklist' ;
	DivTab2.appendChild(FormUserParam) ;
	
	InitBlacklistContent(FormUserParam, a_UserBlacklist) ;
	
	var i_ActiveTab = 0 ;	// the first tab is active
	initTabs('BlacklistTabs', Array(txt_AuditBlacklist, txt_UserBlacklist), i_ActiveTab,SetW,'auto',Array(false, false));
}


/***********************************************
*
**/
function InitBlacklistContent(pFormParam, pBlacklist)
{
	if( (pFormParam.id == 'FormUserBlacklist') && (MemberId == -1) )
	{
		var DivText1 = document.createElement('div');
		Element.extend(DivText1);
		DivText1.innerHTML = txt_BlacklistUserPrefsNotAvailable ;
		DivText1.addClassName("ico_info_top") ;
		DivText1.style.border = "1px solid #f60" ;
		DivText1.style.fontSize = "14px" ;
		pFormParam.appendChild(DivText1) ;
		
		var DivBtn = document.createElement('div');
		Element.extend(DivBtn);
		DivBtn.innerHTML = '<a href="#" onclick="HideBlacklist(); return false" class="bt_cancel bt_small" style="margin: 0">' + txt_Close + '</a>' ;
		DivBtn.style.height = "25px" ;
		DivBtn.style.marginTop = "10px" ;
		pFormParam.appendChild(DivBtn) ;
		
		return ;
	}

	// some text for intro
	var DivText = document.createElement('p');
	Element.extend(DivText);
	DivText.innerHTML = txt_BlacklistTxt1 ;
	pFormParam.appendChild(DivText) ;
	
	// text field only for user panel
	if(pFormParam.id == 'FormAuditBlacklist')
	{
		var DivWordAdd = document.createElement('div') ;
		DivWordAdd.style.clear = 'both';
	
		var DivNWTxt = document.createElement('div') ;
		Element.extend(DivNWTxt);
		DivNWTxt.addClassName('FloatLeft') ;
		DivNWTxt.style.lineHeight = '25px';
		DivNWTxt.style.marginBottom = '5px';
		DivNWTxt.innerHTML = txt_AddThisWordToBlacklist;
		DivWordAdd.appendChild(DivNWTxt) ;
		
		var InputTxtField = document.createElement('input') ;
		Element.extend(InputTxtField);
		InputTxtField.id = 'NewWordToBlacklist' ;
		InputTxtField.addClassName('FloatLeft') ;
		InputTxtField.style.marginLeft = '5px';
		InputTxtField.style.marginRight = '5px';
		InputTxtField.style.padding = '3px';
		InputTxtField.style.border = '1px solid #ccc';
		DivWordAdd.appendChild(InputTxtField) ;
		
		var DivNWBtn = document.createElement('div') ;
		Element.extend(DivNWBtn);
		// DivNWBtn.addClassName('FloatLeft') ;
		DivNWBtn.innerHTML = '<a href="#" class="bt_simple2 bt_small" onclick="AddExpressionToBlacklist(); return false">' + txt_AddToBlacklist + '</a>';
		DivWordAdd.appendChild(DivNWBtn) ;
		
		pFormParam.appendChild(DivWordAdd) ;
	}
	
	var DivBkg = document.createElement('div') ;
	Element.extend(DivBkg);
	DivBkg.addClassName('BlacklistBkg');
	pFormParam.appendChild(DivBkg) ;

	// add combo to choose the min car
	// ... some text
	var DivMinCar = document.createElement('div') ;
	Element.extend(DivMinCar);
	DivMinCar.addClassName('FloatLeft') ;
	DivMinCar.innerHTML = txt_NotTakeInAccountMoreThan + ' ' ;
	DivMinCar.style.lineHeight = '20px' ;
	DivBkg.appendChild(DivMinCar) ;
	
	// ... the combo
	var SelMinCar = document.createElement('select') ;
	Element.extend(SelMinCar);
	SelMinCar.addClassName('FloatLeft') ;
	SelMinCar.style.marginLeft = '5px';
	SelMinCar.style.marginRight = '5px';
	SelMinCar.name = "min_car" ;
	SelMinCar.addClassName("MinCarSelect") ;
	
	for(i = 0 ; i <= 5 ; i++)
		SelMinCar.options[i] = new Option(i, i) ;
	
	if(pFormParam.id == 'FormAuditBlacklist')
		SelMinCar.selectedIndex = i_AuditMinCar ;
	else
		SelMinCar.selectedIndex = i_UserMinCar ;
	DivBkg.appendChild(SelMinCar) ;
	
	// ... the text after
	var DivChars = document.createElement('div') ;
	Element.extend(DivChars);
	DivChars.style.lineHeight = '20px' ;
	DivChars.innerHTML = ' ' + txt_Characters ;
	DivBkg.appendChild(DivChars) ;
	
	// some more text
	DivText = document.createElement('p');
	Element.extend(DivText);
	DivText.innerHTML = txt_BlacklistTxt2 ;
	DivBkg.appendChild(DivText) ;
	
	// if the blacklist is empty => display message
	if(pBlacklist.length == 0)
	{
		var DivNoBlacklist = document.createElement('div') ;
		Element.extend(DivNoBlacklist);
		DivNoBlacklist.addClassName('BlacklistWords') ;
		DivNoBlacklist.innerHTML = txt_NoWordInBlacklist ;
		DivBkg.appendChild(DivNoBlacklist) ;
	}
	else
	{
		// add blacklist as ul
		var ListBL = document.createElement('ul');
		Element.extend(ListBL);
		ListBL.addClassName('BlacklistWords') ;
		
		var i_Height = Math.ceil(pBlacklist.length / 4) * 20 ;
		ListBL.setStyle({height: i_Height+'px'});
		
		DivBkg.appendChild(ListBL) ;
		
		// add each word of the blacklist in the ul
		var Word ;
		var i = 0 ;
		pBlacklist.each(function(item)
		{
			Word = document.createElement('li');
			Element.extend(Word);
			
			Word.addClassName('FloatLeft') ;
			// Word.style.display = 'inline' ;
			Word.style.width = '145px' ;
			Word.style.height = '20px' ;
						
			Word.innerHTML = '<input class="bl_item_checkbox" type="checkbox" id="bl_w_'+i+'" name="bl_'+i+'" value="'+item+'" checked /><label for="bl_w_'+i+'">&nbsp;'+item.truncate(20) +'</label>' ;
			
			ListBL.appendChild(Word) ;
			
			i++ ;
		});
	}
	
	// the buttons
	var DivButtons = document.createElement('div') ;
	Element.extend(DivButtons);
	DivButtons.style.clear = 'both' ;
	// var s_Btns = '<div style="border-bottom: 1px solid #AF964C; height: 30px;">&nbsp;</div>' ;
	var s_Btns = '' ;
	if(pFormParam.id == 'FormAuditBlacklist')
	{
		s_Btns += '<a href="#" onclick="SaveAsDefaultBlacklist(); return false" class="bt_simple2" style="margin: 10px; float: left;">' + txt_SaveAsDefaultBlacklist + '</a>' ;
		s_Btns += '<a href="#" onclick="ApplyBlacklist(\''+ pFormParam.id +'\'); return false" class="bt_simple2" style="margin: 10px; float: left;">' + txt_Apply + '</a>' ;
		s_Btns += '<div id="'+pFormParam.id+'Msg" style="margin: 10px;">&nbsp;</div>' ;
		s_Btns += '<a href="#" onclick="RestoreBlacklist(\''+ pFormParam.id +'\'); return false" class="bt_simple2" style="margin: 10px; clear: both;">' + txt_RestoreDefaultBlacklist + '</a>' ;
	}
	else
	{
		s_Btns += '<a href="#" onclick="SaveUserBlacklist(); return false" class="bt_simple2" style="margin: 10px; float: left;">' + txt_SaveAsSettings + '</a>' ;
		s_Btns += '<a href="#" onclick="ApplyBlacklist(\''+ pFormParam.id +'\'); return false" class="bt_simple2" style="margin: 10px; float: left;">' + txt_Apply + '</a>' ;
		s_Btns += '<div id="'+pFormParam.id+'Msg" style="margin: 10px;">&nbsp;</div>' ;
		s_Btns += '<a href="#" onclick="RestoreBlacklist(\''+ pFormParam.id +'\'); return false" class="bt_simple2" style="margin: 10px; clear: both;">' + txt_RestoreDefaultBlacklist + '</a>' ;
	}
	
	s_Btns += '<a href="#" onclick="HideBlacklist(); return false" class="bt_cancel" style="margin: 10px; float: right;">' + txt_Close + '</a>' ;
	
	DivButtons.innerHTML = s_Btns ;
	pFormParam.appendChild(DivButtons) ;
}


/***********************************************
*
**/
function AddExpressionToBlacklist()
{
	// set flag on
	BlacklistChanged = true ;
	
	var sExpr = $F('NewWordToBlacklist').strip() ;
	
	//var RegValid = /^[\s\da-zA-Záéíóúäëïöüàèìòùâêîôûçãõ]+$/ ;
	var RegValid = /[,\|]/ ;
	if((sExpr == '') || (RegValid.test(sExpr)) )
	{
		alert(txt_NoWayToAddToBlacklist) ;
		return ;
	}
	
	a_AuditBlacklist.push(sExpr) ;
	
	// check whether the expression belongs to an agregate
	var s_ParentAgregate = AgregatorObj.GetParentAgregate( sExpr ) ;
	if(s_ParentAgregate != '')
	{
		if( ! confirm(txt_ThisKeywordBelongsToBL.replace(/__EXPR__/, s_ParentAgregate)) )
			return ;
		else
			AgregatorObj.Delete(s_ParentAgregate, false) ;
	}
	
	UpdateBlacklistPanel('FormAuditBlacklist', a_AuditBlacklist) ;
	
	UpdateAllTabs() ;
}


/***********************************************
*
**/
function GetMinCarValue(pFormId)
{
	var aSelect = $(pFormId).getElementsByClassName('MinCarSelect');
	return aSelect[0].getValue() ;
}

/***********************************************
*
**/
function SaveUserBlacklist()
{
	i_UserMinCar = GetMinCarValue('FormUserBlacklist') ;
	UpdateBlacklist('FormUserBlacklist', a_UserBlacklist) ;
	SaveBlacklist('FormUserBlacklist');
}

/***********************************************
*
**/
function RestoreBlacklist(pFormId)
{
	if(pFormId == 'FormAuditBlacklist')
	{
		UpdateMinCarCombo(pFormId, i_UserMinCar) ;
		UpdateBlacklistPanel(pFormId, a_UserBlacklist) ;
	}
	else
		UpdateBlacklistPanel(pFormId, a_DefaultBlacklist) ;
}


/***********************************************
*
**/
function SaveAsDefaultBlacklist()
{
	// update user min car DS
	i_UserMinCar = GetMinCarValue('FormAuditBlacklist') ;
	
	// update user blacklist DS
	UpdateBlacklist('FormAuditBlacklist', a_UserBlacklist) ;
	
	// send to server via ajax
	SaveBlacklist('FormAuditBlacklist') ;
}


/***********************************************
*
**/
function AddToBlacklist()
{
	// set flag on
	BlacklistChanged = true ;
	
	var WordToblacklist = $(TagHandleObj.CurTagId).innerHTML ;

	if( ! confirm(txt_DoYouWantToDeleteTheWord.replace(/__WORD__/, WordToblacklist)) )
		return ;

	// if empty expression, do nothing
	if(WordToblacklist == '')
		return ;
	
	a_AuditBlacklist.push(WordToblacklist) ;
	
	// check whether the expression belongs to an agregate
	var s_ParentAgregate = AgregatorObj.GetParentAgregate( WordToblacklist ) ;
	if(s_ParentAgregate != '')
	{
		if( ! confirm(txt_ThisKeywordBelongsToBL.replace(/__EXPR__/, s_ParentAgregate)) )
			return ;
		else
			AgregatorObj.Delete(s_ParentAgregate, false) ;
	}
	
	UpdateAllTabs() ;
}


/***********************************************
*
**/
function UpdateBlacklistPanel(ps_BlacklistFormId, pBlacklist)
{
	var BlacklistForm = $(ps_BlacklistFormId) ;
	
	BlacklistForm.immediateDescendants().each(function(childElt)
	{
		BlacklistForm.removeChild(childElt) ;
	});

	InitBlacklistContent(BlacklistForm, pBlacklist) ;
	UpdateBlacklistPanelHeight() ;
}


/***********************************************
*
**/
function UpdateMinCarCombo(ps_BlacklistFormId, pi_MinCar)
{
	var aSelect = $(ps_BlacklistFormId).getElementsByClassName('MinCarSelect');
	aSelect[0].selectedIndex = pi_MinCar ;
}


/***********************************************
* 
**/
function GetBlacklist(ps_Type)
{
	ps_Type = ps_Type.toLowerCase();
	var s_Data = '' ;
	
	if(ps_Type == 'default')	{a_DefaultBlacklist.each(function(item)	{s_Data += item + ',' ;});}
	else if(ps_Type == 'user')	{a_UserBlacklist.each(function(item)	{s_Data += item + ',' ;});}
	else if(ps_Type == 'audit')	{a_AuditBlacklist.each(function(item)	{s_Data += item + ',' ;});}
	
	return s_Data.substr(0, s_Data.length - 1) ;
}


/***********************************************
* 
**/
function ApplyBlacklist(pFormId)
{
	// set flag on
	BlacklistChanged = true ;

	// update audit min car data structure
	i_AuditMinCar = GetMinCarValue(pFormId) ;
	
	// if apply from user panel => update audit combo in audit panel
	if(pFormId == 'FormUserBlacklist')
		UpdateMinCarCombo('FormAuditBlacklist', i_AuditMinCar)
	
	// update audit blacklist data structure
	UpdateBlacklist(pFormId, a_AuditBlacklist);
	// if apply from user panel => update audit panel
	if(pFormId == 'FormUserBlacklist')
		UpdateBlacklistPanel('FormAuditBlacklist', a_AuditBlacklist) ;
	
	UpdateAllTabs() ;
}

/***********************************************
* 
**/
function SaveBlacklist(pFormId)
{
	// set flag on
	BlacklistChanged = true ;

	var Url = 'index.php?module=audit&action=SaveBlacklist' ;
	params = 'data=' + DataFileName ;
	params+= '&' + $('FormUserBlacklist').serialize() ;
	params+= '&member_id=' + MemberId ;
	params+= '&member_key=' + MemberKey ;
	params+= '&user_min_car=' + i_UserMinCar ;
	// alert(params);
	var myAjax = new Ajax.Updater(pFormId + 'Msg', Url, 
	{	method: 'post', 
		parameters: params
	});
	$(pFormId + 'Msg').innerHTML = txt_Wait ;
	
	UpdateBlacklistPanel('FormUserBlacklist', a_UserBlacklist) ;
	UpdateMinCarCombo('FormUserBlacklist', i_UserMinCar) ;
}


/***********************************************
*
**/
function UpdateBlacklist(pFormId, pBlacklist)
{
	var a_BlacklistItems = $(pFormId).getInputs('checkbox');
	pBlacklist.clear();
	a_BlacklistItems.each(function(item)
	{
		if(item.checked)
			pBlacklist.push(item.value) ;
	});
}


/***********************************************
*
**/
function ShowBlacklist()
{
	UpdateBlacklistPanel('FormAuditBlacklist', a_AuditBlacklist);
	UpdateBlacklistPanel('FormUserBlacklist', a_UserBlacklist);
	
	HideMathSelectBoxes();
	ShowVeil();
	$(BLACKLIST_TAB_NAME).show() ;
	
	UpdateBlacklistPanelHeight() ;
}

/***********************************************
*
**/
function UpdateBlacklistPanelHeight()
{
	var a_WordNb = $$(".BlacklistWords li") ;
	var i_Height = 350 + Math.ceil(a_WordNb.length / 4) * 20 ;
	$(BLACKLIST_TAB_NAME).setStyle({height: i_Height+'px'});
}

/***********************************************
*
**/
function HideBlacklist()
{
	ShowMathSelectBoxes();
	$(BLACKLIST_TAB_NAME).hide() ;
	HideVeil();
}
