/*
 * Collection of common functions.
 *
 *      Such as hiding infoboxes etc.
 */
function parseURL(url) {
    var a =  document.createElement('a');
    a.href = url;
    return {
        source: url,
        protocol: a.protocol.replace(':',''),
        host: a.hostname,
        port: a.port,
        query: a.search,
        params: (function(){
            var ret = {},
                seg = a.search.replace(/^\?/,'').split('&'),
                len = seg.length, i = 0, s;
            for (;i<len;i++) {
                if (!seg[i]) { continue; }
                s = seg[i].split('=');
                ret[s[0]] = s[1];
            }
            return ret;
        })(),
        file: (a.pathname.match(/\/([^\/?#]+)$/i) || [,''])[1],
        hash: a.hash.replace('#',''),
        path: a.pathname.replace(/^([^\/])/,'/$1'),
        relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [,''])[1],
        segments: a.pathname.replace(/^\//,'').split('/')
    };
}

function isViewProeflens () {
    // parse url
    parsed = parseURL ( document.location );
    return ( parsed.hash && parsed.hash == 'proefset' ) ? true : false;
}
function isViewInfo () {
    parsed = parseURL ( document.location );
    return ( parsed.hash && parsed.hash == 'informatie' ) ? true : false;
}
function isMoreInfo () {
    parsed = parseURL ( document.location );
    return ( parsed.hash && parsed.hash == 'meer-informatie' ) ? true : false;
}
function isdefined ( varname ) {
    return ( typeof varname !== 'undefined' ) ? true : false;
}

function isInt (str) {
    var i = parseInt (str);

    if ( isNaN (i) )
        return false;

    i = i . toString ();
    if (i != str)
        return false;

    return true;
}

function stristr ( haystack, needle, bool ) {
    var pos = 0;
    haystack += '';
    pos = haystack.toLowerCase().indexOf( (needle+'').toLowerCase() );
    if (pos == -1){
        return false;
    } else {
        if ( bool ) {
            return haystack.substr( 0, pos );
        } else {
            return haystack.slice( pos );
        }
    }
}

function ucfirst (str) {
    str += '';
    var f = str.charAt(0).toUpperCase();
    return f + str.substr(1);
}

function checkEmail ( email ) {
    var filter = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
    if ( !filter.test ( email ) ) {
        return false;
    }
    return true;
}

function number_format(number, decimals, dec_point, thousands_sep) {
    number = (number+'').replace(',', '').replace(' ', '');
    var n = !isFinite(+number) ? 0 : +number,
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
        s = '',
        toFixedFix = function (n, prec) {
            var k = Math.pow(10, prec);
            return '' + Math.round(n * k) / k;
        };
    // Fix for IE parseFloat(0.55).toFixed(0) = 0;
    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
    if (s[0].length > 3) {
        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
    }
    if ((s[1] || '').length < prec) {
        s[1] = s[1] || '';
        s[1] += new Array(prec - s[1].length + 1).join('0');
    }
    return s.join(dec);
}

function trim(value) {
    value = value.replace(/^\s+/,'');
    value = value.replace(/\s+$/,'');
    return value;
}

function setErrorBar ( msg, element, keep_other ) {
    // make sure all bars are hidden
    if ( !keep_other ) {
        hideInfoBars();
    }
    if ( element )
        key = '#' + element;
    else
        key = '#errorbar';

    // remove hidden class
    $(key).removeClass ( 'hidden' );
    $(key + " p").html ( msg );
    $(key).fadeIn();

    $("body").scrollTo( $(key), { duration:500 });
}

function setAlertBar ( msg ) {
    // make sure error bar is hidden
    hideInfoBars();
    $("#alertbar").removeClass ( 'hidden' );
    $("#alertbar p").html ( msg );
    $("#alertbar").fadeIn();
    $("body").animate({scrollTop:0},1000);
}
function setInfoBar ( msg, element, keep_other, fit ) {
    // make sure error bar is hidden
    if ( !keep_other ) {
        hideInfoBars();
    }

    if ( element )
        key = '#' + element;
    else
        key = '#infobar';


    $(key).removeClass ( 'hidden' );
    $(key + " p").html ( msg );
    $(key).fadeIn();
    $("body").scrollTo( $(key), { duration:500 });
    if ( !fit ) {
        setTimeout("resetInfobar('element', key)", 5000);
    }
}
function resetInfoBars () {
    $("#errorbar").fadeOut();
    $("#alertbar").fadeOut();
    $("#infobar").fadeOut();
}

function resetInfobar ( bar, el ) {
    switch (bar) {
        case 'errorbar':
            $("#errorbar").fadeOut();
        break;
        case 'alertbar':
            $("#alertbar").fadeOut();
        break;
        case 'infobar':
            $("#infobar").fadeOut();
        break;
        case 'element':
            $(el).fadeOut();
        break;
    }
}
function hideErrorBars () {
    $("#errorbar").hide();
}

function hideInfoBars () {
    $(".toolTip").not(".staticbox").hide();
}

$(function(){
    // logo click
    $("#logo_click_container").click(function(e){
        e.preventDefault();
        document.location=settings.xhr_address;
    });
    //-- Hide tooltip on close
    $('.toolTip .close').live('click', function(){
        $(this.parentNode).fadeOut(function(){
            $(this).remove();
        });
    });

    $('.error .close').click(function(){
        $(this.parentNode).fadeOut(function(){
            $(this).remove();
        });
    });

    // hunt down delete links, if clicked.. request confirmation
    $('a').click(function(e) {
        if ( $(this).attr('deletelink') == 'true' ) {
            if ( confirm ( 'Weet je het zeker?' ) )
                return true;
            else {
                e.preventDefault();
                return false;
	    }
        } else if ( $(this).attr('cancellink' ) == 'true' ) {
            if ( confirm ( 'Weet je zeker dat je wilt annuleren?' ) )
                return true;
            else {
		e.preventDefault();
		return false;
	    }
	}
    });
    autourl = settings.xhr_address + '?c=products&m=autocomplete';

    $( "#searchcomplete" ).catcomplete({
        delay: 0,
        source:autourl
    });


    // make quick basket clickable
    $("#quickbasket").live('click', function(){
        document.location=settings.xhr_address + 'winkelmandje/';
    });

    $("#quickbasket_expand").live('click',function(){
        $("#quickbasket_expand_details").removeClass('hidden');
        $("#quickbasket_expand_details").fadeIn();
    });
    $(".expand-item-close a").live ( 'click', function (e) {
        e.preventDefault();
        $("#quickbasket_expand_details").fadeOut();
    });
    // hide expand
    $("#quickbasket_expand_details").hide();

    // loggin in ?
    $("#loginSubmitBtn").click(function(e){
        e.preventDefault();
        // remove possible current error classes.
        $("#top_username").removeClass('errorfield');
        $("#top_password").removeClass('errorfield');

        if ( $("#top_username").val() == '' ) {
            $("#top_username").addClass('errorfield' );
        } else if ( $("#top_password").val() == '' ) {
            $("#top_password").addClass('errorfield');
        } else {
            // try to login user.
            var url = settings.xhr_address + 'authenticate/';
            $.ajax  ({
                url: url,
                type:'POST',
                data: {
                    username:$("#top_username").val(),
                    password: $("#top_password").val()
                },
                success:function (data) {
                    if ( data.success != true ) {
                        if ( data.error ) {
                            alert(data.error);
                        } else {
                            alert ( 'Fout bij inloggen, gebruikersnaam/wachtwoord incorrect' );
                        }
                    } else {
                        document.location=settings.xhr_address + 'persoonlijke-pagina/'
                    }
                }
            });
        }
    });
    // want to register ?
    $("#registerBtn").click(function(e){
        e.preventDefault();
        document.location = settings.xhr_address + 'registreren/';
    });

    // bound fancybox class to fancybox plugin
    $(".fancybox").fancybox({
        'autoDimensions'    : false,
        'height'            : 'auto',
        'width'             : 560
    });
});

function loadQuickBasket () {
    var url = settings.xhr_address + 'basket/quickbasket/';
    var d = new Date();
    $.ajax  ({
        url: url,
        type:'POST',
        data: {
            t: d.getTime()
        },
        success:function (data) {
            if ( data.success == true ) {
                $("#winkelwagen_mini").html(data.data).fadeIn();
            }
        }
    });
}

var myconsole = function () {
    return {
        log:function ( msg ) {
            if ( window.console && window.console.firebug ) {
                console.log ( msg );
            }
        }
    }
}();
