function initPNGfix(imgList) {
	if ( $('html').hasClass('msie6') ) {		// execute in ie6 only
		for (x in imgList) {
			if ( imgList[x].length ) {
				DD_belatedPNG.fix(imgList[x]);
			};
			x++;
		}		
	}
}

function boxLink(_target){
	for (i in _target) {
		$(_target[i]).parent('ul').each(function() {
			$(this)
				.find('li')
				.click(function(evt) {
					var _el = $(this).find('h3 a');				
					if ( ( _el.attr('href') != undefined ) && ( evt.target.tagName !== 'EM' && evt.target.parentNode.tagName !== 'A' ) ) {
						evt.preventDefault();
						if ( _el.attr('target') === '_blank' ) {
							window.open(_el.attr('href'), '');						
						} else {
							window.location = _el.attr('href');						
						};						
					};
				});
		});
	};
	return false;	
};

function equaliseColumnHeight(_target,_correction,_class) {
	_target = $(_target);
	var _tallest = 0;
	
	_target.each(function() {
		var _clientHeight = $(this).attr('clientHeight');
		if ( _clientHeight > _tallest ) { _tallest = _clientHeight };		
	});
	
	_tallest = _tallest - parseInt( _target.css(_correction) );

	_target.each(function() {
		$(this).css('height', _tallest+'px');		
	});	
	
	_target.last().addClass(_class);
}

function listFlickerFix() {		
	/* ie6 background image caching/flicker fix
	http://misterpixel.blogspot.com/2006/09/forensic-analysis-of-ie6.html */
	if ( $('html').hasClass('msie6') ) {
		try {
		 document.execCommand('BackgroundImageCache', false, true);
		} catch(e) {};
	}
}

function tabify(targetContainer) {	

    var tabContainers = $(targetContainer + ' .tabContent > .contents');

    function aHide(target) { target.addClass('hidden'); /*target.hide();*/ }
    function aShow(target) { target.removeClass('hidden'); /*target.fadeIn();*/ }

    $(targetContainer + ' ul.tabs a').click(function() {

        aHide(tabContainers);
        aShow(tabContainers.filter(this.hash));

        $(targetContainer + ' ul.tabs a').removeClass('active');
        $(this).addClass('active');

        return false;
    }).filter(':first').click();
	
	$('.jsHidden').addClass('jsHiddenActive'); /* hide the tab headers when JS is enabled */	
}

function getTweets() {
	if( $('#latest-tweets').length ) {
		$('#latest-tweets').tweet({
			join_text: 'auto',
			username: 'casiouk',
			avatar_size: null, //no avatar
			count: 1,
			auto_join_text_default: "we said,",
			auto_join_text_ed: "we",
			auto_join_text_ing: "we were",
			auto_join_text_reply: "we replied",
			auto_join_text_url: "we were checking out",
			loading_text: "loading tweets..."
		  });
	}	
}

function initTextResize() {
	function _trSub(_this,_target,_opposite,_percentage) {
		$('body').css('font-size',_percentage);			
		_this.parent('dd').append('<span title="'+_target+'">'+_target+'</span>');
		_this.remove();
		$('.textSize .'+_opposite).children('span').remove();
		$('.textSize .'+_opposite).append('<a title="'+_opposite+'" href="#">'+_opposite+'</a>');
		
		switch (_target) {
			case 'smaller' : 
				_bindLarger();			
				break;
			case 'larger' :
				_bindSmaller();			
		}
	}

	function _bindSmaller() {
		$('.textSize .smaller a').click(function (evt){
			var _this = $(this);
			evt.preventDefault();
			_trSub(_this, 'smaller', 'larger', '62.5%');
			_setCookie('smaller');
		});		
	}

	function _bindLarger() {
	    $('.textSize .larger a').click(function (evt) {
	        var _this = $(this);
	        evt.preventDefault();
	        _trSub(_this, 'larger', 'smaller', '75%');
	        _setCookie('larger');
	    });
    }

    function _setCookie(currentVal) {
        $.cookie('__CASIO_ED_TS', currentVal, { expires:7, path:'/' });
    }

    function _setDefault() {
        var ts = $.cookie('__CASIO_ED_TS');
        switch (ts) {
            case 'larger':
                $('.textSize .larger a').click();
                break;
            case 'smaller':
                $('.textSize .smaller a').click();
                break;
        };
    }
	
	_bindSmaller();
	_bindLarger();
	_setDefault();
}

