/**
 * @author LBi
 * @namespace telenor.main
 */

/* Main JS file
 * Telenor
 * 
 */

/* ========================  ======================== */
/* ------------------------  ------------------------ */
/* ........................  ........................ */



/* ======================== General functions ======================== */



/* ------------------------ set global namespace object ------------------------ */
/** @id globalNamespace 
*/

var telenor = {};


/* ------------------------ get data from classname ------------------------ */
/** @id classData 
*/

jQuery.fn.classData = function(dataType){
	var classString = false;

	this.each(function(){ 
		classString = this.className.split(' ');
		for (var i=0, il=classString.length; i<il; i++) {
			if (classString[i].indexOf('data_'+dataType) >= 0) {
				classString = classString[i].replace('data_'+dataType+'(','').replace(')','');
			}
		}
	});

	return classString;
};


/* ------------------------ respectHeight ------------------------ */
/** @id jQuery.fn.respectHeight  
*/
jQuery.fn.respectHeight = function(authority,maintainHeight){
	var highest;
	if (authority) { // check that element
		highest = jQuery(authority).height();
	}
	else { // make array, check all, find biggest
		highest = new Array();
		if(!maintainHeight && telenor.ie6) { // if downsizing font
			this.each(function(){ jQuery(this).height('auto'); });
		} else if (!maintainHeight) {
			this.each(function(){ jQuery(this).css('min-height',0); });
			
		}
		this.each(function(i){ highest[i] = jQuery(this).height(); });
		highest.sort(function(a, b){return b - a});
		highest = highest[0];
	}
	
	// set all from biggest
	if (telenor.ie6) {
		this.each(function(){ 
			jQuery(this).height(highest);
		});
	} else {
		this.each(function(){ jQuery(this).css('min-height',highest+'px'); });
	}
};


/* ------------------------ convert object tags to iframes (for IE) ------------------------ */
/** @id ie_iFrameBuilder  
*/
function ie_iFrameBuilder(scope) {
	$j('.replace_iframe',scope).each(function(){
		var iframeId, iframeName, iframeClassName;
		
		if (this.id != '') {
			iframeId = ' id="' + $j(this).attr('id') + '"';
		}
		
		if (this.name != '') {
			iframeName = ' name="' + $j(this).attr('name') + '"';
		}
		
		iframeClassName = $j(this).attr('class');
		iframeClassName = iframeClassName.replace('replace_iframe', '');
		if (iframeClassName != '') {
			iframeClassName = ' class="' + iframeClassName + '"';
		}
		
		var iFrameString = '<iframe frameborder="0"' + iframeId + iframeName + iframeClassName + ' src="' + $j(this).attr('data') + '">' + $j(this).html() + '</iframe>';
		$j(this).replaceWith(iFrameString);
	});
}

/* ------------------------ Force IE6 to re-render element ------------------------ */
/** @id ie6forceRendering  
*/
function ie6forceRendering(selector) {
	//$j(selector).css('height','1%');
	//$j(selector).css('height','auto');
}

/* ------------------------ Apply extra wrapping for IE6 on RCB bottom corners ------------------------ */
/** @id ie6FixBottomCorners  
*/
function ie6FixBottomCorners() {
	$j('b.sW').each(function(){
		var xtrabottom = $j(this).parent().css('margin-bottom');
		if (xtrabottom != '' && xtrabottom) {
			$j(this).css('bottom', xtrabottom);
			$j(this).next('b').css('bottom', xtrabottom);
		}
		
		$j(this).parent()
			.wrap('<div class="sys_ieRcbWrap"></div>');
		$j(this).parents('.sys_ieRcbWrap')
			.append('<div class="sys_ieRcb" style="position: relative; z-index: 400; zoom: 1;"></div>')
		
		$j(this).next('b')
			.appendTo($j(this).parents('.sys_ieRcbWrap').children('.sys_ieRcb'));
		$j(this)
			.appendTo($j(this).parents('.sys_ieRcbWrap').children('.sys_ieRcb'));
	});
	
	$j('.colContBtm_sW, .colContBtm_sE').wrapAll('<div style="position: relative; z-index: 400; zoom: 1;"></div>');
}

/* ------------------------ IE 6 check ------------------------ */
/** @id ie6 
*/
if (($j.browser.msie) && (parseInt($j.browser.version) < 7)) {
	telenor.ie6 = true;
}

