(function ($) {
	$.fn.swapTab = function(tabid){
		$(this).find('.tab-nav').children('li').eq(tabid-1).trigger('click');
	}
    $.fn.tablify = function (h) {
        var defaults = {
            tabcontainer: '',
            targetcontainer: '',
            activetabid: '',
            autoHeight:false
        };
        var params = $.extend(defaults, h);

        var container = $(this);
        var target = params.targetcontainer;
        var tabs = params.tabcontainer;

		if(params.autoHeight)
		{
			var highest = 0;
			container.find(tabs).find('li').each(
				function(){
					var targetid = $(this).find('a').attr('href');
					if( $(target).find(targetid).height() > highest)
						highest = $(target).find(targetid).outerHeight();
				}
			);
			//catering of scenario when the target container has extra divs that do not flow with the tabbing
			$(target).height(highest);
		}
        container.find(tabs).find('li').bind('click', function (e) {
            e.preventDefault();
            e.stopPropagation();
            var tab = $(this);
            var targetid = $(this).find('a').attr('href');
            if ( $(target).find(targetid).length ==0 ||$(target).find(targetid).hasClass('active') || $(target).hasClass('animating')) {
                return;
            }
            if ($(target).find('.active').length == 0) {
                $(target).find(targetid).toggle(function () { 
                	if($(this).css('filter')!='none')
		                this.style.removeAttribute('filter');
                	$(this).addClass('active'); 
                	container.find(tabs).find('li').
                	removeClass('active');
                	tab.addClass('active');
                });
            }
            else {
               	$(target).addClass('animating');
                $(target).find('.active').toggle(
                    100,
                    function () {
	                	if($(this).css('filter')!='none')
			                this.style.removeAttribute('filter');
	
                        container.find(tabs).find('li').removeClass('active');
		                tab.addClass('active');
                        $(this).removeClass('active');
                        $(target).find(targetid).addClass('active');
                        $(target).find(targetid).toggle(200, function () { 
                        	if($(this).css('filter')!='none')
			                this.style.removeAttribute('filter');
							$(target).removeClass('animating');
							});
                    }
                );
            }
        });
     	container.find(tabs).find('li input').each(function(){
			$(this).find('input').prependTo($(this));
		});

        var activetab = (isNaN(parseInt(params.activetabid)) )? $(tabs).find(params.activetabid): $(tabs).find('ul li:nth-child('+parseInt(params.activetabid) +')');
        var init = (activetab.length == 0) ? $(tabs).find("li:first") :activetab;
        init.trigger('click');
    };
    $.fn.customScrolling = function(viewPortID, colHeaderID, rowHeaderID, cellContainerID, unitElem, units){
	    var container = $(this);
	    var scrollTop = 0;
	    var scrollLeft = 0;
	    var viewport = container.find(viewPortID);
	    var colHeader = container.find(colHeaderID);
	    var colHeaderInner = colHeader.children('.colHeader');
	    var rowHeader = container.find(rowHeaderID);
	    var rowHeaderInner = rowHeader.children('.rowHeader');
	    var cellContainer = container.find(cellContainerID);
	    var cellWidth = cellContainer.find(unitElem).width();
	    
	    // calculate the container width
	    container.width(cellWidth * units);
	    //calculate the inner width of the column header
	    colHeader.width(units * cellWidth);
	    colHeaderInner.width(units * cellWidth);
	    //calculate the height of the row header
	    rowHeader.height(container.outerHeight() - colHeader.outerHeight());
	    //calculate the width of cell container
	    cellContainer.width(colHeaderInner.width());
	  	
		//calculat the column header items
		colHeaderInner.find('li h3').outerHeight(colHeaderInner.getHighest('li h3'));
		colHeaderInner.find('li h4').outerHeight(colHeaderInner.getHighest('li h4'));
		colHeaderInner.find('li .thumbnail').outerHeight(colHeaderInner.getHighest('li .thumbnail'));
	    //calculate each height of the items based on the highest  
	    rowHeaderInner.children(unitElem).each(function(index){	
	    	var h1 = $(this).outerHeight();
	    	var h2 = cellContainer.getHighest('ul li:nth-child('+(index+1)+')');
	    	var highest = (h1 > h2) ? h1 : h2;
	    	$(this).css('height',highest);
	    	//$(this).DebugConsole($(this).id);
  		   	//$(this).DebugConsole(highest);
	    	cellContainer.find('ul li:nth-child('+(index+1)+')').css('height',highest);
	    });
	    
	    var viewportHeight = container.height()- colHeader.height();

	    viewport.height(viewportHeight-20);
	    
	    container.css('visibility','visible');
	    
	    viewport.scroll(function(){
	        //scrolling x axis
	        if(viewport.get(0).scrollTop  == scrollTop){
	            scrollLeft = viewport.get(0).scrollLeft;
	            colHeaderInner.css('marginLeft', -scrollLeft);
	        }
	        //scrolling y axis
	        else{
	            scrollTop = viewport.get(0).scrollTop;
	            rowHeaderInner.css('marginTop', -scrollTop);
	        } 
	    });
	}   	
	$.fn.getHighest = function(elem){
		var highest = 0;
		$(this).find(elem).each(
			function(index){
				/*if(!$(this).is(':visible')){
					$(this).addClass('emulateDisplay');
				}*/
				if($(this).outerHeight()>highest){
					highest = $(this).outerHeight();
				}
				//$(this).removeClass('emulateDisplay');
			}
		);
		return highest;
	}
    $.fn.clearText = function(h){
        var v = $(this).val();
        $(this).click(function () {
            if ($(this).val() == v)
                $(this).val("");
        });
        $(this).blur(function () {
            if ($(this).val() == "")
                $(this).val(v);
        });
    }
	$.fn.getUrlParam = function(strParamName){
		  strParamName = escape(unescape(strParamName));
		  
		  var returnVal = new Array();
		  var qString = null;
		  
		  if ($(this).attr("nodeName")=="#document") {
		  	//document-handler
			
			if (window.location.search.search(strParamName) > -1 ){
				
				qString = window.location.search.substr(1,window.location.search.length).split("&");
			}
				
		  } else if ($(this).attr("src")!="undefined") {
		  	
		  	var strHref = $(this).attr("src")
		  	if ( strHref.indexOf("?") > -1 ){
		    	var strQueryString = strHref.substr(strHref.indexOf("?")+1);
		  		qString = strQueryString.split("&");
		  	}
		  } else if ($(this).attr("href")!="undefined") {
		  	
		  	var strHref = $(this).attr("href")
		  	if ( strHref.indexOf("?") > -1 ){
		    	var strQueryString = strHref.substr(strHref.indexOf("?")+1);
		  		qString = strQueryString.split("&");
		  	}
		  } else {
		  	return null;
		  }
		  	
		  if (qString==null) return null;
		  
		  for (var i=0;i<qString.length; i++){
				if (escape(unescape(qString[i].split("=")[0])) == strParamName){
					returnVal.push(qString[i].split("=")[1]);
				}
		  }
		  if (returnVal.length==0) return null;
		  else if (returnVal.length==1) return returnVal[0];
		  else return returnVal;
	}
	$.fn.loadSWF = function(videoID){
		/*var containerID = $(this).attr('id');
		var params = {allowscriptaccess:'always', wmode:'transparent'};
		var atts = {id:'clip',style:'position:relative;z-index:2'}
		var youtubeURL = 'http://www.youtube.com/v/'+videoID+'?enablejsapi=1&version=3&format=5&playerapiid='+containerID;
		swfobject.embedSWF(youtubeURL,containerID ,517,321,'8',null,null,params,atts);*/
		$(this).ytPlayer({ytPlayer:'clip',style:'position:relative;z-index:2',videoId:videoID,width:566,height:321,autoPlay:true,muted:true});
	}
	
	$.fn.clearDialogs = function(){
		$('.hasDatepicker').blur();
		$('.hasDatepicker').datepicker( "hide" );
	}
	
	$.fn.RowsToColumns = function(numCols,totalWidth){
		if($(this).length<1)
			return;
		var totalHeight = $(this).height();
		var avgHeight = Math.floor(totalHeight / numCols)*0.8;
		var avgWidth = Math.floor(totalWidth /numCols);
		var colIndex = 1;
		var rows  = $(this).children();
		var offset = $(this).position().top;
		rows.each(function(){
		    var top = $(this).position().top - offset;
		    if(top >= avgHeight && colIndex < numCols){
		        colIndex+=1;		    
		        $(this).addClass('coltemp'+colIndex);
		        avgHeight = colIndex * avgHeight;
		    }
		    else
		        $(this).addClass('coltemp'+colIndex);
		});
		for(var i=1;i<=numCols;i++){
			$(this).children('.coltemp'+i).wrapAll('<div id="coldiv'+i+'" class="columnDiv"></div>');
			$(this).children('#coldiv'+i).width(avgWidth);
			$(this).children('#coldiv'+i).find('.coltemp'+i).removeClass('coltemp'+i);
		}
	}
	$.fn.Hide = function(){
		$(this).slideUp();
	}
	$.fn.activeMenu = function(options){
		var defaults = {
			idSwitch: 'active',
			defaultSite: null,
			defaultIndex: 0
		};
		var op = $.extend({},defaults,options);
		var loc = $(document).URLDecode(location.href);			
		$(this).find('a').each(function(){		
		
			if(loc.match('.aspx$')=='.aspx'){
				//landing page
				if(loc.match('LandingPage.aspx$')=='LandingPage.aspx'){
					$(this).find('.level1').each(function(){
						if( loc.search($(this).children('a').attr('href'))!=-1){
							$(this).addClass(op.idSwitch);
							return;
						}
					});
				}
				else{	
					var href = $(this).attr('href');
					if( loc.search($(this).attr('href'))!=-1 ){
						$(this).addClass(op.idSwitch);
						$(this).parents('.level1').addClass(op.idSwitch);
						return;
					}
				}	
			}
			else{
				var mydomain= window.location.href.match(/https?:\/\/(.[^/]+)/)[0];
				if( loc.replace(mydomain,'') == ($(this).attr('href').replace(mydomain,''))){
					$(this).addClass(op.idSwitch);
					$(this).parents('.level1').addClass(op.idSwitch);
					return;
				}
			}							
		});	
		
	}
	$.fn.URLEncode=function(c){
		var o='';
		var x=0;
		c=c.toString();
		var r=/(^[a-zA-Z0-9_.]*)/;
	  	while(x<c.length){
	  		var m=r.exec(c.substr(x));
		    if(m!=null && m.length>1 && m[1]!=''){
		    	o+=m[1];x+=m[1].length;
		    }
		    else{
		    	if(c[x]==' ')o+='+';
		    	else{
		    		var d=c.charCodeAt(x);var h=d.toString(16);
		    		o+='%'+(h.length<2?'0':'')+h.toUpperCase();
		    	}
		    	x++;
		    }
		}return o;
	  }
	  
	$.fn.URLDecode=function(s){
		var o=s;
		var binVal,t;
		var r=/(%[^%]{2})/;
		while((m=r.exec(o))!=null && m.length>1 && m[1]!=''){
			b=parseInt(m[1].substr(1),16);
			t=String.fromCharCode(b);o=o.replace(m[1],t);
		}
		return o;
	}	
	$.fn.ALTRow=function(){
		$(this).children().each(function(index)
		{
			if(index%2==1){
				$(this).addClass('alt-row');
			}
			else
				$(this).addClass('row');
		});
	}
	$.fn.PauseSlideShow=function()
	{
		$(this).addClass('pause');
	}
	$.fn.ResumeSlideShow=function()
	{
		$(this).removeClass('pause');
	}
	$.fn.maui=function(){
		$('#vehiclePage').find('p,a,h1,h2,h3,h4,span,b,strong').text()
	}
	$.fn.DebugConsole=function(context){
		if($('#debug_console').length<=0){
			$('#page').append('<div id="debug_console"><h1>JS Debug Console</h1><ul></ul></div>');
		}
		$('#debug_console ul').append('<li>'+context+'</li>');
	}
	$.fn.newsFlash = function(p)
    {
    
        var defaults = {
            auto: true,
            tag: 'li'
        };
        var params = $.extend(defaults, p);
    	var $container = $(this);
    	var $items = $container.children(params.tag);
    	var $itemCount = $items.length;
    	var $leftDist = (-$container.width())+'px';
    	var $rightDist = $container.css('width');
		$container.bind('play',function(e){
			var activeIndex = $container.children('.active').index();
        	var nextIndex = (activeIndex == ($itemCount-1)) ? 0 : (activeIndex+1);
        	$items.eq(activeIndex).hide({effect:'drop',direction:'left',speed:700}).removeClass('active');
  			$items.eq(nextIndex).show({effect:'drop',direction:'right',speed:700}).addClass('active');
		});
    	if(params.auto){
		    var c = 1;
		    function auto() {
		        if (c == -1) return false;
		        $items.eq(c % $itemCount).trigger('play', [true]);
		        c++;
		    }
		    var intval = setInterval(function () { auto(); }, 10000);
    		$container.trigger('play');		    
	    	$container.bind('mouseover',function(){clearInterval(intval);});
	 	   	$container.bind('mouseleave',function(){ intval = setInterval(function () { auto(); }, 10000);});
		    
	    }
    }
	
$.fn.CustomDataFormFilter=function(){
		//init 
		//var parentContainer = $(this).parents('.ms-ToolPaneBorder').parent('td');
		//parentContainer.css('height','auto');
		var $container = $(this);
		var $ddlListName = $('.df-ddlSPList');
		var $hiddenCounter = $('<input type="hidden" name="df-totalFilters" id="df-totalFilters"/>');
		
		var fieldBaseId = 'df-ddlFields';
		var logicBaseId = 'df-ddLogic';
		var valueBaseId = 'df-txtValue';
		var groupBaseId = 'df-logicGroup';
		var addAFilter = $('<span class="addFilterLink">Add Filter</span>');
		$container.append($hiddenCounter);
		CreateFilter(df_filters.length>3?df_filters.length:3);
		if(df_filters.length>0){
			SetFilter();
		}
		$('.addFilterLink').bind('click',function(){
			CreateFilter(1);
		});
		$container.append(addAFilter);
		$ddlListName.bind('change',function(){
			$('.df-ddlFields').each(function(){
				PopulateFilterDDL($ddlListName,$(this));
			});
		});
		function CreateFilter(total){
			for(var i=0;i<total;i++){
				var index = $container.find('.df-ddlFields').length+1;
				var fieldId=  fieldBaseId +index;
				var logicId = logicBaseId +index;
				var valueId = valueBaseId +index;
				var groupId = groupBaseId +index;
				//!Important: the logic grouping is case sensitive in CAML!
				var $and = $('<input type="radio" name="'+groupId +'" value="And" checked>');
				var $or = $('<input type="radio" name="'+groupId +'" value="Or">');
				if(index > 1){
					$container.append($and);
					$container.append('and');					
					$container.append($or);
					$container.append('or');					
				}
				var $ddlFields = $('<select id="'+fieldId+'" name="'+fieldId+'" class="df-ddlFields"></select>');

				if(index >1)
					$('#df-ddlFields1 option').clone().appendTo($ddlFields);
				else
					PopulateFilterDDL($ddlListName,$ddlFields);
				$container.append($ddlFields);				
				
				var $ddlLogic = $('<select id="'+logicId +'" name="'+logicId +'" class="df-ddlLogic"></select>');
				PopulateLogicDDL($ddlLogic);
				$container.append($ddlLogic);
				
				var $txtValue = $('<input id="'+valueId +'" name="'+valueId +'" class="df-txtValue" type="text" />');
				$container.append($txtValue);
				$hiddenCounter.val(index);

				FilterOnChange($ddlFields,$ddlLogic,$txtValue);
				$ddlFields.trigger('change');
				
				$container.remove(addAFilter);
				$container.append(addAFilter);
			}
		}
		function FilterOnChange(f,l,v){
			f.bind('change',function(){
				if($(this).val() ==''){
					l.attr('disabled','disabled');
					v.attr('disabled','disabled');
				}
				else{
					l.removeAttr('disabled');
					v.removeAttr('disabled');
				}
			});
		}
		function PopulateLogicDDL($ddlLogic){
	        $ddlLogic.append(NewOption("is equal to", "Eq"));
            $ddlLogic.append(NewOption("is not equal to", "Neq"));
            $ddlLogic.append(NewOption("is greater than", "Gt"));
            $ddlLogic.append(NewOption("is greater than or equal to", "Geq"));
            $ddlLogic.append(NewOption("is less than", "Lt"));
            $ddlLogic.append(NewOption("is less than or equal to", "Leq"));
            $ddlLogic.append(NewOption("begins with", "BeginsWith"));
            $ddlLogic.append(NewOption("contains", "Contains"));
		}
		function PopulateFilterDDL(source,dest){
			dest.children('option').remove();

			$.each(df_list_fields,function(i){
			    if(df_list_fields[i].listname == source.val()){
			        dest.append(NewOption(df_list_fields[i].text,df_list_fields[i].value));
			    }
			});
			SortDLL(dest);
		}
		function SortDLL(ddl){
			ddl.each(function(){
				$(this).html($("option", $(this)).sort(function(a, b) {
		            return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
		        }));
			});
			ddl.prepend(NewOption('None',''));
			ddl.children('option:first-child').attr('selected','selected');
		}	
		function SetFilter(){
			for(var i=1; i<= df_filters.length;i++){
				var fieldId=  fieldBaseId +(i);
				var logicId = logicBaseId +(i);
				var valueId = valueBaseId +(i);
				var groupId = groupBaseId +(i);
				$('#'+fieldId).val(df_filters[df_filters.length-i].ref);
				$('#'+logicId ).val(df_filters[df_filters.length-i].logic);
				$('#'+valueId ).val(df_filters[df_filters.length-i].value);
				$('#'+groupId ).val(df_filters[df_filters.length-i].group);				
				$('#'+fieldId).trigger('change');
			}
		}
		function NewOption(text, val){
			return "<option value='"+val+"'>"+text+"</option>";

		}
	}

})(jQuery);
