var myConnUrl = 'ajaxSearch2.do';
// Remove the test xml file
//var myConnUrl = 'xml/ajaxSearch2.xml';
var filter1form, arrInputs1, arrLabels1, cardcount, containers;
var arrChecked, arrUnchecked;
var filter1clicked = false;
var card_cnt = true;

var group_count = 0;
function Group(txt,ID){
	
	var containerGroups = document.getElementById('filter1-groups-container');
	var containerSingle = document.createElement('div');
	containerSingle.className = 'filter1-option';
	containerGroups.appendChild(containerSingle);

	var chkbox = document.createElement('input');
	chkbox.type = 'checkbox';
	chkbox.value = ID;
	chkbox.id = ID;
	chkbox.setAttribute('name',ID);
	chkbox.className = 'filter1-box';
	containerSingle.appendChild(chkbox);

	group_count = group_count + 1;
	chkbox.setAttribute("index",group_count);
	var label = document.createElement('label');
	label.setAttribute('for',ID);
	containerSingle.appendChild(label);
	label.innerHTML = txt;
	if (browser == 'Safari') label.style.position = 'relative';
	
	Event.addEvent(chkbox, "click", function(){filter1clicked = true; card_cnt = true; filterchange(this);});
}

var attr1_count=0;

function AttributesContainer() {
	this.attributes = new Array();
	var attributeCount = 0;
	
	this.add = function(txt,ID,parentAttr) {
		if (parentAttr) {
			var parAttr = this.getAttribute(parentAttr);
			if (parAttr) parAttr.addSubAttribute(txt,ID);
		} else {
			this.attributes[this.attributes.length] = new Attribute1(txt,ID);
		}

		attributeCount++;
	}
	
	this.init = function() {
		var containerAttrs = document.getElementById('filter1-attrs-container');
		var containerDiv = document.createElement('div');
		containerDiv.className = 'filter1-column';
		containerAttrs.appendChild(containerDiv);
		
		var midpoint1 = Math.ceil(attributeCount/3);
		var midpoint2 = midpoint1*2;
		var count = 0;
		var hitMidpoint1 = false;
		var hitMidpoint2 = false;
		
		for (var i=0; i < this.attributes.length; i++) {
			count++;
			count = count + this.attributes[i].getSubAttributesLength();
			
			if (count > midpoint1 && !hitMidpoint1 || count > midpoint2 && !hitMidpoint2) {
				var containerDiv = document.createElement('div');
				if (count < midpoint2) {
					containerDiv.className = 'filter1-column filter1-column2';
					hitMidpoint1 = true;
				} else {
					containerDiv.className = 'filter1-column filter1-column3';
					hitMidpoint2 = true;
				}
				containerAttrs.appendChild(containerDiv);
			}
			this.attributes[i].init(containerDiv);
		}

	}

	this.getAttribute = function(id) {
		for (var i=0; i < this.attributes.length; i++) {
			if (this.attributes[i].getID() == id) return this.attributes[i];

			var subs = this.attributes[i].getSubAttributes();
			
			for (var j=0; j < subs.length; j++) {
				if (subs[j].getID() == id) {
					return subs[j];
				}
			}
		}

	}
	
	this.checkAttribute = function(id, val) {
		var attr = this.getAttribute(id);
		if (attr) {
			if (typeof(attr.parentIsChecked) != "boolean") {
				attr.setCheckbox(val);
			} else {
				if (attr.parentIsChecked == true) {
					attr.setCheckbox(true);
				} else {
					attr.setCheckbox(val);
				}
			}
		}
	}
	
	this.getAttributeFromSub = function(id) {
		for (var i=0; i < this.attributes.length; i++) {
			var subs = this.attributes[i].getSubAttributes();
			
			for (var j=0; j < subs.length; j++) {
				if (subs[j].getID() == id) {
					return this.attributes[i];
				}
			}
		}
	}

	this.getCheckbox = function(id) {
		var attr = this.getAttributeFromSub(id);
		
		if (attr) {
			return attr.getCheckbox();
		}
	}
}


