function json_decode (str_json) {

    var json = this.window.JSON;    if (typeof json === 'object' && typeof json.parse === 'function') {
        try {
            return json.parse(str_json);
        } catch(err) {
            if (!(err instanceof SyntaxError)) {                throw new Error('Unexpected error type in json_decode()');
            }
            this.php_js = this.php_js || {};
            this.php_js.last_error_json = 4; // usable by json_last_error()
            return null;        }
    }

    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
    var j;    var text = str_json;

    if (cx.test(text)) {
        text = text.replace(cx, function (a) {
            return '\\u' +
            ('0000' + a.charCodeAt(0).toString(16)).slice(-4);        });
    }

 if ((/^[\],:{}\s]*$/).
        test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
            replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
            replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {

         j = eval('(' + text + ')');

        return j;
    }
     this.php_js = this.php_js || {};
    this.php_js.last_error_json = 4;
    return null;
}

var loadet_files = {};
$e = document.getElementsByTagName("script");
for(i in $e) { if($e[i].src) { loadet_files[$e[i].src]=true; } }
$e1 = document.getElementsByTagName("link");
for(i in $e1) { if($e1[i].href) { loadet_files[$e1[i].href]=true; } }

function loadjscssfile(filename, filetype){ 
	if(typeof loadet_files[filename] != 'undefined') {
		return;
	}
        var fileref = null;
	if (filetype=="js"){ //if JavaScript
		fileref=document.createElement('script')
		fileref.setAttribute("type","text/javascript")
		fileref.setAttribute("src", filename+'?v='+(new Date).getTime())
	}
	else if (filetype=="css"){ //if CSS
		fileref=document.createElement("link")
		fileref.setAttribute("rel", "stylesheet")
		fileref.setAttribute("type", "text/css")
		fileref.setAttribute("href", filename+'?v='+(new Date).getTime())
	}
	if (fileref!=null) {
		document.getElementsByTagName("head")[0].appendChild(fileref);
		loadet_files[filename] = true;
	}
}

function generateJs(kode, id) {
    
    id = id||false;
    $element = $('#'+id);
    //alert(kode)
    if($element.size()>0) {
        $element.text(kode);
        return;
    } else {
        var $html = '<script type="text/javascript"';
        if(id) {
            $html+= ' id="'+id+'"';
        }
        $html+= '>'+kode+'</script>';

        $('head').append($html.replace(/\n\r/,''));
    }
    /*
    id = id||false;
    var fileref=document.createElement("script");
    fileref.setAttribute("type", "text/javascript");
    if(id) {
       //fileref.setAttribute("id", id);
    }
    $element = $('#'+id);
    if($element.size()>0) {
        $element.text(kode);
        return;
    }
    if(fileref.text) {
        fileref.text = kode;
    } else {
        var newStyle = document.createTextNode(kode);
        fileref.appendChild(newStyle);
    }

    document.getElementsByTagName("head")[0].appendChild(fileref);
    */
}

function generateCss(kode) {
    var fileref=document.createElement("style");
    fileref.setAttribute("type", "text/css");
    //var newStyle = document.createTextNode(kode);
    //fileref.appendChild(newStyle);
    fileref.styleSheet.cssText = kode;
    document.getElementsByTagName("head")[0].appendChild(fileref)
}


getFormValues = function(frm) {
    //alert('1');
    var objForm;
    var submitDisabledElements = false;
    if (arguments.length > 1 && arguments[1] == true)
        submitDisabledElements = true;
    var prefix="";
    if(arguments.length > 2)
        prefix = arguments[2];

    if (typeof(frm) == "string")
        objForm = document.getElementById(frm);
    else
        objForm = frm;
    var sXml = "";
    if (objForm && objForm.tagName == 'FORM')
    {
        var formElements = objForm.elements;
        for( var i=0; i < formElements.length; i++)
        {
            if (!formElements[i].name)
                continue;
            if (formElements[i].name.substring(0, prefix.length) != prefix)
                continue;
            if (formElements[i].type && (formElements[i].type == 'radio' || formElements[i].type == 'checkbox') && formElements[i].checked == false)
                continue;
            if (formElements[i].disabled && formElements[i].disabled == true && submitDisabledElements == false)
                continue;
            var name = formElements[i].name;
            if (name)
            {
                if (sXml != '')
                    sXml = sXml + '&';
                if(formElements[i].type=='select-multiple')
                {
                    for (var j = 0; j < formElements[i].length; j++)
                    {
                        if (formElements[i].options[j].selected == true)
                            sXml = sXml + name+"="+encodeURIComponent(formElements[i].options[j].value)+"&";
                    }
                }
                else
                {
                    sXml = sXml + name + "=" + encodeURIComponent(formElements[i].value);
                }
            }
        }
    }


    return sXml;
}