/* ------------------------ Pseudo-table Menu ------------------------ */
/** @id pseudoTableMenu 
*/
function pseudoTableMenu(selector,parentSelector,fixedTable){
	pseudoObjID = 'sys_pseudoTableMenu';
	var pseudoObjWidth = $j(selector).parents(parentSelector).width();

	var pseudoObjItemPadding = $j(selector).eq(0).css('padding-left');
	var pseudoObjItemBorder = $j(selector).eq(0).css('border-left-width');
	
	var tableLayout = '';
	if (fixedTable) { tableLayout = 'table-layout: fixed;';	}
	
	$j('body').append('<table class="sys_pseudoTableAlign" id="'+pseudoObjID+'" style="width:'+pseudoObjWidth+'px;'+tableLayout+'"><tr></tr></table>');
	
	$j(selector).each(function(){
		$j('#'+pseudoObjID+' tr').append('<td><span class="cloaked" style="padding:'+pseudoObjItemPadding+';border:'+pseudoObjItemBorder+' solid #fff">'+$j(this).html()+'</span></td>');
	});
	
	var pseudoObjItemSpacing = (parseInt(pseudoObjItemPadding) * 2) + (parseInt(pseudoObjItemBorder) * 2);
	$j('#'+pseudoObjID+' td').each(function(i){
		$j(selector).eq(i).width($j(this).width() - pseudoObjItemSpacing);
	});
	
	$j('#'+pseudoObjID).remove(); // removes pseudo element in case the function is called again
}

/* ------------------------ IE6 PNG Image Alpha fix ------------------------ */
/** @id ie6PngImgFix 
*/
function ie6PngImgFix(scope,sizingMethod) {
	if (!sizingMethod) {
		sizingMethod = 'image';
	}
	var filterStart = "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod="+sizingMethod+" src='";
	var filterEnd = "');"
	//alert(filterStart + 'ADRESSEN' + filterEnd);
	$j('img[src$=png]',scope).each(function(){
		if ($j(this).width() != 0) {
			$j(this).replaceWith('<span id="'+this.id+'" class="sys_ie6PngImgFix ' + this.className + '" style="' + filterStart + $j(this).attr('src') + "');" + 'width:' + $j(this).width() + 'px; height:' + $j(this).height() + 'px;"></span>');
		} else {
			$j(this).replaceWith('<span id="'+this.id+'" class="sys_ie6PngImgFix ' + this.className + '" style="' + filterStart + $j(this).attr('src') + "');" + '"></span>');
		}
	});
}


/* ------------------------ semi-fixed scrollable positioning ------------------------ */
/** @id posSemiFixed 
*/
function posSemiFixed(me) {
	if (me.offsetWidth > $j(window).width()) {
		var left = getScrollXY()[0];
	} else {
		//alert($j(window).width() + ' ' + me.offsetWidth);
		var left = ($j(window).width() / 2 ) - (me.offsetWidth / 2) + getScrollXY()[0];
	}
	
	if (me.offsetHeight > $j(window).height()) {
		var top = getScrollXY()[1];
	} else {
		//alert($j(window).height() + ' ' + me.offsetHeight + ' ' + getScrollXY()[1]);
		var top = ($j(window).height() / 2 ) - (me.offsetHeight / 2) + getScrollXY()[1];
	}
	
	//alert(left + ' / ' + top);
	
	me.style.left = left + 'px';
	me.style.top = top + 'px';
}

/* ------------------------ Get scrolled distance ------------------------ */
/** @id getScrollXY 
*/
function getScrollXY() {
	var scrOfX = 0, scrOfY = 0;
	if( typeof( window.pageYOffset ) == 'number' ) { //Netscape compliant
		scrOfY = window.pageYOffset;
		scrOfX = window.pageXOffset;
	} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) { //DOM compliant
		scrOfY = document.body.scrollTop;
		scrOfX = document.body.scrollLeft;
	} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) { //IE6 standards compliant mode
		scrOfY = document.documentElement.scrollTop;
		scrOfX = document.documentElement.scrollLeft;
	}
	return [ scrOfX, scrOfY ];
}

/* ======================== Form validation and control ======================== */



/* ------------------------ Replace inputs/buttons with links ------------------------ */
/** @id replace_btns  
*/
function replace_btns(selector) {
	$j(selector).each(function(){
		$j(this).after('<a href="#" class="genBtn '+this.className+'"><span>' + $j(this).val() + '</span></a>');
		if ($j.browser.msie) {
			$j(this).css('width','0');
		} else {
			$j(this).hide();
		}
		
	});
}

/* ------------------------ Selectbox Auto Post ------------------------ */
/** @id selectboxAutoPost 
*/
function init_selectboxAutoPost() {
	var userAgent = navigator.userAgent;
	var uACheck = userAgent.match('AppleWebKit');
	
	$j('.replace_select').hide(); // hide the submit buttons
	
	$j('.form_selectAutoPost').each(function(){ // assign events on select boxes
		var selectBox = this;
		if (uACheck != null) {
			selectBox.onchange = selectChangedSafari;
		} else {
			selectBox.changed = false;
			selectBox.onfocus = selectFocused;
			selectBox.onchange = selectChanged;
			selectBox.onkeydown = selectKeyed;
			selectBox.onclick = selectClicked;
		}
	});
	return true;
}


function selectChangedSafari() {
	$j(this).trigger('selectAction'); // trigger action of selectbox
}


