var path    = '/service/db/';
var url     = server + path;
var para    = '?';
var spinner = '<img src=/shop/templates/shr/layout/spinner.gif alt="" />';
var bg = '/shop/templates/shr/layout/dot.gif';
var totalResults = 0;
var resultsPerPage = 30;
var thisPage = 1;
var QueryLength = 0;
var QueryString = '';
var lastQueryLength = 0;
var lastCategory = 0;
var lastDetail = 0;
var lastSetBegin = 0;
var tStart  = null;
var timerID = 0;
var clockID  = 0;
var counter = 0;
var feedbackDelay = 25;
var minChar = 3;
var wait = false;

var u = null;
var lastU = null;
var detailsCat = 0;
var catsInResults = [];

var cp = new cpaint();
cp.set_transfer_mode('POST');
cp.set_response_type('text');
cp.set_proxy_url(server+'/service/proxy/cpaint2_proxy.php');
cp.set_persistent_connection(false);
cp.set_async(true);
cp.set_debug(false);

function getUrl(category, related, setbegin, detail) {
    u = para;
    var sort = document.getElementById('sort').value; // 1:price, 2:artist, 3:title
    if (detail<0) {
        u += '&list='+detail;
    } else if (detail>0) {
        lastDetail = detail;
        u += '&lang='+lang;
        u += '&detail='+detail;
    } else {
        f = getQuery();
        if (f != "" && f != null)
            u += '&find='+f;
        if (lang>0)
            u += '&lang='+lang;
        if (category>0 || sort>0) {
            if (category>0)
                lastCategory = category; //display same categorie again use with sort
            u += '&category='+lastCategory;
        }
        if (related>0)
            u += '&related='+related;
        if (sort>0)
            u += '&sort='+sort;
        if (setbegin>0) {
            if (setbegin>0)
                lastSetBegin = setbegin * resultsPerPage;
            u += '&setbegin='+lastSetBegin;
            u += '&setend='+((lastSetBegin+resultsPerPage)-1);
        }
    }
    if (DEBUG)
        display('debug',u);
    lastU = u;
    return u;
}


function getCR(parameter, return_fnc) {
    cp.call(url+'index.php', '', return_fnc, parameter);
    return false;
}


function getD(parameter, return_fnc) {
    cp.call(url+'index.php', '', return_fnc, parameter);
    return false;
}


function getLatest(parameter, return_fnc) {
    cp.call(url+'feed.php?list', '', return_fnc, parameter);
    return false;
}


///<summery>parse:request string => returns: array arrays</summery>
function createCategoriesArray(str) {
    var categories = null;
    try {
        var arrays = unescape(str).split("[####]");
        try {
            categories = arrays[0].split("[###]");
        } catch(e) {
            debug('error creating array: categories<br />exeption: '+ e);
        }
    } catch(e) {
        debug('error creating array: arrays<br />exeption: '+ e);
    }
    return categories;
}

///<summery>parse:str categories => returns: categorie tree via dtree.js</summery>
function categoriesToHtml(categories) {
    d = '<span class="georgia">' + empty + '</span>';
    if (categories.length>0 && categories != "[") {
        d = new dTree('d');
        d.add(0,-1,''); //add invisible root
        for (var loop=0; loop < (categories.length); loop++) {
            try {
                var categorie = categories[loop].split("[##]");
            } catch(e) {
                debug('error creating array: cat from: '+e);
            }
            cid     = categorie[0];
            cn      = categorie[1];
			cn 	    = cn.substr(0,1).toUpperCase()+cn.substr(1,cn.length); 
            if (cn.length > 28) {
                cn = cn.substr(0, 25)+'...';
            }
            pid     = categorie[2];
            tic     = categorie[3];
            d.add(cid, pid, cn+' ('+tic+')','javascript:getCR(getUrl('+cid+',0,0,0),displayR);thisPage=0;');
        }
    }
    return d;
}


///<summery>try to split request string into array arrays</summery>
function createResultsArray(str) {
    var results = null;
    try {
        var arrays = unescape(str).split("[####]");
        try {
            results = arrays[1].split("[###]");
            totalResults = arrays[2];
        } catch(e) {
            display('debug','error creating array: results<br />exeption: '+e);
        }
    } catch(e) {
        display('debug','error creating array: arrs');
    }
    return results;
}


