(function($){
    $.pageslider = function(el, options){
        // To avoid scope issues, use 'base' instead of 'this'
        // to reference this class from internal events and functions.
        var base = this;
        
		
		base.log = function(msg){
			if(!$.browser.msie)
				console.log(msg);
		}
        // Access to jQuery and DOM versions of element
        base.$el = $(el);
        base.el = el;
		//pageWidth = 672;
		pageWidth = 722; /* last minute change from client */ 
		base.options = $.extend({},$.pageslider.defaultOptions, options);
		var container = $('.'+base.options.container , base.el) , pageClass = base.options.pageClass , totalChildren = container.children().size() , totalContainerWidth = totalChildren*pageWidth , pages = base.options.pages , siteNavigation = base.options.navigation , current = base.options.currentClass , next = base.options.nextClass , speed =  base.options.speed , easing = base.options.easing , loader = base.options.loader , urlPage = base.options.urlPage;
		var animationFlag = true , activePage = '' , getFields = '' , directPageLoad = false , pageDocument = $(document);
		var	fixedElementHeight =106;
		//pageWidth =  container.children('.'+pageClass).width()
		
		container.width(pageWidth);
		var arrowsetup = false , navsetup = false , logoclick = false;
       // base.log(pageWidth+"  "+container.width());
        // Add a reverse reference to the DOM object
        base.$el.data("pageslider", base);

        var loader = (function () {
	        var elem = $("header .loader");
	        elem.hide();

	        return {
		        start: function () {
		        	elem.show();
		        },
		        stop: function () {
		        	elem.hide();
		        }
		    };
	    }());
		
		base.cleanUp = function(){
			$('.map_id').remove();
			$('#lat').remove();
			$('#lng').remove();
			$('#video_path').remove();			
			if(activePageObj.name != 'hem'){
				//base.log(activePageObj.name);
				//$('#jw_video_wrapper').remove();
				$('#jw_video_wrapper').attr('id' , '');
				$('#jw_video').attr('name' , '');
				$('#jw_video').attr('id' , '');
			}
		};
        
        base.init = function(){
            container.css({ 'left' : 0 , 'width' : pageWidth});
			
            // Put your initialization code here
			
			$('.logo').live('click' , function(event){
				event.preventDefault();
				event.stopPropagation();
				if(!logoclick)
				{
					logoclick = true;
					$(document.body).focus();
					loader.start();
					base.logo();
					return false;
				}
			});
			
			$('.next-page').live('click' , function(){
				loader.start();
				base.arrowClick();
			});
			
			$('.nav-page a').live('click' , function(event){								
				event.preventDefault();
				event.stopPropagation();
				loader.start();
				base.navigationClick($(this));
			});
			
			
			$('.newslist').live('click' , function(event){								
				event.preventDefault();
				loader.start();
				base.setup('newslist');				
				return false;
			});
			
			$('.newsyear , .back-to-news').live('click' , function(event){
				event.preventDefault();
				loader.start();
				var year = $(this).attr('id');				
				var pageObj = pages['newslist'];
				var back = $(this).hasClass("slider-back");
				pageObj.getParams = 'year='+year;
				base.setup('newslist', back);
				return false;
			});
			
			$('.back-to-career').live('click' , function(event){
				event.preventDefault();
				loader.start();
				var back = $(this).hasClass("slider-back");
				base.setup('career', back);
			});			
			
			
			$('.ideology-text').live('click' , function(event){
				event.preventDefault();
				loader.start();
				base.setup('ideology-text');
			});
			
			$('.newsdetails').live('click' , function(event){				
				event.preventDefault();								
				loader.start();
				var pageObj = pages['newsdetails'];
				var domain = '';
				if($.browser.msie && $.browser.version == '7.0')
				{					
					domain = window.location.protocol+"//"+window.location.hostname+"/";
				}
				var newsname = $(this).attr('href').replace(domain+""+pageObj.userFriendlyUrl+"/" , '');								
				pageObj.page = pageObj.page+"/"+newsname;
				pageObj.userFriendlyParm = "/"+newsname;
				base.setup('newsdetails');
				return false;
			});
			
			$('.vaccancy-list li').live('click' , function(event){
				event.preventDefault();
				loader.start();
				var id = $(this).attr('id').substring(9);
				var vname = $(this).children('.vaccancy-name').val();
				var pageObj = pages['application'];
				//pageObj.getParams = "id="+id;			
				//base.log(vname)
				pageObj.page = pageObj.page+"/"+vname;								
				pageObj.userFriendlyParm = "/"+vname
				base.setup('application');
			});
			
			$('.news-list li').live('click' , function(event){
				event.preventDefault();
				loader.start();
				var newsname = $(this).children('.newsname').val();
				var pageObj = pages['newsdetails'];
				pageObj.page = pageObj.page+"/"+newsname;
				pageObj.userFriendlyParm = "/"+newsname;
				base.setup('newsdetails');
			});
			
			$('.search-submit').live('click' , function(event){						
				event.preventDefault();
				loader.start();
				base.submitSearch($(this));
			});
			
			$('.ideology').live('click' , function(event){
				event.preventDefault();
				loader.start();
				var back = $(this).hasClass("slider-back");
				base.setup('ideology', back)
			});
			
			$('#search-field').live('keyup' , function(event){
				event.preventDefault();
				event.stopImmediatePropagation();
				var code = (event.keyCode ? event.keyCode : event.which);
				if(code == 13) { //Enter keycode										
				   //base.submitSearch($(this));
					//return false;
					$('.search-submit').trigger('click');
					return false;
				}
				
			});
			
			$('.search-link').live('click' ,function(event){
				event.preventDefault();
				loader.start();
				var domain = window.location.protocol+"//"+window.location.hostname+"/";
				if($.browser.msie && $.browser.version == '7.0'){
					var href = $(this).attr('href').replace(domain , '');
				}
				else
				{
					var href = $(this).attr('href');
				}
				//var href = $(this).attr('href');
				var url = $(this).attr('url');
				var pagename = '';
				for(page in pages){
					if(jQuery.trim(url) == ''){		
						
						if(href == pages[page].userFriendlyUrl+"/" || href == pages[page].userFriendlyUrl){
							pagename = pages[page].name;							
						}
					}
					else{
						if(url == pages[page].userFriendlyUrl){
							var tmp = pages[page].userFriendlyUrl;							
							pagename = pages[page].name;
							var param = href.replace(tmp , '')
							if(jQuery.trim(param) != '')
							{
								pages[page].userFriendlyParm = param;
								pages[page].page = pages[page].page+""+param;
							}						
						}
					}
				}
				if(pagename != ''){
					var linkName = (pages[pagename].parentPage) ? pages[pagename].parentPage : pagename;					
					$('.'+siteNavigation).children().find('.active').removeClass('active');
					$('.'+siteNavigation).children().find('.'+linkName).addClass('active');
					base.setup(pagename);
				}
				//base.log("Final Output : "+param+"  "+pagename);
			})
			
			if(window.location.hash != ''){
				if(urlPage == 'newslist')
				{
					var link = window.location.hash.replace('#' , '');				
					var param = link.replace(pages['newslist'].userFriendlyUrl , '');				
					if(jQuery.trim(param) != '')
					{
						pages['newslist'].getParams = 'year='+param;
					}				
				}
				
				if(urlPage == 'newsdetails')
				{
					var link = window.location.hash.replace('#' , '');				
					var param = link.replace(pages['newsdetails'].userFriendlyUrl , '');											
					if(jQuery.trim(param) != '')
					{
						pages['newsdetails'].userFriendlyParm = param;
						pages['newsdetails'].page = pages['newsdetails'].page+""+param;
					}				
				}
				
				if(urlPage == 'application')
				{
					var link = window.location.hash.replace('#' , '');				
					var param = link.replace(pages['application'].userFriendlyUrl , '');				
					if(jQuery.trim(param) != '')
					{
						pages['application'].userFriendlyParm = param;
						pages['application'].page = pages['application'].page+""+param;
					}				
				}
				directPageLoad = true;
				base.setup(urlPage);
			}
        };
		
		
		
		base.submitSearch = function(search){
			if(search.attr('class') == 'search-submit'){
				var query = search.siblings('.search-field').val();								
			}
			else{
				var query = search.val();
			}			
				if(query != 'search'){
					var pageObj = pages['search'];
					pageObj.getParams = 'query='+query;
					base.setup('search')
				} else {
					loader.stop();
				}
		};
		
		base.logo = function(){
			$('.'+siteNavigation).children().find('.active').removeClass('active');
			$('.'+siteNavigation).children().find(':first').addClass('active');
			base.setup('hem');
		};
		
		base.arrowClick = function(){
			arrowsetup = true, navsetup = false;
			var nextPage = $('.'+siteNavigation).children().find('.active').next();				
			if(nextPage.length != 0)
			{				
				className = $('.'+siteNavigation).children().find('.active').next().attr('class').split(' ');
				base.setup(className[0]);
			}
			else
			{	
				base.setup('hem');
			}
		};
		
		base.navigationClick = function(nav){
			navsetup = true, arrowsetup = false;
			$('ul' , '.'+siteNavigation).children().removeClass('active');
			className = nav.parent().attr('class').split(' ');			
			nav.parent().addClass('active');					
			base.setup(className[0]);

		};
		
		base.setup = function(className, back){	
			for(var p in pages)
			{				
				if(p == className){
					window.location.hash = '';
					ajaxUrl = pages[p].page;
					ajaxUrl = ajaxUrl+"?time="+(new Date()).getTime()+"&"+pages[p].getParams;
					activePage = p;
					activePageObj = pages[p];		
					//base.log(activePageObj);					
					$('.next-page').die('click');
					$('.nav-page a').die('click');	
					$('.search-submit').die('click');
					//$('.logo').unbind('click');
					userUrl = activePageObj.userFriendlyUrl+""+activePageObj.userFriendlyParm;										
					window.location.hash = userUrl;
					if(animationFlag)
					{							
						base.prepareSlide(ajaxUrl, back);	
					}
					else
					{							
						$('ul' , '.'+siteNavigation).children('.'+className).addClass('active');								
						var element = container.children('.'+current);						
						base.ajax(ajaxUrl ,  element, back);						
						animationFlag = true;
					}
				}
			}
		};		
	
		
		
		base.prepareSlide = function(ajaxUrl, back){
			if (back) {
				container.children('.'+current).before('<div class="page-content '+next+'" style="margin-left: -'+pageWidth+'px"></div>');
			} else {
				container.children('.'+current).after('<div class="page-content '+next+'"></div>');
			}
			var element = container.children('.'+next);						
			base.ajax(ajaxUrl , element, back)
		};	

		base.animate =  function(element, back){
			var newPageWidth = container.width() + pageWidth;
			container.css({ 'width' : newPageWidth});
			jQuery.fx.interval = base.options.frameRate;
			var offset = back ? 0 : -(newPageWidth - pageWidth);
			var elem = back ? element : container;
			var props = {};
			props[back ? 'margin-left' : 'left'] = offset;
			elem.animate(props, speed , easing , function(){
				if (back) {
					container.css({ width: container.width() - pageWidth });
				}
				if(arrowsetup)
				{
					var nextElement = $('li.active' , '.'+siteNavigation).next();				
					$('li.active' , '.'+siteNavigation).removeClass('active');					
					if(nextElement.length != 0)
					{					
						nextElement.addClass('active');
					}
					else
					{
						$('ul' , '.'+siteNavigation).children(':first').addClass('active');
					}
				}
				
				if(directPageLoad){
					var activeClassName = (activePageObj.parentPage == undefined) ? activePageObj.name : activePageObj.parentPage;
					$('li.active' , '.'+siteNavigation).removeClass('active');
					$('li.'+activeClassName , '.'+siteNavigation).addClass('active');
				}
				//base.ajax(ajaxUrl ,  element);
				var prevPage = back ? container.children('.'+current).next() : container.children('.'+current).prev();
				prevPage.css({'height' : '100px'}); //This is to solve the scrollbar issue 
				prevPage.html(''); // This is testing to see if remvoing the elements from container will help to smooth the animation
				directPageLoad = false;
				arrowsetup = false;
				logoclick = false;
				base.cleanUp();
				loader.stop();
			});
		};
		
		base.ajax = function(ajaxUrl, element, back){			
			if(!activePageObj.loaded || activePageObj.required)
			{
				//console.log($.browser.version);
				$.get(ajaxUrl , function(data){		
					if(activePageObj.loaded){
						var id = activePageObj.id;						
						$('#'+id).attr('id' , '');						
					}
					(element.attr('id') =='' || element.attr('id') == undefined) ? element.attr('id' , activePageObj.id) : '' ;
					if($.browser.msie && $.browser.version != '9.0')
					{
						element.html(innerShiv(jQuery.trim(data)));
					}
					else
					{						
						element.html(data);
					}					
						container.children('.'+current).removeClass(current);
						container.children('.'+next).removeClass(next).addClass(current);
					
					getFields = '';			
					base.pageSpecificInitialization(activePageObj.name);					
					base.animate(element, back);
					activePageObj.loaded = true;
					
				});
			}
			else
			{
				element.css({ 'background' : 'none' , 'height' : 'auto'});
				var id = activePageObj.id;
				var oldHtml = $('#'+id).html();
				//$('#'+id).html('');
				$('#'+id).attr('id' , '');	
				if($.browser.msie)
				{				
					element.html(innerShiv(oldHtml));				
				}
				else
				{
					element.html(oldHtml);				
				}
				(element.attr('id') =='' || element.attr('id') == undefined) ? element.attr('id' , activePageObj.id) : '' ;
				//container.children('.'+current).css({ 'overflow-y' : 'hidden'});
				container.children('.'+current).removeClass(current);
				container.children('.'+next).removeClass(next).addClass(current);
				getFields = '';				
				base.animate(element, back);
				base.pageSpecificInitialization(activePageObj.name); 
				
			}
			
		};
		
		base.pageSpecificInitialization = function(page){			
			//base.log(jwvideo_obj);			
			if(!$.browser.msie){
				var pageTitle = jQuery.trim($('.'+current+' .seo-container .page-title').html());
				var pageDescription = jQuery.trim($('.'+current+' .seo-container .page-description').html());
				var pageKeywords = jQuery.trim($('.'+current+' .seo-container .page-keywords').html());
				//pageDocument.title = pageTitle;
				//$('title' , pageDocument).html(pageTitle);
				pageDocument.title = pageTitle;
				$('meta[name=description]').attr('content' , pageDescription);
				$('meta[name=keywords]').attr('content' , pageKeywords);
			}
			
			if(jwvideo_obj != ''){
				//jwvideo_obj.stop();
				//jwvideo_obj.remove();
				//jwvideo_obj = '';
			}

			if(page == 'hem')
			{
				$('.slides').slides({
					preload: false,				
					play: 5000,
					pause: 2500,
					pagination : false,
					generatePagination : false,
					hoverPause: true
				});
				
				if($('#home-page-obj-type').val() == 'video')
				{  
				    var videoPath = $('.current-page #home_video_path').val();				
					var previewImage = $('.current-page #home_preview_image').val();
					var time = $('.current-page #home_time').val();
					
				    /*jwvideo_obj = jwplayer("jw_video_"+time).setup({ autostart: false, controlbar: "none", file: "/"+videoPath, image : '/'+previewImage ,flashplayer: "/jwplayer/player.swf", volume: 80, width: 672 , height: 398 });*/
				    videoPath = videoPath.substr(0, 1) === "/" ? videoPath : "/" + videoPath;
					//jwvideo_obj = jwplayer("jw_video_"+time).setup({ autostart: false, screencolor : 'FFFFFF' , controlbar: "none", file: videoPath, image : '/'+previewImage , volume: 80, width: 673 , height: 396 , modes :[ {type : "html5"}, {type : "flash" , 'src' : "/jwplayer/player.swf"}] });
					jwvideo_obj = jwplayer("jw_video_"+time).setup({ autostart: false, screencolor : 'FFFFFF' , stretching : 'fill' , controlbar: "none", file: videoPath, image : '/'+previewImage , volume: 80, width: 672 , height: 396 , modes :[ {type : "html5"}, {type : "flash" , 'src' : "/jwplayer/player.swf"}] });
					
				}
			}
			
			if(page == 'ideology')
			{					
				var videoPath = $('.current-page #video_path').val();	
				var ideology_time = $('.current-page #ideology_jwplayer_time').val();				
				var ideology_preview =  $('.current-page #ideology_preview').val();			
				/*jwvideo_obj = jwplayer("ideology_jwplayer_"+ideology_time).setup({ autostart: false, controlbar: "none", file: '/'+videoPath, image : '/'+ideology_preview , flashplayer: "/jwplayer/player.swf", volume: 80, width: 639 , height: 480 });*/
				/*jwvideo_obj = jwplayer("ideology_jwplayer_"+ideology_time).setup({ autostart: false, controlbar: "none", file: '/'+videoPath, image : '/'+ideology_preview , flashplayer: "/jwplayer/player.swf", volume: 80, width: 672 , height: 398 });*/
				/*jwvideo_obj = jwplayer("ideology_jwplayer_"+ideology_time).setup({ autostart: false, controlbar: "none", file: videoPath, image : '/'+ideology_preview , flashplayer: "/jwplayer/player.swf", volume: 80, width: 672 , height: 398 });*/
				videoPath = videoPath.substr(0, 1) === "/" ? videoPath : "/" + videoPath;
				//jwvideo_obj = jwplayer("ideology_jwplayer_"+ideology_time).setup({ autostart: false, screencolor : 'FFFFFF' , controlbar: "none", file: videoPath, image : '/'+ideology_preview , volume: 80, width: 674 , height: 396 , modes :[ {type : "html5"}, {type : "flash" , 'src' : "/jwplayer/player.swf"}] });
				jwvideo_obj = jwplayer("ideology_jwplayer_"+ideology_time).setup({ autostart: false, screencolor : 'FFFFFF' , stretching : 'fill' ,  controlbar: "none", file: videoPath, image : '/'+ideology_preview , volume: 80, width: 672 , height: 396 , modes :[ {type : "html5"}, {type : "flash" , 'src' : "/jwplayer/player.swf"}] });
			}
			
			if(page == 'contact')
			{
				var lat = $('.current-page #lat').val();
				var lng = $('.current-page #lng').val();
				var time = $('.current-page .timestamp').val();
				var dst = $('.current-page .dst').val();
				
				/*var latlng = new google.maps.LatLng(lat , lng);
				var options = {
					zoom: 9,
					center: latlng,
					mapTypeId: google.maps.MapTypeId.ROADMAP
				};
				var map = new google.maps.Map(document.getElementById('map-'+time) , options);				
				var marker = new google.maps.Marker({
					position: latlng,
					map : map
				});	*/			
				starttimeanimator();
				var intr = setTimeout(function(){					
					timeAnimator(parseInt(time*1000) , dst);
				} , 1000);				
				setTimeInterval(intr);
			}
			
			if(page == 'application'){
				$('.current-page .application-form').attr('target' , 'application-iframe');
			}
			
			if(page == 'application'){
				$('.current-page .application-form').attr('target' , 'application-iframe');
			}
			$('.next-page').live('click' , function(){
				loader.start();
				base.arrowClick($(this));
			});
			$('.nav-page a').live('click' , function(event){
				event.preventDefault();
				event.stopPropagation();
				$(document.body).focus();
				loader.start();
				base.navigationClick($(this));
			});
			
			$('.search-submit').live('click' , function(event){
				event.preventDefault();
				loader.start();
				base.submitSearch($(this));
			});
			
			/*$('.logo').bind('click' , function(){
				base.logo();
			});*/			
			
			
			var contentHeight = $('.'+current).height() + fixedElementHeight;
			var windowHeight = $(window).height();
			var diff = windowHeight - contentHeight;			
			if(diff >= 0){				
				$('body').css({'overflow-y' : 'scroll'});	
			}
			else
			{
				$('body').css({'overflow-y' : 'visible'});			
			}
		}
		
		
        
        // Sample Function, Uncomment to use
        // base.functionName = function(paramaters){
        // 
        // };
        
        // Run initializer
        base.init();
    };
    
    $.pageslider.defaultOptions = {
		'container' : 'content-slider',
		'frameRate' : 5,
		'loader' : 'images/system/ajax-loader.gif',
		'navigation' : 'site-navigation', 
		'speed' : 900,
		'easing' : 'easeInOutCubic', //oeaseInOutCirc
		'currentClass' : 'current-page',
		'nextClass' : 'new-page',
		'pageClass' : 'page-content',
		'pages' : {},
		'urlPage' : ''
    };
    
    $.fn.pageslider = function(options){
        return this.each(function(){
            (new $.pageslider(this, options));
        });
    };
    
    // This function breaks the chain, but returns
    // the pageslider if it has been attached to the object.
    $.fn.getpageslider = function(){
        this.data("pageslider");
    };
    
})(jQuery);
