/*

eV.in_array(array,itemtomatch) = bool
eV.array_search(array,itemtomatch) = int (-1 = not found)
eV.queryStringToArray(querystring) = array
eV.AJAXgetData(dataSource,functionOnComplete) = calls [functionOnComplete](output)
eV.CSVtoArray(data,maxRows) = array
eV.layerPopUpClose(parent,child)
eV.layerPopUp(title,content,id)
eV.mdArrElemToArr(arr,key) = array
eV.arrayToTable(array) = tableString

eV.drag.init(); // once on script
eV.drag.set(buttonElementId,movingElementId); // to set each draggable element


*/

//alert('called getbanners');

var eV = {
	test : function(){
		alert('test successful');
	},
	
	in_array : function(arr,matchObj){
		var isInArray = false;
		for(var i=0;i<arr.length;i++){
			if(arr[i] == matchObj){
				isInArray = true;
				break;
			};
		};
		return isInArray;
	},
	
	array_search : function(arr,matchObj){
		var index = -1;
		for(var i=0;i<arr.length;i++){
			if(arr[i] == matchObj){
				index = i;
				break;
			};
		};
		return index;
	},
	
	queryStringToArray : function(querystring){
		var returnArr = Array();
		var qsArr = querystring.split('&');
		for(var i=0;i<qsArr.length;i++){
			var valuePair = qsArr[i];
			var valuePairArr = valuePair.split('=');
			if(valuePairArr.length > 1 && valuePairArr[0].length > 0) returnArr[valuePairArr[0]] = decodeURIComponent(valuePairArr[1]);
		};
		return returnArr;
	},

	AJAXgetData : function(dataSource,functionOnComplete){
		var XMLHttpRequestObject = false;
		var returnVal = 'No file';
		if(window.XMLHttpRequest){
			XMLHttpRequestObject = new XMLHttpRequest();
		} else if (window.ActiveXObject){
			XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
		};
		if(XMLHttpRequestObject){
			XMLHttpRequestObject.open("GET", dataSource);
			XMLHttpRequestObject.onreadystatechange = function(){
				//alert('onreadystatechange readystate:' + XMLHttpRequestObject.readyState + ' status:' + XMLHttpRequestObject.status);
				if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200){
					returnVal = XMLHttpRequestObject.responseText;
					eval(functionOnComplete + '(returnVal);');
				// end check ready state and status 
				// end if readystate = 4 or 200
				};
			// end onreadystatechange function
			};
			XMLHttpRequestObject.send(null);
		// end if XMLHttpRequestObject
		};
	// end function
	},
	
	CSVtoArray : function(data,maxRows){
		/* expects new line delim rows, comma delim fields, dquote as text identifier
		returns 2 dim array, first dim = rows, 2nd dim = values */
		// convert "" escapes to \" escapes
		//data= data.replace(/""/g,'\\"');
		var csvArray = Array();
		// c solution: ,(?=([^\"]*"[^"]*")*(?![^"]*"))
		/*
			,						// loop for comma
				(?=					// positive lookahead
				 	(
					 	[^\"]*"		// anything but quote repeated, until quote
						[^"]*"		// anything but quote repeated, until quote
					)
					*				// repeated
					(?!				// negative lookahead
							[^"]*"	// anything but quote repeated, until quote
					)
				)
		
		*/
		//var regex = /,(?=([^\"]*"[^"]*")*(?![^"]*"))/;
		//var regex = /(,|,(?=([^\"]*"[^"]*")*(?![^"]*")))/;
		
		//var regex = /,(?=([^"]*"[^"]*")*(?![^"]*"))/;
		
		//var regex = /,(?="[^"]*")/; // working only for quote
		//var regex = /((,(?="[^"]*"))|(,?!"))/;
		// var regex = /,(?=([^']*'[^']*')*(?![^']*'))/; // 4 guys from rolla 
		//var regex = /[ \t\r\n]*(.*?)[ \t\r\n]*=[ \t\r\n]*(\'[^\']*\'|\"[^\"]*\"|[^;]*?)[\t\r\n]*(;|$)/
		
		
		//eval('var regex = /,(?=' + textQualifier + '[^' + textQualifier + ']*' + textQualifier + ')/'); // working only for quote
		
		// start line split by enter
		/*
		var regex = /\n(?<!(\n|,)"[^"]*)/;
		
		//qualify \n that is not preceded by a (  ',"' or '\n"' ) that isnt followed by a '"'"
		
		*/
		// split to array of lines
		var csvArray = (maxRows == null) ? data.split('\n') : data.split('\n',maxRows);
		// begin looping thru lines
		for(i=0;i<csvArray.length;i++){
			// start field split by ,
			var regex = /,(?="[^"]*")/;
			
			var recordArray = csvArray[i].split(regex);
			var newRecordArray = Array();
			
			// now lets split up the remaining items
			for(var ii=0;ii<recordArray.length;ii++){
				var elem = recordArray[ii];
			//	document.writeln('<br>elem:' + elem);
				if(elem.indexOf('"') == 0 && elem.indexOf('"',1) == elem.length-1){
					// this is already a quoted item, just append to array and move on
					newRecordArray[newRecordArray.length] = elem;
					//document.writeln('<br>Fully enclosed quotes:' . elem);
					continue;
				};
				var elemArr = elem.split(',');
				var newElemArr = Array();
				// work backwords and gather all fields until we identify the end of a quoted text identifier field
				for(var iii=elemArr.length-1;iii>=0;iii--){
					var elemItem = elemArr[iii];
					//document.writeln('<br>checking elemItem:' + elemItem);
					if(elemItem.indexOf('"') == elemItem.length-1 && elemArr[0].indexOf('"') == 0 && elemItem.length > 0){
						// found quoted end and quoted beginning
						// last item = quoted string
						//document.writeln('<br>sliced item:' + elemArr.slice(0,iii+1).join(","));
						newElemArr[newElemArr.length] = elemArr.slice(0,iii+1).join(",");
						break;
					} else {
						// not quoted, this is its own element
						//document.writeln('<br>own:' + elemItem);
						newElemArr[newElemArr.length] = elemItem;
					};
				// end elemArr loop
				};
				
				newRecordArray = newRecordArray.concat(newElemArr.reverse());
				
			// end csvArray loop
			};
			// end lfield split by ,
			csvArray[i] = newRecordArray;
		// end of line loop
		};
		return csvArray;
	},
	layerPopUpClose : function(parent,child){
		parent.removeChild(child);
	},
	layerPopUp : function(title,content,id,leftX,topY){
		if(leftX == null) leftX = window.mouseX;
		if(topY == null) topY = window.mouseY;
		// dont double do same id
		if(!window.document.getElementById('customPopUp__' + id)) {
			var bodytag = document.getElementsByTagName('body')[0];
			var popup = window.document.createElement('div');
			popup.setAttribute('id','customPopUp__' + id);
			popup.style.position = "absolute";
			
			//popup.style.left = '100px';
			//popup.style.top = '100px';
			/*
			 if(this.iex) return (document.documentElement.scrollTop) ? document.documentElement.scrollTop : document.body.scrollTop;
			else return window.pageYOffset;
			*/
			//var scrollTop = (document.body.scrollTop != 'undefined') ? document.body.scrollTop : window.pageYOffset;
			//alert(scrollTop);
			//popup.style.top = (200 + scrollTop);
			//popup.style.backgroundColor = "silver";
			//popup.style.border="medium line rgb(255,0,0)";
			//popup.style.textAlign="center";
			//popup.style.margin = "10px";
			//popup.style.padding = "10px";
			var htmlOutput = '';
			
			htmlOutput = htmlOutput + '<table cellpadding=0 cellspacing=0 border=0><tr>';
			htmlOutput = htmlOutput + '<td width=6 height=30 valign=top style="vertical-align: middle"><img src="/sysimages/popup-tl.gif"></td>';
			htmlOutput = htmlOutput + '<td valign=top style="vertical-align: middle">';
			
			htmlOutput = htmlOutput + '<table cellpadding=0 cellspacing=0 border=0 width="100%" height=30 id="eV_layerPopUp_title' + id + '"><tr>';
				htmlOutput = htmlOutput + '<td height=30 background="/sysimages/popup-t.gif" style="vertical-align: middle">';
				htmlOutput = htmlOutput + '<font face=arial,sans-serif size=2 color=white><b>' + title + '</b></font>';
				htmlOutput = htmlOutput + '</td>';
				htmlOutput = htmlOutput + '<td height=30 background="/sysimages/popup-t.gif" align=right style="vertical-align: middle">';
				htmlOutput = htmlOutput + '<a href="javascript:eV.layerPopUpClose(document.getElementsByTagName(\'body\')[0],window.document.getElementById(\'customPopUp__' + id + '\'));"><img src="/sysimages/popup-btn-close.gif" border=0 align=right valign=middle></a>';
				//onClick="document.getElementsByTagName(\'body\')[0].removeChild(window.document.getElementById(\'customPopUp__' + id + '\'));"
				htmlOutput = htmlOutput + '</td>';
			htmlOutput = htmlOutput + '</tr></table>';
			
			htmlOutput = htmlOutput + '</td>';
			htmlOutput = htmlOutput + '<td width=6 height=30 style="vertical-align: middle"><img src="/sysimages/popup-tr.gif"></td>';
			htmlOutput = htmlOutput + '</tr><tr>';
			htmlOutput = htmlOutput + '<td background="/sysimages/popup-l.gif" width=6>&nbsp;</td><td bgcolor="white">' + content + '</td>';
			htmlOutput = htmlOutput + '<td background="/sysimages/popup-r.gif" width=6>&nbsp;</td>';
			htmlOutput = htmlOutput + '</tr><tr>';
			htmlOutput = htmlOutput + '<td width=6 height=4><img src="/sysimages/popup-bl.gif"></td>';
			htmlOutput = htmlOutput + '<td background="/sysimages/popup-b.gif"></td>';
			htmlOutput = htmlOutput + '<td width=6 height=4><img src="/sysimages/popup-br.gif"></td>';
			htmlOutput = htmlOutput + '</tr></table>';
		
			//alert(htmlOutput);
			popup.innerHTML = htmlOutput;
			bodytag.appendChild(popup);
			
			// set as dragable
			eV.drag.init(); // once on script
			eV.drag.set('eV_layerPopUp_title' + id,'customPopUp__' + id); // to set each draggable element
			
			// set location
			popup.style.left = leftX + 'px';
			popup.style.top = topY + 'px';
			//popup.style.left = event.clientX;
			//popup.style.top = event.clientY;

			
		};
		return 'customPopUp__' + id;
	},
	
	mdArrElemToArr : function(arr,key){
		var newArr = Array();
		for(var i=0;i<arr.length;i++){
			newArr[i] = arr[i][key];
		};
		return newArr;
	},
	
	
	arrayToTable : function(array){
		// loop thru rows
		var output = '<table border=2>';
		for(var i=0;i<array.length;i++){
			var row = array[i];
			var output = output + '<tr>';
			for(var ii=0;ii<row.length;ii++){
				var cell = row[ii];
				var output = output + '<td valign=top><font size=1>' + cell + '</font></td>';
			};
			var output = output + '</tr>'; 
		};
		output = output + '</table>';
		return output;
	},

	drag : {
		/* to use drag
		eV.drag.init(); // once on script
		eV.drag.set(buttonElementId,movingElementId); // to set each draggable element
		
		buttonElementId= id of element that when clicked on drags
		movingElementId= id of element that moves when button is clicked on
		movingElement should contain buttonElement
		buttonElement and movingElement could be the same
		*/
		movemouse : function(e)
		{
		  if (eV.drag.isDrag)
		  {
			document.getElementById(eV.drag.dobj.moveElemId).style.left = '' + (eV.drag.nn6 ? eV.drag.tx + e.clientX - eV.drag.x : eV.drag.tx + event.clientX - eV.drag.x) + 'px';
			document.getElementById(eV.drag.dobj.moveElemId).style.top  = '' + (eV.drag.nn6 ? eV.drag.ty + e.clientY - eV.drag.y : eV.drag.ty + event.clientY - eV.drag.y) + 'px';
			//alert('movemouse setting :' + eV.drag.dobj.moveElemId + ' x:' + document.getElementById(eV.drag.dobj.moveElemId).style.left + ' y:' + document.getElementById(eV.drag.dobj.moveElemId).style.top);
			return false;
		  }
		},
		
		selectmouse : function(e) 
		{
		
		  var fobj       = eV.drag.nn6 ? e.target : event.srcElement;
		  var topelement = eV.drag.nn6 ? "HTML" : "BODY";
		
		  while (fobj.tagName != topelement && fobj.dragMe != true)
		  {
			fobj = eV.drag.nn6 ? fobj.parentNode : fobj.parentElement;
		  }

		  if (fobj.dragMe)
		  {
			eV.drag.isDrag = true;
			eV.drag.dobj = fobj;
			eV.drag.tx = parseInt(document.getElementById(eV.drag.dobj.moveElemId).style.left+0);
			eV.drag.ty = parseInt(document.getElementById(eV.drag.dobj.moveElemId).style.top+0);
			eV.drag.x = eV.drag.nn6 ? e.clientX : event.clientX;
			eV.drag.y = eV.drag.nn6 ? e.clientY : event.clientY;
			document.onmousemove=eV.drag.movemouse;
			//alert('selectmouse called: tx:' + eV.drag.tx + ' ty:' + eV.drag.ty + ' x:' + eV.drag.x + ' y:' + eV.drag.y);
			return false;
		  }
		},
		
		init : function(){
			eV.drag.isDrag = false;
			eV.drag.x = null;
			eV.drag.y = null;
			eV.drag.tx = null;
			eV.drag.ty = null;
			eV.drag.dobj = null;
			eV.drag.ie=document.all;
			eV.drag.nn6=document.getElementById&&!document.all;
			onmousedown=eV.drag.selectmouse;
			onmouseup=new Function("eV.drag.isDrag=false");
		},
		
		set : function(clickElementId,moveElementId){
			clickelem = document.getElementById(clickElementId);
			moveelem = document.getElementById(moveElementId);
			clickelem.dragMe = true;
			clickelem.moveElemId = moveElementId;
			//elem.moveElemId = clickElementId;
			//moveelem.style.position = 'relative';
			moveelem.style.position = 'absolute';
			//alert('set complete');
		}
	// end drag
	},
	mousePosition : function(evt){
		/*
		evt = evt || window.event;
		var posArr = new Array(null,null);
		
		//if(evt == null) alert('test');
		if (evt.pageX != null) posArr[0] = evt.pageX;
		else if (evt.clientX != null)
		   posArr[0] =  evt.clientX + (document.documentElement.scrollLeft ?
		   document.documentElement.scrollLeft :
		   document.body.scrollLeft);
		else posArr[0] = null;
		
		if (evt.pageY != null) posArr[1] = evt.pageY;
		else if (evt.clientY != null)
		   posArr[1] = evt.clientY + (document.documentElement.scrollTop ?
		   document.documentElement.scrollTop :
		   document.body.scrollTop);
		else posArr[1] = null;
		*/
		evt = evt || window.event;
		var cursor = {x:0, y:0};
		if (evt.pageX || evt.pageY) {
			cursor.x = evt.pageX;
			cursor.y = evt.pageY;
		} 
		else {
			var de = document.documentElement;
			var b = document.body;
			cursor.x = evt.clientX + 
				(de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
			cursor.y = evt.clientY + 
				(de.scrollTop || b.scrollTop) - (de.clientTop || 0);
		}
 
		window.mouseX = cursor.x;
		window.mouseY = cursor.y;
	}

};

window.mouseX = 0;
window.mouseY = 0;
document.onmousemove = eV.mousePosition;

/*
data = 'A,B,C,D,E\n"A","B","C","D","E"\nA,B,"C","D",E\n"A",B,"C",D,"E"\n"A,",B",C,",D","E"\n"A","B,x",C,",D","E"';
//data = '"B,",C,",D"';
csvArr = eV.CSVtoArray(data);

for(var i=0;i<csvArr.length;i++){
	var record = csvArr[i];
	document.writeln('<br>NEW ROW');
	for(var ii=0;ii<record.length;ii++){
		document.writeln('<br>NEW VALUE:' + i + ':' + record[ii]);
	};
};
*/