function submit_form(form, options) {
    options = options || {}
    $val = getFormValues(form)+'&'+WM.param(options);
    WM.post('./',$val+'&RSP=AJAX', function(xmldoc) {
        if(xmldoc.getElementsByTagName("JavaScript")) {
            eval(xmldoc.getElementsByTagName("JavaScript")[0].firstChild.nodeValue);
        }
    });
    return false;
}

function clickLink(url) { 
	WM.post(url,'&RSP=AJAX', function(xmldoc) {
      if(xmldoc.getElementsByTagName("JavaScript")) {
	  eval(xmldoc.getElementsByTagName("JavaScript")[0].firstChild.nodeValue);
      }
  });
  return false;
}

function showElement(element, text) {
	if(typeof text != 'undefined') {
		$(element).fadeIn(500).html(text);
	}
	setTimeout(function() {
		$(element).fadeOut(500);
	},5000);
}

showHide = function(element, callback_open, callback_close) {
	if($(element).is(':visible')) {
		$(element).slideUp(500, (jQuery.isFunction(callback_close) ? callback_close(element) : function() { }));
	} else {
		$(element).slideDown(500, (jQuery.isFunction(callback_open) ? callback_open(element) : function() { }));
	}
	return false;
};

function scrilTo(el, callback) {
	if($(el).size() > 0) {
		$('html, body').animate({scrollTop:$(el).offset().top}, 'slow', (jQuery.isFunction(callback) ? callback(el) : function() { }));
	}
	return false;
}


//notifikations
function WMHumanMessages(msg, title, type, options, callback) {
	$(document).ready(function() {
		function clear_box(time, type) {
	        setTimeout(function() { $('.' + type + '_message_box').fadeOut(300); }, time);
	    }
		if($('.' + type + '_message_box').size() < 1) {
			$('body').append('<div class="' + type + '_message_box"><h4 class="title"></h4><div class="msg"></div></div>');
		}
		$('.' + type + '_message_box .title').css({'text-align':'center'}).html((title||''));
		$('.' + type + '_message_box .msg').css({'text-align':'center'}).html((msg||''));
		def = {
					position: 'fixed',
					//top: '200px',
					left: '25%',
					width: '50%',
					'background': '#000000',
					'-moz-border-radius': '5px',
					'-webkit-border-radius': '5px',
					'opacity': '0.9',
					'border': '1px solid #ffffff',
					'padding': '5px',
					'z-index': '999999',
					'color': '#ffffff'
				 };
		def.top = ( $(window).height() - $('.' + type + '_message_box').height() ) / 2;
		setCss = $.extend(def, (options||{}));
		$('.' + type + '_message_box').css(setCss).fadeIn(500);
		clear_box(10000, type);
		//$(document).mousemove(function() { clear_box(1000, type); });
		
		callback();
	});
}

function success(msg, title, callback) {
	options = {'background': '#006600'};
	if(jQuery.isFunction(callback)) { callback = callback; } else { callback = function() { } };
	return WMHumanMessages(msg, title, 'success', options, callback);
}
function warning(msg, title, callback) {
	options = {'background': '#CCCC00','color': '#000000'};
	if(jQuery.isFunction(callback)) { callback = callback; } else { callback = function() { } };
	return WMHumanMessages(msg, title, 'warning', options, callback);
}
function error(msg, title, callback) {
	options = {'background': '#660800'};
	if(jQuery.isFunction(callback)) { callback = callback; } else { callback = function() { } };
	return WMHumanMessages(msg, title, 'error', options, callback);
}
function info(msg, title, callback) {
	options = {'background': '#00CCFF'};
	if(jQuery.isFunction(callback)) { callback = callback; } else { callback = function() { } };
	return WMHumanMessages(msg, title, 'info', options, callback);
}
