var page_class = new Class({
	Implements: [Options],
	/* standart egenskap */
	options: {
		under_menu						: null,
		page_path						: []
	},

	sub_menu_hide_delay					: 0,
	sub_menu_page_id                    : 0,

	visible_box_id						: '',
	flash_obj							: null,

	page_laoded	: false,
	dom_ready	: false,

	/* -- constructor -- */
	initialize		: function($options){
		this.setOptions($options);
		window.addEvent('load', this.page_loaded.bind(this));
		window.addEvent('domready', this.dom_ready.bind(this));
		//if (!window['dummy_var'])
		//dummy_var.addEvent('allLoaded', this.allLoaded.bind(this));
	},
	dom_ready: function(){
		this.dom_ready = true;
		if (this.page_laoded == true && this.dom_ready == true){
			this.allLoaded();
			dummy_var.fireEvent('allLoaded');
		}
	},
	page_loaded: function(){
		this.page_laoded = true;
		if (this.page_laoded == true && this.dom_ready == true) {
			this.allLoaded();
			dummy_var.fireEvent('allLoaded');
		}
	},
	allLoaded		: function(){
		//console.log(this.options);
		for (var $i = 0; $i < this.options.page_path.length; $i ++){
			var _$sub_3l_menu = $('sub-3l-'+this.options.page_path[$i].id);
			if (_$sub_3l_menu != null) _$sub_3l_menu.addClass('active');
			var _$sub_2l_menu = $('sub-2l-'+this.options.page_path[$i].id);
			if (_$sub_2l_menu != null) _$sub_2l_menu.addClass('active');
		}
        //Reload the front page every 10 minute. The interval must not be smaler, due to rules by TNS Gallup. See http://www.mediebedriftene.no/novus/upload/file/nettforum/regelverkv20_mvedlegg.pdf
        //This is a feature to increase the number of pageviews, which generates mony for MFK
        // we did it 10.5 min.
        if (EDIT_CORE.page_id == 13) {
            this.track_statistic.periodical(10*60*1000 + 30*1000, this, ['', 'forside-refresh']);
        }
	},
	track_statistic: function($param, $gga_param){
		$href = window.location.href + $param;
        $gga_param = $gga_param || '';
		var sp_e0 = {
			"s":"ntf",
			"cp":"ntf/molde",
			"url": $href
		}
		spring.c(sp_e0);
		piwikTracker.trackPageView($href);
		try {
			//tib_pages_Tracker._trackPageview($href);
			for (var $i = 0; $i < google_trackers.length; $i ++) {
				google_trackers[$i]._trackPageview($href+$gga_param);
			}
		} catch(e){}
	},
	flash_loaded	: function(json){
		var json_obj =  JSON.decode(json);
		this.flash_obj = new page_flash_class({'xml_info' : json_obj, 'flash_id': flash_id});
		if (Browser.Engine.trident){
			this.flash_obj.flash_mover();
		} else {
			flash_ref['onFlashMover'] = this.flash_obj.flash_mover.bind(this.flash_obj);
			flash_ref['onFlashMout'] =  this.flash_obj.flash_mout.bind(this.flash_obj);
		}
		flash_ref['onPicChange'] =  this.flash_obj.switch_pic.bind(this.flash_obj);
	},

	show_page_files: function($link, $size){
		SqueezeBox.fromParams({
			handler			: 'iframe',
			url				: $link,
			iframePreload 	: true,
			size				:{
				x	:$size.x,
				y	:$size.y
			},
			divOptions		:{
			  styles	:{
				  overflow	:'hidden'
			  }
			},
			onClose			:function(){

			}
		});
	}
});



