
/**
 * Common js routines.
 *
 * Depends on:
 *      - prototype
 */

MM.util = {
    showLoad: function ( show, c ) {
    	if(c){
    		var elm = c.select("#loadIcon")[0];
    		if(!elm){
    			elm = c.down('img');
    		}
    		if(show){
    			if(elm){
    				elm.show();
    			}
    			
    		}else{
    			if(elm){
    				elm.hide();
    			}
    		} 
    	}
    },
	
	addImagesToggle: function(c){
		var imagesWrappers = c.select('div.resultImages, div.relatedImages');
		if(imagesWrappers){
			imagesWrappers.each(function(imageWrapper){
				var ul = imageWrapper.down('ul');
				if(ul){
					ul.setStyle({display:'none'});
				}
				var link = imageWrapper.down('a');
				if(link){
					Event.observe(link, 'click', function(e){
						var ul = imageWrapper.down('ul');
						if(ul){
							var display = ul.getStyle('display');
							if(!display){
								ul.setStyle({display:'block'});
								link.innerHTML = 'D&ouml;lj relaterade bilder:'
							}
							else{
								if(display == 'block'){
									ul.setStyle({display:'none'});
									link.innerHTML = 'Visa relaterade bilder:'
								}
								else{
									ul.setStyle({display:'block'});
									link.innerHTML = 'D&ouml;lj relaterade bilder:'
								}
							}
						}
						e.preventDefault();
					});
				}
			});
		}
	},

    toHref: function ( url, title) {
        return "<a href='" + url + "'>" + title + "</a>";
    },

    toClassHref: function( url, title, css) {
        return "<a href='" + url + "' class='" + css + "'>" + title + "</a>";
    },

    toSearchParams: function( term ) {
        return "q=" + term;
    },

    toUrlParams: function ( queryString ) {
        queryString = String(queryString).replace("?", "");
        queryString = String(queryString).replace(/\+/g, " ");
        return queryString;
    },

    extractDocumentFields: function( document ) {
        var ret = {};

        document.fields.each(function(field) {
            switch( field.name ) {
                case "title":               ret.title       = field.values; break;
                case "url":                 ret.url         = field.values; break;
                case "content":             ret.content     = field.values; break;
                case "paper":               ret.paper       = field.values; break;
                case "type":                ret.type        = field.values; break;
                case "name":                ret.name        = field.values; break;
                case "display":             ret.display     = field.values; break;
                case "author":              ret.author      = field.values; break;
                case "keyword":             ret.keyword     = field.values; break;
                case "publishdate":         ret.publishdate = field.values; break;
                case "grade":               ret.grade       = field.values; break;
                case "thumbnail":           ret.thumbnail   = field.values; break;
                case "section":             ret.section     = field.values; break;
                case "context":             ret.context     = field.values; break;
                case "geografy":            ret.geography   = field.values; break;
				case "images":              ret.images      = field.values; break;
                default : break;
            }

        });
        return ret;
    },

    assembleMetaData: function ( result ) {
        var meta = {
            hits: result.numberOfHits,
            qtime: result.searchTimeInMillis,
            query: result.query.query
        };

        var suggestions = result.suggestions;

        if (suggestions !== undefined && suggestions !== null && suggestions.collatedSuggestion !== null) {
            meta.suggestion = suggestions.collatedSuggestion.suggestion;
        }
        return meta;
    },

    getUrlParam: function ( name ) {
        name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
        var regexS = "[\\?&]"+name+"=([^&#]*)";
        var regex = new RegExp( regexS );
        var results = regex.exec( window.location.href );
        if( results === null ){  
        	return "";
        }
        else{
        	return results[1];
        }
           
    },

    enableAutocomplete: function (elm) {
		if (elm) {
			jQuery(elm).autocomplete("enableRendering");
		}
    },

    disableAutocomplete: function (elm) {
		if (elm) {
			jQuery(elm).autocomplete("disableRendering");
		}
	
    },
    
    removeHTMLTags: function (html){
    	html = new String(html);
 		var strTagStrippedText = html.replace(/<\/?[^>]+(>|$)/g, "");
 		return strTagStrippedText;
	}	
};


/**
 * Routine to format strings according to
 *      "a string {1} {2}".format("text1", "text");
 * which returns
 *      "a string text 1 text"
 */

String.prototype.format = function() {
    var pattern = /\[\d+\]/g;
    var args = arguments;

    return this.replace(pattern, function(capture){
        return args[capture.match(/\d+/)];
    });
};


/**
 * Routine to replace a string placeholder according to
 *      "text ${key} text".placeholder("val")
 * which returns
 *      "text val text"
 */

String.prototype.placeholder = function( val ) {
    var pattern = /\#\[\w+\]/g;
    return this.replace(pattern, val);
};


