﻿
function FailedCallback (element, contentElement, pleaseWait, stackCounter, result, methodName)
{
	if (element || contentElement)
	{
		var errorElement = $get(element);
		if (contentElement) errorElement = $get(contentElement);
		if (errorElement)
			errorElement.innerHTML = 'Ett fel inträffade. Var god försök igen senare.';
	}
	
	if (pleaseWait)
		Content_Event.fire({type:'please-wait-stop', id:{type:pleaseWait.type, id:stackCounter}});
	
	var error = result.get_exceptionType() + "-- " + result.get_message();
	throw Sys.Net.WebServiceProxy._createFailedError(methodName, String.format(Sys.Res.webServiceFailed, methodName, error));
}


_StackTrace = function _StackTrace() {
    _StackTrace.initializeBase(this);
};

_StackTrace.prototype = {
    _getFunctionName: function _StackTrace$_getFunctionName (theFunction) { 
        if (theFunction.name && theFunction.name.length > 0)
            return theFunction.name;
        var definition = theFunction.toString(); 
        var name = definition.substring(definition.indexOf('function') + 8,definition.indexOf('(')); 
        if (name && name.length > 0) return name;
        return "anonymous"; 
    },

    _getSignature: function _StackTrace$_getSignature(theFunction) {
	    var signature = new Sys.StringBuilder(this._getFunctionName(theFunction));
	    signature.append("(");
	    for(var x=0; x < theFunction.arguments.length; x++) {
			try
			{
			    var nextArgument = theFunction.arguments[x];
			    /*if(nextArgument.length > 64) {
				    nextArgument = nextArgument.substring(0, 64) + "...";
    			}*/
			    signature.append(String.format("'{0}'", nextArgument)); 
    			
				// comma separator
				if (x < theFunction.arguments.length - 1) {
					signature.append(", ");
				}
			}
			catch (e) { }
	    }
	    signature.append(")");
	    return signature.toString();
    },
    
    createStackTrace: function _StackTrace$createStackTrace(startingPoint) {
	    var stackTraceMessage = new Sys.StringBuilder('');
	    var nextCaller = startingPoint;
	    while(nextCaller)
	    {
		    stackTraceMessage.appendLine(this._getSignature(nextCaller));
			nextCaller = nextCaller.caller;
	    }
        stackTraceMessage.appendLine();
        stackTraceMessage.appendLine();
	    return stackTraceMessage.toString();
    }
}
_StackTrace.registerClass("_StackTrace");


Sys.Application.add_init(
    function() { 
        StackTrace = new _StackTrace(); 
    }
);


// skicka mail

function findFields (element)
{
	var hash = {};
	for (var i = 0; i < element.childNodes.length; i++)
	{
		var el = element.childNodes[i];
		if (el.childNodes && el.childNodes.length > 0)
		{
			var ret = findFields(el);
			for (var key in ret) hash[key] = ret[key];
		}
		if (!el || !el.tagName || !el.id) continue;
		var tag = el.tagName.toLowerCase();
		if (tag == 'input' || tag == 'select')
		{
			hash[el.id] = el.value;
		}
		else if (tag == 'textarea')
			hash[el.id] = el.innerHTML;
	}
	return hash;
}

function sendMail (element)
{
	var container = element.parentNode;
	if (!container) return;
	var hash = findFields(container);
	element.disabled = true;
	element.value = element.value + '...';
	alpweb.webservices.UserService.SendMail(hash, function(ret)
	{
		element.value = ret;
	});
}

// history manager


var HistoryManager = {
	ignore:false
};

var bookmarkedState = YAHOO.util.History.getBookmarkedState("a");
var initialState = bookmarkedState || "home";

function stateChanged (state)
{
	if (HistoryManager.ignore) HistoryManager.ignore = false;
	else
	{
		if (state == 'home') Content_Event.fire({type:'start', id:''});
		else
		{
			var cmd = state.split('/')[0];
			var arg = state.split('/')[1];
			Content_Event.fire({type:cmd, id:arg, go:true});
		}
	}
}

YAHOO.util.History.register("a", initialState, stateChanged);

YAHOO.util.History.onReady(function()
{
	var state = YAHOO.util.History.getCurrentState("a");
	Content_Event.fire({type:'start', id:''});
	if (state != 'home')
	{
		//if (document.all)
		{
			var cmd = state.split('/')[0];
			var arg = state.split('/')[1];
			Content_Event.fire({type:cmd, id:arg, go:true});
		}
		//else
		//	window.location = '/';
	}
});

try
{
	YAHOO.util.History.initialize("yui-history-field", "yui-history-iframe");
}
catch (e)
{
	
}

function navigate (cmd, args)
{
	YAHOO.util.History.navigate('a', cmd + '/' + args);
	pageTracker._trackPageview(cmd + '/' + args);
}


// /history manager

Sys.Application.notifyScriptLoaded();