Framework.Modules.SEOUrlTree = function(){
	
	this.QUERY_ALL_ENGINES = "allEngines";
	this.engineDialog;
	this.exampleUrl = "www.yoursite1.com\nyoursite2.com";
	var self = this;
	this.formSearchEngines = new Array();
	this.allEnginesResponse;
	this.searchEngines;
	this.groupId = '3';	
	this.allSearchEngines = new Array();
	this.div;

	this.populateEngineList = function(response,sel){
			self=sel;
			self.searchEngines = eval("("+response.responseText+")");						
			self.drawForm();
	}

	this.getAddForm = function(div, mainDiv){
		
	    this.div=div;
		if(!Utils.exist(this.searchEngines)){
			var groupId = this.groupId;
			RequestDispatcher.sendGET(this.getSEOUrl() + User.userId + "/engineList/" + groupId, this.populateEngineList,this);
		} else {
			this.drawForm();	
		}
		return mainDiv;		

   }

    this.getEnginesAsList = function(){
			var innerArray = [];			
			if(this.searchEngines){				
				innerArray.push('<table width="100%">');
				innerArray.push(	'<tr>');
				innerArray.push(		'<td id="formEnginesContainer">');
				for (var i = 0; i < this.searchEngines.length; i++) {
					innerArray.push(		'<table id="engine_'+this.searchEngines[i].id+'">');
					innerArray.push(			'<tr>');
					innerArray.push(				this.getCountryFlag(i));
					innerArray.push(				'<td style="width:20px"><img src="images/seo/logo/'+this.searchEngines[i].icon+'"/></td>');
					innerArray.push(				'<td style="width:100px">');
					innerArray.push(this.searchEngines[i].name);
					innerArray.push(				'</td>');
					innerArray.push(				'<td style="width:60px"><a href="#" name="remove_engine" id="'+this.searchEngines[i].id+'" onclick="'+this.getObjectName()+'.removeSearchEngineFromFormById(this.id)">remove</a></td>');
					innerArray.push(			'</tr>');					
					innerArray.push(		'</table>');
					self.addSearchEngineToFormSimple(this.searchEngines[i].id);
				}
				innerArray.push(		'</td>');
				innerArray.push(	'</tr>');				
				innerArray.push(	'<tr>');
				innerArray.push(		'<td align="left" colspan="2">');
				innerArray.push(			'<span id="moreLink" style="text-decoration:underline;color:#0000FF;cursor:pointer" onclick="'+this.getObjectName()+'.openMoreEngines(this.id)">' + Framework.Lang.SEO.AddForm.moreEngines + '</span>');				
				innerArray.push(		'</td>');
				innerArray.push(	'</tr>');				
				innerArray.push('</table>');
			}	
			return innerArray.join('');		
				
	 }

		this.addMoreEnginesEvent = function(){			
			var moreLink = document.getElementById("moreLink");
			if(moreLink != null){
				Ext.EventManager.addListener(moreLink, "click", self.openMoreEngines, true);
			}
		}
		
		this.openMoreEngines = function(){
			if(!Utils.exist(this.allEnginesResponse)){
				var groupId = this.groupId;
				var url = self.getSEOUrl() + User.userId + "/" + this.QUERY_ALL_ENGINES + "/" + groupId;
				RequestDispatcher.sendGET(url, this.parseMoreEnginesData);
			} else {
				self.populateMoreEnginesForm();
			}
		}
		
		this.parseMoreEnginesData = function(json){		    
			self.allEnginesResponse = eval("("+json.responseText+")");
			self.populateMoreEnginesForm();
		}
		
		this.populateMoreEnginesForm = function(){			
			var enginesAddWindowBody = $("seo_addWindowBody");
			if(Utils.exist(enginesAddWindowBody)){
				var allEnginesTable = self.getAllEnginesTable();
				enginesAddWindowBody.innerHTML = allEnginesTable;				
			}
			self.createMoreEnginesDialog();
			self.setAddEvents();
			self.setRemoveEvents();
		}
		
		
		this.setAddEvents = function(){
			var addElements = document.getElementsByName("add_engine");
			var addElement;
			for(var i=0; i<addElements.length; i++){
				addElement = addElements[i];
				YAHOO.util.Event.removeListener(addElement, "click");				
				YAHOO.util.Event.addListener(addElement, "click", self.addSearchEngineToForm, addElement.id);
			}
		}
		
		this.setRemoveEvents = function(){
			var removeElements = document.getElementsByName("remove_engine");
			var removeElement;
			for(var i=0; i<removeElements.length; i++){
				removeElement = removeElements[i];
				YAHOO.util.Event.removeListener(removeElement, "click");			
				YAHOO.util.Event.addListener(removeElement, "click", this.removeSearchEngineFromForm, removeElement.id);
			}
		}	
		
		this.setRemoveEvent = function(removeLink){
			YAHOO.util.Event.addListener(removeLink, "click", this.removeSearchEngineFromForm, removeLink.id);			
		}			
		
		this.addSearchEngine = function(engine){
			if(this.allSearchEngines.indexOf(engine) == -1){
				this.allSearchEngines.push(engine);
			}
		}
	
		this.removeSearchEngine = function(id){
			Utils.removeFromArray(this.allSearchEngines, id);		
		}
		
		this.getSearchEngine = function(id){
			var searchEngine = null;
			for(var i=0;i<this.allSearchEngines.length; i++){
				searchEngine = this.allSearchEngines[i];
				if(searchEngine.id == id){
					break;
				}
			}
			return searchEngine;
		}
		
		this.addSearchEngineToFormSimple = function(id){
			if(this.formSearchEngines.indexOf(id) == -1){
				this.formSearchEngines.push(id);
			}				
		}
				
		this.addSearchEngineToForm = function(event, idStr){			
			var id = idStr.substring(idStr.lastIndexOf("_")+1);			
			if(Utils.indexOfElemFromArray(self.formSearchEngines, id) == -1){
				self.formSearchEngines.push(id);
				var searchEngine = self.getSearchEngine(id);
				var formEnginesContainer = $("formEnginesContainer");
				if(Utils.exist(formEnginesContainer)){
					var engineHtml = new Array();
					engineHtml.push('<table id="engine_'+searchEngine.id+'">');
					engineHtml.push(	'<tr>');
					engineHtml.push(		self.getCountryFlagForAddSearchEngine(searchEngine))
					engineHtml.push(		'<td style="width:20px"><img src="images/seo/logo/'+searchEngine.icon+'"/></td>');
					engineHtml.push(		'<td style="width:100px">');
					engineHtml.push(searchEngine.name);
					engineHtml.push(		'</td>');
					engineHtml.push(		'<td style="width:60px"><a href="#" name="remove_engine" id="remove_engine_'+searchEngine.id+'">remove</a></td>');
					engineHtml.push(	'</tr>');
					engineHtml.push('</table>');
					formEnginesContainer.innerHTML += engineHtml.join('');
					self.setRemoveEvents();
					DialogWindow.fixDialogSizes();
				}
				self.changeLink(idStr);
			}
			
		}
		
		this.removeSearchEngineFromForm = function(event, idStr){
			var id = idStr.substring(idStr.lastIndexOf("_")+1);
			this.formSearchEngines = Utils.removeFromArray(self.formSearchEngines, id);
			var formEngine = $("engine_"+id);
			if(Utils.exist(formEngine)){
				removeNode_(formEngine);
				DialogWindow.fixDialogSizes();		
			}
			self.changeLink(idStr);
		}
		
		this.removeSearchEngineFromFormById = function(idStr){
			var id = idStr.substring(idStr.lastIndexOf("_")+1);
			this.formSearchEngines = Utils.removeFromArray(self.formSearchEngines, id);
			var formEngine = $("engine_"+id);
			if(Utils.exist(formEngine)){
				removeNode_(formEngine);
				DialogWindow.fixDialogSizes();		
			}
			self.changeLink(idStr);
		}
		
		this.changeLink = function(linkId){			
			var id = linkId.substring(linkId.lastIndexOf("_")+1);
			var link = $(linkId);			
			if(Utils.exist(link)){
				YAHOO.util.Event.removeListener(link, "click");
				if(Utils.indexOfElemFromArray(this.formSearchEngines, id) != -1){
					link.innerHTML = "remove";
					link.id = "remove_engine_" + id;
					YAHOO.util.Event.addListener(link, "click", self.removeSearchEngineFromForm, link.id);
				} else {
					link.innerHTML = "add";
					link.id = "add_engine_" + id;
					YAHOO.util.Event.addListener(link, "click", self.addSearchEngineToForm, link.id);					
				}
			}
			
		}
		this.getAllEnginesTable = function(){
			var data = this.allEnginesResponse.data;
			var tdCount = 3;
			var formHtml = new Array();
			formHtml.push('<table class="seoEnginesTable" width="100%" align="center">');
			for(var j=0; j<data.length; j++){
				var engine = data[j];
				formHtml.push(	'<tr class="seoEnginesTableHeader">');
				formHtml.push(		'<td colspan="' + tdCount*3 + '" align="left">');
				formHtml.push(			'<img src="images/seo/logo/'+engine.icon+'" align="left"/>');
				formHtml.push(			'<span style="padding-left:10px">');
				formHtml.push(engine.name);
				formHtml.push(			'</span>');
				formHtml.push(		'</td>');
				formHtml.push(	'</tr>');
				var locales = engine.locales;
				for(var i=0; i<locales.length; i++){
					if(i % tdCount == 0){
						formHtml.push(	'<tr>');	
					}
					formHtml.push(		this.getLocalesCountryFlag(locales[i]));
					formHtml.push(		'<td class="center">');
					formHtml.push(locales[i].name);
					formHtml.push(		'</td>');
					if(Utils.indexOfElemFromArray(this.formSearchEngines, locales[i].id) == -1){
						formHtml.push(	'<td class="right"><a href="#" name="add_engine" id="add_engine_'+locales[i].id+'">add</a></td>');
					} else {
						formHtml.push(	'<td class="right"><a href="#" name="remove_engine" id="remove_engine_'+locales[i].id+'">remove</a></td>');
					}
					if( (i+1) % tdCount == 0){
						formHtml.push(	'</tr>');
					}
					self.addSearchEngine(locales[i]);
				}
				if(locales.length % tdCount !=0){
					var lengthToFill = tdCount - (locales.length % tdCount);
					for(var i=0; i<lengthToFill; i++){
						if(i % tdCount == 0 && i!=0){
							formHtml.push(	'<tr>');	
						}					
						formHtml.push(		'<td class="center"></td>');
						formHtml.push(		'<td class="center"></td>');
						formHtml.push(		'<td class="center"></td>');
						if( (i+1) % tdCount == 0 || i == locales.length){
							formHtml.push(	'</tr>');
						}
					}
				}
			}
			formHtml.push('</table>');
			return formHtml.join('');			
		}
		
		this.createMoreEnginesDialog = function(){			
			if(!Utils.exist(moreEnginesDialog)){
				moreEnginesDialog = new MoreEnginesDialogWindow();
			}
			moreEnginesDialog.fixDialogSizes();
			moreEnginesDialog.show();
		}
		
		this.drawForm = function(){		
			var exampleUrlForJs = "www.yoursite1.com\\nyoursite2.com";
			var seoBacklinksForm = new Array();		
			seoBacklinksForm.push('<table nowrap="nowrap" class="text">');
			seoBacklinksForm.push(	'<tr>');
			seoBacklinksForm.push(		'<td class="seoFormLabel">');
			seoBacklinksForm.push(			self.getFormLabel());
			seoBacklinksForm.push(			'<img class="helpIcon" onclick="showHelp(\''+self.getShowHelpInfo()+'\')" src="images/homePage/Help.gif"/>');
			seoBacklinksForm.push(		'</td>');
			seoBacklinksForm.push(		'<td><input type="text" name="testName" id="testName" allowBlank="false" style="width:156px;"/></td>');
			seoBacklinksForm.push(		'<td></td>');
			seoBacklinksForm.push(	'</tr>');
			seoBacklinksForm.push(	'<tr>');
			seoBacklinksForm.push(		'<td class="seoFormLabel">');
			seoBacklinksForm.push(			'<span class="formLabel" style="float: left;">' + Framework.Lang.AddTest_view + ':</span>');
			seoBacklinksForm.push(			'<img class="helpIcon" onclick="showHelp(\''+self.getShowHelpInfo()+'\')" src="images/homePage/Help.gif"/>');
			seoBacklinksForm.push(		'</td>');
			seoBacklinksForm.push(     	'<td>');
			seoBacklinksForm.push(     		'<select name="view">');
			seoBacklinksForm.push(     			'<option value="' + TABLE_VIEW + '">' + Framework.Lang.AddTest_view_table + '</option>');
			seoBacklinksForm.push(     			'<option value="' + LINE_VIEW + '" selected="selected">' + Framework.Lang.AddTest_view_linechart + '</option>');
			seoBacklinksForm.push(     			'<option value="' + BAR_VIEW + '">' + Framework.Lang.AddTest_view_barchart + '</option>'); 
			seoBacklinksForm.push(				'<option value="' + ANGLE_VIEW + '">' + Framework.Lang.AddTest_view_angle + '</option>');
			seoBacklinksForm.push(     		'</select>');
			seoBacklinksForm.push(     	'</td>')
			seoBacklinksForm.push(	'</tr>');
			seoBacklinksForm.push('</table>');				
			seoBacklinksForm.push('<table nowrap="nowrap" class="text" width="100%">');			
			seoBacklinksForm.push(	'<tr>');		
			seoBacklinksForm.push(		'<td colspan="2" align="left">');
			seoBacklinksForm.push(			'<input type="hidden" name="tagType" value="' + TAG_TYPE_ENGINES_SITES + '"/>');		
			seoBacklinksForm.push(			'<fieldset>');		
			seoBacklinksForm.push(				'<legend class="addCheckLegend"> '+self.getCheckLegend()+' </legend>');
			seoBacklinksForm.push(				'<span id="backlinksSearchEngineList">');
			var engineHtml = self.getEnginesAsList();
			seoBacklinksForm.push(engineHtml);
			seoBacklinksForm.push(				'</span>');
			seoBacklinksForm.push(			'</fieldset>');					
			seoBacklinksForm.push(		'</td>');
			seoBacklinksForm.push(	'</tr>');
			seoBacklinksForm.push(	'<tr>');
			seoBacklinksForm.push(		'<td colspan="2">');
			seoBacklinksForm.push(			'<span class="formLabel" style="float: left;">URL(s):</span>');
			seoBacklinksForm.push(			'<img class="helpIcon" style="float:left" onclick="showHelp(\''+self.getShowHelpInfo()+'\')" src="images/homePage/Help.gif"/>');
			seoBacklinksForm.push(		'</td>');
			seoBacklinksForm.push(	'</tr>');
			seoBacklinksForm.push(	'<tr>');
			seoBacklinksForm.push(		'<td colspan="2" valig="top"><textarea rows="6" style="width:97%; color:#BBBBBB" name="testSite" id="testSite" allowBlank="false" value="'+this.exampleUrl+'" onFocus="Utils.removeLabelFromField(this, \''+exampleUrlForJs+'\')" onBlur="Utils.putLabelInFied(this, \''+exampleUrlForJs+'\')">'+this.exampleUrl+'</textarea></td>');
			seoBacklinksForm.push(		'<td valign="top">*</td>');
			seoBacklinksForm.push(	'</tr>');
			seoBacklinksForm.push('</table>');				 
				
			
			this.div.innerHTML = seoBacklinksForm.join('');
			
					
			changeFormStyle(self.div, true, true, true, true, true);			
			//self.setRemoveEvents();
			self.addMoreEnginesEvent();
		}
		
	
	
	this.save = function(DialogWindow){		
		var status = "success"; 
		var formData = DialogWindow.getFormData();
		var testName = formData.testName.trim();
		var view = formData.view;
		var tagType = formData.tagType;
		var type = formData.type;
		var userTagType = formData.userTagType;

		var searchEngine = this.formSearchEngines;
		var searchEngineLength = 1;
		var searchEngineUrlPart = "";

		for(var i=0; i<searchEngine.length; i++){
			searchEngineUrlPart += "/" + searchEngine[i];
		}
		searchEngineLength = searchEngine.length;


		var testSite = formData.testSite.trim();
		var testSiteList = testSite.split("\n");
		var testSiteUrlPart = "";
		var slashCount = 0;
		for(var i=0; i<testSiteList.length; i++){
			testSiteList[i] = StringUtils.filter(testSiteList[i]);
			testSiteUrlPart += "siteURL=" + encode(testSiteList[i])+"&";
		}
		for(var i=0; i<testSiteList.length; i++){
			if(!ValidatePatterns.isUrlValid(testSiteList[i])){
				status = Framework.Lang.URLNotValid;
				break;
			}
		}
		if(status == "success"){
			if(testSite == ""  || StringUtils.equalsIgnoreSymbols(testSite, this.exampleUrl, ["\n","\r"])){
				status = Framework.Lang.URLNotValid;
			} else if(!Utils.exist(searchEngine) || searchEngine.length == 0){
				status = Framework.Lang.SEO.Validation.noEngineSelected;
			} else if(testName == ""){
				testName = StringUtils.replaceAll(testSiteList[0], "/", "_");
				$("testName").value = testName;
			} else if(testName.indexOf("/") != -1){
				status = Framework.Lang.SEO.Validation.nameContainsSlash;
			}			
		}
		
		if(status == "success"){
			var fullUrl = self.getSEOUrl() + User.userId + "/" +  self.getUserTagType(formData)+ encode(testName) + "/" + view + "/" + tagType + "/" + type + "/" + searchEngineLength + searchEngineUrlPart;			
			Request.sendPOST(fullUrl,testSiteUrlPart, this.add, DialogWindow);
		} else {
			DialogWindow.error([status], false);
		}				
	}
	this.add = function(response, DialogWindow){
		
		var addParams=eval("("+response.responseText+")");
		if(addParams.status == STATUS_OK){
			var ParamsArray = [];
			var moduleArray = addParams.data.moduleArray;
			var params;
			for(var i=0; i<moduleArray.length; i++){
				params = {};
				params.moduleName=self.getModuleName();
				params.view=moduleArray[i].view;
				params.dataId=moduleArray[i].tagId;
				params.isNew=true;
	 	 		PortletLoader.addPortletFromTree(params);
			}
			DialogWindow.hide();
		} else {
			DialogWindow.error([addParams.status]);
		}
	}
}