function bindLoginPageButtons() {
    if($('#login_Submit').length > 0) {
        var g_targetButton = 'login_Submit';
        $('.jq-loginform input').focus(function () {
            g_targetButton = 'login_Submit';
        });

        $('.jq-registerform input').focus(function () {
            g_targetButton = 'register_Submit';
        });

        $('input').keydown(function (evt) {
            if (evt.keyCode == '13') {
                $('#' + g_targetButton).click();
            }
        });
    }
}

/* tabbed carousel - START */
function setupCarousel(animInterval,advanceInterval) {
    var _interval = setInterval( function() { advanceCarousel(animInterval) }, advanceInterval);
    var _bOver = true;

    $('div.carousel ul.links a').mouseover(function (evt) {
        clearInterval(_interval);
        $(this).parent()
            .siblings().removeClass('active')
        .end()
            .addClass('active');
        activeChanged();
    }).mouseout(function (evt) {
        if (_interval != null) {
            _interval = setInterval( function() { advanceCarousel(animInterval) }, advanceInterval);
        }
    });
}

function activeChanged(animInterval) {
    var d_id = $('div.carousel ul.links li.active a').attr('data-id');
    var a_img = $('div.carousel ul.banners li.jq-carousel-' + d_id + ' a');

    var t = (d_id - 1) * 248;
    $('div.carousel ul.banners').animate({top:-t+'px'}, animInterval);
}

function advanceCarousel(animInterval) {
    var _currentItem = $('div.carousel ul.links li.active');
    $(_currentItem).removeClass('active');

    if ($(_currentItem).next().length > 0) {
        $(_currentItem).next().addClass('active');
    } else {
        $(_currentItem).siblings(':first').addClass('active');
    }

    activeChanged(animInterval);
}
/* tabbed carousel - END */

function reApplyHasLayout(elemList) {
	if ( ($('html').hasClass('msie6')) || ($('html').hasClass('msie7')) ) {		// execute in ie6/7 only
			setTimeout(function() {
				for (x in elemList) {
					if ( elemList[x].length ) {
						$(elemList[x]).css('zoom','0');
						$(elemList[x]).css('zoom','1');
					};
					x++;
				}					
			}, 50)	
		}
}

