var ROOT,RB,CC,card0_action,undefined,RowPos,ColPos,CardColRow,rgap,cgap;
var REF,BACK,DETAIL,SCT,CARD0,flds,cards,rec_count,main_title_js,main_title;
var DOING=0,resize=0,cardno=0,recs_pointer=0,UP=0,DOWN=0;
var recs='', vecs, cardw=220, cardh=150, dist_units, currency;

cardbig=new Array(3);cardbig[0]=-1;cards=new Array();

//______________________________________

function pageload(){
var w=doc.w*.95, h=doc.h-160, r;
var layout = css.ABSOLUTE.using( {height:h, width:w, top:130} );

document.attachEvent('onresize', function(){resizefunc();});
//document.attachEvent('onkeyup', function(){keyPressed(evt);});
BACK=document.createObject('div',{id:'BACKLAY'},layout)
BACK.centre('X');

layout = css.ABSOLUTE.using({height:310, width:450}  );	
	card_big=BACK.createObject('div',{id:'card_big'},layout);
	card_big.setVisible(0);
	card_big.centre();
	card_big.attachEvent('onclick', cardClick);
	
cardscreate();
cardswrite();
menu_create();

}
//______________________________________

function cardscreate(w,h,bcol,n){
	var cl,rl,i,midX,midY;
	bcol=bcol||'#9cf';
	midX=(BACK.w-w)/2;midY=(BACK.h-h)/2;
	
	card_positions(w,h);
	rl=CardColRow.length
	cl=cards.length;	
	
		if (cl<rl){
		for (i=cl; i< rl; i++){
		cards[i]=cardmake(bcol,w,h,midX,midY,i);
			}
		}
		
		if (rl<cl){
			for (i=rl; i< cl; i++){
			//if(cards[i]){cards[i].setVisible(0);}
			if(cards[i]){cards[i].remove();}
			}
		}
}
//______________________________________

function cardmake(bcol,w,h,T,L,i){
w=w||cardw||300;h=h||cardh||200;T=T||50;L=L||100
i="C"+i;
//var I=enquote(i);
var C,bodybcol=BACK.css.backgroundColor;
var layout = css.ABSOLUTE.using( {width:w, height:h, top:T, left:L} );

bcol=bcol||'green';
if (bcol=='none'||bcol==bodybcol){
	C = BACK.createObject('div',0,layout);	
}else{

var layout = css.ABSOLUTE.using( {width:w, height:h, top:T, left:L} );	
	C = BACK.createObject('div',{id:i,className:'rounded-box'},layout);
	C.setVisible(0); 
			
	C.tlc=C.createObject('div',{className:'tlc'});
	C.tlc.i=C.tlc.createObject('div',{className:'tli',innerHTML:'&bull;'});
	
	C.blc=C.createObject('div',{className:'blc'});
	C.blc.i=C.blc.createObject('div',{className:'bli',innerHTML:'&bull;'});
	
	C.trc=C.createObject('div',{className:'trc'});
	C.trc.i=C.trc.createObject('div',{className:'tri',innerHTML:'&bull;'});
	
	C.brc=C.createObject('div',{className:'brc'});
	C.brc.i=C.brc.createObject('div',{className:'bri',innerHTML:'&bull;'});
	
	C.cont=C.createObject('div',{className:'cardinfo'})
	h=h-20;
	layout = css.ABSOLUTE.using( {width:w,top:h} );	
	C.tip=C.createObject('div',{className:'cardtip'},layout)
	}
C.attachEvent('onclick', cardClick)
C.attachEvent('onmouseover', mousOver)
C.attachEvent('onmouseout', mousOut)
return(C);
}

//______________________________________