function Attribute1(txt,ID){
	var subAttributes = new Array();
	this.id = ID;
	var checkbox;

	this.init = function(elm) {
		var containerSingle = document.createElement('div');
		containerSingle.className = 'filter1-option';

		var chkbox = document.createElement('input');
		chkbox.type = 'checkbox';
		chkbox.value = ID;
		chkbox.id = ID;
		chkbox.setAttribute('name','attrs');
		chkbox.className = 'filter1-box';
		containerSingle.appendChild(chkbox);
		checkbox = chkbox;
		
		attr1_count = attr1_count + 1;
		chkbox.setAttribute("index",attr1_count);

		var label = document.createElement('label');
		label.setAttribute('for',ID);
		containerSingle.appendChild(label);
		label.innerHTML = txt;
		
		elm.appendChild(containerSingle);

		if (browser == 'Safari') label.style.position = 'relative';
		
		for (var i=0; i < subAttributes.length; i++) {
			subAttributes[i].init(elm)
		}

		Event.addEvent(chkbox,"click",this.checked);
	}
	
	this.setCheckbox = function(val) {
		checkbox.checked = val;
		this.checked("", true);
	}

	this.checked = function(evt, noChange) {
		if (subAttributes.length > 0) {
			if (checkbox.checked) {
				for (var i=0; i < subAttributes.length; i++) {
					subAttributes[i].disable();
					subAttributes[i].parentIsChecked = true;
				}
			} else {
				for (var i=0; i < subAttributes.length; i++) {
					subAttributes[i].enable();
					subAttributes[i].parentIsChecked = false;
				}
			}
		}

		if (!noChange) {
			filter1clicked = true; 
			card_cnt = true;
			filterchange();
		}
	}
	
	this.getID = function() {
		return this.id;
	}

	this.getCheckbox = function() {
		return checkbox;
	}

	this.addSubAttribute = function(txt,ID) {
		subAttributes[subAttributes.length] = new subAttribute(txt, ID);
	}

	this.getSubAttributes = function() {
		return subAttributes;
	}

	this.getSubAttributesLength = function() {
		return subAttributes.length;
	}
}

function subAttribute(txt, ID) {
	var checkbox;
	this.label;
	this.id = ID;
	this.parentIsChecked = false;

	this.init = function(elm) {
		var containerSingle = document.createElement('div');
		containerSingle.className = 'filter1-option filter1-sub';
		
		var chkbox = document.createElement('input');
		chkbox.type = 'checkbox';
		chkbox.value = ID;
		chkbox.id = ID;
		chkbox.setAttribute('name','attrs');
		chkbox.className = 'filter1-box subAttribute';
		containerSingle.appendChild(chkbox);
		checkbox = chkbox;
	
		var label = document.createElement('label');
		label.setAttribute('for',ID);
		attr1_count = attr1_count + 1;
		chkbox.setAttribute("index",attr1_count);
		containerSingle.appendChild(label);
		label.innerHTML = txt;
		this.label = label;
		
		Event.addEvent(chkbox,"click",this.checked);

		elm.appendChild(containerSingle);
	}

	this.getID = function() {
		return this.id;
	}

	this.setCheckbox = function(val) {
		checkbox.checked = val;
	}

	this.getCheckbox = function() {
		return checkbox;
	}

	this.disable = function() {
		if (this.label.className.indexOf('disabled') == -1) {
			this.label.className += ' disabled';
		}

		checkbox.checked = true;
		checkbox.disabled = true;
	}

	this.trueDisable = function() {
		if (this.label.className.indexOf('disabled') == -1) {
			this.label.className += ' disabled';
		}

		checkbox.disabled = true;
	}

	this.enable = function() {
		if (this.label.className.indexOf('disabled') != -1) {
			this.label.className = this.label.className.replace('disabled', '');
		}

		checkbox.checked = false;
		checkbox.disabled = false;
	}

	this.trueEnable = function() {
		if (this.label.className.indexOf('disabled') != -1) {
			this.label.className = this.label.className.replace('disabled', '');
		}

		checkbox.disabled = false;
	}

	this.checked = function(evt) {
		if (checkbox.checked == false) {
			var parentAttr = attributes.getAttributeFromSub(this.id);
			var subAttrs = parentAttr.getSubAttributes();
			var numSubsChecked = 0;
			for (var x = 0, y = subAttrs.length; x < y; x++) {
				if (subAttrs[x].getCheckbox().checked == true) numSubsChecked++;
			}
			if (numSubsChecked == 0) {
				var parentCheckbox = parentAttr.getCheckbox();
				parentCheckbox.disabled = false;
				parentCheckbox.parentNode.style.color = "#000";
			}
		}
		filter1clicked = true;
		card_cnt = true;
		filterchange();
	}
}