var page_flash_class = new Class({
	Implements: [Options],
	/* standart egenskap */
	options: {


	},

	flash_DOM							: null,
	flash_nx_DOM						: null,
	flash_pr_DOM						: null,
	min_box_size						: {x:0, y:0},


	//text_bg_DOM 						: null,
	//text_lines_array 					: new Array(),
	current_pic							: 0,
	max_text_lines 						: 10,
	total_pic 							: 0,
	current_pic 						: 0,
	locked_pic 							: { '0' : true},


	/* -- constructor -- */
	initialize		: function($options){
		this.setOptions($options);
		this.total_pic = parseInt(this.options.xml_info.totalImg);
		if (this.total_pic > 0){
			this.flash_pr_DOM = $('pr_image_div').getElement('div');
			this.flash_pr_DOM.addEvent('click', this.flash_goto_pr_image.bind(this));
			this.flash_nx_DOM = $('nx_image_div').getElement('div');
			if (Browser.Engine.trident == false){
				this.flash_pr_DOM.setStyles({'display': 'block', 'opacity' : '0.4'});
				this.flash_nx_DOM.setStyles({'display': 'block', 'opacity' : '0.4'});
				$('pr_image_div').setStyles({'display': 'block', 'opacity' : '0.4'});
				$('nx_image_div').setStyles({'display': 'block', 'opacity' : '0.4'});
			} else {
				this.flash_pr_DOM.setStyles({'display': 'block'});
				this.flash_nx_DOM.setStyles({'display': 'block'});
				$('pr_image_div').setStyles({'display': 'block'});
				$('nx_image_div').setStyles({'display': 'block'});
			}
			this.flash_nx_DOM.addEvent('click', this.flash_goto_next_image.bind(this));
		}
		if (EDIT_CORE.page_loaded == 1){
			this.init_flash();
		} else window.addEvent('load', this.init_flash.bind(this));
	},

	init_flash			: function(){
		//alert(this.options.flash_id);
		this.flash_DOM = $(this.options.flash_id);
		this.flash_DOM.set_easing('back.easeOut');
		/*this.text_bg_DOM = $('img_text_wr');
		this.min_box_size = this.text_bg_DOM.getSize();//$$('.hard_field')[0].getSize();

		this.make_line(3, 'img_text_text');
		for (var $i = 0; $i < this.max_text_lines; $i ++){
			this.make_line(1, 'img_text_text');
		}
		this.lay_down_text(this.flash_DOM.get_tag_value(this.current_pic, 'img_text'), this.flash_DOM.get_tag_value(this.current_pic, 'img_link'));
		$('img_text_box').setStyle.delay(500, $('img_text_box'), ['visibility', 'visible']);*/
	},

	flash_goto_pr_image	: function(){
		if (this.flash_DOM.pr_image('fadeOutFadeIn')) {
			if (this.current_pic - 1 > 0) this.switch_pic(this.current_pic - 1);
			else this.switch_pic(0);
		}
	},
	flash_goto_next_image	: function(){
		if (this.flash_DOM.next_image('fadeOutFadeIn')) {
			if (this.current_pic + 1 < this.total_pic) this.switch_pic(this.current_pic + 1);
			else this.switch_pic(0);
		}
	},
	flash_mover	: function(){
		this.flash_pr_DOM.tween('opacity', '1');
		this.flash_nx_DOM.tween('opacity', '1');
	},
	flash_mout	: function(){
		this.flash_pr_DOM.tween('opacity', '0.4');
		this.flash_nx_DOM.tween('opacity', '0.4');
	},

	switch_pic : function (ind){
		if (this.locked_pic[ind] == true) return;
		this.locked_pic[this.current_pic] = false;
		this.locked_pic[ind] = true;
		this.current_pic = ind;
		//this.lay_down_text(this.flash_DOM.get_tag_value(ind, 'img_text'), this.flash_DOM.get_tag_value(ind, 'img_link'));
	},
	goto_pic 	: function (ind){
		if (this.locked_pic[ind] == true) return;
		this.flash_DOM.stop_auto_play();
		this.flash_DOM.set_easing('Quint.easeOut');
		//var _transition_name = 'h_blinds_left';
		//if (ind > this.current_pic) 	_transition_name = 'h_blinds_right';
		if (this.flash_DOM.goto_image(ind)) this.switch_pic(ind);
	},
	make_line	: function ($padding, $class_name){
		var text_cont = $('img_text_wr');
		var padding_div = new Element('div', {'html' : '&nbsp;', styles:{'height': '0px', 'display':'none', 'overflow':'hidden', 'padding-top': $padding+'px'}});
		var text_div = new Element('div', {'class': $class_name});
		var text_div_div = new Element('div');
		text_div_div.inject(text_div);
		padding_div.inject(text_cont);
		text_div.inject(text_cont);
		this.text_lines_array.push({'padding-div': padding_div, 'main':text_div, 'sub':text_div_div});
	},
	lay_down_text	: function (text, link){
		var clean_text = text.replace('<p>', '').replace('</p>', '');
		var lines = clean_text.split('<br />');
		if (lines.length == 1) lines = clean_text.split('<br/>');
		if (lines.length == 1) lines = clean_text.split('<br>');
		if (lines.length == 1) lines = clean_text.split('\n');
		if (lines.length > 1 || clean_text != '') {
			if (this.max_text_lines < lines.length){
				for (var $i = lines.length; $i < lines.length; $i ++){
					make_line(1, 'img_text_text');
				}
				this.max_text_lines = lines.length;
			}
			this.text_bg_DOM.setStyles({'display': 'block'});
			//this.text_bg_DOM.setStyles({'height' : parseInt(this.min_box_size.y) + 'px', 'width': parseInt(this.min_box_size.x)+0+'px'});
		} else {
			//this.text_bg_DOM.setStyle('display','none');
			 this.text_bg_DOM.morph({'height' : parseInt(this.min_box_size.y) + 'px', 'width': parseInt(this.min_box_size.x)+0+'px'});
		}
		var time_offset = 0;
		for (var $i = 0; $i < lines.length || $i < this.text_lines_array.length; $i ++){
			if ($i < lines.length && lines[$i] != ''){
				this.text_lines_array[$i].main.setStyle('display', 'block');
				this.text_lines_array[$i]['padding-div'].setStyle('display', 'block');
				if ($i == 0){
					this.animate_text(lines[$i], this.text_lines_array[$i], $i);
				} else {
					this.text_lines_array[$i].main.setStyles({'width': '1px', 'display':'none'});
					time_offset += lines[$i].length * 25;
					this.animate_text.delay(time_offset, this, [lines[$i], this.text_lines_array[$i], $i]);
				}

			} else {
				this.text_lines_array[$i].main.setStyle('display', 'none');
				this.text_lines_array[$i]['padding-div'].setStyle('display', 'none');
			}
		}
	},
	animate_text	: function (text, text_DOM, $i, link){
		text_DOM.sub.set('html', text);
		text_DOM.sub.setStyles({'opacity': 0, 'display':'block', 'width':'auto', 'visibility':'hidden'});
		text_DOM.main.setStyles({'width': '5000px', 'display':'block', 'opacity': 0, 'overflow' : 'hidden', 'position': 'absolute'});
		var main_text_size = text_DOM.sub.getSize();
		text_DOM.sub.setStyles({'opacity': 1, 'display':'inline', 'width':parseInt(main_text_size.x)+'px', 'visibility':'visible'});
		text_DOM.main.setStyles({'width': '1px', 'display':'block', 'opacity': 1, 'position':'static'});
		var text_bg_DOM_size = this.text_bg_DOM.getSize();
		var new_height = parseInt(text_bg_DOM_size.y) + parseInt(main_text_size.y);
		if ($i == 0) new_height = parseInt(this.min_box_size.y) + parseInt(main_text_size.y);
		this.text_bg_DOM.morph({'height' : new_height+'px', 'width':  (parseInt(this.min_box_size.x) > parseInt(main_text_size.x)?parseInt(this.min_box_size.x):parseInt(main_text_size.x))+'px'});
		text_DOM.main.tween.delay(240, text_DOM.main, ['width', (parseInt(main_text_size.x)) + 'px']);
	},
	fp_menu_text_menu_mover	:function ($elem, ind){
		if (this.locked_pic[ind] == true) return;
		//$elem.morph({'background-position': '0px 0px', 'color' : '#ec7311'});
		//$elem.getElement('span.num').tween( 'color' , '#ec7311');
		//$elem.tween('background-position', '0px 0px');
	},
	fp_menu_text_menu_mout	: function ($elem, ind){
		if (this.locked_pic[ind] == true) return;
		//$elem.morph({'background-position': '0px 40px', 'color' : '#6d6d6d'});
		//$elem.getElement('span.num').tween( 'color' , '#3d3e3e');
		//$elem.tween('background-position', '0px 40px');
	},
	flash_xml_parsed_handler	:function (info_json){
		var param_obj = JSON.decode(info_json);
		total_pic = param_obj.totalImg
		if (doc_loaded == false) lay_text = true;
		//else lay_down_text(flash_DOM.get_tag_value(current_pic, 'img_text'), flash_DOM.get_tag_value(current_pic, 'img_link'));
	}
});