function initScrollable(s) {
	if ( $('#'+s.carouselId).length > 0 ) {		//don't execute if no matching container present on page
		var carouselId = s.carouselId; 
		var vertical = s.vertical; 
		var circular = s.circular; 
		var fade = s.fade;
		var fadeOver = s.fadeOver;
		var imgWidth = s.imgWidth; 
		var speed = s.speed; 
		var scrollInterval = s.scrollInterval; 
		var fadeInterval = s.fadeInterval;
		var naviPosition = -1;
		var circMod = 0;
		var stepMod = 1;	/* forward by default (1) */
		var naviTheme = s.naviTheme;
		var naviHCenter = s.naviHCenter;
		var naviVCenter = s.naviVCenter;
		
		/* store clicked navigator position */
		$("#"+carouselId+' .navi a').click(function() {	naviPosition = $(this).index();	}); 		
		/* change stepping modifier to negative on backward navigation */
		$("#"+carouselId+' .prev').click(function() { stepMod = -1 }); 
		
		/* add vertical styling class on vertical preset */
		if ( vertical ) { $("#"+carouselId).addClass('verticalPreset') };			
		/* adding modifier in circular mode to correct the slide indexing 
		  (cloned items are being added on circular mode, 
		  so the item indexing is different than expected) */
		if ( circular ) { circMod = 1 };		
		/* cancel speed on fading mode*/
		if ( fade ) { speed = 0 };		
		/* add class on fadeOver mode*/
		if ( fadeOver ) { $("#"+carouselId).addClass('fadeOver') };
		
		$("#"+carouselId+' .naviWrapper').addClass(naviTheme);
		
		/* call scrollable/navigator/autoscroll */
		$("#"+carouselId)
			.scrollable({ 
				circular: circular, 
				touch: false, 
				vertical: vertical,
				speed: speed
				})
			.navigator()
			.autoscroll({ autoplay: true, interval: scrollInterval });		

		/* initialize api */
		var api = $("#"+carouselId).data("scrollable");
		var fadeItem;
		var activeItem;
		var prevActiveItem;
		var carouselImages = $("#"+carouselId+" img");
				
		/* execute fade functions */
		if ( fade ) {
			activeItem = $("#"+carouselId+" .items div").eq(0+circMod);
			activeItem.addClass('active');

			function preSeek(api) {			
				if ( naviPosition < 0 ) {
					var i = api.getIndex();
					
					/* fix the fading of the first item when navigating backwards */
					if ( ( i == -1 ) && ( stepMod == -1 ) ) { stepMod = -2 };
					
					fadeItem = carouselImages.eq(i+circMod+stepMod);
					fadeItem.hide();
					stepMod = 1;	/* reset the backwards modifier */
				} else {
					fadeItem = carouselImages.eq(naviPosition+circMod);
					fadeItem.hide();
				};
			};
			
			function postSeek(api) {
				try{
					try{ prevActiveItem.removeClass('prevActive') } catch(err) {};					
					activeItem.removeClass('active');
					prevActiveItem = activeItem;
					prevActiveItem.addClass('prevActive');
				} catch(err) {};
				activeItem = fadeItem.closest('div');
				activeItem.addClass('active');				
			
				if ( naviPosition < 0 ) {
					fadeItem.fadeIn(fadeInterval);
				} else {
					fadeItem.fadeIn(fadeInterval);
					naviPosition = -1;
				};
			};		
			
			api.onBeforeSeek(function (){ preSeek(api) });
			api.onSeek(function (){ postSeek(api) });		
		} 
		
		/* correct 1px horizontal offset bug (IE) */

		if ( $('html').hasClass('msie') ) {
			api.onSeek(function (){
				var _target = $("#"+carouselId+" .items");
				var posLeft = parseInt( _target.css('left') );
				var modValue = Math.abs( posLeft % imgWidth );
				if ( (modValue) > 0 ) {
					correction = imgWidth - modValue;
					_target.css('left', (posLeft - correction) + 'px' );
				};
			});					
		};
		
		/* fix offset bug / reset the faulty position - START */			

		if ( parseFloat($("#"+carouselId+" .items").css('left')) > -imgWidth ) {
			$("#"+carouselId+" .items").css('left','-'+imgWidth+"px");	
		}
		
		/* fix offset bug / reset the faulty position - END */

		/* calculate navigator positions*/
		
		var _navigator = $("#"+carouselId+' .naviWrapper');
		var _carousel = $("#"+carouselId);
		
		function setNaviPosition(_navigator,_carousel,_naviAttr,_carouselAttr,_naviPosition) {
			var _navigatorValue = _navigator.children('.inner').attr(_naviAttr);
			var _carouselValue = parseInt(_carousel.css(_carouselAttr));
			_navigator.css(_naviPosition,( _carouselValue / 2 - _navigatorValue / 2 ));
		};

		if ( naviHCenter ) {
			setNaviPosition(_navigator,_carousel,'offsetWidth','width','left');	
		};
		if ( naviVCenter ) { 
			setNaviPosition(_navigator,_carousel,'offsetHeight','height','top');
		};
		
	}
}

$(document).ready(function () {

    $('body').addClass('jsEnabled');

    var PNGimageList = [
		'.siteMap',
		'.print',
		'.article h2 .rssFeed',
		'.carousel .links a'
		];
    initPNGfix(PNGimageList);

    var bgiframeList = [
		'.overlaySAMPLE'
	];
    initBgiframe(bgiframeList);

	boxLink([ /* targets */
		'.prodFamily li',
		'.dcList li',
		'.corpPage li',
		'.eduProductList li'
		]); 
	
    listFlickerFix();
	
    // init Uni-Form
    $('form.uniForm').uniform();

    $('a.print').click(function () {
        window.print();
    });

    if ($('html').hasClass('msie6') == false) {
        tabify('.tabBox')
    };
	
    $('.lightBox a').lightBox({imageBtnClose: '/images/lightbox_btnClose.gif'});

    getTweets();

    initTextResize();

    bindLoginPageButtons();

    setupCarousel(600, 7000);

    /* eductation products carousel */
    var scrollableParams = {
        carouselId: 'carousel_edu_products',
        vertical: true,
        circular: true,
        fade: true,
        fadeOver: true,
        imgWidth: 738,
        speed: 400,
        scrollInterval: 7000,
        fadeInterval: 1000,
        naviTheme: 'casioProductsV',
        naviVCenter: true
    }
    initScrollable(scrollableParams);

    /* main products carousel (horizontal) */
    var scrollableParams = {
        carouselId: 'carousel_products',
        vertical: false,
        circular: true,
        fade: false,
        imgWidth: 958,
        speed: 400,
        scrollInterval: 7000,
        fadeInterval: 0,
        naviTheme: 'casioProductsH',
        naviHCenter: false
    }
    initScrollable(scrollableParams);

    var elemList = [
		'.naviWrapper .inner'
	]
    reApplyHasLayout(elemList);
	
	equaliseColumnHeight('.footer-sitemap .level-1 > li','padding-bottom','last-child');		
});

