(function($) {
		 /* $.fn.reorder = function() {
			  // random array sort from
			  // http://javascript.about.com/library/blsort2.htm
			  function randOrd() {
				  return(Math.round(Math.random())-0.5);
				}
				var $this = $(this);
				var $children = $this;
				var childCount = $children.length;
				return($(this).each(
						function() {
							if (childCount > 1) {
								$children.remove();
								var indices = new Array();
								for (i=0;i<childCount;i++) { 
									indices[indices.length] = i;
								}
								indices = indices.sort(randOrd);
								$.each(indices,function(j,k) {
										$this.append($children.eq(k)); 
										}
									);
 
    						}
  						}
  				);
			);
}*/


var is={
        Null:function(a){
                return a===null;
        },
        Undefined:function(a){
                return a===undefined;
        },
        nt:function(a){
                return(a===null||a===undefined);
        },
        Function:function(a){
                return(typeof(a)==='function')?a.constructor.toString().match(/Function/)!==null:false;
        },
        String:function(a){
                return(typeof(a)==='string')?true:(typeof(a)==='object')?a.constructor.toString().match(/string/i)!==null:false;
        },
        Array:function(a){
                return(typeof(a)==='object')?a.constructor.toString().match(/array/i)!==null||a.length!==undefined:false;
        },
        Boolean:function(a){
                return(typeof(a)==='boolean')?true:(typeof(a)==='object')?a.constructor.toString().match(/boolean/i)!==null:false;
        },
        Date:function(a){
                return(typeof(a)==='date')?true:(typeof(a)==='object')?a.constructor.toString().match(/date/i)!==null:false;
        },
        HTML:function(a){
                return(typeof(a)==='object')?a.constructor.toString().match(/html/i)!==null:false;
        },
        Number:function(a){
                return(typeof(a)==='number')?true:(typeof(a)==='object')?a.constructor.toString().match(/Number/)!==null:false;
        },
        Object:function(a){
                return(typeof(a)==='object')?a.constructor.toString().match(/object/i)!==null:false;
        },
        RegExp:function(a){
                return(typeof(a)==='function')?a.constructor.toString().match(/regexp/i)!==null:false;
        }
};

var type={
        of:function(a){
                for(var i in is){
                        if(is[i](a)){
                                return i.toLowerCase();
                        }
                }
        }
};


	$.fn.reorder = function(sortby, order) {
		
		var objArray = new Array()
		
		$(this).each(
			function(){
				objArray.push(this)
			}
		);
		
		var d = 1
		if (order=="desc"){
			var d = -1
		}
		
		function formatobj(obj){
			if (type.of(obj)=="date"){
				return obj.getTime()
			}
			
			return obj
		}
		
		function sorttest(a,b){
			a = a[sortby]
			b = b[sortby]
			if (isNaN(formatobj(a)-formatobj(b)))
				return (isNaN(formatobj(a))?1:-1)*d;
			
			return (formatobj(a)-formatobj(b))*d;
		}
		
		return objArray.sort(function(a,b){
					return sorttest(a,b)
		});
		
	}

	/*Array.prototype.numsort=function(orderby, d){
    var d = d || -1;
	
	
	
	function formatobj(obj){
			if (type.of(obj)=="date"){
				return obj.getTime()
			}
			
			return obj
		}
		

    return this.sort(function(a,b){
					alert(orderby)		  
				a = a.jobPostDate
	b = b.jobPostDate
        if (isNaN(formatobj(a)-formatobj(b)))
            return (isNaN(formatobj(a))?1:-1)*d;

    return (formatobj(a)-formatobj(b))*d;
    });
}*/








	$.fn.displayJobs = function(options) {
		
		var defaults = {
			data:null,
			displayClass:"udc_jqueryfader",
			sortby:null,
			order:null,
			groupNum:1,
			delay: 4000,
			transition: "fade",
			speed: "slow"
		};
		
		

		
		// Extend our default options with those provided.
		var opts = $.extend(defaults, options);
		
		
		var displayContainer
		
		// Our plugin implementation code goes here.
		var data = opts.data
		
		var jobsDisplay = this;
		
		var employers = new Array()
		
		var jobs = new Array()
		
		var sortIndexes = new Array()
		
		
		
		
		function init() {
			
			if(!opts.data){
				$(this).ajaxSuccess(
					function(evt, request, settings){
						data = request.responseXML
						
						//alert($(data).find("employer").length)
						update(jobsDisplay)
					}
				);
			}
		}
		
		init()
		
		
		function update(obj){
			
			if (data){
				
				if($(data).find("employer").length > 0){
					
					$(data).find("employer").each(
						function() {
							var employer = {
								id:$("id", this).text(),
								companyname:$("companyname", this).text(),
								companylink:$("companylink", this).text(),
								jobs:$("jobs", this).children()
							}
							employers.push(employer)
							
							$(this).find("job").each(
								function() {
									jobs.push({employerid:employer.id,
												companyname:employer.companyname,
												companylink:employer.companylink,
												jobId:$(this).children("jobId").text(),
												jobTitle:$(this).children("jobTitle").text(),
												jobPostDate:new Date($(this).children("jobPostDate").text()),
												jobLink:$(this).children("jobLink").text(),
												jobSalary:$(this).children("jobSalary").text(),
												jobCity:$(this).children("jobCity").text()
											})
								}
							);
							
						}
					);				
						
				
					obj.each(
							
						function() {
							if(displayContainer){
								displayContainer.remove()
							}
							
							if (jobs.length> 0){
								jobs = $(jobs).reorder(opts.sortby, opts.order)
								var displayItemNum = 0
								var groupcount = 0
								//var displayContainer = $('<ul class="'+opts.displayClass+'"></ul>').appendTo(obj)
								var html = '<ul id="'+opts.displayClass+'">'
								$(jobs).each(
										 
									function(){
										groupcount++
										displayItemNum++
										if (groupcount == 1){
											html += '<li class="'+opts.displayClass+'_item '+opts.displayClass+'_item'+displayItemNum+'>">\n'
										}
									
										html+= '<a href="'+this.jobLink+'" class="menu1">'+this.jobTitle+'</a>\n'
										html+= '<p>'+this.companyname+', '+this.jobCity+'</p>\n'
										html+= '<p>'+this.jobSalary+'</p>\n'
									
										if (groupcount == opts.groupNum || displayItemNum == jobs.length){
											groupcount = 0
											html+='</li>\n'
										}
									}
								);
								html+='</ul>\n'
								
								displayContainer = $(html).appendTo(obj)
								
								displayContainer.newsticker({
										delay: opts.delay,
										transition: opts.transition,
										speed: opts.speed
								},$);
								
								//displayContainer.newsTicker(opts.delay)
							}
						
						
						
						}
					
					
					);
				}
			}
		}
		
		update(jobsDisplay)
	}
	
})(jQuery);