/****************************************************

Helpers

*****************************************************/


function col2rgb(col)
{
    col = col.toUpperCase();
    var num = new Array(col.substr(0, 2), col.substr(2, 2), col.substr(4, 2));
    base = 16;
    m = 1;
    return new Array(parseInt(num[0], base) * m, parseInt(num[1], base) * m, parseInt(num[2], base) * m);
}

function rgb2col(rgb)
{
    return rgb[0].toString(16) + rgb[1].toString(16) + rgb[2].toString(16);
}

function blendColors(col1, col2, factor)
{
    c1 = col2rgb(col1);
    c2 = col2rgb(col2);
    for (j = 0; j < 3; j++)
	c1[j] = Math.round(c1[j] * factor + c2[j] * (1 - factor));
    return rgb2col(c1);
}
/****************************************************

Prepares the div - creates boxes for item lists

*****************************************************/

function writeRows(params)
{

    txt = '';
    for (i = 0; i < 8; i++) {	// 6a92e6
	txt +=
	    '<div style="display:none; background-color: #' + blendColors('ffffff','ff8745', i / 7) 
	    + ' " onmousemove="rowMove(this);" oznmouseout="rowOut(this)" class="navbar-' 
	    + params.menuclass + '" id="'+params.divid+'-row' + i + '"></div>';
    }
    $('#' + params.divid).html(txt);
}



var currRow = -1;
var scriptsLoaded = Array();

var menuUnits = Array();

function rowOut(obj)
{
    // rowUpdate(-1);
}



function rowMove(obj)
{
    arr=obj.id.split('-row');
    
    rowUpdate(arr[0],parseInt(arr[1]));
}

function rowUpdate(divid,id)
{

    //$('#current').html(divid+' : '+id);

    if (menuUnits[divid].currRow == id)
	return;

    menuUnits[divid].currRow = id;
    //setTimeout('rowFade(\''+divid+'\',' + menuUnits[divid].currRow + ');', 500);
}



function rowFade(divid,id)
{
    if (id != menuUnits[divid].currRow)
	return;
    rid = (menuUnits[divid].currRow < 0) ? 1 : menuUnits[divid].currRow + 1;
    for (i = rid + 1; i < 8; i++) {
	$('#'+divid+'-row' + i).fadeOut('fast');
    }
}

var currid = -1;
function onMouseIn(obj)
{
    arr=$(obj).attr('id').split('-item');
//   $('#current').html(arr[0]+' :: '+arr[1]);
    id = parseInt(parseInt(arr[1]));
    mouseUpdate(id,arr[0]);
}

function onMouseOut(obj)
{
    arr=$(obj).attr('id').split('-item');
    mouseUpdate(-1, arr[0]);
}

function mouseUpdate(id,divid)
{
    if (menuUnits[divid].currid == id)
	return;

    menuUnits[divid].currid = id;
    
    if (id<0)
	return;
//    $('#current').html(divid+' : '+id);


    //setTimeout('
    itemSet(id,divid);
    // ((id >= 0) ? 100 : 100));
    
}

var rowselection = Array();

function itemSet(id, divid)
{

    if (menuUnits[divid].currid != id)
	return;

    rid = (menuUnits[divid].currRow < 0) ? 1 : menuUnits[divid].currRow + 1;
    setTree(rid, id, divid);

    for (x = rid - 1; x < 8; x++) {
	if (menuUnits[divid].rowselection[x]){
	    $('#'+divid+'-item' + menuUnits[divid].rowselection[x]).css('background-color', '');
	}
	menuUnits[divid].rowselection[x] = 0;
	if (x>rid)
	$('#'+divid+'-row'+x).fadeOut('fast');
    }

    col = $('#'+divid+'-row' + rid).css('background-color');

    $('#'+divid+'-item' + id).css('background-color', col);
    menuUnits[divid].rowselection[rid - 1] = id;
}

function itemclicked(obj)
{
    arr=$(obj).attr('id').split('-item');
    id = parseInt(arr[1]);
//    alert(arr[0]);
    menuUnits[arr[0]].itemclick(menuUnits[arr[0]].rowselection);

}

