(function($) {

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)
		});
		
	}
	


	$.fn.displayPartners = function(options) {
		
		var defaults = {
			data:"",
			hover_id:  "#partnersmain",
			moreinfo_id: "#partnersmore"
		};
		
		// Extend our default options with those provided.
		var opts = $.extend(defaults, options);
		
		 
		function itemHoverOver(obj,employerId) {
			if(moreinfocontainer){
				if(moreinfocontainer.children()){
					moreinfocontainer.children().remove()
				}
				var elementLinkText = 'View '+ employers[employerId].companyname + ' profile'+((employers[employerId].jobs.length > 0)? '  ***** <blink>now recruiting</blink> ****':'')
				var elementLink = $('<a href="' + employers[employerId].companylink+ '">' + elementLinkText + '</a>').appendTo(moreinfocontainer);
			}
		}
		
		function itemHoverOut($obj) {
		}
		
		// Our plugin implementation code goes here.
		var data = opts.data
		
		var partnersDisplay = this;
		
		var employers = new Object()
		
		var jobs = new Array()
		
		var moreinfochildren = $(opts.moreinfo_id).children()
		
		var moreinfocontainer = $(opts.moreinfo_id)
		
		
		
		
		
		
		function init() {
			
			$(opts.hover_id).hover(
				function() {
				}, function() {
					if(moreinfocontainer.children()){
						moreinfocontainer.children().remove()
					}
					moreinfochildren.appendTo(moreinfocontainer);
   				}
			);
			
			
			if(!opts.data){
				$(this).ajaxSuccess(
					function(evt, request, settings){
						data = request.responseXML
						
						update(partnersDisplay)
					}
				);
			}
		}
		
		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[employer.id] = 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()
													  })
											
											
											//'<li class="'+displayClass+'_item '+displayClass+'_item'+displayItemNum+'>">'
											//alert($("jobSalary", this).text())
										}
									);
									//$(this).newsTicker(opts.delay)
								}
					);
						
					/*$(".partnersDisplayLInk").each(
						function(){
						}
					)*/
					
					($(".partnersDisplayLink").children()).replaceAll(".partnersDisplayLink");
					
					
					
					for (var employer in employers){
						
						
							var employerLink = employers[employer].companylink
							
							$("#employer_"+employers[employer].id, obj).each(
								function(){
									var partnersDisplayLink = $(this).wrap('<a href="'+employerLink+'" class="partnersDisplayLink"></a>').parent()
									var employerId = employer
									partnersDisplayLink.hover(
										function (obj) {
											
											
											itemHoverOver($(this),employerId)
										},
										function () {
											itemHoverOut($(this))

										}
									);
								}
							);
					
					}
				}
			}
		}
		
		update(partnersDisplay)
	}
	
})(jQuery);