function cardswrite(){
var i,rl,cl,l;
	if(document.getElementById('datatable')){
	recs=readTableCells('datatable');
	if (recs==''){recs=CARD0}else{recs=CARD0+'¬'+recs}
	//alert("Line 101 "+recs)
	recs=stringtomat(recs);
	vecs=invert_array(recs);
	}
	if(vecs && vecs!=''){	
		
		vecs=stringtomat(vecs);
			//alert("Line 109 \n"+vecs)
			if (recs==''){recs=invert_array(vecs);}
			//sortorder=range(0,recs.length);
			
		cl=cards.length;	
		if ( cl>0 && recs != undefined ) {
			rl=recs.length;
			var l=Math.min(cl,rl);
			//alert(cl+"=cardslen rl="+rl);
			recs_pointer=0;
			for (i=0;i<l;i++){cardwritenew(i);}
		
			if (l<cl){ 
				for (i=l; i< cl; i++){ cards[i].remove(); } 
			cards=cards.slice(0,l);
			CardColRow=CardColRow.slice(0,l);
			}
		cards_out();
		}
	}
}
//______________________________________
function card_data(c){ //creates hash array for record c 
	if (typeof c != 'number'){
		c = parseInt(c.id.substring(1));
		c=cards[c].recno;
		}
	var D=ltov(recs[c],'|');
	var F=ltov(flds,'|');
	var L=Math.min(D.length,F.length);
	var VALS=new Array(L);
	for (var i=0;i<L;i++){VALS[F[i]]=D[i]}
return(VALS);
}
//______________________________________

function card_positions(w,h){
var X,Y,x,y;
var W=BACK.w, H=BACK.h;

var rows = Math.floor( H / (cardh+25) );
var cols = Math.floor( W / (cardw+25) );


cgap = Math.floor ( ( W - ( cols * cardw ) ) / ( 1 + cols ) );
rgap = Math.ceil ( ( H - ( rows * cardh ) ) / ( 1 + rows ) );
rows+=2; //for off screen top & bot
//rows = Math.ceil( 50 / cols );

ColPos=[];X=cgap;
for ( x=0; x<cols; x++ ){ ColPos[x] = X; X=X + cgap + cardw }

RowPos=[];Y=rgap;
for ( y=0; y<rows; y++ ){ RowPos[y] = Y; Y=Y + rgap + cardh }

//alert(ColPos+"=col \n row="+RowPos);
CardColRow=[];
	for ( y=0; y<rows; y++ ){	
			for ( x=0; x<cols; x++ ){	
				CardColRow.push([x,y]);
			}
	}
//INFO.write((rgap + cardh)+"=rowdist rows="+RowPos.join(','));
}

//______________________________________

resizefunc = function(){
//DOING=1;
setTimeout("resizefunc2()",500);
}

resizefunc2 = function(){
//menu_layer.centre('X');
//copyrite.moveTo(0,doc.h-12);	
//copyrite.centre('X');

	if (!resize){
		if (cardbig[0]>-1){
			cardClick(null,resizefunc)
		}else{
		DOING=1;
		BACK.resizeTo(doc.w*.95,doc.h-160);BACK.centre('X');
		cardno=0;
		resize=1;
		cardscreate();	
		cardswrite();
		card_big.centre();
		}
	}
}
//______________________________________

function cards_out(){
if(0<cards.length){
DOING=1;
var x,y,i,cl,rl;
//cards[0].donefunc="resize=0;";
cards[0].donefunc=function(){cardsVisPos()} 
var cl=CardColRow.length,rl=recs.length;
	for (i=0; i< cl; i++){
		x=CardColRow[i][0];y=CardColRow[i][1];
		cards[i].setVisible(i<rl);
		cards[i].slideTo(ColPos[x],RowPos[y],0); 
	}
	
}	
}

//______________________________________

function cards_in(){
	var x=(BACK.w-cardw)/2;
	var y=(BACK.h-cardh)/2;
	for (i=0;i<cards.length;i++){
		cards[i].slideTo(x,y,150);
	}
}
//______________________________________