var initial_group;
var initial_attrs;

function filter1(){
	if(document.getElementById('filter1-form')) {
		filter1form=document.getElementById('filter1-form');
		attrTable1=document.getElementById('filter1-attrs-table');
		createGroups();
		createAttributes();
		arrInputs1=getElementsByClassName(filter1form,'input','filter1-box');
		containers=getElementsByClassName(filter1form,'div','filter1-option');
		var foundGroup=false;
		if(getF1GroupCookie()!=null){
			var group=getF1GroupCookie();
			initial_group = group;
			for(i=0;i<arrInputs1.length;i++){
				for(j=0;j<group.length;j++){
					if(arrInputs1[i].value==group[j])arrInputs1[i].checked=true;foundGroup=true;
				}
			}
		} //else {arrInputs1[0].checked=true;}

		if(getF1AttrCookie()!=null){
			var arrCookie=getF1AttrCookie();
			initial_attrs = arrCookie;
			for(i=0;i<arrInputs1.length;i++){
				var inputchecked = false;
				for(j=0;j<arrCookie.length;j++){
					if(arrInputs1[i].value==arrCookie[j]) {inputchecked=true;}
				}
				attributes.checkAttribute(arrInputs1[i].value, inputchecked);
			}
		} else {
			initial_attrs = new Array();
		}

		filterchange();
	}
}

function resetFilter() {
	var filter1group=document.getElementById('filter1-groups');
	var groupInputs1=getElementsByClassName(filter1group,'input','filter1-box');

	var filter1attrs=document.getElementById('filter1-attrs');
	var arrInputs1=getElementsByClassName(filter1attrs,'input','filter1-box');

	if(initial_group!=null){
		var group=initial_group;
		for(i=0;i<groupInputs1.length;i++){
			var inputchecked = false;
			for(j=0;j<group.length;j++){
				if(groupInputs1[i].value==group[j])inputchecked=true;
			}
			groupInputs1[i].checked  = inputchecked;
		}
	} else {arrInputs1[0].checked=true;}
	if(initial_attrs!=null){
		var arrCookie=initial_attrs;
		for(i=0;i<arrInputs1.length;i++){
			var inputchecked = false;
			for(j=0;j<arrCookie.length;j++){
				if(arrInputs1[i].value==arrCookie[j])inputchecked=true;
			}
			attributes.checkAttribute(arrInputs1[i].value, inputchecked);
		}
	}

	filterchange();
}

