//MooTools, <http://mootools.net>, My Object Oriented (JavaScript) Tools. Copyright (c) 2006-2008 Valerio Proietti, <http://mad4milk.net>, MIT Style License.

var MooTools={version:"1.2.0",build:""};var Native=function(J){J=J||{};var F=J.afterImplement||function(){};var G=J.generics;G=(G!==false);var H=J.legacy;
var E=J.initialize;var B=J.protect;var A=J.name;var C=E||H;C.constructor=Native;C.$family={name:"native"};if(H&&E){C.prototype=H.prototype;}C.prototype.constructor=C;
if(A){var D=A.toLowerCase();C.prototype.$family={name:D};Native.typize(C,D);}var I=function(M,K,N,L){if(!B||L||!M.prototype[K]){M.prototype[K]=N;}if(G){Native.genericize(M,K,B);
}F.call(M,K,N);return M;};C.implement=function(L,K,N){if(typeof L=="string"){return I(this,L,K,N);}for(var M in L){I(this,M,L[M],K);}return this;};C.alias=function(M,K,N){if(typeof M=="string"){M=this.prototype[M];
if(M){I(this,K,M,N);}}else{for(var L in M){this.alias(L,M[L],K);}}return this;};return C;};Native.implement=function(D,C){for(var B=0,A=D.length;B<A;B++){D[B].implement(C);
}};Native.genericize=function(B,C,A){if((!A||!B[C])&&typeof B.prototype[C]=="function"){B[C]=function(){var D=Array.prototype.slice.call(arguments);return B.prototype[C].apply(D.shift(),D);
};}};Native.typize=function(A,B){if(!A.type){A.type=function(C){return( $type(C)===B);};}};Native.alias=function(E,B,A,F){for(var D=0,C=E.length;D<C;D++){E[D].alias(B,A,F);
}};(function(B){for(var A in B){Native.typize(B[A],A);}})({"boolean":Boolean,"native":Native,object:Object});(function(B){for(var A in B){new Native({name:A,initialize:B[A],protect:true});
}})({String:String,Function:Function,Number:Number,Array:Array,RegExp:RegExp,Date:Date});(function(B,A){for(var C=A.length;C--;C){Native.genericize(B,A[C],true);
}return arguments.callee;})(Array,["pop","push","reverse","shift","sort","splice","unshift","concat","join","slice","toString","valueOf","indexOf","lastIndexOf"])(String,["charAt","charCodeAt","concat","indexOf","lastIndexOf","match","replace","search","slice","split","substr","substring","toLowerCase","toUpperCase","valueOf"] );
function $chk(A){return !!(A||A===0);}function $clear(A){clearTimeout(A);clearInterval(A);return null;}function $defined(A){return(A!=undefined);}function $empty(){}function $arguments(A){return function(){return arguments[A];
};}function $lambda(A){return(typeof A=="function")?A:function(){return A;};}function $extend(C,A){for(var B in (A||{})){C[B]=A[B];}return C;}function $unlink(C){var B;
switch( $type(C)){case"object":B={};for(var E in C){B[E]=$unlink(C[E] );}break;case"hash":B=$unlink(C.getClean());break;case"array":B=[];for(var D=0,A=C.length;
D<A;D++){B[D]=$unlink(C[D] );}break;default:return C;}return B;}function $merge(){var E={};for(var D=0,A=arguments.length;D<A;D++){var B=arguments[D];if( $type(B)!="object"){continue;
}for(var C in B){var G=B[C],F=E[C];E[C]=(F&&$type(G)=="object"&&$type(F)=="object")?$merge(F,G):$unlink(G);}}return E;}function $pick(){for(var B=0,A=arguments.length;
B<A;B++){if(arguments[B]!=undefined){return arguments[B];}}return null;}function $random(B,A){return Math.floor(Math.random()*(A-B+1)+B);}function $splat(B){var A=$type(B);
return(A)?((A!="array"&&A!="arguments")?[B]:B):[];}var $time=Date.now||function(){return new Date().getTime();};function $try(){for(var B=0,A=arguments.length;
B<A;B++){try{return arguments[B]();}catch(C){}}return null;}function $type(A){if(A==undefined){return false;}if(A.$family){return(A.$family.name=="number"&&!isFinite(A))?false:A.$family.name;
}if(A.nodeName){switch(A.nodeType){case 1:return"element";case 3:return(/\S/).test(A.nodeValue)?"textnode":"whitespace";}}else{if(typeof A.length=="number"){if(A.callee){return"arguments";
}else{if(A.item){return"collection";}}}}return typeof A;}var Hash=new Native({name:"Hash",initialize:function(A){if( $type(A)=="hash"){A=$unlink(A.getClean());
}for(var B in A){this[B]=A[B];}return this;}});Hash.implement({getLength:function(){var B=0;for(var A in this){if(this.hasOwnProperty(A)){B++;}}return B;
},forEach:function(B,C){for(var A in this){if(this.hasOwnProperty(A)){B.call(C,this[A],A,this);}}},getClean:function(){var B={};for(var A in this){if(this.hasOwnProperty(A)){B[A]=this[A];
}}return B;}});Hash.alias("forEach","each");function $H(A){return new Hash(A);}Array.implement({forEach:function(C,D){for(var B=0,A=this.length;B<A;B++){C.call(D,this[B],B,this);
}}});Array.alias("forEach","each");function $A(C){if(C.item){var D=[];for(var B=0,A=C.length;B<A;B++){D[B]=C[B];}return D;}return Array.prototype.slice.call(C);
}function $each(C,B,D){var A=$type(C);((A=="arguments"||A=="collection"||A=="array")?Array:Hash).each(C,B,D);}Array.implement({every:function(C,D){for(var B=0,A=this.length;
B<A;B++){if(!C.call(D,this[B],B,this)){return false;}}return true;},filter:function(D,E){var C=[];for(var B=0,A=this.length;B<A;B++){if(D.call(E,this[B],B,this)){C.push(this[B] );
}}return C;},clean:function(){return this.filter( $defined);},indexOf:function(C,D){var A=this.length;for(var B=(D<0)?Math.max(0,A+D):D||0;B<A;B++){if(this[B]===C){return B;
}}return -1;},map:function(D,E){var C=[];for(var B=0,A=this.length;B<A;B++){C[B]=D.call(E,this[B],B,this);}return C;},some:function(C,D){for(var B=0,A=this.length;
B<A;B++){if(C.call(D,this[B],B,this)){return true;}}return false;},associate:function(C){var D={},B=Math.min(this.length,C.length);for(var A=0;A<B;A++){D[C[A]]=this[A];
}return D;},link:function(C){var A={};for(var E=0,B=this.length;E<B;E++){for(var D in C){if(C[D](this[E])){A[D]=this[E];delete C[D];break;}}}return A;},contains:function(A,B){return this.indexOf(A,B)!=-1;
},extend:function(C){for(var B=0,A=C.length;B<A;B++){this.push(C[B] );}return this;},getLast:function(){return(this.length)?this[this.length-1]:null;},getRandom:function(){return(this.length)?this[$random(0,this.length-1)]:null;
},include:function(A){if(!this.contains(A)){this.push(A);}return this;},combine:function(C){for(var B=0,A=C.length;B<A;B++){this.include(C[B] );}return this;
},erase:function(B){for(var A=this.length;A--;A){if(this[A]===B){this.splice(A,1);}}return this;},empty:function(){this.length=0;return this;},flatten:function(){var D=[];
for(var B=0,A=this.length;B<A;B++){var C=$type(this[B] );if(!C){continue;}D=D.concat((C=="array"||C=="collection"||C=="arguments")?Array.flatten(this[B]):this[B] );
}return D;},hexToRgb:function(B){if(this.length!=3){return null;}var A=this.map(function(C){if(C.length==1){C+=C;}return C.toInt(16);});return(B)?A:"rgb("+A+")";
},rgbToHex:function(D){if(this.length<3){return null;}if(this.length==4&&this[3]==0&&!D){return"transparent";}var B=[];for(var A=0;A<3;A++){var C=(this[A]-0).toString(16);
B.push((C.length==1)?"0"+C:C);}return(D)?B:"#"+B.join("");}});Function.implement({extend:function(A){for(var B in A){this[B]=A[B];}return this;},create:function(B){var A=this;
B=B||{};return function(D){var C=B.arguments;C=(C!=undefined)?$splat(C):Array.slice(arguments,(B.event)?1:0);if(B.event){C=[D||window.event].extend(C);
}var E=function(){return A.apply(B.bind||null,C);};if(B.delay){return setTimeout(E,B.delay);}if(B.periodical){return setInterval(E,B.periodical);}if(B.attempt){return $try(E);
}return E();};},pass:function(A,B){return this.create({arguments:A,bind:B});},attempt:function(A,B){return this.create({arguments:A,bind:B,attempt:true})();
},bind:function(B,A){return this.create({bind:B,arguments:A});},bindWithEvent:function(B,A){return this.create({bind:B,event:true,arguments:A});},delay:function(B,C,A){return this.create({delay:B,bind:C,arguments:A})();
},periodical:function(A,C,B){return this.create({periodical:A,bind:C,arguments:B})();},run:function(A,B){return this.apply(B, $splat(A));}});Number.implement({limit:function(B,A){return Math.min(A,Math.max(B,this));
},round:function(A){A=Math.pow(10,A||0);return Math.round(this*A)/A;},times:function(B,C){for(var A=0;A<this;A++){B.call(C,A,this);}},toFloat:function(){return parseFloat(this);
},toInt:function(A){return parseInt(this,A||10);}});Number.alias("times","each");(function(B){var A={};B.each(function(C){if(!Number[C]){A[C]=function(){return Math[C].apply(null,[this].concat( $A(arguments)));
};}});Number.implement(A);})(["abs","acos","asin","atan","atan2","ceil","cos","exp","floor","log","max","min","pow","sin","sqrt","tan"] );String.implement({test:function(A,B){return((typeof A=="string")?new RegExp(A,B):A).test(this);
},contains:function(A,B){return(B)?(B+this+B).indexOf(B+A+B)>-1:this.indexOf(A)>-1;},trim:function(){return this.replace(/^\s+|\s+$/g,"");},clean:function(){return this.replace(/\s+/g," ").trim();
},camelCase:function(){return this.replace(/-\D/g,function(A){return A.charAt(1).toUpperCase();});},hyphenate:function(){return this.replace(/[A-Z]/g,function(A){return("-"+A.charAt(0).toLowerCase());
});},capitalize:function(){return this.replace(/\b[a-z]/g,function(A){return A.toUpperCase();});},escapeRegExp:function(){return this.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1");
},toInt:function(A){return parseInt(this,A||10);},toFloat:function(){return parseFloat(this);},hexToRgb:function(B){var A=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
return(A)?A.slice(1).hexToRgb(B):null;},rgbToHex:function(B){var A=this.match(/\d{1,3}/g);return(A)?A.rgbToHex(B):null;},stripScripts:function(B){var A="";
var C=this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,function(){A+=arguments[1]+"\n";return"";});if(B===true){$exec(A);}else{if( $type(B)=="function"){B(A,C);
}}return C;},substitute:function(A,B){return this.replace(B||(/\\?\{([^}]+)\}/g),function(D,C){if(D.charAt(0)=="\\"){return D.slice(1);}return(A[C]!=undefined)?A[C]:"";
});}});Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function(B){for(var A in this){if(this.hasOwnProperty(A)&&this[A]===B){return A;}}return null;
},hasValue:function(A){return(Hash.keyOf(this,A)!==null);},extend:function(A){Hash.each(A,function(C,B){Hash.set(this,B,C);},this);return this;},combine:function(A){Hash.each(A,function(C,B){Hash.include(this,B,C);
},this);return this;},erase:function(A){if(this.hasOwnProperty(A)){delete this[A];}return this;},get:function(A){return(this.hasOwnProperty(A))?this[A]:null;
},set:function(A,B){if(!this[A]||this.hasOwnProperty(A)){this[A]=B;}return this;},empty:function(){Hash.each(this,function(B,A){delete this[A];},this);
return this;},include:function(B,C){var A=this[B];if(A==undefined){this[B]=C;}return this;},map:function(B,C){var A=new Hash;Hash.each(this,function(E,D){A.set(D,B.call(C,E,D,this));
},this);return A;},filter:function(B,C){var A=new Hash;Hash.each(this,function(E,D){if(B.call(C,E,D,this)){A.set(D,E);}},this);return A;},every:function(B,C){for(var A in this){if(this.hasOwnProperty(A)&&!B.call(C,this[A],A)){return false;
}}return true;},some:function(B,C){for(var A in this){if(this.hasOwnProperty(A)&&B.call(C,this[A],A)){return true;}}return false;},getKeys:function(){var A=[];
Hash.each(this,function(C,B){A.push(B);});return A;},getValues:function(){var A=[];Hash.each(this,function(B){A.push(B);});return A;},toQueryString:function(A){var B=[];
Hash.each(this,function(F,E){if(A){E=A+"["+E+"]";}var D;switch( $type(F)){case"object":D=Hash.toQueryString(F,E);break;case"array":var C={};F.each(function(H,G){C[G]=H;
});D=Hash.toQueryString(C,E);break;default:D=E+"="+encodeURIComponent(F);}if(F!=undefined){B.push(D);}});return B.join("&");}});Hash.alias({keyOf:"indexOf",hasValue:"contains"});
var Class=new Native({name:"Class",initialize:function(B){B=B||{};var A=function(E){for(var D in this){this[D]=$unlink(this[D] );}for(var F in Class.Mutators){if(!this[F]){continue;
}Class.Mutators[F](this,this[F] );delete this[F];}this.constructor=A;if(E===$empty){return this;}var C=(this.initialize)?this.initialize.apply(this,arguments):this;
if(this.options&&this.options.initialize){this.options.initialize.call(this);}return C;};$extend(A,this);A.constructor=Class;A.prototype=B;return A;}});
Class.implement({implement:function(){Class.Mutators.Implements(this.prototype,Array.slice(arguments));return this;}});Class.Mutators={Implements:function(A,B){$splat(B).each(function(C){$extend(A,( $type(C)=="class")?new C( $empty):C);
});},Extends:function(self,klass){var instance=new klass( $empty);delete instance.parent;delete instance.parentOf;for(var key in instance){var current=self[key],previous=instance[key];
if(current==undefined){self[key]=previous;continue;}var ctype=$type(current),ptype=$type(previous);if(ctype!=ptype){continue;}switch(ctype){case"function":if(!arguments.callee.caller){self[key]=eval("("+String(current).replace(/\bthis\.parent\(\s*(\))?/g,function(full,close){return"arguments.callee._parent_.call(this"+(close||", ");
})+")");}self[key]._parent_=previous;break;case"object":self[key]=$merge(previous,current);}}self.parent=function(){return arguments.callee.caller._parent_.apply(this,arguments);
};self.parentOf=function(descendant){return descendant._parent_.apply(this,Array.slice(arguments,1));};}};

/**
 * SWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com
 *
 * mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/,  http://www.vinterwebb.se/
 *
 * SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilzén and Mammon Media and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * SWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * SWFObject v2.2 <http://code.google.com/p/swfobject/> 
 *	is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> 
 */



/* ******************* */
/* Constructor & Init  */
/* ******************* */
var SWFUpload;
var swfobject;

if (SWFUpload == undefined) {
	SWFUpload = function (settings) {
		this.initSWFUpload(settings);
	};
}

SWFUpload.prototype.initSWFUpload = function (userSettings) {
	try {
		this.customSettings = {};	// A container where developers can place their own settings associated with this instance.
		this.settings = {};
		this.eventQueue = [];
		this.movieName = "SWFUpload_" + SWFUpload.movieCount++;
		this.movieElement = null;


		// Setup global control tracking
		SWFUpload.instances[this.movieName] = this;

		// Load the settings.  Load the Flash movie.
		this.initSettings(userSettings);
		this.loadSupport();
		if (this.swfuploadPreload()) {
			this.loadFlash();
		}

		this.displayDebugInfo();
	} catch (ex) {
		delete SWFUpload.instances[this.movieName];
		throw ex;
	}
};

/* *************** */
/* Static Members  */
/* *************** */
SWFUpload.instances = {};
SWFUpload.movieCount = 0;
SWFUpload.version = "2.5.0 2010-01-15 Beta 2";
SWFUpload.QUEUE_ERROR = {
	QUEUE_LIMIT_EXCEEDED            : -100,
	FILE_EXCEEDS_SIZE_LIMIT         : -110,
	ZERO_BYTE_FILE                  : -120,
	INVALID_FILETYPE                : -130
};
SWFUpload.UPLOAD_ERROR = {
	HTTP_ERROR                      : -200,
	MISSING_UPLOAD_URL              : -210,
	IO_ERROR                        : -220,
	SECURITY_ERROR                  : -230,
	UPLOAD_LIMIT_EXCEEDED           : -240,
	UPLOAD_FAILED                   : -250,
	SPECIFIED_FILE_ID_NOT_FOUND     : -260,
	FILE_VALIDATION_FAILED          : -270,
	FILE_CANCELLED                  : -280,
	UPLOAD_STOPPED                  : -290,
	RESIZE                          : -300
};
SWFUpload.FILE_STATUS = {
	QUEUED       : -1,
	IN_PROGRESS  : -2,
	ERROR        : -3,
	COMPLETE     : -4,
	CANCELLED    : -5
};
SWFUpload.UPLOAD_TYPE = {
	NORMAL       : -1,
	RESIZED      : -2
};

SWFUpload.BUTTON_ACTION = {
	SELECT_FILE             : -100,
	SELECT_FILES            : -110,
	START_UPLOAD            : -120,
	JAVASCRIPT              : -130,	// DEPRECATED
	NONE                    : -130
};
SWFUpload.CURSOR = {
	ARROW : -1,
	HAND  : -2
};
SWFUpload.WINDOW_MODE = {
	WINDOW       : "window",
	TRANSPARENT  : "transparent",
	OPAQUE       : "opaque"
};

SWFUpload.RESIZE_ENCODING = {
	JPEG  : -1,
	PNG   : -2
};

// Private: takes a URL, determines if it is relative and converts to an absolute URL
// using the current site. Only processes the URL if it can, otherwise returns the URL untouched
SWFUpload.completeURL = function (url) {
	try {
		var path = "", indexSlash = -1;
		if (typeof(url) !== "string" || url.match(/^https?:\/\//i) || url.match(/^\//) || url === "") {
			return url;
		}
		
		indexSlash = window.location.pathname.lastIndexOf("/");
		if (indexSlash <= 0) {
			path = "/";
		} else {
			path = window.location.pathname.substr(0, indexSlash) + "/";
		}
		
		return path + url;
	} catch (ex) {
		return url;
	}
};

// Public: assign a new function to onload to use swfobject's domLoad functionality
SWFUpload.onload = function () {};


/* ******************** */
/* Instance Members  */
/* ******************** */

// Private: initSettings ensures that all the
// settings are set, getting a default value if one was not assigned.
SWFUpload.prototype.initSettings = function (userSettings) {
	this.ensureDefault = function (settingName, defaultValue) {
		var setting = userSettings[settingName];
		if (setting != undefined) {
			this.settings[settingName] = setting;
		} else {
			this.settings[settingName] = defaultValue;
		}
	};
	
	// Upload backend settings
	this.ensureDefault("upload_url", "");
	this.ensureDefault("preserve_relative_urls", false);
	this.ensureDefault("file_post_name", "Filedata");
	this.ensureDefault("post_params", {});
	this.ensureDefault("use_query_string", false);
	this.ensureDefault("requeue_on_error", false);
	this.ensureDefault("http_success", []);
	this.ensureDefault("assume_success_timeout", 0);
	
	// File Settings
	this.ensureDefault("file_types", "*.*");
	this.ensureDefault("file_types_description", "All Files");
	this.ensureDefault("file_size_limit", 0);	// Default zero means "unlimited"
	this.ensureDefault("file_upload_limit", 0);
	this.ensureDefault("file_queue_limit", 0);

	// Flash Settings
	this.ensureDefault("flash_url", "swfupload.swf");
	this.ensureDefault("flash9_url", "swfupload_fp9.swf");
	this.ensureDefault("prevent_swf_caching", true);
	
	// Button Settings
	this.ensureDefault("button_image_url", "");
	this.ensureDefault("button_width", 1);
	this.ensureDefault("button_height", 1);
	this.ensureDefault("button_text", "");
	this.ensureDefault("button_text_style", "color: #000000; font-size: 16pt;");
	this.ensureDefault("button_text_top_padding", 0);
	this.ensureDefault("button_text_left_padding", 0);
	this.ensureDefault("button_action", SWFUpload.BUTTON_ACTION.SELECT_FILES);
	this.ensureDefault("button_disabled", false);
	this.ensureDefault("button_placeholder_id", "");
	this.ensureDefault("button_placeholder", null);
	this.ensureDefault("button_cursor", SWFUpload.CURSOR.ARROW);
	this.ensureDefault("button_window_mode", SWFUpload.WINDOW_MODE.WINDOW);
	
	// Debug Settings
	this.ensureDefault("debug", false);
	this.settings.debug_enabled = this.settings.debug;	// Here to maintain v2 API
	
	// Event Handlers
	this.settings.return_upload_start_handler = this.returnUploadStart;
	this.ensureDefault("swfupload_preload_handler", null);
	this.ensureDefault("swfupload_load_failed_handler", null);
	this.ensureDefault("swfupload_loaded_handler", null);
	this.ensureDefault("file_dialog_start_handler", null);
	this.ensureDefault("file_queued_handler", null);
	this.ensureDefault("file_queue_error_handler", null);
	this.ensureDefault("file_dialog_complete_handler", null);
	
	this.ensureDefault("upload_resize_start_handler", null);
	this.ensureDefault("upload_start_handler", null);
	this.ensureDefault("upload_progress_handler", null);
	this.ensureDefault("upload_error_handler", null);
	this.ensureDefault("upload_success_handler", null);
	this.ensureDefault("upload_complete_handler", null);
	
	this.ensureDefault("mouse_click_handler", null);
	this.ensureDefault("mouse_out_handler", null);
	this.ensureDefault("mouse_over_handler", null);
	
	this.ensureDefault("debug_handler", this.debugMessage);

	this.ensureDefault("custom_settings", {});

	// Other settings
	this.customSettings = this.settings.custom_settings;
	
	// Update the flash url if needed
	if (!!this.settings.prevent_swf_caching) {
		this.settings.flash_url = this.settings.flash_url + (this.settings.flash_url.indexOf("?") < 0 ? "?" : "&") + "preventswfcaching=" + new Date().getTime();
		this.settings.flash9_url = this.settings.flash9_url + (this.settings.flash9_url.indexOf("?") < 0 ? "?" : "&") + "preventswfcaching=" + new Date().getTime();
	}
	
	if (!this.settings.preserve_relative_urls) {
		this.settings.upload_url = SWFUpload.completeURL(this.settings.upload_url);
		this.settings.button_image_url = SWFUpload.completeURL(this.settings.button_image_url);
	}
	
	delete this.ensureDefault;
};

// Initializes the supported functionality based the Flash Player version, state, and event that occur during initialization
SWFUpload.prototype.loadSupport = function () {
	this.support = {
		loading : swfobject.hasFlashPlayerVersion("9.0.28"),
		imageResize : swfobject.hasFlashPlayerVersion("10.0.0")
	};
	
};

// Private: loadFlash replaces the button_placeholder element with the flash movie.
SWFUpload.prototype.loadFlash = function () {
	var targetElement, tempParent, wrapperType, flashHTML, els;

	if (!this.support.loading) {
		this.queueEvent("swfupload_load_failed_handler", ["Flash Player doesn't support SWFUpload"]);
		return;
	}
	
	// Make sure an element with the ID we are going to use doesn't already exist
	if (document.getElementById(this.movieName) !== null) {
		this.support.loading = false;
		this.queueEvent("swfupload_load_failed_handler", ["Element ID already in use"]);
		return;
	}

	// Get the element where we will be placing the flash movie
	targetElement = document.getElementById(this.settings.button_placeholder_id) || this.settings.button_placeholder;

	if (targetElement == undefined) {
		this.support.loading = false;
		this.queueEvent("swfupload_load_failed_handler", ["button place holder not found"]);
		return;
	}

	wrapperType = (targetElement.currentStyle && targetElement.currentStyle["display"] || window.getComputedStyle && document.defaultView.getComputedStyle(targetElement, null).getPropertyValue("display")) !== "block" ? "span" : "div";
	
	// Append the container and load the flash
	tempParent = document.createElement(wrapperType);

	flashHTML = this.getFlashHTML();

	try {
		tempParent.innerHTML = flashHTML;	// Using innerHTML is non-standard but the only sensible way to dynamically add Flash in IE (and maybe other browsers)
	} catch (ex) {
		this.support.loading = false;
		this.queueEvent("swfupload_load_failed_handler", ["Exception loading Flash HTML into placeholder"]);
		return;
	}

	// Try to get the movie element immediately
	els = tempParent.getElementsByTagName("object");
	if (!els || els.length > 1 || els.length === 0) {
		this.support.loading = false;
		this.queueEvent("swfupload_load_failed_handler", ["Unable to find movie after adding to DOM"]);
		return;
	} else if (els.length === 1) {
		this.movieElement = els[0];
	}
	
	targetElement.parentNode.replaceChild(tempParent.firstChild, targetElement);

	// Fix IE Flash/Form bug
	if (window[this.movieName] == undefined) {
		window[this.movieName] = this.getMovieElement();
	}
};

// Private: getFlashHTML generates the object tag needed to embed the flash in to the document
SWFUpload.prototype.getFlashHTML = function (flashVersion) {
	// Flash Satay object syntax: http://www.alistapart.com/articles/flashsatay
	return ['<object id="', this.movieName, '" type="application/x-shockwave-flash" data="', (this.support.imageResize ? this.settings.flash_url : this.settings.flash9_url), '" width="', this.settings.button_width, '" height="', this.settings.button_height, '" class="swfupload">',
				'<param name="wmode" value="', this.settings.button_window_mode, '" />',
				'<param name="movie" value="', (this.support.imageResize ? this.settings.flash_url : this.settings.flash9_url), '" />',
				'<param name="quality" value="high" />',
				'<param name="allowScriptAccess" value="always" />',
				'<param name="flashvars" value="' + this.getFlashVars() + '" />',
				'</object>'].join("");
};

// Private: getFlashVars builds the parameter string that will be passed
// to flash in the flashvars param.
SWFUpload.prototype.getFlashVars = function () {
	// Build a string from the post param object
	var httpSuccessString, paramString;
	
	paramString = this.buildParamString();
	httpSuccessString = this.settings.http_success.join(",");
	
	// Build the parameter string
	return ["movieName=", encodeURIComponent(this.movieName),
			"&amp;uploadURL=", encodeURIComponent(this.settings.upload_url),
			"&amp;useQueryString=", encodeURIComponent(this.settings.use_query_string),
			"&amp;requeueOnError=", encodeURIComponent(this.settings.requeue_on_error),
			"&amp;httpSuccess=", encodeURIComponent(httpSuccessString),
			"&amp;assumeSuccessTimeout=", encodeURIComponent(this.settings.assume_success_timeout),
			"&amp;params=", encodeURIComponent(paramString),
			"&amp;filePostName=", encodeURIComponent(this.settings.file_post_name),
			"&amp;fileTypes=", encodeURIComponent(this.settings.file_types),
			"&amp;fileTypesDescription=", encodeURIComponent(this.settings.file_types_description),
			"&amp;fileSizeLimit=", encodeURIComponent(this.settings.file_size_limit),
			"&amp;fileUploadLimit=", encodeURIComponent(this.settings.file_upload_limit),
			"&amp;fileQueueLimit=", encodeURIComponent(this.settings.file_queue_limit),
			"&amp;debugEnabled=", encodeURIComponent(this.settings.debug_enabled),
			"&amp;buttonImageURL=", encodeURIComponent(this.settings.button_image_url),
			"&amp;buttonWidth=", encodeURIComponent(this.settings.button_width),
			"&amp;buttonHeight=", encodeURIComponent(this.settings.button_height),
			"&amp;buttonText=", encodeURIComponent(this.settings.button_text),
			"&amp;buttonTextTopPadding=", encodeURIComponent(this.settings.button_text_top_padding),
			"&amp;buttonTextLeftPadding=", encodeURIComponent(this.settings.button_text_left_padding),
			"&amp;buttonTextStyle=", encodeURIComponent(this.settings.button_text_style),
			"&amp;buttonAction=", encodeURIComponent(this.settings.button_action),
			"&amp;buttonDisabled=", encodeURIComponent(this.settings.button_disabled),
			"&amp;buttonCursor=", encodeURIComponent(this.settings.button_cursor)
		].join("");
};

// Public: get retrieves the DOM reference to the Flash element added by SWFUpload
// The element is cached after the first lookup
SWFUpload.prototype.getMovieElement = function () {
	if (this.movieElement == undefined) {
		this.movieElement = document.getElementById(this.movieName);
	}

	if (this.movieElement === null) {
		throw "Could not find Flash element";
	}
	
	return this.movieElement;
};

// Private: buildParamString takes the name/value pairs in the post_params setting object
// and joins them up in to a string formatted "name=value&amp;name=value"
SWFUpload.prototype.buildParamString = function () {
	var name, postParams, paramStringPairs = [];
	
	postParams = this.settings.post_params; 

	if (typeof(postParams) === "object") {
		for (name in postParams) {
			if (postParams.hasOwnProperty(name)) {
				paramStringPairs.push(encodeURIComponent(name.toString()) + "=" + encodeURIComponent(postParams[name].toString()));
			}
		}
	}

	return paramStringPairs.join("&amp;");
};

// Public: Used to remove a SWFUpload instance from the page. This method strives to remove
// all references to the SWF, and other objects so memory is properly freed.
// Returns true if everything was destroyed. Returns a false if a failure occurs leaving SWFUpload in an inconsistant state.
// Credits: Major improvements provided by steffen
SWFUpload.prototype.destroy = function () {
	var movieElement;
	
	try {
		// Make sure Flash is done before we try to remove it
		this.cancelUpload(null, false);
		
		movieElement = this.cleanUp();

		// Remove the SWFUpload DOM nodes
		if (movieElement) {
			// Remove the Movie Element from the page
			try {
				movieElement.parentNode.removeChild(movieElement);
			} catch (ex) {}
		}

		// Remove IE form fix reference
		window[this.movieName] = null;

		// Destroy other references
		SWFUpload.instances[this.movieName] = null;
		delete SWFUpload.instances[this.movieName];

		this.movieElement = null;
		this.settings = null;
		this.customSettings = null;
		this.eventQueue = null;
		this.movieName = null;
		
		
		return true;
	} catch (ex2) {
		return false;
	}
};


// Public: displayDebugInfo prints out settings and configuration
// information about this SWFUpload instance.
// This function (and any references to it) can be deleted when placing
// SWFUpload in production.
SWFUpload.prototype.displayDebugInfo = function () {
	this.debug(
		[
			"---SWFUpload Instance Info---\n",
			"Version: ", SWFUpload.version, "\n",
			"Movie Name: ", this.movieName, "\n",
			"Settings:\n",
			"\t", "upload_url:               ", this.settings.upload_url, "\n",
			"\t", "flash_url:                ", this.settings.flash_url, "\n",
			"\t", "flash9_url:                ", this.settings.flash9_url, "\n",
			"\t", "use_query_string:         ", this.settings.use_query_string.toString(), "\n",
			"\t", "requeue_on_error:         ", this.settings.requeue_on_error.toString(), "\n",
			"\t", "http_success:             ", this.settings.http_success.join(", "), "\n",
			"\t", "assume_success_timeout:   ", this.settings.assume_success_timeout, "\n",
			"\t", "file_post_name:           ", this.settings.file_post_name, "\n",
			"\t", "post_params:              ", this.settings.post_params.toString(), "\n",
			"\t", "file_types:               ", this.settings.file_types, "\n",
			"\t", "file_types_description:   ", this.settings.file_types_description, "\n",
			"\t", "file_size_limit:          ", this.settings.file_size_limit, "\n",
			"\t", "file_upload_limit:        ", this.settings.file_upload_limit, "\n",
			"\t", "file_queue_limit:         ", this.settings.file_queue_limit, "\n",
			"\t", "debug:                    ", this.settings.debug.toString(), "\n",

			"\t", "prevent_swf_caching:      ", this.settings.prevent_swf_caching.toString(), "\n",

			"\t", "button_placeholder_id:    ", this.settings.button_placeholder_id.toString(), "\n",
			"\t", "button_placeholder:       ", (this.settings.button_placeholder ? "Set" : "Not Set"), "\n",
			"\t", "button_image_url:         ", this.settings.button_image_url.toString(), "\n",
			"\t", "button_width:             ", this.settings.button_width.toString(), "\n",
			"\t", "button_height:            ", this.settings.button_height.toString(), "\n",
			"\t", "button_text:              ", this.settings.button_text.toString(), "\n",
			"\t", "button_text_style:        ", this.settings.button_text_style.toString(), "\n",
			"\t", "button_text_top_padding:  ", this.settings.button_text_top_padding.toString(), "\n",
			"\t", "button_text_left_padding: ", this.settings.button_text_left_padding.toString(), "\n",
			"\t", "button_action:            ", this.settings.button_action.toString(), "\n",
			"\t", "button_cursor:            ", this.settings.button_cursor.toString(), "\n",
			"\t", "button_disabled:          ", this.settings.button_disabled.toString(), "\n",

			"\t", "custom_settings:          ", this.settings.custom_settings.toString(), "\n",
			"Event Handlers:\n",
			"\t", "swfupload_preload_handler assigned:  ", (typeof this.settings.swfupload_preload_handler === "function").toString(), "\n",
			"\t", "swfupload_load_failed_handler assigned:  ", (typeof this.settings.swfupload_load_failed_handler === "function").toString(), "\n",
			"\t", "swfupload_loaded_handler assigned:  ", (typeof this.settings.swfupload_loaded_handler === "function").toString(), "\n",
			"\t", "mouse_click_handler assigned:       ", (typeof this.settings.mouse_click_handler === "function").toString(), "\n",
			"\t", "mouse_over_handler assigned:        ", (typeof this.settings.mouse_over_handler === "function").toString(), "\n",
			"\t", "mouse_out_handler assigned:         ", (typeof this.settings.mouse_out_handler === "function").toString(), "\n",
			"\t", "file_dialog_start_handler assigned: ", (typeof this.settings.file_dialog_start_handler === "function").toString(), "\n",
			"\t", "file_queued_handler assigned:       ", (typeof this.settings.file_queued_handler === "function").toString(), "\n",
			"\t", "file_queue_error_handler assigned:  ", (typeof this.settings.file_queue_error_handler === "function").toString(), "\n",
			"\t", "upload_resize_start_handler assigned:      ", (typeof this.settings.upload_resize_start_handler === "function").toString(), "\n",
			"\t", "upload_start_handler assigned:      ", (typeof this.settings.upload_start_handler === "function").toString(), "\n",
			"\t", "upload_progress_handler assigned:   ", (typeof this.settings.upload_progress_handler === "function").toString(), "\n",
			"\t", "upload_error_handler assigned:      ", (typeof this.settings.upload_error_handler === "function").toString(), "\n",
			"\t", "upload_success_handler assigned:    ", (typeof this.settings.upload_success_handler === "function").toString(), "\n",
			"\t", "upload_complete_handler assigned:   ", (typeof this.settings.upload_complete_handler === "function").toString(), "\n",
			"\t", "debug_handler assigned:             ", (typeof this.settings.debug_handler === "function").toString(), "\n",

			"Support:\n",
			"\t", "Load:                     ", (this.support.loading ? "Yes" : "No"), "\n",
			"\t", "Image Resize:             ", (this.support.imageResize ? "Yes" : "No"), "\n"

		].join("")
	);
};

/* Note: addSetting and getSetting are no longer used by SWFUpload but are included
	the maintain v2 API compatibility
*/
// Public: (Deprecated) addSetting adds a setting value. If the value given is undefined or null then the default_value is used.
SWFUpload.prototype.addSetting = function (name, value, default_value) {
    if (value == undefined) {
        return (this.settings[name] = default_value);
    } else {
        return (this.settings[name] = value);
	}
};

// Public: (Deprecated) getSetting gets a setting. Returns an empty string if the setting was not found.
SWFUpload.prototype.getSetting = function (name) {
    if (this.settings[name] != undefined) {
        return this.settings[name];
	}

    return "";
};



// Private: callFlash handles function calls made to the Flash element.
// Calls are made with a setTimeout for some functions to work around
// bugs in the ExternalInterface library.
SWFUpload.prototype.callFlash = function (functionName, argumentArray) {
	var movieElement, returnValue, returnString;
	
	argumentArray = argumentArray || [];
	movieElement = this.getMovieElement();

	// Flash's method if calling ExternalInterface methods (code adapted from MooTools).
	try {
		if (movieElement != undefined) {
			returnString = movieElement.CallFunction('<invoke name="' + functionName + '" returntype="javascript">' + __flash__argumentsToXML(argumentArray, 0) + '</invoke>');
			returnValue = eval(returnString);
		} else {
			this.debug("Can't call flash because the movie wasn't found.");
		}
	} catch (ex) {
		this.debug("Exception calling flash function '" + functionName + "': " + ex.message);
	}
	
	// Unescape file post param values
	if (returnValue != undefined && typeof returnValue.post === "object") {
		returnValue = this.unescapeFilePostParams(returnValue);
	}

	return returnValue;
};

/* *****************************
	-- Flash control methods --
	Your UI should use these
	to operate SWFUpload
   ***************************** */

// WARNING: this function does not work in Flash Player 10
// Public: selectFile causes a File Selection Dialog window to appear.  This
// dialog only allows 1 file to be selected.
SWFUpload.prototype.selectFile = function () {
	this.callFlash("SelectFile");
};

// WARNING: this function does not work in Flash Player 10
// Public: selectFiles causes a File Selection Dialog window to appear/ This
// dialog allows the user to select any number of files
// Flash Bug Warning: Flash limits the number of selectable files based on the combined length of the file names.
// If the selection name length is too long the dialog will fail in an unpredictable manner.  There is no work-around
// for this bug.
SWFUpload.prototype.selectFiles = function () {
	this.callFlash("SelectFiles");
};


// Public: startUpload starts uploading the first file in the queue unless
// the optional parameter 'fileID' specifies the ID 
SWFUpload.prototype.startUpload = function (fileID) {
	this.callFlash("StartUpload", [fileID]);
};

// Public: startUpload starts uploading the first file in the queue unless
// the optional parameter 'fileID' specifies the ID 
SWFUpload.prototype.startResizedUpload = function (fileID, width, height, encoding, quality, allowEnlarging) {
	this.callFlash("StartUpload", [fileID, { "width": width, "height" : height, "encoding" : encoding, "quality" : quality, "allowEnlarging" : allowEnlarging }]);
};

// Public: cancelUpload cancels any queued file.  The fileID parameter may be the file ID or index.
// If you do not specify a fileID the current uploading file or first file in the queue is cancelled.
// If you do not want the uploadError event to trigger you can specify false for the triggerErrorEvent parameter.
SWFUpload.prototype.cancelUpload = function (fileID, triggerErrorEvent) {
	if (triggerErrorEvent !== false) {
		triggerErrorEvent = true;
	}
	this.callFlash("CancelUpload", [fileID, triggerErrorEvent]);
};

// Public: stopUpload stops the current upload and requeues the file at the beginning of the queue.
// If nothing is currently uploading then nothing happens.
SWFUpload.prototype.stopUpload = function () {
	this.callFlash("StopUpload");
};


// Public: requeueUpload requeues any file. If the file is requeued or already queued true is returned.
// If the file is not found or is currently uploading false is returned.  Requeuing a file bypasses the
// file size, queue size, upload limit and other queue checks.  Certain files can't be requeued (e.g, invalid or zero bytes files).
SWFUpload.prototype.requeueUpload = function (indexOrFileID) {
	return this.callFlash("RequeueUpload", [indexOrFileID]);
};


/* ************************
 * Settings methods
 *   These methods change the SWFUpload settings.
 *   SWFUpload settings should not be changed directly on the settings object
 *   since many of the settings need to be passed to Flash in order to take
 *   effect.
 * *********************** */

// Public: getStats gets the file statistics object.
SWFUpload.prototype.getStats = function () {
	return this.callFlash("GetStats");
};

// Public: setStats changes the SWFUpload statistics.  You shouldn't need to 
// change the statistics but you can.  Changing the statistics does not
// affect SWFUpload accept for the successful_uploads count which is used
// by the upload_limit setting to determine how many files the user may upload.
SWFUpload.prototype.setStats = function (statsObject) {
	this.callFlash("SetStats", [statsObject]);
};

// Public: getFile retrieves a File object by ID or Index.  If the file is
// not found then 'null' is returned.
SWFUpload.prototype.getFile = function (fileID) {
	if (typeof(fileID) === "number") {
		return this.callFlash("GetFileByIndex", [fileID]);
	} else {
		return this.callFlash("GetFile", [fileID]);
	}
};

// Public: getFileFromQueue retrieves a File object by ID or Index.  If the file is
// not found then 'null' is returned.
SWFUpload.prototype.getQueueFile = function (fileID) {
	if (typeof(fileID) === "number") {
		return this.callFlash("GetFileByQueueIndex", [fileID]);
	} else {
		return this.callFlash("GetFile", [fileID]);
	}
};


// Public: addFileParam sets a name/value pair that will be posted with the
// file specified by the Files ID.  If the name already exists then the
// exiting value will be overwritten.
SWFUpload.prototype.addFileParam = function (fileID, name, value) {
	return this.callFlash("AddFileParam", [fileID, name, value]);
};

// Public: removeFileParam removes a previously set (by addFileParam) name/value
// pair from the specified file.
SWFUpload.prototype.removeFileParam = function (fileID, name) {
	this.callFlash("RemoveFileParam", [fileID, name]);
};

// Public: setUploadUrl changes the upload_url setting.
SWFUpload.prototype.setUploadURL = function (url) {
	this.settings.upload_url = url.toString();
	this.callFlash("SetUploadURL", [url]);
};

// Public: setPostParams changes the post_params setting
SWFUpload.prototype.setPostParams = function (paramsObject) {
	this.settings.post_params = paramsObject;
	this.callFlash("SetPostParams", [paramsObject]);
};

// Public: addPostParam adds post name/value pair.  Each name can have only one value.
SWFUpload.prototype.addPostParam = function (name, value) {
	this.settings.post_params[name] = value;
	this.callFlash("SetPostParams", [this.settings.post_params]);
};

// Public: removePostParam deletes post name/value pair.
SWFUpload.prototype.removePostParam = function (name) {
	delete this.settings.post_params[name];
	this.callFlash("SetPostParams", [this.settings.post_params]);
};

// Public: setFileTypes changes the file_types setting and the file_types_description setting
SWFUpload.prototype.setFileTypes = function (types, description) {
	this.settings.file_types = types;
	this.settings.file_types_description = description;
	this.callFlash("SetFileTypes", [types, description]);
};

// Public: setFileSizeLimit changes the file_size_limit setting
SWFUpload.prototype.setFileSizeLimit = function (fileSizeLimit) {
	this.settings.file_size_limit = fileSizeLimit;
	this.callFlash("SetFileSizeLimit", [fileSizeLimit]);
};

// Public: setFileUploadLimit changes the file_upload_limit setting
SWFUpload.prototype.setFileUploadLimit = function (fileUploadLimit) {
	this.settings.file_upload_limit = fileUploadLimit;
	this.callFlash("SetFileUploadLimit", [fileUploadLimit]);
};

// Public: setFileQueueLimit changes the file_queue_limit setting
SWFUpload.prototype.setFileQueueLimit = function (fileQueueLimit) {
	this.settings.file_queue_limit = fileQueueLimit;
	this.callFlash("SetFileQueueLimit", [fileQueueLimit]);
};

// Public: setFilePostName changes the file_post_name setting
SWFUpload.prototype.setFilePostName = function (filePostName) {
	this.settings.file_post_name = filePostName;
	this.callFlash("SetFilePostName", [filePostName]);
};

// Public: setUseQueryString changes the use_query_string setting
SWFUpload.prototype.setUseQueryString = function (useQueryString) {
	this.settings.use_query_string = useQueryString;
	this.callFlash("SetUseQueryString", [useQueryString]);
};

// Public: setRequeueOnError changes the requeue_on_error setting
SWFUpload.prototype.setRequeueOnError = function (requeueOnError) {
	this.settings.requeue_on_error = requeueOnError;
	this.callFlash("SetRequeueOnError", [requeueOnError]);
};

// Public: setHTTPSuccess changes the http_success setting
SWFUpload.prototype.setHTTPSuccess = function (http_status_codes) {
	if (typeof http_status_codes === "string") {
		http_status_codes = http_status_codes.replace(" ", "").split(",");
	}
	
	this.settings.http_success = http_status_codes;
	this.callFlash("SetHTTPSuccess", [http_status_codes]);
};

// Public: setHTTPSuccess changes the http_success setting
SWFUpload.prototype.setAssumeSuccessTimeout = function (timeout_seconds) {
	this.settings.assume_success_timeout = timeout_seconds;
	this.callFlash("SetAssumeSuccessTimeout", [timeout_seconds]);
};

// Public: setDebugEnabled changes the debug_enabled setting
SWFUpload.prototype.setDebugEnabled = function (debugEnabled) {
	this.settings.debug_enabled = debugEnabled;
	this.callFlash("SetDebugEnabled", [debugEnabled]);
};

// Public: setButtonImageURL loads a button image sprite
SWFUpload.prototype.setButtonImageURL = function (buttonImageURL) {
	if (buttonImageURL == undefined) {
		buttonImageURL = "";
	}
	
	this.settings.button_image_url = buttonImageURL;
	this.callFlash("SetButtonImageURL", [buttonImageURL]);
};

// Public: setButtonDimensions resizes the Flash Movie and button
SWFUpload.prototype.setButtonDimensions = function (width, height) {
	this.settings.button_width = width;
	this.settings.button_height = height;
	
	var movie = this.getMovieElement();
	if (movie != undefined) {
		movie.style.width = width + "px";
		movie.style.height = height + "px";
	}
	
	this.callFlash("SetButtonDimensions", [width, height]);
};
// Public: setButtonText Changes the text overlaid on the button
SWFUpload.prototype.setButtonText = function (html) {
	this.settings.button_text = html;
	this.callFlash("SetButtonText", [html]);
};
// Public: setButtonTextPadding changes the top and left padding of the text overlay
SWFUpload.prototype.setButtonTextPadding = function (left, top) {
	this.settings.button_text_top_padding = top;
	this.settings.button_text_left_padding = left;
	this.callFlash("SetButtonTextPadding", [left, top]);
};

// Public: setButtonTextStyle changes the CSS used to style the HTML/Text overlaid on the button
SWFUpload.prototype.setButtonTextStyle = function (css) {
	this.settings.button_text_style = css;
	this.callFlash("SetButtonTextStyle", [css]);
};
// Public: setButtonDisabled disables/enables the button
SWFUpload.prototype.setButtonDisabled = function (isDisabled) {
	this.settings.button_disabled = isDisabled;
	this.callFlash("SetButtonDisabled", [isDisabled]);
};
// Public: setButtonAction sets the action that occurs when the button is clicked
SWFUpload.prototype.setButtonAction = function (buttonAction) {
	this.settings.button_action = buttonAction;
	this.callFlash("SetButtonAction", [buttonAction]);
};

// Public: setButtonCursor changes the mouse cursor displayed when hovering over the button
SWFUpload.prototype.setButtonCursor = function (cursor) {
	this.settings.button_cursor = cursor;
	this.callFlash("SetButtonCursor", [cursor]);
};

/* *******************************
	Flash Event Interfaces
	These functions are used by Flash to trigger the various
	events.
	
	All these functions a Private.
	
	Because the ExternalInterface library is buggy the event calls
	are added to a queue and the queue then executed by a setTimeout.
	This ensures that events are executed in a determinate order and that
	the ExternalInterface bugs are avoided.
******************************* */

SWFUpload.prototype.queueEvent = function (handlerName, argumentArray) {
	// Warning: Don't call this.debug inside here or you'll create an infinite loop
	var self = this;
	
	if (argumentArray == undefined) {
		argumentArray = [];
	} else if (!(argumentArray instanceof Array)) {
		argumentArray = [argumentArray];
	}
	
	if (typeof this.settings[handlerName] === "function") {
		// Queue the event
		this.eventQueue.push(function () {
			this.settings[handlerName].apply(this, argumentArray);
		});
		
		// Execute the next queued event
		setTimeout(function () {
			self.executeNextEvent();
		}, 0);
		
	} else if (this.settings[handlerName] !== null) {
		throw "Event handler " + handlerName + " is unknown or is not a function";
	}
};

// Private: Causes the next event in the queue to be executed.  Since events are queued using a setTimeout
// we must queue them in order to garentee that they are executed in order.
SWFUpload.prototype.executeNextEvent = function () {
	// Warning: Don't call this.debug inside here or you'll create an infinite loop

	var  f = this.eventQueue ? this.eventQueue.shift() : null;
	if (typeof(f) === "function") {
		f.apply(this);
	}
};

// Private: unescapeFileParams is part of a workaround for a flash bug where objects passed through ExternalInterface cannot have
// properties that contain characters that are not valid for JavaScript identifiers. To work around this
// the Flash Component escapes the parameter names and we must unescape again before passing them along.
SWFUpload.prototype.unescapeFilePostParams = function (file) {
	var reg = /[$]([0-9a-f]{4})/i, unescapedPost = {}, uk, k, match;

	if (file != undefined) {
		for (k in file.post) {
			if (file.post.hasOwnProperty(k)) {
				uk = k;
				while ((match = reg.exec(uk)) !== null) {
					uk = uk.replace(match[0], String.fromCharCode(parseInt("0x" + match[1], 16)));
				}
				unescapedPost[uk] = file.post[k];
			}
		}

		file.post = unescapedPost;
	}

	return file;
};

// Private: This event is called by SWFUpload Init after we've determined what the user's Flash Player supports.
// Use the swfupload_preload_handler event setting to execute custom code when SWFUpload has loaded.
// Return false to prevent SWFUpload from loading and allow your script to do something else if your required feature is
// not supported
SWFUpload.prototype.swfuploadPreload = function () {
	var returnValue;
	if (typeof this.settings.swfupload_preload_handler === "function") {
		returnValue = this.settings.swfupload_preload_handler.call(this);
	} else if (this.settings.swfupload_preload_handler != undefined) {
		throw "upload_start_handler must be a function";
	}

	// Convert undefined to true so if nothing is returned from the upload_start_handler it is
	// interpretted as 'true'.
	if (returnValue === undefined) {
		returnValue = true;
	}
	
	return !!returnValue;
}

// Private: This event is called by Flash when it has finished loading. Don't modify this.
// Use the swfupload_loaded_handler event setting to execute custom code when SWFUpload has loaded.
SWFUpload.prototype.flashReady = function () {
	// Check that the movie element is loaded correctly with its ExternalInterface methods defined
	var movieElement = 	this.cleanUp();

	if (!movieElement) {
		this.debug("Flash called back ready but the flash movie can't be found.");
		return;
	}

	this.queueEvent("swfupload_loaded_handler");
};

// Private: removes Flash added fuctions to the DOM node to prevent memory leaks in IE.
// This function is called by Flash each time the ExternalInterface functions are created.
SWFUpload.prototype.cleanUp = function () {
	var key, movieElement = this.getMovieElement();
	
	// Pro-actively unhook all the Flash functions
	try {
		if (movieElement && typeof(movieElement.CallFunction) === "unknown") { // We only want to do this in IE
			this.debug("Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)");
			for (key in movieElement) {
				try {
					if (typeof(movieElement[key]) === "function") {
						movieElement[key] = null;
					}
				} catch (ex) {
				}
			}
		}
	} catch (ex1) {
	
	}

	// Fix Flashes own cleanup code so if the SWF Movie was removed from the page
	// it doesn't display errors.
	window["__flash__removeCallback"] = function (instance, name) {
		try {
			if (instance) {
				instance[name] = null;
			}
		} catch (flashEx) {
		
		}
	};
	
	return movieElement;
};

/* When the button_action is set to None this event gets fired and executes the mouse_click_handler */
SWFUpload.prototype.mouseClick = function () {
	this.queueEvent("mouse_click_handler");
};
SWFUpload.prototype.mouseOver = function () {
	this.queueEvent("mouse_over_handler");
};
SWFUpload.prototype.mouseOut = function () {
	this.queueEvent("mouse_out_handler");
};

/* This is a chance to do something before the browse window opens */
SWFUpload.prototype.fileDialogStart = function () {
	this.queueEvent("file_dialog_start_handler");
};


/* Called when a file is successfully added to the queue. */
SWFUpload.prototype.fileQueued = function (file) {
	file = this.unescapeFilePostParams(file);
	this.queueEvent("file_queued_handler", file);
};


/* Handle errors that occur when an attempt to queue a file fails. */
SWFUpload.prototype.fileQueueError = function (file, errorCode, message) {
	file = this.unescapeFilePostParams(file);
	this.queueEvent("file_queue_error_handler", [file, errorCode, message]);
};

/* Called after the file dialog has closed and the selected files have been queued.
	You could call startUpload here if you want the queued files to begin uploading immediately. */
SWFUpload.prototype.fileDialogComplete = function (numFilesSelected, numFilesQueued, numFilesInQueue) {
	this.queueEvent("file_dialog_complete_handler", [numFilesSelected, numFilesQueued, numFilesInQueue]);
};

SWFUpload.prototype.uploadResizeStart = function (file, resizeSettings) {
	file = this.unescapeFilePostParams(file);
	this.queueEvent("upload_resize_start_handler", [file, resizeSettings.width, resizeSettings.height, resizeSettings.encoding, resizeSettings.quality]);
};

SWFUpload.prototype.uploadStart = function (file) {
	file = this.unescapeFilePostParams(file);
	this.queueEvent("return_upload_start_handler", file);
};

SWFUpload.prototype.returnUploadStart = function (file) {
	var returnValue;
	if (typeof this.settings.upload_start_handler === "function") {
		file = this.unescapeFilePostParams(file);
		returnValue = this.settings.upload_start_handler.call(this, file);
	} else if (this.settings.upload_start_handler != undefined) {
		throw "upload_start_handler must be a function";
	}

	// Convert undefined to true so if nothing is returned from the upload_start_handler it is
	// interpretted as 'true'.
	if (returnValue === undefined) {
		returnValue = true;
	}
	
	returnValue = !!returnValue;
	
	this.callFlash("ReturnUploadStart", [returnValue]);
};



SWFUpload.prototype.uploadProgress = function (file, bytesComplete, bytesTotal) {
	file = this.unescapeFilePostParams(file);
	this.queueEvent("upload_progress_handler", [file, bytesComplete, bytesTotal]);
};

SWFUpload.prototype.uploadError = function (file, errorCode, message) {
	file = this.unescapeFilePostParams(file);
	this.queueEvent("upload_error_handler", [file, errorCode, message]);
};

SWFUpload.prototype.uploadSuccess = function (file, serverData, responseReceived) {
	file = this.unescapeFilePostParams(file);
	this.queueEvent("upload_success_handler", [file, serverData, responseReceived]);
};

SWFUpload.prototype.uploadComplete = function (file) {
	file = this.unescapeFilePostParams(file);
	this.queueEvent("upload_complete_handler", file);
};

/* Called by SWFUpload JavaScript and Flash functions when debug is enabled. By default it writes messages to the
   internal debug console.  You can override this event and have messages written where you want. */
SWFUpload.prototype.debug = function (message) {
	this.queueEvent("debug_handler", message);
};


/* **********************************
	Debug Console
	The debug console is a self contained, in page location
	for debug message to be sent.  The Debug Console adds
	itself to the body if necessary.

	The console is automatically scrolled as messages appear.
	
	If you are using your own debug handler or when you deploy to production and
	have debug disabled you can remove these functions to reduce the file size
	and complexity.
********************************** */
   
// Private: debugMessage is the default debug_handler.  If you want to print debug messages
// call the debug() function.  When overriding the function your own function should
// check to see if the debug setting is true before outputting debug information.
SWFUpload.prototype.debugMessage = function (message) {
	var exceptionMessage, exceptionValues, key;

	if (this.settings.debug) {
		exceptionValues = [];

		// Check for an exception object and print it nicely
		if (typeof message === "object" && typeof message.name === "string" && typeof message.message === "string") {
			for (key in message) {
				if (message.hasOwnProperty(key)) {
					exceptionValues.push(key + ": " + message[key]);
				}
			}
			exceptionMessage = exceptionValues.join("\n") || "";
			exceptionValues = exceptionMessage.split("\n");
			exceptionMessage = "EXCEPTION: " + exceptionValues.join("\nEXCEPTION: ");
			SWFUpload.Console.writeLine(exceptionMessage);
		} else {
			SWFUpload.Console.writeLine(message);
		}
	}
};

SWFUpload.Console = {};
SWFUpload.Console.writeLine = function (message) {
	var console, documentForm;

	try {
		console = document.getElementById("SWFUpload_Console");

		if (!console) {
			documentForm = document.createElement("form");
			document.getElementsByTagName("body")[0].appendChild(documentForm);

			console = document.createElement("textarea");
			console.id = "SWFUpload_Console";
			console.style.fontFamily = "monospace";
			console.setAttribute("wrap", "off");
			console.wrap = "off";
			console.style.overflow = "auto";
			console.style.width = "700px";
			console.style.height = "350px";
			console.style.margin = "5px";
			documentForm.appendChild(console);
		}

		console.value += message + "\n";

		console.scrollTop = console.scrollHeight - console.clientHeight;
	} catch (ex) {
		alert("Exception: " + ex.name + " Message: " + ex.message);
	}
};


/*	SWFObject v2.2 <http://code.google.com/p/swfobject/> 
	is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> 
*/
swfobject = function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}();
swfobject.addDomLoadEvent(function () {
	if (typeof(SWFUpload.onload) === "function") {
		SWFUpload.onload.call(window);
	}
});


/* 
*  Mouse wheel support for OS X - implemented in javascript because Adobe
*  hasn't implemented it in the mac version of Flash Player  >:(
*  
*  Copyright (c) 2007-2008 Ali Rantakari ( http://hasseg.org/blog )
*  
*  Requires related ActionScript 3 class:
*  org.hasseg.externalMouseWheel.ExternalMouseWheelSupport
*  
*  
*  Changelog:
*  ---------------------------------------------------------------------------------
*  VERSION 1.0 (Ali Rantakari)
*  July 2007
*  
*  - Initial implementation
*  
*  
*  ---------------------------------------------------------------------------------
*  VERSION 1.5 (Changes by Pavel Fljot, http://inreflected.com)
*  Jan 2008
*  
*  - Added statement to support Safari under Windows
*  
*  
*  ---------------------------------------------------------------------------------
*  VERSION 2.0 (Changes by Ali Rantakari)
*  Apr 2008
*  
*  - Changed structure of JavaScript so that everything is encapsulated
*    inside one top-level function
*  - Added support for modifier keys (ctrl (i.e. command on a Mac,) alt, shift)
*  - Fixed code for determining coordinates on different (recent) browsers
*  - Added support for registering multiple Flash objects and their container DIVs
*  
*  
*  ---------------------------------------------------
*  This code is licensed under the MIT License:
*  
*  Permission is hereby granted, free of charge, to any person obtaining a copy
*  of this software and associated documentation files (the "Software"), to deal
*  in the Software without restriction, including without limitation the rights
*  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
*  copies of the Software, and to permit persons to whom the Software is
*  furnished to do so, subject to the following conditions:
*  
*  The above copyright notice and this permission notice shall be included in
*  all copies or substantial portions of the Software.
*  
*  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
*  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
*  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
*  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
*  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
*  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
*  THE SOFTWARE.
*/

var extMouseWheel = function()
{
	// let's not allow other deltas than +/- 3 because that's what flash player does:
	var keepDeltaAtPlusMinusThree = true;
	
	
	// an associative array, where the keys are the ids of flash
	// objects that have registered for the mouse wheel support, and
	// the values their respective container div elements.
	var f = [];
	
	
	
	
	// helper function courtesy of the Adobe peepz
	var thisMovie = function(movieName)
	{
		if (navigator.appName.indexOf("Microsoft") != -1) {
			return window[movieName];
		} else {
			return document[movieName];
		}
	}
	
	// helper functions for getting the position of
	// an element
	// from:  http://blog.firetree.net/2005/07/04/javascript-find-position/
	var findPosX = function(obj)
	{
		var curleft = 0;
		if(obj.offsetParent)
			while(1) 
			{
			  curleft += obj.offsetLeft;
			  if(!obj.offsetParent)
				break;
			  obj = obj.offsetParent;
			}
		else if(obj.x)
			curleft += obj.x;
		return curleft;
	}
	var findPosY = function(obj)
	{
		var curtop = 0;
		if(obj.offsetParent)
			while(1)
			{
			  curtop += obj.offsetTop;
			  if(!obj.offsetParent)
				break;
			  obj = obj.offsetParent;
			}
		else if(obj.y)
			curtop += obj.y;
		return curtop;
	}
	
	// helper function for searching the user-agent string
	var uaContains = function(str)
	{
		return (navigator.userAgent.indexOf(str) != -1);
	}
	
	
	
	
	
	
	// Handler for mouse wheel event:
	var onWheelHandler = function(event)
	{
		var delta = 0;
		if (!event) event = window.event;
		if (event.wheelDelta)
		{
			// Safari
			delta = event.wheelDelta/120;
			if (window.opera) delta = -delta;
		}
		else if (event.detail) // Firefox
			delta = -event.detail*3;
		
		if (keepDeltaAtPlusMinusThree)
		{
			if (delta > 0) delta = 3;
			else if (delta == 0) delta = 0;
			else delta = -3;
		}
		
		if (delta)
		{
			
			var thisFlashMovieId = null;
			for (var j in f)
				if (f[j] != null && f[j] == event.currentTarget) thisFlashMovieId = j;
			
			var thisMouse;
			
			if (uaContains("Camino"))
				thisMouse = {x:event.layerX, y:event.layerY};
			else if (uaContains('Firefox'))
				thisMouse = {x:(event.layerX - findPosX(event.currentTarget)), y:(event.layerY - findPosY(event.currentTarget))};
			else
				thisMouse = {x:event.offsetX, y:event.offsetY};
			
			thisMouse.ctrlKey = (uaContains('Mac')) ? (event.metaKey || event.ctrlKey) : event.ctrlKey;
			thisMouse.altKey = event.altKey;
			thisMouse.shiftKey = event.shiftKey;
			thisMouse.buttonDown = false;
			
			if (thisMovie(thisFlashMovieId).dispatchExternalMouseWheelEvent)
				thisMovie(thisFlashMovieId).dispatchExternalMouseWheelEvent(delta, thisMouse.x, thisMouse.y,
																			thisMouse.ctrlKey, thisMouse.altKey,
																			thisMouse.shiftKey, thisMouse.buttonDown);
		};
		
		// Prevent default actions caused by mouse wheel
		if (event.preventDefault) event.preventDefault();
		event.returnValue = false;
		
	}
	
	
	
	
	
	
	
	
	
	return {
		// initialize mouse wheel capturing by setting the listener
		// (this is called from within the Flash app):
		initCaptureFor: function(aFlashObjectId)
		{
			if (uaContains('Mac') || uaContains('Safari'))
			{
				// find flash object's div container
				var parentdiv = document.getElementById(aFlashObjectId).parentNode;
				while(parentdiv != null && parentdiv.nodeName != "DIV")
					parentdiv = parentdiv.parentNode;
				
				if (parentdiv != undefined && parentdiv != null)
				{
					f[aFlashObjectId] = parentdiv;
					
					if (parentdiv.addEventListener) parentdiv.addEventListener('DOMMouseScroll', onWheelHandler, false); // Firefox
					parentdiv.onmousewheel = onWheelHandler; // Safari
					
					return true;
				}
				else
					return false;
			}
			else
				return false;
		}
	};
	
}();











/*	SWFObject v2.2 <http://code.google.com/p/swfobject/> 
	is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> 
*/
var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}();

/*!
 * jQuery JavaScript Library v1.4.2
 * http://jquery.com/
 *
 * Copyright 2010, John Resig
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * Includes Sizzle.js
 * http://sizzlejs.com/
 * Copyright 2010, The Dojo Foundation
 * Released under the MIT, BSD, and GPL Licenses.
 *
 * Date: Sat Feb 13 22:33:48 2010 -0500
 */
(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);


/*
 * jQuery UI 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI
 */
jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css("overflow")=="hidden"){return false}var j=(k&&k=="left")?"scrollLeft":"scrollTop",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/*
 * jQuery UI Draggable 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Draggables
 *
 * Depends:
 *	ui.core.js
 */
(function(a){a.widget("ui.draggable",a.extend({},a.ui.mouse,{_init:function(){if(this.options.helper=="original"&&!(/^(?:r|a|f)/).test(this.element.css("position"))){this.element[0].style.position="relative"}(this.options.addClasses&&this.element.addClass("ui-draggable"));(this.options.disabled&&this.element.addClass("ui-draggable-disabled"));this._mouseInit()},destroy:function(){if(!this.element.data("draggable")){return}this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy()},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle")){return false}this.handle=this._getHandle(b);if(!this.handle){return false}return true},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b);this._cacheHelperProportions();if(a.ui.ddmanager){a.ui.ddmanager.current=this}this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(b);this.originalPageX=b.pageX;this.originalPageY=b.pageY;if(c.cursorAt){this._adjustOffsetFromHelper(c.cursorAt)}if(c.containment){this._setContainment()}this._trigger("start",b);this._cacheHelperProportions();if(a.ui.ddmanager&&!c.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,b)}this.helper.addClass("ui-draggable-dragging");this._mouseDrag(b,true);return true},_mouseDrag:function(b,d){this.position=this._generatePosition(b);this.positionAbs=this._convertPositionTo("absolute");if(!d){var c=this._uiHash();this._trigger("drag",b,c);this.position=c.position}if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}if(a.ui.ddmanager){a.ui.ddmanager.drag(this,b)}return false},_mouseStop:function(c){var d=false;if(a.ui.ddmanager&&!this.options.dropBehaviour){d=a.ui.ddmanager.drop(this,c)}if(this.dropped){d=this.dropped;this.dropped=false}if((this.options.revert=="invalid"&&!d)||(this.options.revert=="valid"&&d)||this.options.revert===true||(a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d))){var b=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){b._trigger("stop",c);b._clear()})}else{this._trigger("stop",c);this._clear()}return false},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==b.target){c=true}});return c},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c])):(d.helper=="clone"?this.element.clone():this.element);if(!b.parents("body").length){b.appendTo((d.appendTo=="parent"?this.element[0].parentNode:d.appendTo))}if(b[0]!=this.element[0]&&!(/(fixed|absolute)/).test(b.css("position"))){b.css("position","absolute")}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.element.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.element.css("marginLeft"),10)||0),top:(parseInt(this.element.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)&&e.containment.constructor!=Array){var c=a(e.containment)[0];if(!c){return}var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}else{if(e.containment.constructor==Array){this.containment=e.containment}}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");if(this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval){this.helper.remove()}this.helper=null;this.cancelHelperRemoval=false},_trigger:function(b,c,d){d=d||this._uiHash();a.ui.plugin.call(this,b,[c,d]);if(b=="drag"){this.positionAbs=this._convertPositionTo("absolute")}return a.widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(b){return{helper:this.helper,position:this.position,absolutePosition:this.positionAbs,offset:this.positionAbs}}}));a.extend(a.ui.draggable,{version:"1.7.2",eventPrefix:"drag",defaults:{addClasses:true,appendTo:"parent",axis:false,cancel:":input,option",connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,delay:0,distance:1,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false}});a.ui.plugin.add("draggable","connectToSortable",{start:function(c,e){var d=a(this).data("draggable"),f=d.options,b=a.extend({},e,{item:d.element});d.sortables=[];a(f.connectToSortable).each(function(){var g=a.data(this,"sortable");if(g&&!g.options.disabled){d.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",c,b)}})},stop:function(c,e){var d=a(this).data("draggable"),b=a.extend({},e,{item:d.element});a.each(d.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;d.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert){this.instance.options.revert=true}this.instance._mouseStop(c);this.instance.options.helper=this.instance.options._helper;if(d.options.helper=="original"){this.instance.currentItem.css({top:"auto",left:"auto"})}}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",c,b)}})},drag:function(c,f){var e=a(this).data("draggable"),b=this;var d=function(i){var n=this.offset.click.top,m=this.offset.click.left;var g=this.positionAbs.top,k=this.positionAbs.left;var j=i.height,l=i.width;var p=i.top,h=i.left;return a.ui.isOver(g+n,k+m,p,h,j,l)};a.each(e.sortables,function(g){this.instance.positionAbs=e.positionAbs;this.instance.helperProportions=e.helperProportions;this.instance.offset.click=e.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=a(b).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return f.helper[0]};c.target=this.instance.currentItem[0];this.instance._mouseCapture(c,true);this.instance._mouseStart(c,true,true);this.instance.offset.click.top=e.offset.click.top;this.instance.offset.click.left=e.offset.click.left;this.instance.offset.parent.left-=e.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=e.offset.parent.top-this.instance.offset.parent.top;e._trigger("toSortable",c);e.dropped=this.instance.element;e.currentItem=e.element;this.instance.fromOutside=e}if(this.instance.currentItem){this.instance._mouseDrag(c)}}else{if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",c,this.instance._uiHash(this.instance));this.instance._mouseStop(c,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();if(this.instance.placeholder){this.instance.placeholder.remove()}e._trigger("fromSortable",c);e.dropped=false}}})}});a.ui.plugin.add("draggable","cursor",{start:function(c,d){var b=a("body"),e=a(this).data("draggable").options;if(b.css("cursor")){e._cursor=b.css("cursor")}b.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._cursor){a("body").css("cursor",d._cursor)}}});a.ui.plugin.add("draggable","iframeFix",{start:function(b,c){var d=a(this).data("draggable").options;a(d.iframeFix===true?"iframe":d.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1000}).css(a(this).offset()).appendTo("body")})},stop:function(b,c){a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});a.ui.plugin.add("draggable","opacity",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("opacity")){e._opacity=b.css("opacity")}b.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._opacity){a(c.helper).css("opacity",d._opacity)}}});a.ui.plugin.add("draggable","scroll",{start:function(c,d){var b=a(this).data("draggable");if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){b.overflowOffset=b.scrollParent.offset()}},drag:function(d,e){var c=a(this).data("draggable"),f=c.options,b=false;if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML"){if(!f.axis||f.axis!="x"){if((c.overflowOffset.top+c.scrollParent[0].offsetHeight)-d.pageY<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop+f.scrollSpeed}else{if(d.pageY-c.overflowOffset.top<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop-f.scrollSpeed}}}if(!f.axis||f.axis!="y"){if((c.overflowOffset.left+c.scrollParent[0].offsetWidth)-d.pageX<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft+f.scrollSpeed}else{if(d.pageX-c.overflowOffset.left<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft-f.scrollSpeed}}}}else{if(!f.axis||f.axis!="x"){if(d.pageY-a(document).scrollTop()<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-f.scrollSpeed)}else{if(a(window).height()-(d.pageY-a(document).scrollTop())<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+f.scrollSpeed)}}}if(!f.axis||f.axis!="y"){if(d.pageX-a(document).scrollLeft()<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-f.scrollSpeed)}else{if(a(window).width()-(d.pageX-a(document).scrollLeft())<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+f.scrollSpeed)}}}}if(b!==false&&a.ui.ddmanager&&!f.dropBehaviour){a.ui.ddmanager.prepareOffsets(c,d)}}});a.ui.plugin.add("draggable","snap",{start:function(c,d){var b=a(this).data("draggable"),e=b.options;b.snapElements=[];a(e.snap.constructor!=String?(e.snap.items||":data(draggable)"):e.snap).each(function(){var g=a(this);var f=g.offset();if(this!=b.element[0]){b.snapElements.push({item:this,width:g.outerWidth(),height:g.outerHeight(),top:f.top,left:f.left})}})},drag:function(u,p){var g=a(this).data("draggable"),q=g.options;var y=q.snapTolerance;var x=p.offset.left,w=x+g.helperProportions.width,f=p.offset.top,e=f+g.helperProportions.height;for(var v=g.snapElements.length-1;v>=0;v--){var s=g.snapElements[v].left,n=s+g.snapElements[v].width,m=g.snapElements[v].top,A=m+g.snapElements[v].height;if(!((s-y<x&&x<n+y&&m-y<f&&f<A+y)||(s-y<x&&x<n+y&&m-y<e&&e<A+y)||(s-y<w&&w<n+y&&m-y<f&&f<A+y)||(s-y<w&&w<n+y&&m-y<e&&e<A+y))){if(g.snapElements[v].snapping){(g.options.snap.release&&g.options.snap.release.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=false;continue}if(q.snapMode!="inner"){var c=Math.abs(m-e)<=y;var z=Math.abs(A-f)<=y;var j=Math.abs(s-w)<=y;var k=Math.abs(n-x)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m-g.helperProportions.height,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s-g.helperProportions.width}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n}).left-g.margins.left}}var h=(c||z||j||k);if(q.snapMode!="outer"){var c=Math.abs(m-f)<=y;var z=Math.abs(A-e)<=y;var j=Math.abs(s-x)<=y;var k=Math.abs(n-w)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A-g.helperProportions.height,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n-g.helperProportions.width}).left-g.margins.left}}if(!g.snapElements[v].snapping&&(c||z||j||k||h)){(g.options.snap.snap&&g.options.snap.snap.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=(c||z||j||k||h)}}});a.ui.plugin.add("draggable","stack",{start:function(b,c){var e=a(this).data("draggable").options;var d=a.makeArray(a(e.stack.group)).sort(function(g,f){return(parseInt(a(g).css("zIndex"),10)||e.stack.min)-(parseInt(a(f).css("zIndex"),10)||e.stack.min)});a(d).each(function(f){this.style.zIndex=e.stack.min+f});this[0].style.zIndex=e.stack.min+d.length}});a.ui.plugin.add("draggable","zIndex",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("zIndex")){e._zIndex=b.css("zIndex")}b.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._zIndex){a(c.helper).css("zIndex",d._zIndex)}}})})(jQuery);;/*
 * jQuery UI Droppable 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Droppables
 *
 * Depends:
 *	ui.core.js
 *	ui.draggable.js
 */
(function(a){a.widget("ui.droppable",{_init:function(){var c=this.options,b=c.accept;this.isover=0;this.isout=1;this.options.accept=this.options.accept&&a.isFunction(this.options.accept)?this.options.accept:function(e){return e.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};a.ui.ddmanager.droppables[this.options.scope]=a.ui.ddmanager.droppables[this.options.scope]||[];a.ui.ddmanager.droppables[this.options.scope].push(this);(this.options.addClasses&&this.element.addClass("ui-droppable"))},destroy:function(){var b=a.ui.ddmanager.droppables[this.options.scope];for(var c=0;c<b.length;c++){if(b[c]==this){b.splice(c,1)}}this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable")},_setData:function(b,c){if(b=="accept"){this.options.accept=c&&a.isFunction(c)?c:function(e){return e.is(c)}}else{a.widget.prototype._setData.apply(this,arguments)}},_activate:function(c){var b=a.ui.ddmanager.current;if(this.options.activeClass){this.element.addClass(this.options.activeClass)}(b&&this._trigger("activate",c,this.ui(b)))},_deactivate:function(c){var b=a.ui.ddmanager.current;if(this.options.activeClass){this.element.removeClass(this.options.activeClass)}(b&&this._trigger("deactivate",c,this.ui(b)))},_over:function(c){var b=a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return}if(this.options.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.hoverClass){this.element.addClass(this.options.hoverClass)}this._trigger("over",c,this.ui(b))}},_out:function(c){var b=a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return}if(this.options.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.hoverClass){this.element.removeClass(this.options.hoverClass)}this._trigger("out",c,this.ui(b))}},_drop:function(c,d){var b=d||a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return false}var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var f=a.data(this,"droppable");if(f.options.greedy&&a.ui.intersect(b,a.extend(f,{offset:f.element.offset()}),f.options.tolerance)){e=true;return false}});if(e){return false}if(this.options.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.activeClass){this.element.removeClass(this.options.activeClass)}if(this.options.hoverClass){this.element.removeClass(this.options.hoverClass)}this._trigger("drop",c,this.ui(b));return this.element}return false},ui:function(b){return{draggable:(b.currentItem||b.element),helper:b.helper,position:b.position,absolutePosition:b.positionAbs,offset:b.positionAbs}}});a.extend(a.ui.droppable,{version:"1.7.2",eventPrefix:"drop",defaults:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"}});a.ui.intersect=function(q,j,o){if(!j.offset){return false}var e=(q.positionAbs||q.position.absolute).left,d=e+q.helperProportions.width,n=(q.positionAbs||q.position.absolute).top,m=n+q.helperProportions.height;var g=j.offset.left,c=g+j.proportions.width,p=j.offset.top,k=p+j.proportions.height;switch(o){case"fit":return(g<e&&d<c&&p<n&&m<k);break;case"intersect":return(g<e+(q.helperProportions.width/2)&&d-(q.helperProportions.width/2)<c&&p<n+(q.helperProportions.height/2)&&m-(q.helperProportions.height/2)<k);break;case"pointer":var h=((q.positionAbs||q.position.absolute).left+(q.clickOffset||q.offset.click).left),i=((q.positionAbs||q.position.absolute).top+(q.clickOffset||q.offset.click).top),f=a.ui.isOver(i,h,p,g,j.proportions.height,j.proportions.width);return f;break;case"touch":return((n>=p&&n<=k)||(m>=p&&m<=k)||(n<p&&m>k))&&((e>=g&&e<=c)||(d>=g&&d<=c)||(e<g&&d>c));break;default:return false;break}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,g){var b=a.ui.ddmanager.droppables[e.options.scope];var f=g?g.type:null;var h=(e.currentItem||e.element).find(":data(droppable)").andSelf();droppablesLoop:for(var d=0;d<b.length;d++){if(b[d].options.disabled||(e&&!b[d].options.accept.call(b[d].element[0],(e.currentItem||e.element)))){continue}for(var c=0;c<h.length;c++){if(h[c]==b[d].element[0]){b[d].proportions.height=0;continue droppablesLoop}}b[d].visible=b[d].element.css("display")!="none";if(!b[d].visible){continue}b[d].offset=b[d].element.offset();b[d].proportions={width:b[d].element[0].offsetWidth,height:b[d].element[0].offsetHeight};if(f=="mousedown"){b[d]._activate.call(b[d],g)}}},drop:function(b,c){var d=false;a.each(a.ui.ddmanager.droppables[b.options.scope],function(){if(!this.options){return}if(!this.options.disabled&&this.visible&&a.ui.intersect(b,this,this.options.tolerance)){d=this._drop.call(this,c)}if(!this.options.disabled&&this.visible&&this.options.accept.call(this.element[0],(b.currentItem||b.element))){this.isout=1;this.isover=0;this._deactivate.call(this,c)}});return d},drag:function(b,c){if(b.options.refreshPositions){a.ui.ddmanager.prepareOffsets(b,c)}a.each(a.ui.ddmanager.droppables[b.options.scope],function(){if(this.options.disabled||this.greedyChild||!this.visible){return}var e=a.ui.intersect(b,this,this.options.tolerance);var g=!e&&this.isover==1?"isout":(e&&this.isover==0?"isover":null);if(!g){return}var f;if(this.options.greedy){var d=this.element.parents(":data(droppable):eq(0)");if(d.length){f=a.data(d[0],"droppable");f.greedyChild=(g=="isover"?1:0)}}if(f&&g=="isover"){f.isover=0;f.isout=1;f._out.call(f,c)}this[g]=1;this[g=="isout"?"isover":"isout"]=0;this[g=="isover"?"_over":"_out"].call(this,c);if(f&&g=="isout"){f.isout=0;f.isover=1;f._over.call(f,c)}})}}})(jQuery);;/*
 * jQuery UI Sortable 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Sortables
 *
 * Depends:
 *	ui.core.js
 */
(function(a){a.widget("ui.sortable",a.extend({},a.ui.mouse,{_init:function(){var b=this.options;this.containerCache={};this.element.addClass("ui-sortable");this.refresh();this.floating=this.items.length?(/left|right/).test(this.items[0].item.css("float")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var b=this.items.length-1;b>=0;b--){this.items[b].item.removeData("sortable-item")}},_mouseCapture:function(e,f){if(this.reverting){return false}if(this.options.disabled||this.options.type=="static"){return false}this._refreshItems(e);var d=null,c=this,b=a(e.target).parents().each(function(){if(a.data(this,"sortable-item")==c){d=a(this);return false}});if(a.data(e.target,"sortable-item")==c){d=a(e.target)}if(!d){return false}if(this.options.handle&&!f){var g=false;a(this.options.handle,d).find("*").andSelf().each(function(){if(this==e.target){g=true}});if(!g){return false}}this.currentItem=d;this._removeCurrentsFromItems();return true},_mouseStart:function(e,f,b){var g=this.options,c=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(e);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(e);this.originalPageX=e.pageX;this.originalPageY=e.pageY;if(g.cursorAt){this._adjustOffsetFromHelper(g.cursorAt)}this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};if(this.helper[0]!=this.currentItem[0]){this.currentItem.hide()}this._createPlaceholder();if(g.containment){this._setContainment()}if(g.cursor){if(a("body").css("cursor")){this._storedCursor=a("body").css("cursor")}a("body").css("cursor",g.cursor)}if(g.opacity){if(this.helper.css("opacity")){this._storedOpacity=this.helper.css("opacity")}this.helper.css("opacity",g.opacity)}if(g.zIndex){if(this.helper.css("zIndex")){this._storedZIndex=this.helper.css("zIndex")}this.helper.css("zIndex",g.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){this.overflowOffset=this.scrollParent.offset()}this._trigger("start",e,this._uiHash());if(!this._preserveHelperProportions){this._cacheHelperProportions()}if(!b){for(var d=this.containers.length-1;d>=0;d--){this.containers[d]._trigger("activate",e,c._uiHash(this))}}if(a.ui.ddmanager){a.ui.ddmanager.current=this}if(a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,e)}this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(e);return true},_mouseDrag:function(f){this.position=this._generatePosition(f);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs){this.lastPositionAbs=this.positionAbs}if(this.options.scroll){var g=this.options,b=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if((this.overflowOffset.top+this.scrollParent[0].offsetHeight)-f.pageY<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop+g.scrollSpeed}else{if(f.pageY-this.overflowOffset.top<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop-g.scrollSpeed}}if((this.overflowOffset.left+this.scrollParent[0].offsetWidth)-f.pageX<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft+g.scrollSpeed}else{if(f.pageX-this.overflowOffset.left<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft-g.scrollSpeed}}}else{if(f.pageY-a(document).scrollTop()<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-g.scrollSpeed)}else{if(a(window).height()-(f.pageY-a(document).scrollTop())<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+g.scrollSpeed)}}if(f.pageX-a(document).scrollLeft()<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-g.scrollSpeed)}else{if(a(window).width()-(f.pageX-a(document).scrollLeft())<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+g.scrollSpeed)}}}if(b!==false&&a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,f)}}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}for(var d=this.items.length-1;d>=0;d--){var e=this.items[d],c=e.item[0],h=this._intersectsWithPointer(e);if(!h){continue}if(c!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=c&&!a.ui.contains(this.placeholder[0],c)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],c):true)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e)){this._rearrange(f,e)}else{break}this._trigger("change",f,this._uiHash());break}}this._contactContainers(f);if(a.ui.ddmanager){a.ui.ddmanager.drag(this,f)}this._trigger("sort",f,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(c,d){if(!c){return}if(a.ui.ddmanager&&!this.options.dropBehaviour){a.ui.ddmanager.drop(this,c)}if(this.options.revert){var b=this;var e=b.placeholder.offset();b.reverting=true;a(this.helper).animate({left:e.left-this.offset.parent.left-b.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-b.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){b._clear(c)})}else{this._clear(c,d)}return false},cancel:function(){var b=this;if(this.dragging){this._mouseUp();if(this.options.helper=="original"){this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}for(var c=this.containers.length-1;c>=0;c--){this.containers[c]._trigger("deactivate",null,b._uiHash(this));if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",null,b._uiHash(this));this.containers[c].containerCache.over=0}}}if(this.placeholder[0].parentNode){this.placeholder[0].parentNode.removeChild(this.placeholder[0])}if(this.options.helper!="original"&&this.helper&&this.helper[0].parentNode){this.helper.remove()}a.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});if(this.domPosition.prev){a(this.domPosition.prev).after(this.currentItem)}else{a(this.domPosition.parent).prepend(this.currentItem)}return true},serialize:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};a(b).each(function(){var e=(a(d.item||this).attr(d.attribute||"id")||"").match(d.expression||(/(.+)[-=_](.+)/));if(e){c.push((d.key||e[1]+"[]")+"="+(d.key&&d.expression?e[1]:e[2]))}});return c.join("&")},toArray:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};b.each(function(){c.push(a(d.item||this).attr(d.attribute||"id")||"")});return c},_intersectsWith:function(m){var e=this.positionAbs.left,d=e+this.helperProportions.width,k=this.positionAbs.top,j=k+this.helperProportions.height;var f=m.left,c=f+m.width,n=m.top,i=n+m.height;var o=this.offset.click.top,h=this.offset.click.left;var g=(k+o)>n&&(k+o)<i&&(e+h)>f&&(e+h)<c;if(this.options.tolerance=="pointer"||this.options.forcePointerForContainers||(this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>m[this.floating?"width":"height"])){return g}else{return(f<e+(this.helperProportions.width/2)&&d-(this.helperProportions.width/2)<c&&n<k+(this.helperProportions.height/2)&&j-(this.helperProportions.height/2)<i)}},_intersectsWithPointer:function(d){var e=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,d.top,d.height),c=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,d.left,d.width),g=e&&c,b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(!g){return false}return this.floating?(((f&&f=="right")||b=="down")?2:1):(b&&(b=="down"?2:1))},_intersectsWithSides:function(e){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+(e.height/2),e.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+(e.width/2),e.width),b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(this.floating&&f){return((f=="right"&&d)||(f=="left"&&!d))}else{return b&&((b=="down"&&c)||(b=="up"&&!c))}},_getDragVerticalDirection:function(){var b=this.positionAbs.top-this.lastPositionAbs.top;return b!=0&&(b>0?"down":"up")},_getDragHorizontalDirection:function(){var b=this.positionAbs.left-this.lastPositionAbs.left;return b!=0&&(b>0?"right":"left")},refresh:function(b){this._refreshItems(b);this.refreshPositions()},_connectWith:function(){var b=this.options;return b.connectWith.constructor==String?[b.connectWith]:b.connectWith},_getItemsAsjQuery:function(b){var l=this;var g=[];var e=[];var h=this._connectWith();if(h&&b){for(var d=h.length-1;d>=0;d--){var k=a(h[d]);for(var c=k.length-1;c>=0;c--){var f=a.data(k[c],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element):a(f.options.items,f.element).not(".ui-sortable-helper"),f])}}}}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper"),this]);for(var d=e.length-1;d>=0;d--){e[d][0].each(function(){g.push(this)})}return a(g)},_removeCurrentsFromItems:function(){var d=this.currentItem.find(":data(sortable-item)");for(var c=0;c<this.items.length;c++){for(var b=0;b<d.length;b++){if(d[b]==this.items[c].item[0]){this.items.splice(c,1)}}}},_refreshItems:function(b){this.items=[];this.containers=[this];var h=this.items;var p=this;var f=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],b,{item:this.currentItem}):a(this.options.items,this.element),this]];var l=this._connectWith();if(l){for(var e=l.length-1;e>=0;e--){var m=a(l[e]);for(var d=m.length-1;d>=0;d--){var g=a.data(m[d],"sortable");if(g&&g!=this&&!g.options.disabled){f.push([a.isFunction(g.options.items)?g.options.items.call(g.element[0],b,{item:this.currentItem}):a(g.options.items,g.element),g]);this.containers.push(g)}}}}for(var e=f.length-1;e>=0;e--){var k=f[e][1];var c=f[e][0];for(var d=0,n=c.length;d<n;d++){var o=a(c[d]);o.data("sortable-item",k);h.push({item:o,instance:k,width:0,height:0,left:0,top:0})}}},refreshPositions:function(b){if(this.offsetParent&&this.helper){this.offset.parent=this._getParentOffset()}for(var d=this.items.length-1;d>=0;d--){var e=this.items[d];if(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0]){continue}var c=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!b){e.width=c.outerWidth();e.height=c.outerHeight()}var f=c.offset();e.left=f.left;e.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers){this.options.custom.refreshContainers.call(this)}else{for(var d=this.containers.length-1;d>=0;d--){var f=this.containers[d].element.offset();this.containers[d].containerCache.left=f.left;this.containers[d].containerCache.top=f.top;this.containers[d].containerCache.width=this.containers[d].element.outerWidth();this.containers[d].containerCache.height=this.containers[d].element.outerHeight()}}},_createPlaceholder:function(d){var b=d||this,e=b.options;if(!e.placeholder||e.placeholder.constructor==String){var c=e.placeholder;e.placeholder={element:function(){var f=a(document.createElement(b.currentItem[0].nodeName)).addClass(c||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!c){f.style.visibility="hidden"}return f},update:function(f,g){if(c&&!e.forcePlaceholderSize){return}if(!g.height()){g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10))}if(!g.width()){g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=a(e.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);e.placeholder.update(b,b.placeholder)},_contactContainers:function(d){for(var c=this.containers.length-1;c>=0;c--){if(this._intersectsWith(this.containers[c].containerCache)){if(!this.containers[c].containerCache.over){if(this.currentContainer!=this.containers[c]){var h=10000;var g=null;var e=this.positionAbs[this.containers[c].floating?"left":"top"];for(var b=this.items.length-1;b>=0;b--){if(!a.ui.contains(this.containers[c].element[0],this.items[b].item[0])){continue}var f=this.items[b][this.containers[c].floating?"left":"top"];if(Math.abs(f-e)<h){h=Math.abs(f-e);g=this.items[b]}}if(!g&&!this.options.dropOnEmpty){continue}this.currentContainer=this.containers[c];g?this._rearrange(d,g,null,true):this._rearrange(d,null,this.containers[c].element,true);this._trigger("change",d,this._uiHash());this.containers[c]._trigger("change",d,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder)}this.containers[c]._trigger("over",d,this._uiHash(this));this.containers[c].containerCache.over=1}}else{if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",d,this._uiHash(this));this.containers[c].containerCache.over=0}}}},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c,this.currentItem])):(d.helper=="clone"?this.currentItem.clone():this.currentItem);if(!b.parents("body").length){a(d.appendTo!="parent"?d.appendTo:this.currentItem[0].parentNode)[0].appendChild(b[0])}if(b[0]==this.currentItem[0]){this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}}if(b[0].style.width==""||d.forceHelperSize){b.width(this.currentItem.width())}if(b[0].style.height==""||d.forceHelperSize){b.height(this.currentItem.height())}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.currentItem.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.currentItem.css("marginLeft"),10)||0),top:(parseInt(this.currentItem.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)){var c=a(e.containment)[0];var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_rearrange:function(g,f,c,e){c?c[0].appendChild(this.placeholder[0]):f.item[0].parentNode.insertBefore(this.placeholder[0],(this.direction=="down"?f.item[0]:f.item[0].nextSibling));this.counter=this.counter?++this.counter:1;var d=this,b=this.counter;window.setTimeout(function(){if(b==d.counter){d.refreshPositions(!e)}},0)},_clear:function(d,e){this.reverting=false;var f=[],b=this;if(!this._noFinalSort&&this.currentItem[0].parentNode){this.placeholder.before(this.currentItem)}this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var c in this._storedCSS){if(this._storedCSS[c]=="auto"||this._storedCSS[c]=="static"){this._storedCSS[c]=""}}this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}if(this.fromOutside&&!e){f.push(function(g){this._trigger("receive",g,this._uiHash(this.fromOutside))})}if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!e){f.push(function(g){this._trigger("update",g,this._uiHash())})}if(!a.ui.contains(this.element[0],this.currentItem[0])){if(!e){f.push(function(g){this._trigger("remove",g,this._uiHash())})}for(var c=this.containers.length-1;c>=0;c--){if(a.ui.contains(this.containers[c].element[0],this.currentItem[0])&&!e){f.push((function(g){return function(h){g._trigger("receive",h,this._uiHash(this))}}).call(this,this.containers[c]));f.push((function(g){return function(h){g._trigger("update",h,this._uiHash(this))}}).call(this,this.containers[c]))}}}for(var c=this.containers.length-1;c>=0;c--){if(!e){f.push((function(g){return function(h){g._trigger("deactivate",h,this._uiHash(this))}}).call(this,this.containers[c]))}if(this.containers[c].containerCache.over){f.push((function(g){return function(h){g._trigger("out",h,this._uiHash(this))}}).call(this,this.containers[c]));this.containers[c].containerCache.over=0}}if(this._storedCursor){a("body").css("cursor",this._storedCursor)}if(this._storedOpacity){this.helper.css("opacity",this._storedOpacity)}if(this._storedZIndex){this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex)}this.dragging=false;if(this.cancelHelperRemoval){if(!e){this._trigger("beforeStop",d,this._uiHash());for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}return false}if(!e){this._trigger("beforeStop",d,this._uiHash())}this.placeholder[0].parentNode.removeChild(this.placeholder[0]);if(this.helper[0]!=this.currentItem[0]){this.helper.remove()}this.helper=null;if(!e){for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){if(a.widget.prototype._trigger.apply(this,arguments)===false){this.cancel()}},_uiHash:function(c){var b=c||this;return{helper:b.helper,placeholder:b.placeholder||a([]),position:b.position,absolutePosition:b.positionAbs,offset:b.positionAbs,item:b.currentItem,sender:c?c.element:null}}}));a.extend(a.ui.sortable,{getter:"serialize toArray",version:"1.7.2",eventPrefix:"sort",defaults:{appendTo:"parent",axis:false,cancel:":input,option",connectWith:false,containment:false,cursor:"auto",cursorAt:false,delay:0,distance:1,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1000}})})(jQuery);;/*
 * jQuery UI Effects 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/
 */
jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(var f=0;f<h.length;f++){if(h[f]!==null){g.data("ec.storage."+h[f],g[0].style[h[f]])}}},restore:function(g,h){for(var f=0;f<h.length;f++){if(h[f]!==null){g.css(h[f],g.data("ec.storage."+h[f]))}}},setMode:function(f,g){if(g=="toggle"){g=f.is(":hidden")?"show":"hide"}return g},getBaseline:function(g,h){var i,f;switch(g[0]){case"top":i=0;break;case"middle":i=0.5;break;case"bottom":i=1;break;default:i=g[0]/h.height}switch(g[1]){case"left":f=0;break;case"center":f=0.5;break;case"right":f=1;break;default:f=g[1]/h.width}return{x:f,y:i}},createWrapper:function(f){if(f.parent().is(".ui-effects-wrapper")){return f.parent()}var g={width:f.outerWidth(true),height:f.outerHeight(true),"float":f.css("float")};f.wrap('<div class="ui-effects-wrapper" style="font-size:100%;background:transparent;border:none;margin:0;padding:0"></div>');var j=f.parent();if(f.css("position")=="static"){j.css({position:"relative"});f.css({position:"relative"})}else{var i=f.css("top");if(isNaN(parseInt(i,10))){i="auto"}var h=f.css("left");if(isNaN(parseInt(h,10))){h="auto"}j.css({position:f.css("position"),top:i,left:h,zIndex:f.css("z-index")}).show();f.css({position:"relative",top:0,left:0})}j.css(g);return j},removeWrapper:function(f){if(f.parent().is(".ui-effects-wrapper")){return f.parent().replaceWith(f)}return f},setTransition:function(g,i,f,h){h=h||{};d.each(i,function(k,j){unit=g.cssUnit(j);if(unit[0]>0){h[j]=unit[0]*f+unit[1]}});return h},animateClass:function(h,i,k,j){var f=(typeof k=="function"?k:(j?j:null));var g=(typeof k=="string"?k:null);return this.each(function(){var q={};var o=d(this);var p=o.attr("style")||"";if(typeof p=="object"){p=p.cssText}if(h.toggle){o.hasClass(h.toggle)?h.remove=h.toggle:h.add=h.toggle}var l=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.addClass(h.add)}if(h.remove){o.removeClass(h.remove)}var m=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.removeClass(h.add)}if(h.remove){o.addClass(h.remove)}for(var r in m){if(typeof m[r]!="function"&&m[r]&&r.indexOf("Moz")==-1&&r.indexOf("length")==-1&&m[r]!=l[r]&&(r.match(/color/i)||(!r.match(/color/i)&&!isNaN(parseInt(m[r],10))))&&(l.position!="static"||(l.position=="static"&&!r.match(/left|top|bottom|right/)))){q[r]=m[r]}}o.animate(q,i,g,function(){if(typeof d(this).attr("style")=="object"){d(this).attr("style")["cssText"]="";d(this).attr("style")["cssText"]=p}else{d(this).attr("style",p)}if(h.add){d(this).addClass(h.add)}if(h.remove){d(this).removeClass(h.remove)}if(f){f.apply(this,arguments)}})})}};function c(g,f){var i=g[1]&&g[1].constructor==Object?g[1]:{};if(f){i.mode=f}var h=g[1]&&g[1].constructor!=Object?g[1]:(i.duration?i.duration:g[2]);h=d.fx.off?0:typeof h==="number"?h:d.fx.speeds[h]||d.fx.speeds._default;var j=i.callback||(d.isFunction(g[1])&&g[1])||(d.isFunction(g[2])&&g[2])||(d.isFunction(g[3])&&g[3]);return[g[0],i,h,j]}d.fn.extend({_show:d.fn.show,_hide:d.fn.hide,__toggle:d.fn.toggle,_addClass:d.fn.addClass,_removeClass:d.fn.removeClass,_toggleClass:d.fn.toggleClass,effect:function(g,f,h,i){return d.effects[g]?d.effects[g].call(this,{method:g,options:f||{},duration:h,callback:i}):null},show:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._show.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"show"))}},hide:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._hide.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"hide"))}},toggle:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))||(d.isFunction(arguments[0])||typeof arguments[0]=="boolean")){return this.__toggle.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"toggle"))}},addClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{add:g},f,i,h]):this._addClass(g)},removeClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{remove:g},f,i,h]):this._removeClass(g)},toggleClass:function(g,f,i,h){return((typeof f!=="boolean")&&f)?d.effects.animateClass.apply(this,[{toggle:g},f,i,h]):this._toggleClass(g,f)},morph:function(f,h,g,j,i){return d.effects.animateClass.apply(this,[{add:h,remove:f},g,j,i])},switchClass:function(){return this.morph.apply(this,arguments)},cssUnit:function(f){var g=this.css(f),h=[];d.each(["em","px","%","pt"],function(j,k){if(g.indexOf(k)>0){h=[parseFloat(g),k]}});return h}});d.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(g,f){d.fx.step[f]=function(h){if(h.state==0){h.start=e(h.elem,f);h.end=b(h.end)}h.elem.style[f]="rgb("+[Math.max(Math.min(parseInt((h.pos*(h.end[0]-h.start[0]))+h.start[0],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[1]-h.start[1]))+h.start[1],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[2]-h.start[2]))+h.start[2],10),255),0)].join(",")+")"}});function b(g){var f;if(g&&g.constructor==Array&&g.length==3){return g}if(f=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(g)){return[parseInt(f[1],10),parseInt(f[2],10),parseInt(f[3],10)]}if(f=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(g)){return[parseFloat(f[1])*2.55,parseFloat(f[2])*2.55,parseFloat(f[3])*2.55]}if(f=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(g)){return[parseInt(f[1],16),parseInt(f[2],16),parseInt(f[3],16)]}if(f=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(g)){return[parseInt(f[1]+f[1],16),parseInt(f[2]+f[2],16),parseInt(f[3]+f[3],16)]}if(f=/rgba\(0, 0, 0, 0\)/.exec(g)){return a.transparent}return a[d.trim(g).toLowerCase()]}function e(h,f){var g;do{g=d.curCSS(h,f);if(g!=""&&g!="transparent"||d.nodeName(h,"body")){break}f="backgroundColor"}while(h=h.parentNode);return b(g)}var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]};d.easing.jswing=d.easing.swing;d.extend(d.easing,{def:"easeOutQuad",swing:function(g,h,f,j,i){return d.easing[d.easing.def](g,h,f,j,i)},easeInQuad:function(g,h,f,j,i){return j*(h/=i)*h+f},easeOutQuad:function(g,h,f,j,i){return -j*(h/=i)*(h-2)+f},easeInOutQuad:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h+f}return -j/2*((--h)*(h-2)-1)+f},easeInCubic:function(g,h,f,j,i){return j*(h/=i)*h*h+f},easeOutCubic:function(g,h,f,j,i){return j*((h=h/i-1)*h*h+1)+f},easeInOutCubic:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h+f}return j/2*((h-=2)*h*h+2)+f},easeInQuart:function(g,h,f,j,i){return j*(h/=i)*h*h*h+f},easeOutQuart:function(g,h,f,j,i){return -j*((h=h/i-1)*h*h*h-1)+f},easeInOutQuart:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h+f}return -j/2*((h-=2)*h*h*h-2)+f},easeInQuint:function(g,h,f,j,i){return j*(h/=i)*h*h*h*h+f},easeOutQuint:function(g,h,f,j,i){return j*((h=h/i-1)*h*h*h*h+1)+f},easeInOutQuint:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h*h+f}return j/2*((h-=2)*h*h*h*h+2)+f},easeInSine:function(g,h,f,j,i){return -j*Math.cos(h/i*(Math.PI/2))+j+f},easeOutSine:function(g,h,f,j,i){return j*Math.sin(h/i*(Math.PI/2))+f},easeInOutSine:function(g,h,f,j,i){return -j/2*(Math.cos(Math.PI*h/i)-1)+f},easeInExpo:function(g,h,f,j,i){return(h==0)?f:j*Math.pow(2,10*(h/i-1))+f},easeOutExpo:function(g,h,f,j,i){return(h==i)?f+j:j*(-Math.pow(2,-10*h/i)+1)+f},easeInOutExpo:function(g,h,f,j,i){if(h==0){return f}if(h==i){return f+j}if((h/=i/2)<1){return j/2*Math.pow(2,10*(h-1))+f}return j/2*(-Math.pow(2,-10*--h)+2)+f},easeInCirc:function(g,h,f,j,i){return -j*(Math.sqrt(1-(h/=i)*h)-1)+f},easeOutCirc:function(g,h,f,j,i){return j*Math.sqrt(1-(h=h/i-1)*h)+f},easeInOutCirc:function(g,h,f,j,i){if((h/=i/2)<1){return -j/2*(Math.sqrt(1-h*h)-1)+f}return j/2*(Math.sqrt(1-(h-=2)*h)+1)+f},easeInElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l)==1){return f+m}if(!k){k=l*0.3}if(h<Math.abs(m)){h=m;var j=k/4}else{var j=k/(2*Math.PI)*Math.asin(m/h)}return -(h*Math.pow(2,10*(i-=1))*Math.sin((i*l-j)*(2*Math.PI)/k))+f},easeOutElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l)==1){return f+m}if(!k){k=l*0.3}if(h<Math.abs(m)){h=m;var j=k/4}else{var j=k/(2*Math.PI)*Math.asin(m/h)}return h*Math.pow(2,-10*i)*Math.sin((i*l-j)*(2*Math.PI)/k)+m+f},easeInOutElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l/2)==2){return f+m}if(!k){k=l*(0.3*1.5)}if(h<Math.abs(m)){h=m;var j=k/4}else{var j=k/(2*Math.PI)*Math.asin(m/h)}if(i<1){return -0.5*(h*Math.pow(2,10*(i-=1))*Math.sin((i*l-j)*(2*Math.PI)/k))+f}return h*Math.pow(2,-10*(i-=1))*Math.sin((i*l-j)*(2*Math.PI)/k)*0.5+m+f},easeInBack:function(g,h,f,k,j,i){if(i==undefined){i=1.70158}return k*(h/=j)*h*((i+1)*h-i)+f},easeOutBack:function(g,h,f,k,j,i){if(i==undefined){i=1.70158}return k*((h=h/j-1)*h*((i+1)*h+i)+1)+f},easeInOutBack:function(g,h,f,k,j,i){if(i==undefined){i=1.70158}if((h/=j/2)<1){return k/2*(h*h*(((i*=(1.525))+1)*h-i))+f}return k/2*((h-=2)*h*(((i*=(1.525))+1)*h+i)+2)+f},easeInBounce:function(g,h,f,j,i){return j-d.easing.easeOutBounce(g,i-h,0,j,i)+f},easeOutBounce:function(g,h,f,j,i){if((h/=i)<(1/2.75)){return j*(7.5625*h*h)+f}else{if(h<(2/2.75)){return j*(7.5625*(h-=(1.5/2.75))*h+0.75)+f}else{if(h<(2.5/2.75)){return j*(7.5625*(h-=(2.25/2.75))*h+0.9375)+f}else{return j*(7.5625*(h-=(2.625/2.75))*h+0.984375)+f}}}},easeInOutBounce:function(g,h,f,j,i){if(h<i/2){return d.easing.easeInBounce(g,h*2,0,j,i)*0.5+f}return d.easing.easeOutBounce(g,h*2-i,0,j,i)*0.5+j*0.5+f}})})(jQuery);;/*
 * jQuery UI Effects Blind 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Blind
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.blind=function(b){return this.queue(function(){var d=a(this),c=["position","top","left"];var h=a.effects.setMode(d,b.options.mode||"hide");var g=b.options.direction||"vertical";a.effects.save(d,c);d.show();var j=a.effects.createWrapper(d).css({overflow:"hidden"});var e=(g=="vertical")?"height":"width";var i=(g=="vertical")?j.height():j.width();if(h=="show"){j.css(e,0)}var f={};f[e]=h=="show"?i:0;j.animate(f,b.duration,b.options.easing,function(){if(h=="hide"){d.hide()}a.effects.restore(d,c);a.effects.removeWrapper(d);if(b.callback){b.callback.apply(d[0],arguments)}d.dequeue()})})}})(jQuery);;/*
 * jQuery UI Effects Bounce 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Bounce
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.bounce=function(b){return this.queue(function(){var e=a(this),l=["position","top","left"];var k=a.effects.setMode(e,b.options.mode||"effect");var n=b.options.direction||"up";var c=b.options.distance||20;var d=b.options.times||5;var g=b.duration||250;if(/show|hide/.test(k)){l.push("opacity")}a.effects.save(e,l);e.show();a.effects.createWrapper(e);var f=(n=="up"||n=="down")?"top":"left";var p=(n=="up"||n=="left")?"pos":"neg";var c=b.options.distance||(f=="top"?e.outerHeight({margin:true})/3:e.outerWidth({margin:true})/3);if(k=="show"){e.css("opacity",0).css(f,p=="pos"?-c:c)}if(k=="hide"){c=c/(d*2)}if(k!="hide"){d--}if(k=="show"){var h={opacity:1};h[f]=(p=="pos"?"+=":"-=")+c;e.animate(h,g/2,b.options.easing);c=c/2;d--}for(var j=0;j<d;j++){var o={},m={};o[f]=(p=="pos"?"-=":"+=")+c;m[f]=(p=="pos"?"+=":"-=")+c;e.animate(o,g/2,b.options.easing).animate(m,g/2,b.options.easing);c=(k=="hide")?c*2:c/2}if(k=="hide"){var h={opacity:0};h[f]=(p=="pos"?"-=":"+=")+c;e.animate(h,g/2,b.options.easing,function(){e.hide();a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}})}else{var o={},m={};o[f]=(p=="pos"?"-=":"+=")+c;m[f]=(p=="pos"?"+=":"-=")+c;e.animate(o,g/2,b.options.easing).animate(m,g/2,b.options.easing,function(){a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}})}e.queue("fx",function(){e.dequeue()});e.dequeue()})}})(jQuery);;/*
 * jQuery UI Effects Clip 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Clip
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.clip=function(b){return this.queue(function(){var f=a(this),j=["position","top","left","height","width"];var i=a.effects.setMode(f,b.options.mode||"hide");var k=b.options.direction||"vertical";a.effects.save(f,j);f.show();var c=a.effects.createWrapper(f).css({overflow:"hidden"});var e=f[0].tagName=="IMG"?c:f;var g={size:(k=="vertical")?"height":"width",position:(k=="vertical")?"top":"left"};var d=(k=="vertical")?e.height():e.width();if(i=="show"){e.css(g.size,0);e.css(g.position,d/2)}var h={};h[g.size]=i=="show"?d:0;h[g.position]=i=="show"?0:d/2;e.animate(h,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){f.hide()}a.effects.restore(f,j);a.effects.removeWrapper(f);if(b.callback){b.callback.apply(f[0],arguments)}f.dequeue()}})})}})(jQuery);;/*
 * jQuery UI Effects Drop 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Drop
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.drop=function(b){return this.queue(function(){var e=a(this),d=["position","top","left","opacity"];var i=a.effects.setMode(e,b.options.mode||"hide");var h=b.options.direction||"left";a.effects.save(e,d);e.show();a.effects.createWrapper(e);var f=(h=="up"||h=="down")?"top":"left";var c=(h=="up"||h=="left")?"pos":"neg";var j=b.options.distance||(f=="top"?e.outerHeight({margin:true})/2:e.outerWidth({margin:true})/2);if(i=="show"){e.css("opacity",0).css(f,c=="pos"?-j:j)}var g={opacity:i=="show"?1:0};g[f]=(i=="show"?(c=="pos"?"+=":"-="):(c=="pos"?"-=":"+="))+j;e.animate(g,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){e.hide()}a.effects.restore(e,d);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/*
 * jQuery UI Effects Fold 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Fold
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.fold=function(b){return this.queue(function(){var e=a(this),k=["position","top","left"];var h=a.effects.setMode(e,b.options.mode||"hide");var o=b.options.size||15;var n=!(!b.options.horizFirst);var g=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(e,k);e.show();var d=a.effects.createWrapper(e).css({overflow:"hidden"});var i=((h=="show")!=n);var f=i?["width","height"]:["height","width"];var c=i?[d.width(),d.height()]:[d.height(),d.width()];var j=/([0-9]+)%/.exec(o);if(j){o=parseInt(j[1],10)/100*c[h=="hide"?0:1]}if(h=="show"){d.css(n?{height:0,width:o}:{height:o,width:0})}var m={},l={};m[f[0]]=h=="show"?c[0]:o;l[f[1]]=h=="show"?c[1]:0;d.animate(m,g,b.options.easing).animate(l,g,b.options.easing,function(){if(h=="hide"){e.hide()}a.effects.restore(e,k);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(e[0],arguments)}e.dequeue()})})}})(jQuery);;/*
 * jQuery UI Effects Highlight 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Highlight
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.highlight=function(b){return this.queue(function(){var e=a(this),d=["backgroundImage","backgroundColor","opacity"];var h=a.effects.setMode(e,b.options.mode||"show");var c=b.options.color||"#ffff99";var g=e.css("backgroundColor");a.effects.save(e,d);e.show();e.css({backgroundImage:"none",backgroundColor:c});var f={backgroundColor:g};if(h=="hide"){f.opacity=0}e.animate(f,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(h=="hide"){e.hide()}a.effects.restore(e,d);if(h=="show"&&a.browser.msie){this.style.removeAttribute("filter")}if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/*
 * jQuery UI Effects Pulsate 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Pulsate
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.pulsate=function(b){return this.queue(function(){var d=a(this);var g=a.effects.setMode(d,b.options.mode||"show");var f=b.options.times||5;var e=b.duration?b.duration/2:a.fx.speeds._default/2;if(g=="hide"){f--}if(d.is(":hidden")){d.css("opacity",0);d.show();d.animate({opacity:1},e,b.options.easing);f=f-2}for(var c=0;c<f;c++){d.animate({opacity:0},e,b.options.easing).animate({opacity:1},e,b.options.easing)}if(g=="hide"){d.animate({opacity:0},e,b.options.easing,function(){d.hide();if(b.callback){b.callback.apply(this,arguments)}})}else{d.animate({opacity:0},e,b.options.easing).animate({opacity:1},e,b.options.easing,function(){if(b.callback){b.callback.apply(this,arguments)}})}d.queue("fx",function(){d.dequeue()});d.dequeue()})}})(jQuery);;/*
 * jQuery UI Effects Scale 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Scale
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.puff=function(b){return this.queue(function(){var f=a(this);var c=a.extend(true,{},b.options);var h=a.effects.setMode(f,b.options.mode||"hide");var g=parseInt(b.options.percent,10)||150;c.fade=true;var e={height:f.height(),width:f.width()};var d=g/100;f.from=(h=="hide")?e:{height:e.height*d,width:e.width*d};c.from=f.from;c.percent=(h=="hide")?g:100;c.mode=h;f.effect("scale",c,b.duration,b.callback);f.dequeue()})};a.effects.scale=function(b){return this.queue(function(){var g=a(this);var d=a.extend(true,{},b.options);var j=a.effects.setMode(g,b.options.mode||"effect");var h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:(j=="hide"?0:100));var i=b.options.direction||"both";var c=b.options.origin;if(j!="effect"){d.origin=c||["middle","center"];d.restore=true}var f={height:g.height(),width:g.width()};g.from=b.options.from||(j=="show"?{height:0,width:0}:f);var e={y:i!="horizontal"?(h/100):1,x:i!="vertical"?(h/100):1};g.to={height:f.height*e.y,width:f.width*e.x};if(b.options.fade){if(j=="show"){g.from.opacity=0;g.to.opacity=1}if(j=="hide"){g.from.opacity=1;g.to.opacity=0}}d.from=g.from;d.to=g.to;d.mode=j;g.effect("size",d,b.duration,b.callback);g.dequeue()})};a.effects.size=function(b){return this.queue(function(){var c=a(this),n=["position","top","left","width","height","overflow","opacity"];var m=["position","top","left","overflow","opacity"];var j=["width","height","overflow"];var p=["fontSize"];var k=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"];var f=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"];var g=a.effects.setMode(c,b.options.mode||"effect");var i=b.options.restore||false;var e=b.options.scale||"both";var o=b.options.origin;var d={height:c.height(),width:c.width()};c.from=b.options.from||d;c.to=b.options.to||d;if(o){var h=a.effects.getBaseline(o,d);c.from.top=(d.height-c.from.height)*h.y;c.from.left=(d.width-c.from.width)*h.x;c.to.top=(d.height-c.to.height)*h.y;c.to.left=(d.width-c.to.width)*h.x}var l={from:{y:c.from.height/d.height,x:c.from.width/d.width},to:{y:c.to.height/d.height,x:c.to.width/d.width}};if(e=="box"||e=="both"){if(l.from.y!=l.to.y){n=n.concat(k);c.from=a.effects.setTransition(c,k,l.from.y,c.from);c.to=a.effects.setTransition(c,k,l.to.y,c.to)}if(l.from.x!=l.to.x){n=n.concat(f);c.from=a.effects.setTransition(c,f,l.from.x,c.from);c.to=a.effects.setTransition(c,f,l.to.x,c.to)}}if(e=="content"||e=="both"){if(l.from.y!=l.to.y){n=n.concat(p);c.from=a.effects.setTransition(c,p,l.from.y,c.from);c.to=a.effects.setTransition(c,p,l.to.y,c.to)}}a.effects.save(c,i?n:m);c.show();a.effects.createWrapper(c);c.css("overflow","hidden").css(c.from);if(e=="content"||e=="both"){k=k.concat(["marginTop","marginBottom"]).concat(p);f=f.concat(["marginLeft","marginRight"]);j=n.concat(k).concat(f);c.find("*[width]").each(function(){child=a(this);if(i){a.effects.save(child,j)}var q={height:child.height(),width:child.width()};child.from={height:q.height*l.from.y,width:q.width*l.from.x};child.to={height:q.height*l.to.y,width:q.width*l.to.x};if(l.from.y!=l.to.y){child.from=a.effects.setTransition(child,k,l.from.y,child.from);child.to=a.effects.setTransition(child,k,l.to.y,child.to)}if(l.from.x!=l.to.x){child.from=a.effects.setTransition(child,f,l.from.x,child.from);child.to=a.effects.setTransition(child,f,l.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){if(i){a.effects.restore(child,j)}})})}c.animate(c.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(g=="hide"){c.hide()}a.effects.restore(c,i?n:m);a.effects.removeWrapper(c);if(b.callback){b.callback.apply(this,arguments)}c.dequeue()}})})}})(jQuery);;/*
 * jQuery UI Effects Shake 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Shake
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.shake=function(b){return this.queue(function(){var e=a(this),l=["position","top","left"];var k=a.effects.setMode(e,b.options.mode||"effect");var n=b.options.direction||"left";var c=b.options.distance||20;var d=b.options.times||3;var g=b.duration||b.options.duration||140;a.effects.save(e,l);e.show();a.effects.createWrapper(e);var f=(n=="up"||n=="down")?"top":"left";var p=(n=="up"||n=="left")?"pos":"neg";var h={},o={},m={};h[f]=(p=="pos"?"-=":"+=")+c;o[f]=(p=="pos"?"+=":"-=")+c*2;m[f]=(p=="pos"?"-=":"+=")+c*2;e.animate(h,g,b.options.easing);for(var j=1;j<d;j++){e.animate(o,g,b.options.easing).animate(m,g,b.options.easing)}e.animate(o,g,b.options.easing).animate(h,g/2,b.options.easing,function(){a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}});e.queue("fx",function(){e.dequeue()});e.dequeue()})}})(jQuery);;/*
 * jQuery UI Effects Slide 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Slide
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.slide=function(b){return this.queue(function(){var e=a(this),d=["position","top","left"];var i=a.effects.setMode(e,b.options.mode||"show");var h=b.options.direction||"left";a.effects.save(e,d);e.show();a.effects.createWrapper(e).css({overflow:"hidden"});var f=(h=="up"||h=="down")?"top":"left";var c=(h=="up"||h=="left")?"pos":"neg";var j=b.options.distance||(f=="top"?e.outerHeight({margin:true}):e.outerWidth({margin:true}));if(i=="show"){e.css(f,c=="pos"?-j:j)}var g={};g[f]=(i=="show"?(c=="pos"?"+=":"-="):(c=="pos"?"-=":"+="))+j;e.animate(g,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){e.hide()}a.effects.restore(e,d);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/*
 * jQuery UI Effects Transfer 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Transfer
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.transfer=function(b){return this.queue(function(){var f=a(this),h=a(b.options.to),e=h.offset(),g={top:e.top,left:e.left,height:h.innerHeight(),width:h.innerWidth()},d=f.offset(),c=a('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(b.options.className).css({top:d.top,left:d.left,height:f.innerHeight(),width:f.innerWidth(),position:"absolute"}).animate(g,b.duration,b.options.easing,function(){c.remove();(b.callback&&b.callback.apply(f[0],arguments));f.dequeue()})})}})(jQuery);;

/*
 * jQuery Address Plugin v1.2.1
 * http://www.asual.com/jquery/address/
 *
 * Copyright (c) 2009-2010 Rostislav Hristov
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * Date: 2010-05-20 09:39:26 +0300 (Thu, 20 May 2010)
 */
(function(c){c.address=function(){var v=function(a){c(c.address).trigger(c.extend(c.Event(a),function(){for(var b={},g=c.address.parameterNames(),h=0,q=g.length;h<q;h++)b[g[h]]=c.address.parameter(g[h]);return{value:c.address.value(),path:c.address.path(),pathNames:c.address.pathNames(),parameterNames:g,parameters:b,queryString:c.address.queryString()}}.call(c.address)))},w=function(a,b,g){c(c.address).bind(a,b,g);return c.address},p=function(){var a=d.href.indexOf("#");return a!=-1?W(J(t(d.href.substr(a+
1),j))):""},X=function(){return"javascript"},Y=function(a,b){if(i.strict)a=b?a.substr(0,1)!="/"?"/"+a:a:a==""?"/":a;return a},K=function(a,b){return u&&d.protocol=="file:"?b?f.replace(/\?/,"%3F"):f.replace(/%253F/,"?"):a},t=function(a,b){if(i.crawlable&&b)return(a!=""?"!":"")+a;return a.replace(/^\!/,"")},x=function(a,b){return parseInt(a.css(b),10)},Z=function(a){for(var b,g,h=0,q=a.childNodes.length;h<q;h++){if(a.childNodes[h].src)b=String(a.childNodes[h].src);if(g=Z(a.childNodes[h]))b=g}return b},
H=function(){if(!L){var a=p(),b=f!=a;if(y&&m<523){if(D!=F.length){D=F.length;if(typeof z[D-1]!=A)f=z[D-1];G(j)}}else if(u&&m<7&&b)d.reload();else if(b){f=a;G(j)}}},G=function(a){v($);v(a?aa:ba);E(ca,10)},ca=function(){var a=(d.pathname+(/\/$/.test(d.pathname)?"":"/")+(c.address?c.address.value():"")).replace(/\/\//,"/").replace(/^\/$/,""),b=n[i.tracker];if(typeof b==M)b(a);else if(typeof urchinTracker==M)urchinTracker(a);else if(typeof pageTracker!=A&&typeof pageTracker._trackPageview==M)pageTracker._trackPageview(a);
else typeof _gaq!=A&&typeof _gaq.push==M&&_gaq.push(["_trackPageview",a])},da=function(){var a=l.contentWindow.document;a.open();a.write("<html><head><title>"+k.title+"</title><script>var "+o+' = "'+p()+'";<\/script></head></html>');a.close()},fa=function(){if(!ea){ea=e;var a=c("body").ajaxComplete(function(){ja.call(this)}).trigger("ajaxComplete");if(i.wrap){c("body > *").wrapAll('<div style="padding:'+(x(a,"marginTop")+x(a,"paddingTop"))+"px "+(x(a,"marginRight")+x(a,"paddingRight"))+"px "+(x(a,
"marginBottom")+x(a,"paddingBottom"))+"px "+(x(a,"marginLeft")+x(a,"paddingLeft"))+'px;" />').parent().wrap('<div id="'+o+'" style="height:100%; overflow:auto;'+(y?window.statusbar.visible&&!/chrome/i.test(O)?"":" resize:both;":"")+'" />');c("html, body").css({height:"100%",margin:0,padding:0,overflow:"hidden"});y&&c('<style type="text/css" />').appendTo("head").text("#"+o+"::-webkit-resizer { background-color: #fff; }")}if(u&&m<8){a=k.getElementsByTagName("frameset")[0];l=k.createElement((a?"":"i")+
"frame");if(a){a.insertAdjacentElement("beforeEnd",l);a[a.cols?"cols":"rows"]+=",0";l.src=X()+":"+j;l.noResize=e;l.frameBorder=l.frameSpacing=0}else{l.src=X()+":"+j;l.style.display="none";k.body.insertAdjacentElement("afterBegin",l)}E(function(){c(l).bind("load",function(){var b=l.contentWindow;f=typeof b[o]!=A?b[o]:"";if(f!=p()){G(j);d.hash=K(t(f,e),e)}});typeof l.contentWindow[o]==A&&da()},50)}else if(y){if(m<418){c(k.body).append('<form id="'+o+'" style="position:absolute;top:-9999px;" method="get"></form>');
P=k.getElementById(o)}if(typeof d[o]==A)d[o]={};if(typeof d[o][d.pathname]!=A)z=d[o][d.pathname].split(",")}E(function(){v("init");G(j)},1);if(u&&m>7||!u&&"on"+I in n)if(n.addEventListener)n.addEventListener(I,H,false);else n.attachEvent&&n.attachEvent("on"+I,H);else ka(H,50);c("a").filter("[rel*=address:]").address()}},la=function(){if(n.removeEventListener)n.removeEventListener(I,H,false);else n.detachEvent&&n.detachEvent("on"+I,H)},ja=function(){var a=d.pathname.replace(/\/$/,"");c("body").html().indexOf("_escaped_fragment_")!=
-1&&c("a[href]:not([href^=http])",this).each(function(){var b=c(this).attr("href").replace(new RegExp(a+"/?$"),"");if(b==""||b.indexOf("_escaped_fragment_")!=-1)c(this).attr("href","#"+decodeURIComponent(b.replace(/\/(.*)\?_escaped_fragment_=(.*)$/,"!$2")))})},o="jQueryAddress",M="function",A="undefined",I="hashchange",$="change",aa="internalChange",ba="externalChange",e=true,j=false,i={autoUpdate:e,crawlable:j,history:e,strict:e,wrap:j},r=c.browser,m=parseFloat(c.browser.version),ga=r.mozilla,u=
r.msie,s=r.opera,y=r.safari,Q=j,n=function(){try{return top.document!==undefined?top:window}catch(a){return window}}(),k=n.document,F=n.history,d=n.location,ka=setInterval,E=setTimeout,J=decodeURI,W=encodeURI,O=navigator.userAgent,l,P,B=Z(document),ha=B?B.indexOf("?"):-1,R=k.title,D=F.length,L=j,ea=j,S=e,ia=e,N=j,z=[],f=p();if(u){m=parseFloat(O.substr(O.indexOf("MSIE")+4));if(k.documentMode&&k.documentMode!=m)m=k.documentMode!=8?7:8;c(document).bind("propertychange",function(){if(k.title!=R&&k.title.indexOf("#"+
p())!=-1)k.title=R})}if(Q=ga&&m>=1||u&&m>=6||s&&m>=9.5||y&&m>=312){for(r=1;r<D;r++)z.push("");z.push(f);if(u&&d.hash!=f)d.hash="#"+K(t(f,e),e);if(s)history.navigationMode="compatible";if(B&&ha!=-1){B=B.substr(ha+1).split("&");for(r=0;r<B.length;r++){s=B[r].split("=");if(/^(autoUpdate|crawlable|history|strict|wrap)$/.test(s[0]))i[s[0]]=isNaN(s[1])?/^(true|yes)$/i.test(s[1]):parseInt(s[1],10)!==0;if(/^tracker$/.test(s[0]))i[s[0]]=s[1]}}document.readyState=="complete"&&fa();c(fa);c(window).bind("unload",
la)}else if(!Q&&p()!=""||y&&m<418&&p()!=""&&d.search!=""){k.open();k.write('<html><head><meta http-equiv="refresh" content="0;url='+encodeURI(d.href.substr(0,d.href.indexOf("#")))+'" /></head></html>');k.close()}else ca();return{bind:function(a,b,g){return w(a,b,g)},init:function(a){return w("init",a)},change:function(a){return w($,a)},internalChange:function(a){return w(aa,a)},externalChange:function(a){return w(ba,a)},baseURL:function(){var a=d.href;if(a.indexOf("#")!=-1)a=a.substr(0,a.indexOf("#"));
if(/\/$/.test(a))a=a.substr(0,a.length-1);return a},autoUpdate:function(a){if(a!==undefined){i.autoUpdate=a;return this}return i.autoUpdate},crawlable:function(a){if(a!==undefined){i.crawlable=a;return this}return i.crawlable},history:function(a){if(a!==undefined){i.history=a;return this}return i.history},strict:function(a){if(a!==undefined){i.strict=a;return this}return i.strict},tracker:function(a){if(a!==undefined){i.tracker=a;return this}return i.tracker},wrap:function(a){if(a!==undefined){i.wrap=
a;return this}return i.wrap},update:function(){N=e;this.value(f);N=j;return this},title:function(a){if(a!==undefined){a=J(a);E(function(){R=k.title=a;if(ia&&l&&l.contentWindow&&l.contentWindow.document){l.contentWindow.document.title=a;ia=j}if(!S&&ga)d.replace(d.href.indexOf("#")!=-1?d.href:d.href+"#");S=j},50);return this}return k.title},value:function(a){if(a!==undefined){a=W(J(Y(a,e)));if(a=="/")a="";if(f==a&&!N)return;S=e;f=a;if(i.autoUpdate||N){L=e;G(e);z[F.length]=f;if(y)if(i.history){d[o][d.pathname]=
z.toString();D=F.length+1;if(m<418){if(d.search==""){P.action="#"+t(f,e);P.submit()}}else if(m<523||f==""){a=k.createEvent("MouseEvents");a.initEvent("click",e,e);var b=k.createElement("a");b.href="#"+t(f,e);b.dispatchEvent(a)}else d.hash="#"+t(f,e)}else d.replace("#"+t(f,e));else if(f!=p())if(i.history)d.hash="#"+K(t(f,e),e);else d.replace("#"+t(f,e));u&&m<8&&i.history&&E(da,50);if(y)E(function(){L=j},1);else L=j}return this}if(!Q)return null;return J(Y(K(f,j),j))},path:function(a){if(a!==undefined){var b=
this.queryString(),g=this.hash();this.value(a+(b?"?"+b:"")+(g?"#"+g:""));return this}return this.value().split("#")[0].split("?")[0]},queryString:function(a){if(a!==undefined){var b=this.hash();this.value(this.path()+(a?"?"+a:"")+(b?"#"+b:""));return this}a=this.value().split("?");return a.slice(1,a.length).join("?").split("#")[0]},parameter:function(a,b,g){var h,q;if(b!==undefined){var T=this.parameterNames();q=[];for(h=0;h<T.length;h++){var U=T[h],C=this.parameter(U);if(typeof C=="string")C=[C];
if(U==a)C=b===null||b===""?[]:g?C.concat([b]):[b];for(var V=0;V<C.length;V++)q.push(U+"="+C[V])}c.inArray(a,T)==-1&&b!==null&&b!==""&&q.push(a+"="+b);this.queryString(q.join("&"));return this}if(b=this.queryString()){q=b.split("&");b=[];for(h=0;h<q.length;h++){g=q[h].split("=");g[0]==a&&b.push(g[1])}if(b.length!==0)return b.length!=1?b:b[0]}},pathNames:function(){var a=this.path(),b=a.replace(/\/{2,9}/g,"/").split("/");if(a.substr(0,1)=="/"||a.length===0)b.splice(0,1);a.substr(a.length-1,1)=="/"&&
b.splice(b.length-1,1);return b},parameterNames:function(){var a=this.queryString(),b=[];if(a&&a.indexOf("=")!=-1){a=a.split("&");for(var g=0;g<a.length;g++){var h=a[g].split("=")[0];c.inArray(h,b)==-1&&b.push(h)}}return b},hash:function(a){if(a!==undefined){this.value(this.value().split("#")[0]+(a?"#"+a:""));return this}a=this.value().split("#");return a.slice(1,a.length).join("#")}}}();c.fn.address=function(v){var w=function(){if(c(this).is("a")){var p=v?v.call(this):/address:/.test(c(this).attr("rel"))?
c(this).attr("rel").split("address:")[1].split(" ")[0]:c(this).attr("href").replace(/^#\!?/,"");c.address.value(p);return false}};c(this).click(w).live("click",w);c(this).live("submit",function(){if(c(this).is("form")){var p=v?v.call(this):c(this).attr("action")+"?"+c(this).serialize();c.address.value(p);return false}});return this}})(jQuery);


/**
 * jQuery.ScrollTo - Easy element scrolling using jQuery.
 * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 * Date: 2/19/2008
 * @author Ariel Flesler
 * @version 1.3.3
 */
;(function( $){var o=$.scrollTo=function(a,b,c){o.window().scrollTo(a,b,c)};o.defaults={axis:'y',duration:1};o.window=function(){return $( $.browser.safari?'body':'html')};$.fn.scrollTo=function(l,m,n){if(typeof m=='object'){n=m;m=0}n=$.extend({},o.defaults,n);m=m||n.speed||n.duration;n.queue=n.queue&&n.axis.length>1;if(n.queue)m/=2;n.offset=j(n.offset);n.over=j(n.over);return this.each(function(){var a=this,b=$(a),t=l,c,d={},w=b.is('html,body');switch(typeof t){case'number':case'string':if(/^([+-]=)?\d+(px)?$/.test(t)){t=j(t);break}t=$(t,this);case'object':if(t.is||t.style)c=(t=$(t)).offset()}$.each(n.axis.split(''),function(i,f){var P=f=='x'?'Left':'Top',p=P.toLowerCase(),k='scroll'+P,e=a[k],D=f=='x'?'Width':'Height';if(c){d[k]=c[p]+(w?0:e-b.offset()[p] );if(n.margin){d[k]-=parseInt(t.css('margin'+P))||0;d[k]-=parseInt(t.css('border'+P+'Width'))||0}d[k]+=n.offset[p]||0;if(n.over[p])d[k]+=t[D.toLowerCase()]()*n.over[p]}else d[k]=t[p];if(/^\d+$/.test(d[k]))d[k]=d[k]<=0?0:Math.min(d[k],h(D));if(!i&&n.queue){if(e!=d[k])g(n.onAfterFirst);delete d[k]}});g(n.onAfter);function g(a){b.animate(d,m,n.easing,a&&function(){a.call(this,l)})};function h(D){var b=w?$.browser.opera?document.body:document.documentElement:a;return b['scroll'+D]-b['client'+D]}})};function j(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);

/*
 *
 * Copyright (c) 2006-2008 Sam Collett (http://www.texotela.co.uk)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * Version 2.2.4
 * Demo: http://www.texotela.co.uk/code/jquery/select/
 *
 * $LastChangedDate: 2008-06-17 17:27:25 +0100 (Tue, 17 Jun 2008) $
 * $Rev: 5727 $
 *
 */
;(function(h){h.fn.addOption=function(){var j=function(a,f,c,g){var d=document.createElement("option");d.value=f,d.text=c;var b=a.options;var e=b.length;if(!a.cache){a.cache={};for(var i=0;i<e;i++){a.cache[b[i].value]=i}}if(typeof a.cache[f]=="undefined")a.cache[f]=e;a.options[a.cache[f]]=d;if(g){d.selected=true}};var k=arguments;if(k.length==0)return this;var l=true;var m=false;var n,o,p;if(typeof(k[0])=="object"){m=true;n=k[0]}if(k.length>=2){if(typeof(k[1])=="boolean")l=k[1];else if(typeof(k[2])=="boolean")l=k[2];if(!m){o=k[0];p=k[1]}}this.each(function(){if(this.nodeName.toLowerCase()!="select")return;if(m){for(var a in n){j(this,a,n[a],l)}}else{j(this,o,p,l)}});return this};h.fn.ajaxAddOption=function(c,g,d,b,e){if(typeof(c)!="string")return this;if(typeof(g)!="object")g={};if(typeof(d)!="boolean")d=true;this.each(function(){var f=this;h.getJSON(c,g,function(a){h(f).addOption(a,d);if(typeof b=="function"){if(typeof e=="object"){b.apply(f,e)}else{b.call(f)}}})});return this};h.fn.removeOption=function(){var d=arguments;if(d.length==0)return this;var b=typeof(d[0] );var e,i;if(b=="string"||b=="object"||b=="function"){e=d[0];if(e.constructor==Array){var j=e.length;for(var k=0;k<j;k++){this.removeOption(e[k],d[1])}return this}}else if(b=="number")i=d[0];else return this;this.each(function(){if(this.nodeName.toLowerCase()!="select")return;if(this.cache)this.cache=null;var a=false;var f=this.options;if(!!e){var c=f.length;for(var g=c-1;g>=0;g--){if(e.constructor==RegExp){if(f[g].value.match(e)){a=true}}else if(f[g].value==e){a=true}if(a&&d[1]===true)a=f[g].selected;if(a){f[g]=null}a=false}}else{if(d[1]===true){a=f[i].selected}else{a=true}if(a){this.remove(i)}}});return this};h.fn.sortOptions=function(e){var i=h(this).selectedValues();var j=typeof(e)=="undefined"?true:!!e;this.each(function(){if(this.nodeName.toLowerCase()!="select")return;var c=this.options;var g=c.length;var d=[];for(var b=0;b<g;b++){d[b]={v:c[b].value,t:c[b].text}}d.sort(function(a,f){o1t=a.t.toLowerCase(),o2t=f.t.toLowerCase();if(o1t==o2t)return 0;if(j){return o1t<o2t?-1:1}else{return o1t>o2t?-1:1}});for(var b=0;b<g;b++){c[b].text=d[b].t;c[b].value=d[b].v}}).selectOptions(i,true);return this};h.fn.selectOptions=function(g,d){var b=g;var e=typeof(g);if(e=="object"&&b.constructor==Array){var i=this;h.each(b,function(){i.selectOptions(this,d)})};var j=d||false;if(e!="string"&&e!="function"&&e!="object")return this;this.each(function(){if(this.nodeName.toLowerCase()!="select")return this;var a=this.options;var f=a.length;for(var c=0;c<f;c++){if(b.constructor==RegExp){if(a[c].value.match(b)){a[c].selected=true}else if(j){a[c].selected=false}}else{if(a[c].value==b){a[c].selected=true}else if(j){a[c].selected=false}}}});return this};h.fn.copyOptions=function(g,d){var b=d||"selected";if(h(g).size()==0)return this;this.each(function(){if(this.nodeName.toLowerCase()!="select")return this;var a=this.options;var f=a.length;for(var c=0;c<f;c++){if(b=="all"||(b=="selected"&&a[c].selected)){h(g).addOption(a[c].value,a[c].text)}}});return this};h.fn.containsOption=function(g,d){var b=false;var e=g;var i=typeof(e);var j=typeof(d);if(i!="string"&&i!="function"&&i!="object")return j=="function"?this:b;this.each(function(){if(this.nodeName.toLowerCase()!="select")return this;if(b&&j!="function")return false;var a=this.options;var f=a.length;for(var c=0;c<f;c++){if(e.constructor==RegExp){if(a[c].value.match(e)){b=true;if(j=="function")d.call(a[c],c)}}else{if(a[c].value==e){b=true;if(j=="function")d.call(a[c],c)}}}});return j=="function"?this:b};h.fn.selectedValues=function(){var a=[];this.selectedOptions().each(function(){a[a.length]=this.value});return a};h.fn.selectedTexts=function(){var a=[];this.selectedOptions().each(function(){a[a.length]=this.text});return a};h.fn.selectedOptions=function(){return this.find("option:selected")}})(jQuery);

/*
 * Simple jQuery logger / debugger.
 * Based on: http://jquery.com/plugins/Authoring/
 * See var DEBUG below for turning debugging/logging on and off.
 *
 * @version   20070111
 * @since     2006-07-10
 * @copyright Copyright (c) 2006 Glyphix Studio, Inc. http://www.glyphix.com
 * @author    Brad Brizendine <brizbane@gmail.com>
 * @license   MIT http://www.opensource.org/licenses/mit-license.php
 * @requires  >= jQuery 1.0.3
 */

// global debug switch ... add DEBUG = true; somewhere after jquery.debug.js is loaded to turn debugging on
var DEBUG = true;

// shamelessly ripped off from http://getfirebug.com/
if (!("console" in window) || !("firebug" in console)){
	var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
	// create the logging div
	jQuery(document).ready(
		function(){
			//$(document.body).append('<div id="DEBUG"><ol></ol></div>');
		}
	);
	// attach a function to each of the firebug methods
	window.console = {};
	for (var i = 0; i < names.length; ++i){
		window.console[names[i]] = function(msg) { 
			//$('#DEBUG ol').append( '<li>' + msg + '</li>' ); 
		};
	}
}

/*
 * debug
 * Simply loops thru each jquery item and logs it
 */
jQuery.fn.debug = function() {
	return this.each(function(){
		$.log(this);
	});
};

/*
 * log
 * Send it anything, and it will add a line to the logging console.
 * If firebug is installed, it simple send the item to firebug.
 * If not, it creates a string representation of the html element (if message is an object), or just uses the supplied value (if not an object).
 */
jQuery.log = function(message){
	// only if debugging is on
	if( window.DEBUG ){
		// if no firebug, build a debug line from the actual html element if it's an object, or just send the string
		var str = message;
		if( !('firebug' in console) ){
			if( typeof(message) == 'object' ){
				str = '&lt;';
				try {
					str += message.nodeName.toLowerCase();
					for( var i = 0; i < message.attributes.length; i++ ){
						str += ' ' + message.attributes[i].nodeName.toLowerCase() + '="' + message.attributes[i].nodeValue + '"';
					}
					str += '&gt;';
				}
				catch (e) {
					
				}
			}
		}
		console.debug(str);
	}
};


/*
 * jQuery EasIng v1.1.2 - http://gsgd.co.uk/sandbox/jquery.easIng.php
 *
 * Uses the built In easIng capabilities added In jQuery 1.1
 * to offer multiple easIng options
 *
 * Copyright (c) 2007 George Smith
 * Licensed under the MIT License:
 *   http://www.opensource.org/licenses/mit-license.php
 */

// t: current time, b: begInnIng value, c: change In value, d: duration

jQuery.extend( jQuery.easing,
{
	easeInQuad: function (x, t, b, c, d) {
		return c*(t/=d)*t + b;
	},
	easeOutQuad: function (x, t, b, c, d) {
		return -c *(t/=d)*(t-2) + b;
	},
	easeInOutQuad: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t + b;
		return -c/2 * ((--t)*(t-2) - 1) + b;
	},
	easeInCubic: function (x, t, b, c, d) {
		return c*(t/=d)*t*t + b;
	},
	easeOutCubic: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t + 1) + b;
	},
	easeInOutCubic: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t + b;
		return c/2*((t-=2)*t*t + 2) + b;
	},
	easeInQuart: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t + b;
	},
	easeOutQuart: function (x, t, b, c, d) {
		return -c * ((t=t/d-1)*t*t*t - 1) + b;
	},
	easeInOutQuart: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
		return -c/2 * ((t-=2)*t*t*t - 2) + b;
	},
	easeInQuint: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t*t + b;
	},
	easeOutQuint: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t*t*t + 1) + b;
	},
	easeInOutQuint: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
		return c/2*((t-=2)*t*t*t*t + 2) + b;
	},
	easeInSine: function (x, t, b, c, d) {
		return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
	},
	easeOutSine: function (x, t, b, c, d) {
		return c * Math.sin(t/d * (Math.PI/2)) + b;
	},
	easeInOutSine: function (x, t, b, c, d) {
		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
	},
	easeInExpo: function (x, t, b, c, d) {
		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
	},
	easeOutExpo: function (x, t, b, c, d) {
		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
	},
	easeInOutExpo: function (x, t, b, c, d) {
		if (t==0) return b;
		if (t==d) return b+c;
		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
	},
	easeInCirc: function (x, t, b, c, d) {
		return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
	},
	easeOutCirc: function (x, t, b, c, d) {
		return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
	},
	easeInOutCirc: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
		return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
	},
	easeInElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
	},
	easeOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
	},
	easeInOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
	},
	easeInBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*(t/=d)*t*((s+1)*t - s) + b;
	},
	easeOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
	},
	easeInOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158; 
		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
	},
	easeInBounce: function (x, t, b, c, d) {
		return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
	},
	easeOutBounce: function (x, t, b, c, d) {
		if ((t/=d) < (1/2.75)) {
			return c*(7.5625*t*t) + b;
		} else if (t < (2/2.75)) {
			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
		} else if (t < (2.5/2.75)) {
			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
		} else {
			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
		}
	},
	easeInOutBounce: function (x, t, b, c, d) {
		if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
		return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
	}
});


(function($){$.extend($.expr[':'],{icontains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").toLowerCase().indexOf(m[3].toLowerCase())>=0;}});$.iterators={getText:function(){return $(this).text();},parseInt:function(v){return parseInt(v,10);}};$.extend({range:function(){if(!arguments.length){return[];}
var min,max,step;if(arguments.length==1){min=0;max=arguments[0]-1;step=1;}
else{min=arguments[0];max=arguments[1]-1;step=arguments[2]||1;}
if(step<0&&min>=max){step*=-1;var tmp=min;min=max;max=tmp;min+=((max-min)%step);}
var a=[];for(var i=min;i<=max;i+=step){a.push(i);}
return a;},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38},keyIs:function(k,e){return parseInt($.keyCode[k.toUpperCase()],10)==parseInt((typeof(e)=='number')?e:e.keyCode,10);},keys:function(arr){var o=[];for(k in arr){o.push(k);}
return o;},redirect:function(url){window.location.href=url;return url;},stop:function(e,preventDefault,stopPropagation){if(preventDefault){e.preventDefault();}
if(stopPropagation){e.stopPropagation();}
return preventDefault&&false||true;},basename:function(path){var t=path.split('/');return t[t.length]===''&&s||t.slice(0,t.length).join('/');},filename:function(path){return path.split('/').pop();},filesizeformat:function(bytes,suffixes){var b=parseInt(bytes,10);var s=suffixes||['byte','bytes','KB','MB','GB'];if(isNaN(b)||b===0){return'0 '+s[0];}
if(b==1){return'1 '+s[0];}
if(b<1024){return b.toFixed(2)+' '+s[1];}
if(b<1048576){return(b/1024).toFixed(2)+' '+s[2];}
if(b<1073741824){return(b/1048576).toFixed(2)+' '+s[3];}
else{return(b/1073741824).toFixed(2)+' '+s[4];}},fileExtension:function(s){var tokens=s.split('.');return tokens[tokens.length-1]||false;},isString:function(o){return typeof(o)=='string'&&true||false;},isRegExp:function(o){return o&&o.constructor.toString().indexOf('RegExp()')!=-1||false;},isObject:function(o){return(typeof(o)=='object');},toCurrency:function(i){i=parseFloat(i,10).toFixed(2);return(i=='NaN')?'0.00':i;},pxToEm:function(i,settings){settings=jQuery.extend({scope:'body',reverse:false},settings);var pxVal=(i==='')?0:parseFloat(i);var scopeVal;var getWindowWidth=function(){var de=document.documentElement;return self.innerWidth||(de&&de.clientWidth)||document.body.clientWidth;};if(settings.scope=='body'&&$.browser.msie&&(parseFloat($('body').css('font-size'))/getWindowWidth()).toFixed(1)>0.0){var calcFontSize=function(){return(parseFloat($('body').css('font-size'))/getWindowWidth()).toFixed(3)*16;};scopeVal=calcFontSize();}
else{scopeVal=parseFloat(jQuery(settings.scope).css("font-size"));}
var result=(settings.reverse===true)?(pxVal*scopeVal).toFixed(2)+'px':(pxVal/scopeVal).toFixed(2)+'em';return result;}});$.extend($.fn,{type:function(){try{return $(this).get(0).nodeName.toLowerCase();}
catch(e){return false;}},selectRange:function(start,end){if($(this).get(0).createTextRange){var range=$(this).get(0).createTextRange();range.collapse(true);range.moveEnd('character',end);range.moveStart('character',start);range.select();}
else if($(this).get(0).setSelectionRange){$(this).bind('focus',function(e){e.preventDefault();}).get(0).setSelectionRange(start,end);}
return $(this);},equalHeights:function(px){$(this).each(function(){var currentTallest=0;$(this).children().each(function(i){if($(this).height()>currentTallest){currentTallest=$(this).height();}});if(!px||!$.pxToEm){currentTallest=$.pxToEm(currentTallest);}
if($.browser.msie&&$.browser.version==6.0){$(this).children().css({'height':currentTallest});}
$(this).children().css({'min-height':currentTallest});});return this;},delay:function(time,callback){jQuery.fx.step.delay=function(){};return this.animate({delay:1},time,callback);}});})(jQuery);(function($){var strings={strConversion:{__repr:function(i){switch(this.__getType(i)){case'array':case'date':case'number':return i.toString();case'object':var o=[];for(x=0;x<i.length;i++){o.push(i+': '+this.__repr(i[x]));}
return o.join(', ');case'string':return i;default:return i;}},__getType:function(i){if(!i||!i.constructor){return typeof(i);}
var match=i.constructor.toString().match(/Array|Number|String|Object|Date/);return match&&match[0].toLowerCase()||typeof(i);},__pad:function(str,l,s,t){var p=s||' ';var o=str;if(l-str.length>0){o=new Array(Math.ceil(l/p.length)).join(p).substr(0,t=!t?l:t==1?0:Math.ceil(l/2))+str+p.substr(0,l-t);}
return o;},__getInput:function(arg,args){var key=arg.getKey();switch(this.__getType(args)){case'object':var keys=key.split('.');var obj=args;for(var subkey=0;subkey<keys.length;subkey++){obj=obj[keys[subkey]];}
if(typeof(obj)!='undefined'){if(strings.strConversion.__getType(obj)=='array'){return arg.getFormat().match(/\.\*/)&&obj[1]||obj;}
return obj;}
else{}
break;case'array':key=parseInt(key,10);if(arg.getFormat().match(/\.\*/)&&typeof args[key+1]!='undefined'){return args[key+1];}
else if(typeof args[key]!='undefined'){return args[key];}
else{return key;}
break;}
return'{'+key+'}';},__formatToken:function(token,args){var arg=new Argument(token,args);return strings.strConversion[arg.getFormat().slice(-1)](this.__getInput(arg,args),arg);},d:function(input,arg){var o=parseInt(input,10);var p=arg.getPaddingLength();if(p){return this.__pad(o.toString(),p,arg.getPaddingString(),0);}
else{return o;}},i:function(input,args){return this.d(input,args);},o:function(input,arg){var o=input.toString(8);if(arg.isAlternate()){o=this.__pad(o,o.length+1,'0',0);}
return this.__pad(o,arg.getPaddingLength(),arg.getPaddingString(),0);},u:function(input,args){return Math.abs(this.d(input,args));},x:function(input,arg){var o=parseInt(input,10).toString(16);o=this.__pad(o,arg.getPaddingLength(),arg.getPaddingString(),0);return arg.isAlternate()?'0x'+o:o;},X:function(input,arg){return this.x(input,arg).toUpperCase();},e:function(input,arg){return parseFloat(input,10).toExponential(arg.getPrecision());},E:function(input,arg){return this.e(input,arg).toUpperCase();},f:function(input,arg){return this.__pad(parseFloat(input,10).toFixed(arg.getPrecision()),arg.getPaddingLength(),arg.getPaddingString(),0);},F:function(input,args){return this.f(input,args);},g:function(input,arg){var o=parseFloat(input,10);return(o.toString().length>6)?Math.round(o.toExponential(arg.getPrecision())):o;},G:function(input,args){return this.g(input,args);},c:function(input,args){var match=input.match(/\w|\d/);return match&&match[0]||'';},r:function(input,args){return this.__repr(input);},s:function(input,args){return input.toString&&input.toString()||''+input;}},format:function(str,args){var end=0;var start=0;var match=false;var buffer=[];var token='';var tmp=(str||'').split('');for(start=0;start<tmp.length;start++){if(tmp[start]=='{'&&tmp[start+1]!='{'){end=str.indexOf('}',start);token=tmp.slice(start+1,end).join('');if(tmp[start-1]!='{'&&tmp[end+1]!='}'){var tokenArgs=(typeof arguments[1]!='object')?arguments2Array(arguments,2):args||[];buffer.push(strings.strConversion.__formatToken(token,tokenArgs));}
else{buffer.push(token);}}
else if(start>end||buffer.length<1){buffer.push(tmp[start]);}}
return(buffer.length>1)?buffer.join(''):buffer[0];},calc:function(str,args){return eval(format(str,args));},repeat:function(s,n){return new Array(n+1).join(s);},UTF8encode:function(s){return unescape(encodeURIComponent(s));},UTF8decode:function(s){return decodeURIComponent(escape(s));},tpl:function(){var out='';var render=true;if(arguments.length==2&&$.isArray(arguments[1])){this[arguments[0]]=arguments[1].join('');return $(this[arguments[0]]);}
if(arguments.length==2&&$.isString(arguments[1])){this[arguments[0]]=arguments[1];return $(this[arguments[0]]);}
if(arguments.length==1){return $(this[arguments[0]]);}
if(arguments.length==2&&arguments[1]==false){return this[arguments[0]];}
if(arguments.length==2&&$.isObject(arguments[1])){return $($.format(this[arguments[0]],arguments[1]));}
if(arguments.length==3&&$.isObject(arguments[1])){return(arguments[2]==true)?$.format(this[arguments[0]],arguments[1]):$($.format(this[arguments[0]],arguments[1]));}}};var Argument=function(arg,args){this.__arg=arg;this.__args=args;this.__max_precision=parseFloat('1.'+(new Array(32)).join('1'),10).toString().length-3;this.__def_precision=6;this.getString=function(){return this.__arg;};this.getKey=function(){return this.__arg.split(':')[0];};this.getFormat=function(){var match=this.getString().split(':');return(match&&match[1])?match[1]:'s';};this.getPrecision=function(){var match=this.getFormat().match(/\.(\d+|\*)/g);if(!match){return this.__def_precision;}
else{match=match[0].slice(1);if(match!='*'){return parseInt(match,10);}
else if(strings.strConversion.__getType(this.__args)=='array'){return this.__args[1]&&this.__args[0]||this.__def_precision;}
else if(strings.strConversion.__getType(this.__args)=='object'){return this.__args[this.getKey()]&&this.__args[this.getKey()][0]||this.__def_precision;}
else{return this.__def_precision;}}};this.getPaddingLength=function(){var match=false;if(this.isAlternate()){match=this.getString().match(/0?#0?(\d+)/);if(match&&match[1]){return parseInt(match[1],10);}}
match=this.getString().match(/(0|\.)(\d+|\*)/g);return match&&parseInt(match[0].slice(1),10)||0;};this.getPaddingString=function(){var o='';if(this.isAlternate()){o=' ';}
if(this.getFormat().match(/#0|0#|^0|\.\d+/)){o='0';}
return o;};this.getFlags=function(){var match=this.getString().matc(/^(0|\#|\-|\+|\s)+/);return match&&match[0].split('')||[];};this.isAlternate=function(){return!!this.getFormat().match(/^0?#/);};};var arguments2Array=function(args,shift){var o=[];for(l=args.length,x=(shift||0)-1;x<l;x++){o.push(args[x]);}
return o;};$.extend(strings);})(jQuery);(function($){var hash=window.location.hash;var handlers=[];var opt={};$.extend({anchorHandler:{apply:function(){$.map(handlers,function(handler){var match=hash.match(handler.r)&&hash.match(handler.r)[0]||false;if(match){handler.cb.apply($('a[href*='+match+']').get(0),[handler.r,hash||'']);}});return $.anchorHandler;},add:function(regexp,callback,options){var opt=$.extend({handleClick:true,preserveHash:true},options);if(opt.handleClick){$('a[href*=#]').each(function(i,a){if(a.href.match(regexp)){$(a).bind('click.anchorHandler',function(){if(opt.preserveHash){window.location.hash=a.hash;}
return callback.apply(this,[regexp,a.href]);});}});}
handlers.push({r:regexp,cb:callback});$($.anchorHandler.apply);return $.anchorHandler;}}});})(jQuery);jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options.expires=-1;}
var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000));}else{date=options.expires;}
expires='; expires='+date.toUTCString();}
var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; domain='+(options.domain):'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('');}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break;}}}
return cookieValue;}};(function($){function countdown(el,options){var calc=function(target,current){var current=current||new Date();if(current>=target){return true;}
var o={};var remain=Math.floor((target.getTime()-current.getTime())/1000);o.days=Math.floor(remain/86400);remain%=86400;o.hours=Math.floor(remain/3600);remain%=3600;o.minutes=Math.floor(remain/60);remain%=60;o.seconds=remain;o.years=Math.floor(o.days/365);o.months=Math.floor(o.days/30);o.weeks=Math.floor(o.days/7);return o;};var getWeek=function(date){var onejan=new Date(date.getFullYear(),0,1);return Math.ceil((((date-onejan)/86400000)+onejan.getDay())/7);};var options=$.extend({date:new Date(),modifiers:[],interval:1000,msgFormat:'%d [day|days] %hh %mm %ss',msgNow:'Now !'},options);var tokens={y:new RegExp('\\%y(.+?)\\[(\\w+)\\|(\\w+)\\]','g'),M:new RegExp('\\%M(.+?)\\[(\\w+)\\|(\\w+)\\]','g'),w:new RegExp('\\%w(.+?)\\[(\\w+)\\|(\\w+)\\]','g'),d:new RegExp('\\%d(.+?)\\[(\\w+)\\|(\\w+)\\]','g'),h:new RegExp('\\%h(.+?)\\[(\\w+)\\|(\\w+)\\]','g'),m:new RegExp('\\%m(.+?)\\[(\\w+)\\|(\\w+)\\]','g'),s:new RegExp('\\%s(.+?)\\[(\\w+)\\|(\\w+)\\]','g')};var formatToken=function(str,token,val){return(!tokens[token])?'':str.match(/\[|\]/g)&&(str.replace(tokens[token],val+'$1'+((parseInt(val,10)<2)?'$2':'$3'))||'')||str.replace('%'+token,val);};var format=function(str,obj){var o=str;o=formatToken(o,'y',obj.years);o=formatToken(o,'M',obj.months);o=formatToken(o,'w',obj.weeks);o=formatToken(o,'d',obj.days);o=formatToken(o,'h',obj.hours);o=formatToken(o,'m',obj.minutes);o=formatToken(o,'s',obj.seconds);return o;};var update=function(){var date_obj=calc(cd.date);if(date_obj===true){cd.stop();clearInterval(cd.id);$(cd.el).html(options.msgNow);return true;}
else{$(cd.el).text(format(options.msgFormat,date_obj));}};var apply_modifiers=function(modifiers,date){if(modifiers.length===0){return date;}
var modifier_re=/^([+-]\d+)([yMdhms])$/;var conversions={s:1000,m:60*1000,h:60*60*1000,d:24*60*60*1000,M:30*24*60*60*1000,y:365*24*60*60*1000};var displacement=0;for(var i=0,n=modifiers.length;i<n;++i){var match=modifiers[i].match(modifier_re);if(match!==null){displacement+=parseInt(match[1],10)*conversions[match[2]];}}
return new Date(date.getTime()+displacement);};var cd={id:setInterval(update,options.interval),el:el,start:function(){return new countdown($(this.el),options);},stop:function(){return clearInterval(this.id);},date:apply_modifiers(options.modifiers,options.date)};$(el).data('countdown',cd);update();return $(el).data('countdown');}
$.fn.countdown=function(args){if(this.get(0))return new countdown(this.get(0),args);};})(jQuery);;(function($){var ver='2.24';var ie6=$.browser.msie&&/MSIE 6.0/.test(navigator.userAgent);function log(){if(window.console&&window.console.log)
window.console.log('[cycle] '+Array.prototype.join.call(arguments,''));};$.fn.cycle=function(options){return this.each(function(){if(options===undefined||options===null)
options={};if(options.constructor==String){switch(options){case'stop':if(this.cycleTimeout)clearTimeout(this.cycleTimeout);this.cycleTimeout=0;$(this).data('cycle.opts','');return;case'pause':this.cyclePause=1;return;case'resume':this.cyclePause=0;return;default:options={fx:options};};}
else if(options.constructor==Number){var num=options;options=$(this).data('cycle.opts');if(!options){log('options not found, can not advance slide');return;}
if(num<0||num>=options.elements.length){log('invalid slide index: '+num);return;}
options.nextSlide=num;if(this.cycleTimeout){clearTimeout(this.cycleTimeout);this.cycleTimeout=0;}
go(options.elements,options,1,1);return;}
if(this.cycleTimeout)clearTimeout(this.cycleTimeout);this.cycleTimeout=0;this.cyclePause=0;var $cont=$(this);var $slides=options.slideExpr?$(options.slideExpr,this):$cont.children();var els=$slides.get();if(els.length<2){log('terminating; too few slides: '+els.length);return;}
var opts=$.extend({},$.fn.cycle.defaults,options||{},$.metadata?$cont.metadata():$.meta?$cont.data():{});if(opts.autostop)
opts.countdown=opts.autostopCount||els.length;$cont.data('cycle.opts',opts);opts.container=this;opts.elements=els;opts.before=opts.before?[opts.before]:[];opts.after=opts.after?[opts.after]:[];opts.after.unshift(function(){opts.busy=0;});if(opts.continuous)
opts.after.push(function(){go(els,opts,0,!opts.rev);});if(ie6&&opts.cleartype&&!opts.cleartypeNoBg)
clearTypeFix($slides);var cls=this.className;opts.width=parseInt((cls.match(/w:(\d+)/)||[])[1])||opts.width;opts.height=parseInt((cls.match(/h:(\d+)/)||[])[1])||opts.height;opts.timeout=parseInt((cls.match(/t:(\d+)/)||[])[1])||opts.timeout;if($cont.css('position')=='static')
$cont.css('position','relative');if(opts.width)
$cont.width(opts.width);if(opts.height&&opts.height!='auto')
$cont.height(opts.height);if(opts.random){opts.randomMap=[];for(var i=0;i<els.length;i++)
opts.randomMap.push(i);opts.randomMap.sort(function(a,b){return Math.random()-0.5;});opts.randomIndex=0;opts.startingSlide=opts.randomMap[0];}
else if(opts.startingSlide>=els.length)
opts.startingSlide=0;var first=opts.startingSlide||0;$slides.css({position:'absolute',top:0,left:0}).hide().each(function(i){var z=first?i>=first?els.length-(i-first):first-i:els.length-i;$(this).css('z-index',z)});$(els[first]).css('opacity',1).show();if($.browser.msie)els[first].style.removeAttribute('filter');if(opts.fit&&opts.width)
$slides.width(opts.width);if(opts.fit&&opts.height&&opts.height!='auto')
$slides.height(opts.height);if(opts.pause)
$cont.hover(function(){this.cyclePause=1;},function(){this.cyclePause=0;});var init=$.fn.cycle.transitions[opts.fx];if($.isFunction(init))
init($cont,$slides,opts);else if(opts.fx!='custom')
log('unknown transition: '+opts.fx);$slides.each(function(){var $el=$(this);this.cycleH=(opts.fit&&opts.height)?opts.height:$el.height();this.cycleW=(opts.fit&&opts.width)?opts.width:$el.width();});opts.cssBefore=opts.cssBefore||{};opts.animIn=opts.animIn||{};opts.animOut=opts.animOut||{};$slides.not(':eq('+first+')').css(opts.cssBefore);if(opts.cssFirst)
$($slides[first]).css(opts.cssFirst);if(opts.timeout){if(opts.speed.constructor==String)
opts.speed={slow:600,fast:200}[opts.speed]||400;if(!opts.sync)
opts.speed=opts.speed/2;while((opts.timeout-opts.speed)<250)
opts.timeout+=opts.speed;}
if(opts.easing)
opts.easeIn=opts.easeOut=opts.easing;if(!opts.speedIn)
opts.speedIn=opts.speed;if(!opts.speedOut)
opts.speedOut=opts.speed;opts.slideCount=els.length;opts.currSlide=first;if(opts.random){opts.nextSlide=opts.currSlide;if(++opts.randomIndex==els.length)
opts.randomIndex=0;opts.nextSlide=opts.randomMap[opts.randomIndex];}
else
opts.nextSlide=opts.startingSlide>=(els.length-1)?0:opts.startingSlide+1;var e0=$slides[first];if(opts.before.length)
opts.before[0].apply(e0,[e0,e0,opts,true]);if(opts.after.length>1)
opts.after[1].apply(e0,[e0,e0,opts,true]);if(opts.click&&!opts.next)
opts.next=opts.click;if(opts.next)
$(opts.next).bind('click',function(){return advance(els,opts,opts.rev?-1:1)});if(opts.prev)
$(opts.prev).bind('click',function(){return advance(els,opts,opts.rev?1:-1)});if(opts.pager)
buildPager(els,opts);opts.addSlide=function(newSlide){var $s=$(newSlide),s=$s[0];if(!opts.autostopCount)
opts.countdown++;els.push(s);if(opts.els)
opts.els.push(s);opts.slideCount=els.length;$s.css('position','absolute').appendTo($cont);if(ie6&&opts.cleartype&&!opts.cleartypeNoBg)
clearTypeFix($s);if(opts.fit&&opts.width)
$s.width(opts.width);if(opts.fit&&opts.height&&opts.height!='auto')
$slides.height(opts.height);s.cycleH=(opts.fit&&opts.height)?opts.height:$s.height();s.cycleW=(opts.fit&&opts.width)?opts.width:$s.width();$s.css(opts.cssBefore);if(opts.pager)
$.fn.cycle.createPagerAnchor(els.length-1,s,$(opts.pager),els,opts);if(typeof opts.onAddSlide=='function')
opts.onAddSlide($s);};if(opts.timeout||opts.continuous)
this.cycleTimeout=setTimeout(function(){go(els,opts,0,!opts.rev)},opts.continuous?10:opts.timeout+(opts.delay||0));});};function go(els,opts,manual,fwd){if(opts.busy)return;var p=opts.container,curr=els[opts.currSlide],next=els[opts.nextSlide];if(p.cycleTimeout===0&&!manual)
return;if(!manual&&!p.cyclePause&&((opts.autostop&&(--opts.countdown<=0))||(opts.nowrap&&!opts.random&&opts.nextSlide<opts.currSlide))){if(opts.end)
opts.end(opts);return;}
if(manual||!p.cyclePause){if(opts.before.length)
$.each(opts.before,function(i,o){o.apply(next,[curr,next,opts,fwd]);});var after=function(){if($.browser.msie&&opts.cleartype)
this.style.removeAttribute('filter');$.each(opts.after,function(i,o){o.apply(next,[curr,next,opts,fwd]);});};if(opts.nextSlide!=opts.currSlide){opts.busy=1;if(opts.fxFn)
opts.fxFn(curr,next,opts,after,fwd);else if($.isFunction($.fn.cycle[opts.fx]))
$.fn.cycle[opts.fx](curr,next,opts,after);else
$.fn.cycle.custom(curr,next,opts,after);}
if(opts.random){opts.currSlide=opts.nextSlide;if(++opts.randomIndex==els.length)
opts.randomIndex=0;opts.nextSlide=opts.randomMap[opts.randomIndex];}
else{var roll=(opts.nextSlide+1)==els.length;opts.nextSlide=roll?0:opts.nextSlide+1;opts.currSlide=roll?els.length-1:opts.nextSlide-1;}
if(opts.pager)
$.fn.cycle.updateActivePagerLink(opts.pager,opts.currSlide);}
if(opts.timeout&&!opts.continuous)
p.cycleTimeout=setTimeout(function(){go(els,opts,0,!opts.rev)},opts.timeout);else if(opts.continuous&&p.cyclePause)
p.cycleTimeout=setTimeout(function(){go(els,opts,0,!opts.rev)},10);};$.fn.cycle.updateActivePagerLink=function(pager,currSlide){$(pager).find('a').removeClass('activeSlide').filter('a:eq('+currSlide+')').addClass('activeSlide');};function advance(els,opts,val){var p=opts.container,timeout=p.cycleTimeout;if(timeout){clearTimeout(timeout);p.cycleTimeout=0;}
if(opts.random&&val<0){opts.randomIndex--;if(--opts.randomIndex==-2)
opts.randomIndex=els.length-2;else if(opts.randomIndex==-1)
opts.randomIndex=els.length-1;opts.nextSlide=opts.randomMap[opts.randomIndex];}
else if(opts.random){if(++opts.randomIndex==els.length)
opts.randomIndex=0;opts.nextSlide=opts.randomMap[opts.randomIndex];}
else{opts.nextSlide=opts.currSlide+val;if(opts.nextSlide<0){if(opts.nowrap)return false;opts.nextSlide=els.length-1;}
else if(opts.nextSlide>=els.length){if(opts.nowrap)return false;opts.nextSlide=0;}}
log('nextSlide: '+opts.nextSlide+'; randomIndex: '+opts.randomIndex);if(opts.prevNextClick&&typeof opts.prevNextClick=='function')
opts.prevNextClick(val>0,opts.nextSlide,els[opts.nextSlide]);go(els,opts,1,val>=0);return false;};function buildPager(els,opts){var $p=$(opts.pager);$.each(els,function(i,o){$.fn.cycle.createPagerAnchor(i,o,$p,els,opts);});$.fn.cycle.updateActivePagerLink(opts.pager,opts.startingSlide);};$.fn.cycle.createPagerAnchor=function(i,el,$p,els,opts){var $a=(typeof opts.pagerAnchorBuilder=='function')?$(opts.pagerAnchorBuilder(i,el)):$('<a href="#">'+(i+1)+'</a>');if($a.parents('body').length==0)
$a.appendTo($p);$a.bind(opts.pagerEvent,function(){opts.nextSlide=i;var p=opts.container,timeout=p.cycleTimeout;if(timeout){clearTimeout(timeout);p.cycleTimeout=0;}
if(typeof opts.pagerClick=='function')
opts.pagerClick(opts.nextSlide,els[opts.nextSlide]);go(els,opts,1,opts.currSlide<i);return false;});};function clearTypeFix($slides){function hex(s){var s=parseInt(s).toString(16);return s.length<2?'0'+s:s;};function getBg(e){for(;e&&e.nodeName.toLowerCase()!='html';e=e.parentNode){var v=$.css(e,'background-color');if(v.indexOf('rgb')>=0){var rgb=v.match(/\d+/g);return'#'+hex(rgb[0])+hex(rgb[1])+hex(rgb[2]);}
if(v&&v!='transparent')
return v;}
return'#ffffff';};$slides.each(function(){$(this).css('background-color',getBg(this));});};$.fn.cycle.custom=function(curr,next,opts,cb){var $l=$(curr),$n=$(next);$n.css(opts.cssBefore);var fn=function(){$n.animate(opts.animIn,opts.speedIn,opts.easeIn,cb)};$l.animate(opts.animOut,opts.speedOut,opts.easeOut,function(){if(opts.cssAfter)$l.css(opts.cssAfter);if(!opts.sync)fn();});if(opts.sync)fn();};$.fn.cycle.transitions={fade:function($cont,$slides,opts){$slides.not(':eq('+opts.startingSlide+')').css('opacity',0);opts.before.push(function(){$(this).show()});opts.animIn={opacity:1};opts.animOut={opacity:0};opts.cssBefore={opacity:0};opts.cssAfter={display:'none'};}};$.fn.cycle.ver=function(){return ver;};$.fn.cycle.defaults={fx:'fade',timeout:4000,continuous:0,speed:1000,speedIn:null,speedOut:null,next:null,prev:null,prevNextClick:null,pager:null,pagerClick:null,pagerEvent:'click',pagerAnchorBuilder:null,before:null,after:null,end:null,easing:null,easeIn:null,easeOut:null,shuffle:null,animIn:null,animOut:null,cssBefore:null,cssAfter:null,fxFn:null,height:'auto',startingSlide:0,sync:1,random:0,fit:0,pause:0,autostop:0,autostopCount:0,delay:0,slideExpr:null,cleartype:0,nowrap:0};})(jQuery);(function($){$.fn.cycle.transitions.scrollUp=function($cont,$slides,opts){$cont.css('overflow','hidden');opts.before.push(function(curr,next,opts){$(this).show();opts.cssBefore.top=next.offsetHeight;opts.animOut.top=0-curr.offsetHeight;});opts.cssFirst={top:0};opts.animIn={top:0};opts.cssAfter={display:'none'};};$.fn.cycle.transitions.scrollDown=function($cont,$slides,opts){$cont.css('overflow','hidden');opts.before.push(function(curr,next,opts){$(this).show();opts.cssBefore.top=0-next.offsetHeight;opts.animOut.top=curr.offsetHeight;});opts.cssFirst={top:0};opts.animIn={top:0};opts.cssAfter={display:'none'};};$.fn.cycle.transitions.scrollLeft=function($cont,$slides,opts){$cont.css('overflow','hidden');opts.before.push(function(curr,next,opts){$(this).show();opts.cssBefore.left=next.offsetWidth;opts.animOut.left=0-curr.offsetWidth;});opts.cssFirst={left:0};opts.animIn={left:0};};$.fn.cycle.transitions.scrollRight=function($cont,$slides,opts){$cont.css('overflow','hidden');opts.before.push(function(curr,next,opts){$(this).show();opts.cssBefore.left=0-next.offsetWidth;opts.animOut.left=curr.offsetWidth;});opts.cssFirst={left:0};opts.animIn={left:0};};$.fn.cycle.transitions.scrollHorz=function($cont,$slides,opts){$cont.css('overflow','hidden').width();opts.before.push(function(curr,next,opts,fwd){$(this).show();var currW=curr.offsetWidth,nextW=next.offsetWidth;opts.cssBefore=fwd?{left:nextW}:{left:-nextW};opts.animIn.left=0;opts.animOut.left=fwd?-currW:currW;$slides.not(curr).css(opts.cssBefore);});opts.cssFirst={left:0};opts.cssAfter={display:'none'}};$.fn.cycle.transitions.scrollVert=function($cont,$slides,opts){$cont.css('overflow','hidden');opts.before.push(function(curr,next,opts,fwd){$(this).show();var currH=curr.offsetHeight,nextH=next.offsetHeight;opts.cssBefore=fwd?{top:-nextH}:{top:nextH};opts.animIn.top=0;opts.animOut.top=fwd?currH:-currH;$slides.not(curr).css(opts.cssBefore);});opts.cssFirst={top:0};opts.cssAfter={display:'none'}};$.fn.cycle.transitions.slideX=function($cont,$slides,opts){opts.before.push(function(curr,next,opts){$(curr).css('zIndex',1);});opts.onAddSlide=function($s){$s.hide();};opts.cssBefore={zIndex:2};opts.animIn={width:'show'};opts.animOut={width:'hide'};};$.fn.cycle.transitions.slideY=function($cont,$slides,opts){opts.before.push(function(curr,next,opts){$(curr).css('zIndex',1);});opts.onAddSlide=function($s){$s.hide();};opts.cssBefore={zIndex:2};opts.animIn={height:'show'};opts.animOut={height:'hide'};};$.fn.cycle.transitions.shuffle=function($cont,$slides,opts){var w=$cont.css('overflow','visible').width();$slides.css({left:0,top:0});opts.before.push(function(){$(this).show()});opts.speed=opts.speed/2;opts.random=0;opts.shuffle=opts.shuffle||{left:-w,top:15};opts.els=[];for(var i=0;i<$slides.length;i++)
opts.els.push($slides[i]);for(var i=0;i<opts.startingSlide;i++)
opts.els.push(opts.els.shift());opts.fxFn=function(curr,next,opts,cb,fwd){var $el=fwd?$(curr):$(next);$el.animate(opts.shuffle,opts.speedIn,opts.easeIn,function(){fwd?opts.els.push(opts.els.shift()):opts.els.unshift(opts.els.pop());if(fwd)
for(var i=0,len=opts.els.length;i<len;i++)
$(opts.els[i]).css('z-index',len-i);else{var z=$(curr).css('z-index');$el.css('z-index',parseInt(z)+1);}
$el.animate({left:0,top:0},opts.speedOut,opts.easeOut,function(){$(fwd?this:curr).hide();if(cb)cb();});});};opts.onAddSlide=function($s){$s.hide();};};$.fn.cycle.transitions.turnUp=function($cont,$slides,opts){opts.before.push(function(curr,next,opts){$(this).show();opts.cssBefore.top=next.cycleH;opts.animIn.height=next.cycleH;});opts.onAddSlide=function($s){$s.hide();};opts.cssFirst={top:0};opts.cssBefore={height:0};opts.animIn={top:0};opts.animOut={height:0};opts.cssAfter={display:'none'};};$.fn.cycle.transitions.turnDown=function($cont,$slides,opts){opts.before.push(function(curr,next,opts){$(this).show();opts.animIn.height=next.cycleH;opts.animOut.top=curr.cycleH;});opts.onAddSlide=function($s){$s.hide();};opts.cssFirst={top:0};opts.cssBefore={top:0,height:0};opts.animOut={height:0};opts.cssAfter={display:'none'};};$.fn.cycle.transitions.turnLeft=function($cont,$slides,opts){opts.before.push(function(curr,next,opts){$(this).show();opts.cssBefore.left=next.cycleW;opts.animIn.width=next.cycleW;});opts.onAddSlide=function($s){$s.hide();};opts.cssBefore={width:0};opts.animIn={left:0};opts.animOut={width:0};opts.cssAfter={display:'none'};};$.fn.cycle.transitions.turnRight=function($cont,$slides,opts){opts.before.push(function(curr,next,opts){$(this).show();opts.animIn.width=next.cycleW;opts.animOut.left=curr.cycleW;});opts.onAddSlide=function($s){$s.hide();};opts.cssBefore={left:0,width:0};opts.animIn={left:0};opts.animOut={width:0};opts.cssAfter={display:'none'};};$.fn.cycle.transitions.zoom=function($cont,$slides,opts){opts.cssFirst={top:0,left:0};opts.cssAfter={display:'none'};opts.before.push(function(curr,next,opts){$(this).show();opts.cssBefore={width:0,height:0,top:next.cycleH/2,left:next.cycleW/2};opts.cssAfter={display:'none'};opts.animIn={top:0,left:0,width:next.cycleW,height:next.cycleH};opts.animOut={width:0,height:0,top:curr.cycleH/2,left:curr.cycleW/2};$(curr).css('zIndex',2);$(next).css('zIndex',1);});opts.onAddSlide=function($s){$s.hide();};};$.fn.cycle.transitions.fadeZoom=function($cont,$slides,opts){opts.before.push(function(curr,next,opts){opts.cssBefore={width:0,height:0,opacity:1,left:next.cycleW/2,top:next.cycleH/2,zIndex:1};opts.animIn={top:0,left:0,width:next.cycleW,height:next.cycleH};});opts.animOut={opacity:0};opts.cssAfter={zIndex:0};};$.fn.cycle.transitions.blindX=function($cont,$slides,opts){var w=$cont.css('overflow','hidden').width();$slides.show();opts.before.push(function(curr,next,opts){$(curr).css('zIndex',1);});opts.cssBefore={left:w,zIndex:2};opts.cssAfter={zIndex:1};opts.animIn={left:0};opts.animOut={left:w};};$.fn.cycle.transitions.blindY=function($cont,$slides,opts){var h=$cont.css('overflow','hidden').height();$slides.show();opts.before.push(function(curr,next,opts){$(curr).css('zIndex',1);});opts.cssBefore={top:h,zIndex:2};opts.cssAfter={zIndex:1};opts.animIn={top:0};opts.animOut={top:h};};$.fn.cycle.transitions.blindZ=function($cont,$slides,opts){var h=$cont.css('overflow','hidden').height();var w=$cont.width();$slides.show();opts.before.push(function(curr,next,opts){$(curr).css('zIndex',1);});opts.cssBefore={top:h,left:w,zIndex:2};opts.cssAfter={zIndex:1};opts.animIn={top:0,left:0};opts.animOut={top:h,left:w};};$.fn.cycle.transitions.growX=function($cont,$slides,opts){opts.before.push(function(curr,next,opts){opts.cssBefore={left:this.cycleW/2,width:0,zIndex:2};opts.animIn={left:0,width:this.cycleW};opts.animOut={left:0};$(curr).css('zIndex',1);});opts.onAddSlide=function($s){$s.hide().css('zIndex',1);};};$.fn.cycle.transitions.growY=function($cont,$slides,opts){opts.before.push(function(curr,next,opts){opts.cssBefore={top:this.cycleH/2,height:0,zIndex:2};opts.animIn={top:0,height:this.cycleH};opts.animOut={top:0};$(curr).css('zIndex',1);});opts.onAddSlide=function($s){$s.hide().css('zIndex',1);};};$.fn.cycle.transitions.curtainX=function($cont,$slides,opts){opts.before.push(function(curr,next,opts){opts.cssBefore={left:next.cycleW/2,width:0,zIndex:1,display:'block'};opts.animIn={left:0,width:this.cycleW};opts.animOut={left:curr.cycleW/2,width:0};$(curr).css('zIndex',2);});opts.onAddSlide=function($s){$s.hide();};opts.cssAfter={zIndex:1,display:'none'};};$.fn.cycle.transitions.curtainY=function($cont,$slides,opts){opts.before.push(function(curr,next,opts){opts.cssBefore={top:next.cycleH/2,height:0,zIndex:1,display:'block'};opts.animIn={top:0,height:this.cycleH};opts.animOut={top:curr.cycleH/2,height:0};$(curr).css('zIndex',2);});opts.onAddSlide=function($s){$s.hide();};opts.cssAfter={zIndex:1,display:'none'};};$.fn.cycle.transitions.cover=function($cont,$slides,opts){var d=opts.direction||'left';var w=$cont.css('overflow','hidden').width();var h=$cont.height();opts.before.push(function(curr,next,opts){opts.cssBefore=opts.cssBefore||{};opts.cssBefore.zIndex=2;opts.cssBefore.display='block';if(d=='right')
opts.cssBefore.left=-w;else if(d=='up')
opts.cssBefore.top=h;else if(d=='down')
opts.cssBefore.top=-h;else
opts.cssBefore.left=w;$(curr).css('zIndex',1);});if(!opts.animIn)opts.animIn={left:0,top:0};if(!opts.animOut)opts.animOut={left:0,top:0};opts.cssAfter=opts.cssAfter||{};opts.cssAfter.zIndex=2;opts.cssAfter.display='none';};$.fn.cycle.transitions.uncover=function($cont,$slides,opts){var d=opts.direction||'left';var w=$cont.css('overflow','hidden').width();var h=$cont.height();opts.before.push(function(curr,next,opts){opts.cssBefore.display='block';if(d=='right')
opts.animOut.left=w;else if(d=='up')
opts.animOut.top=-h;else if(d=='down')
opts.animOut.top=h;else
opts.animOut.left=-w;$(curr).css('zIndex',2);$(next).css('zIndex',1);});opts.onAddSlide=function($s){$s.hide();};if(!opts.animIn)opts.animIn={left:0,top:0};opts.cssBefore=opts.cssBefore||{};opts.cssBefore.top=0;opts.cssBefore.left=0;opts.cssAfter=opts.cssAfter||{};opts.cssAfter.zIndex=1;opts.cssAfter.display='none';};$.fn.cycle.transitions.toss=function($cont,$slides,opts){var w=$cont.css('overflow','visible').width();var h=$cont.height();opts.before.push(function(curr,next,opts){$(curr).css('zIndex',2);opts.cssBefore.display='block';if(!opts.animOut.left&&!opts.animOut.top)
opts.animOut={left:w*2,top:-h/2,opacity:0};else
opts.animOut.opacity=0;});opts.onAddSlide=function($s){$s.hide();};opts.cssBefore={left:0,top:0,zIndex:1,opacity:1};opts.animIn={left:0};opts.cssAfter={zIndex:2,display:'none'};};$.fn.cycle.transitions.wipe=function($cont,$slides,opts){var w=$cont.css('overflow','hidden').width();var h=$cont.height();opts.cssBefore=opts.cssBefore||{};var clip;if(opts.clip){if(/l2r/.test(opts.clip))
clip='rect(0px 0px '+h+'px 0px)';else if(/r2l/.test(opts.clip))
clip='rect(0px '+w+'px '+h+'px '+w+'px)';else if(/t2b/.test(opts.clip))
clip='rect(0px '+w+'px 0px 0px)';else if(/b2t/.test(opts.clip))
clip='rect('+h+'px '+w+'px '+h+'px 0px)';else if(/zoom/.test(opts.clip)){var t=parseInt(h/2);var l=parseInt(w/2);clip='rect('+t+'px '+l+'px '+t+'px '+l+'px)';}}
opts.cssBefore.clip=opts.cssBefore.clip||clip||'rect(0px 0px 0px 0px)';var d=opts.cssBefore.clip.match(/(\d+)/g);var t=parseInt(d[0]),r=parseInt(d[1]),b=parseInt(d[2]),l=parseInt(d[3]);opts.before.push(function(curr,next,opts){if(curr==next)return;var $curr=$(curr).css('zIndex',2);var $next=$(next).css({zIndex:3,display:'block'});var step=1,count=parseInt((opts.speedIn/13))-1;function f(){var tt=t?t-parseInt(step*(t/count)):0;var ll=l?l-parseInt(step*(l/count)):0;var bb=b<h?b+parseInt(step*((h-b)/count||1)):h;var rr=r<w?r+parseInt(step*((w-r)/count||1)):w;$next.css({clip:'rect('+tt+'px '+rr+'px '+bb+'px '+ll+'px)'});(step++<=count)?setTimeout(f,13):$curr.css('display','none');}
f();});opts.cssAfter={};opts.animIn={left:0};opts.animOut={left:0};};})(jQuery);(function($){$.extend($.fn,{delayedObserver:function(callback,delay,options){return this.each(function(){var el=$(this);var op=options||{};el.data('oldval',el.val()).data('delay',delay||0.5).data('condition',op.condition||function(){return($(this).data('oldval')==$(this).val());}).data('callback',callback)
[(op.event||'keyup')](function(){if(el.data('condition').apply(el)){return;}
else{if(el.data('timer')){clearTimeout(el.data('timer'));}
el.data('timer',setTimeout(function(){el.data('callback').apply(el);},el.data('delay')*1000));el.data('oldval',el.val());}});});}});})(jQuery);;(function(){var $$;$$=jQuery.fn.flash=function(htmlOptions,pluginOptions,replace,update){var block=replace||$$.replace;pluginOptions=$$.copy($$.pluginOptions,pluginOptions);if(!$$.hasFlash(pluginOptions.version)){if(pluginOptions.expressInstall&&$$.hasFlash(6,0,65)){var expressInstallOptions={flashvars:{MMredirectURL:location,MMplayerType:'PlugIn',MMdoctitle:jQuery('title').text()}};}else if(pluginOptions.update){block=update||$$.update;}else{return this;}}
htmlOptions=$$.copy($$.htmlOptions,expressInstallOptions,htmlOptions);return this.each(function(){block.call(this,$$.copy(htmlOptions));});};$$.copy=function(){var options={},flashvars={};for(var i=0;i<arguments.length;i++){var arg=arguments[i];if(arg==undefined)continue;jQuery.extend(options,arg);if(arg.flashvars==undefined)continue;jQuery.extend(flashvars,arg.flashvars);}
options.flashvars=flashvars;return options;};$$.hasFlash=function(){if(/hasFlash\=true/.test(location))return true;if(/hasFlash\=false/.test(location))return false;var pv=$$.hasFlash.playerVersion().match(/\d+/g);var rv=String([arguments[0],arguments[1],arguments[2]]).match(/\d+/g)||String($$.pluginOptions.version).match(/\d+/g);for(var i=0;i<3;i++){pv[i]=parseInt(pv[i]||0);rv[i]=parseInt(rv[i]||0);if(pv[i]<rv[i])return false;if(pv[i]>rv[i])return true;}
return true;};$$.hasFlash.playerVersion=function(){try{try{var axo=new ActiveXObject('ShockwaveFlash.ShockwaveFlash.6');try{axo.AllowScriptAccess='always';}
catch(e){return'6,0,0';}}catch(e){}
return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\D+/g,',').match(/^,?(.+),?$/)[1];}catch(e){try{if(navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin){return(navigator.plugins["Shockwave Flash 2.0"]||navigator.plugins["Shockwave Flash"]).description.replace(/\D+/g,",").match(/^,?(.+),?$/)[1];}}catch(e){}}
return'0,0,0';};$$.htmlOptions={height:240,flashvars:{},pluginspage:'http://www.adobe.com/go/getflashplayer',src:'#',type:'application/x-shockwave-flash',width:320};$$.pluginOptions={expressInstall:false,update:true,version:'6.0.65'};$$.replace=function(htmlOptions){this.innerHTML='<div class="alt">'+this.innerHTML+'</div>';jQuery(this).addClass('flash-replaced').prepend($$.transform(htmlOptions));};$$.update=function(htmlOptions){var url=String(location).split('?');url.splice(1,0,'?hasFlash=true&');url=url.join('');var msg='<p>This content requires the Flash Player. <a href="http://www.adobe.com/go/getflashplayer">Download Flash Player</a>. Already have Flash Player? <a href="'+url+'">Click here.</a></p>';this.innerHTML='<span class="alt">'+this.innerHTML+'</span>';jQuery(this).addClass('flash-update').prepend(msg);};function toAttributeString(){var s='';for(var key in this)
if(typeof this[key]!='function')
s+=key+'="'+this[key]+'" ';return s;};function toFlashvarsString(){var s='';for(var key in this)
if(typeof this[key]!='function')
s+=key+'='+encodeURIComponent(this[key])+'&';return s.replace(/&$/,'');};$$.transform=function(htmlOptions){htmlOptions.toString=toAttributeString;if(htmlOptions.flashvars)htmlOptions.flashvars.toString=toFlashvarsString;return'<embed '+String(htmlOptions)+'/>';};if(window.attachEvent){window.attachEvent("onbeforeunload",function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};});}})();(function($){$._i18n={trans:{},'default':'en',language:'en'};$.i18n=function(){var getTrans=function(ns,str){var trans=false;if($._i18n.trans[$._i18n.language]&&$._i18n.trans[$._i18n.language][ns]&&$._i18n.trans[$._i18n.language][ns][str]){trans=$._i18n.trans[$._i18n.language][ns][str];}
else if($._i18n.trans[$._i18n['default']]&&$._i18n.trans[$._i18n['default']][ns]&&$._i18n.trans[$._i18n['default']][ns][str]){trans=$._i18n.trans[$._i18n['default']][ns][str];}
return trans||str;};if(arguments.length<2){$._i18n.language=arguments[0];return $._i18n.language;}
else{if(typeof(arguments[1])=='string'){var trans=getTrans(arguments[0],arguments[1]);if(arguments[2]&&typeof(arguments[2])=='object'){return $.format(trans,arguments[2]);}
else{return trans;}}
else{var tmp=arguments[0].split('.');var lang=tmp[0];var ns=tmp[1]||'jQuery';if(!$._i18n.trans[lang]){$._i18n.trans[lang]={};$._i18n.trans[lang][ns]=arguments[1];}
else{$.extend($._i18n.trans[lang][ns],arguments[1]);}}}};})(jQuery);(function($){$.fn.caret=function(begin,end){if(this.length==0)return;if(typeof begin=='number'){end=(typeof end=='number')?end:begin;return this.each(function(){if(this.setSelectionRange){this.focus();this.setSelectionRange(begin,end);}else if(this.createTextRange){var range=this.createTextRange();range.collapse(true);range.moveEnd('character',end);range.moveStart('character',begin);range.select();}});}else{if(this[0].setSelectionRange){begin=this[0].selectionStart;end=this[0].selectionEnd;}else if(document.selection&&document.selection.createRange){var range=document.selection.createRange();begin=0-range.duplicate().moveStart('character',-100000);end=begin+range.text.length;}
return{begin:begin,end:end};}};var charMap={'9':"[0-9]",'a':"[A-Za-z]",'*':"[A-Za-z0-9]"};$.mask={addPlaceholder:function(c,r){charMap[c]=r;}};$.fn.unmask=function(){return this.trigger("unmask");};$.fn.mask=function(mask,settings){settings=$.extend({placeholder:"_",completed:null},settings);var re=new RegExp("^"+
$.map(mask.split(""),function(c,i){return charMap[c]||((/[A-Za-z0-9]/.test(c)?"":"\\")+c);}).join('')+"$");return this.each(function(){var input=$(this);var buffer=new Array(mask.length);var locked=new Array(mask.length);var valid=false;var ignore=false;var firstNonMaskPos=null;$.each(mask.split(""),function(i,c){locked[i]=(charMap[c]==null);buffer[i]=locked[i]?c:settings.placeholder;if(!locked[i]&&firstNonMaskPos==null)
firstNonMaskPos=i;});function focusEvent(){checkVal();writeBuffer();setTimeout(function(){$(input[0]).caret(valid?mask.length:firstNonMaskPos);},0);};function keydownEvent(e){var pos=$(this).caret();var k=e.keyCode;ignore=(k<16||(k>16&&k<32)||(k>32&&k<41));if((pos.begin-pos.end)!=0&&(!ignore||k==8||k==46)){clearBuffer(pos.begin,pos.end);}
if(k==8){while(pos.begin-->=0){if(!locked[pos.begin]){buffer[pos.begin]=settings.placeholder;if($.browser.opera){s=writeBuffer();input.val(s.substring(0,pos.begin)+" "+s.substring(pos.begin));$(this).caret(pos.begin+1);}else{writeBuffer();$(this).caret(Math.max(firstNonMaskPos,pos.begin));}
return false;}}}else if(k==46){clearBuffer(pos.begin,pos.begin+1);writeBuffer();$(this).caret(Math.max(firstNonMaskPos,pos.begin));return false;}else if(k==27){clearBuffer(0,mask.length);writeBuffer();$(this).caret(firstNonMaskPos);return false;}};function keypressEvent(e){if(ignore){ignore=false;return(e.keyCode==8)?false:null;}
e=e||window.event;var k=e.charCode||e.keyCode||e.which;var pos=$(this).caret();if(e.ctrlKey||e.altKey){return true;}else if((k>=41&&k<=122)||k==32||k>186){var p=seekNext(pos.begin-1);if(p<mask.length){if(new RegExp(charMap[mask.charAt(p)]).test(String.fromCharCode(k))){buffer[p]=String.fromCharCode(k);writeBuffer();var next=seekNext(p);$(this).caret(next);if(settings.completed&&next==mask.length)
settings.completed.call(input);}}}
return false;};function clearBuffer(start,end){for(var i=start;i<end&&i<mask.length;i++){if(!locked[i])
buffer[i]=settings.placeholder;}};function writeBuffer(){return input.val(buffer.join('')).val();};function checkVal(){var test=input.val();var pos=0;for(var i=0;i<mask.length;i++){if(!locked[i]){buffer[i]=settings.placeholder;while(pos++<test.length){var reChar=new RegExp(charMap[mask.charAt(i)]);if(test.charAt(pos-1).match(reChar)){buffer[i]=test.charAt(pos-1);break;}}}}
var s=writeBuffer();if(!s.match(re)){input.val("");clearBuffer(0,mask.length);valid=false;}else
valid=true;};function seekNext(pos){while(++pos<mask.length){if(!locked[pos])
return pos;}
return mask.length;};input.one("unmask",function(){input.unbind("focus",focusEvent);input.unbind("blur",checkVal);input.unbind("keydown",keydownEvent);input.unbind("keypress",keypressEvent);if($.browser.msie)
this.onpaste=null;else if($.browser.mozilla)
this.removeEventListener('input',checkVal,false);});input.bind("focus",focusEvent);input.bind("blur",checkVal);input.bind("keydown",keydownEvent);input.bind("keypress",keypressEvent);if($.browser.msie)
this.onpaste=function(){setTimeout(checkVal,0);};else if($.browser.mozilla)
this.addEventListener('input',checkVal,false);checkVal();});};})(jQuery);(function($){$.event.special.mousewheel={setup:function(){var handler=$.event.special.mousewheel.handler;if($.browser.mozilla)
$(this).bind('mousemove.mousewheel',function(event){$.data(this,'mwcursorposdata',{pageX:event.pageX,pageY:event.pageY,clientX:event.clientX,clientY:event.clientY});});if(this.addEventListener)
this.addEventListener(($.browser.mozilla?'DOMMouseScroll':'mousewheel'),handler,false);else
this.onmousewheel=handler;},teardown:function(){var handler=$.event.special.mousewheel.handler;$(this).unbind('mousemove.mousewheel');if(this.removeEventListener)
this.removeEventListener(($.browser.mozilla?'DOMMouseScroll':'mousewheel'),handler,false);else
this.onmousewheel=function(){};$.removeData(this,'mwcursorposdata');},handler:function(event){var args=Array.prototype.slice.call(arguments,1);event=$.event.fix(event||window.event);$.extend(event,$.data(this,'mwcursorposdata')||{});var delta=0,returnValue=true;if(event.wheelDelta)delta=event.wheelDelta/120;if(event.detail)delta=-event.detail/3;if($.browser.opera)delta=-event.wheelDelta;event.data=event.data||{};event.type="mousewheel";args.unshift(delta);args.unshift(event);return $.event.handle.apply(this,args);}};$.fn.extend({mousewheel:function(fn){return fn?this.bind("mousewheel",fn):this.trigger("mousewheel");},unmousewheel:function(fn){return this.unbind("mousewheel",fn);}});})(jQuery);(function($){var win=$(window),options,images,activeImage=-1,activeURL,prevImage,nextImage,compatibleOverlay,middle,centerWidth,centerHeight,ie6=!window.XMLHttpRequest,operaFix=window.opera&&(document.compatMode=="CSS1Compat")&&($.browser.version>=9.3),documentElement=document.documentElement,preload={},preloadPrev=new Image(),preloadNext=new Image(),overlay,center,image,sizer,prevLink,nextLink,bottomContainer,bottom,caption,number;$(function(){$("body").append($([overlay=$('<div id="lbOverlay" />')[0],center=$('<div id="lbCenter" />')[0],bottomContainer=$('<div id="lbBottomContainer" />')[0]]).css("display","none"));image=$('<div id="lbImage" />').appendTo(center).append(sizer=$('<div style="position: relative;" />').append([prevLink=$('<a id="lbPrevLink" href="#" />').click(previous)[0],nextLink=$('<a id="lbNextLink" href="#" />').click(next)[0]])[0])[0];bottom=$('<div id="lbBottom" />').appendTo(bottomContainer).append([$('<a id="lbCloseLink" href="#" />').add(overlay).click(close)[0],caption=$('<div id="lbCaption" />')[0],number=$('<div id="lbNumber" />')[0],$('<div style="clear: both;" />')[0]])[0];});$.slimbox=function(_images,startImage,_options){options=$.extend({loop:false,overlayOpacity:0.8,overlayFadeDuration:400,resizeDuration:400,resizeEasing:"swing",initialWidth:250,initialHeight:250,imageFadeDuration:400,captionAnimationDuration:400,counterText:"Image {x} of {y}",closeKeys:[27,88,67],previousKeys:[37,80],nextKeys:[39,78]},_options);if(typeof _images=="string"){_images=[[_images,startImage]];startImage=0;}
middle=win.scrollTop()+((operaFix?documentElement.clientHeight:win.height())/2);centerWidth=options.initialWidth;centerHeight=options.initialHeight;$(center).css({top:Math.max(0,middle-(centerHeight/2)),width:centerWidth,height:centerHeight,marginLeft:-centerWidth/2}).show();compatibleOverlay=ie6||(overlay.currentStyle&&(overlay.currentStyle.position!="fixed"));if(compatibleOverlay)overlay.style.position="absolute";$(overlay).css("opacity",options.overlayOpacity).fadeIn(options.overlayFadeDuration);position();setup(1);images=_images;options.loop=options.loop&&(images.length>1);return changeImage(startImage);};$.fn.slimbox=function(_options,linkMapper,linksFilter){linkMapper=linkMapper||function(el){return[el.href,el.title];};linksFilter=linksFilter||function(){return true;};var links=this;return links.unbind("click").click(function(){var link=this,startIndex=0,filteredLinks,i=0,length;filteredLinks=$.grep(links,function(el,i){return linksFilter.call(link,el,i);});for(length=filteredLinks.length;i<length;++i){if(filteredLinks[i]==link)startIndex=i;filteredLinks[i]=linkMapper(filteredLinks[i],i);}
return $.slimbox(filteredLinks,startIndex,_options);});};function position(){var l=win.scrollLeft(),w=operaFix?documentElement.clientWidth:win.width();$([center,bottomContainer]).css("left",l+(w/2));if(compatibleOverlay)$(overlay).css({left:l,top:win.scrollTop(),width:w,height:win.height()});}
function setup(open){$("object").add(ie6?"select":"embed").each(function(index,el){if(open)$.data(el,"slimbox",el.style.visibility);el.style.visibility=open?"hidden":$.data(el,"slimbox");});var fn=open?"bind":"unbind";win[fn]("scroll resize",position);$(document)[fn]("keydown",keyDown);}
function keyDown(event){var code=event.keyCode,fn=$.inArray;return(fn(code,options.closeKeys)>=0)?close():(fn(code,options.nextKeys)>=0)?next():(fn(code,options.previousKeys)>=0)?previous():false;}
function previous(){return changeImage(prevImage);}
function next(){return changeImage(nextImage);}
function changeImage(imageIndex){if(imageIndex>=0){activeImage=imageIndex;activeURL=images[activeImage][0];prevImage=(activeImage||(options.loop?images.length:0))-1;nextImage=((activeImage+1)%images.length)||(options.loop?0:-1);stop();center.className="lbLoading";preload=new Image();preload.onload=animateBox;preload.src=activeURL;}
return false;}
function animateBox(){center.className="";$(image).css({backgroundImage:"url("+activeURL+")",visibility:"hidden",display:""});$(sizer).width(preload.width);$([sizer,prevLink,nextLink]).height(preload.height);$(caption).html(images[activeImage][1]||"");$(number).html((((images.length>1)&&options.counterText)||"").replace(/{x}/,activeImage+1).replace(/{y}/,images.length));if(prevImage>=0)preloadPrev.src=images[prevImage][0];if(nextImage>=0)preloadNext.src=images[nextImage][0];centerWidth=image.offsetWidth;centerHeight=image.offsetHeight;var top=Math.max(0,middle-(centerHeight/2));if(center.offsetHeight!=centerHeight){$(center).animate({height:centerHeight,top:top},options.resizeDuration,options.resizeEasing);}
if(center.offsetWidth!=centerWidth){$(center).animate({width:centerWidth,marginLeft:-centerWidth/2},options.resizeDuration,options.resizeEasing);}
$(center).queue(function(){$(bottomContainer).css({width:centerWidth,top:top+centerHeight,marginLeft:-centerWidth/2,visibility:"hidden",display:""});$(image).css({display:"none",visibility:"",opacity:""}).fadeIn(options.imageFadeDuration,animateCaption);});}
function animateCaption(){if(prevImage>=0)$(prevLink).show();if(nextImage>=0)$(nextLink).show();$(bottom).css("marginTop",-bottom.offsetHeight).animate({marginTop:0},options.captionAnimationDuration);bottomContainer.style.visibility="";}
function stop(){preload.onload=null;preload.src=preloadPrev.src=preloadNext.src=activeURL;$([center,image,bottom]).stop(true);$([prevLink,nextLink,image,bottomContainer]).hide();}
function close(){if(activeImage>=0){stop();activeImage=prevImage=nextImage=-1;$(center).hide();$(overlay).stop().fadeOut(options.overlayFadeDuration,setup);}
return false;}})(jQuery);(function($){$.timeago=function(timestamp){if(timestamp instanceof Date)return inWords(timestamp);else if(typeof timestamp=="string")return inWords($.timeago.parse(timestamp));else return inWords($.timeago.parse($(timestamp).attr("title")));};var $t=$.timeago;$.extend($.timeago,{settings:{refreshMillis:60000,allowFuture:false,strings:{ago:"ago",fromNow:"from now",seconds:"less than a minute",minute:"about a minute",minutes:"%d minutes",hour:"about an hour",hours:"about %d hours",day:"a day",days:"%d days",month:"about a month",months:"%d months",year:"about a year",years:"%d years"}},inWords:function(distanceMillis){var $l=this.settings.strings;var suffix=$l.ago;if(this.settings.allowFuture){if(distanceMillis<0)suffix=$l.fromNow;distanceMillis=Math.abs(distanceMillis);}
var seconds=distanceMillis/1000;var minutes=seconds/60;var hours=minutes/60;var days=hours/24;var years=days/365;var words=seconds<45&&sprintf($l.seconds,Math.round(seconds))||seconds<90&&$l.minute||minutes<45&&sprintf($l.minutes,Math.round(minutes))||minutes<90&&$l.hour||hours<24&&sprintf($l.hours,Math.round(hours))||hours<48&&$l.day||days<30&&sprintf($l.days,Math.floor(days))||days<60&&$l.month||days<365&&sprintf($l.months,Math.floor(days/30))||years<2&&$l.year||sprintf($l.years,Math.floor(years));return words+" "+suffix;},parse:function(iso8601){var s=$.trim(iso8601);s=s.replace(/-/,"/").replace(/-/,"/");s=s.replace(/T/," ").replace(/Z/," UTC");s=s.replace(/([\+-]\d\d)\:?(\d\d)/," $1$2");return new Date(s);}});$.fn.timeago=function(){var self=this;self.each(refresh);var $s=$t.settings;if($s.refreshMillis>0){setInterval(function(){self.each(refresh);},$s.refreshMillis);}
return self;};function refresh(){var date=$t.parse(this.title);if(!isNaN(date)){$(this).text(inWords(date));}
return this;}
function inWords(date){return $t.inWords(distance(date));}
function distance(date){return(new Date().getTime()-date.getTime());}
function sprintf(string,value){return string.replace(/%d/i,value);}
if($.browser.msie&&$.browser.version<7.0){document.createElement('abbr');}})(jQuery);

// BASIC INIT
var ExternalInterface;
var Core;
var suggest_is_open = false;
var Requests;
var current_url = "/";
var tmp_tags = [];
var suggest = {};
var loging_out = false;
var response = false;
var current_track_id = false;

function checkLocation() {
  if(document.location.pathname != "/" && document.location.pathname != "") {
    var path = document.location.pathname.split("/");
    var exceptions = ["password_resets","confirm_email","login","signup","user_sessions","checkout","orders","order_acceptance","premium","facebook","tours"];
    if((path[1] == "users" && path[2] == "new") || (path[1] == "users" && !path[2]))  return;
    if($.inArray(path[1], exceptions) == -1 || (path[1] == "tours" && path[3] == "shows")) {
      document.location.href = "http://" + document.location.host + "/#" + document.location.pathname + document.location.search;
    }
  }
}
checkLocation();

$.ajaxSetup({
  'beforeSend': function(xhr){xhr.setRequestHeader("Accept", "text/javascript");}
});

$(document).ready(function() {
  Core = new Simfy_Core();
  Requests = new Simfy_Requests();
  
  $('#navigation').children('ul').children('.nav').children('ul').children('li').children('a').each(function() {
    $(this).css('width', $(this).parent().parent().parent().width() + 20);
  });
});

$.address.change(function(event) {
  var url = event.value;
  if(url == current_url)  return;
  else                    current_url = url;
  var replace = "content";
  Requests.checkOpenRequests();
  Core.Navigation.loadStart();
  $('#overlayNotice').stop().fadeOut(500);
  var request = $.ajax({
    type:       "GET",
    dataType:   "html",
    url:        url,
    success: function(data) {
      Core.Navigation.loadStop();
      if(data && data != "") {
        $('#'+replace).empty().append(data);
        Core.Log.logPageView($.address.value());
        Core.Suggest.hide();
        if($('html').scrollTop() > $('#content').offset().top + 50) {
          $.scrollTo('#content', 250);
        }
      }
      if(!isMember) {
        var p = $.address.path();
        if(p == "/")  p = "";
        var q = $.address.queryString();
        if(q != "") q = "?" + q;
        $('#redirectToAfterLogin').val(p + q);
      }
    },
    error: function(XMLHttpRequest, textStatus, errorThrown) {
      alert('Error:' + XMLHttpRequest.status);
      Core.Navigation.loadStop();
      $.log(XMLHttpRequest);
    }
  });
  Requests.addRequest(request);
});

function toggleSetting(element_id) {
  $('#'+element_id).slideDown(200);
  $('#'+element_id).parent().siblings().removeClass('active');
  $('#'+element_id).parent().siblings().children('.settings').hide();
  $('#'+element_id).parent('li').addClass('active');
  $.scrollTo($('#'+element_id).parent(), 300);
}

function startRadioFromInput(type,_id) {
  //$.log($('#'+_id).val());
  Core.EI.startRadio($('#'+_id).val(), type, '');
}

function startRadio(query, type, message) {
  //$.log("startRadio " +type+" "+query);
  Core.EI.startRadio(query, type, message);
}

function playTrack(trackID, premium_only) {
  Core.EI.playTrack(trackID, premium_only);
}

function addTrack(trackID, premium_only) {
  Core.EI.addTrack(trackID, premium_only);
}

function addPlaylist(playlistID, premium_only) {
  //$.log("addPlaylist "+playlistID);
  Core.EI.addPlaylist(playlistID, premium_only);
}

function playPlaylist(playlistID, premium_only) {
  //$.log("playPlaylist "+playlistID);
  Core.EI.playPlaylist(playlistID, premium_only);
}

function addAlbum(albumID, premium_only) {
  //$.log("addAlbum "+albumID);
  Core.EI.addAlbum(albumID, premium_only);
}

function playAlbum(albumID, premium_only) {
  //$.log("playAlbum "+albumID);
  Core.EI.playAlbum(albumID, premium_only);
}

// TOOLTIPS
function showTooltip(element, text, alternative_text) {
  Core.Tooltip.initTooltip({
    element: element,
    content: ((element.hasClass('disabled') || element.parent().hasClass('disabled')) && alternative_text) ? alternative_text : text
  });
}

// OPTIONS
function showOptions(element, data) {
  
}

function emptyOnFocus(element, defaultVal) {
  var currentVal = element.val();
  if(currentVal == defaultVal)
    element.val('');
  element.unbind('blur').blur(function() {
    if(element.val() == "")
      element.val(defaultVal);
  });
  jQuery('#suggest_content').show();
}

function checkKeyEvent(element, keyCode, options) {
  element.unbind('keydown').keydown(function(e) {
    if(e.keyCode == keyCode) {
      if(options.callback) {
        options.callback.call(this, options.param1, options.param2, options.param3);
      }
    }
  });
}

function submitFriendSuggest(path) {
  $("#friend_suggest").load(path+"?infix=" + $("#infix").val(), null, function(response) {
      $("#newMessageSuggest").show();
    }
  );
  return false;
}

function likeFunctionality(element) {
  if(!element || !isMember)  return;

  element.click(function(evt) {
    evt.preventDefault();
    var element = $(this);
    var link = element.attr('href');
    var method = "POST";
    var data = {};
    if(element.parent().hasClass('dislike')) {
      element.parent().removeClass('dislike').addClass('like');
      method = "DELETE";
      data = {
        "_method": "delete"
      };
    }
    else {
      element.parent().removeClass('like').addClass('dislike');
    }
    element.unbind().click(function(evt) {evt.preventDefault();});
    $.ajax({
      url:      link,
      type:     method,
      data:     data,
      dataType: "text",
      success: function(data) {
        var newElement = $(data);
        element.parent().before(newElement).remove();
        likeFunctionality(newElement.children('a'));
      },
      error: function() {
        
      }
    });
  }).removeAttr('onclick');
}

function instantMenuFunctionality(elements, multiButton) {
  elements.each(function() {
    if($(this).hasClass('enabled')) return false;
    
    var element = $(this);
    element.addClass('enabled');
    var staticOptions = element.children('a');
    var options = [];
    staticOptions.each(function() {
      options.push({
        link:   $(this).attr('href'),
        rel:    $(this).attr('rel'),
        type:   $(this).attr('class'),
        label:  $(this).text()
      });
    });
    element.click(function() {
      Core.InstantMenu.build(element, options, multiButton);
      if(multiButton)   element.parents('.button.multi').addClass('show');
    });
    staticOptions.remove();
  });
}

function showOverlay(element, href) {
  if(!element && !href) return;

  var link;
  if(href)  link = href;
  else      link = element.attr('href');
  $('#overlayLoading').fadeIn(250);
  $.ajax({
    url:      link,
    type:     "GET",
    dataType: "html",
    success: function(data) {
      Core.Log.logPageView("overlay/" + link);
      var overlay = $(data);
      var isDraggable = overlay.siblings('.overlay').hasClass('draggable')
      
      overlay.siblings('.overlay').removeAttr('style');
      overlay.siblings('.overlay').hide();
      var id = overlay.siblings('.overlay').attr('id');
      if(id)  $('#'+id).remove();
      if(isDraggable) {
        overlay.siblings('.overlay').draggable({
          handle:  overlay.siblings('.overlay').children('.middle').children('.content').children('.header')
        });
      }
      if(overlay.siblings('.overlay').hasClass('modal')) {
        $('body').addClass('modal');
        $('#overlay_modal').fadeIn(250);
      }
      
      $('#overlayLoading').hide();
      $('body').append(overlay);

      try {
        overlay.fadeIn(250);
      }
      catch(e) {
        $.log(e);
      }
      if(isDraggable && $.browser.webkit) {
        var p = overlay.offset().top;
        var s = $(document).scrollTop();
        if(p < s) overlay.css('top', s + p);
      }
    },
    error: function() {
      $('#overlayLoading').hide();
    }
  });
  return false;
}

function closeOverlay(element) {
  var overlay;
  if(element) {
    if(element.hasClass('overlay'))   overlay = element;
    else                              overlay = element.parents('.overlay'); 
  }
  else           overlay = $('div.overlay');
  
  overlay.fadeOut(150, function() {
    overlay.remove();
  });
  if(overlay.hasClass('modal')) {
    $('#overlay_modal').fadeOut(150, function() {
      $('body').removeClass('modal');
    });
  }
}
function hideOverlay(element) {
  var overlay;
  if(element)   overlay = element.parents('.overlay');
  else           overlay = $('div.overlay');
  
  overlay.fadeOut(150);
  if(overlay.hasClass('modal')) {
    $('#overlay_modal').fadeOut(150, function() {
      $('body').removeClass('modal');
    });
  }
}

function disableFormSubmit(form) {
  form.submit(function() {
    return false;
  });
}
function enableFormSubmit(form) {
  form.unbind("submit");
}

function convertLink(link) {  
  if(link) {
    var onclick = null;
    var url = link.attr('href');
    var rel = link.attr('rel');
    var target = link.attr('target');
  
    if(link.attr('onclick'))
      onclick = link.attr('onclick');

    if(onclick == null && rel != "external" && rel != "remote" && target != "_blank") {
      if(url.indexOf('http://') >= 0) url = url.split("/").slice(3).join("/");
      $.address.value(url);
      return false;
    }
  }
  return true;
}

function checkLogout() {
  if(loging_out) return false;
    
  if(!loging_out) {
    loging_out = true;
  }
}

function onPageLoad(pageTitle, status) {
  if(pageTitle != "" && pageTitle != "title")
    $.address.title(pageTitle); 
  
  $('#userStatus').html(status);
  
  checkPlayRights($('#content'));
  
  $('#content').find('ul.tabbable').children('li').click(function(){
    var self = $(this);
    var contentName = self.attr('class').split("active").join("").split("first").join("").split("last").join("").split(" ").join("");
    var mapTo = false;
    if(self.parent().attr('class').indexOf('map_') >= 0) {
      mapTo = self.parent().attr('class');
      mapTo = mapTo.substring(mapTo.indexOf('map_'), mapTo.length);
      mapTo = mapTo.substring(4, (mapTo.indexOf(' ') >= 0) ? mapTo.indexOf(' ') : mapTo.length);
      mapTo = $('#'+mapTo);
    }
    
    var contentHolder;
    if(mapTo) contentHolder = mapTo;
    else      contentHolder = self.parent().parent();
    var content = contentHolder.children('.tabContents').children('.' + contentName);
    
    if(!content || content.length < 1) return false;
    
    self.parent('ul').children().removeClass('active');
    self.addClass('active');

    content.parent().children().removeClass('active');
    content.addClass('active');
  });
  
  $('body').find('a').click(function() {
    if(!convertLink($(this)))  return false;
  });
  
  $('#content').children('.flash_messages').each(function() {
    if(!$(this).hasClass('steady') && $(this).children().length >= 1) {
      $(this).fadeTo(8000, 0.99).slideUp(500, function() {
        $(this).remove();
      });
    }
  });
  
  likeFunctionality($('#like_artist_link'));
  likeFunctionality($('#dislike_artist_link'));
  likeFunctionality($('#like_album_link'));
  likeFunctionality($('#dislike_album_link'));
  likeFunctionality($('#like_track_link'));
  likeFunctionality($('#dislike_track_link'));
  likeFunctionality($('#like_playlist_link'));
  likeFunctionality($('#dislike_playlist_link'));  
}

function checkPlayRights(element) {
  element.find('.multiButton').each(function() {
    if(!isPremiumMember && $(this).hasClass('premium_only') && !$(this).hasClass('disabled')) {
      $(this).children('.add').remove();
      $(this).addClass('disabled');
    }
  });
}

function showNotice(notice) {
  if(notice) {
    $('#overlay_notice').empty().append(notice);
  }
  $('#overlayNotice').hide().stop().fadeIn(300, function() {
    $('#overlayNotice').animate({
      opacity: 1
    }, 5000, function() {
      $('#overlayNotice').fadeOut(300);
    })
  });
}

function trigger_spinner(result_box) {
  document.getElementById(result_box).innerHTML = "<img src='../images/simfy/icons/loading_small_ffffff.gif'>";
}

function valid_query(query_field, result_box) {
  query = document.getElementById(query_field).value;

  if (query.length >= 2) {
    return true;
  } else {
    document.getElementById(result_box).innerHTML = "<ul><li class='noResult'>Deine Sucheingabe ist zu kurz!</li></ul>";
    return false;
  }
}


var Simfy_Core = new Class({
  initialize: function() {
    var _ref = this;

    // LOG
    this.Log = new Simfy_Log({core: this});
  
    // NAVIGATION
    this.Navigation = new Simfy_Navigation({core: this});
    
    // PLAYER
    this.Player = new Simfy_Player();
    
    // MESSAGES
    this.Messages = new Simfy_Messages({core: this});
    
    // MESSAGE SERVICE
    this.MessageService = new Simfy_MessageService({core: this});
    
    // TOOLBOX
    this.TB = new Simfy_Toolbox({core: this});
    
    // SETTINGS
    this.Settings = new Simfy_Settings({core: this});
    
    // TWITTER
    this.Twitter = new Simfy_Twitter({core: this});
    
    // FACEBOOK
    this.Facebook = new Simfy_Facebook({core: this});

    // INSTANTMENU
    this.InstantMenu = new Simfy_InstantMenu({core: this});
    
    // TAGS
    this.Tags = new Simfy_Tags({core: this});
    
    // TOOLTIP
    this.Tooltip = new Simfy_Tooltip({core: this});

    // SUGGEST
    this.Suggest = new Simfy_Suggest({core: this});
    
    // USER
    this.User = new Simfy_User({core: this});

    // FRIENDS
    this.Friends = new Simfy_Friends({core: this});
    
    // PLAYLISTS
    this.Playlists = new Simfy_Playlists({core: this});
    
    // COMMENTS
    this.Comments = new Simfy_Comments({core: this});
    
    // LOGIN
    this.Login = new Simfy_Login({core: this});
    
    // SIGNUP
    this.Signup = new Simfy_Signup({core: this});
    
    // VOUCHER
    this.Voucher = new Simfy_Voucher({core: this});
    
    // EXTERNAL INTERFACE
    ExternalInterface = new Simfy_ExternalInterface(this);
    this.EI = ExternalInterface;
  },
  TT: function(options) {
    this.Tooltip.newTooltip(options);
  },
  SM: function(options) {
    this.MessageService.setMessage(options);
  },
  // VARIABLEN FEHLEN NOCH
  isGuest: function() {
    return false;
  },
  isMember: function() {
    return true;
  }
});

/**
 * @author pr
 */

   var Simfy_Navigation = new Class({
    initialize: function(options) {
      this._Core = options.core;

			if($.browser.msie && $.browser.version < 8) {
				$('#navigation').children('ul').children('li').children('ul').children('li').children('a').each(function() {
					$(this).css('width', $(this).parent().parent().parent().width());
				});
			}
    },
    loadStart: function(elements) {
      $('body').addClass('processing');
      //if (elements && elements !== true) {
        this.showLoadingOverlay([$('#content')]);
      //}
    },
    loadStop: function() {
      $('body').removeClass('processing');
      $('#loadingOverlay').hide();
    },
    parseLocation: function(location) {
			if(location == "") return false;
			
			location = location.split("/");
			if(location.length >= 1) {
				var location_return = Array();
				var i = 0;
				while(i<location.length) {
					if(location[i] !== "") location_return.push(location[i] );
					i++;
				}
				if(location_return.length >= 1) {
					return location_return;
				}
			}
			return false;
		},
    showLoadingOverlay: function(elements) {
      if (elements.length >= 1) {
        $.each(elements, function(i, element) {
          try {
            if (element && element.length > 0 && element.css('display') != "none") {
              var oCore = $('#container').offset();
              var oContent = $('#content').offset();
              var oE = element.offset();
              var o = {
                top: Math.round(oE.top),
                left: Math.round(oE.left - oCore.left)
              };
              var w = element.width();
              var h = element.height();
              if (o && w && h && w > 10 && h > 10) {
                $('#loadingOverlay').css('top', o.top).css('left', o.left).css('width', w).css('height', h).show();
              }
              return false;
            }
          }
          catch(e) {
            
          }
        });
      }
    },
    scrollTop: function(){
      $.scrollTo(0, 75);
    }
   });

/**
 * @author pr
 */
  var Simfy_Log = new Class({
    initialize: function(options) {
      this._Core = options.core;
    },
    logID: function(id) {
      var _ref = this;
      if(id) {
        if(!isNaN(id)) {
          /*this._Core.JSON.makeRequest({
            requestURL: "ajax/common/data.log.action.php",
            data: "logID="+id,
            reference: _ref,
            callback: _ref.onLogID,
            errorCallback: _ref.onLogIDError
          });*/
        }
      }
    },
    onLogID: function(data) {
      
    },
    onLogIDError: function(error) {
      $.log('LogID Error:');
      $.log(error);
    },
    // GA TRACKING
    logPageView: function(location) {
      var logLocation = "/vpv/";
      var sL = this._Core.Navigation.parseLocation(location);
      if(location == "/") sL = "/home/".split("/");
      switch(sL[0]) {
        case "mySimfy":
          if(!sL[1] || sL[1] == "")      sL[1] = "profile";
          else {
            if (sL[1] == "likes" || sL[1] == "playlists") {
              if (sL[2] && sL[2] != "")   sL[2] = "detail";
              else             sL.splice(2,1);
            }
          }
        break;
        case "artists":
          sL[1] = "artistDetail";
          if(!isNaN(sL[2]))          sL.splice(2,1);
          if(!sL[2] || sL[2] == "")      sL[2] = "overview";
          else {
            if(sL[2] == "albums" || sL[2] == "tracks") {
              if (sL[3] && sL[3] != "") {
                sL[3] = "detail";
                sL.splice(4,2);
              }
              else sL.splice(3, 1);
            }
          }
        break;
        case "users":
          sL.splice(1,1);
          if(!sL[1] || sL[1] == "") sL[1] = "overview";
          else {
            if (sL[1] == "likes" || sL[1] == "playlists") {
              if (sL[2] && sL[2] != "") sL[2] = "detail";
              else sL.splice(2,1);
            }
          }
        break;
        case "overlay":
          var sL_joined = sL.join("/");
          if(sL_joined.indexOf("messages/new") >= 0)
            sL = "overlay/newMessage".split("/");
          else if(sL_joined.indexOf("tags") >= 0)
            sL = "overlay/tag".split("/");
          else if(sL_joined.indexOf("twitter") >= 0)
            sL = "overlay/twitter".split("/");
          else if(sL_joined.indexOf("friendship_requests/new") >= 0)
            sL = "overlay/addAsFriend".split("/");
          else if(sL_joined.indexOf("playlists") >= 0 && sL.join("/").indexOf("edit") >= 0)
            sL = "overlay/renamePlaylist".split("/");
          else if(sL_joined.indexOf("playlists") >= 0 && sL.join("/").indexOf("confirm_delete") >= 0)
            sL = "overlay/deletePlaylist".split("/");
          break;
        case "global":
          
        break;
      }
      //$.log('ga log vpv: ' + logLocation + sL.join("/") + "/");
      if(pageTracker)   pageTracker._trackPageview(logLocation + sL.join("/") + "/");
    },
    logOutbound: function(location) {
      this.logEvent('outbound_link', location);
    },
    logPlayerEvent: function(action, label, value) {
      this.logEvent('player', action, label, value);
    },
    logEvent: function(category, action, label, value) {
      //$.log('logEvent: ' + category + " " +  action + " " +  label + " " + value);
      if(pageTracker) {
        if(!label)  label = "";
        if(!value || value == "")  value = null;
        pageTracker._trackEvent(category, action, label, value);
      }
    }
  });

/**
 * @author pr      
 * 
 */
  var Simfy_Player = new Class({
    initialize: function() {
      this.swfPlayer = null;
			this.requiredFlashVersion = "9.0.115";
			this.playerOpen = false;
			this.playerReady = false;
			var _ref = this;
      $('body').bind('player_ready', function(event) {
        _ref.playerReady = true;
      });

      this.initPlayer();
    },
    initPlayer: function() {
      if(typeof(window.playerSettings) == "undefined" || !playerSettings) return;
      
      var _ref = this;
			try {
				var flashvars = {
					access_token: playerSettings.access_token,
					session_key: playerSettings.session_key,
					base_url: playerSettings.base_url,
					country_code: playerSettings.country_code
				};
				var params = {
					menu: "false"
				};
				if (navigator.appVersion.indexOf("Win") != -1)	{
					params.wmode = "transparent";
				}
				params.bgcolor = "#2D2D2D";
				
				var attributes = {
					id: 	"player",
					name: "player"
				};
				var flashVersion = swfobject.getFlashPlayerVersion();
				if(flashVersion.major >= 10) {
					swfobject.embedSWF(
					    playerSettings.path+"?version="+playerSettings.version, 
					    "player", 
					    "995", 
					    "353", 
					    this.requiredFlashVersion, 
					    false, 
					    flashvars, 
					    params, 
					    attributes
					  );
					this.player = this.thisMovie("player");
					this.swfPlayer = this.player;
					this.mousewheel = new Simfy_Mousewheel( $('#player'), this.player);

					setTimeout(
						function() {
							if( $('#player').children('.flash_notice').length == 0) {
								_ref.flashError = false;
							}
							else {
								$('#player').children('.flash_notice').show();
								_ref.flashError = true;
							}
						}, 1000
					);
				}
				else {
					this.noFlash();
				}
			}
			catch(e) {
				$.log(e);
			}     
    },
    noFlash: function() {
      
    },
    thisMovie: function(movieName) {
      try {
        var movie;
        if (navigator.appName.indexOf("Microsoft") != -1)
          movie = window[movieName];
        else
          movie = document[movieName];
        return movie;
      }
      catch (e) {
        return false;
      }
    },
    openPlayer: function() {
			this.playerOpen = true;
			$('body').addClass('playerOpen');
			$('#containerPlayer').animate({
				height: '360px'
			}, 250, "easeInOutSine");
    },
    closePlayer: function() {
      var _ref = this;
			this.playerOpen = false;
			$('body').removeClass('playerOpen');
			$('#containerPlayer').animate({
				height:		'62px'
			}, 250, "easeInOutSine", function() {
				_ref.hover = false;
			});
    },
		showNotice: function() {
			if(this.playerOpen)	return;
			
			$('#containerPlayer').animate({
				height: '88px'
			}, 250, "easeInOutSine");
		},
		hideNotice: function() {
			if(this.playerOpen)	return;
			
			this.closePlayer();
		},
		highlightTrack: function(album_id, track_id) {
		  $('#content').find('.track_'+track_id).addClass('highlight');
		},
		playTrackFromAlbum: function(album_id, track_id) {
		  if(this.playerReady) {
		    
		  }
		  else {
        $('body').bind('player_ready', function(event) {
          
        });
		  }
		  this.highlightTrack(track_id);
		}
  });

/**
 * @author pr
 */

   var Simfy_ExternalInterface = new Class({
    initialize: function(core) {
      this._Core = core;
      this.playerReady = false;
      this.playerController = this._Core.Player;
      this.swfPlayer = this.playerController.swfPlayer;
    },
    // JS => FLASH
    openPlayer: function() {
      if(!this.playerReady || !this.swfPlayer)  return;
      this.swfPlayer.openPlayer();
      this.playerController.openPlayer();
    },
    closePlayer: function() {
      if(!this.playerReady || !this.swfPlayer)  return;
      this.swfPlayer.closePlayer();
      this.playerController.closePlayer();
    },
    stopPlayer: function() {
      if(!this.playerReady || !this.swfPlayer)  return;
      
      try {
        this.swfPlayer.stopPlayer();
      }
      catch(e) {  $.log(e); }
    },
    startPlayer: function() {
      if(!this.playerReady || !this.swfPlayer)  return;

      try {
        this.swfPlayer.startPlayer();
      }
      catch(e) {  $.log(e); }
    },
    startRadio: function(searchTerm, type, message) {
      if(!this.playerReady || !this.swfPlayer)  return;
      this.swfPlayer.startRadio(searchTerm, type);
      if(message)   this._Core.SM({ message: message });
    },
    pushTrack: function(options, message) {
      if(!this.playerReady || !this.swfPlayer)  return;
      
      var data =      options.data;
      var autoPlay =  options.autoPlay || false;
      try {
        this.swfPlayer.pushItem(data, autoPlay);
      }
      catch(e) {  $.log(e); }
      return true;
    },
    pushStack: function(options) {
      if(!this.playerReady || !this.swfPlayer)  return;
      
      var _ref =      this;
      var data =      options.data;
      var autoPlay =  options.autoPlay || false;
      
      var count = 0;
      data.each(function(value) {
        if(_ref._Core.TB.checkTrack(value))  count++;
      });
      
      if(count < 1) return;
      try {
        this.swfPlayer.pushItems(data, autoPlay);
      }
      catch(e) {  $.log(e); }
    },
    playPlaylist: function(playlistID, premium_only) {
      if(!this.playerReady || !this.swfPlayer)  return;
      try {
        this.swfPlayer.loadPlaylist(Number(playlistID));
      }
      catch(e) {  $.log(e); }
    },
    addPlaylist: function(playlistID, premium_only) {
      if(!this.playerReady || !this.swfPlayer)  return;
      
      try {
        this.swfPlayer.pushPlaylist(Number(playlistID));
      }
      catch(e) {  $.log(e); }
    },
    playTrack: function(trackID, premium_only) {
      if(this.onlyPremium(premium_only))        return;
      if(!this.playerReady || !this.swfPlayer)  return;
      
      try {
        this.swfPlayer.playTrack(Number(trackID));
      }
      catch(e) {  $.log(e); }
    },
    addTrack: function(trackID, premium_only) {
      if(this.onlyPremium(premium_only))        return;
      if(!this.playerReady || !this.swfPlayer)  return;
      
      try {
        this.swfPlayer.addTrack(Number(trackID));
      }
      catch(e) {  $.log(e); }
    },
    playAlbum: function(albumID, premium_only, noAutoPlay, silent) {
      if(this.onlyPremium(premium_only))        return;
      if(!this.playerReady || !this.swfPlayer)  return;

      try {
        this.swfPlayer.playAlbum(Number(albumID), (noAutoPlay) ? false : true, (silent) ? true : false );
      }
      catch(e) {  $.log(e); }
    },
    addAlbum: function(albumID, premium_only) {
      if(this.onlyPremium(premium_only))        return;
      if(!this.playerReady || !this.swfPlayer)  return;
      
      try {
        this.swfPlayer.addAlbum(Number(albumID));
      }
      catch(e) {  $.log(e); }
    },
    createPlaylist: function() {
      if(!this.playerReady || !this.swfPlayer)  return;
      
      try {
        this.swfPlayer.createPlaylist();
      }
      catch(e) {  $.log(e); }        
    },
    getURL: function(url) {
      if(!url) return;
      $.address.value(url);
      this.closePlayer();
    },
    onlyPremium: function(premium_only) {
      if(!isPremiumMember && premium_only) {
        window.open(premiumPath);
        return true;
      }
      return false;
    },
    
    // FLASH => JS
    call_playerReady: function()Â {
      this.playerReady = true;
      $('body').trigger('player_ready');
    },
    call_goTo: function(url) {
      this.getURL(url);
    },
    call_openPlayer: function() {
      this.playerController.openPlayer();
    },
    call_closePlayer: function() {
      this.playerController.closePlayer();
    },
    call_showNotice: function() {
      this.playerController.showNotice();
    },
    call_hideNotice: function() {
      this.playerController.hideNotice();
    },
    call_badTrack: function() {
      
    },
    call_guestNotice: function(referer, homeAction) {
      this.closePlayer();
      this._Core.Signup.show(referer, false, homeAction);
    },
    call_instantMenu: function(type, data) {
      this._Core.InstantMenu.handleCall(type, data);
    },
    call_tweet: function(type, data) {
      this._Core.Twitter.prepareTweet(type, data);
    },
    call_facebook: function(type, data) {
      this._Core.Facebook.prepareFacebook(type, data);
    },
    call_setTrackID: function(trackID) {
      current_track_id = trackID;
    },
    call_logAction: function(action, label, value) {
      this._Core.Log.logEvent('player', action, label, value);
    }
  });


  var Simfy_Mousewheel = new Class({
    initialize: function(element, movie) {
      var _ref = this;
      var checkHover = false;
      
      this.element = element;
      this.movie = movie;
      this.hover = false;
      
      if(this.uaContains('Firefox')) { 
        if(!(document.attachEvent)) {
          window.addEventListener("DOMMouseScroll", function(e) {
            _ref.handleWheel(e, _ref);
          }, false);
          checkHover = true;
        }
      }
      if(checkHover) {
        element.hover(function() {
          _ref.hover = true;
        }, function() {
          _ref.hover = false;
        });
      }
    },
    handleWheel: function(event, _ref) {
      if(event && _ref && _ref.hover) {
        try {
          //event.preventDefault();
        }
        catch(e) {
        }

        if(_ref.movie) {
          var delta = 0;
          if (!event) event = window.event;
          if (event.wheelDelta) {
            delta =         event.wheelDelta/120;    // Safari
            if (window.opera)     delta = -delta;        // Opera
          }
          else if (event.detail)     delta = -event.detail*3;  // Firefox

          if (delta > 0)         delta = 3;
          else if (delta == 0)     delta = 0;
          else            delta = -3;

          if (delta) {
            var thisMouse;
            
            if (_ref.uaContains("Camino"))      thisMouse = {x:event.layerX, y:event.layerY};
            else if (_ref.uaContains('Firefox'))  thisMouse = {x:(event.layerX - _ref.findPosX(event.currentTarget)), y:(event.layerY - _ref.findPosY(event.currentTarget))};
            else                   thisMouse = {x:event.offsetX, y:event.offsetY};
            
            thisMouse.ctrlKey =         (_ref.uaContains('Mac')) ? (event.metaKey || event.ctrlKey) : event.ctrlKey;
            thisMouse.altKey =           event.altKey;
            thisMouse.shiftKey =         event.shiftKey;
            thisMouse.buttonDown =         false;
            try {
              movie.dispatchExternalMouseWheelEvent(delta, thisMouse.x, thisMouse.y, thisMouse.ctrlKey, thisMouse.altKey, thisMouse.shiftKey, thisMouse.buttonDown);
            }
            catch(e) {
            }
          }
        }
      }
    },
    uaContains: function (str) {
      return (navigator.userAgent.indexOf(str) != -1);
    },
    findPosX: function (obj) {
      var curleft = 0;
      if(obj.offsetParent) {
        while(1) {
          curleft += obj.offsetLeft;
          if(!obj.offsetParent)
          break;
          obj = obj.offsetParent;
        }
      }
      else if(obj.x)
        curleft += obj.x;
      return curleft;
    },
    findPosY: function (obj) {
      var curtop = 0;
      if(obj.offsetParent) {
        while(1) {
          curtop += obj.offsetTop;
          if(!obj.offsetParent)
          break;
          obj = obj.offsetParent;
        }
      }
      else if(obj.y)
        curtop += obj.y;
      return curtop;
    }
  });

/**
 * @author pr
 */

   var Simfy_InstantMenu = new Class({
    initialize: function(options) {
      this._Core = options.core;
      var _ref = this;

      this.MULTIBUTTON = false;
      this.OPTIONS = null;
      this.SIZE = 0;
      this.ELEMENT = null;
      
      this.menu = $('<div class="instantMenu"><ul></ul></div>');
      $('body').append(this.menu);
      this.menu.click(function() {
        _ref.hide();
      });
    },
    build: function(element, options, multiButton) {
      var _ref = this;
      
      this.cleanUp();
      
      var rows = [];
      if(options && options.length >= 1)  {
        options.each(function(v, i) {
          v.icon = _ref.getIcon(v.type);
          rows.push(v);
        });
      }
      else {
        return;
      }
      if(rows.length >= 1) {
        this.OPTIONS =  options;
        this.SIZE =     rows.length;
        this.ELEMENT =  element;
        this.MULTIBUTTON = multiButton;
        var i = 0;
        rows.each(function(value) {
          var item = _ref.buildRow(value);
          _ref.menu.children('ul').append(item);
          
          if(i == 0)                item.addClass('top');
          if(i == rows.length-1)    item.addClass('bottom');
          i++;
        });
        this.position(element);
        this.show();
        return true;
      }
      else {
        return false;
      }
    },
    getIcon: function(type) {
      switch(type) {
        case "rename":
          return "rename";
        break;
        case "delete":
          return "delete";          
        break;
        case "artistDetails":
        case "tracKDetails":
        case "albumDetails":
        case "playlistDetails":
          return "details";
        break;
      }
    },
    buildRow: function(row) {
      var _ref = this;
      var item = $('<li><span>'+row.label+'</span></li>');
      item.children('span').addClass(row.icon);
      item.click(function() {
        //_ref.hide();
        if(row.rel == "overlay") {
          showOverlay(false, row.link);
        }
        else {
          //_ref.handleCall(row.type, data, options);
        }
      });
      return item;
    },
    position: function(element) {
      var offset = element.offset();
      var height = this.SIZE * 21 + 24;
      var scrollTop = $('html').scrollTop();
      this.menu.children('ul').css('top', offset.top - height - scrollTop);
      this.menu.children('ul').css('left', offset.left - 19);
    },
    show: function() {
      this.ELEMENT.parent().addClass('show');
      this.menu.show();
    },
    hide: function() {
      if(this.MULTIMENU) {
        this.ELEMENT.parents('.button.multi').removeClass('show');
      }
      this.menu.hide();
      this.cleanUp();
    },
    cleanUp: function() {
      this.menu.hide();
      if(this.ELEMENT)   this.ELEMENT.parent().removeClass('show');
      this.menu.children('ul').children().remove();
      this.DATA = null;
      this.SIZE = 0;
      this.ELEMENT = null;
    },
    handleCall: function(type, data, options) {
			//$.log(type);
			//$.log(data);
      var link = false;
      switch(type) {
        case "infoArtist":
          link = this.stripLink(data.artistLink);
          break;
        case "infoTrack":
          link = this.stripLink(data.trackLink);
          break;
        case "infoAlbum":
          link = this.stripLink(data.albumLink);
          break;
        case "infoPlaylist":
         link = this.stripLink(data.playlistLink);
          break;
        case "renamePlaylist":
          //this._Core.MySimfy.Functionality.renamePlaylist(data, options);
					//$.log('handleCall: renamePlaylist');
          break;
        case "deletePlaylist":
          //this._Core.MySimfy.Functionality.deletePlaylist(data, options);
					//$.log('handleCall: deletePlaylist');
          break;
        case "embedTrack":
          //$.log('handleCall: embedTrack');
          break;
        case "embedPlaylist":
          //$.log('handleCall: embedPlaylist');
          break;
        case "embedRadio":
          //$.log('handleCall: embedRadio');
          break;
      }
      if(link) {
        if(link.substr(0, 2) == "#/")  link = link.substr(1, link.length - 1);
       	$.address.value(link);
      }
    },
		stripLink: function(link) {
		  if(link) {
		    link = link.split("http://").join("");
		    link = link.substr(link.indexOf("/"), link.length);		    
		    return link;
		  }
		  return false;
		},
		urlEncode: function(str, absolute) {
			if(!str || str == "")	return str;
			
			if (absolute) {
				str = encodeURIComponent(str);
			}
			else {
				str = str.split(" ").join("-");
				str = str.split("#").join("%23");
				str = str.split("/").join("%2F");
			}
			return str;
		}
  });

/**
 * @author pr
 */

   var Simfy_Toolbox = new Class({
     initialize: function(options) {
      this._Core =     options.core;
    },
    clearContent: function() {
      this._Core.Config.contentMainElement.empty();
    },
    buildLink: function(type, data, absolute) {
      var link = "#/home/";
      switch(type) {
        case "artist":
          link = "#/artists/"+this.urlEncode(data.artistName)+"/";
          if(absolute && data.artist_id)  link += data.artist_id+"/";
          break;
        case "albums":
          link = "#/artists/"+this.urlEncode(data.artistName)+"/albums/";
          break;
        case "album":
          link = "#/artists/"+this.urlEncode(data.artistName)+"/albums/"+this.urlEncode(data.albumName)+"/";
          if(absolute && data.album_id)  link += data.album_id+"/";
          break;
        case "tracks":
          link = "#/artists/"+this.urlEncode(data.artistName)+"/tracks/";
          break;          
        case "track":
          link = "#/artists/"+this.urlEncode(data.artistName)+"/tracks/"+this.urlEncode(data.trackName)+"/";
          if(absolute && data.track_id)  link += data.track_id+"/";
          break;
        case "playlists":
          link = "#/artists/"+this.urlEncode(data.artistName)+"/playlists/";
          break;
        case "playlistsUser":
          link = this.buildLink("user", data) + "playlists/";
          break;          
        case "playlist":
          var playlistID;
          if(data.playlistID)  playlistID = data.playlistID;
          else         playlistID = data.playlist_id;  
          link = this.buildLink("user", data) + "playlists/"+playlistID+"/";
          //link = "#/browse/playlists/"+playlistID+"/";
          break;
        case "events":
          link = "#/artists/"+this.urlEncode(data.artistName)+"/events/";
          break;
        case "event":
          link = "#/artists/"+this.urlEncode(data.artistName)+"/events/"+data.event_id+"/";
          break;
        case "tags":
          link = "#/artists/"+this.urlEncode(data.artistName)+"/tags/";
          break;
        case "genre":
          link = "#/browse/genres/"+this.urlEncode(data.tagClean)+"/";
          break;
        case "tag":
          if(data.type == "genre")  link = "#/browse/genres/"+this.urlEncode(data.tagClean)+"/";
          else             link = "#/browse/tags/"+this.urlEncode(data.tagClean)+"/";
          
          break;
        case "fans":
          link = "#/artists/"+this.urlEncode(data.artistName)+"/fans/";
          break;
        case "user":
          if(data.userID == this._Core.User.userData.userID) {
            link = "#/mySimfy/";
          }
          else {
            link = "#/users/" + data.userName + "/";
          }
          break;
        case "friends":
          link = this.buildLink("user", data) + "friends/";
          break;
        case "chartsUser":
          link = this.buildLink("user", data) + "charts/";
          break;
        default: 
          break;
      }
      return link;
    },
    activateTabs: function(tabs, contents, logCallback, callbackRef) {
      var _ref = this;
      tabs.each(function(value) {
        $(this).click(function() {
          tabs.each(function() {
            $(this).removeClass('active');
          });
          contents.each(function() {
            $(this).removeClass('active');
          });
          if(logCallback && callbackRef)   logCallback.call(callbackRef, $(this).attr('className'));
          $(contents[value]).addClass('active');
          $(this).addClass('active');
        });
      });
    },
    urlEncode: function(str, absolute) {
      if(!str || str == "")  return str;
      
      if (absolute)
        str = encodeURIComponent(str);
      else {
        str = str.replace(/\#/, "%23");
        str = str.replace(/\//, "%2F");
      }
      return str;
    },
    scrollToTop: function(time, target) {
      if(time && !target)
        $.scrollTo({top: 0}, time);
      else if (time && target)
        $.scrollTo(target, time);
      else 
        $.scrollTo({top: 0});
    },
    checkTrack: function(trackData) {
      if(trackData && trackData.trackLID)  return true;    // trackData.swapID && 
      return false;
    },
    checkImage: function(image, size, type) {
      if(image && image != "")  return image;
      else {
        var imageType;
        switch(type) {
          case "artist":
            imageType = "artist_";
            break;
          case "album":
            imageType = "album_";
            break;
          case "track":
          case "swap":
            imageType = "track_";
            break;
          case "user":
            imageType = "user_";
            break;
          default:
            imageType = "";
            break;
        }
        switch(size) {
          case 40:
            image = "img/placeholder/"+imageType+"40x40.jpg";
            break;
          case 50:
            image = "img/placeholder/"+imageType+"50x50.jpg";
            break;
          case 60:
            image = "img/placeholder/"+imageType+"60x60.jpg";
            break;
          case 88:
            image = "img/placeholder/"+imageType+"88x88.jpg";
            break;
          case 97:
            image = "img/placeholder/"+imageType+"97x97.jpg";
            break;
          case 100:
            image = "img/placeholder/"+imageType+"100x100.jpg";
            break;
          case 120:
            image = "img/placeholder/"+imageType+"120x120.jpg";
            break;
          case 150:
          case 160:
            image = "img/placeholder/"+imageType+"160x160.jpg";
            break;
          case 190:
            image = "img/placeholder/"+imageType+"200x200.jpg";
            break;
          case 200:
            image = "img/placeholder/"+imageType+"200x200.jpg";
            break;
          case 310170:
            if(type == "artist")  image = "img/placeholder/artist_310x170.jpg";
            break;
          default:
            break;
        }
      }
      return image;
    },
    checkForAvailableTracks: function(tracks) {
      var available = 0;
      if(tracks && tracks.length >= 1) {
        var i = 0;
        while(i<tracks.length) {
          if(this.checkTrack(tracks[i]))  available++;
          i++;
        }
      }
      return available;
    },
    constrain: function(str, length, breakWords, append) {
      if(!str)  return;
      if(str.length > length) {
        if(!append) append = '&hellip;';
        if (breakWords) {
          str = str.substring(0, length) + append;
        }
        else {
          var s = str.substr(0, length);
            var words = s.split(' '); 
            words[words.length-1] = '';
            str = words.join(' ') + append;

          //str = str.replace(new RegExp('^(.{0,' + length + '}\\b).*'), '$1') + append;
        }
      }
      return str;
    },
    randomString: function(stringLength) {
      stringLength = stringLength || 8;
      var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
      var randomString = "";
      for (var i=0; i<stringLength; i++) {
        var rnum = Math.floor(Math.random() * chars.length);
        randomString += chars.substring(rnum,rnum+1);
      }
      return randomString;
    },
    randomInt: function(min,max) {
      var div = (max - min) + 1;
      var randNum = Math.random();
      for (var i = 0; i <= div - 1; i++) {
        if (randNum >= i / div && randNum < (i+1) / div) {
          return i + min;
        }
      }
    },
    getListStartProperties: function(offSet) {
      var location = this._Core.Navigation.getLocation();
      if(this._Core.Navigation.checkLocation(location[offSet])) {
        var curLetter = location[offSet];
        if(this._Core.Navigation.checkLocation(location[offSet+1]) && !isNaN(location[offSet+1])) {
          var curPos = location[offSet+1];
        }
        else {
          var curPos = 1;
        }
      }
      else {
        var curLetter = "A";
        var curPos = 1;
      }
      return {curLetter: curLetter, curPos: curPos};
    },
    secondsToHMS: function(sec, forceHours) {
        var hms = "";
      var hours =   parseInt(parseInt(sec) / 3600); 
      var minutes =   parseInt((sec / 60) % 60); 
      var seconds =   parseInt(sec % 60); 
      
      if(hours >= 1 || forceHours) 
        hms = this.str_pad(hours, 2, "0", "STR_PAD_LEFT") + ":";
      hms +=  this.str_pad(minutes, 2, "0", "STR_PAD_LEFT") + ":" + this.str_pad(seconds, 2, "0", "STR_PAD_LEFT");
    
        // done!
        return hms;
    },
    secondsToPretty: function(sec) {
      var t;
      var days = sec/86400;
      if(days >= 1) {
        t = Math.round(days*10)/10 + " " + this._Core.T("common","days");
      }
      else {
        var hours = sec/3600;
        if(hours >= 1) {
          t = Math.round(hours*10)/10 + " " + this._Core.T("common","hours");          
        }
        else {
          var minutes = sec/60;
          if(minutes >= 1) {
            t = Math.round(minutes*10)/10 + " " + this._Core.T("common","minutes");
          }
          else {
            t = sec + " " + this._Core.T("common","seconds");
          }
        }
      }
      return t;
    },
    tSep: function(n, swap) {
      var ts = ","; // thousands separator
      var ds = "."; // decimal separator
      
      if(this._Core.Settings.settings.language == "de") swap = true;
      if (swap) { ts="."; ds=","; } // swap if requested
      
      var ns = String(n), ps = ns, ss = ""; // numString, prefixString, suffixString
      var i = ns.indexOf(".");
      if (i != -1) { // if ".", then split:
        ps = ns.substring(0, i);
        ss = ds + ns.substring(i+1);
      }
      return ps.replace(/(\d)(?=(\d{3})+([.]|$))/g,"$1"+ts)+ss;
    },
    str_pad: function(input, pad_length, pad_string, pad_type) {
      input = String (input);
      pad_string = pad_string != null ? pad_string : " ";
      if (pad_string.length > 0) {
        var padi = 0;
        pad_type = pad_type != null ? pad_type : "STR_PAD_RIGHT";
        pad_length = parseInt (pad_length);
        switch (pad_type) {
          case "STR_PAD_BOTH":
            input = this.str_pad (input, input.length + Math.ceil ((pad_length - input.length) / 2.0), pad_string, "STR_PAD_RIGHT");
          // break;  // kein break!
          case "STR_PAD_LEFT":
            var buffer = "";
            for (var i = 0, z = pad_length - input.length; i < z; ++i) {
              buffer += pad_string.charAt(padi); // [padi] IE 6.x bug
              if (++padi == pad_string.length) {
                padi = 0;
              }
            }
            input = buffer + input;
            break;
          default:
            for (var i = 0, z = pad_length - input.length; i < z; ++i) {
              input += pad_string.charAt(padi);
              if (++padi == pad_string.length) {
                padi = 0;
              }
            }
            break;
        }
      }
      return input;
    },
    ucfirst: function(str) {
      var f = str.charAt(0).toUpperCase();
      return f + str.substr(1, str.length-1);    
    },
        normalizeString: function(str) {
                str = str.replace(" ","_");
                str = str.toLowerCase();
                return str;
        },
    trim: function(str, chars) {
      chars = chars || "\\s";
      return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
    },
    rtrim: function(str, chars) {
      chars = chars || "\\s";
      return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
    },
    prettyDate: function(timestamp, detailed) {
      var time = new Date(timestamp * 1000);
      var language = this._Core.Settings.settings.language;
      var prettyDate;
      var day =   time.getDate();      if(day<10)    day = "0"+day;
      var month =  time.getMonth() + 1;   if(month<10)  month = "0"+month;
      var year =   time.getFullYear();
      
      switch(language) {
        case "de":
          prettyDate = day+"."+month+"."+year;
          break;
        default:
          prettyDate = month+"/"+day+"/"+year;
          break;
      }
      if (detailed) {
        var hour =     time.getHours();
        var minute =   time.getMinutes();
        if(minute<10)  minute = "0"+minute;
        prettyDate += ", "+hour+":"+minute;
      }
      
      return prettyDate;
    },
    getPrettyDateFromDate: function(date) {
      date = date.split("-");
      return this.getMonth(date[1]) + " " + date[0];
    },
    getWeekDay: function(timestamp) {
      var time = new Date(timestamp * 1000);
      var language = this._Core.Settings.settings.language;
      var days = new Array(
        this._Core.T('date','sunday'), 
        this._Core.T('date','monday'), 
        this._Core.T('date','tuesday'),
        this._Core.T('date','wednesday'),
        this._Core.T('date','thursday'),
        this._Core.T('date','friday'),
        this._Core.T('date','saturday')
      );
      
      return days[time.getDay()];
    },
    exactDate: function(timestamp, complete) {
      var time = new Date(timestamp * 1000);
      var language = this._Core.Settings.settings.language;
      var prettyDate;
      var day =     time.getDate();      if(day<10)    day = "0" + day;
      var month =    time.getMonth() + 1;   if(month<10)  month = "0" + month;
      var year =     time.getFullYear();
      
      var hour =     time.getHours();
      var minute =   time.getMinutes();
      
      return {
        day:   day,
        month:   month,
        year:   year,
        hour:  hour,
        minute: minute
      };
    },
    getTimespan: function(time) {
      if(!time)  return false;
      var timespan = "";
      if(time.unit == "seconds")
        timespan = this._Core.T('snippets','justNow');
      else
        timespan = sprintf(this._Core.T('snippets','XYago'), time.timespan, this.getTimeUnit(time.timespan, time.unit, true));
        
      return timespan;
    },
    getTimeUnit: function(val, unit, d) {
      switch(unit) {
        case "minutes":
          return (val == 1) ? this._Core.T('date','minute') : (d) ? this._Core.T('date','minutes_D') : this._Core.T('date','minutes');
        case "hours":
          return (val == 1) ? this._Core.T('date','hour') : (d) ? this._Core.T('date','hours_D') : this._Core.T('date','hours');
        case "days":
          return (val == 1) ? this._Core.T('date','day') : (d) ? this._Core.T('date','days_D') : this._Core.T('date','days');
        case "weeks":
          return (val == 1) ? this._Core.T('date','week') : (d) ? this._Core.T('date','weeks_D') : this._Core.T('date','weeks');
        case "months":
          return (val == 1) ? this._Core.T('date','month') : (d) ? this._Core.T('date','months_D') : this._Core.T('date','months');
        case "years":
          return (val == 1) ? this._Core.T('date','year') : (d) ? this._Core.T('date','years_D') : this._Core.T('date','years');
        default:
          return "";
      }
    },
    getMonth: function(month) {
      switch(month) {
        case 1:
        case "01":
          return this._Core.T('date','january');
        case 2:
        case "02":
          return this._Core.T('date','february');
        case 3:
        case "03":
          return this._Core.T('date','march');
        case 4:
        case "04":
          return this._Core.T('date','april');
        case 5:
        case "05":
          return this._Core.T('date','may');
        case 6:
        case "06":
          return this._Core.T('date','june');
        case 7:
        case "07":
          return this._Core.T('date','july');
        case 8:
        case "08":
          return this._Core.T('date','august');
        case 9:
        case "09":
          return this._Core.T('date','september');
        case 10:
          return this._Core.T('date','october');
        case 11:
          return this._Core.T('date','november');
        case 12:
          return this._Core.T('date','dezember');
        default:
          return "";
      }
    },
    getShortMonth: function(month) {
      return this.getMonth(month).substr(0,3).toUpperCase();
    },
    replaceAnchors: function(element) {
      try {
        element.find("a").each(
          function(item,index) {
            var href = $(this).attr('href');
            if(href !== undefined) {
              var anchor = href.split("#");
              if(anchor.length == 2) {
                anchor = anchor[1];
                $(this).click(
                  function() {
                    var target = element.find("a[@name="+anchor+"]");
                    $.log(target);
                    //target.ScrollTo(50);
                  }
                ).attr('href','javascript:void(0);');
              }
              else {
                $(this).attr('target','_blank');
              }
            }
            var value = $(this).html();
            if( $(this).attr("name"))
              $(this).hide();
            else
              $(this).empty().append(value).addClass('link');
          }
        );
      }
      catch(e) {
        
      }
    },
    arrayPush: function(array, value) {
      if(this.typeOf(array) != "array")   array = [];
      if(array.indexOf(value) == -1)  array.push(value);
    },
    arrayRemove: function(array, value) {
      if(this.typeOf(array) != "array")   array = [];
      if(array.indexOf(value) >= 0)    array.splice(array.indexOf(value), 1);
    },
    typeOf: function(value) {
      var s = typeof value;
      if (s === 'object') {
        if (value) {
          if (typeof value.length === 'number' && !(value.propertyIsEnumerable('length')) && typeof value.splice === 'function') {
            s = 'array';
          }
        }
        else {
          s = 'null';
        }
      }
      return s;
    },
    serialize: function(obj) {
      var _ref = this;
      var str = "";
      
      $.each(obj, function(name, value) {
        var type = _ref.typeOf(value);
        if(type == "array") {
          $.each(value, function(n, v) {
            str += name+"[]="+encodeURIComponent(v)+"&";
          });
        }
        else if(type == "object")
          str += _ref.serializeObject(value, name);
        else
          str += name+"="+encodeURIComponent(value)+"&";
      });
      return str;
    },
    numberFormat: function(number) {
      return number;
    },
    serializeObject: function(value, str) {
      var _ref = this;
      var data = Array();
      
      $.each(value, function(i, v) {
        var type = _ref.typeOf(v);
        if(type == "object")         data.push(_ref.serializeObject(v, str+"["+i+"]"));
        else if(type == "array")
          $.each(value, function(n, va) {
            data.push(str+"["+i+"][]="+encodeURIComponent(va)+"&");
          });
        else             data.push(str+"["+i+"]="+encodeURIComponent(v)+"&");
      });
      return data.join("");
    }
  });
  
// GLOBAL PROTOTYPES
  Array.prototype.shuffle = function(){
    var tmp, rand;
    for(var i =0; i < this.length; i++){
      rand = Math.floor(Math.random() * this.length);
      tmp = this[i]; 
      this[i] = this[rand]; 
      this[rand] = tmp;
    }
  };
  
  
  function sprintf () {
    try {
      var i = 0, a, f = arguments[i++], o = [], m, p, c, x;
      while (f) {
        if (m = /^[^\x25]+/.exec(f)) o.push(m[0] );
        else if (m = /^\x25{2}/.exec(f)) o.push('%');
        else if (m = /^\x25(?:(\d+)\$)?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(f)) {
          if (((a = arguments[m[1] || i++]) == null) || (a == undefined)) throw("Too few arguments.");
          if (/[^s]/.test(m[7]) && (typeof(a) != 'number'))
          throw("Expecting number but found " + typeof(a));
          switch (m[7]) {
            case 'b': a = a.toString(2); break;
            case 'c': a = String.fromCharCode(a); break;
            case 'd': a = parseInt(a); break;
            case 'e': a = m[6] ? a.toExponential(m[6]) : a.toExponential(); break;
            case 'f': a = m[6] ? parseFloat(a).toFixed(m[6]) : parseFloat(a); break;
            case 'o': a = a.toString(8); break;
            case 's': a = ((a = String(a)) && m[6] ? a.substring(0, m[6]) : a); break;
            case 'u': a = Math.abs(a); break;
            case 'x': a = a.toString(16); break;
            case 'X': a = a.toString(16).toUpperCase(); break;
          }
          a = (/[def]/.test(m[7]) && m[2] && a > 0 ? '+' + a : a);
          c = m[3] ? m[3] == '0' ? '0' : m[3].charAt(1) : ' ';
          x = m[5] - String(a).length;
          p = m[5] ? str_repeat(c, x) : '';
          o.push(m[4] ? a + p : p + a);
        }
        else throw ("Huh ?!");
        f = f.substring(m[0].length);
      }
      return o.join('');
    }
    catch(e) {
      $.log('## SPRINTF-ERROR: '+e);
      return "";
    }
  }

/**
 * @author pr
 */

  var Simfy_Tooltip = new Class({
    initialize: function(options) {
      this._Core = options.core;
      this.tooltipActive = false;
      this.activeElement = false;
      this.delay = 200;
      this.timeout;
    },
    initTooltip: function(options, e) {
      if(!options.content)
        return;
      
      var _ref = this;
      var delay =     options.delay || this.delay;
      var minWidth =  options.minWidth || false;
      
      _ref.timeout = setTimeout(function() { _ref.showTooltip(options, e); }, delay );
      
      options.element.hover(function() {}, function() {
        clearTimeout(_ref.timeout);
        _ref.removeTooltip();
      }).mousedown(function() {
        clearTimeout(_ref.timeout);
	 			_ref.removeTooltip(); 
			});
    },
    showTooltip: function(options, e) {
      this.buildTooltip(options, e);
      this.tooltipActive = true;
      this.activeElement = $('#tooltip');
    },
    buildTooltip: function(options, e) {
      var tooltip = $('<div id="tooltip"><p></p></div>');
      if(options.className)
        tooltip.addClass(options.className);
      tooltip.children('p').append(options.content);

      options.element.removeAttr('title');
      
      var offset = options.element.offset();
      var containerOffset = $('#content').offset();
      tooltip.css('position','absolute').hide();
      $('#content').append(tooltip);
      
      tooltip.css('left', offset.left - containerOffset.left).css('top', offset.top - tooltip.height() - 5).fadeIn(200);
      if(tooltip.offset().top < 5 )
        tooltip.addClass('top').css('top', offset.top + options.element.height() + 5);
    },
    removeTooltip: function() {
      if(this.activeElement !== false)
        this.activeElement.remove();
      this.tooltipActive = false;
      this.activeElement = false;
    }
  });

/**
 * @author pr
 */
  var Simfy_MessageService = new Class({
    initialize: function(options) {
      this._Core =         options.core;
      this.messageBoxElement =   $('#messageBox');
      this.messageBoxElement.css("opacity",0);
      this.hideDelay =       options.hideDelay || 1500;
      this.opacity =         options.opacity || 0.75;
      this.autoShow =       true;
      this.autoHide =       true;
      this.hideTimeout;
      this.active =        false;
      
      this.userStatus = {
        messages:   0,
        pending:   0,
        asking:   0
      };
    },
    updateUserStatus: function(data) {
      if(data.messages)      this.userStatus.messages = data.messages.length;
      if(data.askingFriends)    this.userStatus.asking = data.askingFriends.length;
      if(data.pendingFriends)    this.userStatus.pending = data.pendingFriends.length;
      
      this.buildUserStatus();
    },
    buildUserStatus: function() {
      var status = $('<div class="status"></div>');
      var update = false;
      
      if(this.userStatus.messages > 0) {
        var link = this._Core.BL("user", this._Core.User.userData)+"messages/";
        var messages = $('<span class="messages"><a href="'+link+'">'+this.userStatus.messages+'</a></span>');
        this._Core.TT({
          element: messages,
          content: sprintf(this._Core.P(this.userStatus.messages, this._Core.T('snippets','xUnreadMessage'), this._Core.T('snippets','xUnreadMessages'), this._Core.T('snippets','xUnreadMessages')), this.userStatus.messages)
        });
        status.append(messages);
      }
      
      if(this.userStatus.asking > 0) {
        var link = this._Core.BL("user", this._Core.User.userData)+"friends/asking/";
        var asking = $('<span class="asking"><a href="'+link+'">'+this.userStatus.asking+'</a></span>');
        this._Core.TT({
          element: asking,
          content: sprintf(this._Core.T('friendManagement','xAsking') + " " + this._Core.P(this.userStatus.asking, this._Core.T('friendManagement','friendshipRequest'), this._Core.T('friendManagement','friendshipRequests'), this._Core.T('friendManagement','friendshipRequests')), this.userStatus.asking)
        });
        status.append(asking);
      }
      
      if(this.userStatus.pending > 0) {
        var link = this._Core.BL("user", this._Core.User.userData)+"friends/pending/";
        var pending = $('<span class="pending"><a href="'+link+'">'+this.userStatus.pending+'</a></span>');
        this._Core.TT({
          element: pending,
          content: sprintf(this._Core.T('friendManagement','xPending') + " " + this._Core.P(this.userStatus.pending, this._Core.T('friendManagement','friendshipRequest'), this._Core.T('friendManagement','friendshipRequests'), this._Core.T('friendManagement','friendshipRequests')), this.userStatus.pending)
        });
        status.append(pending);
      }
      $('#top').children('.options').children('.status').remove();
      $('#top').children('.options').append(status);
    },
    /*************************************************************
     *   MESSAGE SYSTEM
    **************************************************************/
    setMessage: function(options) {
      var message =   options.message || false;
      var autoShow =   options.autoShow || this.autoShow;
      var hideDelay =  options.hideDelay || this.hideDelay;
      var opacity =   options.opacity || this.opacity;
      
      if (message !== false && message != "") {
        this.messageBoxElement.children('span').empty().append(message);
        if (autoShow)
          this.showMessage();
      }
    },
    showMessage: function() {
      if(!this.active) {
        var _ref = this;
        this.active = true;
        clearTimeout(this.hideTimeout);
        
        var playerHeight = $('#containerPlayer').height();
        var offset = 10;
        
        var marginBottom = playerHeight + offset;
        this.messageBoxElement.css('margin-bottom', marginBottom);
        var marginRight = offset;
        this.messageBoxElement.css('margin-right', marginRight);
        
        this.messageBoxElement.show().fadeTo("slow", this.opacity, function() {
          if (_ref.autoHide) {
            _ref.startCountdown(_ref);
          }
        });
      }
    },
    startCountdown: function(_ref) {
      clearTimeout(_ref.hideTimeout);
      _ref.hideTimeout = setTimeout(function(){
        _ref.hideMessage();
      }, _ref.hideDelay);
    },
    hideMessage: function() {
      var _ref = this;
      this.messageBoxElement.fadeTo("slow", 0, function() {
        _ref.displayNone(_ref);
      });      
    },
    displayNone: function(_ref) {
      _ref.active = false;
      _ref.messageBoxElement.hide();
    },
    /*************************************************************
     *   NOTICE SYSTEM
    **************************************************************/
    setNotice: function(options) {
      var _ref = this;
      var notice =     options.notice;
      var id =       options.id || false;
      var className =    options.className;
      var red =       options.red || false;
      
      var container = $($('#simfyTemplate_noticeBox').html());
      if(id)   container.attr('id',id);
      if(red)  container.addClass('red');
      container.children('div').children('div.close').click(
        function() {
          container.remove();
        }
      );
      container.children('div').children('div.container').append(notice);
      if(id)
        $('#'+id).remove();
      $('#content_main').prepend(container);  
    }
  });

/**
 * @author pr
 */

   var Simfy_Suggest = new Class({
    initialize: function(options) {
      var _ref = this;
      this._Core = options.core;
		  this.options = {};
      this.options.minLength = 2;
      this.options.emptyVal = $('#search_input').val();
      this.options.lastSearch = "";
      this.options.timeout;
      this.options.isOpen = false;
      this.options.delay = 200;
			this.options.delays = [500,350,200];
			this.options.hasFocus = false;
			this.resultSet = [];
			this.resultActive = false;
      this.loading = false;
      
      this.Requests = new Simfy_Requests();

			this.resetData();
    },
		init: function(remoteURL) {
			if(!remoteURL)	return;
			
			this.remoteURL = remoteURL;
			var _ref = this;
			
			$('html').mousedown(function() {_ref.hide();});
			
      $('#search_input').focus(function() {
        if($(this).val() == _ref.options.emptyVal)  {
          $(this).val('');
        }
				_ref.show();
      }).blur(function() {
        if($(this).val() == '') {
          $(this).val(_ref.options.emptyVal);
        }
      }).keydown(function(evt) {
        if(evt.keyCode == 38)       _ref.move('up');
        else if(evt.keyCode == 40)  _ref.move('down');
        else if (evt.keyCode == 13) _ref.select(evt);
      }).keyup(function(evt) {
        if(evt.keyCode == 27) {
          _ref.reset();
          return;
        }
        var val = $.trim($(this).val());
        if(val.length >= _ref.options.minLength && val != _ref.options.lastSearch) {
      		clearTimeout(_ref.options.timeout);
					var delay;
					if(length <= 3) 			delay = _ref.options.delays[0];
					else if(length <= 8) 	delay = _ref.options.delays[1];
					else									delay = _ref.options.delays[2];
      		_ref.options.timeout = setTimeout(
      			function() {
      			  _ref.suggestOnChange(val);
      			}, delay
      		);
      	}
      	else if(val == "" || val.length < _ref.options.minLength) {
      	  _ref.Requests.checkOpenRequests();
					$('#search').removeClass('noResults').addClass('description');
					$('#search_box').children('.indicator').removeClass('loading').removeClass('close');
      	}
				else if(_ref.options.lastSearch && val == _ref.options.lastSearch) {
					if(_ref.noResults) 	$('#search').removeClass('description').addClass('noResults');
					else								$('#search').removeClass('description').removeClass('noResults');
				}
      });

			$('#search_container').hover(function() {
				_ref.options.hasFocus = true;
			}, function() {
				_ref.options.hasFocus = false;
			});
			
			$('#search_box').children('.indicator').click(function() {
				if($(this).hasClass('close'))
					_ref.reset();
			});
		},
		move: function(type) {
		  if(this.resultSet.length > 0) {
	      var to = 0;
		    if(this.resultActive >= 0 && this.resultActive !== false) {
		      this.resultSet[this.resultActive].removeClass('active');
		      if(type == "up") {
		        to = this.resultActive - 1;
		        if(to < 0) to = this.resultSet.length - 1;
		      }
		      else {
		        to = this.resultActive + 1;
  		      if(to >= this.resultSet.length) to = 0;
		      }
		    }
		    this.resultSet[to].addClass('active');
        this.resultActive = to;
        
		    var wh = $('#search').children('.wrapper').height();
        var ey = this.resultSet[to].position().top;
        var eh = (this.resultSet[to].hasClass('showMore')) ? this.resultSet[to].innerHeight() : this.resultSet[to].height();
        if(ey < 0 || (ey + eh) > wh) {
          if(type == "up")  $('#search').children('.wrapper').scrollTo(this.resultSet[to], 10);
          else              $('#search').children('.wrapper').scrollTo(this.resultSet[to], 10, {offset: -(350 - eh)});
        }
		  }
		},
		select: function(evt) {
		  if(this.resultActive >= 0) {
		    var e = this.resultSet[this.resultActive];
		    if(evt.shiftKey)  e.find('.play').trigger('click');
		    else              e.find('a:first').trigger('click');
		    $('#search_input').blur();
		  }
		},
		updateResultset: function() {
		  var _ref = this;
		  var artists = $('#search_results_artists').children('li:visible');
		  var albums = $('#search_results_albums').children('li:visible');
		  var tracks = $('#search_results_tracks').children('li:visible');
		  
      this.resultSet = [];
      this.resultActive = false;
      pushResults(artists);
      pushResults(albums);
      pushResults(tracks);
      
      var i = 0;
      while(i < this.resultSet.length) {
        if(this.resultSet[i].hasClass('active')) {
          this.resultActive = i;
        }
        i++;
      }
      
		  function pushResults(items) {
		    if(items.length > 0) {
		      items.each(function(i, v) {
		        var element = $(v);
		        _ref.resultSet.push(element);
		      });
		    }
		  }
		},
		checkScroll: function() {
			if(!this.refreshing) {
				var _ref = this;
				var wrapper = $('#search').children('.wrapper');
				var pct = 100 / (wrapper.children('.results_container').height() - wrapper.height() + 15);
				var curPct = wrapper.scrollTop() * pct;
				if(curPct > 98) {
					return true;
				}
			}
			return false;
		},
		show: function() {		  
			$('#search').show();
			$('#search_container').addClass('active');
			this.options.hasFocus = true;
		},
		hide: function() {
			if(!this.options.hasFocus)	this.doHide();
		},
		doHide: function() {
			$('#search').hide();
			$('#search_container').removeClass('active');
			this.options.hasFocus = false;
		},
		reset: function() {
			$('#search').removeClass('noResults').addClass('description');
			$('#search_input').val('').focus();
			$('#search_box').children('.indicator').removeClass('loading').removeClass('close');
     	this.Requests.checkOpenRequests();
			this.resetData();
		},
		resetData: function() {
			this.noResults = false;
			this.totalPages = {
				artists: false,
				products: false,
				tracks: false
			};
			this.currentPage = {
				artists: 0,
				products: 0,
				tracks: 0
			};
			this.refreshing = false;
		},
    suggestOnChange: function(val) {
      if(val != this.options.lastSearch && val.length >= this.options.minLength) {
        this.submitSearch();
      }
    },
    focusSuggest: function() {
      $('#search_input').focus();
    },
    submitSearch: function() {
      var _ref = this;
      
      var val = $.trim($('#search_input').val());
      if(!val || val == "" || val.length < 2) {
      	this.Requests.checkOpenRequests();
        return;
      }
      
      this.Requests.checkOpenRequests();
			this._Core.Log.logPageView("suggest/" + encodeURIComponent(val));
      
      $("#search_box").children('.indicator').removeClass('close').addClass('loading');
      this.loading = true;
      var request = $.ajax({
        method: "GET",
        dataType: "script",
        url: this.remoteURL + "?page=" + 1 +"&search=" + encodeURIComponent(val),
        success: function(data) {
          $('#show_more_tracks').remove();
          
					var results = $('#search');
					results.removeClass('description').removeClass('noResults');
					
					data = $(data);
					results.empty().append(data.children('.wrapper'));
					$('#search').children('.wrapper').scrollTo(0,0);
					
					if(results.children('.wrapper').children('.noResults').length == 0) {
            _ref.noResults = false;
						_ref.bindClickForResults(results);
							
						var show_more_tracks = results.children('.wrapper').children('.results_container').children('.tracks').children('ul').children('.showMore');
												
						if(show_more_tracks.length > 0) {
  					  $('#search').children('.wrapper').unbind('scroll').scroll(function(e) {
  					  	if(_ref.checkScroll()) {
  					  	  show_more_tracks.children('a').trigger('click');
  					  	}
  					  });
  					}
  					else {
	  					$('#search').children('.wrapper').unbind('scroll');
  					}
					}
					else {
					  $('#search').addClass('noResults');
	          _ref.noResults = true;
					}
					
      		$("#search_box").children('.indicator').addClass('close').removeClass('loading');
          checkPlayRights($('#search'));
					_ref.show();
					_ref.updateResultset();
        },
        error: function() {
      		$("#search_box").children('.indicator').addClass('close').removeClass('loading');
        },
        complete: function() {
          _ref.loading = false;
        }
      });
      this.options.lastSearch = val;
      this.Requests.addRequest(request);
      return false;
    },
		bindClickForResults: function(results, unbind) {
			if(!results)	return;
			
			var _ref = this;
			
			if(unbind) {
				results.find('a').unbind('click');
				results.find('.expand').unbind('click');
			}
			results.find('a').click(function() {
				if(!convertLink($(this))) {
					_ref.doHide();
					return false;
				}
			});
			
			results.find('.expand').click(function() {
			  if($(this).parent().hasClass('expandable')) {
			  	if($(this).parent().children('ul').is(':visible')) {
			  		$(this).parent().children('ul').hide();
			  		$(this).parent().removeClass('grouped');
			  	}
			  	else {
			  		$(this).parent().children('ul').show();
			  		$(this).parent().addClass('grouped');
			  	}
			  }
		  });
		},
    search_more: function(type, query, page) {
      var _ref = this;
      if(!this.refreshing) {
        this.refreshing = true;

				query = encodeURIComponent($.trim(query));
				var fetching = $('#search').children('.wrapper').children('.fetching');
				if(type == "tracks")	fetching.show();
				else {
					$('#show_more_' + type).children('.show').hide();
					$('#show_more_' + type).children('.loading').show();
				}
        
        var request = $.ajax({
	        method: "GET",
	        dataType: "script",
	        url: this.remoteURL + "?search="+query+"&page="+page+"&type="+type,
	        success: function(data) {
						_ref.refreshing = false;
            $(".showMore#show_more_" + type).replaceWith(data);
						_ref.bindClickForResults($('#search'), true);
						if(type == "tracks") {
						  var show_more_tracks = $('#show_more_tracks');
						  $('#search').children('.wrapper').unbind('scroll')
						  if(show_more_tracks.length >= 1) {
    					  $('#search').children('.wrapper').scroll(function(e) {
    					  	if(_ref.checkScroll()) {
    					  	  show_more_tracks.children('a').trigger('click');
    					  	}
    					  });
    					}
    					else {
    					  fetching.hide();
    					}
						}
						_ref.updateResultset();
					},
					error: function() {
						_ref.refreshing = false;
						if(type == "tracks")	fetching.hide();
					}
				});
        this.Requests.addRequest(request);
      }
    },
		zebra: function() {
			$('#search').children('.wrapper').children('.results_container').children('div').children('ul').children('li').each(function(i, v) {
				$(this).removeClass('zebra');
				if(i%2)	$(this).addClass('zebra');
			});
		}
   });

/**
 * @author pr
 */

	var Simfy_Login = new Class({
		initialize: function(options) {
		  this._Core = options.core;
			this.loginInProcess = false;
			
		  if(typeof staticLogin == "boolean" && staticLogin) return;
		  
			this.loginForm = $('#new_user_session');
			var _ref = this;
			
			// LOGIN
			$('#loginButton').removeAttr('onclick').click(function() {
			  _ref.doLogin();
			});
			$('#user_session_password').keydown(function(evt) {
			  if(evt.keyCode == 13) {
			    _ref.doLogin();
			  }
			});
			
			// LOGIN LOST
			$('#loginLostButton').removeAttr('onclick').click(function() {
			  _ref.doResetPassword();
			});
			$('#new_password_reset').children('input').keydown(function(evt) {
			   if(evt.keyCode == 13) {
			    _ref.doResetPassword();
			    evt.preventDefault();
			  }
			});
			
			// DISABLE FORMS
			disableFormSubmit(this.loginForm);
			disableFormSubmit($('#new_password_reset'));
		},
		show: function(dontFade) {
		  if($('#content').find('#new_user_session').length >= 1) {
		    $('#content').find('#new_user_session').find('#user_session_email').focus();
		    return;
		  }
		  
	    $('body').addClass('modal');
			if(dontFade) {
		  	$('#loginForm').show();
		  	$('#overlay_modal').show();				
			}
			else {
		  	$('#loginForm').fadeIn(250);
		  	$('#overlay_modal').fadeIn(250);
			}
		  $('#user_session_email').focus();
      Core.Log.logPageView("overlay/login");
		},
		hide: function() {
		  $('#loginForm').hide();
		  $('#overlay_modal').hide();
	    $('body').removeClass('modal');
		  this.reset();
		},
		checkLogin: function() {
		  var _ref = this;
		  var email =  $('#user_session_email').val();
		  var password = $('#user_session_password').val();
		
			$('#user_session_email').removeClass('error');
			$('#user_session_password').removeClass('error');
		  
		  if(email != "" && password != "") {
		    return true;
		  }
		  else {
		    $('#login_error').children().hide();
		    $('#login_error').children('.empty').show();
		    $('#login_error').show();
		    if(password == "") {
					$('#user_session_password').focus();
					$('#user_session_password').addClass('error');
				}
		    if(email == "") {
					$('#user_session_email').focus();
					$('#user_session_email').addClass('error');
				}
		  }
	    return false;
		},
		doLogin: function() {
		  if(!this.checkLogin())  return;
		  
		  var _ref = this;
			
      if(!this.loginInProcess) {
	      this.loginInProcess = true;
 		    $('#login_control').children('.button').hide();
 		    $('#login_control').children('.FB_login_button').hide();
		    $('#login_control').children('.loading').show();
		    $('#login_error').children().hide();

        $('#user_session_email, #user_session_password').attr('readonly','readonly').blur();

		    var form =    this.loginForm;
        var sData =   form.serialize();
        var url =     form.attr('action');
        var method =  form.attr('method');
                	    
        $.ajax({
          url:      url,
          data:     sData,
          type:     method,
          dataType: "text",
          success: function(data) {
            if($.trim(data) == "true") {
      		    $('#login_control').children('.loading').hide();
      		    $('#login_credentials').hide();
      		    $('#login_notice').hide();
  						$('#loginForm').children('.middle').children('.content').children('.header').children('.close').remove();
      		    $('#login_success').show();
			        enableFormSubmit(_ref.loginForm);
              $('#redirectTo').val($.address.path());
              Core.Log.logPageView("overlay/loginComplete");
			        _ref.loginForm.submit();
            }
            else {
      		    $('#login_control').children('.loading').hide();
      		    $('#login_control').children('.button').show();
 		          $('#login_control').children('.FB_login_button').show();
      		    $('#login_error').children().hide();
      		    $('#login_error').children('.fail').show();
      		    $('#login_error').show();
      		    
              $('#user_session_email, #user_session_password').removeAttr('readonly');
            }
            _ref.loginInProcess = false;
          },
          error: function(error) {
    		    $('#login_control').children('.loading').hide();
     		    $('#login_control').children('.button').show();
 		        $('#login_control').children('.FB_login_button').show();
            $('#user_session_email, #user_session_password').removeAttr('readonly');
            $('#user_session_password').select();
            _ref.loginInProcess = false;
          }
        });
		  }
		},
		checkLoginLost: function() {
		  var email = $('#password_reset_email').val();
		  if(email != "") {
        return true;
		  }
		  else {
		    $('#password_reset_email').focus().addClass('error');
		    $('#new_password_reset').children('.status').children().hide();
		    $('#new_password_reset').children('.status').children('.empty').show();
		    $('#new_password_reset').children('.status').addClass('error').show();
		  }
		  return false;
		},
		doResetPassword: function() {
		  if(!this.checkLoginLost())  return;
		  
		  var _ref = this;
		  
			$('#password_reset_email').removeClass('error');
	    $('#new_password_reset').children('.status').removeClass('error').hide();
	    $('#new_password_reset').children('.loading').show();
	    $('#new_password_reset').children('.secondary').hide();
	    $('#loginLostButton').hide();
	    
      var form =    $('#new_password_reset');
      var sData =   form.serialize();
      var url =     form.attr('action');
      var method =  form.attr('method');
      $.ajax({
        url:      url,
        data:     sData,
        type:     method,
        dataType: "text",
        success: function(data) {
          if($.trim(data) == "true") {
    		    $('#new_password_reset').children().hide();
    		    $('#new_password_reset').children('.status').show().children().hide();
    		    $('#new_password_reset').children('.status').show().children('.sent').show();
          }
          else {
    		    $('#new_password_reset').children('.status').addClass('error').show().children().hide();
    		    $('#new_password_reset').children('.status').children('.fail').show();
    		    $('#new_password_reset').children('.loading').hide();
    		    $('#new_password_reset').children('.secondary').show();
    		    $('#loginLostButton').show();
          }
        },
        error: function(error) {
					$('#password_reset_email').focus().addClass('error');
  		    $('#new_password_reset').children('.status').addClass('error').show().children().hide();
  		    $('#new_password_reset').children('.status').children('.fail').show();
  		    $('#new_password_reset').children('.loading').hide();
  		    $('#new_password_reset').children('.secondary').show();
  		    $('#loginLostButton').show();
        }
      });
		},
		toggleLoginLoginLost: function() {
		  $('#login_credentials').toggle();
		  $('#login_lost').toggle();
		},
		reset: function() {
		  // LOGIN
		  $('#login_credentials').show();
		  $('#login_notice').show();
		  $('#login_success').hide();
		  $('#login_error').hide();
      
		  $('#login_error').children().hide();
	    $('#login_control').children('.button').show();
	    $('#login_control').children('.loading').hide();
	    this.loginForm.children('input:text, input:password').val('');	    
	    
	    // LOGIN LOST
		  $('#login_lost').hide().removeClass('error');
		  $('#password_reset_email').val('');
		  $('#new_password_reset').children('.status').hide();
		  $('#new_password_reset').children('.status').children().hide();
		}
	});

/**
 * @author pr
 */

 	var Simfy_Signup = new Class({
		initialize: function(options) {
			this._Core = options.core;			
			
		  if(typeof staticSignup == "boolean" && staticSignup) return;
			
			this.signupForm = $('#new_standard_user');
			
			this.reset();
			this.addBasicFunctionality();
		},
		show: function(referer, dontFade, homeAction) {
	    var header = $('#signupForm').children('.middle').children('.content').children('.header');
	    header.removeClass('play_limit');
		  if(referer) {
		    switch(referer) {
		      case "play_limit":
		        header.addClass('play_limit');
		      break;
		    }
		  }
		  
      $('#actionable_id').val('');
      $('#actionable_type').val('');
      $('#action_name').val('');
		  if(homeAction) {
		    switch(homeAction.action_name) {
		      case "play":
		        $('#actionable_id').val('play');
		        $('#actionable_type').val(homeAction.actionable_type);
		        $('#action_name').val(homeAction.actionable_id);
		      break;
		    }
		  }
			
		  if($('#content').find('#new_standard_user').length >= 1) {
		    $('#content').find('#new_standard_user').find('#standard_user_username').focus();
		    return;
		  }
			
			if(homeAction) {
				$('#new_standard_user').children('#actionable_id').val(homeAction.actionable_id);
				$('#new_standard_user').children('#actionable_type').val(homeAction.actionable_type);
				$('#new_standard_user').children('#action_name').val(homeAction.action_name);
			}
			else {
				$('#new_standard_user').children('#actionable_id').val('');
				$('#new_standard_user').children('#actionable_type').val('');
				$('#new_standard_user').children('#action_name').val('');
			}
			
	    $('body').addClass('modal');
		  if(dontFade) {
				$('#signupForm').show();
		  	$('#overlay_modal').show();
			}
			else {
				$('#signupForm').fadeIn(250);
		  	$('#overlay_modal').fadeIn(250);
			}
      Core.Log.logPageView("overlay/signup");
		 	//$('#standard_user_username').focus();
		},
		hide: function() {
		  $('#signupForm').hide();
		  $('#overlay_modal').hide();
  	  $('body').removeClass('modal');
		  this.reset();
		},
		reset: function() {
			this.error = false;
			this.errors = {};
			
			this.firstFocus = {};
			this.firstFocus.userName = true;
			this.firstFocus.eMail = true;
			this.firstFocus.password = true;
			this.firstFocus.passwordConfirm = true;
			
			this.validUsername = false;
			this.valideEmail = false;
			this.lastUsername = false;
			this.lastEmail = false;
			
			$('#signup .form .messages').children('.default').show().siblings('.referer').hide().children().hide();
		},
		addBasicFunctionality: function() {
			var _ref = this;

			// FORM
		  this.signupForm.attr('onsubmit','return false;');
			
			// SIGNUP BUTTON
			$('#signupButton').removeAttr('onclick').click(function() {
			  _ref.doSignup();
			});
			
			// USERNAME CHECK
			$('#standard_user_username').focus(function() {
				if (_ref.firstFocus.userName || $('#standard_user_username').val() == "") {
					_ref.firstFocus.userName = false;
				}
			}).blur(function() {
				_ref.checkUsername();
			});

			// EMAIL CHECK
			$('#standard_user_email').focus(function() {
				if (_ref.firstFocus.eMail || $('#standard_user_email').val() == "") {
					_ref.firstFocus.eMail = false;
				}	
			}).blur(function() {
				_ref.checkEmail();
			});	
			
			// PASSWORD CHECK
			$('#standard_user_password').focus(function() {
				if (_ref.firstFocus.password || $('#standard_user_password').val() == "") {
					_ref.firstFocus.password = false;
				}
			}).blur(function() {
				_ref.checkPassword();
				if($('#standard_user_password_confirmation').val() != "")	_ref.checkPasswordConfirm();
			})
			$('#standard_user_password_confirmation').focus(function() {
				if (_ref.firstFocus.passwordConfirm || $('#standard_user_password_confirmation').val() == "") {
					_ref.firstFocus.passwordConfirm = false;
				}
			}).blur(function() {
				_ref.checkPasswordConfirm();
			}).keyup(function() {
  			_ref.checkPassword();
  			if($('#register_passwordConfirm').val() != "")	_ref.checkPasswordConfirm();
  		});
			
			// AGB
			$('#standard_user_agb').change(function() {
				_ref.checkTermsAndConditions();
			});
		},
		checkUsername: function() {
			var _ref = this;
			var username = $('#standard_user_username').val();
			$('#standard_user_username').removeClass('success').removeClass('error');
			this.errors.username = false;
			this.errors.usernameEmpty = false;
			this.errors.usernameShort = false;
			this.errors.usernameSpaces = false;
			
			if(username !== "" && username.length >= 3) {
			  if(username != this.lastUsername && !this.valideUsername) {
          $.ajax({
            url:      "/validate_username",
            data:     "standard_user[username]="+encodeURIComponent(username),
            type:     "GET",
            dataType: "html",
            success: function(data) {
              var success = $(data).hasClass('success');
              if(success) {
                _ref.validUsername = true;
        				_ref.errors.username = false;
        				_ref.errors.usernameEmpty = false;
        				_ref.errors.usernameSpaces = false;
								$('#status_username').children('.success').empty().append($(data).text());
              }
              else {
        				_ref.errors.username = true;
        				_ref.errors.usernameEmpty = false;
								$('#status_username').children('.errorMessage').empty().append($(data).text());
              }
  			      _ref.updateStatus('username');
            },
            error: function(error) {
              $.log(error);
            }
          });
			    this.lastUsername = username;
          $('#status_username').children().hide().siblings('.isLoading').show();
        }
			}
			else {
			  this.validUsername = false;
				if(username === "") {
					this.errors.usernameEmpty = true;
				}
				else if(username.length < 3) {
					this.errors.usernameShort = true;
				}
				this.errors.username = true;
				this.updateStatus('username');
			}
		},
		checkEmail: function() {
			var _ref = this;
			var email = 		$('#standard_user_email').val();
      this.errors.email = false;
			this.errors.emailEmpty = false;
			this.errors.emailExists = false;
			this.errors.emailInvalid = false;
			
			if(email !== "") {
			  if(this.lastEmail != email && !this.valideEmail) {
          $('#status_email').show().children().hide().siblings('.isLoading').show();
          $.ajax({
            url:      "/validate_email",
            data:     "standard_user[email]="+encodeURIComponent(email),
            type:     "GET",
            dataType: "html",
            success: function(data) {
              var success = $(data).hasClass('success');
              if(success) {
                _ref.validEmail = true;
                _ref.errors.email = false;
          			_ref.errors.emailEmpty = false;
          			_ref.errors.emailExists = false;
          			_ref.errors.emailInvalid = false;
								$('#status_email').children('.success').empty().append($(data).text());
              }
              else {
        				_ref.errors.email = true;
        				_ref.errors.emailExists = true;
								$('#status_email').children('.errorMessage').empty().append($(data).text());
              }
  			      _ref.updateStatus('email');
            },
            error: function(error) {
              $.log(error);
            }
          });
			    this.lastEmail = email;
        }
			}
			else {
			  this.validEmail = false;
				this.errors.email = true;
				
				if (email === "") {
					this.errors.emailEmpty = true;
				}
				this.updateStatus('email');
			}
		},
		checkPassword: function() {
			var password = $('#standard_user_password').val();
			
			if(password && password.length >= 6) {
				this.errors.password = false;
				this.errors.passwordShort = false;
			}
			else {
				this.errors.password = true;
				this.errors.passwordShort = true;
			}
			this.updateStatus('password');
		},
		checkPasswordConfirm: function() {
			var password = $('#standard_user_password').val();
			var passwordConfirm = $('#standard_user_password_confirmation').val();
			
			this.errors.passwordConfirm = false;
			this.errors.passwordConfirmationEmpty = false;
			this.errors.passwordMatch = false;
			
			if(passwordConfirm != "" && password == passwordConfirm) {
        // All okay...
			}
			else {
				this.errors.passwordConfirm = true;
				if(passwordConfirm == "")				      this.errors.passwordConfirmationEmpty = true;
				else if(password != passwordConfirm)	this.errors.passwordMatch = true;
			}
			this.updateStatus('passwordConfirm');
		},
		checkVoucher: function() {
		  var val = $('#voucher_code').val();
		  if(val == "") {
		    
		  }
		  else {
		    
		  }
		},
		checkTermsAndConditions: function() {
			if(!$('#standard_user_agb:checked').val()) {
				this.errors.agb = true;
			}
			else {
				this.errors.agb = false;
			}
			this.updateStatus('agb');
		},
		updateStatus: function(type) {
			var error = false;
			
			// USERNAME
			if(type == "username" || type == "all") {
				$('#standard_user_username').removeClass('error');
				if(this.errors.username || !this.validUsername) {
					if(this.errors.usernameEmpty)         $('#status_username').children().hide().siblings('.empty').show();
					else if(this.errors.usernameShort)    $('#status_username').children().hide().siblings('.short').show();
					else if(this.errors.usernameSpaces)   $('#status_username').children().hide().siblings('.invalid').show();
					else                                  $('#status_username').children().hide().siblings('.errorMessage').show();
					
					$('#status_username').show();
					$('#standard_user_username').addClass('error');
					error = true;
				}
				else {
					$('#status_username').show().children().hide().siblings('.success').show();
					//$('#standard_user_username').addClass('success');
				}
			}	
			
			// E-MAIL
			if(type == "email" || type == "all") {
					$('#standard_user_email').removeClass('error');
				if(this.errors.email || !this.validEmail) {
					if(this.errors.emailEmpty)            $('#status_email').children().hide().siblings('.empty').show();
					else if(this.errors.emailInvalid)     $('#status_email').children().hide().siblings('.invalid').show();
					else                                  $('#status_email').children().hide().siblings('.errorMessage').show();
					$('#status_email').show();
					
					$('#standard_user_email').addClass('error');
					error = true;
				}
				else {
					$('#status_email').show().children().hide().siblings('.success').show();
				}
			}
			
			// PASSWORD
			if(type == "password" || type == "all") {
				$('#standard_user_password').removeClass('error');
				if(this.errors.password)  {
					if(this.errors.passwordShort) 				$('#status_password').children().hide().siblings('.short').show();
					
					$('#status_password').show();
					$('#standard_user_password').addClass('error');
					error = true;
				}
				else {
					$('#status_password').show().children().hide().siblings('.success').show();
				}
			}
			
			// PASSWORD CONFIRMATION
			if(type == "passwordConfirm" || type == "all") {
					$('#standard_user_password_confirmation').removeClass('error');
				if(this.errors.passwordConfirm)  {
					if(this.errors.passwordConfirmationEmpty) 	$('#status_passwordConfirm').children().hide().siblings('.empty').show();
					else if(this.errors.passwordMatch) 					$('#status_passwordConfirm').children().hide().siblings('.mismatch').show();

					$('#status_passwordConfirm').show();
					$('#standard_user_password_confirmation').addClass('error');
					error = true;
				}
				else {
					if(!this.errors.password) {
						$('#status_passwordConfirm').show().children().hide().siblings('.success').show();
					}
					else {
						$('#status_passwordConfirm').hide();
					}
				}
			}
			
			// VOUCHER
			if(type == "voucher" || type == "all") {
			  
			}
			
			// AGB
			if(type == "agb" || type == "all") {
				$('#standard_user_agb').parent().children('label').removeClass('error');
				if(this.errors.agb) {
					$('#standard_user_agb').parent().children('label').addClass('error');
					error = true;
				}
			}
			return error;
		},
		doSignup: function() {
			var _ref = this;
			
			this.checkUsername();
			this.checkEmail();	
			this.checkPassword();
			this.checkPasswordConfirm();
			this.checkTermsAndConditions();
			
			var errorsFound = this.updateStatus('all');

			$('#signupButton').parent().children('.button').hide();
			$('#signupButton').parent().children('.FB_login_button').hide();
			$('#signupButton').parent().children('.loading').show();			

			if(!errorsFound) {
			  this.signupForm.append('<img src="http://www.googleadservices.com/pagead/conversion/1018081631/?value=,01&amp;label=6L5pCPHWtgEQ3-K65QM&amp;guid=ON&amp;script=0" width="1" height="1" />')
        Core.Log.logPageView("overlay/signupComplete");
				this.signupForm.removeAttr('onsubmit').submit();
			}
			else {
				$('#signupButton').parent().children('.button').show();
		    $('#signupButton').parent().children('.FB_login_button').show();
				$('#signupButton').parent().children('.loading').hide();
			}
		}
	});

  var Simfy_Messages = new Class({
    initialize: function(options) {
      this._Core = options.core;
    },
    initNewMessage: function(friends, preSelectedRecipients) {
      var _ref = this;
      
      var form = $('#new_message_form');
      disableFormSubmit(form);
      
      var button = $('#sendNewMessage');
      button.click(function() {
        _ref.sendMessage(form);
      }).removeAttr('onclick');
      
      this.initFriendsSuggest(form, friends, preSelectedRecipients);
    },
    initFriendsSuggest: function(form, friends, preSelectedRecipients) {
			var lastVal = false;
			var suggestHasFocus = false;
			var suggestItems = [];
			var selectedSuggestItem = false;
			var suggestContainer = $('#newMessageSuggest');  
			var recipientInput = $('#recipient_input');
			var tokenizer = recipientInput.siblings('.tokenizer');
			$('#recipients').children().removeAttr('selected');
			var _ref = this;
			var maxWidth = 390;
			var minWidth = 20;
      recipientInput.keyup(function(evt) {
				var val = $(this).val().split(",").join("");
				if (evt.keyCode == 188 || evt.keyCode == 13 || evt.keyCode == 9) {
					$(this).val('').css('width', minWidth);
					checkInput(val);
					if(evt.keyCode == 13 || evt.keyCode == 9 && selectedSuggestItem !== false) {
						suggestSelect(selectedSuggestItem);
					}
					suggestContainer.hide();
					suggestHasFocus = false;
					$(this).focus();
					if(evt.keyCode == 13) {
						return false;
					}
				}
				else {
				  tokenizer.html(val + "___");
  				var newWidth = tokenizer.width();
  				if(newWidth > maxWidth)	newWidth = maxWidth;
  				if(newWidth < minWidth) newWidth = minWidth;
  				$(this).css('width', newWidth);
					suggestInput(val);
				}
				if(evt.keyCode == 188 || evt.keyCode == 13)	{
					evt.preventDefault();
					evt.stopPropagation();
				}
			}).keydown(function(evt) {
				var val = $(this).val().split(",").join("");
				if(evt.keyCode == 13) {
					evt.preventDefault();
					evt.stopPropagation();
					return false;
				}
				else if(evt.keyCode == 9) {
					checkInput(val);
					if(selectedSuggestItem !== false) 	suggestSelect(selectedSuggestItem);
					$(this).blur();
					suggestContainer.hide();
				}
				else if(evt.keyCode == 38) {
					evt.preventDefault();
					suggestPrev();
				}
				else if(evt.keyCode == 40) {
					evt.preventDefault();
					suggestNext();
				}
				else if(evt.keyCode == 27) {
				  $(this).blur();
          $(this).focus();
				}
			})
			.blur(function() {
				var val = $(this).val().split(",").join("");
				checkInput(val);
				if(selectedSuggestItem !== false) {
					suggestSelect(selectedSuggestItem);
				}
        
				$(this).val('').css('width', minWidth);
				$(this).parent().removeClass('focus');
				
				if(!suggestHasFocus) {
					suggestContainer.hide();
				}
        suggestHasFocus = false;
			})
			.focus(function() {
				$(this).parent().addClass('focus');
				suggestHasFocus = true;
				suggestInput($(this).val());
			});
			recipientInput.parent().mouseover(function() {;
				suggestHasFocus = true;
			}).mouseout(function() {
				suggestHasFocus = false;
			});
			
			var recipientBox = recipientInput.parent();
			recipientBox.click(function() {
				var recipients = _ref.getRecipients();
				if((!recipients || recipients.length < 6) && !recipientInput.is('.reply'))	recipientInput.val('').css('width',24).show().focus();
			});
			
			if(preSelectedRecipients) {
			  $.each(preSelectedRecipients, function(i,v) {
			    addRecipient(v);
			  });
			}
						
			function checkInput(val) {
				var filter = filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
				if(filter.test(val)) {
					addMailRecipient(val);
					return true;
				}
				return false;
			}
			function suggestInput(val) {
				val = $.trim(val);
				var currentRecipients = $('#recipients').val();
				if(!currentRecipients)  currentRecipients = "";
					
				if(val == lastVal && val != "") return 0;
				
				var results = [];
				lastVal = val;
				suggestContainer.children('.notice').hide();
				suggestContainer.children('ul').empty();
				suggestItems = [];
				selectedSuggestItem = false;
				if(val == "") {
					suggestContainer.show().children('.empty').show();
				}
				else {
					var searchFor = val.split(" ");
					$.each(searchFor, function(i, needle) {
						$.each(friends, function(l, v) {
							var haystack = (v.username + v.name).toLowerCase();
							if(haystack.indexOf(needle.toLowerCase()) >= 0) {
								if(results.indexOf(v) == -1 && currentRecipients.indexOf(v.id) == -1)
									results.push(v);
							}
						});
					});
					if(results.length >= 1) {
						$.each(results, function(i, v) {
							var item = buildListItem(v, i);
							suggestContainer.children('ul').append(item);
						});
					}
					else {
						suggestContainer.children('.email').show();
					}
				}
				suggestContainer.show();
				return results.length;
			}
			function suggestNext() {
				if(selectedSuggestItem !== false && !isNaN(selectedSuggestItem))	suggestHighlight(selectedSuggestItem + 1);
				else 															suggestHighlight(0);
			}
			function suggestPrev() {
				if(selectedSuggestItem!== false)	suggestHighlight(selectedSuggestItem - 1);
				else 															suggestHighlight(0);
			}
			function suggestHighlight(index) {
				if(index < 0) 										index = suggestItems.length - 1;
				if(index >= suggestItems.length) 	index = 0;
				var item = suggestItems[index];
				if(item && item.element) {
					suggestContainer.children('ul').children().removeClass('hover');
					item.element.addClass('hover');
					selectedSuggestItem = index;
				}
			}
			function suggestSelect(index) {
				var item = suggestItems[index];
				if(item && item.data)
					addRecipient(item.data);
			}
			function buildListItem(data, itemNum) {
				var _ref = this;
				var listItem = $('<li class="clearAfter"></li>');
				suggestItems.push({data: data, element: listItem});

				listItem.append('<img src="'+data.image+'" />').append('<div>'+data.name+'<br /><span>'+data.username+'</span></div>');
				listItem.attr('id','userSuggest_'+itemNum)
				.mouseover(function(event) {
					suggestContainer.children('ul').children().removeClass('hover');
					$(this).addClass('hover');
					suggestHasFocus = true;
					selectedSuggestItem = i;
				})
				.mouseout(function(event) {
					$(this).removeClass('hover');
					suggestHasFocus = false;
				})
				.click(function(event) {
					suggestSelect(itemNum);
					suggestContainer.hide();
					$(this).removeClass('hover');
					recipientInput.val('').focus();
					suggestHasFocus = false;
				});
				return listItem;
			}
			function addRecipient(data) {
				var currentRecipients = $('#recipients').val();
				if(!currentRecipients || currentRecipients.indexOf(data.id) == -1) {
					var item = $('<li>'+data.username+'</li>');
					item.click(function() {
						$(this).remove();
						$('#recipients').children('option[value='+data.id+']').removeAttr('selected');
					});
					$('#recipient_input').siblings('ul').append(item);
					$('#recipients').selectOptions(data.id);
				}
			}
			function addMailRecipient(email) {
				var currentRecipients = $('#recipients_mail').val();
				if(!currentRecipients || currentRecipients.indexOf(email) == -1) {
					var item = $('<li>'+email+'</li>');
					item.click(function() {
						$(this).remove();
						$('#recipients_mail').removeOption(email);
					});
					$('#recipient_input').siblings('ul').append(item);
					$('#recipients_mail').addOption(email, email);	
				}
			}
    },
		getRecipients: function() {
			var recipients = 			$('#recipients').val();
			var recipientsMail = 	$('#recipients_mail').val();
	
			var recipientsTotal = [];
			if(!recipients && !recipientsMail)	recipientsTotal = false;
			else {
				if(recipients)			recipientsTotal.push(recipients);
				if(recipientsMail)	recipientsTotal.push(recipientsMail);
			}
			return recipientsTotal;
		},
    sendMessage: function(form) {
      if(!form || form.length < 1)   return;
      
      var subject = $('#message_subject').val();
      var message = $('#message_content').val();
      var recipients = this.getRecipients();
      
      var status = form.find('.status');
      status.hide().children().hide();
			if(!recipients || recipients.length < 1) {
				status.show().children('.noRecipients').show();
        return;
			}
      if(subject == "") {
        status.show().children('.emptySubject').show();
        return;
      }
      if(message == "") {
        status.show().children('.emptyMessage').show();
        return;
      }
 			
      var url = form.attr('action');
      var method = form.attr('method');
      var sData = form.serialize();

      form.find('.loading').show();
      form.find('.button').hide();
      response = false;
      
      $.ajax({
			  type:       method,
			  url:        url,
			  data:       sData,
			  dataType:   "script",
			  success: function(data) {
			    if(response) {
			      $('#newMessage').remove();
			    }
			    else {
            form.find('.button').show();
    			  form.find('.loading').hide();
    			  status.children('.fail').show();
			    }
			    response = false;
			  },
			  error: function(error) {
          form.find('.button').show();
  			  form.find('.loading').hide();
  			  status.children('.fail').show();
  			  response = false;
			  }
			});
    },
    init: function() {
      var messages = $('#messages').children();
      var _ref = this;
      
      messages.each(function() {
        var message = $(this);
        
        message.children('.message').click(function() {
          if(!message.hasClass('open'))
            message.addClass('open');
            
          if(message.hasClass('unread')) {
            var url = message.children('.actions').children('.markRead').removeAttr('onclick').attr('href');
            if(!url || url == "")  return;
            
            var sData = {"_method": "put"};
            $.ajax({
              url:    url,
              data:   sData,
              type:   "PUT",
              success: function(data) {},
              error: function(error) {}
            });
            message.removeClass('unread');
          }
        });

        message.children('.actions').children('.close').click(function(e) {
          message.removeClass('open');
        });
        
        message.children('.actions').children('.delete').removeAttr('onclick');
        message.children('.actions').children('.delete').click(function(e) {
          e.preventDefault();
          e.stopPropagation();
          
          var url = $(this).attr('href');
          if(!url || url == "")  return false;
          
          var deleteButton = $(this);
          deleteButton.hide();
          deleteButton.parent().children('.loading').show();
          message.addClass('deleting');
          
          var sData = {"_method": "delete"};
          $.ajax({
            url:    url,
            data:   sData,
            type:   "DELETE",
            success: function(data) {
              message.animate({opacity: 'hide', height: 'hide'}, 300, function() {
                message.remove();
                _ref.zebra();                
              });
            },
            error: function(error) {
              deleteButton.show();
              deleteButton.parent().children('.loading').hide();
              message.removeClass('deleting');
            }
          });
          return false;
        });
        
        var replyForm = message.children('.reply').children('form');
        disableFormSubmit(replyForm);
        
        replyForm.children('.send').click(function() {
          var textarea = replyForm.find('textarea');
          if(textarea.val() == "") {
            textarea.focus();
            return false;
          }
          
          var button = replyForm.children('.button');
          var loading = replyForm.children('.loading');
          var status = replyForm.parent().children('.status');
          
          button.hide();
          loading.show();
          status.hide().children().hide();
          
          var url =     replyForm.attr('action');
          var method =  "post";
          var sData =   replyForm.serialize();
      		response = false;
          
          $.ajax({
    			  type:       method,
    			  url:        url,
    			  data:       sData,
    			  dataType:   "script",
    			  success: function(data) {
    			    if(response) {
    			      replyForm.remove();
    			      status.show().children('.reply_sent').show();
    			    }
    			    else {  			  
                button.show();
        			  loading.hide();
        			  status.show().children('.fail').show();
    			    }
      				response = false;
    			  },
    			  error: function(error) {
              button.show();
      			  loading.hide();
      			  status.show().children('.fail').show();
      				response = false;
    			  }
    			});
        });
      });
    },
    zebra: function() {
      var messages = $('#messages').children();
      var i = 0;
      messages.each(function() {
        $(this).removeClass('zebra');
        if(i%2) $(this).addClass('zebra');
        i++;
      });
    }
  });

/**
 * @author pr
 */
	var Simfy_Tags = new Class({
		initialize: function(options) {
			this._Core = options.core;
		},
		init: function(tags) {
			this.processTags(tags, $('#editTags .middle .content'));
		},
		processTags: function(ownTags, content) {
			var _ref = this;
      this.saving = false;
			this.form = content.children('form');
			this.form.children('#tags').remove();
      disableFormSubmit(this.form);
			
			var tagBox = new Simfy_ItemBox({
				core: 			this._Core,
				itemBox: 		content.children('form').children('.tagBox').children('.input').children('.container'),
				items: 			ownTags,
				cleanUp:    true,
				itemCleanName:	"tagClean"
			});

			this.tb = tagBox;
						
			if(this.form.children('.popTagsAll, .popTagsOwn').children('span').length >= 1) {
			  this.form.children('.popTagsAll, .popTagsOwn').children('span').click(function() {
			    _ref.tb.addItem($(this).text());
			  });
			}
			
			$('#saveTagsButton').removeAttr('onclick').click(function() {
			  _ref.saveTags();
			});
		},
		saveTags: function() {
		  var _ref = this;
		  
		  
		  if(!this.saving) {
		    this.saving = true;
        this.tb.checkInput();
  		  this.form.children('.loading').show();
        this.form.children('.cancel').hide();
  			this.form.children('.button').hide();
  			var url = this.form.attr('action');
  			var sData = this.form.serialize();
  			var tags = this.tb.getItemsString();
  			sData += "&tags="+tags;
  			response = false;

  			$.ajax({
  			  type:   "PUT",
  			  url:    url,
  			  data:   sData,
  			  dataType: "script",
  			  success: function(data) {
  		      $('#editTags').remove();
		        _ref.saving = false;
  			    response = false;
  			  },
  			  error: function() {
    			  _ref.form.children('.loading').hide();
            _ref.form.children('.cancel').show();
    				_ref.form.children('.button').show();
		        _ref.saving = false;
  			    response = false;
  			  }
  			});
  		}
		}
	});

/**
 * @author pr
 */
	var Simfy_ItemBox = new Class({
		initialize: function(options) {
			this._Core = 			options.core;
			this.itemBox = 			options.itemBox;
			this.tokenizer = 		options.itemBox.children('.tokenizer');
			this.itemCleanName = 	options.itemCleanName;
			this.items = 		[];
			this.maxLength = 	40;
			this.minWidth = 	60;
			this.maxWidth = 	220;
			this.cleanUp =    options.cleanUp;
			
			if(this.cleanUp)  this.itemBox.children('ul').children().remove();
			
			this.initItemBox(options.items);
		},
		initItemBox: function(items) {
			var _ref = this;
			
			this.itemBox.click(function() {
				$(this).children('input').focus();
			});
			this.itemBox.children('input').attr('maxlength',this.maxLength).css('width', _ref.minWidth).keydown(function(evt) {
				var val = $(this).val().replace(",", "");
				if (evt.keyCode == 188) {
					evt.preventDefault();
					$(this).val('').css('width',_ref.minWidth);
					_ref.addItem(val);
				}
				else {
					_ref.tokenizer.html(val + "___");
  				var newWidth = _ref.tokenizer.width();
  				if(newWidth > _ref.maxWidth)	newWidth = _ref.maxWidth;
  				if(newWidth < _ref.minWidth) newWidth = _ref.minWidth;
  				$(this).css('width', newWidth);
				}
			}).focus();
			
			if(items && items.length >= 1) {
				items.each(function(value) {
					//if (value[_ref.itemCleanName]) {
					_ref.addItem(value);
					//}
				});
			}
		},
		addItem: function(item) {
			var _ref = this;
			if (this.items.indexOf(item) == -1) {
				var newItem = $('<li>' + item + '</li>');
				newItem.click(function(){
					_ref.removeItem( $(this), item);
				});
				this.items.push(item);
				this.itemBox.children('ul').append(newItem);
				return true;
			}
			return false;
		},
		removeItem: function(element, item) {
			var index = this.items.indexOf(item);
			if(index >= 0) {
				this.items.splice(index, 1);
				element.remove();
				return true;
			}
			return false;
		},
		checkInput: function() {
			var val = this.itemBox.children('input').val();
			if(val != "") {
				this.addItem(val);
				this.itemBox.children('input').val('');
			}
		},
		getItems: function() {
			return this.items;
		},
		getItemsString: function(encode) {
			if(this.items.length >= 1) {
				var itemString = "";
				this.items.each(function(value) {
					if(encode)
						itemString += encodeURIComponent(value) +",";
					else 
						itemString += value +",";
				});
				return itemString.substr(0, itemString.length-1);
			}
			return "";
		}
	});

var Simfy_Settings = new Class({
  initialize: function(options) {
    this._Core = options.core;
  },
  initSettings: function() {
    /*var settings = $('#settingsUser');
    var _ref = this;
    
    settings.children('ul').children('li').children('.settings').children('form').each(function() {
      _ref.initForm($(this));
    });*/
  },
  initForm: function(form) {
    /*var _ref =        this;
    var saveBar =     form.children('.saveBar');
    var saveButton =  saveBar.children('.button.save');
    
    saveButton.click(function(evt) {
      _ref.saveSetting(form);
    });*/
  },
  saveSetting: function(form) {
    if(!form || form.length < 1)  return;
    
    form.find('.button.save').hide();
    form.find('.loading').show();
    
    return true;
  },
  initUseVoucher: function(form) {
    if(!form || form.length < 1)  return;
    
    var _ref = this;
    var button = form.children('.button');
    
	  button.removeAttr('onclick').click(function() {
		  _ref.useVoucher(form);
		});
		$('#voucher_code').keydown(function(evt) {
		  if(evt.keyCode == 13) {
		    _ref.useVoucher(form);
		  }
		});
		
		disableFormSubmit(form);
  },
  useVoucher: function(form) {
    if(!form || form.length < 1)  return;

    var voucherCode = $('#voucher_code').val();
    var status = form.children('.status');
    var button = form.children('.button');
    var loading = form.children('.loading');
    var info = form.children('.info');
    var blockLeft = $('#account_infos').parent();

    status.hide().children().hide();
    $('#voucher_code').removeClass('error');
    
    if(voucherCode == "" || voucherCode.length != 8) {
      status.show().children('.invalid').show();
      $('#voucher_code').addClass('error').focus();
      return;
    }
    
    button.hide();
    loading.show();
    
    var sData =   form.serialize();
    var url =     form.attr('action');
    var method =  form.attr('method');
    
    $.ajax({
      url:      url,
      data:     sData,
      type:     method,
      dataType: "text",
      success: function(data) {
        var response = $.trim(data);
        if(data == "false") {
          status.show().children('.invalid').show();
          $('#voucher_code').addClass('error').focus();
          button.show();
          loading.hide();
        }
        else {
          loading.hide();
          blockLeft.hide();
          $('#delete_account').hide();
          info.hide();
          $('#voucher_code').parent().hide();
          status.show().children('.valid').empty().append(data).show();
        }
      },
      error: function(error) {
        status.show().children('.failed').show();
        $('#voucher_code').addClass('error').focus();
        button.show();
        loading.hide();
      }
    });
  },
  initPicUpload: function(uploadURL) {
		var uploadButton = $('#uploadUserPicButton');
		
		var settings = {
			// SWF UPLOAD 
			flash_url: 				  		  "/javascripts/simfy/misc/swfupload.swf",
			upload_url: 						  uploadURL,
			post_params: {
				"swf_upload":           true
			},
			file_size_limit: 		  	  "1 MB",
			file_types: 						  "*.jpg;*.png",
			file_types_description: 	"JPGs",
			file_upload_limit: 		  	1,
			file_queue_limit: 				1,
			file_post_name: 					"user_photo[asset]",
			debug: 								    false,

			// Button settings
			button_placeholder_id: 	  "uploadUserPicSWF",
			button_width: 						150,
			button_height: 						25,
			button_window_mode: 			SWFUpload.WINDOW_MODE.TRANSPARENT,
			button_cursor: 						SWFUpload.CURSOR.HAND,

			file_queued_handler: 			  	  fileQueued,
			file_queue_error_handler: 			fileQueueError,
			file_dialog_complete_handler: 	fileDialogComplete,
			upload_start_handler: 				  uploadStart,
			upload_progress_handler: 		  	uploadProgress,
			upload_error_handler: 				  uploadError,
			upload_success_handler: 			  uploadSuccess,
			upload_complete_handler: 			  uploadComplete,
			
			swfupload_pre_load_handler: 		swfUploadPreLoad,
			swfupload_load_failed_handler:  swfUploadLoadFailed
		};
		swfu = new SWFUpload(settings);
		swfu._ref = this;
		
		function fileQueued(file) {
			$.log('queued');
			swfu.startUpload();
			uploadButton.addClass('uploading');
		}
		function fileQueueError(file, errorCode, message) {
			$.log('queueError');
			if(errorCode == -110) {
				alert($.trim(uploadButton.children('.status').children('.filesizeError').text()));
			}
		}
		function fileDialogComplete(numFilesSelected, numFilesQueued) {
			$.log('fileDialogComplete');
		}
		function uploadStart(file) {
			uploadButton.addClass('uploading');
			uploadButton.children('.holder').children().attr('width','1').attr('height','1');
		}
		function uploadProgress(file, bytesLoaded, bytesTotal) {
			var percent = Math.ceil(bytesLoaded / bytesTotal * 100);
			$.log('uploadProgress: ' + bytesLoaded+"/"+bytesTotal+" => "+percent);
			if (percent < 100) {
				uploadButton.children('.label').empty().append(percent + " %");
			}
			else {
				uploadButton.children('.label').empty().append($.trim(uploadButton.children('.status').children('.pleaseWait').text()));
			}
		}
		function uploadSuccess(file, serverData) {
			$.log('uploadSuccess');
			$.log(file);
			$.log(serverData);
			try {
				var data = serverData.split(";");
				if(data[0] == "true") {
					var now = new Date();
					//$('#userPic').attr('src', data[1] + '?' + now.getTime());
					uploadButton.hide();
					$('#userPic').fadeOut(500, function() {
					  uploadButton.parent().siblings('.uploadComplete').fadeIn(500);
  					uploadButton.parent().hide();
					});
					/*this._ref._Core.SM({
						message: $.trim(uploadButton.children('.status').children('.success').text())
					});*/
				}
				else {
					uploadError(file, serverData);
				}
			}
			catch(e) {
				$.log(e);
			}
		}
		function uploadError(file, errorCode, message) {
			$.log('uploadError');

			uploadButton.removeClass('uploading');
			uploadButton.children('.holder').children().removeAttr('width').removeAttr('height');
			uploadButton.children('.label').empty().append($.trim(uploadButton.children('.status').children('.changeImage').text()));
			this._ref._Core.SM({
				message: $.trim(uploadButton.children('.status').children('.fail').text())
			});
		}
		function uploadComplete(file) {
			$.log('uploadComplete');
		}
		function swfUploadPreLoad() {
			$.log('swfUploadPreLoad');
		}
		function swfUploadLoadFailed() {
			$.log('swfUploadLoadFailed');
		}
	}
});

/**
 * @author pr
 */

   var Simfy_Requests = new Class({
    initialize: function() {
      this.requests_open = [];
    },
    checkOpenRequests: function() {
      var _ref = this;
  		if(this.requests_open.length >= 1) {
  			this.requests_open.each(function(value, index) {
  				if(value && value.responseText == "") {
  					_ref.killRequest(value);
  					_ref.requests_open.splice(index,1);
  				}
  			});
  		}
  	},
  	addRequest: function(request) {
  	  this.requests_open.push(request);
  	},
  	killPendingRequests: function() {
  	  var _ref = this;
  		clearTimeout(this.options.timeout);
  		if(this.requests_open.length >= 1) {
  			this.requests_open.each(function(value,index) {
  				_ref.killRequest(value);
  				_ref.requests_open.splice(index,1);
  			});
  		}
  	},
  	killRequest: function(xhr) {
  	  try {
    		xhr.abort();
    	}
    	catch(e) {}
  	}
  });

var Simfy_Friends = new Class({
  initialize: function(core) {
    this._Core = core;    
  },
  initAddFriendOverlay: function() {
    var _ref = this;
    
    var form = $('#new_friendship_request');
    disableFormSubmit(form);
    var button = $('#sendFriendRequest');
    button.removeAttr('onclick');
    
    button.click(function() {
      _ref.sendFriendRequest(form);
    });
  },
  sendFriendRequest: function(form) {
    if(!form || form.length < 1)  return false;
    
    var friend_id = $('#friendship_request_friend_id').val();
    
    var url =   form.attr('action');
		var method = form.attr('method');
		var sData = form.serialize();
		
		form.find('.button').hide();
		form.find('.cancel').hide();
		form.find('.loading').show();
		response = false;

		$.ajax({
		  type:     method,
		  url:      url,
		  data:     sData,
		  dataType: "script",
		  success: function(data) {
	      if(response) {
	        $('#addFriend').remove();
	        $('#request_friendship_request_link').parent().remove();
	      }
	      else {
      		form.find('.loading').hide();
      		form.find('.button').show();
					form.find('.cancel').show();
	      }
	      response = false;
        $('#friend_invite_' + friend_id).removeClass('friendship_possible').addClass('disabled').fadeTo(500, 0.5);
		  },
		  error: function(error) {
    		form.find('.loading').hide();
    		form.find('.button').show();
				form.find('.cancel').show();
				response = false;
		  }
		});
  },
	initCancelFriendshipOverlay: function() {
		var _ref = this;
		
		var form = $('#cancel_friendship_form');
		disableFormSubmit(form);
		var button = form.children('.button');
		button.removeAttr('onclick');
		
		button.click(function() {
			_ref.cancelFriendship(form);
		});
	},
	cancelFriendship: function(form) {
    if(!form || form.length < 1)  return false;

    var url =     form.attr('action');
		var method =  form.attr('method');
		var sData =   form.serialize();
    
    form.children('.loading').show();
    form.children('.button').hide();
		form.children('.cancel').hide();

		$.ajax({
		  type:     method,
		  url:      url,
		  data:     sData,
		  dataType: "text",
		  success: function(data) {
	      if($.trim(data) == "true") {
          $('#deleteFriend').remove();
          $('#cancel_friendship_request_link').parent().remove();
        }
        else {
          form.children('.loading').hide();
          form.children('.button').show();
					form.children('.cancel').hide();
        }
		  },
		  error: function(error) {
        form.children('.loading').hide();
        form.children('.button').show();
				form.children('.cancel').hide();
		  }
		});
	},
	initCancelPendingFriendship: function(form) {
		if(!form || form.length < 1)  return false;

		var _ref = this;
		disableFormSubmit(form);
		var button = form.children('.button');
		button.removeAttr('onclick');

		button.click(function() {
		  _ref.cancelPendingFriendship(form);
		});
	},
	cancelPendingFriendship: function(form) {
    if(!form || form.length < 1)  return false;

    var url =     form.attr('action');
		var method =  form.attr('method');
		var sData =   form.serialize();
		
		form.parent().children('.loading').show();
		form.parent().children('form').hide();

		$.ajax({
		  type:     method,
		  url:      url,
		  data:     sData,
		  dataType: "text",
		  success: function(data) {
	      if($.trim(data) == "true") {
			    form.parent().children().hide();
			    form.parent().parent().children('.info').children('.user').hide();
			    form.parent().parent().find('.status').show().children('.rejected').show();
        }
        else {
					form.parent().children('.loading').hide();
					form.parent().children('form').show();
        }
		  },
		  error: function(error) {
				form.parent().children('.loading').hide();
				form.parent().children('form').show();
		  }
		});
	},
	initAcceptFriendshipForm: function(form) {
		if(!form || form.length < 1)  return false;
		
		var _ref = this;
		disableFormSubmit(form);
		var button = form.children('.button');
		button.removeAttr('onclick');
		
		button.click(function() {
		  _ref.acceptFriendship(form);
		});
	},
	acceptFriendship: function(form) {
		if(!form || form.length < 1)  return false;

    var url =     form.attr('action');
		var method =  form.attr('method');
		var sData =   form.serialize();
		
		form.parent().children('.loading').show();
		form.parent().children('form').hide();

		$.ajax({
		  type:     method,
		  url:      url,
		  data:     sData,
		  dataType: "text",
		  success: function(data) {
	  		if($.trim(data) == "true") {
			    form.parent().children().hide();
			    form.parent().parent().children('.info').children('.user').hide();
			    form.parent().parent().find('.status').show().children('.accepted').show();
		    }
		    else {
					form.parent().children('.loading').hide();
					form.parent().children('form').show();
		    }
		  },
		  error: function(error) {
				form.parent().children('.loading').hide();
				form.parent().children('form').show();
		  }
		});
	},
	initRejectFriendshipForm: function(form) {
		if(!form || form.length < 1)  return false;

		var _ref = this;
		disableFormSubmit(form);
		var button = form.children('.button');
		button.removeAttr('onclick');
		
		button.click(function() {
		  _ref.rejectFriendship(form);
		});
	},
	rejectFriendship: function(form) {
		if(!form || form.length < 1)  return false;
		
    var url =     form.attr('action');
		var method =  form.attr('method');
		var sData =   form.serialize();
    
		form.parent().children('.loading').show();
		form.parent().children('form').hide();
    
		$.ajax({
		  type:     method,
		  url:      url,
		  data:     sData,
		  dataType: "text",
		  success: function(data) {
	  		if($.trim(data) == "true") {
			    form.parent().children().hide();
			    form.parent().parent().children('.info').children('.user').hide();
			    form.parent().parent().find('.status').show().children('.rejected').show();
	  		}
	  		else {
					form.parent().children('.loading').hide();
					form.parent().children('form').show();  		  
	  		}
		  },
		  error: function(error) {
				form.parent().children('.loading').hide();
				form.parent().children('form').show();
		  }
		});
	}
});


    var Simfy_User = new Class({
      initialize: function(options) {
        this._Core = options.core;

        this.initialStatusValue = null;
      },
      initUpdateStatusForm: function(form) {
        var _ref = this;
        
        $('#user_status_message_container').find('.edit').click(function() {
          $('#user_status_message_form').show(); 
          $('#user_status_message_container').hide(); 
          $('#user_status_message').focus().select(); 
          $('#user_status').siblings('.onlinestatus').hide();
        });
        
  			disableFormSubmit(form);
  			
  			var cancel = form.find('.cancel');
  			cancel.click(function() {
          _ref.cancelStatusUpdate();
  			});
        
        var textarea = form.find('textarea');
        this.initialStatusValue = textarea.val();
        textarea.keyup(function() {
   			  _ref.checkStatusLength(form);
   			});
        _ref.checkStatusLength(form);
      },
      sendStatusUpdate: function(form) {
        var _ref = this;
        if(!form || form.length < 1) return false;
        
        var textarea = form.find('textarea');
			  textarea.val($.trim(textarea.val()));
        if(textarea.val() === this.initialStatusValue) {
          _ref.cancelStatusUpdate();
          return;
        }
        
        var status = this.checkStatusLength(form);
        
    		if(status || status == "") {
    		  var button = form.find('.button');
    		  var loading = form.find('.loading')
    		  var cancel = form.find('.cancel');
    			var url = form.attr('action');
  	      var method = form.attr('method');
  	      var sData = form.serialize();
  	      this.initialStatusValue = textarea.val();
  	      
  	      button.hide();
  	      cancel.hide();
  	      loading.show();
  	        	      
          $.ajax({
					  type:       method,
					  url:        url,
					  data:       sData,
					  dataType:   "script",
					  success: function(data) {
					    
					  },
					  error: function(error) {
      	      button.show();
      	      cancel.show();
      	      loading.hide();
					  }
					});
    		}
      },
      cancelStatusUpdate: function() {
        $('#user_status_message_container').show();
        $('#user_status_message_form').hide();
        $('#user_status').siblings('.onlinestatus').show();
      },
      checkStatusLength: function(form) {
  			if(!form || form.length < 1)	return false;
  			
  			var charLimit = 140;

  			var textarea = 	form.find('textarea');
  			var charCount =	form.find('.charCount');
  			var status = textarea.val();
        
  			charCount.empty().append(charLimit - status.length);
  			if(status.length > charLimit) {
  				charCount.addClass('error');
  				return false;
  			}
  			else {
  				charCount.removeClass('error');
  				return status;
  			}
  		}
    });

  var Simfy_Playlists = new Class({
    initialize: function(options) {
      var _ref = this;
      this._Core = options.core;
      
    },
    initRenamePlaylistOverlay: function(playlistID) {
      var _ref = this;
      
      var form = $('#rename_playlist_form');
      disableFormSubmit(form);
      
      var button = form.find('.button.rename');
      button.click(function() {
        _ref.doRenamePlaylist(form, playlistID);
      }).removeAttr('onclick');
      
      $('#playlist_title').focus().select();
    },
    doRenamePlaylist: function(form, playlistID) {
      if(!form || form.length < 1) return;
      
      var _ref = this;
      
      var playlistTitle = $('#playlist_title').val();
      
      if(playlistTitle == "") {
        form.find('.status').children('.empty').show();
        $('#playlist_title').focus();
      }
      else {
        form.find('.status').children().hide();
        var url =   form.attr('action');
  			var method = form.attr('method');
  			var sData = form.serialize();
    
        form.find('.button').hide();
        form.find('.cancel').hide();
        form.find('.loading').show();
        response = false;
      
  			$.ajax({
  			  type:     method,
  			  url:      url,
  			  data:     sData,
  			  dataType: "script",
  			  success: function(data) {
            if(response) {
  		        closeOverlay($('#renamePlaylist'));
							if(playlistID) {
								var titleElement = $('#playlist_title_' + playlistID);
								if(titleElement && titleElement.length > 0) {
									titleElement.effect('clip', {}, 250, function() {
										$(this).empty().append(playlistTitle).fadeIn(250);
									});
								}
							}
  		      }
  		      else {
  		        form.find('.status').children().hide();
              form.find('.status').show().children('.fail').show();
              form.find('.button').show();
              form.find('.cancel').show();
              form.find('.loading').hide();
  		      }
            response = false;
  			  },
  			  error: function(error) {
		        form.find('.status').children().hide();
            form.find('.status').show().children('.fail').show();
            form.find('.button').show();
            form.find('.cancel').show();
            form.find('.loading').hide();
            response = false;
  			  }
  			});
  		}
    },
    initDeletePlaylistOverlay: function(playlistID) {
      var _ref = this;
      
      var form = $('#delete_playlist_form');
      disableFormSubmit(form);
      
      var button = form.find('.button');
      button.click(function() {
        _ref.doDeletePlaylist(form, playlistID);
      }).removeAttr('onclick');
    },
    doDeletePlaylist: function(form, playlistID) {
      if(!form || form.length < 1) return; 
      
      var _ref = this;
      
      form.find('.status').children().hide();
      var url =   form.attr('action');
			var method = form.attr('method');
			var sData = form.serialize();
  
      form.find('.button').hide();
      form.find('.cancel').hide();
      form.find('.loading').show();
      response = false;
      
			$.ajax({
			  type:     method,
			  url:      url,
			  data:     sData,
			  dataType: "script",
			  success: function(data) {
		      if(response) {
						closeOverlay($('#deletePlaylist'));
						if(playlistID) {
							var deleteElement = $('#playlist_container_' + playlistID);
							if(deleteElement && deleteElement.length > 0) {
								deleteElement.fadeOut(750, function() {
									$(this).remove();
								});
							}
						}
		      }
		      else {
		        form.find('.status').children().hide();
            form.find('.status').show().children('.fail').show();
            form.find('.button').show();
            form.find('.cancel').show();
            form.find('.loading').hide();
		      }
          response = false;
			  },
			  error: function(error) {
	        form.find('.status').children().hide();
          form.find('.status').show().children('.fail').show();
          form.find('.button').show();
          form.find('.cancel').show();
          form.find('.loading').hide();
          response = false;
			  }
			});
    }
  });

/*
 * @author pr
 */

	var Simfy_Twitter = new Class({
		initialize: function(options) {
			this._Core = options.core;
			this.charLimit = 140;
		},
		prepareTweet: function(type, data) {
		  if(type == "track" && data && data.id) {
		    showOverlay(false, "/twitter/"+data.id);
		  }
		},
		initTwitterOverlay: function(form, useAPI) {
			if(!form || form.length < 1)	return false;
			
			this.useAPI = useAPI;
			var _ref = this;
			
			disableFormSubmit(form);
			var button = $('#submitTweet');
			button.click(function() {
				_ref.sendTweet(form);
			}).removeAttr('onclick');
			
			var textarea = form.find('textarea');
			var charCount = form.find('.charCount');
			charCount.empty().append(this.charLimit);
			_ref.checkStatusLength(form);
			textarea.keyup(function() {
				_ref.checkStatusLength(form);
			});
			this.checkStatusLength(form);
		},
		sendTweet: function(form) {
			if(!form || form.length < 1) return false;
			
			var status = this.checkStatusLength(form);
			if(status) {
				var url = form.attr('action');
	      var method = form.attr('method');
	      var sData = form.serialize();
	
				if(this.useAPI) {
		      form.find('.loading').show();
		      form.find('.button').hide();
          form.find('.cancel').hide();
				
		      $.ajax({
					  type:       method,
					  url:        url,
					  data:       sData,
					  dataType:   "script",
					  success: function(data) {
					    /*if($.trim(data) == "true") {
					      $('#tweet').remove();
					    }
					    else {  			  
		            form.find('.button').show();
		    			  form.find('.loading').hide();
		    			  status.children('.fail').show();
					    }*/
					  },
					  error: function(error) {
		          form.find('.button').show();
		          form.find('.cancel').show();
		  			  form.find('.loading').hide();
		  			  status.children('.fail').show();
					  }
					});
				}
				else {
					url = url.split("?status=")[0] + "?status=" + encodeURIComponent(status);
					window.open(url);
					$('#tweet').remove();
				}
			}
		},
		checkStatusLength: function(form) {
			if(!form || form.length < 1)	return false;
			
			var textarea = 	form.find('textarea');
			var charCount =	form.find('.charCount');
			var button = 	form.find('.button');
			var status = textarea.val();
			
			charCount.empty().append(this.charLimit - status.length);
			if(status.length > this.charLimit) {
				charCount.addClass('error');
				return false;
			}
			else {
				textarea.removeClass('error');
				charCount.removeClass('error');
				return status;
			}
		}
	});

/*
 * @author pr
 */

  var Simfy_Facebook = new Class({
    initialize: function(options) {
      this._Core = options.core;
      this.charLimit = 140;
    },
    prepareFacebook: function(type, data) {
      if(type == "track" && data && data.id) {
        showOverlay(false, "/facebook/share?id="+data.id+"&type="+type);
      }
    },
    initFacebookOverlay: function(form) {
      if(!form || form.length < 1)  return false;
      
      var _ref = this;
      disableFormSubmit(form);
      var button = $('#submitToFacebook');
      button.click(function() {
        _ref.sendToFacebook(form);
      }).removeAttr('onclick');
    },
    sendToFacebook: function(form) {
      if(!form || form.length < 1) return false;
      
      var _ref = this;
      var url = form.attr('action');
      var method = form.attr('method');
      var sData = form.serialize();
      
      var message = form.find('textarea').val();
      if(message == "") {
        form.find('textarea').focus();
        return;
      }
      
      var loading = form.find('.loading').show();
      var button = form.find('.button').hide();
      var cancel = form.find('.cancel').hide();
      
      response = false;
      
      $.ajax({
        type:       method,
        url:        url,
        data:       sData,
        dataType:   "script",
        success: function(data) {
          if(response) {
            $('#facebook_share').fadeOut(500, function() {
              $('#facebook_share').remove();
            })
          }
        },
        complete: function() {
          if(!response) {
            form.find('.button').show();
            form.find('.cancel').show();
            form.find('.loading').hide();
            status.children('.fail').show();
          }
          response = false;
        }
      });
    },
    initInviteFriendsOverlay: function() {
      var _ref = this;
      
      var form = $('#facebook_friends_invite_form');
      disableFormSubmit(form);
      var button = $('#inviteFacebook');
      button.click(function() {
        _ref.sendFacebookInvites(form);
      }).removeAttr('onclick');
      
      var friendsOnFacebook = $('#facebook_invite_friends').find('.friends_container.facebook').children('ul').children('li');
      var friendsOnSimfy = $('#facebook_invite_friends').find('.friends_container.simfy');  
      
      if(friendsOnFacebook.length > 0) {
        friendsOnFacebook.each(function() {
          $(this).click(function(e) {
            if($(this).hasClass('disabled')) return false;
            
            if($(this).hasClass('selected')) {
              $(this).removeClass('selected');
            }
            else {
              $(this).addClass('selected');
            }
            $(this).children('input').click(function(e) {
              e.stopImmediatePropagation();
            }).trigger('click');
          });
        });
      }
    },
    sendFacebookInvites: function(form) {
      var checked = form.find('input:checkbox:checked');
      if(checked.length < 1) {
        return;
      }
      
      var _ref = this;
      var url = form.attr('action');
      var method = form.attr('method');
      var sData = form.serialize();
      
      var button = form.find('.button');
      var cancel = form.find('.cancel');
      var loading = form.find('.loading');
      
      button.hide();
      cancel.hide();
      loading.show();
      form.find('.notice').hide();
      response = false;
      
      $.ajax({
        type:       method,
        url:        url,
        data:       sData,
        dataType:   "script",
        success: function(data) {
          if(response) {
            form.find('.selected').removeClass('selected').addClass('disabled').fadeTo(500, 0.5).trigger('click');
          }
        },
        error: function(error) {
          form.find('.notice').show();
        },
        complete: function() {
          button.show();
          cancel.show();
          loading.hide();
          response = false;
        }
      });
    },
    showFriendRequest: function(elem, href) {
      if(elem.hasClass('friendship_possible')) {
        showOverlay(false, href);
      }
      else {
        
      }
    }
  });

/**
 * @author pr
 */

  var Simfy_Comments = new Class({
    initialize: function(options) {
      this._Core = options.core;
    },
    initCommentBox: function(form) {
      if(!form || form.length < 1)  return;

      var _ref = this;

      disableFormSubmit(form);
      var button = form.children('.button');
      button.click(function() {
        _ref.saveComment(form);
      });

      var textarea = form.find('textarea');
			textarea.focus(function() {
				$(this).parent().parent().addClass('active');
			}).blur(function() {
				$(this).parent().parent().removeClass('active');
			});
    },
    saveComment: function(form) {
      if(!form || form.length < 1)  return;
      
      var textarea = form.find('textarea');
      var comment = $.trim(textarea.val());
      if(comment && comment.length > 0) {
        form.find('.button').hide();
        form.find('.loading').show();
        
        var url = form.attr('action');
        var method = form.attr('method');
  			var sData = form.serialize();

				textarea.parent().parent().removeClass('error');

  			$.ajax({
  			  type:   method,
  			  url:    url,
  			  data:   sData,
  			  dataType: "script",
  			  success: function(data) {
            textarea.val('');
            form.find('.button').show();
            form.find('.loading').hide();
           // $.scrollTo($('#comments'), 500, {offset: {top: -30}});
  			  },
  			  error: function() {
            form.find('.button').show();
            form.find('.loading').hide();
  			  }
  			});
      }
      else {
				textarea.parent().parent().addClass('error');
        textarea.focus();
      }
    }
  });

var AdsManager = {
  CONTAINER_WIDTH: 865,           // NOTE: if you change these constants, please also change
  CONTAINER_MARGIN: 3,            //       them in app/helpers/simfy_ads_retriever_helper.rb
  PLAYER_WIDER_THAN_CONTENT: 15,  // same here
  ELEMENTS_HOSTING_ADS: ['skyscraper_ad', 'banner_ad'],
  
  removeAds: function(){
    $.each(AdsManager.ELEMENTS_HOSTING_ADS, 
           function(index, name){
             $('#' + name).empty();
           });
    $('body').css('background', 'url(/images/simfy/core/background.png) repeat-x scroll center top #ECECEC');
    $('#content_ad').remove();
  },

  showAds: function(data){
    AdsManager.removeAds();
    $.each(data, function(index, ad){
             AdsManager.insertSkyscraper(ad);
             AdsManager.insertBanner(ad);
             AdsManager.insertWallpaper(ad);
             AdsManager.insertHockeystick(ad);
             AdsManager.insertContentAd( ad );
           });
  },

  insertSkyscraper: function(ad){
    // NOTE: any modifications made here, also need to be made in app/views/ads/_banners_right.haml
    if (ad && ad.skyscraper){
      $('#skyscraper_ad').html( $('<div/>').attr('style', ad.style).append(ad.ad_tag).append(AdsManager.adPixels(ad)) );
      AdsManager.adjustContainerAndPlayerMargin(ad.width);
    }
  },
  
  insertBanner: function(ad){
    // NOTE: any modifications made here, also need to be made in app/views/ads/_banners_top.haml
    if (ad && (ad.banner || ad.wallpaper || ad.hockeystick) ){
      $('#banner_ad').html( $('<div/>').attr('style', ad.style).append(ad.ad_tag).append(AdsManager.adPixels(ad)) );
    }
  },

  insertHockeystick: function(ad){
    // NOTE: any modifications made here, also need to be made in app/views/ads/_banners_right.haml
    if (ad && ad.hockeystick){
      $('#skyscraper_ad').html( $('<div/>').attr('style', ad.style2).append(ad.ad_tag2) );
      AdsManager.adjustContainerAndPlayerMargin(ad.width2);
    }
  },

  insertWallpaper: function(ad){
    // NOTE: any modifications made here, also need to be made in app/views/ads/_banners_top.haml
    if (ad && ad.wallpaper){
      AdsManager.setBodyCssBackground(ad.style2);
    }
  },
  
  insertContentAd: function(ad){
    // NOTE: any modifications made here, also need to be made in app/helpers/simfy_ads_retriever_helper.rb
    if (ad && ad.content){
      var $ad_div = $('<div/>').attr('id', 'content_ad').attr('style', ad.style).append(ad.ad_tag).append(AdsManager.adPixels(ad));
      $('.content_right:first').prepend( $ad_div );
    }
  },

  adPixels: function(ad){
    // NOTE: any modifications made here, also need to be made in app/helpers/simfy_ads_retriever_helper.rb
    return AdsManager.loadingPreviewAd() ? $('<span/>').css('display', 'none').html("NOTE: ad pixels not included, as this is a preview") : 
      $('<div/>').attr('style', 'position: absolute; margin-left: -3000px;')
      .append( $('<img/>').attr('src', ad.ad_pixel).attr('style' , 'width:1px; height: 1px;'))
      .append( $('<img/>').attr('src', ad.simfy_ad_pixel).attr('style' , 'width:1px; height: 1px;') );
  },
  
  adjustContainerAndPlayerMargin: function(ad_width){
      var margin = -1 * Math.round((ad_width + AdsManager.CONTAINER_WIDTH) / 2 + AdsManager.CONTAINER_MARGIN);
      $('#container').css('margin-left', "" + margin + "px");
      $('#containerPlayer').css('margin-left', "" + (margin - AdsManager.PLAYER_WIDER_THAN_CONTENT) + "px");
  },
  
  setBodyCssBackground: function(style){
    $('body').css('background', style);
  },

  previewAdId: function(){
    var match = self.location.href.match(/preview_ad_id=(\d+)/);
    return match && match.length > 1 ? match[1] : '';
  },

  loadingPreviewAd: function(){
    return self.location.href.indexOf("preview_ad_id") != -1;
  }

};




var Simfy_Voucher = new Class({
  initialize: function(options) {
    this._Core = options.core;
  },
  show: function(dontFade) {
    $('body').addClass('modal');
    if(dontFade) {
      $('#voucher_and_concert_confirmation').show();
      $('#overlay_modal').show();
    }
    else {
      $('#voucher_and_concert_confirmation').fadeIn(250);
      $('#overlay_modal').fadeIn(250);
    }
    Core.Log.logPageView("overlay/voucher");
  },
  hide: function() {
    $('#voucher_and_concert_confirmation').hide();
    $('#overlay_modal').hide();
    $('body').removeClass('modal');
  }
});