///<summery>parse:str results => returns:xhtml code</summery>
function resultsToHtml(results) {
    // if (DEBUG) display('debug', 'resultsToHtml: results.length: ' + results.length);
    var temp = '<a name="top"></a>'
    var element = '';
    for (var loop=0; loop < results.length; loop++) {
        try {
            var result = results[loop].split("[##]");
        } catch(e) {
            //display('debug','error creating array: result from array: results['+categories[loop]+']<br />exeption: '+e);
        }

        if (result[0]>0) {
            pid = result[0];
            catId = result[1].split(";");
            artist = result[4];
            element = 'result'+loop;
            temp += '<div name="'+element+'" id="'+element+'" class="item">';
            temp += '<a onClick="getD(getUrl(0,0,0,'+pid+'),displayD);highLight(\''+element+'\', '+catId+');">';
            temp += '<table width=92% border=0 cellpadding=0 cellspacing=0><tr><td width=55 valign=top>';

            //changed by AKAN
            temp += '<img class=thumbnail border=0 src="/images/?pid='+pid+'" alt="" width=40 height=40 vspace=2/><br />';

            if (result[6] != null && result[6] != '')
                //price = result[6].substr(0, (result[6].lastIndexOf(".")+3));
				price = result[6];
            temp += '<span class=price>&euro; '+price+'</span>';
            temp += '</td><td valign=top>';
            temp += artist + '<br /><strong>'+result[3]+'</strong><br />'+result[5];
            temp += '</td></tr></table></a></div>'
            temp += '<div class="line">&nbsp;</div>';
        } else {
            hide('order_by');
            hide('results');
            temp = '<span class="georgia">' + empty + '</span>';
        }
    }
    ///<summery>pager</summery>
    temp += pager();
    return temp;
}


///<summery>returns the pager</summery>
function pager() {
    var s = '<div id="pager" >';
    var pages = Math.round(totalResults / resultsPerPage);
    var showLine=0;
    prevPage = thisPage-1;
    nextPage = thisPage+1;
    
	if (thisPage >= 1) {
        showLine=1;
        s += '<div style="float:left">';
        s += '<a href="javascript:n();" class="next" ';
        s += 'onClick="getCR(getUrl('+lastCategory+',0,'+prevPage+',0),displayR); thisPage--; toTheTop();">';
        s += prev;
        s += '</a></div>';
    }

    if (resultsPerPage<totalResults &&
            (resultsPerPage+thisPage*resultsPerPage)<totalResults) {
        showLine=1;
        s += '<div style="float:right">';
        s += '<a href="javascript:n();" class="next" ';
        s += 'onClick="getCR(getUrl('+lastCategory+',0,'+nextPage+',0),displayR); thisPage++; toTheTop(); return false;">';
        s += next;
        s += '</a></div>';
    }
    if (showLine>0) s += '<br/><br/><div style="clear:all;float:none"';
    s += '<span style="font-size:7pt" class="top">' + price_info + '</span>';
    s += '</div>';
    return s;
}

function highLight(element, catId) {
    //reset background
    for (var loop=0; loop < resultsPerPage; loop++) {
        try {
            var e = 'result'+loop;
            document.getElementById(e).style.backgroundColor='#ffffff';
        } catch (e) {
            //do nothing
        }        
    }
    document.getElementById(element).style.backgroundColor='#e6e6e6';
    var dTreeElement = 's'+catId;
    d.closeAll();
    d.openTo(catId, true);    
    //document.getElementById('+dTreeElement+').style.color='#e6e6e6';
}

///<summery>move the results up to a aname #top</summery>
function toTheTop() {
    location.assign('#top');
}

///<summery>move the results up to a aname #top</summery>
function switchLang(lang, url) {
    var c = null;
    var d = null;
    var r = url;
    if (document.getElementById('details').style.visibility=="visible") {
        r = '?pid='+lastDetail+'&language='+lang;
    } else if (document.getElementById('results').style.visibility=="visible") {
        r = lastU+'&language='+lang;
    }
    location.href = r;
}



///<summery>try to split request string into array arrays</summery>
function createDetailsArray(str) {
    var detail = null;
    try {
        var details = unescape(str).split("[####]");
        try {
            detail = details[1].split("[##]");
        } catch(e) {
            display('debug','error creating array: detail');
        }
    } catch(e) {
        display('debug','error creating array: details');
    }
    return detail;
}


