/**
 * Core javascripts for telia.se
 */

/**
 * Core object to use for telia.se
 */
var tse = {};
tse.apply = function(o, c, defaults){
    if(defaults){
        // no "this" reference for friendly out of scope calls
        tse.apply(o, defaults);
    }
    if(o && c && typeof c == 'object'){
        for(var p in c){
            o[p] = c[p];
        }
    }
    return o;
};

/**
 * Apply core methods to lib
 */
(function(){
	tse.apply(tse, {
		namespace: function() {
            var a=arguments, o=null, i, j, d, rt;
            for (i=0; i<a.length; ++i) {
                d=a[i].split(".");
                rt = d[0];
                eval('if (typeof ' + rt + ' == "undefined"){' + rt + ' = {};} o = ' + rt + ';');
                for (j=1; j<d.length; ++j) {
                    o[d[j]]=o[d[j]] || {};
                    o=o[d[j]];
                }
            }
		}
	});
}());


/**
 * Functions below are to be considered as legacy code. 
 */

// Initialize div-elements with class matching 'div.avatar_column' for Avatar (Eva)-column
function initAvatarColumn() {
	// Show div elements with class avatar_column
	var avatarColumnElements = $$('div.avatar_column');
	avatarColumnElements.each(function(node) {
		Element.show(node);
	});
}

// Send request to the large Avatar (Eva), show it, and hide small Avatar (Eva)
// Also hide all other div-elements with class matching 'div.avatar_column'
function avatarQuestion(actionUrl) {
	Element.show('avatar_large');
	Element.hide('avatar_small');
	// Hide div elements with class avatar_column
	var avatarColumnElements = $$('div.avatar_column');
	avatarColumnElements.each(function(node) {
		Element.hide(node);
	});
	
	var p = Form.Element.getValue('avatar_small_q');
    p = p.escapeHTML();
	var src = 'src="'+actionUrl+'?question='+p+'"'; // Do this to prevent IdleSurf to create request
	Element.update('avatar_body','<iframe '+src+' id="avatar_iframe" width="178" height="1000" border="0" frameborder="0"></iframe>');
}
			
// Hides large Avatar (Eva) and show small Avatar (Eva) instead
// Also shows all other div-elements with class matching 'div.avatar_column'
function avatarReset() {
	Element.hide('avatar_large');
	Element.show('avatar_small');
	// Show div elements with class avatar_column
	var avatarColumnElements = $$('div.avatar_column');
	avatarColumnElements.each(function(node) {
		Element.show(node);
	});
	Element.update('avatar_body','');
	if($('avatar_small_q')) {
		$('avatar_small_q').value = '';
	}
}

// Gets element by id
function getDOMObject(documentID){
	if (document.getElementById) {
		return document.getElementById(documentID);
	} else if(document.layers) {
		return document.layers[documentID];
	} else if(document.all) {
		return document.all[documentID];
	} else {
		throw 'Inkompatibel webbläsare!';
	}
}

// Deprecated: Use "Element.toggle('myid1');" instead
function togglehelp(idOfHelpPanel)
{
	helpPanelStyle = document.getElementById(idOfHelpPanel).style;
	if (helpPanelStyle.display == "block")
	{
		helpPanelStyle.display = "none";
	}
	else
	{
		helpPanelStyle.display = "block";
	}
}

// Deprecated: Use 
// Element.hide(elem1) 
// where elemN: element object or id instead
// Hides all arguments and can handle both objects and strings as arguments
function hide() {
	for ( var i=0; i < arguments.length; i++ ) {
		var element = arguments[i];
		if (typeof element == 'string') 
			element = document.getElementById(element);
		element.style.display = 'none';
	}
}

// Deprecated: Use 
// Element.show(elem1) 
// where elemN: element object or id instead
// Shows all arguments and can handle both objects and strings as arguments
function show() {
	for ( var i=0; i < arguments.length; i++ ) {
		var element = arguments[i];
		if (typeof element == 'string') 
			element = document.getElementById(element);
		element.style.display = '';
	}
}

// Returns true if any of the arguments value is not empty, otherwise returns false
// I.e. returns true if at least one argument has a value
// Can take either objects or strings containing the id of the object
function flow_isAnythingFilledIn() {
	for ( var i=0; i < arguments.length; i++ ) {
		var element = arguments[i];
		if (typeof element == 'string') 
			element = document.getElementById(element);
		if (element.value != '') {
			return true;
		}
	}
	return false;
}

// Clears an input field if the value in the field is the same as the title of the field,
// should be called with this as argument.
// Example:
// <input type="text" name="phoneNumber" title="Telefonnummer" value="Telefonnummer" onfocus="javascript:clearInputField(this);">
function clearInputField(inputField) {
    if (inputField.value == inputField.title) { 
	    inputField.value = ''; 
    }
}

// Legacy. Used by /views/view_07.view
function encodeLink( link ) {
	if(link != null) {
		if(link.indexOf('?') > -1) {					
			queryStr = escape(link.substr( 1 + link.lastIndexOf('=')));
			linkStr = link.substr(0, link.lastIndexOf('='));
			return (linkStr + '=' + queryStr);					
		}
	}
}

// Submit form if enter key is pressed 
// method call: submitOnEnter(event, formName, actionOnSubmit);
function submitOnEnter(evt, formName, performedAction) {
	
	if (!evt) {
		evt = window.event;
	}
	// Submit form
	if (evt.keyCode == Event.KEY_RETURN) {
		var myForm = eval("document."+formName);
		if (myForm && myForm.actionId) {
				myForm.actionId.value = performedAction;
				myForm.submit();
		}
		return false;
	}
	return true;
}