﻿var filters = [];
var additionalFilters = [];
var searchUrl = null;
var windowRef = window;

$(document).ready(function() {

    $(".searchFormContainer select:not(.redirectFilter)").change(function() { doRedirect(); });
    $(".searchFormContainer .btnSubmit").click(doRedirect);
    $(".searchFormContainer input[type='button']").click(function() {
        doRedirect();
        return false;
    });

    $(".searchFormContainer input[type='text']").keypress(function(e) {
        if (enter(e)) {
            doRedirect();
            return false;
        }
        else {
            return true;
        }
    });
});

function doRedirect() {

    populateFilters();
    populateAdditionalFilters();

    var params = [];
    var canVirtualUrl = true;

    canVirtualUrl = (additionalFilters.length == 0);

    for (var i = 0; i < filters.length; i++) {
        var query = filters[i]();
        
        var value = query[0];
        var label = query[1];

        var isVUrl = query[2];
        if (canVirtualUrl)
            if (!isVUrl && value)
            canVirtualUrl = false;

        var text;
        if (query[3])
            text = query[4];
        else
            text = null;

        if (value)
            params[params.length] = [label, value, isVUrl, text];

    }

    var url = "";

    if (canVirtualUrl) {
        url = createVirtualUrl(params);
    }
    else {
        url = createQueryStringUrl(params);
    }

    if (url == "/_____.html")
        url = "/startSearch.aspx";

    if (searchUrl)
        url = searchUrl + url;

    //url = url.toLowerCase();

    windowRef.location = url;
}

function createVirtualUrl(params) {

    params = getOrderedParams(params);

    var name = ""; 
    var url = "";
    var max = 4;

    for (var i = 0; i < max; i++) {
        url += "_";

        if (params[i]) {
            url += params[i][1];

            if (params[i][3])
                name += params[i][3] + "_";
        }
    }

    if (name == '')
        name += '_';

    var postbackURL = '/' + encodeURIComponent(name + url) + '.html';

    return postbackURL.replace(/%26|%23|%2B|%3F|%3D|%25|%3A|%3C|%3E|%22|%7C|%2F|\*/g, '');
}

function getOrderedParams(params) {
    var newParams = [];

    for (var i = 0; i < params.length; i++) {
        if (params[i] && params[i][2]) { // if isVurl

            switch (params[i][0]) {
                case "keywords":
                    newParams[0] = params[i];
                    break;

                case "categoryID":
                    newParams[1] = params[i];
                    break;

                case "placeID":
                    newParams[2] = params[i];
                    break;

                case "typeID":
                    newParams[3] = params[i];
                    break;
            }
        }
    }

    return newParams;
}

function createQueryStringUrl(params) {
    var path = "/listEducations.aspx";
    var qs = "";

    for (var i = 0; i < params.length; i++) {
        qs += (i == 0 ? "?" : "&") + params[i][0] + "=" + params[i][1];
    }

    if (qs.length == 0) {
        path = "/_____.html";
    }
    else {
        for (var i = 0; i < additionalFilters.length; i++) {
            qs += "&" + additionalFilters[i][0] + "=" + additionalFilters[i][1];
        }

        path = path + qs;
    }
    return path;
}

function enter(e) {
    var k = e.which;
    return (k == 13);
}

function getDropDownQuery(ctl, name, isVurl) {
    var selected = ctl.find("option:selected")
    
    var value = selected.val();
    var text = selected.text();

    if (value) {
        return [
            value,      // 0 Value ( = QueryString parameter value )
            name,           // 1 QueryString parameter name
            isVurl,         // 2 is virutal url parameter
            true,           // 3 has Text
            convertToWebFriendlyString(text)       // 4 Text
        ];
    }
    else {
        return [null, name, isVurl, false, null];
    } 
}

function getTextBoxQuery(ctl, name, isVurl) {
    var txt = ctl.find("input[type='text']");
    var value = txt.val();
    if (value == txt.attr('title'))
        value = '';
        
    return [
        value,      // 0 Value ( = QueryString parameter value )
        name,           // 1 QueryString parameter name
        isVurl,         // 2 is virtual url parameter
        false,          // 3 has Text
        null            // 4 Text
    ];
}

function getCheckBoxQuery(ctl, name, isVurl, value) {
    var cb = ctl.find("input[type='checkbox']");
    if (!cb.attr('checked')) {
        value = null;
    }
    
    return [
        value,          // 0 Value ( = QueryString parameter value )
        name,           // 1 QueryString parameter name
        isVurl,         // 2 is virtual url parameter
        false,          // 3 has Text
        null            // 4 Text    
    ];
}

function convertToWebFriendlyString(s) {

    var r;
    s = s.replace("å", "aa");
    s = s.replace("ä", "ae");
    s = s.replace("ö", "oe");
    s = s.replace("Å", "Aa");
    s = s.replace("Ä", "Ae");
    s = s.replace("Ö", "Oe");

    //Tabort alla tecken som inte är mellan a-z och 0-9
    var re = /[^a-z0-9]/ig;
    s = s.replace(re, "_");

    //tabort alla dubbla __
    re = /__+/ig;
    s = s.replace(re, "_");

    //tabort leading och trailing underscore
    re = /(^_)?(_$)?/ig;
    r = s.replace(re, "");

    return r;        
}