/**
 * Routine to replace variable placeholders in a string.
 *
 * The placeholders parameter is the set of valid
 * placeholder key, value matches according to:
 *
 * placeholders = {
 *      query: 'test',
 *      suggestion: 'the suggestion',
 *      key: 'value',
 *      ...
 *      key_n: 'value_n'
 * }
 *
 * Using the above placeholders object, a string like
 * "the query is: ${query}" would become
 * "the query is: test".
 *
 */

String.prototype.replacePlaceholders = function( map ) {
    var pattern = /\#\[\w+\]/g;
    var str = this;
    var placeholders = str.match(pattern);

	if (placeholders === null) {
		return null;
	}
	
    for(var i = 0;i < placeholders.length;i++) {
        var plh = placeholders[i];
        if (typeof plh == "string") {
            var replacement = map[plh.substring(2, plh.length - 1)];
            replacement = new String(replacement).replace(/\u00C3\u00A4/g,"&auml;"); 
            replacement = replacement.replace(/\u00C3\u00A5/g,"&aring;");
            replacement = replacement.replace(/\u00C3\u00B6/g,"&ouml;");
            str = str.replace(plh, replacement);
        } else {
            break;
        }
    }

    return str;
};

var Translation = {
	newsPapersMap : $H({alha: 'Allehanda.se', alltro: 'Allt om roslagen', arbe: 'Arbetarbladet.se',arti: 'Arboga tidning', avti: 'Avesta tidning',babl: 'B&auml;rgslagsbladet',bohu: 'Bohusl&auml;ningen',dasu:'Dagbladet.se',demo:'Demotidningen',esku: 'Eskilstuna-Kuriren',fapo:'Fagersta-Posten',fesp:'Femettan Speedway',fmli:'Familjeliv (GP)',gati:'gavletdiningar.se',geda:'GD.se',gnyb:'G&auml;vle Nyhetsbyr&aring;',gpse:'G&ouml;teborgs-Posten',gpif:'G&ouml;teborgs-Posten(info.gp.se)',gpgf:'G&ouml;teborgs-Posten(graffitit.gp.se)',gppu:'G&ouml;teborgsposten(gppucken.se)',gppo:'G&ouml;teborgs-Posten(gpponnyn.se)',gplu:'G&ouml;teborgs-Posten(goteborgslucia.se)',gplv:'G&ouml;teborgs-Posten(lasvardet.se)',gpgo:'G&ouml;teborgs-Posten(gpgolfen.se)',gtge:'G&auml;vleTidningar',hall:'Hela Halland',hany:'Hallands Nyheter',hapo:'Hallands-Posten',heha:'Helahalsingland.se',ingr:'Ingress',kaku:'Katrineholms-Kuriren',kark:'Karlskoga-Kuriren',laos:'LTZ.se',liti:'Liding&ouml; tidning',ltso:'L&auml;nstidningen S&ouml;dert&auml;lje',meny:'Meny (Nerikes Allehanda)',mvti:'Motala och Vadstena Tidning',neal:'Nerikes Allehanda',nylt:'Nya Lidk&ouml;pings-tidningen',nypo:'Nyn&auml;shmans-Posten',ospo:'OP.se',saal:'Sala Allehanda',span:'Span online (VLT)',sony:'S&ouml;dermanlands Tidning',sopo:'S&ouml;dert&auml;lje-Posten',stnb:'Str&ouml;mstads Tidning',sumo:'Sundsvalls Tidning X (looo.st.nu)',suti:'ST.nu',stungatest:'Unga ST',tdti:'T&auml;by-Danderyd Tidning',tifo:'Tidningen Folket',ttel:'TTELA',valt:'Vestmanlands L&auml;ns Tidning',vast:'Vallentuna-Steget',folk:'Folket',dati:'Dalarnas Tidning'}),
	templateNamesMap: $H({itartcorestandard: 'Artikel',itartcorereview: 'Recension',itartcorefamilyad:'Familjeannons',itartcoreimagealbum:'Bildalbum',itartcoreimagealbumimage:'Bildalbumsbild',itrescoreclip:'TV-klipp',itrescoreimage:'Bild',itartcoremembercontent:'Medlemsartikel',blogposting:'Blogginl&auml;gg',itartcoreevent:'Evenemang',forum:'Forum',thread:'Forumtr&aring;',posting:'Kommentar',forumposting:'Foruminl&auml;gg',itartcorevideopicsearch:'Videoklipp'}),
	
	translateToPaperName: function(arg){
		var name =  this.newsPapersMap.get(arg);
		if(typeof name === 'undefined' || name === null){
			return arg;
		}
		else{
			return name;
		}
	},
	translateToTemplateName: function(arg){
		var tempName = arg;
		tempName = new String(tempName).replace(/\./g,"").toLowerCase();
		var name =  this.templateNamesMap.get(tempName);
		if(typeof name === 'undefined' || name === null){
			return arg;
		}
		else{
			return name;
		}
	},
	
	changeText: function(txt){
		var t = txt.toLowerCase();
		if(t.indexOf('nyast') > -1){
			return 'Senaste f&ouml;rst';
		}
		return txt;
	}
};