function fnWhenDone(oXML) {
	var arrDisable = oXML.responseXML.getElementsByTagName('disabled')[0].getElementsByTagName('attribute');

	cardcount = document.getElementById('filter1-number');
	cardcount.style.visibility = 'visible';
	newcardcount = oXML.responseXML.getElementsByTagName('cardcount')[0].firstChild.nodeValue;
	
	var arrSelected = oXML.responseXML.getElementsByTagName('selectedcards')[0].getElementsByTagName('attribute');

	for (var z=0;z<arrInputs1.length;z++)
	{
		var disabledIt = false;
		for (var j=0;j<arrDisable.length;j++)
		{
			if (arrInputs1[z].value == arrDisable[j].firstChild.nodeValue){
				if (arrInputs1[z].className.indexOf('subAttribute') != -1) {
					var thisSub = attributes.getAttribute(arrInputs1[z].value);
					thisSub.trueDisable();
					disabledIt = true;
				} else {
					arrInputs1[z].disabled = true;
					disabledIt = true;
					containers[z].style.color = '#999';
				}
			}
		}
		if (!disabledIt && arrInputs1[z].getAttribute("name").indexOf('attrs') != -1 && arrInputs1[z].className.indexOf('subAttribute') == -1) {
			if (arrInputs1[z].checked == false) {
				var subAttrs = attributes.getAttribute(arrInputs1[z].value).getSubAttributes();
				var numSubsChecked = 0;
				for (var x = 0, y = subAttrs.length; x < y; x++) {
					if (subAttrs[x].getCheckbox().checked == true) numSubsChecked++;
				}
				if (numSubsChecked == 0) {
					containers[z].style.color='#000';
					arrInputs1[z].disabled=false;
				}
			} else {
				containers[z].style.color='#000';
				arrInputs1[z].disabled=false;				
			}
		} else if (!disabledIt && (arrInputs1[z].className.indexOf('subAttribute') != -1 && !attributes.getCheckbox(arrInputs1[z].value).checked)) {
			var thisSub = attributes.getAttribute(arrInputs1[z].value);
			thisSub.trueEnable();
		} else if (!disabledIt && arrInputs1[z].getAttribute("name").indexOf('attrs') == -1 && arrInputs1[z].className.indexOf('subAttribute') == -1) {
			containers[z].style.color='#000';
			arrInputs1[z].disabled=false;			
		}
	}

	var checkedCount = 0;
	var checkedElm;

	for (i=0;i<arrInputs1.length;i++){
		if (arrInputs1[i].checked && (arrInputs1[i].className.indexOf('subAttribute') == -1 || (arrInputs1[i].className.indexOf('subAttribute') != -1 && !attributes.getCheckbox(arrInputs1[i].value).checked))) {
			checkedCount++;
			checkedElm = arrInputs1[i];
		}
	}

	if (checkedCount == 1) {
		if (checkedElm.className.indexOf('subAttribute') == -1) {
			checkedElm.disabled = true;
			checkedElm.parentNode.style.color = '#999';
		} else {
			var thisSub = attributes.getAttribute(checkedElm.value);
			thisSub.trueDisable();
		}
	}
	
	var tableElm = document.getElementById('card_result_table');
	var cardTbody = tableElm.tBodies[0];
	if (cardTbody) {
		for (var i = 0; i < cardTbody.rows[0].cells.length; i++) {
			var card_selected = false;
			for (var j=0; j < arrSelected.length; j++) {
				if (cardTbody.rows[0].cells[i].className == arrSelected[j].firstChild.nodeValue) {
					card_selected = true;
				}
			}
			
			for (var j=0; j < cardTbody.rows.length; j++) {
				try {
					cardTbody.rows[j].cells[i].style.display =  (card_selected) ? 'table-cell' : 'none';
				} catch(e) {
					cardTbody.rows[j].cells[i].style.display =  (card_selected) ? 'block' : 'none';
				}
			}
		}
	}
	
	cardcount.innerHTML = newcardcount;
	// WebSideStory tracking functionality 
	if ((newcardcount != 0) && (card_cnt))
	{
	assignCV9WSS(newcardcount);
	assignHVXPNWSS(newcardcount);
	card_cnt = false;
	}
	for (i=0;i<arrInputs1.length;i++){
		if (!arrInputs1[i].checked && !arrInputs1[i].disabled) arrUnchecked.push(arrInputs1[i].value);
	}

	createCardsTable();
	resetGlossaryEvents();
}

function filterchange(checkedEl){
	arrChecked = new Array();
	arrUnchecked = new Array();

	var groupContainer = document.getElementById('filter1-groups-container');
	var groupInputs = groupContainer.getElementsByTagName('input');
	arrLabels1 = filter1form.getElementsByTagName('label');

	var group='';
	for (i=0;i<groupInputs.length;i++){
		if (arrInputs1[i].checked) {
			if (group != "") {
				group += '|';
			}
			group += arrInputs1[i].value;
		}
	}
	
	var checkedCount = 0;
	var checkedElm;
	for (i=0;i<arrInputs1.length;i++){
		if (arrInputs1[i].checked) 
		{
			if (arrInputs1[i].className.indexOf('subAttribute') == -1) {
				checkedCount++;
				checkedElm = arrInputs1[i];
			}

			var filterObj = attributes.getAttribute(arrInputs1[i].value);
			if (!filterObj) {
				arrChecked.push(arrInputs1[i].value);
			} else {
				if (typeof(filterObj.parentIsChecked) != "boolean") {
					arrChecked.push(arrInputs1[i].value);
				} else {
					if (filterObj.parentIsChecked == false) {
						var parentCheckbox = attributes.getAttributeFromSub(arrInputs1[i].value).getCheckbox();
						var parentContainer = parentCheckbox.parentNode;
						parentCheckbox.disabled = true;
						parentContainer.style.color = "#999";
						arrChecked.push(arrInputs1[i].value);
					}
				}
			}
		}
	}

	if (checkedCount == 1) {
		checkedElm.disabled = true;
	}
	
	var myReq = new ajaxReq();
	var q = 'attrs=';
	var attrCookieValue = '';
	
	for (i=0;i<arrChecked.length;i++)
	{
		if (i>0) {
			q = q+",";
            attrCookieValue = attrCookieValue+'|';			
		}
		attrCookieValue = attrCookieValue+arrChecked[i];
		q = q+arrChecked[i];
	}
	myReq.req(myConnUrl, q, fnWhenDone);
	myReq = null;

	setF1AttrCookie(attrCookieValue);
    setF1GroupCookie(group);
}

