/*******************************************************************************
	BROWSER DETECTION
*******************************************************************************/

// Check for Internet Explorer.
var isIE = navigator.userAgent.indexOf("MSIE") != -1;
var isIE6 = navigator.userAgent.indexOf("MSIE 6") != -1;
var isIE7 = navigator.userAgent.indexOf("MSIE 7") != -1;
var isIE8 = navigator.userAgent.indexOf("MSIE 8") != -1;

/*******************************************************************************
	COMMON AJAX ERROR HANDLER
*******************************************************************************/

function ajaxErrorHandler(request, transport, json)
{
    showWaitCursor(false);


    //	if(console && console.error) {
    //		console.error(request);
    //	} else {
    alert(''
        +'Door het optreden van een fout kan uw bewerking niet worden uitgevoerd.'
        +'\n'
        +'U wordt teruggeleid naar stap 1. Hiervoor onze excuses.');
	
//document.location = document.baseURI;
//	}
}

/*******************************************************************************
	Show hourglass
 ******************************************************************************/

function showHourglass()
{
    var popContainer = $('popShowHourglass');

    if(popContainer.hasClassName('hide')) {
        popContainer.absolutize();

        // IE7 does not like cloning the position of document.body

        popContainer.removeClassName('hide');
        resizeHourglass();

        popContainer.scrollTo();
    }
    else {
        popContainer.addClassName('hide');
    }
	
}

function resizeHourglass(){
    var popContainer = $('popShowHourglass');
    var popWindow = $('popWindowHourglass');

    var height = Math.max(
        (window.innerHeight || 0),
        document.body.clientHeight,
        document.documentElement.clientHeight,
        document.body.scrollHeight + 50,
        popWindow.cumulativeOffset().top + popWindow.getHeight() + 50
        );

    popContainer.setStyle({
        left: '0px',
        top: '0px',
        height: height + 'px',
        width: '100%'
    });
}

/*******************************************************************************
	CURSOR CHANGE
*******************************************************************************/

var SHOWING_WAIT_PANE = false;
function isShowingWaitCursor() {
    return SHOWING_WAIT_PANE;
}
function showWaitCursor(visible)
{
    if (SHOWING_WAIT_PANE==visible) return;
    SHOWING_WAIT_PANE = visible;
    document.body.className = visible ? 'waitCursor' : '';
    if (isIE) {
        document.body.style.cursor = visible ? 'wait' : '';
        if (visible) {
            $('waitPane').show();
            showHourglass();
        } else {
            $('waitPane').hide();
            showHourglass();
        }
    }
}

/*******************************************************************************
	K O S T E N S O O R T E N   S E A R C H
*******************************************************************************/

function onClickKostensoortSearch( elem, actionUrl )
{
    showWaitCursor(true);

    var formElement = $(elem).up('form');
    var formObject = formElement.serialize(true);

    unHighlightAll();
	
    formElement.disable();

    new Ajax.Request( actionUrl, {
        method: 'get',
        parameters: formObject,
        onException: ajaxErrorHandler,
        onFailure: ajaxErrorHandler,
        onSuccess: function(transport){
            formElement.enable();
			
            var first = true;
            var ids = eval('(' + transport.responseText + ')' );
            for( var i = 0; i < ids.length; i ++ ) {
                var rowElement = $(''+ids[i]);
                if( rowElement == null ) continue;
			
                showAndMarkRow(rowElement, first);
                                
                first = false;
            }
            showWaitCursor(false);
                        
            if (pageTracker) pageTracker._trackPageview(actionUrl + '?' + formObject);
        }
    });
	
    return false;
}
function showAndMarkRow(row, doScrollTo) {
    row = $(row);
    showLeaf(row);
    if (doScrollTo) scrollToKostensoort(row);
    markRow(row);
}

function markRow(tr) {
    tr = $(tr);
    tr.childElements().each( function(cell) {
        cell.addClassName('mark');
    });
}

Ajax.Responders.register({
    onCreate: function(requestObject) {
        // let's add parameter verstrekker=VERSTREKKER_NAAM to all Prototype Ajax calls:
        
        // after reading the prototype source code (Ajax.Request.request(...)), I concluded we have to 
        // do an ugly hack here such that verstrekker=... is added to the parameters. I cannot find another
        // generic way to inject an extra parameter in all Prototype's Ajax calls.

        // this should have been sufficient...
        requestObject.options.parameters.verstrekker = VERSTREKKER_NAAM;
        requestObject.parameters.verstrekker = VERSTREKKER_NAAM;
        
        // but we need some magic here
        if (requestObject.method == 'get') {
            // when GET, append the new parameter to URL
            requestObject.url += (requestObject.url.include('?') ? '&' : '?') + 'verstrekker=' + escape(VERSTREKKER_NAAM);
        } else {
            // else we set the postBody which will be used in the ajax call
            requestObject.options.postBody = Object.toQueryString(requestObject.parameters) +
            (/Konqueror|Safari|KHTML/.test(navigator.userAgent) ? '&_=' : '');
        }
    }
});

/*******************************************************************************
	K O S T E N S O O R T E N   S E A R C H
*******************************************************************************/
function scrollToKostensoort(element) {
    var location = 0;

    //bepaal eerst de locatie van het geselecteerde element vanaf de bovenkant van de pagina
    do {
        location += element.offsetTop  || 0;
        element = element.offsetParent;
    } while (element);

    if (document.getElementById("scrollable-div").scrollHeight == 0) {
        //kennelijk is de div niet scrollable, scroll dan de gehele pagina naar
        //waar de kostensoort staat, zonder rekening te houden met de header
        window.scrollTo(0, location);
        return element;
    }
    document.getElementById("scrollable-div").scrollTop = 1;
    if (document.getElementById("scrollable-div").scrollTop == 1) {
        //kennelijk is de div wel scrollable (of stond toevallig op 1px)

        //bepaal de locatie van de scrollable div om te bepalen waar de
        //kostensoort op de pagina moet komen
        var screenPosition = document.getElementById("scrollable-div").offsetTop;

        //bepaal waar de div op gezet moet worden om de geselecteerde kostensoort
        //in beeld te krijgen, rekening houdend met de header
        var divPosition = location - screenPosition;
        document.getElementById("scrollable-div").scrollTop = divPosition;
    } else {
        //kennelijk is de div niet scrollable (maar werd dit niet in de eerste 
        //'if' ondervangen omdat IE gebruikt wordt), scroll dan de gehele pagina
        //naar waar de kostensoort staat, zonder rekening te houden met de header
        window.scrollTo(0, location);
    }
    return element;
}
