// gets wether the Ajax call should be asynchronous
// this allows the basketOverview to submit itself after the call is finished
function isAsync(){
    var async = false;
    if ($('basket')){
        async = true;
    }
    return async;
}

// empties the basket
function emptyBasket() {
    new Ajax('/estore/basket.jsp?empty=yes', {async: isAsync(), onComplete:doUpdateBasket}).request();
}

// remove a line from the basket, line with ID = lineID
function removeLine(lineID){
    new Ajax('/estore/basket.jsp?remove=' + lineID, {async: isAsync(), onComplete:doUpdateBasket}).request();
}

// ajax update of basket
function doUpdateBasket() {
    if ($('basket')){
        new Ajax('/estore/basket.jsp', {update:'basket'}).request();
    }
}

var prod = undefined;
var quan = undefined;
var lkey = undefined
function startBuy(product, quantity, key, onComplete) {
    prod = product;
    quan = quantity;
    lkey = key;
    doBuy(onComplete);
    prod = undefined;
    quan = undefined;
    lkey = undefined;
}

function doBuy(onComplete) {
	var args = {};
	if (typeof onComplete == "function"){
		args.onComplete = onComplete;
	} else {
		args.onComplete = doUpdateBasket;
	}
	
    var url = '/estore/buy.jsp?product=' + prod + '&quantity=' + quan + '&key=' + lkey;
    new Ajax(url, args).request();
}

function toggleDisplay(id){
    var display = $(id).getStyle('display');
    if (display == 'none'){
        $(id).setStyle('display', 'block');    
    } else {
        $(id).setStyle('display', 'none');
    }
}

var divName = undefined;
function delayedBlur(name)
{
    divName = name;
    timer = window.setTimeout(blur, 250);
}
function blur()
{
    document.getElementById(divName).style.display='none';
    divName = undefined;
}

var selectedRow = undefined;
var selectedRowIndex = -1;
var eventKey = undefined;
function setEventKey(e){
    var evt;
    if (e){
        evt = e;
    } else {
        evt = window.event;
    }
    eventKey = evt.keyCode;
}

var thisFilter = undefined;
function updateKeyWordList(filter){
    thisFilter = filter;
    doUpdateKeyWordList();
    thisFilter = undefined;
    eventKey = undefined;
}

var showOpac = 0.8;
// update the keyword table
function doUpdateKeyWordList(){
    if (eventKey == 32 && selectedRow){ // 32 == SPACE
        fillFilterField(selectedRow.cells[0].innerHTML);
        return;
    }
    
    var filter = thisFilter;
    var keyWordDiv = $('keyWordContainer');
    var oldOpac = keyWordDiv.getStyle('opacity') / showOpac;
    var newOpac = oldOpac;
    if (filter.length == 0){
        newOpac = 0;
    } else {
        newOpac = 1;
        var MAXROWS = 6; 
        var nrVisible = 0;
        var rows = document.getElementById('keyWordTable').rows;
        
        // set selected row
        if (eventKey == 38){ // 38 == ARROW_UP
            selectedRowIndex--;
        } else if (eventKey == 40){ // 40 == ARROW_DOWN
            selectedRowIndex++;
        } else {
            selectedRowIndex = -1;
        }
        
        for (i=0 ; i<rows.length-1 ; i++){ // don't process finalRow
            row = rows[i];
            var keyWord = row.name;
            if (keyWord == undefined){
                keyWord = row.cells[0].innerHTML;
            }

            if (startsWithIgnoreCase(keyWord, filter)){
                if (filter != keyWord){
                    if (nrVisible < MAXROWS){
                        row.style.display='block';
                    }
                    else {
                        row.style.display='none';
                    }
                    if (nrVisible == selectedRowIndex){
                        row.style.color='red';
                        selectedRow = row;
                    } else {
                        row.style.color='white';
                    }
                    nrVisible = nrVisible + 1;
                }
                else {
                    row.style.display='none';
                }   
            } else {
                row.style.display='none';
            }
        }
        
        // show final row
        var finalRow = $('finalRow');
        finalRow.style.display='block';
        if (nrVisible > MAXROWS){
//             finalRow.cells[0].innerHTML="(" + (nrVisible-MAXROWS) + " more)";
            finalRow.cells[0].innerHTML="...";            
        }
        else if (nrVisible == 0){
//             finalRow.cells[0].innerHTML="No suggestions";
            finalRow.cells[0].innerHTML=""; 
            newOpac = 0;        
        }
        else {
            finalRow.style.display='none';
        }
        $('keyWordBody').setStyle('height',$('keyWordTable').getStyle('height'));
    }
    
    keyWordEffect(oldOpac,newOpac);
} 