var page_handler = new page_class();
/*var flash_ref = {
	'onXmlParsed' :page_handler.flash_loaded.bind(page_handler)
};*/


/* first attemt to use new overlay box */
var tibe_light_box = new Class({
    Implements: [Options, Events],
    /*Extends: product,*/
    /* standart egenskap */
    options: {
        main_lbox_class: 'lbox-overlay',
        anim_handler: 'static',
        z_index_start: 10000,
        close_content: function(){
            return 'x';
        },
        lb_margin: [10, 40, 40, 10],
        max_lb_size: {'x': 960, 'y': 900}
    },

    /* one time events, makes life easier with removing it from the box*/
    onTimeBeforeClose: function(){},
    onTimeAfterClose: function(){},
    /* status variablese */
    open: false,


    /* box dom list */
    overlay_dom: null,
    lb_dom: null,
    action_dom: null, // top container containing action bottons
    close_bt_dom: null,
    content_cont: null,
    content_wr: null,
    /* -- constructor -- */
    initialize: function($options) {
        this.setOptions($options);
        this.doc = this.options.document || document;
        this.init_dom();
        this.init_coordinates();
    },
    /* init functions */
    init_dom: function(){
        this.overlay_dom = new Element('div', {'id': 'lbox-overlay', 'class': this.options.main_lbox_class, styles:{'z-index':this.options.z_index_start}}).inject(document.body);
        this.lb_dom = new Element('div', {'id': 'lbox-dom', styles:{'z-index':this.options.z_index_start+1}}).inject(document.body);
        this.action_dom = new Element('div', {'id': 'lbox-action'}).inject(this.lb_dom);
        this.init_controls();
        this.content_cont = new Element('div', {'id': 'lbox-content-cont'}).inject(this.lb_dom);
        this.content_wr = new Element('div', {'id': 'lbox-content-wr'}).inject(this.content_cont);
        /* making funciton closures to prevent doing it to often*/
        this.bond = {
            close: this[this.options.anim_handler+ '_close'].bind(this),
            doc_key : this.onKey.bind(this),
            scroll_check: this.isScrollable.bind(this),
            repostition_box: this.position_box.bind(this)
        }
    },
    init_controls: function(){
        this.close_bt_dom = new Element('div', {'class': 'lbox-close-bt', 'html':this.options.close_content()}).inject(this.action_dom);
    },
    init_coordinates: function(){
        var size = this.doc.getSize(), scroll = this.doc.getScroll(), ssize = this.doc.getScrollSize();
        this.overlay_dom.setStyles({
            width: ssize.x + 'px',
            height: (ssize.y - 2) + 'px'
        });
        this.scrollOffset = 0;//this.doc.getWindow().getSize().x - size.x;
        this.hidden_dummy_cont = new Element('div', {styles:{position: 'absolute', 'width': this.options.max_lb_size.x, 'left': '-5000px', 'top':'-5000px', 'opacity': 0, 'visibility': 'hidden'}}).inject(document.body);
        this.dummy_sizer = new Element('div', {'styles': {'float':'left'}}).inject(this.hidden_dummy_cont);
    },
    /* show functions */
    show_lb: function($handler, $params, $main_class){
        this.open = true;
        if ($main_class && $main_class != this.options.main_lbox_class){
            this.overlay_dom.removeClass(this.options.main_lbox_class);
            this.lb_dom.removeClass(this.options.main_lbox_class);
            this.options.main_lbox_class = $main_class;
            this.overlay_dom.addClass(this.options.main_lbox_class);
            this.lb_dom.addClass(this.options.main_lbox_class);
        }
        this[$handler].apply(this, $params);
    },
    /* opening handlers */
    text: function($text, $size){
        this.dummy_sizer.set('html', $text);
        this.size = this.check_size($size);
        this.content_wr.set('html', $text);
        this.static_resize(this.size);
        this[this.options.anim_handler+'_show'].call(this);
    },
    html: function($elem, $size){
        this.dummy_sizer.grab($elem);
        this.size = this.check_size($size);
        this.content_wr.grab($elem);
        this.static_resize(this.size);
        this[this.options.anim_handler+'_show'].call(this);
    },
    iFrame: function($src, $size){
        this.content_wr.set('html', '');
        if (!$size) $size = this.doc.getSize()
        this.iFrameSize_lb = this.check_size($size);
        this.static_resize(this.iFrameSize_lb);
        //this.content_wr.set('html', '&nbsp;');
        this.lb_dom.setStyle('display', 'block');
        var iFrameSize = this.content_wr.getSize();
        this.lb_dom.setStyle('display', '');

        var _laoder = new Element('img', {'class': 'lb-laoder', src:EDIT_CORE.JSSiteRoot + "site/pages/shim.gif"}).inject(document.body);
        this.size = _laoder.getSize();
        this.content_wr.grab(_laoder);
        this.static_resize(this.size);
        //this.content_wr.setStyles({'width': _loader_size.x, 'height': _loader_size.y});
        this[this.options.anim_handler+'_show'].call(this);
       // return;
        //this.last_laoded_iFrame = $src;
        var _f_closure = function(){
            this.loaded_iFrame.destroy();
            this.removeEvent('after-close', _f_closure);
        }.bind(this);
        this.addEvent('after-close', _f_closure);
        //this.content_wr.setStyles
        if (this.loaded_iFrame) this.loaded_iFrame.destroy();
        this.loaded_iFrame = new Element('iFrame', {
            'frameborder': 0,
            styles: {
                'opacity': 0,
                'visible': 'hidden',
                'position': 'absolute',
                'left': '-5000px',
                'top':'-5000px'
            },
            'width': iFrameSize.x,
            'height': iFrameSize.y
        }).inject(this.doc.body);
        var _loaded_f = function(){
            if (this.open == false || this.last_laoded_iFrame != $src) return;
            this.loaded_iFrame.removeProperty('style');
            this.loaded_iFrame.removeEvent('load', _loaded_f);
            this.content_wr.empty();
            this.content_wr.grab(this.loaded_iFrame);
            this.size = this.iFrameSize_lb;
            this[this.options.anim_handler+'_resize'].call(this, this.iFrameSize_lb);
            this.position_box();

        }.bind(this);
        this.loaded_iFrame.addEvent('load', _loaded_f);
        this.loaded_iFrame.setProperty('src',$src);
        this.last_laoded_iFrame = $src;
        //console.log(_tmp);
        /*var _htmlRequest = new Request.HTML({
            url: $link,
            onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript){
                if (this.open == false || this.last_laoded_iFrame != $src) return;
                this.dummy_sizer.set('html', responseHTML);
                this.size = this.check_size($size);
                this[this.options.anim_handler+'_resize'].call(this, this.size);

                this.content_wr.set('html', responseHTML);
                this.position_box();
            }.bind(this)
        }).post();*/
    },
    images: function(){

    },
    ajax: function($link, $size){
        var _laoder = new Element('img', {'class': 'lb-laoder', src:EDIT_CORE.JSSiteRoot + "site/pages/shim.gif"}).inject(document.body);
        this.size = _laoder.getSize();
        this.content_wr.grab(_laoder);
        this.static_resize(this.size);
        //this.content_wr.setStyles({'width': _loader_size.x, 'height': _loader_size.y});
        this[this.options.anim_handler+'_show'].call(this);
        this.last_laoded_ajax = $link;
        var _htmlRequest = new Request.HTML({
            url: $link,
            onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript){
                if (this.open == false || this.last_laoded_ajax != $link) return;
                this.dummy_sizer.set('html', responseHTML);
                this.size = this.check_size($size);
                this[this.options.anim_handler+'_resize'].call(this, this.size);
                this.content_wr.set('html', responseHTML);
                this.position_box();
            }.bind(this)
        }).post();
    },
    /* open functions */
    static_show: function(){
        this.overlay_dom.setStyle('display', 'block');
        this.lb_dom.setStyle('display', 'block');
        this.lb_dom_size = this.lb_dom.getSize();
        //this.scrollOffset = 0;//this.lb_dom_size.x / 2;
        this.position_box();
        this.toogleListeners(1);
        /*try{ Ipad case, not working yet
            var scroller = new TouchScroll(this.content_wr, {elastic: true});
        } catch(e){console.log(e);}*/
    },
    anim_show: function(){
       /* this.overlay_dom.setStyles({
            'opacity': 0,
            'display': 'block'
        });
        this.overlay_dom.tween('opacity', 1);
        this.toogleListeners(1);*/
    },
    /* closing functions */
    static_close: function(){
        this.fireEvent('before-close');
        this.onTimeBeforeClose();
        this.onTimeBeforeClose = function(){};
        this.toogleListeners(0);
        this.open = false;
        this.overlay_dom.setStyle('display', '');
        this.lb_dom.setStyle('display', '');
        this.toogleListeners(0);
        this.content_wr.empty();
        this.fireEvent('after-close');
        this.onTimeAfterClose();
        this.onTimeAfterClose = function(){};
    },
    anim_close: function(){

    },
    /* resizing functions */
    static_resize: function($size){
        this.content_wr.setStyles({'width': $size.x, 'height': $size.y});
    },
    anim_resize: function(){
        //var size = this.doc.getSize(), scroll = this.doc.getScroll(), ssize = this.doc.getScrollSize();
        /*this.overlay_dom.setStyles({
            width: ssize.x + 'px',
            height: (ssize.y - 2) + 'px'
        });*/
    },
    /* utility function */
    check_size: function($size){
        var size = this.doc.getSize(), scroll = this.doc.getScroll(), ssize = this.doc.getScrollSize();
        if (!$size) $size = this.dummy_sizer.getSize();
        if (!$size.y) $size['y'] = this.dummy_sizer.getSize().y;
        if (parseInt($size.y) > parseInt(size.y - this.options.lb_margin[0] - this.options.lb_margin[2])) $size.y = parseInt(size.y - this.options.lb_margin[0] - this.options.lb_margin[2]);
        if (parseInt($size.x) > parseInt(size.x - this.options.lb_margin[1] - this.options.lb_margin[3])) $size.x = parseInt(size.x) - this.options.lb_margin[1] - this.options.lb_margin[3];
        if ($size.x > this.options.max_lb_size.x) $size.x = this.options.max_lb_size.x;
        if ($size.y > this.options.max_lb_size.y) $size.y = this.options.max_lb_size.y;
        return $size;
    },
    position_box: function(){
        var size = this.doc.getSize(), scroll = this.doc.getScroll(), ssize = this.doc.getScrollSize();
        /*this.overlay_dom.setStyles({
            width: ssize.x + 'px',
            height: (ssize.y - 2) + 'px'
        });*/
        var est_top = (scroll.y + (size.y - this.size.y - this.options.lb_margin[0] - this.options.lb_margin[2]) / 2).toInt();
        if (est_top - scroll.y - this.options.lb_margin[0] < 0) {
            est_top = this.options.lb_margin[0];
        }
        var est_left = (scroll.x + (size.x - this.size.x) / 2 - this.options.lb_margin[3]).toInt();
        if (est_left - scroll.x < 0) est_left = (-1)*scroll.x;
        this.lb_dom.setStyles({
            left: est_left + 'px',
            top: est_top + 'px'
        });
    },
    toogleListeners: function(state){
        var fn = (state) ? 'addEvent' : 'removeEvent';
        this.close_bt_dom[fn]('click', this.bond.close);
        this[fn]('force-close', this.bond.close);
        this.overlay_dom[fn]('click', this.bond.close);
        this.doc[fn]('keydown', this.bond.doc_key)[fn]('mousewheel', this.bond.scroll_check);
        this.doc.getWindow()[fn]('resize', this.bond.repostition_box)[fn]('scroll', this.bond.repostition_box);
    },
    onKey: function(e) {
        switch (e.key) {
            case 'esc': this[this.options.anim_handler+ '_close'];
            case 'up': case 'down': return false;
        }
    },
    isScrollable: function(e) {
        return this.lb_dom.hasChild(e.target);
    }
});

var TIBE_lb = null;

function init_TIBE_lb(){
    TIBE_lb = TIBE_lb || new tibe_light_box();
}
// this should be moved out of here leter on in a favor of controling what excecutes when.
window.addEvent('domready', function(){
    init_TIBE_lb();
});