cards_up = function(end){
if (DOING || !UP){return;}
var U=document.getElementById('rollup').style;
//if (U.visibility=='hidden'){return;}
U.visibility='hidden';
document.getElementById('rolldown').style.visibility='hidden';

if (cardbig[0]>-1){cardClick(null,cards_up)
	}else{
DOING=1;
var y,Y,i,done=0,cl=cards.length,rl=recs.length;
var d=rgap + cardh,below=RowPos[RowPos.length-2],above=-(cardh+10);
	
		for (i=0; i< cl; i++){
		y=cards[i].y;
		if ( y < 0 && rl > recs_pointer + cl){
				cards[i].moveTo(cards[i].x,below)
				cardwritenew(i,recs_pointer + cl);
				recs_pointer++;
			}else{
				Y = (y==RowPos[0]) ? above : y - d ;
				if (!done) { cards[i].donefunc=function(){cardsVisPos(end)} ; done=1; } 
				cards[i].slideTo(null,Y); 
			}
		}
	}
}
//______________________________________

cards_down = function(home){
if (DOING || !DOWN ){return;}
var D=document.getElementById('rolldown').style;
//if (D.visibility=='hidden'){return;}
D.visibility='hidden';
document.getElementById('rollup').style.visibility='hidden';
if (cardbig[0]>-1){cardClick(null,cards_down)
	}else{
DOING=1;	
var y,Y,i,done=0,cl=cards.length;
var d=rgap + cardh,below=RowPos[RowPos.length-2],above=-(cardh+10);

		for (i=cl-1; i>-1; i--){
		y=cards[i].y;
			if (y==below && recs_pointer > 0){
				cards[i].moveTo(cards[i].x,above)
				recs_pointer--;
				cardwritenew(i,recs_pointer);
			}else{
				Y = (y==above) ? RowPos[0] : y + d ;
				if (!done) { cards[i].donefunc=function(){cardsVisPos(home)} ; done=1; } 
				cards[i].slideTo(null,Y); 
			}
		}
	}
}
//______________________________________

cardsVisPos = function (home_end){
var x,y,i,c;
DOWN=UP=0;
	for (i=0; i<cards.length; i++){
	c=cards[i];
		if (c.y <= 0){DOWN=1;}
		if (c.y >= BACK.h){UP=1;}
	}
resize=0;
if(DOING==2){home_end='';}
DOING=0;
if(home_end=='home' && DOWN){setTimeout( "cards_down('home')",500 );  return }

if(home_end=='end'  && UP){setTimeout( "cards_up('end')",500 );return }

document.getElementById('rolldown').style.visibility=DOWN ? "visible" : "hidden";
document.getElementById('rollup').style.visibility= UP ? "visible" : "hidden";
}
//______________________________________

cards_sort = function(fld){
if (DOING){return;}

document.getElementById('rolldown').style.visibility='hidden';
document.getElementById('rollup').style.visibility='hidden';
if (cardbig[0]>-1){cardClick(null,cards_sort,fld)
	}else{
DOING=1;	
var p,s,r,i,c,x,y,D;
cards_opacity(25);
r=RandomArray(CardColRow.length);
cards_shuffle('now',r);
cards[0].donefunc=function(){cards_opacity(25,99);cardsVisPos();};
cards_shuffle();

i=arraysearch(flds,fld);
s=range(0,recs.length);

s=multisort(vecs[i],s)
s=s[1];
//if(INFO){INFO.write(fld+"<br>"+vecs[i]+"<br>"+s);}
cardwritenew(0,0); //info card first
	for (i=1; i< cards.length; i++){
		if (s[i]>0){cardwritenew(i,s[i]);}
	}
}
}
//______________________________________


function cards_shuffle(speed,ord){
var i,x,y,p

if (!ord){ord=range(0,CardColRow.length-1,ord)}
		for (i=0; i< ord.length; i++){
		p=ord[i];
		x=CardColRow[p][0];y=CardColRow[p][1];
		x=ColPos[x];y=RowPos[y];
		//cards[i].setVisible(1);
		if(speed!="now"){cards[i].slideTo(x,y);
		}else{cards[i].moveTo(x,y);}
	}
}
//______________________________________

function cards_opacity(f,t){
	
	for (var i=0;i<CardColRow.length;i++){
		if(t){cards[i].opacity_gradual(f,t);
		}else{cards[i].setOpacity(f);}
	}
}