///<summery>parse:str results => returns:xhtml code</summery>
function detailsToHtml(details) {
    var msg = 'Detail not found';
    var pid = msg;
    var cat = msg;
    var artist = msg;
    var artists = msg;
    var album = msg;
    var label = msg;
    var labelNr = msg;
    var cover = msg;
    var media = msg;
    var year = msg;
    var artNr = msg;
    var info = msg;
    var price = msg;
    var mc = msg;
    var kind = msg;
    var relas = msg;
    var imgs = msg;

    if (details[0] != null && details[0] != '')
        pid = details[0];
    if (details[1] != null && details[1] != '')
        cat = details[1];
    detailsCat = cat; //needed to display results via pid
    if (details[2] != null && details[2] != '')
        album = details[2];
    if (details[3] != null && details[3] != '')
        artist = details[3];
    if (details[4] != null && details[4] != '')
        mc = details[4];
    if (details[5] != null && details[5] != '')
        artists = details[5];
    if (details[6] != null && details[6] != '')
        label = details[6];
    if (details[7] != null && details[7] != '')
        labelNr = details[7];
    if (details[8] != null && details[8] != '')
        kind = details[8];
    if (details[9] != null && details[9] != '')
        cover = details[9];
    if (details[10] != null && details[10] != '')
        media = details[10];
    if (details[11] != null && details[11] != '')
        artNr = details[11];
    if (details[12] != null && details[12] != '')
        info = details[12];
    if (details[13] != null && details[13] != '')
        //price = details[13].substr(0, (details[13].lastIndexOf(".")+3));
		price = details[13];
    if (details[14] != null && details[14] != '')
        relas = details[14];
    if (details[15] != null && details[15] != '')
        imgs = details[15];

    //temp by AKAN
    temporaryImages = imgs.split (';');
    temporaryImage = temporaryImages[0];

    var temp = '<p class=itemfirst><img src=/images/?large&pid='+pid+' alt=Cover width=202 height=202 vspace=2 /><br />';
    temp += artist+'<br /><strong>'+album+'</strong><br />&euro; '+price+'</p>';
    temp += '<p><a href="/shop/shopping_cart.php?products_id='+pid+'&products_qty=1&action=add_product">'+order+'</a>&nbsp;&nbsp;';
    temp += '<a href="mailto:info@secondhandrecords.de?subject=Item.-Nr.: '+artNr+'">'+question+'</a><br />';

    if (relas != 0) {
        temp += '<a href="javascript:return true;" onClick="getCR(getUrl(0,'+relas+',0,0),displayR)" class="next">'+related+'</a><br />';
    }

    temp += '</p><p>';

    if (label != msg || labelNr != msg || kind != msg) {
        temp += label;
        if (label != msg && labelNr != msg)
            temp += ', ';
        temp += labelNr;
        if (kind != msg && labelNr != msg || (label != msg && kind != msg))
            temp += ', ';
        temp += kind;
        temp += '<br />';
    }

    if (mc != msg) {
        temp += mc;
    }

    if (quality != msg || media != msg) {
        temp += quality + cover+'/'+media+'<br />';
        ;
    }

    if (artNr != msg) {
        temp += artNrStr + artNr + '<br />';
    }

    temp += '</p>';

    if (artists != msg) {
        temp += '<p>' +artists+'</p>';
    }

    if (info != msg) {
        temp += '<p><em>' +info+'</em></p>';
    }
    
    temp += '<div class="line">&nbsp;</div><span style="font-size:7pt">' + price_info + '</span>';
    return temp;
}



///<summery>try to split request string into array arrays</summery>
function createLatestArray(request) {
    if (DEBUG)
        display('debug', 'createLatestArray: request.length: ' + request.length);
    var latest = null;
    try {
        latest = unescape(request).split("[###]");
    } catch(e) {
        display('debug','error creating array: latest');
    }
    return latest;
}


///<summery>parse:str results => returns:xhtml code</summery>
function latestToHtml(latest) {
    /*if (DEBUG)
        display('debug', 'latestToHtml: latest.length: ' + latest.length); */
    var count = 0;
    var temp = '<span class="georgia">' + empty + '</div>';
    if (latest.length>0) {
        temp = '';
        for (var loop=0; loop < latest.length; loop++) {
            var element = latest[loop].split("[##]");
            /*if (DEBUG)
                display('debug', 'latestToHtml: element: ' + element); */
            count++;
            if (element[0].length>0)
                temp += '<a href="/shop/?pid=' + element[0] + '"><img class="latest" src="/images/?pid='+element[0]+'" width="78" height="78" alt="" /></a>';
            if (count>4) {
                count = 0;
                temp += '<br />';
            }
        }
    }
    return temp;
}

///------------------------------------------------------------ all the displays
///<summery>displays the categories and results</summery>
function displayCRD(result) {
    hide('content');
    show("categories");
    spin("categories");
    show("results");
    spin("results");
    document.getElementById('categories').innerHTML = categoriesToHtml(createCategoriesArray(result));
    try {
        d.openAll();
    } catch (e) {
        //do nothing
    }
    document.getElementById('results').innerHTML = resultsToHtml(createResultsArray(result));
    wait = false;
    if (DEBUG)
        display('debug', 'displayCRD: wait: '+wait);
}


///<summery>displays the categories and results</summery>
function displayCR(result) {
    hide('content');
    show("categories");
    spin("categories");
    show("results");
    spin("results");
    hide("details");
    document.getElementById('categories').innerHTML = categoriesToHtml(createCategoriesArray(result));
    try {
        d.openAll();
    } catch (e) {
        //do nothing
    }
    document.getElementById('results').innerHTML = resultsToHtml(createResultsArray(result));
    wait = false;
    if (DEBUG)
        display('debug', 'displayCR: wait: '+wait);
    document.getElementById('query').focus();
}


