
//var DisplayField ="dsplfld"
var AllData = new Array();
var NumOfColomns = 0;
var NumOfRows = 0;
var Data = new Array()		// Final data
var FirstActivation = 1;
var IndexOFDistList = "";
var Category = new Array();
var CategoryNames = new Array();
var IndexOfHiddenEntries = new Array();
var SelectedCategory = 0;	
var IndexOFCategory = "";
var CategorySelectionMask = new Array ()
var DisplayAllFormat = 0;



	
var SavedIndex = 0;
var FormatText = new Array();	//contains descriptions for layout formats
var SelectedFormat = 0;
var DivWidth = 0
var Float = 0;

function ReleaseSettings() {
	AllData = new Array();
	NumOfColomns = 0;
	NumOfRows = 0;
	Data = new Array()		// Final data
	FirstActivation = 1;
	IndexOFDistList = "";
	Category = new Array();
	CategoryNames = new Array();
	SelectedCategory = 0;	
	IndexOFCategory = "";
	CategorySelectionMask = new Array ()
	
	SavedIndex = 0;
	SelectedFormat = 0;
	DivWidth = 0
	Float = 0;
}	
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


// Atomic element
function Thing (nm) {
	this.name = nm;
	this.child = new Array();
	this.addchild = function (nn){
		this.child[this.child.length] = nn;
	}
}


function AttachCategory (n) {
	Category[Category.length] = new Thing(n);
}


function UpdateSavedIndex(num) 			{	SavedIndex = num}
function UpdateSelectedCategory(num) 	{	SelectedCategory = num	}
function UpdateDivWidth(str) 			{	DivWidth = str }
function UpdateFloat(num)				{	Float = num }
function UpdateSelectedFormat(num) 		{	SelectedFormat = num;	UpdateDisplayAllFormat(0); 	}
function UpdateDisplayAllFormat(num)	{	DisplayAllFormat = num }
//================================================================================
function DataLine() {
	this.field = new Array();
}

