/**
 * Stränghanteringsrutiner.
 *
 * Version: $Id: string.js,v 1.20 2009/06/03 11:59:20 niklas Exp $
 */
 
var genitivUndantag = null;
var vokaler = null;

function getGenitivUndantag() {
	if (genitivUndantag == null) {
		genitivUndantag = new JSList();
		genitivUndantag.add("Kalmar");
		genitivUndantag.add("Orust");
	}
	return genitivUndantag;
}

function getVokaler() {
    if (vokaler == null) {
        vokaler = new JSList();
        vokaler.add("a");
        vokaler.add("o");
        vokaler.add("u");
        vokaler.add("å");
        vokaler.add("e");
        vokaler.add("i");
        vokaler.add("y");
        vokaler.add("ä");
        vokaler.add("ö");
    }
    return vokaler;
}
 
 
function justeraGenitivS(ordUtanGenitivS) {
	ordUtanGenitivS = "" + ordUtanGenitivS;
    var retString = ordUtanGenitivS;
    if (isSet(ordUtanGenitivS)) {
        if (!getGenitivUndantag().contains(ordUtanGenitivS)) {
        	var len = ordUtanGenitivS.length;
        	var idx = len - 1;
            var lastChar = ordUtanGenitivS.substring(idx);
            var doAddS = true;

            if (lastChar != null) {
                if (lastChar == "s" || getVokaler().contains(lastChar)) {
                    doAddS = false;
                }
            }

            if (doAddS) {
                retString = retString + "s";
            }
        }
    }

    return retString;
}

function jsString(s) {
    return "" + s;
}

/**
 * Returnerar värdestatus för en strängparameter.
 * @param str String strängvärde att kontrollera
 * @return true om definitionen för icke-tom sträng är uppfylld,
 * vilket definieras som ej undefied, ej null och ej tomma strängen ("").
 */
function isSet(str) {
    return str != undefined && str != null && str != "";
}

/**
 * Returnerar värdestatus för en id-parameter.
 * @param id id-värde att kontrollera (string eller number)
 * @return true om definitionen för icke-nytt id är uppfyllt,
 * vilket definieras som ej undefied, ej null, ej tomma strängen ("") och numeriskt > 0.
 */
function isIdSet(id) {
    return isSet(id) && id > 0;
}

function createInventeringNamn(typ, kommun, lan, stift, fritext) {

    var namn = "";
    var skipComma = true;
    namn = addToName(namn, typ, skipComma);
    if (fritext) {
        fritext = fritext.toUpperCase();
    }
    if (kommun != null && kommun != "" && kommun != "null") { // "null"? nåja, det fungerar
        namn = addToName(namn, kommun, skipComma);
        if (kommun != "") {
            skipComma = false;
        }
        namn = addToName(namn, fritext, skipComma);
        if (!skipComma || fritext != "") {
            skipComma = false;
        }
        namn = addToName(namn, lan, skipComma);
        if (!skipComma || lan != "") {
            skipComma = false;
        }
    } else {
        namn = addToName(namn, lan, skipComma);
        if (!skipComma || lan != "") {
            skipComma = false;
        }
        namn = addToName(namn, fritext, skipComma);
        if (!skipComma || fritext != "") {
            skipComma = false;
        }
    }
    namn = addToName(namn, stift, skipComma);
    return namn;
}

function createMiljoNamn(lan, kommun, landskap, socken, fritext) {
    var namn = "";
    var skipComma = true;
    
    // börja med socken och se om det är satt
    if (isSet(socken)) {
    	skipComma = false;
    	namn = addToName(namn, socken, skipComma);
    } else {
    	namn = addToName(namn, kommun, skipComma);
    	if (kommun != "") {
        	skipComma = false;
    	}
    }
    if (fritext) {
    	fritext = fritext.toUpperCase();
    }
	namn = addToName(namn, fritext, skipComma);
	if (fritext != "") {
		skipComma = false;
	}
    namn = addToName(namn, lan, skipComma);
    
    /*
    namn = addToName(namn, lan, skipComma);
    if (lan != "") {
        skipComma = false;
        
        namn = addToName(namn, kommun, skipComma);
    } 
    namn = addToName(namn, landskap, skipComma);
    
    if (landskap && landskap != "") {
        skipComma = false;
        namn = addToName(namn, socken, skipComma);
    }
    namn = addToName(namn, fritext, skipComma);
    */
    return namn;
}

function createAnlaggningNamn(kommun, fastighet, fritext) {
    var namn = "";
    var skipComma = true;
    if (fritext) {
        fritext = fritext.toUpperCase();
    }
    namn = addToName(namn, kommun, skipComma);
    if (kommun != "") {
        skipComma = false;
    }
    namn = addToName(namn, fastighet, skipComma);
    if (!skipComma || fastighet != "") {
        skipComma = false;
    }
    namn = addToName(namn, fritext, skipComma);

    return namn;
}

function addToName(name, toAdd, skipComma) {
    var somethingToAdd = (toAdd && trim(toAdd) != "");
    if (name != null && trim(name) != "" && somethingToAdd) {
        if (!skipComma) {
            name = name + ",";
        }
        name = name + " ";
    }
    if (somethingToAdd) {
        name = name + toAdd;
    }
    return name;
}

function emptyIfNull(str) {
    if (!str || (str == "null")) {
        str = "";
    }
    return str;
}

function createKommun(kommun) {
    kommun = emptyIfNull(kommun);
    if (kommun != "") {
    	kommun = justeraGenitivS(kommun);
    	kommun = addToName(kommun, 'kn', true);
    }
    return kommun;
}

function createLandskap(landskap) {
    
    landskap = emptyIfNull(landskap);
    return landskap;
}


function createSocken(socken) {
    
    socken = emptyIfNull(socken);
    if (socken != null && socken != "") {
        socken = socken + " socken";
    }
    return socken;
}

function createLan(lan) {
    lan = emptyIfNull(lan);
    if (lan != null && lan != "") {
    	/*
           if (lan != "Uppsala" &&
                   lan != "Kalmar" &&
                   lan != "Blekinge" &&
                   lan != "Skåne" &&
                   lan != "Örebro") {
            lan = lan + "s län";
        } else {
            lan = lan + " län";
        }
        */
        lan = justeraGenitivS(lan) + " län";
    }
    return lan;
}

function createStift(stift) {
    if (stift && stift.length > 0) {
        if (stift != "Uppsala" &&
            stift != "Visby" &&
            stift != "Växjö" &&
            stift != "Luleå" &&
            stift != "Skara" &&
            stift != "Strängnäs" &&
            stift != "Västerås") {
            stift = stift + "s stift";
        } else {
            stift = stift + " stift";
        }
    }
    return stift;
}

// Removes leading whitespaces
function LTrim(value) {
    var re = /\s*((\S+\s*)*)/;
    return String(value).replace(re, "$1");
}

// Removes ending whitespaces
function RTrim(value) {
    var re = /((\s*\S+)*)\s*/;
    return String(value).replace(re, "$1");
}

// Removes leading and ending whitespaces
function trim(value) {
    var i;
    var newVal = "";
    value = "" + value; // måste göra om till js-sträng på serverside
    for (i = 0; i < value.length; i++) {
        if (value.charCodeAt(i) == 160) {
            newVal = newVal + " ";
        } else {
            newVal = newVal + value.charAt(i);
        }
    }
    return LTrim(RTrim(newVal)); 
}