// fades in/out the keyWord table
function keyWordEffect(start, end){
    if (start != end){
        $('keyWordContainer').effect('opacity',{duration:250}).start(start*showOpac,end*showOpac);
    }
}

function startsWithIgnoreCase(complete, part){
    var one = complete.toLowerCase().toUpperCase();
    var two = part.toLowerCase().toUpperCase();
    return one.indexOf(two) == 0;
}

// fills the search field with a selected value
function fillFilterField(filter){
    $('filterField').value=filter; 
    $('filterField').focus();
}

// Toggles between simple and advanced search
function toggleSearch(){
    $('appSearch').setStyle('height', $('appSearch').getStyle('height'));
    var oldHeight = parseInt($('appSearch').getStyle('height'));
    var addHeight;
    var subHeight;
    
    if ($('simpleSearch').getStyle('opacity') == '1'){
        subHeight = parseInt($('simpleSearch').getStyle('height'));
        $('simpleSearch').effect('opacity', {duration:250, oncomplete:$('simpleSearch').setStyle('display', 'none')}).start(1,0);
        $('advancedSearch').effect('opacity', {duration:250, onstart:$('advancedSearch').setStyle('display', 'block')}).start(0,1);
        addHeight = parseInt($('advancedSearch').getStyle('height'));
        $('toggleButtonAdvanced').setStyle('display','none');
        $('toggleButtonSimple').setStyle('display','block');        
    } else {
        subHeight = parseInt($('advancedSearch').getStyle('height'));
        $('simpleSearch').effect('opacity', {duration:250, onstart:$('simpleSearch').setStyle('display', 'block')}).start(0,1);
        $('advancedSearch').effect('opacity', {duration:250, oncomplete:$('advancedSearch').setStyle('display', 'none')}).start(1,0);        
        addHeight = parseInt($('simpleSearch').getStyle('height'));
        $('toggleButtonAdvanced').setStyle('display','block');
        $('toggleButtonSimple').setStyle('display','none');      
    }

    var newHeight = oldHeight + addHeight - subHeight;
    $('appSearch').effect('height', {duration:250}).start(oldHeight + 'px', newHeight + 'px');        
}

// Makes sure that the form with specified ID is submitted using Ajax
function addAjaxSubmit(formID){
    $(formID).addEvent('submit', function(e) {
        $('filterField').blur();
    	/**
    	 * Prevent the submit event
    	 */
    	new Event(e).stop();
     
    	/**
    	 * This empties the log and shows the spinning indicator
    	 */
    	var results = $('searchResult').empty().addClass('ajax-loading');
     
    	/**
    	 * send takes care of encoding and returns the Ajax instance.
    	 * onComplete removes the spinner from the log.
    	 */
    	this.send({
    		update: results,          
    		onComplete: function() {
    			results.removeClass('ajax-loading');
                reloadTooltips();
                $('filterField').focus();
    		}
    	});
    });
}

// Ajax update for application details
function updateDetails(app, apploc) {
    new Ajax('/common/applications/application.jsp?app=' + app + '&apploc=' + apploc + '&ajax=yes', {update:'appList', onComplete:reloadMoo}).request();
}

// Ajax update for product list
function updateProducts(app, apploc) {
    new Ajax('/estore/productlist.jsp?app=' + app + '&apploc=' + apploc + '&ajax=yes', {update:'storeList', onComplete:reloadMoo}).request();
}

//Ajax update for Bricsys product list
function updateBricsysProducts(app, apploc, promotioncode, viewall) {
	if (viewall == "true"){
		viewall = "&viewall=true";
	} else {
		viewall = "";
	}
    new Ajax('/estore/productlistBricsys.jsp?apploc=' + apploc + '&ajax=yes&code=' + promotioncode + viewall, {update:'storeList', onComplete:reloadMoo}).request();
}

//Get mystuff feed for home page
function getFeed(){
	dojo.xhrPost({
        url: "/common/feed.jsp",
        load: function(data){
            dojo.removeClass("feed", "loading");
            var result = dojo.place(data, "feed", "only");
            
            animateFeed();
            feedInterval = setInterval("animateFeed()", 3000);            
    	}
	});
}
function animateFeed(){
	var divs = dojo.query("div.miniFeedItem");
	if (divs.length > 0){
		var lastDiv = divs[divs.length-1];
		dojo.removeClass(lastDiv, "miniFeedItem");
		dojo.fx.wipeIn({
		       node: lastDiv
	    }).play();
	} else {
		clearInterval(feedInterval);
	}
}