// this function creates
// List of category names CategoryNames[]
function AttachCategoryNamesToStep(nn) {
var temp = ""
	for (i=0; i<CategoryNames.length; i++) {
		temp = "UpdateSelectedCategory("+i+");ClearArea(\"stepBodyArea\");DisplayDATA()";
		Steps[nn].addfunction(CategoryNames[i],"",temp);  //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		}
}

//............................................................
function initialiseCategorySelectionMask () {
	for(i=0; i<CategoryNames.length; i++)
		CategorySelectionMask[i] = 0;
}


//............................................................
function updateCategorySelectionMask(n) {
if (CategorySelectionMask[n]==1)
	CategorySelectionMask[n] = 0;
else
	CategorySelectionMask[n] = 1;

DisplayDATA();	
}


//............................................................
function RenderDetectedCategories(n) {
document.getElementById("stepBodyArea").innerHTML = ReturnDetectedCategories(n);
}

//............................................................
var categoryStack = new Array()

function pushCategoryIndex(catIndex) {
	categoryStack[categoryStack.length] = catIndex;
}

function popCategoryIndex(nn) {
var TArr = new Array();
	for(d=0; d<categoryStack.length; d++ ) {
		if(nn!=categoryStack[d]) {
			TArr[TArr.length] = categoryStack[d];
		}
	}
	categoryStack.legth = 0;
	categoryStack = TArr;
}

function returnStackIndex(categoryNameIndex) {
var tIndex = -1;
	for(d=0; d<categoryStack.length; d++ ) {
		if(categoryNameIndex==categoryStack[d]) {
			tIndex = d;
		}
	}
return tIndex;
}

//............................................................
var IndexOfHiddenEntries = new Array();	//Used for storing entries that removed from view
function pushHideIndex(catIndex) {
	IndexOfHiddenEntries[IndexOfHiddenEntries.length] = catIndex;
}
function clearIndexOfHiddenEntries() {
	IndexOfHiddenEntries = new Array();
	IndexOfHiddenEntries.length = null;
}

function returnIndex(ArrayToLook,key) {
var result = -1
	for(u=0; u<ArrayToLook.length; u++ ){
		if (ArrayToLook[u]==key)
			return u
	}

return result
}


//............................................................
function ReturnDetectedCategories(num) {
var ss ="";
var NumberInOneCell = Math.ceil(CategoryNames.length/num);

 //ss = ss + CategoryNames.length + "<br>" +  Math.ceil(CategoryNames.length/num) + "<br>" +  CategoryNames.length%num + "<br>";
 ss = ss + "<h4>Total: " + CategoryNames.length + " categories</h4>";
 
	ss = ss + "<form name='CategoryMaskForm'><table class='field_listing'><tr>"
	for(i=0, ii=1; i<CategoryNames.length; i++, ii++) {	
		if (ii==1)	ss = ss + "<td>";
		//ss = ss + NumberInOneCell + " : " + ii
		ss = ss + "<input type='checkbox' name='chboxes' onclick='"
		if (!CategorySelectionMask[i]) 
			ss = ss + "pushCategoryIndex(\""+i+"\");"
		else 
			ss = ss + "popCategoryIndex(\""+i+"\");"
		ss = ss + "updateCategorySelectionMask(\""+i+"\");";
		ss = ss + "RenderDetectedCategories("+num+"); ";
		ss = ss + "DisplayDATA();";
		ss = ss + "'";
		if (CategorySelectionMask[i]) ss = ss + " checked";
		ss = ss + "> "
		if (returnStackIndex(i)!="-1")
			ss = ss + "" + (returnStackIndex(i)+1) +" : ";
		ss = ss + CategoryNames[i];
			ss = ss + " (" + Category[i].child.length +")";
		ss = ss +"<br>";
		if ( (NumberInOneCell==ii) || (i==(CategoryNames.length-1)) ) {
			ii = 0;
			ss = ss + "</td>";
		}
	}
	ss = ss + "</tr></table></form>"
	
return ss;
}


function AddLine(oneLinedata) {
	var tst = oneLinedata.split(sign);
	//this loop goes through one DATA line
	for(tt=0; tt<tst.length; tt++) {
		//Create Map of empty fields (td\s that dont have any content)
		if(tst[tt]!="") MapEmptyFields[tt] = MapEmptyFields[tt] + 1;
		
		if(FirstActivation==1) {
			if ((tst[tt]=="Category") || (tst[tt]=="Categories")) {
				IndexOFCategory=tt;
			}
			else if(tst[tt]=="Distribution Lists") {
				IndexOFDistList=tt;
			}
		}
		
		if((IndexOFCategory!="") && (IndexOFCategory==tt) && (tst[tt]!="Category")) {
			if(tst[tt]!="") {
				if(!ArrayHasIt(CategoryNames,tst[tt]))
					CategoryNames[CategoryNames.length] = tst[tt];
			}	
		}
	}
	Data[Data.length] = tst;
}
//================================================================================

function ReplaceAndReturnArray(dataline) {


	// if first char = " -> remove it
	if(dataline.substring(0,1)=="\"")
		dataline = dataline.substring(1,dataline.length)
		

dataline = dataline.replace(re_1 , sign);
dataline = dataline.replace(re_2 , sign);


	// if last char = " -> remove it
	if(dataline.substring(dataline.length-1,dataline.length)=="\"")	{
		//alert(dataline.substring(dataline.length-1,dataline.length))
		dataline = dataline.substring(0,dataline.length-1)	
	}
	if(dataline.substring(dataline.length-2,dataline.length-1)=="\"")	{
		dataline = dataline.substring(0,dataline.length-2)		
	}

//	document.getElementById("workingArea").innerHTML = dataline;
//	alert(dataline.substring(dataline.length-10,dataline.length))

	return dataline;
}


//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//	22222222
//	22    22
//	    22
//	  22
//	22222222
//. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
	re_0 = /\n/gi;
	re_1 = /","/gi;
	re_2 = /";"/gi;
var	sign = "|%&|";

function ValidateData() {


}


function DataINIT() {
	ReleaseSettings();
var doNotProcede = false;
var TempData = document.form_name.text_name.value;

	if (!TempData)  {
		alert ("There is no data to display!");
		doNotProcede = true;
		TempData = "";
		Steps[0].BeforeNextStepFunctionCompleted = false;
	}	
	else if  (TempData.substring(0,1)!="\"" ) {
		alert ("Data has not proper format!");
		doNotProcede = true;
		TempData = "";
		Steps[0].BeforeNextStepFunctionCompleted = false;
	}	
	/*else if (TempData.substring(TempData.length-2,TempData.length-1)!="\"" ) {
		alert ("Data has not proper format!");
		doNotProcede = true;
		TempData = "";
		Steps[0].BeforeNextStepFunctionCompleted = false;
	}*/
	
	if (!doNotProcede)  {	
		var TempDataArr = TempData.split(re_0);
		//alert(TempDataArr[0])
		if (!TempDataArr[1])  {
			alert ("There is no data to display!");
			doNotProcede = true;
			TempData = "";
			TempDataArr = "";
			Steps[0].BeforeNextStepFunctionCompleted = false;
		}	
	}
	
	if (!doNotProcede) {	
		var TempArr = new Array();
		var TempLength;
		var TempContent;
		
			for (j=0; j<TempDataArr.length; j++) {
				//if first character is not " -> this string should be attached to previous string
				if(TempDataArr[j].substring(0,1)=="\"") {
					TempArr[TempArr.length] = TempDataArr[j]
				}
				else if ((TempDataArr[j].substring(0,1)!="\"") && (TempDataArr[j].substring(1,2)!="")){
					TempLength = TempArr.length -1;
					TempContent = TempArr[TempLength];
					// Note: "....length-1" -1 because of \n - takes 1 characters in IE
					TempArr[TempLength] = TempContent.substring(0,TempContent.length-1) + ", " + TempDataArr[j]
				}	
				
			}
		
			AllData = TempArr;	
		
			//First AddLine() geta the Labels for fields
			AddLine(ReplaceAndReturnArray(AllData[0]));
			
			FirstActivation--;
			NumOfColomns = Data[0].length;
			for (i=0; i<NumOfColomns; i++) {
					MapEmptyFields[i] = 0;
			}
			NumOfRows = AllData.length;
			for (i=1; i<NumOfRows; i++) {
				//alert(AllData[i].substring(AllData[i].length-20,AllData[i].length))
					AddLine(ReplaceAndReturnArray(AllData[i]));
			}
			//..................
		
			// AllData will have  strings that starts and ends with "
			// "....","...","..."
			CategoryNames.sort();
			
			for(ttt=0; ttt<CategoryNames.length; ttt++) {
					AttachCategory(CategoryNames[ttt]);
			}		
			
			
			//RESCAN WHOLE DATA FOR assigning of the indexes and so on...
			for (i=1; i<NumOfRows; i++) {
				for (j=0; j<Category.length; j++)
				if (Data[i][IndexOFCategory]==Category[j].name) 
					Category[j].addchild(i);
					//	Data[i][IndexOFCategory];
			}		
		
			//............................................................
			//AttachCategoryNamesToStep(3)
			initialiseCategorySelectionMask();
			ConvertMaps();
			CopyMasks();
			Steps[0].BeforeNextStepFunctionCompleted = true;
	}			
}
//............................................................
/**/	

var numOfColomns;

function updateNumbetOfCategoryColomns(nn) {
	numOfColomns = nn;
}

function ReturnDetectedFieldLabels(num) {
var ss = "";
var numEntriesInOneCell = Math.ceil(Data[0].length/numOfColomns) 
	ss = ss + "<h4>Total: " + Data[0].length + " fields</h4>";
	ss = ss + "<form name='FilterMaskForm'><table class='field_listing'><tr>"
	
	for(i=0, ii=1, iii=1; i<Data[0].length; i++, ii++, iii++) {
		if (iii==1)	ss = ss + "<td>";
		ss = ss + "<input type='checkbox' name='chboxes' onclick='CaptureFieldMask("+num+");'";
		if (AllMAPsdynamic[num]) {
			if (AllMAPsdynamic[num][i]!=0)
				ss = ss + " checked";
		}
		ss = ss + "> "
		ss = ss + ii + " : "+ Data[0][i] +" ("+ AllMAPs[0][i] +")<br>";
		if ( (numEntriesInOneCell==iii) || (i==(Data[0].length-1)) ) {
			ss = ss + "</td>";
			iii=0;
		}	
	}
	ss = ss + "</tr></table></form>";
return ss
}



//............................................................
function RenderDetectedFieldLabels(num) {
document.getElementById("stepBodyArea").innerHTML = ReturnDetectedFieldLabels(num);

}



//............................................................
function RemoveStepbody() {
document.getElementById("stepBodyArea").innerHTML = "<br>";
//document.getElementById("nextstepBodyArea").innerHTML = "";
}


//..............................................................................................
var MapEmptyFields = new Array();
var MapLayout1 = new Array(0,2,8,9,12);
var MapLayout2 = new Array(0,1,2,3,4,8,9,10,11,12,16,17,18,19,22,23,24,25,26,27,28,29,30,31,32,38);
var MapLayout3 = new Array();
var AllMAPs = new Array();
var AllMAPsdynamic = new Array();

// this function allows to convert Array in format (2,3,5,...) -> (0,0,1,1,0,1,0...)
function ConvertMaps(){
	AllMAPs = new Array(MapEmptyFields,MapLayout1,MapLayout2,MapLayout3)
	if (AllMAPs.length>=2){
		for(c=1; c<AllMAPs.length; c++) {
			var TemMap = AllMAPs[c];
			var TemMapConverted = new Array();
			for (i=0; i<NumOfColomns; i++) {
				if(ArrayHasIt(TemMap,i))
					TemMapConverted[i] = 1;
				else
					TemMapConverted[i] = 0;
			}
			AllMAPs[c] = TemMapConverted;
		}
	}	
}

function ArrayHasIt(TArray,ind){
	for(h=0; h<TArray.length; h++) {
		if(TArray[h]==ind) 
			return true;
	}
	return false;	
}



//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//	22222222
//	22    22
//	    22
//	  22
//	22222222
//. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
function ClearArea(n) {
document.getElementById(n).innerHTML = "";
}

//............................................................
function Start() {	DisplayFirstStepText() }

function DisplayFirstStepText() {
document.getElementById("stepBodyArea").innerHTML = "<ol><li>Export from Yahoo your address book in CSV format separated by commas<br><img src='img/stepillustration1.gif' width='165' height='43' class='stepIllustration'><li>Rename file and open in any text editor<br><img src='img/stepillustration2.gif' width='165' height='43' class='stepIllustration'><li>Copy all data and paste it into text area below</ol><form action='#' name='form_name'><textarea id='textareaID' name='text_name' cols='180' rows='10'></textarea></form>";
// temporary
//document.getElementById("textareaID").innerHTML = document.getElementById("temp_field1").innerHTML;
}

//............................................................

function CaptureFieldMask(mapIndex) {
	for(var i=0; i<document.FilterMaskForm.chboxes.length; i++) {
		if (document.FilterMaskForm.chboxes[i].checked)		AllMAPsdynamic[mapIndex][i] = 1;
		else												AllMAPsdynamic[mapIndex][i] = 0;
	}	
DisplayDATA();
}
//............................................................

function CopyMasks() {
	for(i=0; i<AllMAPs.length; i++) {
	AllMAPsdynamic[i] = new Array();
		for(j=0; j<AllMAPs[i].length; j++) {
			AllMAPsdynamic[i][j] = AllMAPs[i][j];
		}	
	}
}

function RevertMasks() {
	CopyMasks();
	Steps[1].UpdateSelectedFunctionIndex(SavedIndex);
	UpdateFunctionIndex (1,SavedIndex)
	if(StepStatus==1)
		RenderDetectedFieldLabels(SavedIndex);

}
//........................................................................................................................
//........................................................................................................................

function DisplayLayoutBodyArea(n) {	
document.getElementById("stepBodyArea").innerHTML = FormatText[n];
//SelectedFormat
}


//........................................................................................................................
//........................................................................................................................
//........................................................................................................................
//........................................................................................................................

function DisplayDATA() {
if (Data.length!=null) {
	var ss = "";
		if(DisplayAllFormat==1){
			var tr = 0;
			ss = ss + "<table class='data_table'>";
			ss = ss + "<tr  class='fields_names'>";
			ss = ss + "<td class='line_number'>#</td>";
			for(j=0; j<Data[0].length; j++) {
					ss = ss + "<td class='td"+j+"'>" + Data[0][j] + "</td>";
			}
			ss = ss + "</tr>";
			for(i=1; i<Data.length; i++) {
				ss = ss + "<tr class='data_line'>"
				ss = ss + "<td class='line_number'>"+ i +"</td>"
				for (j=0; j<Data[0].length; j++) {
					ss = ss + "<td>"
					ss = ss + Data[i][j];
					ss = ss + "</td>"
				}
				ss = ss + "</tr>"
			}
			ss = ss + "</table>";
		} 
		else {
			if(SelectedFormat==0){
				ss = ss + "<table class='data_table'>";
				for(i=0; i<categoryStack.length; i++) {
					ss = ss + ReturnCategoryTableRows(categoryStack[i]);
				}
				ss = ss + "</table>";
			}
			else if (SelectedFormat==1) {
				for(i=0; i<categoryStack.length; i++) {
					if (Float) ss = ss + "<div class='float_left'>";
					ss = ss + ReturnCategoryDiv(categoryStack[i]);
					if (Float) ss = ss + "</div>";
				}
			}	
			else if (SelectedFormat==2) {
				for(i=0; i<categoryStack.length; i++) {
					ss = ss + "<div class='cart_block'>";
					ss = ss + ReturnCategoryDivCartInTable(categoryStack[i]);
					ss = ss + "</div>";
				}
			}
			else if (SelectedFormat==3) {
				for(i=0; i<categoryStack.length; i++) {
					ss = ss + "<div class='cart_block'>";
					ss = ss + ReturnCategoryDivCart(categoryStack[i]);
					ss = ss + "</div>";
				}
			}
			else 
				ss = ss + "function for this format is not designed"
			
		}	
	document.getElementById("workingArea").innerHTML = ss;
	}	
}


function ReturnCategoryTableRows(c) {
var ss="";
var LocNumOfColoms = 0;
var rowcount = 0;
var totalrowcount = 0
var locss = "";
var locdatass = "";
	for(col=0; col<AllMAPsdynamic[SavedIndex].length; col++) {
		if (AllMAPsdynamic[SavedIndex][col]!=0) LocNumOfColoms++;
	}
	
	
	for(ch=0; ch<Category[c].child.length; ch++) {
		var count = 0;			//couts if ANY CELL has data
		var tss ="";
		for(ii=0; ii<Data[0].length; ii++) 	{
			if(AllMAPsdynamic[SavedIndex][ii]!=0) {
				tss = tss + "<td class='td"+ii+"'>" + Data[Category[c].child[ch]][ii] + "</td>";
				if (Data[Category[c].child[ch]][ii]!="")
				count++;
			}
		}
		if (count>0){
			totalrowcount++;
			rowcount++;
			locdatass = locdatass + "<tr class='data_line'>";
			locdatass = locdatass + "<td class='line_number'>" + rowcount + "</td>" + tss;
			locdatass = locdatass + "</tr>";
		}
	}
	
		
	locss = locss + "<tr class='category_title'><td colspan='"+(LocNumOfColoms+1)+"'>";
		locss = locss + Category[c].name + " (" + rowcount + ")";
	locss = locss + "</td></tr>";
		

	locss = locss + returnTableHeader();
	
	
	if (rowcount!=0)
		ss = locss + locdatass
	else
		ss = locss +  "<tr><td colspan='"+(LocNumOfColoms+1)+"'>This category has no entries</td></tr>";
	

return ss;
}

function returnTableHeader() {
var locss = "";
	locss = locss + "<tr  class='fields_names'>";
	locss = locss + "<td class='line_number'>#</td>";
	for(j=0; j<Data[0].length; j++) {
		if(AllMAPsdynamic[SavedIndex][j]!=0)
			locss = locss + "<td class='td"+j+"'>" + Data[0][j] + "</td>";
	}
	locss = locss + "</tr>";
return locss;
}


function ReturnCategoryDiv(c) {
var ss="";
var LocNumOfColoms = 0;
var rowcount = 0;
var locss = "";
var locdatass = "";
var IconHide = "";

	for(ch=0; ch<Category[c].child.length; ch++) {
		var count = 0;			//couts if ANY CELL has data
		
		var LastName = "";
		var FirstName = "";
		var MiddleNickName = "";
		var AllOtherFields = "";
		for(ii=0; ii<Data[0].length; ii++) 	{
			if (returnIndex(IndexOfHiddenEntries,Category[c].child[ch])==-1) {
				if(AllMAPsdynamic[SavedIndex][ii]!=0) {
					IconHide = "<a href='javascript://' class='hideIcon' onClick='pushHideIndex(\""+Category[c].child[ch]+"\");DisplayDATA()'>X</a>";
					if(Data[Category[c].child[ch]][ii]!="") {
						if ((Data[0][ii]=="First") ||(Data[0][ii]=="First Name")) {
							FirstName = "<span class='"+Data[0][ii] + "'>" + Data[Category[c].child[ch]][ii] + "</span> ";
						}
						else if ((Data[0][ii]=="Last")||(Data[0][ii]=="Last Name")) {
							LastName = "<span class='"+Data[0][ii] + "'>" + Data[Category[c].child[ch]][ii] + "</span> ";
						}
						else if ((Data[0][ii]=="Middle")||(Data[0][ii]=="Nickname")||(Data[0][ii]=="Middle Name")) {
							MiddleNickName = "<span class='"+Data[0][ii] + "'>" + Data[Category[c].child[ch]][ii] + "</span> ";
						}
						else {
							AllOtherFields = AllOtherFields + "<span class='"+Data[0][ii];
							//if(DivWidth!=0)		tss = tss + " additionalClass" + DivWidth;
							AllOtherFields = AllOtherFields + "'>" + Data[Category[c].child[ch]][ii];
							if ((Data[0][ii]=="Home") ||(Data[0][ii]=="Home Phone") ||(Data[0][ii]=="Home Phone 2") || (Data[0][ii]=="Work") || (Data[0][ii]=="Business Phone") || (Data[0][ii]=="Business Phone 2") || (Data[0][ii]=="Pager") || (Data[0][ii]=="Fax") || (Data[0][ii]=="Mobile") || (Data[0][ii]=="Mobile Phone"))
								AllOtherFields = AllOtherFields + "<span class='lable'>(" + Data[0][ii].substring(0,1) + ")</span>";
							AllOtherFields = AllOtherFields + "</span> ";
						}	
						count++;
					}
				}
			}	
		}
		
		if (count>0){
			rowcount++;
			locdatass = locdatass + "<div class='data_line";
			if(DivWidth!=0)	locdatass = locdatass + " additionalClass" + DivWidth;
			locdatass = locdatass + "'>";
			//locdatass = locdatass + "<span class='line_number'>" + rowcount + "</span>" 
			locdatass = locdatass + IconHide + LastName + FirstName + MiddleNickName + AllOtherFields;
			locdatass = locdatass + "</div>";
		}
	}
	
		
	locss = locss + "<h4 class='category_title";
	if(DivWidth!=0)	locss = locss + " additionalClass" + DivWidth;
	locss = locss + "'>";
		locss = locss + Category[c].name + " (" + rowcount + ")";
	if(IndexOfHiddenEntries.length)
		locss = locss  + "<a href='javascript://' onclick='clearIndexOfHiddenEntries();DisplayDATA()' class='hideOnPrint'> hidden (" + IndexOfHiddenEntries.length + ")</a>";	
	locss = locss + "</h4>";
	
	
	if (rowcount!=0)
		ss = ss + locss + locdatass
	else
		ss = ss + locss +  "This category has no entries";
	

return ss;
}


function ReturnCategoryDivCart(c) {
var LocNumOfColoms = 0;
var locss = "";
var locdatass = "";

		for(ch=0; ch<Category[c].child.length; ch++) {
			if (returnIndex(IndexOfHiddenEntries,Category[c].child[ch])==-1) {
				locdatass = locdatass + "<div class='oneCard";
				if(DivWidth!=0)	locdatass = locdatass + " additionalClass" + DivWidth;
				locdatass = locdatass + "'>";
				locdatass = locdatass + ReturnOneCard(c);
				locdatass = locdatass + "</div>";
			}
		}
		
	locss = locss + "<div class='blockOfCarts'>";
	locss = locss + "<h4 class='category_title'>";
	locss = locss + Category[c].name + " (" + Category[c].child.length + ")";
	if(IndexOfHiddenEntries.length)
		locss = locss  + "<a href='javascript://' onclick='clearIndexOfHiddenEntries();DisplayDATA()' class='hideOnPrint'> hidden (" + IndexOfHiddenEntries.length + ")</a>";	
	locss = locss + "</h4>";
		
		if (Category[c].child.length)
			locss = locss + locdatass
		else
			locss = locss +  "This category has no entries";

	locss = locss + "</div>";
return locss;
}


function ReturnCategoryDivCartInTable(c) {
var ss="";
var LocNumOfColoms = 0;
var locss = "";
var locdatass = "";


	locdatass = locdatass + "<table class='blockOfCarts'>";
	var tr = 0;
	//var EntryCount = 0;
		for(ch=0 ; ch<Category[c].child.length; ch++) {
			if(tr==0)	locdatass = locdatass + "<tr>";
			if (returnIndex(IndexOfHiddenEntries,Category[c].child[ch])==-1) {
				locdatass = locdatass + "<td class='cardCell'>";
				locdatass = locdatass + ReturnOneCard(c);
				locdatass = locdatass + "</td>";
				tr++;
			}	
			if (tr==3) {
				locdatass = locdatass + "</tr>";
				tr = 0;
			}
		}
		if ((tr!=2) && (tr!=0)) {
			for(dd=tr; dd<3; dd++) 
				locdatass = locdatass + "<td class='cardCell'></td>";
			locdatass = locdatass + "</tr>";
		}		
		
	locdatass = locdatass + "</table>";
		
		
	locss = locss + "<h4 class='category_title'>";
	locss = locss + Category[c].name + " (" + Category[c].child.length + ")";
	if(IndexOfHiddenEntries.length)
		locss = locss  + "<a href='javascript://' onclick='clearIndexOfHiddenEntries();DisplayDATA()' class='hideOnPrint'> hidden (" + IndexOfHiddenEntries.length + ")</a>";	
	locss = locss + "</h4>";

	
	if (Category[c].child.length)
		ss = ss + locss + locdatass
	else
		ss = ss + locss +  "This category has no entries";
	
return ss;
}


function ReturnOneCard(c) {
var count = 0;			//couts if ANY CELL has data
var locdatass = "";
var tss ="";
var MiddleNickName = "";
var FirstName = "";
var LastName = "";
var Phones = "";
var Birthday = "";
var Emails = "";
var WAddress = "";
var HAddress = "";
var Comments = "";
var IconHide = "";


	for(ii=0; ii<Data[0].length; ii++) 	{
		if (AllMAPsdynamic[SavedIndex][ii]!=0) {
			IconHide = "<a href='javascript://' class='hideIcon' onClick='pushHideIndex(\""+Category[c].child[ch]+"\");DisplayDATA()'>X</a>";
			if((Data[Category[c].child[ch]][ii]!="")&&(Data[0][ii]!="Distribution Lists")&&(Data[0][ii]!="Category")&&(Data[0][ii]!="Primary")) {
				if(Data[0][ii]=="First") {
					FirstName = FirstName + "<span class='oneEntryLine "+Data[0][ii]+"'>";
					FirstName = FirstName + Data[Category[c].child[ch]][ii];
					FirstName = FirstName + "</span>";
				}
				else if(Data[0][ii]=="Last") {
					LastName = LastName + "<span class='oneEntryLine "+Data[0][ii]+"'>";
					LastName = LastName + Data[Category[c].child[ch]][ii];
					LastName = LastName + "</span>";
				}
				else if((Data[0][ii]=="Middle") || (Data[0][ii]=="Nickname")) {
					MiddleNickName = MiddleNickName + "<span class='oneEntryLine "+Data[0][ii]+"'>";
					MiddleNickName = MiddleNickName + Data[Category[c].child[ch]][ii];
					MiddleNickName = MiddleNickName + "</span>";
				}
				else if((Data[0][ii]=="Home") || (Data[0][ii]=="Work") || (Data[0][ii]=="Pager") || (Data[0][ii]=="Fax") || (Data[0][ii]=="Mobile")) {
					//Phones = Phones + "<div class='oneEntryLine "+Data[0][ii]+"'>";
					Phones = Phones + Data[Category[c].child[ch]][ii];
					Phones = Phones + "<b class='CardEntrylable'>(" + Data[0][ii].substring(0,1) + ")</b> ";
					//Phones = Phones + "</div> ";
				}
				else if(Data[0][ii]=="Birthday") {
					Birthday  = Birthday + Data[Category[c].child[ch]][ii];
				}
				else if((Data[0][ii]=="Email") || (Data[0][ii]=="Alternate Email 1") || (Data[0][ii]=="Alternate Email 2")) {
					Emails  = Emails + Data[Category[c].child[ch]][ii] + " <br>";
				}
				else if((Data[0][ii]=="Work Address") || (Data[0][ii]=="Work City") || (Data[0][ii]=="Work Province") || (Data[0][ii]=="Work Postal Code") || (Data[0][ii]=="Work Country")) {
					WAddress  = WAddress + Data[Category[c].child[ch]][ii] + " ";
				}
				else if((Data[0][ii]=="Home Address") || (Data[0][ii]=="Home City") || (Data[0][ii]=="Home Province") || (Data[0][ii]=="Home Postal Code") || (Data[0][ii]=="Home Country")) {
					HAddress  = HAddress + Data[Category[c].child[ch]][ii] + " ";
				}
				else if(Data[0][ii]=="Comments") {
					Comments  = Comments + Data[Category[c].child[ch]][ii];
				}
				else {
					//tss = tss + "<div class='oneEntryLine "+Data[0][ii]+"'>";
					tss = tss + Data[Category[c].child[ch]][ii];
					//tss = tss + "</div> ";
					tss = tss + " ";
				}
				count++;
			}
		}
	}
	if (count>0){
			locdatass = locdatass + IconHide;
			locdatass = locdatass + "<div class='IsaName'>" + LastName + FirstName + MiddleNickName + "</div>";
			
			if (Phones) 
				locdatass = locdatass + "<div class='phonesAndFax'>" + Phones + "</div>";
			if (Emails)
				locdatass = locdatass + "<div class='notANameInfo'>" + Emails + "</div>";
			if (WAddress)
				locdatass = locdatass + "<div class='notANameInfo'>" + WAddress + "</div>";
			if (HAddress)
				locdatass = locdatass + "<div class='notANameInfo'>" + HAddress + "</div>";
			if (tss)
				locdatass = locdatass + "<div class='notANameInfo'>" + tss + "</div>";
			if(Birthday)
				locdatass = locdatass + "<div class='birthdayInfo'>" + Birthday + "<b class='CardEntrylable'>(birthday)</b></div>";
			if(Comments)
				locdatass = locdatass + "<div class='commentsInfo'>" + Comments + "</div>";
				
	}

return	locdatass;
}