function linkcode(cls, cid, divid)
{
    return '<a ' + cls + ' id="' +divid+'-item'+ cid +
	'" ondblclick="itemclicked(this);" oanmouseout="onMouseOut(this);" onclick="onMouseIn(this);'+
	((cls!='') ? '' : ' itemclicked(this);')+'" '+
	
//	    menuUnits[divid].anchor(cid) + 
	    
	    'style="cursor:pointer;">' + menuUnits[divid].itemname(cid) + '</a> ';
}



function genTree(id, divid)
{
    var ret = '';

    cls = '';
    
    params=menuUnits[divid]
    
    childrenArray=params.children(id);

    if (!childrenArray)
	return '';

    if (params.menuclass == 'vert') {

	num_columns = 1;
	floatst = '';
	num_children = childrenArray.length;
    

	if (num_children > 30) {
	    floatst = 'style="float:left"';
	    num_columns = 2;
	    if (num_children > 60){
		num_columns = 3;
		if (id == 647)
		    num_columns = 5;
	    }
	}
    }

    for (ch in childrenArray) {
	cid = childrenArray[ch];
	cls = ((params.children(cid))
	       || (id == 0)) ? 'class="populated-' + params.menuclass + '"' : '';

	if (params.menuclass == 'vert')
	    if ((ch % (Math.round(num_children / num_columns) + 1)) == 0)
		ret += ((ch == 0) ? '' : '</div>') + '<div style="width:100px;float:left">';

	ret += linkcode(cls, cid, divid);
    }

    if (params.menuclass == 'vert'){
	ret += '</div>';
	ret += '<scr' + 'ipt type="text/javascript">' +
	    '$("#' + divid+'-item'+childrenArray[0] + '").parent().parent().css("width","' + ((num_columns == 1) ? '' : 100 * num_columns + 'px') + '");' + '</scri' + 'pt>';
    }

    return ret;
}


function menuLoadScript(url,callback){
    $.get(url,{},function(data,textStatus){
	    eval(data);
	    //alert(category_name[80]);
	    callback(url);
	}    
    );
}

function setTree(rowid, id, divid)
{
    rowpre='#'+divid+'-row';
    params=menuUnits[divid];
    
    if (params.scripturl(id)){
    
	    if (!scriptsLoaded[divid+id]) {
		$(rowpre + rowid).html('<i style="padding: auto 0;">Loading...</i>').fadeIn('fast');
		//alert('x');
		menuLoadScript(params.scripturl(id), function(url) {
			    id = url.split('id=')[1];
			    id = parseInt(id.split('&')[0]);
			    scriptsLoaded[divid+id] = 1;
			    //alert('divid='+divid);
			    if ((menuUnits[divid].currRow != 0 && menuUnits[divid].currRow != 1)
				|| (menuUnits[divid].currid != id))
			    return; setTree(1, id, divid);}
		);
		return;
	    }
    }

    txt = genTree(id, divid);
    if (txt == '') {
	$(rowpre + rowid).fadeOut('normal');
    } else {
	row = $(rowpre + rowid);
	if (menuUnits[divid].menuclass == 'vert')
	    row.css('height', '');

	row.html(txt);
	row.fadeIn('normal');

	if (menuUnits[divid].menuclass != 'vert')
	    return;

	h1 = row.outerHeight();
	if (rowid > 0) {
	    h2 = $(rowpre + (rowid - 1)).outerHeight();
	    if (h2 > h1) {
		row.css('height', h2 + 'px');
	    }
	}


    }
}


function initCatBrowse(params)
{

    params.currRow = -1;
    params.rowselection=Array();
    if (undefined==params.anchor)
	params.anchor=function(id){
	    return 'a'+id;
	}

    
    menuUnits[params.divid]=params;
    scriptsLoaded[params.divid+0]=1;
	

    writeRows(params);

    if (params.scripturl(0))
	menuLoadScript(params.scripturl(0), function() {
		setTree(0, 0, params.divid);
		}
	);
    else
	setTree(0, 0, params.divid);
}

