	var isCtrl = false; 
				
	var selected = new Array();
	
	function getL1(id){
		for(var i=0; i < level1.length;i++)
			if(level1[i].id == id) return level1[i];
		return null;
	}
	
	function getL2Parent(l2id){
		for(var i=0; i < level1.length;i++)
			for(var j=0; j < level1[i].level2.length; j++)
				if(level1[i].level2[j].id == l2id) return level1[i];
		return null;
	}
	
	function getL2(id){
		for(var i=0; i < level1.length;i++)
			for(var j=0; j < level1[i].level2.length; j++)
				if(level1[i].level2[j].id == id) return level1[i].level2[j];
		return null;
	}
	
	function tmpTaxonomy(l1, level2){
		this.l1 = l1;
		this.level2 = level2;
	}
	
	function selectL2(l1Id, l2Id){
		var l1 = level1[l1Id];
		var l2 = l1.level2[l2Id];
		l2.selected = !l2.selected;
		if(l1.selected) l1.selected = !l2.selected;
		$('ygtvlabelel'+l1Id).className = l1.selected ? 'yui-dt-selected' : 'yui-dt-unselected';
		$('ygtvlbl_'+l1Id + '_'+l2Id).className=l2.selected ? 'yui-dt-selected' : 'yui-dt-unselected';
		if(!isCtrl && l2.selected)
			unselectL2Others(l1Id, l2Id);
	}
	
	function unselectL2Others(l1Id, l2Id){
		for(var i=0; i < level1.length;i++){
			if(level1[i].moved || !level1[i].toBeDisplayed) continue;
			if(level1[i].selected){
				level1[i].selected = false;
				$('ygtvlabelel'+i).className =  'yui-dt-unselected';
			}
			for(var j=0; j < level1[i].level2.length; j++){
				if(l1Id == i && l2Id == j) continue;
				var lvl2 = level1[i].level2[j];
				if(lvl2.moved || !lvl2.toBeDisplayed)continue;
				if(lvl2.selected){
					lvl2.selected = false;
					$('ygtvlbl_'+i + '_'+ j).className='yui-dt-unselected';
				}
			}
		}
	}
	
	function unselectChildren(l1Id){
		var l1 = level1[l1Id];
		l1.level2.each(function(lvl2, index){
			if(!lvl2.moved && lvl2.selected){
				lvl2.selected = false;
				$('ygtvlbl_'+l1Id + '_'+ index).className='yui-dt-unselected';
			}
		});
	}

	
	
	function addallcategories(){
		level1.each(function(l1, index){
			if(l1.toBeDisplayed){
				l1.moved = true;
				l1.level2.each(function(lvl2, index){
					if(lvl2.toBeDisplayed)lvl2.moved = false;
				});
			}
			
		});
		
		createTaxonomyTree();
		createSelectedTaxTree();
	}
	
	
	function addcategories(){
		var categories = $('selectedCategories');
		var tbody = $('filteredCategoriesId');
		var taxId = '';
		var sHtml = '';
		level1.each(function(l1, index){
			if(l1.selected && !l1.moved && l1.toBeDisplayed){
				l1.moved = true;
				//sHtml = '<b>' + l1.label + '</b>&nbsp;-&nbsp;<i>All</i>';
				//selectCategory(l1.id, sHtml);
				l1.level2.each(function(lvl2, l2index){
					lvl2.moved = false;
					lvl2.selected = false;
					
				});
				
			}
			l1.level2.each(function(lvl2, l2index){
				if(lvl2.selected && !lvl2.moved && lvl2.toBeDisplayed){
					lvl2.moved = true;
				}
			});
		});
		createTaxonomyTree();
		createSelectedTaxTree();
	}
	
	
	function selectCategory(id, sHtml){
		var tbody = $('filteredCategoriesId');
		var row = tbody.insertRow(-1);
		var cell = row.insertCell(-1);
		cell.id = 'td_'+ id;
		
		cell.className = 'yui-dt-unselected';
		cell.innerHTML = '<div id="div_sel_'+ id + '">' + sHtml +'</div>';
		Event.observe(cell, 'click', function (ev) {
			Event.stop(ev);
			flip(eval('\'' + id + '\''));
		}, false);
		Event.observe(cell, 'dblclick', function (ev) {
			Event.stop(ev);
		}, false);
		Event.observe($('div_sel_'+ id), 'mousedown', function (ev) {
			Event.stop(ev);
		}, false);
	}
	
	function removecategories(){
		level1.each(function(l1, index){
			if(l1.movedSelected){
				l1.selected = false;
				l1.moved = false;
				l1.movedSelected = false;
			}
			l1.level2.each(function(lvl2, l2index){
				if(lvl2.movedSelected){
					lvl2.selected = false;
					lvl2.moved = false;
					lvl2.movedSelected = false;
				}
			});
			
		});
		createTaxonomyTree();
		createSelectedTaxTree();
	}
	function removeallcategories(){
		var tbody = $('filteredCategoriesId');
		removeChildren(tbody);
		level1.each(function(l1, index){
			if(l1.moved){
				l1.selected = false;
				l1.moved = false;
				l1.movedSelected = false;
			}
			l1.level2.each(function(lvl2, l2index){
				if(lvl2.moved){
					lvl2.selected = false;
					lvl2.moved = false;
					lvl2.movedSelected = false;
				}
			});
		});
		createTaxonomyTree();
	}
	
	
	function createSelectedTaxTree(){
		var tbody = $('filteredCategoriesId');
		removeChildren(tbody);
		level1.each(function(l1, index){
			if(l1.moved){
				sHtml = "<b>" + l1.label + "</b>&nbsp;-&nbsp;<i>All</i>";
				selectCategory(l1.id, sHtml);
			}
			l1.level2.each(function(lvl2, l2index){
				if(lvl2.moved){
					sHtml = "<b>" + l1.label + "</b>&nbsp;-&nbsp;<i>"+lvl2.label + "</i>";
					selectCategory(lvl2.id, sHtml);
				}
			});
		});
	}
	function flip(id){
		var tax;
		for(var i=0; i < level1.length;i++){
			if(id == level1[i].id){
				tax = level1[i];
				break;
			}
			for(var j=0; j < level1[i].level2.length; j++)
				if(level1[i].level2[j].id == id){
				 	tax =  level1[i].level2[j];
				 	break;
				}
		}
		tax.movedSelected = !tax.movedSelected
		var divElem = $('td_' +id);
		divElem.className = tax.movedSelected ? 'yui-dt-selected' : 'yui-dt-unselected';
		if(!isCtrl && tax.movedSelected){
			level1.each(function(l1, index){
				if(id != l1.id && l1.moved && l1.movedSelected){		
					l1.movedSelected = false;
					$('td_' +l1.id).className = 'yui-dt-unselected';
				}
				l1.level2.each(function(lvl2, index){
					if(lvl2.id != id && lvl2.moved && lvl2.movedSelected){
				 		lvl2.movedSelected = false;
						$('td_' +lvl2.id).className = 'yui-dt-unselected';
					}
				});
			});
		}
	}
	
	function unselectL1Others(l1Id){
		for(var i=0; i < level1.length;i++){
			if(l1Id == i) continue;
			if(level1[i].moved || !level1[i].toBeDisplayed) continue;
			if(level1[i].selected){
				level1[i].selected = false;
				$('ygtvlabelel'+i).className =  'yui-dt-unselected';
			}
			for(var j=0; j < level1[i].level2.length; j++){
				var lvl2 = level1[i].level2[j];
				if(lvl2.moved || !lvl2.toBeDisplayed)continue;
				if(lvl2.selected){
					lvl2.selected = false;
					$('ygtvlbl_'+i + '_'+ j).className='yui-dt-unselected';
				}
			}
		}
	}
	
	
	function selectL1(l1Id){
		var l1 = level1[l1Id];
		l1.selected = !l1.selected;
		if(l1.selected)
			unselectChildren(l1Id);
		$('ygtvlabelel'+l1Id).className = l1.selected ? 'yui-dt-selected' : 'yui-dt-unselected';	
		if(!isCtrl && l1.selected)
			unselectL1Others(l1Id);
	}
	function toggle1(l1Id){
		var l1 = level1[l1Id];
		l1.expanded = !l1.expanded;
		var childrenDiv = $('ygtvc'+l1Id);
		$('ygtvt' + l1Id).className = l1.expanded ? 'ygtvtmh' : 'ygtvlm';
		childrenDiv.style.display = l1.expanded ? '' : 'none';
		if(!l1.expanded){
			unselectChildren(l1Id);
		}
	}

	function createTaxonomyTree(){
		var treeDiv = $('treeDiv');
		var sb = new Array();
		var last=0;
		for(var i=0; i < level1.length;i++){//
			if(level1[i].moved || !level1[i].toBeDisplayed) continue;
			sb[last++] = '<div id="ygtvlabelel' + i + '" >';
			sb[last++] = '<table border="0" cellpadding="0" cellspacing="0">';
			sb[last++] = '<tr ><td id="ygtvt'+ i + '" class="ygtvlm"  '+
				'onclick="javascript:toggle1(\''+ i + '\');return false;"><div class="ygtvspacer"></div></td>';
			sb[last++] = '<td onclick="javascript:selectL1(\'' + i + '\'); return false;"><div id="ygtvlabelel' + i + '" ';
			sb[last++] = ' onmouseover=""'+
				' onmouseout="">' + level1[i].label + '</div></td></tr></table></div>';
			if(level1[i].expanded)
				sb[last++] = '<div class="ygtvchildren" id="ygtvc' + i + '">'
			else
				sb[last++] = '<div class="ygtvchildren" id="ygtvc' + i + '" style="display:none;">'
			var level2Items = level1[i].level2;
			for(var j =0; j < level2Items.length; j++){
				if(level2Items[j].moved || !level2Items[j].toBeDisplayed)continue;
				sb[last++] = '<div  id="ygtvlbl_'+i+'_'+j+'" class="ygtvitem"><table border="0" cellpadding="0" cellspacing="0">';
				sb[last++] = '<tr ><td class="ygtvblankdepthcell"><div class="ygtvspacer"></div></td>';
				sb[last++] = '<td class="ygtvtn" onclick="">';
				sb[last++] = '<div class="ygtvspacer"></div></td>';
				sb[last++] = '<td onclick="javascript:selectL2(\''+ i + '\',\''+ j + '\');return false;"><div class="sPadLeft"';
				sb[last++] = '>' + level2Items[j].label + '</div></td>';
				sb[last++] = '</tr></table></div>';
			}
			sb[last++] = '</div>';
			//if(i == 0) alert(sb.join(' '));
		}
		var s = sb.join(' ');
		treeDiv.innerHTML = s;
		level1.each(function(l1, index){
			if(!l1.moved && l1.toBeDisplayed){
				Event.observe($('ygtvlabelel' + index), 'mousedown', function (ev) {
					var tg = (window.event) ? ev.srcElement : ev.target;
					Event.stop(ev);
				}, false);
			}
			
		});
	}
	

	function addTLDInputElement(form, name, value) {
		var el = document.createElement('input');
		el.type = 'hidden'; 
		el.name=name;
		el.id=name;
		el.value=value.replace(/ +$/,'');
		form.appendChild(el); 
	}
	/************************************************************************************************/
	function addallTlds(from, to){
		var p = $('p');
		var from = $(from);
		var to = $(to);
		var len = to.options.length;
		p.style.display= 'block';
		for(var i = from.options.length-1;i>=0;i--){
				var optionName = new Option(from.options[i].value, from.options[i].value, '', '');
				to.options[len++] = optionName;
				optionName.className = 'largeText';
				from.remove(i);
		}
		
	}
	function addTlds(from, to){
		var p = $('p');
		var from = $(from);
		var to = $(to);
		var len = to.options.length;
		p.style.display= 'block';
		for(var i = from.options.length-1;i>=0;i--){
			if(from.options[i].selected){
				var optionName = new Option(from.options[i].value, from.options[i].value, '', '');
				to.options[len++] = optionName;
				optionName.className = 'largeText';
				from.remove(i);
			}
		}
		
	}
	//sub-category-arrow.gif
	function  removeAllTlds(from, to){
		var p = $('p');
		var from = $(from);
		var to = $(to);
		var len = to.options.length;		
		for(var i = from.options.length-1;i>=0;i--){
				var option = new Option();
    			option.value = from.options[i].value;
				option.className = 'gray333';
				option.appendChild( document.createTextNode( from.options[i].text ));
				var optGroup = getOptGroup(from.options[i].value);
				optGroup.appendChild(option);
				from.remove(i);
		}
		p.style.display= 'none';
	}
	
	function removeTlds(from, to){
		var p = $('p');
		var from = $(from);
		var to = $(to);
		var len = to.options.length;
		for(var i = from.options.length-1;i>=0;i--){
			if(from.options[i].selected){
				var option = new Option();
				option.className = 'gray333';
    			option.value = from.options[i].value;
    			option.appendChild( document.createTextNode( from.options[i].text ));
				var optGroup = getOptGroup(from.options[i].value);
				optGroup.appendChild(option);
				from.remove(i);
				if (i == 0) {
				p.style.display= 'none';
				}
			}
		}
		
	}
	function getOptGroup(tld){
		for(var i=0; i < commonTlds.length;i++)
			if(commonTlds[i].value==tld)return $('commonExt');
		for(var i=0; i < countryTlds.length;i++)
			if(countryTlds[i].value==tld)return $('countryExt');
		for(var i=0; i < genericTlds.length;i++)
			if(genericTlds[i].value==tld)return $('moreExt');
		
		}
		
	function handleEvents(){
			Event.observe($('treeDiv'), 'mousedown', function (ev) {
				Event.stop(ev);
			}, true);
			Event.observe($('selectedCategoriesDiv'), 'mousedown', function (ev) {
				Event.stop(ev);
			}, true);

			document.onkeyup=function(e){ 
				var keynum = window.event ? window.event.keyCode: e.which;
				if(keynum == 17) isCtrl=false; 
			} ;
			document.onkeydown=function(e){ 
				var keynum = window.event ? window.event.keyCode: e.which;
				if(keynum == 17) isCtrl=true; 
			};
		}