function selectChanged(theElement) {
	var theSelect;
	if (theElement && theElement.value) {
		theSelect = theElement;
	} else {
		theSelect = this;
	}
	if (!theSelect.changed) {
		return false;
	}
	$j(this).trigger('selectAction'); // trigger action of selectbox
	return true;
}


function selectClicked() {
	this.changed = true;
}


function selectFocused() {
	this.initValue = this.value;
	return true;
}


function selectKeyed(e) {
	var theEvent;
	var keyCodeTab = "9";
	var keyCodeEnter = "13";
	var keyCodeEsc = "27";
	
	if (e) {
		theEvent = e;
	} else {
		theEvent = event;
	}
	
	if (theEvent.keyCode == keyCodeEnter) {
		this.changed = true;
		selectChanged(this);
	} else if (theEvent.keyCode == keyCodeEsc) {
		this.value = this.initValue;
	} else {
		this.changed = false;
		
	}
	return true;
}


/* ======================== Debugging ======================== */
/** @id debug 
*/
function debug() {
	if( arguments.length > 0 ) {
		var strs = [];
		
		for( var i=0; i < arguments.length; i++ )
			strs.push(arguments[i]);
		
		var area = document.getElementById("debug");
		
		if( !area ) {
			area = document.createElement("div")
			area.id = "debug";
			area.style["zIndex"] = "10000";
			
			document.body.appendChild(area);
		}
		
		var txt = document.createElement("div");
			txt.innerHTML = strs.join(" :: ");
			txt.className = "entry";
			
		area.appendChild(txt);
		area.scrollTop = area.scrollHeight;
	}
}

/* ======================== fontSizeDependendent ======================== */
/** @id fontSizeDependendent 
*/
function fontSizeDependendent(){
	$j('#nav_level1 li a').respectHeight();

	$j('.content_standard').each(function(i){
		$j('.content_standard:eq('+i+') .rcbContent').respectHeight();
		$j('.content_standard:eq('+i+') .rcbHeader').respectHeight();
	});
	
	$j('.content_fullTotal_four').each(function(i){
		$j('.content_fullTotal_four:eq('+i+') .rcbContent').respectHeight();
		$j('.content_fullTotal_four:eq('+i+') .rcbHeader').respectHeight();
	});
	
	$j('.module_tab4col').each(function(i){
		$j('.module_tab4col:eq('+i+') .tabContentItem').respectHeight();
	});
}

/* ======================== Page DOM Loaded ======================== */
/** @id pageDomLoaded  
*/
$j(document).ready(function(){
	
	$j('.body_sI1').addClass('sys_jsActive'); // for Javascript-dependent CSS 
	
	/* ------------------------ Bind events ------------------------ */
	$j(window).bind('fontResize', function(){
		fontSizeDependendent();
	});
	
	$j('input[type=text], input[type=password]')
		.focus(function(){
			$j(this).addClass('form_selected');
		})
		.blur(function(){
			$j(this).removeClass('form_selected');
		});
	
	/* ------------------------ zebra styling ------------------------ */
	$j('#footer table tr:even').addClass('style_zebra');
	
	
	/* ------------------------ sIFR ------------------------ */
	if(typeof sIFR == "function"){	
	    sIFR.replaceElement("h1", named({sFlashSrc: "flash/sifr_telenor.swf", sColor: "#0099ff", sWmode: 'opaque'}));
	}
	
	
	/* ------------------------ replace form elements ------------------------ */
	
	replace_btns('.enhance_btn');
	
	init_selectboxAutoPost();
	
	/* ------------------------ misc ------------------------ */
	
	if (($j.browser.msie) && (parseInt($j.browser.version) < 8)) {
		pseudoTableMenu($j('#nav_level1 .sI1 a'),'ul');
		if (telenor.ie6) {
			ie6forceRendering('#nav_level1 .sI1');
		}
	}
	
	fontSizeDependendent();
	
	if (telenor.ie6) {
		$j('#tmpl_home_consumer .contentSection .rcb').each(function(){
			ie6forceRendering(this);
		});
	}
	
	if (telenor.ie6) {
		ie6PngImgFix(); // convert PNG images to IE filter-fixed spans
	}
	
	if (($j.browser.mozilla ) && (parseInt($j.browser.version) < 3)) {
		$j('.body_sI1').addClass('sys_FF3plus'); // for Firefox 3+ fixes 
	}
	
	$j('.form_autocompleteOff').attr('autocomplete','off');
	
	if (($j.browser.msie) && (parseInt($j.browser.version) < 8)) {
		ie_iFrameBuilder();
	}
	
	
	/* ------------------------ ie6FixBottomCorners ------------------------ */
	
	if (telenor.ie6) {
		ie6FixBottomCorners();
	}
	
});



/* ======================== Page Content Loaded ======================== */
/** @id pageContentLoaded  
*/
$j(window).load(function(){

});