///<summery>displays the categories</summery>
function displayC(result) {
    //hide("results");
    //hide("order_by");
    show("categories");
    spin("categories");
    document.getElementById('categories').innerHTML = categoriesToHtml(createCategoriesArray(result));
    wait = false;
    if (DEBUG)
        display('debug', 'displayC: wait: '+wait);
}


///<summery>displays the results</summery>
function displayR(result) {
    hide('content');
    show("results");
    spin("results");
    show("order_by");
    //hide("details");
    document.getElementById('results').innerHTML = resultsToHtml(createResultsArray(result));
    wait = false;
    if (DEBUG)
        display('debug', 'displayR: wait: '+wait);
}


///<summery>displays the details</summery>
function displayD(result) {
    hide('content');
    show("details");
    spin("details");
    document.getElementById('details').innerHTML = detailsToHtml(createDetailsArray(result));
    wait = false;
    if (DEBUG)
        display('debug', 'displayD: wait: '+wait);
}

///<summery>displays the details</summery>
function displayLatest(result) {
    if (DEBUG)
        display('debug', + result);
    document.getElementById('new').innerHTML = latestToHtml(createLatestArray(result));
    wait = false;

}

///<summery>displays the details</summery>
function display(element, content) {
    debugLine ++;
    show(element);
    document.getElementById(element).innerHTML = debugLine + '______________<br />' + content + '<br />' + document.getElementById(element).innerHTML;
}


//--------------------------------------------------------------------- triggers
function down() {
    //if (!wait)
    stopTimer();
    wait = false;
    if (DEBUG)
        display('debug', 'down: wait: '+wait);
}

///<summery>collection of task to be performed after keyUp-event in query form</summery>
function up() {
    QueryLength = (document.getElementById('query').value).length;
    if (((QueryLength >= minChar || QueryLength < lastQueryLength) && !wait)) {
        /*
        wait = true;
        if (DEBUG) display('debug', 'up: wait: '+wait);
        */
        hide('content');
        startTimer();
    }
    lastQueryLength = QueryLength;
}

function startTimer() {
    counter = 0;
    timerID  = setTimeout("UpdateTimer()", 0);
}


function stopTimer() {
    if(timerID) {
        clearTimeout(timerID);
        timerID  = 0;
    }
    tStart = null;
}

function UpdateTimer() {
    if(timerID) {
        clearTimeout(timerID);
        clockID  = 0;
    }

    if (!tStart && counter <= feedbackDelay) {
        counter++;
    }
    if (counter == feedbackDelay) {
        stopTimer();
        thisPage=0;
        wait=true;
        if (DEBUG)
            display('debug', 'UpdateTimer: wait: '+wait);
        QueryString = getQuery();
        lastCategory = 0;
        hide('details');
        show('order_by');
        show('categories');
        spin('categories');
        show('results');
        spin('results');
        if (QueryLength < minChar) {
            QueryString = '';
            lastQueryString = '';
            document.getElementById('query').value='';
            getCR(getUrl(0,0,0,0),displayC);
            hide('order_by');
            hide('results');
            setTimeout("d.closeAll()", 750);
        } else {
            getCR(getUrl(0,0,0,0),displayCR);
        }
    }
    timerID = setTimeout("UpdateTimer()", 50);
}

function getC() {
    var gc = detailsCat+';';
    if (gc.search(';')) {
        a = gc.split(';');
        gc = a[0];
    }
    return gc;
}


function getQuery() {
    if (document.getElementById('query').value.length > 0) {
		var qry = document.getElementById('query').value;
		qry = qry.replace('Ã¤', 'a');
		qry = qry.replace('Ã¶', 'o');
		qry = qry.replace('Ã¼', 'u');
		qry = qry.replace('ÃŸ', 's');
		qry = qry.replace('ä', 'a');
		qry = qry.replace('ö', 'o');
		qry = qry.replace('ü', 'u');
		qry = qry.replace('Ä', 'A');
		qry = qry.replace('Ö', 'O');
		qry = qry.replace('Ü', 'U');		
		return qry;
    } else {
        return null;
    }
}

///<summery>parse:string element id => displays a spinner in the passed element</summery>
function spin(element) {
    document.getElementById(element).innerHTML=spinner;
    return false;
}


///<summery>parse:string element id => makes the passed element visible</summery>
function show(element) {
    document.body.background = bg;
    document.getElementById(element).style.overflow="auto";
    document.getElementById(element).style.visibility="visible";
    return false;
}


///<summery>parse:string element id => hides the passed element</summery>
function hide(element) {
    document.getElementById(element).style.overflow="hidden";
    document.getElementById(element).innerHtml="";
    document.getElementById(element).style.visibility="hidden";
    return false;
}

function n() {
	//;
}