//______________________________________

function mousOver(card){
window.status="Click card for more information";
	if (card && MEMB==1) {
	CC = (card.currentTarget) ? card.currentTarget : card.element; 
		//RB=card_data(card);
		//window.status=n['Ref'];
	}
}
//______________________________________
function mousOut(card){
window.status="";	
CC=null;RB=0;
}


function WhatNow(){
//alert("type is "+typeof this);
//el=object2String(this);
alert(el);
}
//______________________________________

function cardClick(card,after,arg){
if (DOING){DOING = 2 ; return false;} //click stops autoscroll
if (RB){return false;} // follows right click
DOING=1;
var w,h,o,x,y,cardno,CB;
if (card) {
	card = (card.currentTarget) ? card.currentTarget : card.element; 
	//if(RB){amendcard(card);return (false);}
	I=card.id;
}else{I='card_big';}

if (!after){ after=function(){};arg=''; }//does nothing

if (cardbig[0]>-1){
		CB=cards[cardbig[0]];
		CB.setVisible(1);
		card_big.setVisible(0);
		cardbig[0]=-1;
		CB.donefunc=function(el){el.cont.setVisible(1);el.tip.setVisible(1);cards_opacity(50,99);DOING=0;after(arg)}
		CB.cardReSizeMove(cardw,cardh,cardbig[1],cardbig[2])
		}
	if (I!="card_big"){
		cardno = parseInt(I.substring(1));
		card=cards[cardno];
		if(card.recno>0 || !card.action){
		cardbig=new Array(cardno,card.x,card.y)
		w=card_big.w*.95;
		h=card_big.h*.95;
		x=(BACK.w-w)/2;
		y=(BACK.h-h)/2;
		cards_opacity(50);
		card.cont.setVisible(0);
		card.tip.setVisible(0);
		card.donefunc=function(){card_big_write(cardno);}
		card.cardReSizeMove(w,h,x,y)
		}else{
		DOING=0;
		eval(card.action);
		}
	}
}
//______________________________________

//______________________________________

function amendcard(card){
//if (!card || !MEMB || MEMB!=1){return (false);}
//	card = (card.currentTarget) ? card.currentTarget : card.element; 
		n=card_data(card);
		var r=n['Ref'];
		var b=n['Detail'];
a="r="+r+"&d="+b;
buff_send(a);
}



function cardBcol(card,bcol){
//var bcol= onoff ? BACK.css.backgroundColor : card.css.backgroundColor;
card.setStyle('background',bcol);

card.tlc.i.setStyle('color',bcol);
card.blc.i.setStyle('color',bcol);
card.trc.i.setStyle('color',bcol);
card.brc.i.setStyle('color',bcol);
}
//______________________________________

function cardValue(cardno,fld){
var i=arraysearch(flds,fld);
var p=ltov(recs[cardno]);
p=p[i];
return (p);
}

//______________________________________
function cards_empty(){
	if ( 'object'==typeof(cards) ) {
		for (var i=0;i<cards.length;i++){
		cards[i].cont.write('');
		//cards[i].setVisible(0);
		}
	}	
}
//______________________________________
function cards_keyPressed(evt) {
if (DOING==1){DOING=2;return;}
var K=0;
evt = (evt) ? evt : ((window.event) ? event : null);
    if (evt) {
    var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
       if (elem) {
       K = (evt.charCode) ? evt.charCode : ((evt.which) ? evt.which : evt.keyCode);
      	switch(K){
			case 33:	cards_up();break; //pgup
			case 34:	cards_down();break; //pgdown
			case 35:	cards_up('end');break; //end
			case 36:	cards_down('home');break; //home
			case 38:	cards_up();break; //arrup
			case 40:	cards_down();break;//arrdown
			}
		}
	}
}
//______________________________________
function cardClick1(evt) {
if (CC && MEMB==1){
	evt = (evt) ? evt : ((window.event) ? event : null);
	if (evt.button==2){amendcard(CC);RB=1};
	}
return false;
}