function setF1GroupCookie(cookieValue){
	var expiryDate = new Date();
	expiryDate.setDate(expiryDate.getDate() + 14);
	if(cookieValue.length == 0) {
		document.cookie = "citi-filter1-group=;path=/;expires=Fri, 02-Jan-1970 00:00:00 GMT;";
	} else {
		document.cookie = "citi-filter1-group=" + cookieValue +";path=/;expires=" + expiryDate + ";";
	}
	
}

function getF1GroupCookie(){
	var start = document.cookie.indexOf("citi-filter1-group=");
	if (start == -1) return null;
	var len = start + 19;
	var end = document.cookie.indexOf(";",len);
	if (end == -1) end = document.cookie.length;
	return document.cookie.substring(len,end).split("|");
}

function setF1AttrCookie(cookieValue){
	var expiryDate = new Date();
	expiryDate.setHours(expiryDate.getHours() + 12);
	if(cookieValue.length == 0) {
		document.cookie = "citi-filter1-attrs=;path=/;expires=Fri, 02-Jan-1970 00:00:00 GMT;";
	} else {
		document.cookie = "citi-filter1-attrs=" + cookieValue +";path=/;expires=" + expiryDate + ";";
	}
	
}

function getF1AttrCookie(){
	var start = document.cookie.indexOf("citi-filter1-attrs=");
	if (start == -1) return null;
	var len = start + 19;
	var end = document.cookie.indexOf(";",len);
	if (end == -1) end = document.cookie.length;
	return document.cookie.substring(len,end).split("|");
}

function filterclear(){
	arrLabels1 = filter1form.getElementsByTagName('label');
	for (i=group_count;i<arrInputs1.length;i++){
		arrInputs1[i].checked = false;
		arrInputs1[i].disabled = false;
    	containers[i].style.color = '#000';
	}
	filterchange();
	setF1AttrCookie("");
}

function trackFilter1Submit()
{
	var param = 'form=filter1';
	for (i=0;i<arrInputs1.length;i++)
	{
		if (arrInputs1[i].checked) 
		{
			param = param + '&';
			param = param + arrInputs1[i].value + '=true';
		}
	}
	recordFormSubmit(param);
}
// WebSideStory tracking functionality - CV9
function assignCV9WSS(cardno)
{
	var  cvCon = "";
	var  cvAttr = "";
	var  cv9 = "";
	cvCon = getF1GroupCookie()+"";
	cvAttr = getF1AttrCookie()+"";
		
	if(cvCon==cvAttr){
	cvAttr = cvAttr.replace(cvCon, ""); // Replacing the constituencies from Group Cookie
	}
	else 
	{
	cvAttr = cvAttr.replace(cvCon + ",", ""); // Replacing the constituencies from Group Cookie
	}
	cvCon = cvCon.replace (/,/g,"+");
	cvAttr = cvAttr.replace (/,/g,"+");
	cv9 = cvVar1 + "-" + cardno + " Cards" + " | " + cvCon + " : " + cvAttr ;
	
	_hbSet('cv.c9', cv9.replace(String.fromCharCode(174),''));
	//_hbSet('cv.c9', cv9);
	//_hbSend();

}
// WebSideStory tracking functionality - HBX.PN
function assignHVXPNWSS(cardno)
{

	var hbx_pn = cvVar1 + "-" + cardno + " Cards" ;
	
	_hbPageView(hbx_pn, hbx.mlc);
	

}



