
function closeNewsBar(){
document.getElementById('news_bar').style.display = "none";
}
function showHidden(id){
var el = document.getElementById(id);
if(el.style.display == 'block') el.style.display = 'none';
else el.style.display = 'block';
}
function onInteractField(val){
var field = document.getElementById('token');
if(val == 'Cautare') {
field.value = '';
field.style.fontStyle = 'normal';
field.style.color = '#3b444c';
}else if (val == ''){
field.value = 'Cautare';
field.style.fontStyle = 'normal';
field.style.color = '#d4d0c8';
}
}
function goSearch(token, mimetype){
if ((token == '') || (token == 'Cautare')) {
alert('Izdesh sozi yezing!');
} else {
location.href = mimetype!="" ? ("space.php?do=" + mimetype + "&search=" + token) : ("space.php?do=ring&search=" + token);
}
}
String.prototype.stripTags = function(){
return this.replace(/(<([^>]+)>)/ig,'');
}
String.prototype.escapeminus = function() {
return this.toLowerCase().replace(/[^a-zA-Z0-9]+/g, '-').replace(/^-|-$/g, '');
}
numdivs=3
IE5=NN4=NN6=false
if(document.all)IE5=true
else if(document.layers)NN4=true
else if(document.getElementById)NN6=true
function init() {
showDiv(0)
}
function showDiv( which ) {
for(i=0;i<numdivs;i++) {
if(NN4) eval("document.div"+i+".visibility='hidden'")
if(IE5) eval("document.all.div"+i+".style.visibility='hidden'")
if(NN6) eval("document.getElementById('div"+i+"').style.visibility='hidden'")
}
if(NN4) eval("document.div"+which+".visibility='visible'")
if(IE5) eval("document.all.div"+which+".style.visibility='visible'")
if(NN6) eval("document.getElementById('div"+which+"').style.visibility='visible'")
}
function toggleLayer( whichLayer )
{
var elem, vis;
if( document.getElementById ) // this is the way the standards work
elem = document.getElementById( whichLayer );
else if( document.all ) // this is the way old msie versions work
elem = document.all[whichLayer];
else if( document.layers ) // this is the way nn4 works
elem = document.layers[whichLayer];
vis = elem.style;
if(vis.display==''&&elem.offsetWidth!=undefined&&elem.offsetHeight!=undefined)
vis.display = (elem.offsetWidth!=0&&elem.offsetHeight!=0)?'block':'none';
vis.display = (vis.display==''||vis.display=='block')?'none':'block';
}
String.prototype.isEmail = function(){
var re=/^.+@.+\..{2,3}$/;
if(this.search(re)==-1)
return false;
return true;
}
String.prototype.leftTrim = function(){
var re = /\s*((\S+\s*)*)/;
return this.replace(re, "$1");
}
String.prototype.rightTrim = function(){
var re = /((\s*\S+)*)\s*/;
return this.replace(re, "$1");
}
String.prototype.addSlashes = function(){
var re = /('|")/g;
return this.replace(/\n/ig,' ').replace(re,"\\"+"$1");
}
String.prototype.trim =function(){
var re1 = /\s*((\S+\s*)*)/;
var re2 = /((\s*\S+)*)\s*/;
return this.replace(re1, "$1").replace(re2, "$2");
}
isIE = navigator.appName.indexOf('Microsoft Internet Explorer')!=-1?true:false;
function setCookie(cookieName,cookieValue,nDays) {
var today = new Date();
var expire = new Date();
if (nDays==null || nDays==0)
nDays=1;
expire.setTime(today.getTime() + 3600000*24*nDays);
document.cookie = cookieName+"="+escape(cookieValue)+ ";expires="+expire.toGMTString();
}
function getCookie(cookieName) {
var theCookie=""+document.cookie;
var ind=theCookie.indexOf(cookieName);
if (ind==-1 || cookieName=="")
return false; 
var ind1=theCookie.indexOf(';',ind);
if (ind1==-1)
ind1=theCookie.length; 
return unescape(theCookie.substring(ind+cookieName.length+1,ind1));
}
var intID = 0;
var ttID;
var animTotalFrames = 5;
var animElapsedFrames = 0;
function alphaTransition(id, speed){
ttID = id;
if(speed) animTotalFrames = speed;
animElapsedFrames = 0;
intID = setInterval("alphaAnimate()", 40);
}
function alphaAnimate(tid){
animElapsedFrames += 1;
var tt = document.getElementById(ttID).style;
if(navigator.appName.indexOf('Microsoft')!=-1){
var op = Math.round( 100 - animElapsedFrames/animTotalFrames * 100 );
tt.filter = 'alpha(opacity=' + op + ')';
}else{
var op = 1 - animElapsedFrames/animTotalFrames * 1;
tt.MozOpacity = op;
}
if(animElapsedFrames>=animTotalFrames) {
clearInterval(intID);
document.getElementById(ttID).style.display = 'none';
}
}
function preloadImages(){
var d=document;
if(d.images){
if(!d.aImages) d.aImages = new Array();
var args = preloadImages.arguments;
for(i=0; i<args.length; i++){
d.aImages[i] = new Image;
d.aImages[i].src = args[i];
}
}
}
function closeNewsBar(){
document.getElementById('news_bar').style.display = "none";
}
function MM_swapImgRestore() { //v3.0
var i,x,a = document.MM_sr; 
for(i=0; a&&i<a.length&&(x=a[i])&&x.oSrc; i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function MM_findObj(n, d) { //v4.01
var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
if(typeof deconcept == "undefined") var deconcept = new Object();
if(typeof deconcept.util == "undefined") deconcept.util = new Object();
if(typeof deconcept.SWFObjectUtil == "undefined") deconcept.SWFObjectUtil = new Object();
deconcept.SWFObject = function(swf, id, w, h, ver, c, quality, xiRedirectUrl, redirectUrl, detectKey) {
if (!document.getElementById) { return; }
this.DETECT_KEY = detectKey ? detectKey : 'detectflash';
this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY);
this.params = new Object();
this.variables = new Object();
this.attributes = new Array();
if(swf) { this.setAttribute('swf', swf); }
if(id) { this.setAttribute('id', id); }
if(w) { this.setAttribute('width', w); }
if(h) { this.setAttribute('height', h); }
if(ver) { this.setAttribute('version', new deconcept.PlayerVersion(ver.toString().split("."))); }
this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion();
if (!window.opera && document.all && this.installedVer.major > 7) {
if (!deconcept.unloadSet) {
deconcept.SWFObjectUtil.prepUnload = function() {
__flash_unloadHandler = function(){};
__flash_savedUnloadHandler = function(){};
if(!deconcept.prepUnloadSet) {
deconcept.prepUnloadSet = true;
window.attachEvent("onunload", deconcept.SWFObjectUtil.cleanupSWFs);
}
}
window.attachEvent("onbeforeunload", deconcept.SWFObjectUtil.prepUnload);
deconcept.unloadSet = true;
}
}
if(c) { this.addParam('bgcolor', c); }
var q = quality ? quality : 'high';
this.addParam('quality', q);
this.setAttribute('useExpressInstall', false);
this.setAttribute('doExpressInstall', false);
var xir = (xiRedirectUrl) ? xiRedirectUrl : window.location;
this.setAttribute('xiRedirectUrl', xir);
this.setAttribute('redirectUrl', '');
if(redirectUrl) { this.setAttribute('redirectUrl', redirectUrl); }
}
deconcept.SWFObject.prototype = {
useExpressInstall: function(path) {
this.xiSWFPath = !path ? "expressinstall.swf" : path;
this.setAttribute('useExpressInstall', true);
},
setAttribute: function(name, value){
this.attributes[name] = value;
},
getAttribute: function(name){
return this.attributes[name] || "";
},
addParam: function(name, value){
this.params[name] = value;
},
getParams: function(){
return this.params;
},
addVariable: function(name, value){
this.variables[name] = value;
},
getVariable: function(name){
return this.variables[name] || "";
},
getVariables: function(){
return this.variables;
},
getVariablePairs: function(){
var variablePairs = new Array();
var key;
var variables = this.getVariables();
for(key in variables){
variablePairs[variablePairs.length] = escape(key) +"="+ escape(variables[key]);
}
return variablePairs;
},
getSWFHTML: function() {
var swfNode = "";
if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture
if (this.getAttribute("doExpressInstall")) {
this.addVariable("MMplayerType", "PlugIn");
this.setAttribute('swf', this.xiSWFPath);
}
swfNode = '<embed type="application/x-shockwave-flash" src="'+ this.getAttribute('swf') +'" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ (this.getAttribute('style') || "") +'"';
swfNode += ' id="'+ this.getAttribute('id') +'" name="'+ this.getAttribute('id') +'" ';
var params = this.getParams();
for(var key in params){ swfNode += [key] +'="'+ params[key] +'" '; }
var pairs = this.getVariablePairs().join("&");
if (pairs.length > 0){ swfNode += 'flashvars="'+ pairs +'"'; }
swfNode += '/>';
} else { // PC IE
if (this.getAttribute("doExpressInstall")) {
this.addVariable("MMplayerType", "ActiveX");
this.setAttribute('swf', this.xiSWFPath);
}
swfNode = '<object id="'+ this.getAttribute('id') +'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ (this.getAttribute('style') || "") +'">';
swfNode += '<param name="movie" value="'+ this.getAttribute('swf') +'" />';
var params = this.getParams();
for(var key in params) {
swfNode += '<param name="'+ key +'" value="'+ params[key] +'" />';
}
var pairs = this.getVariablePairs().join("&");
if(pairs.length > 0) {swfNode += '<param name="flashvars" value="'+ pairs +'" />';}
swfNode += "</object>";
}
return swfNode;
},
write: function(elementId){
if(this.getAttribute('useExpressInstall')) {
var expressInstallReqVer = new deconcept.PlayerVersion([6,0,65]);
if (this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version'))) {
this.setAttribute('doExpressInstall', true);
this.addVariable("MMredirectURL", escape(this.getAttribute('xiRedirectUrl')));
document.title = document.title.slice(0, 47) + " - Flash Player Installation";
this.addVariable("MMdoctitle", document.title);
}
}
if(this.skipDetect || this.getAttribute('doExpressInstall') || this.installedVer.versionIsValid(this.getAttribute('version'))){
var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId;
n.innerHTML = this.getSWFHTML();
return true;
}else{
if(this.getAttribute('redirectUrl') != "") {
document.location.replace(this.getAttribute('redirectUrl'));
}
}
return false;
}
}
deconcept.SWFObjectUtil.getPlayerVersion = function(){
var PlayerVersion = new deconcept.PlayerVersion([0,0,0]);
if(navigator.plugins && navigator.mimeTypes.length){
var x = navigator.plugins["Shockwave Flash"];
if(x && x.description) {
PlayerVersion = new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));
}
}else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0){ // if Windows CE
var axo = 1;
var counter = 3;
while(axo) {
try {
counter++;
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter);
PlayerVersion = new deconcept.PlayerVersion([counter,0,0]);
} catch (e) {
axo = null;
}
}
} else { // Win IE (non mobile)
try{
var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
}catch(e){
try {
var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
PlayerVersion = new deconcept.PlayerVersion([6,0,21]);
axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code)
} catch(e) {
if (PlayerVersion.major == 6) {
return PlayerVersion;
}
}
try {
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
} catch(e) {}
}
if (axo != null) {
PlayerVersion = new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
}
}
return PlayerVersion;
}
deconcept.PlayerVersion = function(arrVersion){
this.major = arrVersion[0] != null ? parseInt(arrVersion[0]) : 0;
this.minor = arrVersion[1] != null ? parseInt(arrVersion[1]) : 0;
this.rev = arrVersion[2] != null ? parseInt(arrVersion[2]) : 0;
}
deconcept.PlayerVersion.prototype.versionIsValid = function(fv){
if(this.major < fv.major) return false;
if(this.major > fv.major) return true;
if(this.minor < fv.minor) return false;
if(this.minor > fv.minor) return true;
if(this.rev < fv.rev) return false;
return true;
}
deconcept.util = {
getRequestParameter: function(param) {
var q = document.location.search || document.location.hash;
if (param == null) { return q; }
if(q) {
var pairs = q.substring(1).split("&");
for (var i=0; i < pairs.length; i++) {
if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
return pairs[i].substring((pairs[i].indexOf("=")+1));
}
}
}
return "";
}
}
deconcept.SWFObjectUtil.cleanupSWFs = function() {
var objects = document.getElementsByTagName("OBJECT");
for (var i = objects.length - 1; i >= 0; i--) {
objects[i].style.display = 'none';
for (var x in objects[i]) {
if (typeof objects[i][x] == 'function') {
objects[i][x] = function(){};
}
}
objects[i].removeNode(true);
}
}
if (!document.getElementById && document.all) { document.getElementById = function(id) { return document.all[id]; }}
var getQueryParamValue = deconcept.util.getRequestParameter;
var FlashObject = deconcept.SWFObject; // for legacy support
var SWFObject = deconcept.SWFObject;
(function(){
if ( window.jQuery )
var _jQuery = window.jQuery;
var jQuery = window.jQuery = function( selector, context ) {
return new jQuery.prototype.init( selector, context );
};
if ( window.$ )
var _$ = window.$;
window.$ = jQuery;
var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/;
var isSimple = /^.[^:#\[\.]*$/;
jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {
selector = selector || document;
if ( selector.nodeType ) {
this[0] = selector;
this.length = 1;
return this;
} else if ( typeof selector == "string" ) {
var match = quickExpr.exec( selector );
if ( match && (match[1] || !context) ) {
if ( match[1] )
selector = jQuery.clean( [ match[1] ], context );
else {
var elem = document.getElementById( match[3] );
if ( elem )
if ( elem.id != match[3] )
return jQuery().find( selector );
else {
this[0] = elem;
this.length = 1;
return this;
}
else
selector = [];
}
} else
return new jQuery( context ).find( selector );
} else if ( jQuery.isFunction( selector ) )
return new jQuery( document )[ jQuery.fn.ready ? "ready" : "load" ]( selector );
return this.setArray(
selector.constructor == Array && selector ||
(selector.jquery || selector.length && selector != window && !selector.nodeType && selector[0] != undefined && selector[0].nodeType) && jQuery.makeArray( selector ) ||
[ selector ] );
},
jquery: "1.2.3",
size: function() {
return this.length;
},
length: 0,
get: function( num ) {
return num == undefined ?
jQuery.makeArray( this ) :
this[ num ];
},
pushStack: function( elems ) {
var ret = jQuery( elems );
ret.prevObject = this;
return ret;
},
setArray: function( elems ) {
this.length = 0;
Array.prototype.push.apply( this, elems );
return this;
},
each: function( callback, args ) {
return jQuery.each( this, callback, args );
},
index: function( elem ) {
var ret = -1;
this.each(function(i){
if ( this == elem )
ret = i;
});
return ret;
},
attr: function( name, value, type ) {
var options = name;
if ( name.constructor == String )
if ( value == undefined )
return this.length && jQuery[ type || "attr" ]( this[0], name ) || undefined;
else {
options = {};
options[ name ] = value;
}
return this.each(function(i){
for ( name in options )
jQuery.attr(
type ?
this.style :
this,
name, jQuery.prop( this, options[ name ], type, i, name )
);
});
},
css: function( key, value ) {
if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )
value = undefined;
return this.attr( key, value, "curCSS" );
},
text: function( text ) {
if ( typeof text != "object" && text != null )
return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
var ret = "";
jQuery.each( text || this, function(){
jQuery.each( this.childNodes, function(){
if ( this.nodeType != 8 )
ret += this.nodeType != 1 ?
this.nodeValue :
jQuery.fn.text( [ this ] );
});
});
return ret;
},
wrapAll: function( html ) {
if ( this[0] )
jQuery( html, this[0].ownerDocument )
.clone()
.insertBefore( this[0] )
.map(function(){
var elem = this;
while ( elem.firstChild )
elem = elem.firstChild;
return elem;
})
.append(this);
return this;
},
wrapInner: function( html ) {
return this.each(function(){
jQuery( this ).contents().wrapAll( html );
});
},
wrap: function( html ) {
return this.each(function(){
jQuery( this ).wrapAll( html );
});
},
append: function() {
return this.domManip(arguments, true, false, function(elem){
if (this.nodeType == 1)
this.appendChild( elem );
});
},
prepend: function() {
return this.domManip(arguments, true, true, function(elem){
if (this.nodeType == 1)
this.insertBefore( elem, this.firstChild );
});
},
before: function() {
return this.domManip(arguments, false, false, function(elem){
this.parentNode.insertBefore( elem, this );
});
},
after: function() {
return this.domManip(arguments, false, true, function(elem){
this.parentNode.insertBefore( elem, this.nextSibling );
});
},
end: function() {
return this.prevObject || jQuery( [] );
},
find: function( selector ) {
var elems = jQuery.map(this, function(elem){
return jQuery.find( selector, elem );
});
return this.pushStack( /[^+>] [^+>]/.test( selector ) || selector.indexOf("..") > -1 ?
jQuery.unique( elems ) :
elems );
},
clone: function( events ) {
var ret = this.map(function(){
if ( jQuery.browser.msie && !jQuery.isXMLDoc(this) ) {
var clone = this.cloneNode(true),
container = document.createElement("div");
container.appendChild(clone);
return jQuery.clean([container.innerHTML])[0];
} else
return this.cloneNode(true);
});
var clone = ret.find("*").andSelf().each(function(){
if ( this[ expando ] != undefined )
this[ expando ] = null;
});
if ( events === true )
this.find("*").andSelf().each(function(i){
if (this.nodeType == 3)
return;
var events = jQuery.data( this, "events" );
for ( var type in events )
for ( var handler in events[ type ] )
jQuery.event.add( clone[ i ], type, events[ type ][ handler ], events[ type ][ handler ].data );
});
return ret;
},
filter: function( selector ) {
return this.pushStack(
jQuery.isFunction( selector ) &&
jQuery.grep(this, function(elem, i){
return selector.call( elem, i );
}) ||
jQuery.multiFilter( selector, this ) );
},
not: function( selector ) {
if ( selector.constructor == String )
if ( isSimple.test( selector ) )
return this.pushStack( jQuery.multiFilter( selector, this, true ) );
else
selector = jQuery.multiFilter( selector, this );
var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;
return this.filter(function() {
return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;
});
},
add: function( selector ) {
return !selector ? this : this.pushStack( jQuery.merge( 
this.get(),
selector.constructor == String ? 
jQuery( selector ).get() :
selector.length != undefined && (!selector.nodeName || jQuery.nodeName(selector, "form")) ?
selector : [selector] ) );
},
is: function( selector ) {
return selector ?
jQuery.multiFilter( selector, this ).length > 0 :
false;
},
hasClass: function( selector ) {
return this.is( "." + selector );
},
val: function( value ) {
if ( value == undefined ) {
if ( this.length ) {
var elem = this[0];
if ( jQuery.nodeName( elem, "select" ) ) {
var index = elem.selectedIndex,
values = [],
options = elem.options,
one = elem.type == "select-one";
if ( index < 0 )
return null;
for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
var option = options[ i ];
if ( option.selected ) {
value = jQuery.browser.msie && !option.attributes.value.specified ? option.text : option.value;
if ( one )
return value;
values.push( value );
}
}
return values;
} else
return (this[0].value || "").replace(/\r/g, "");
}
return undefined;
}
return this.each(function(){
if ( this.nodeType != 1 )
return;
if ( value.constructor == Array && /radio|checkbox/.test( this.type ) )
this.checked = (jQuery.inArray(this.value, value) >= 0 ||
jQuery.inArray(this.name, value) >= 0);
else if ( jQuery.nodeName( this, "select" ) ) {
var values = value.constructor == Array ?
value :
[ value ];
jQuery( "option", this ).each(function(){
this.selected = (jQuery.inArray( this.value, values ) >= 0 ||
jQuery.inArray( this.text, values ) >= 0);
});
if ( !values.length )
this.selectedIndex = -1;
} else
this.value = value;
});
},
html: function( value ) {
return value == undefined ?
(this.length ?
this[0].innerHTML :
null) :
this.empty().append( value );
},
replaceWith: function( value ) {
return this.after( value ).remove();
},
eq: function( i ) {
return this.slice( i, i + 1 );
},
slice: function() {
return this.pushStack( Array.prototype.slice.apply( this, arguments ) );
},
map: function( callback ) {
return this.pushStack( jQuery.map(this, function(elem, i){
return callback.call( elem, i, elem );
}));
},
andSelf: function() {
return this.add( this.prevObject );
},
data: function( key, value ){
var parts = key.split(".");
parts[1] = parts[1] ? "." + parts[1] : "";
if ( value == null ) {
var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
if ( data == undefined && this.length )
data = jQuery.data( this[0], key );
return data == null && parts[1] ?
this.data( parts[0] ) :
data;
} else
return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
jQuery.data( this, key, value );
});
},
removeData: function( key ){
return this.each(function(){
jQuery.removeData( this, key );
});
},
domManip: function( args, table, reverse, callback ) {
var clone = this.length > 1, elems; 
return this.each(function(){
if ( !elems ) {
elems = jQuery.clean( args, this.ownerDocument );
if ( reverse )
elems.reverse();
}
var obj = this;
if ( table && jQuery.nodeName( this, "table" ) && jQuery.nodeName( elems[0], "tr" ) )
obj = this.getElementsByTagName("tbody")[0] || this.appendChild( this.ownerDocument.createElement("tbody") );
var scripts = jQuery( [] );
jQuery.each(elems, function(){
var elem = clone ?
jQuery( this ).clone( true )[0] :
this;
if ( jQuery.nodeName( elem, "script" ) ) {
scripts = scripts.add( elem );
} else {
if ( elem.nodeType == 1 )
scripts = scripts.add( jQuery( "script", elem ).remove() );
callback.call( obj, elem );
}
});
scripts.each( evalScript );
});
}
};
jQuery.prototype.init.prototype = jQuery.prototype;
function evalScript( i, elem ) {
if ( elem.src )
jQuery.ajax({
url: elem.src,
async: false,
dataType: "script"
});
else
jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
if ( elem.parentNode )
elem.parentNode.removeChild( elem );
}
jQuery.extend = jQuery.fn.extend = function() {
var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
if ( target.constructor == Boolean ) {
deep = target;
target = arguments[1] || {};
i = 2;
}
if ( typeof target != "object" && typeof target != "function" )
target = {};
if ( length == 1 ) {
target = this;
i = 0;
}
for ( ; i < length; i++ )
if ( (options = arguments[ i ]) != null )
for ( var name in options ) {
if ( target === options[ name ] )
continue;
if ( deep && options[ name ] && typeof options[ name ] == "object" && target[ name ] && !options[ name ].nodeType )
target[ name ] = jQuery.extend( target[ name ], options[ name ] );
else if ( options[ name ] != undefined )
target[ name ] = options[ name ];
}
return target;
};
var expando = "jQuery" + (new Date()).getTime(), uuid = 0, windowData = {};
var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i;
jQuery.extend({
noConflict: function( deep ) {
window.$ = _$;
if ( deep )
window.jQuery = _jQuery;
return jQuery;
},
isFunction: function( fn ) {
return !!fn && typeof fn != "string" && !fn.nodeName && 
fn.constructor != Array && /function/i.test( fn + "" );
},
isXMLDoc: function( elem ) {
return elem.documentElement && !elem.body ||
elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
},
globalEval: function( data ) {
data = jQuery.trim( data );
if ( data ) {
var head = document.getElementsByTagName("head")[0] || document.documentElement,
script = document.createElement("script");
script.type = "text/javascript";
if ( jQuery.browser.msie )
script.text = data;
else
script.appendChild( document.createTextNode( data ) );
head.appendChild( script );
head.removeChild( script );
}
},
nodeName: function( elem, name ) {
return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
},
cache: {},
data: function( elem, name, data ) {
elem = elem == window ?
windowData :
elem;
var id = elem[ expando ];
if ( !id ) 
id = elem[ expando ] = ++uuid;
if ( name && !jQuery.cache[ id ] )
jQuery.cache[ id ] = {};
if ( data != undefined )
jQuery.cache[ id ][ name ] = data;
return name ?
jQuery.cache[ id ][ name ] :
id;
},
removeData: function( elem, name ) {
elem = elem == window ?
windowData :
elem;
var id = elem[ expando ];
if ( name ) {
if ( jQuery.cache[ id ] ) {
delete jQuery.cache[ id ][ name ];
name = "";
for ( name in jQuery.cache[ id ] )
break;
if ( !name )
jQuery.removeData( elem );
}
} else {
try {
delete elem[ expando ];
} catch(e){
if ( elem.removeAttribute )
elem.removeAttribute( expando );
}
delete jQuery.cache[ id ];
}
},
each: function( object, callback, args ) {
if ( args ) {
if ( object.length == undefined ) {
for ( var name in object )
if ( callback.apply( object[ name ], args ) === false )
break;
} else
for ( var i = 0, length = object.length; i < length; i++ )
if ( callback.apply( object[ i ], args ) === false )
break;
} else {
if ( object.length == undefined ) {
for ( var name in object )
if ( callback.call( object[ name ], name, object[ name ] ) === false )
break;
} else
for ( var i = 0, length = object.length, value = object[0]; 
i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
}
return object;
},
prop: function( elem, value, type, i, name ) {
if ( jQuery.isFunction( value ) )
value = value.call( elem, i );
return value && value.constructor == Number && type == "curCSS" && !exclude.test( name ) ?
value + "px" :
value;
},
className: {
add: function( elem, classNames ) {
jQuery.each((classNames || "").split(/\s+/), function(i, className){
if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )
elem.className += (elem.className ? " " : "") + className;
});
},
remove: function( elem, classNames ) {
if (elem.nodeType == 1)
elem.className = classNames != undefined ?
jQuery.grep(elem.className.split(/\s+/), function(className){
return !jQuery.className.has( classNames, className );	
}).join(" ") :
"";
},
has: function( elem, className ) {
return jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1;
}
},
swap: function( elem, options, callback ) {
var old = {};
for ( var name in options ) {
old[ name ] = elem.style[ name ];
elem.style[ name ] = options[ name ];
}
callback.call( elem );
for ( var name in options )
elem.style[ name ] = old[ name ];
},
css: function( elem, name, force ) {
if ( name == "width" || name == "height" ) {
var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
function getWH() {
val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
var padding = 0, border = 0;
jQuery.each( which, function() {
padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
});
val -= Math.round(padding + border);
}
if ( jQuery(elem).is(":visible") )
getWH();
else
jQuery.swap( elem, props, getWH );
return Math.max(0, val);
}
return jQuery.curCSS( elem, name, force );
},
curCSS: function( elem, name, force ) {
var ret;
function color( elem ) {
if ( !jQuery.browser.safari )
return false;
var ret = document.defaultView.getComputedStyle( elem, null );
return !ret || ret.getPropertyValue("color") == "";
}
if ( name == "opacity" && jQuery.browser.msie ) {
ret = jQuery.attr( elem.style, "opacity" );
return ret == "" ?
"1" :
ret;
}
if ( jQuery.browser.opera && name == "display" ) {
var save = elem.style.outline;
elem.style.outline = "0 solid black";
elem.style.outline = save;
}
if ( name.match( /float/i ) )
name = styleFloat;
if ( !force && elem.style && elem.style[ name ] )
ret = elem.style[ name ];
else if ( document.defaultView && document.defaultView.getComputedStyle ) {
if ( name.match( /float/i ) )
name = "float";
name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();
var getComputedStyle = document.defaultView.getComputedStyle( elem, null );
if ( getComputedStyle && !color( elem ) )
ret = getComputedStyle.getPropertyValue( name );
else {
var swap = [], stack = [];
for ( var a = elem; a && color(a); a = a.parentNode )
stack.unshift(a);
for ( var i = 0; i < stack.length; i++ )
if ( color( stack[ i ] ) ) {
swap[ i ] = stack[ i ].style.display;
stack[ i ].style.display = "block";
}
ret = name == "display" && swap[ stack.length - 1 ] != null ?
"none" :
( getComputedStyle && getComputedStyle.getPropertyValue( name ) ) || "";
for ( var i = 0; i < swap.length; i++ )
if ( swap[ i ] != null )
stack[ i ].style.display = swap[ i ];
}
if ( name == "opacity" && ret == "" )
ret = "1";
} else if ( elem.currentStyle ) {
var camelCase = name.replace(/\-(\w)/g, function(all, letter){
return letter.toUpperCase();
});
ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];
if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {
var style = elem.style.left, runtimeStyle = elem.runtimeStyle.left;
elem.runtimeStyle.left = elem.currentStyle.left;
elem.style.left = ret || 0;
ret = elem.style.pixelLeft + "px";
elem.style.left = style;
elem.runtimeStyle.left = runtimeStyle;
}
}
return ret;
},
clean: function( elems, context ) {
var ret = [];
context = context || document;
if (typeof context.createElement == 'undefined') 
context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
jQuery.each(elems, function(i, elem){
if ( !elem )
return;
if ( elem.constructor == Number )
elem = elem.toString();
if ( typeof elem == "string" ) {
elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){
return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
all :
front + "></" + tag + ">";
});
var tags = jQuery.trim( elem ).toLowerCase(), div = context.createElement("div");
var wrap =
!tags.indexOf("<opt") &&
[ 1, "<select multiple='multiple'>", "</select>" ] ||
!tags.indexOf("<leg") &&
[ 1, "<fieldset>", "</fieldset>" ] ||
tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
[ 1, "<table>", "</table>" ] ||
!tags.indexOf("<tr") &&
[ 2, "<table><tbody>", "</tbody></table>" ] ||
(!tags.indexOf("<td") || !tags.indexOf("<th")) &&
[ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] ||
!tags.indexOf("<col") &&
[ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] ||
jQuery.browser.msie &&
[ 1, "div<div>", "</div>" ] ||
[ 0, "", "" ];
div.innerHTML = wrap[1] + elem + wrap[2];
while ( wrap[0]-- )
div = div.lastChild;
if ( jQuery.browser.msie ) {
var tbody = !tags.indexOf("<table") && tags.indexOf("<tbody") < 0 ?
div.firstChild && div.firstChild.childNodes :
wrap[1] == "<table>" && tags.indexOf("<tbody") < 0 ?
div.childNodes :
[];
for ( var j = tbody.length - 1; j >= 0 ; --j )
if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length )
tbody[ j ].parentNode.removeChild( tbody[ j ] );
if ( /^\s/.test( elem ) )	
div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild );
}
elem = jQuery.makeArray( div.childNodes );
}
if ( elem.length === 0 && (!jQuery.nodeName( elem, "form" ) && !jQuery.nodeName( elem, "select" )) )
return;
if ( elem[0] == undefined || jQuery.nodeName( elem, "form" ) || elem.options )
ret.push( elem );
else
ret = jQuery.merge( ret, elem );
});
return ret;
},
attr: function( elem, name, value ) {
if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
return undefined;
var fix = jQuery.isXMLDoc( elem ) ?
{} :
jQuery.props;
if ( name == "selected" && jQuery.browser.safari )
elem.parentNode.selectedIndex;
if ( fix[ name ] ) {
if ( value != undefined )
elem[ fix[ name ] ] = value;
return elem[ fix[ name ] ];
} else if ( jQuery.browser.msie && name == "style" )
return jQuery.attr( elem.style, "cssText", value );
else if ( value == undefined && jQuery.browser.msie && jQuery.nodeName( elem, "form" ) && (name == "action" || name == "method") )
return elem.getAttributeNode( name ).nodeValue;
else if ( elem.tagName ) {
if ( value != undefined ) {
if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode )
throw "type property can't be changed";
elem.setAttribute( name, "" + value );
}
if ( jQuery.browser.msie && /href|src/.test( name ) && !jQuery.isXMLDoc( elem ) ) 
return elem.getAttribute( name, 2 );
return elem.getAttribute( name );
} else {
if ( name == "opacity" && jQuery.browser.msie ) {
if ( value != undefined ) {
elem.zoom = 1; 
elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) +
(parseFloat( value ).toString() == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
}
return elem.filter && elem.filter.indexOf("opacity=") >= 0 ?
(parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100).toString() :
"";
}
name = name.replace(/-([a-z])/ig, function(all, letter){
return letter.toUpperCase();
});
if ( value != undefined )
elem[ name ] = value;
return elem[ name ];
}
},
trim: function( text ) {
return (text || "").replace( /^\s+|\s+$/g, "" );
},
makeArray: function( array ) {
var ret = [];
if ( typeof array != "array" )
for ( var i = 0, length = array.length; i < length; i++ )
ret.push( array[ i ] );
else
ret = array.slice( 0 );
return ret;
},
inArray: function( elem, array ) {
for ( var i = 0, length = array.length; i < length; i++ )
if ( array[ i ] == elem )
return i;
return -1;
},
merge: function( first, second ) {
if ( jQuery.browser.msie ) {
for ( var i = 0; second[ i ]; i++ )
if ( second[ i ].nodeType != 8 )
first.push( second[ i ] );
} else
for ( var i = 0; second[ i ]; i++ )
first.push( second[ i ] );
return first;
},
unique: function( array ) {
var ret = [], done = {};
try {
for ( var i = 0, length = array.length; i < length; i++ ) {
var id = jQuery.data( array[ i ] );
if ( !done[ id ] ) {
done[ id ] = true;
ret.push( array[ i ] );
}
}
} catch( e ) {
ret = array;
}
return ret;
},
grep: function( elems, callback, inv ) {
var ret = [];
for ( var i = 0, length = elems.length; i < length; i++ )
if ( !inv && callback( elems[ i ], i ) || inv && !callback( elems[ i ], i ) )
ret.push( elems[ i ] );
return ret;
},
map: function( elems, callback ) {
var ret = [];
for ( var i = 0, length = elems.length; i < length; i++ ) {
var value = callback( elems[ i ], i );
if ( value !== null && value != undefined ) {
if ( value.constructor != Array )
value = [ value ];
ret = ret.concat( value );
}
}
return ret;
}
});
var userAgent = navigator.userAgent.toLowerCase();
jQuery.browser = {
version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
safari: /webkit/.test( userAgent ),
opera: /opera/.test( userAgent ),
msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
};
var styleFloat = jQuery.browser.msie ?
"styleFloat" :
"cssFloat";
jQuery.extend({
boxModel: !jQuery.browser.msie || document.compatMode == "CSS1Compat",
props: {
"for": "htmlFor",
"class": "className",
"float": styleFloat,
cssFloat: styleFloat,
styleFloat: styleFloat,
innerHTML: "innerHTML",
className: "className",
value: "value",
disabled: "disabled",
checked: "checked",
readonly: "readOnly",
selected: "selected",
maxlength: "maxLength",
selectedIndex: "selectedIndex",
defaultValue: "defaultValue",
tagName: "tagName",
nodeName: "nodeName"
}
});
jQuery.each({
parent: function(elem){return elem.parentNode;},
parents: function(elem){return jQuery.dir(elem,"parentNode");},
next: function(elem){return jQuery.nth(elem,2,"nextSibling");},
prev: function(elem){return jQuery.nth(elem,2,"previousSibling");},
nextAll: function(elem){return jQuery.dir(elem,"nextSibling");},
prevAll: function(elem){return jQuery.dir(elem,"previousSibling");},
siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},
children: function(elem){return jQuery.sibling(elem.firstChild);},
contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}
}, function(name, fn){
jQuery.fn[ name ] = function( selector ) {
var ret = jQuery.map( this, fn );
if ( selector && typeof selector == "string" )
ret = jQuery.multiFilter( selector, ret );
return this.pushStack( jQuery.unique( ret ) );
};
});
jQuery.each({
appendTo: "append",
prependTo: "prepend",
insertBefore: "before",
insertAfter: "after",
replaceAll: "replaceWith"
}, function(name, original){
jQuery.fn[ name ] = function() {
var args = arguments;
return this.each(function(){
for ( var i = 0, length = args.length; i < length; i++ )
jQuery( args[ i ] )[ original ]( this );
});
};
});
jQuery.each({
removeAttr: function( name ) {
jQuery.attr( this, name, "" );
if (this.nodeType == 1) 
this.removeAttribute( name );
},
addClass: function( classNames ) {
jQuery.className.add( this, classNames );
},
removeClass: function( classNames ) {
jQuery.className.remove( this, classNames );
},
toggleClass: function( classNames ) {
jQuery.className[ jQuery.className.has( this, classNames ) ? "remove" : "add" ]( this, classNames );
},
remove: function( selector ) {
if ( !selector || jQuery.filter( selector, [ this ] ).r.length ) {
jQuery( "*", this ).add(this).each(function(){
jQuery.event.remove(this);
jQuery.removeData(this);
});
if (this.parentNode)
this.parentNode.removeChild( this );
}
},
empty: function() {
jQuery( ">*", this ).remove();
while ( this.firstChild )
this.removeChild( this.firstChild );
}
}, function(name, fn){
jQuery.fn[ name ] = function(){
return this.each( fn, arguments );
};
});
jQuery.each([ "Height", "Width" ], function(i, name){
var type = name.toLowerCase();
jQuery.fn[ type ] = function( size ) {
return this[0] == window ?
jQuery.browser.opera && document.body[ "client" + name ] || 
jQuery.browser.safari && window[ "inner" + name ] ||
document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] || document.body[ "client" + name ] :
this[0] == document ?
Math.max( 
Math.max(document.body["scroll" + name], document.documentElement["scroll" + name]), 
Math.max(document.body["offset" + name], document.documentElement["offset" + name]) 
) :
size == undefined ?
(this.length ? jQuery.css( this[0], type ) : null) :
this.css( type, size.constructor == String ? size : size + "px" );
};
});
var chars = jQuery.browser.safari && parseInt(jQuery.browser.version) < 417 ?
"(?:[\\w*_-]|\\\\.)" :
"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",
quickChild = new RegExp("^>\\s*(" + chars + "+)"),
quickID = new RegExp("^(" + chars + "+)(#)(" + chars + "+)"),
quickClass = new RegExp("^([#.]?)(" + chars + "*)");
jQuery.extend({
expr: {
"": function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},
"#": function(a,i,m){return a.getAttribute("id")==m[2];},
":": {
lt: function(a,i,m){return i<m[3]-0;},
gt: function(a,i,m){return i>m[3]-0;},
nth: function(a,i,m){return m[3]-0==i;},
eq: function(a,i,m){return m[3]-0==i;},
first: function(a,i){return i==0;},
last: function(a,i,m,r){return i==r.length-1;},
even: function(a,i){return i%2==0;},
odd: function(a,i){return i%2;},
"first-child": function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},
"last-child": function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},
"only-child": function(a){return !jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},
parent: function(a){return a.firstChild;},
empty: function(a){return !a.firstChild;},
contains: function(a,i,m){return (a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},
visible: function(a){return "hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},
hidden: function(a){return "hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},
enabled: function(a){return !a.disabled;},
disabled: function(a){return a.disabled;},
checked: function(a){return a.checked;},
selected: function(a){return a.selected||jQuery.attr(a,"selected");},
text: function(a){return "text"==a.type;},
radio: function(a){return "radio"==a.type;},
checkbox: function(a){return "checkbox"==a.type;},
file: function(a){return "file"==a.type;},
password: function(a){return "password"==a.type;},
submit: function(a){return "submit"==a.type;},
image: function(a){return "image"==a.type;},
reset: function(a){return "reset"==a.type;},
button: function(a){return "button"==a.type||jQuery.nodeName(a,"button");},
input: function(a){return /input|select|textarea|button/i.test(a.nodeName);},
has: function(a,i,m){return jQuery.find(m[3],a).length;},
header: function(a){return /h\d/i.test(a.nodeName);},
animated: function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}
}
},
parse: [
/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,
/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,
new RegExp("^([:.#]*)(" + chars + "+)")
],
multiFilter: function( expr, elems, not ) {
var old, cur = [];
while ( expr && expr != old ) {
old = expr;
var f = jQuery.filter( expr, elems, not );
expr = f.t.replace(/^\s*,\s*/, "" );
cur = not ? elems = f.r : jQuery.merge( cur, f.r );
}
return cur;
},
find: function( t, context ) {
if ( typeof t != "string" )
return [ t ];
if ( context && context.nodeType != 1 && context.nodeType != 9)
return [ ];
context = context || document;
var ret = [context], done = [], last, nodeName;
while ( t && last != t ) {
var r = [];
last = t;
t = jQuery.trim(t);
var foundToken = false;
var re = quickChild;
var m = re.exec(t);
if ( m ) {
nodeName = m[1].toUpperCase();
for ( var i = 0; ret[i]; i++ )
for ( var c = ret[i].firstChild; c; c = c.nextSibling )
if ( c.nodeType == 1 && (nodeName == "*" || c.nodeName.toUpperCase() == nodeName) )
r.push( c );
ret = r;
t = t.replace( re, "" );
if ( t.indexOf(" ") == 0 ) continue;
foundToken = true;
} else {
re = /^([>+~])\s*(\w*)/i;
if ( (m = re.exec(t)) != null ) {
r = [];
var merge = {};
nodeName = m[2].toUpperCase();
m = m[1];
for ( var j = 0, rl = ret.length; j < rl; j++ ) {
var n = m == "~" || m == "+" ? ret[j].nextSibling : ret[j].firstChild;
for ( ; n; n = n.nextSibling )
if ( n.nodeType == 1 ) {
var id = jQuery.data(n);
if ( m == "~" && merge[id] ) break;
if (!nodeName || n.nodeName.toUpperCase() == nodeName ) {
if ( m == "~" ) merge[id] = true;
r.push( n );
}
if ( m == "+" ) break;
}
}
ret = r;
t = jQuery.trim( t.replace( re, "" ) );
foundToken = true;
}
}
if ( t && !foundToken ) {
if ( !t.indexOf(",") ) {
if ( context == ret[0] ) ret.shift();
done = jQuery.merge( done, ret );
r = ret = [context];
t = " " + t.substr(1,t.length);
} else {
var re2 = quickID;
var m = re2.exec(t);
if ( m ) {
m = [ 0, m[2], m[3], m[1] ];
} else {
re2 = quickClass;
m = re2.exec(t);
}
m[2] = m[2].replace(/\\/g, "");
var elem = ret[ret.length-1];
if ( m[1] == "#" && elem && elem.getElementById && !jQuery.isXMLDoc(elem) ) {
var oid = elem.getElementById(m[2]);
if ( (jQuery.browser.msie||jQuery.browser.opera) && oid && typeof oid.id == "string" && oid.id != m[2] )
oid = jQuery('[@id="'+m[2]+'"]', elem)[0];
ret = r = oid && (!m[3] || jQuery.nodeName(oid, m[3])) ? [oid] : [];
} else {
for ( var i = 0; ret[i]; i++ ) {
var tag = m[1] == "#" && m[3] ? m[3] : m[1] != "" || m[0] == "" ? "*" : m[2];
if ( tag == "*" && ret[i].nodeName.toLowerCase() == "object" )
tag = "param";
r = jQuery.merge( r, ret[i].getElementsByTagName( tag ));
}
if ( m[1] == "." )
r = jQuery.classFilter( r, m[2] );
if ( m[1] == "#" ) {
var tmp = [];
for ( var i = 0; r[i]; i++ )
if ( r[i].getAttribute("id") == m[2] ) {
tmp = [ r[i] ];
break;
}
r = tmp;
}
ret = r;
}
t = t.replace( re2, "" );
}
}
if ( t ) {
var val = jQuery.filter(t,r);
ret = r = val.r;
t = jQuery.trim(val.t);
}
}
if ( t )
ret = [];
if ( ret && context == ret[0] )
ret.shift();
done = jQuery.merge( done, ret );
return done;
},
classFilter: function(r,m,not){
m = " " + m + " ";
var tmp = [];
for ( var i = 0; r[i]; i++ ) {
var pass = (" " + r[i].className + " ").indexOf( m ) >= 0;
if ( !not && pass || not && !pass )
tmp.push( r[i] );
}
return tmp;
},
filter: function(t,r,not) {
var last;
while ( t && t != last ) {
last = t;
var p = jQuery.parse, m;
for ( var i = 0; p[i]; i++ ) {
m = p[i].exec( t );
if ( m ) {
t = t.substring( m[0].length );
m[2] = m[2].replace(/\\/g, "");
break;
}
}
if ( !m )
break;
if ( m[1] == ":" && m[2] == "not" )
r = isSimple.test( m[3] ) ?
jQuery.filter(m[3], r, true).r :
jQuery( r ).not( m[3] );
else if ( m[1] == "." )
r = jQuery.classFilter(r, m[2], not);
else if ( m[1] == "[" ) {
var tmp = [], type = m[3];
for ( var i = 0, rl = r.length; i < rl; i++ ) {
var a = r[i], z = a[ jQuery.props[m[2]] || m[2] ];
if ( z == null || /href|src|selected/.test(m[2]) )
z = jQuery.attr(a,m[2]) || '';
if ( (type == "" && !!z ||
type == "=" && z == m[5] ||
type == "!=" && z != m[5] ||
type == "^=" && z && !z.indexOf(m[5]) ||
type == "$=" && z.substr(z.length - m[5].length) == m[5] ||
(type == "*=" || type == "~=") && z.indexOf(m[5]) >= 0) ^ not )
tmp.push( a );
}
r = tmp;
} else if ( m[1] == ":" && m[2] == "nth-child" ) {
var merge = {}, tmp = [],
test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
m[3] == "even" && "2n" || m[3] == "odd" && "2n+1" ||
!/\D/.test(m[3]) && "0n+" + m[3] || m[3]),
first = (test[1] + (test[2] || 1)) - 0, last = test[3] - 0;
for ( var i = 0, rl = r.length; i < rl; i++ ) {
var node = r[i], parentNode = node.parentNode, id = jQuery.data(parentNode);
if ( !merge[id] ) {
var c = 1;
for ( var n = parentNode.firstChild; n; n = n.nextSibling )
if ( n.nodeType == 1 )
n.nodeIndex = c++;
merge[id] = true;
}
var add = false;
if ( first == 0 ) {
if ( node.nodeIndex == last )
add = true;
} else if ( (node.nodeIndex - last) % first == 0 && (node.nodeIndex - last) / first >= 0 )
add = true;
if ( add ^ not )
tmp.push( node );
}
r = tmp;
} else {
var fn = jQuery.expr[ m[1] ];
if ( typeof fn == "object" )
fn = fn[ m[2] ];
if ( typeof fn == "string" )
fn = eval("false||function(a,i){return " + fn + ";}");
r = jQuery.grep( r, function(elem, i){
return fn(elem, i, m, r);
}, not );
}
}
return { r: r, t: t };
},
dir: function( elem, dir ){
var matched = [];
var cur = elem[dir];
while ( cur && cur != document ) {
if ( cur.nodeType == 1 )
matched.push( cur );
cur = cur[dir];
}
return matched;
},
nth: function(cur,result,dir,elem){
result = result || 1;
var num = 0;
for ( ; cur; cur = cur[dir] )
if ( cur.nodeType == 1 && ++num == result )
break;
return cur;
},
sibling: function( n, elem ) {
var r = [];
for ( ; n; n = n.nextSibling ) {
if ( n.nodeType == 1 && (!elem || n != elem) )
r.push( n );
}
return r;
}
});
jQuery.event = {
add: function(elem, types, handler, data) {
if ( elem.nodeType == 3 || elem.nodeType == 8 )
return;
if ( jQuery.browser.msie && elem.setInterval != undefined )
elem = window;
if ( !handler.guid )
handler.guid = this.guid++;
if( data != undefined ) { 
var fn = handler; 
handler = function() { 
return fn.apply(this, arguments); 
};
handler.data = data;
handler.guid = fn.guid;
}
var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}),
handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){
var val;
if ( typeof jQuery == "undefined" || jQuery.event.triggered )
return val;
val = jQuery.event.handle.apply(arguments.callee.elem, arguments);
return val;
});
handle.elem = elem;
jQuery.each(types.split(/\s+/), function(index, type) {
var parts = type.split(".");
type = parts[0];
handler.type = parts[1];
var handlers = events[type];
if (!handlers) {
handlers = events[type] = {};
if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem) === false ) {
if (elem.addEventListener)
elem.addEventListener(type, handle, false);
else if (elem.attachEvent)
elem.attachEvent("on" + type, handle);
}
}
handlers[handler.guid] = handler;
jQuery.event.global[type] = true;
});
elem = null;
},
guid: 1,
global: {},
remove: function(elem, types, handler) {
if ( elem.nodeType == 3 || elem.nodeType == 8 )
return;
var events = jQuery.data(elem, "events"), ret, index;
if ( events ) {
if ( types == undefined || (typeof types == "string" && types.charAt(0) == ".") )
for ( var type in events )
this.remove( elem, type + (types || "") );
else {
if ( types.type ) {
handler = types.handler;
types = types.type;
}
jQuery.each(types.split(/\s+/), function(index, type){
var parts = type.split(".");
type = parts[0];
if ( events[type] ) {
if ( handler )
delete events[type][handler.guid];
else
for ( handler in events[type] )
if ( !parts[1] || events[type][handler].type == parts[1] )
delete events[type][handler];
for ( ret in events[type] ) break;
if ( !ret ) {
if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem) === false ) {
if (elem.removeEventListener)
elem.removeEventListener(type, jQuery.data(elem, "handle"), false);
else if (elem.detachEvent)
elem.detachEvent("on" + type, jQuery.data(elem, "handle"));
}
ret = null;
delete events[type];
}
}
});
}
for ( ret in events ) break;
if ( !ret ) {
var handle = jQuery.data( elem, "handle" );
if ( handle ) handle.elem = null;
jQuery.removeData( elem, "events" );
jQuery.removeData( elem, "handle" );
}
}
},
trigger: function(type, data, elem, donative, extra) {
data = jQuery.makeArray(data || []);
if ( type.indexOf("!") >= 0 ) {
type = type.slice(0, -1);
var exclusive = true;
}
if ( !elem ) {
if ( this.global[type] )
jQuery("*").add([window, document]).trigger(type, data);
} else {
if ( elem.nodeType == 3 || elem.nodeType == 8 )
return undefined;
var val, ret, fn = jQuery.isFunction( elem[ type ] || null ),
event = !data[0] || !data[0].preventDefault;
if ( event )
data.unshift( this.fix({ type: type, target: elem }) );
data[0].type = type;
if ( exclusive )
data[0].exclusive = true;
if ( jQuery.isFunction( jQuery.data(elem, "handle") ) )
val = jQuery.data(elem, "handle").apply( elem, data );
if ( !fn && elem["on"+type] && elem["on"+type].apply( elem, data ) === false )
val = false;
if ( event )
data.shift();
if ( extra && jQuery.isFunction( extra ) ) {
ret = extra.apply( elem, val == null ? data : data.concat( val ) );
if (ret !== undefined)
val = ret;
}
if ( fn && donative !== false && val !== false && !(jQuery.nodeName(elem, 'a') && type == "click") ) {
this.triggered = true;
try {
elem[ type ]();
} catch (e) {}
}
this.triggered = false;
}
return val;
},
handle: function(event) {
var val;
event = jQuery.event.fix( event || window.event || {} ); 
var parts = event.type.split(".");
event.type = parts[0];
var handlers = jQuery.data(this, "events") && jQuery.data(this, "events")[event.type], args = Array.prototype.slice.call( arguments, 1 );
args.unshift( event );
for ( var j in handlers ) {
var handler = handlers[j];
args[0].handler = handler;
args[0].data = handler.data;
if ( !parts[1] && !event.exclusive || handler.type == parts[1] ) {
var ret = handler.apply( this, args );
if ( val !== false )
val = ret;
if ( ret === false ) {
event.preventDefault();
event.stopPropagation();
}
}
}
if (jQuery.browser.msie)
event.target = event.preventDefault = event.stopPropagation =
event.handler = event.data = null;
return val;
},
fix: function(event) {
var originalEvent = event;
event = jQuery.extend({}, originalEvent);
event.preventDefault = function() {
if (originalEvent.preventDefault)
originalEvent.preventDefault();
originalEvent.returnValue = false;
};
event.stopPropagation = function() {
if (originalEvent.stopPropagation)
originalEvent.stopPropagation();
originalEvent.cancelBubble = true;
};
if ( !event.target )
event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
if ( event.target.nodeType == 3 )
event.target = originalEvent.target.parentNode;
if ( !event.relatedTarget && event.fromElement )
event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;
if ( event.pageX == null && event.clientX != null ) {
var doc = document.documentElement, body = document.body;
event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);
event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);
}
if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) )
event.which = event.charCode || event.keyCode;
if ( !event.metaKey && event.ctrlKey )
event.metaKey = event.ctrlKey;
if ( !event.which && event.button )
event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
return event;
},
special: {
ready: {
setup: function() {
bindReady();
return;
},
teardown: function() { return; }
},
mouseenter: {
setup: function() {
if ( jQuery.browser.msie ) return false;
jQuery(this).bind("mouseover", jQuery.event.special.mouseenter.handler);
return true;
},
teardown: function() {
if ( jQuery.browser.msie ) return false;
jQuery(this).unbind("mouseover", jQuery.event.special.mouseenter.handler);
return true;
},
handler: function(event) {
if ( withinElement(event, this) ) return true;
arguments[0].type = "mouseenter";
return jQuery.event.handle.apply(this, arguments);
}
},
mouseleave: {
setup: function() {
if ( jQuery.browser.msie ) return false;
jQuery(this).bind("mouseout", jQuery.event.special.mouseleave.handler);
return true;
},
teardown: function() {
if ( jQuery.browser.msie ) return false;
jQuery(this).unbind("mouseout", jQuery.event.special.mouseleave.handler);
return true;
},
handler: function(event) {
if ( withinElement(event, this) ) return true;
arguments[0].type = "mouseleave";
return jQuery.event.handle.apply(this, arguments);
}
}
}
};
jQuery.fn.extend({
bind: function( type, data, fn ) {
return type == "unload" ? this.one(type, data, fn) : this.each(function(){
jQuery.event.add( this, type, fn || data, fn && data );
});
},
one: function( type, data, fn ) {
return this.each(function(){
jQuery.event.add( this, type, function(event) {
jQuery(this).unbind(event);
return (fn || data).apply( this, arguments);
}, fn && data);
});
},
unbind: function( type, fn ) {
return this.each(function(){
jQuery.event.remove( this, type, fn );
});
},
trigger: function( type, data, fn ) {
return this.each(function(){
jQuery.event.trigger( type, data, this, true, fn );
});
},
triggerHandler: function( type, data, fn ) {
if ( this[0] )
return jQuery.event.trigger( type, data, this[0], false, fn );
return undefined;
},
toggle: function() {
var args = arguments;
return this.click(function(event) {
this.lastToggle = 0 == this.lastToggle ? 1 : 0;
event.preventDefault();
return args[this.lastToggle].apply( this, arguments ) || false;
});
},
hover: function(fnOver, fnOut) {
return this.bind('mouseenter', fnOver).bind('mouseleave', fnOut);
},
ready: function(fn) {
bindReady();
if ( jQuery.isReady )
fn.call( document, jQuery );
else
jQuery.readyList.push( function() { return fn.call(this, jQuery); } );
return this;
}
});
jQuery.extend({
isReady: false,
readyList: [],
ready: function() {
if ( !jQuery.isReady ) {
jQuery.isReady = true;
if ( jQuery.readyList ) {
jQuery.each( jQuery.readyList, function(){
this.apply( document );
});
jQuery.readyList = null;
}
jQuery(document).triggerHandler("ready");
}
}
});
var readyBound = false;
function bindReady(){
if ( readyBound ) return;
readyBound = true;
if ( document.addEventListener && !jQuery.browser.opera)
document.addEventListener( "DOMContentLoaded", jQuery.ready, false );
if ( jQuery.browser.msie && window == top ) (function(){
if (jQuery.isReady) return;
try {
document.documentElement.doScroll("left");
} catch( error ) {
setTimeout( arguments.callee, 0 );
return;
}
jQuery.ready();
})();
if ( jQuery.browser.opera )
document.addEventListener( "DOMContentLoaded", function () {
if (jQuery.isReady) return;
for (var i = 0; i < document.styleSheets.length; i++)
if (document.styleSheets[i].disabled) {
setTimeout( arguments.callee, 0 );
return;
}
jQuery.ready();
}, false);
if ( jQuery.browser.safari ) {
var numStyles;
(function(){
if (jQuery.isReady) return;
if ( document.readyState != "loaded" && document.readyState != "complete" ) {
setTimeout( arguments.callee, 0 );
return;
}
if ( numStyles === undefined )
numStyles = jQuery("style, link[rel=stylesheet]").length;
if ( document.styleSheets.length != numStyles ) {
setTimeout( arguments.callee, 0 );
return;
}
jQuery.ready();
})();
}
jQuery.event.add( window, "load", jQuery.ready );
}
jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
"mousedown,mouseup,mousemove,mouseover,mouseout,change,select," + 
"submit,keydown,keypress,keyup,error").split(","), function(i, name){
jQuery.fn[name] = function(fn){
return fn ? this.bind(name, fn) : this.trigger(name);
};
});
var withinElement = function(event, elem) {
var parent = event.relatedTarget;
while ( parent && parent != elem ) try { parent = parent.parentNode; } catch(error) { parent = elem; }
return parent == elem;
};
jQuery(window).bind("unload", function() {
jQuery("*").add(document).unbind();
});
jQuery.fn.extend({
load: function( url, params, callback ) {
if ( jQuery.isFunction( url ) )
return this.bind("load", url);
var off = url.indexOf(" ");
if ( off >= 0 ) {
var selector = url.slice(off, url.length);
url = url.slice(0, off);
}
callback = callback || function(){};
var type = "GET";
if ( params )
if ( jQuery.isFunction( params ) ) {
callback = params;
params = null;
} else {
params = jQuery.param( params );
type = "POST";
}
var self = this;
jQuery.ajax({
url: url,
type: type,
dataType: "html",
data: params,
complete: function(res, status){
if ( status == "success" || status == "notmodified" )
self.html( selector ?
jQuery("<div/>")
.append(res.responseText.replace(/<script(.|\s)*?\/script>/g, ""))
.find(selector) :
res.responseText );
self.each( callback, [res.responseText, status, res] );
}
});
return this;
},
serialize: function() {
return jQuery.param(this.serializeArray());
},
serializeArray: function() {
return this.map(function(){
return jQuery.nodeName(this, "form") ?
jQuery.makeArray(this.elements) : this;
})
.filter(function(){
return this.name && !this.disabled && 
(this.checked || /select|textarea/i.test(this.nodeName) || 
/text|hidden|password/i.test(this.type));
})
.map(function(i, elem){
var val = jQuery(this).val();
return val == null ? null :
val.constructor == Array ?
jQuery.map( val, function(val, i){
return {name: elem.name, value: val};
}) :
{name: elem.name, value: val};
}).get();
}
});
jQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){
jQuery.fn[o] = function(f){
return this.bind(o, f);
};
});
var jsc = (new Date).getTime();
jQuery.extend({
get: function( url, data, callback, type ) {
if ( jQuery.isFunction( data ) ) {
callback = data;
data = null;
}
return jQuery.ajax({
type: "GET",
url: url,
data: data,
success: callback,
dataType: type
});
},
getScript: function( url, callback ) {
return jQuery.get(url, null, callback, "script");
},
getJSON: function( url, data, callback ) {
return jQuery.get(url, data, callback, "json");
},
post: function( url, data, callback, type ) {
if ( jQuery.isFunction( data ) ) {
callback = data;
data = {};
}
return jQuery.ajax({
type: "POST",
url: url,
data: data,
success: callback,
dataType: type
});
},
ajaxSetup: function( settings ) {
jQuery.extend( jQuery.ajaxSettings, settings );
},
ajaxSettings: {
global: true,
type: "GET",
timeout: 0,
contentType: "application/x-www-form-urlencoded",
processData: true,
async: true,
data: null,
username: null,
password: null,
accepts: {
xml: "application/xml, text/xml",
html: "text/html",
script: "text/javascript, application/javascript",
json: "application/json, text/javascript",
text: "text/plain",
_default: "*/*"
}
},
lastModified: {},
ajax: function( s ) {
var jsonp, jsre = /=\?(&|$)/g, status, data;
s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));
if ( s.data && s.processData && typeof s.data != "string" )
s.data = jQuery.param(s.data);
if ( s.dataType == "jsonp" ) {
if ( s.type.toLowerCase() == "get" ) {
if ( !s.url.match(jsre) )
s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?";
} else if ( !s.data || !s.data.match(jsre) )
s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
s.dataType = "json";
}
if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) {
jsonp = "jsonp" + jsc++;
if ( s.data )
s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
s.url = s.url.replace(jsre, "=" + jsonp + "$1");
s.dataType = "script";
window[ jsonp ] = function(tmp){
data = tmp;
success();
complete();
window[ jsonp ] = undefined;
try{ delete window[ jsonp ]; } catch(e){}
if ( head )
head.removeChild( script );
};
}
if ( s.dataType == "script" && s.cache == null )
s.cache = false;
if ( s.cache === false && s.type.toLowerCase() == "get" ) {
var ts = (new Date()).getTime();
var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2");
s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : "");
}
if ( s.data && s.type.toLowerCase() == "get" ) {
s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;
s.data = null;
}
if ( s.global && ! jQuery.active++ )
jQuery.event.trigger( "ajaxStart" );
if ( (!s.url.indexOf("http") || !s.url.indexOf("//")) && s.dataType == "script" && s.type.toLowerCase() == "get" ) {
var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.src = s.url;
if (s.scriptCharset)
script.charset = s.scriptCharset;
if ( !jsonp ) {
var done = false;
script.onload = script.onreadystatechange = function(){
if ( !done && (!this.readyState || 
this.readyState == "loaded" || this.readyState == "complete") ) {
done = true;
success();
complete();
head.removeChild( script );
}
};
}
head.appendChild(script);
return undefined;
}
var requestDone = false;
var xml = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
xml.open(s.type, s.url, s.async, s.username, s.password);
try {
if ( s.data )
xml.setRequestHeader("Content-Type", s.contentType);
if ( s.ifModified )
xml.setRequestHeader("If-Modified-Since",
jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );
xml.setRequestHeader("X-Requested-With", "XMLHttpRequest");
xml.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
s.accepts[ s.dataType ] + ", */*" :
s.accepts._default );
} catch(e){}
if ( s.beforeSend )
s.beforeSend(xml);
if ( s.global )
jQuery.event.trigger("ajaxSend", [xml, s]);
var onreadystatechange = function(isTimeout){
if ( !requestDone && xml && (xml.readyState == 4 || isTimeout == "timeout") ) {
requestDone = true;
if (ival) {
clearInterval(ival);
ival = null;
}
status = isTimeout == "timeout" && "timeout" ||
!jQuery.httpSuccess( xml ) && "error" ||
s.ifModified && jQuery.httpNotModified( xml, s.url ) && "notmodified" ||
"success";
if ( status == "success" ) {
try {
data = jQuery.httpData( xml, s.dataType );
} catch(e) {
status = "parsererror";
}
}
if ( status == "success" ) {
var modRes;
try {
modRes = xml.getResponseHeader("Last-Modified");
} catch(e) {} // swallow exception thrown by FF if header is not available
if ( s.ifModified && modRes )
jQuery.lastModified[s.url] = modRes;
if ( !jsonp )
success();	
} else
jQuery.handleError(s, xml, status);
complete();
if ( s.async )
xml = null;
}
};
if ( s.async ) {
var ival = setInterval(onreadystatechange, 13); 
if ( s.timeout > 0 )
setTimeout(function(){
if ( xml ) {
xml.abort();
if( !requestDone )
onreadystatechange( "timeout" );
}
}, s.timeout);
}
try {
xml.send(s.data);
} catch(e) {
jQuery.handleError(s, xml, null, e);
}
if ( !s.async )
onreadystatechange();
function success(){
if ( s.success )
s.success( data, status );
if ( s.global )
jQuery.event.trigger( "ajaxSuccess", [xml, s] );
}
function complete(){
if ( s.complete )
s.complete(xml, status);
if ( s.global )
jQuery.event.trigger( "ajaxComplete", [xml, s] );
if ( s.global && ! --jQuery.active )
jQuery.event.trigger( "ajaxStop" );
}
return xml;
},
handleError: function( s, xml, status, e ) {
if ( s.error ) s.error( xml, status, e );
if ( s.global )
jQuery.event.trigger( "ajaxError", [xml, s, e] );
},
active: 0,
httpSuccess: function( r ) {
try {
return !r.status && location.protocol == "file:" ||
( r.status >= 200 && r.status < 300 ) || r.status == 304 || r.status == 1223 ||
jQuery.browser.safari && r.status == undefined;
} catch(e){}
return false;
},
httpNotModified: function( xml, url ) {
try {
var xmlRes = xml.getResponseHeader("Last-Modified");
return xml.status == 304 || xmlRes == jQuery.lastModified[url] ||
jQuery.browser.safari && xml.status == undefined;
} catch(e){}
return false;
},
httpData: function( r, type ) {
var ct = r.getResponseHeader("content-type");
var xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0;
var data = xml ? r.responseXML : r.responseText;
if ( xml && data.documentElement.tagName == "parsererror" )
throw "parsererror";
if ( type == "script" )
jQuery.globalEval( data );
if ( type == "json" )
data = eval("(" + data + ")");
return data;
},
param: function( a ) {
var s = [];
if ( a.constructor == Array || a.jquery )
jQuery.each( a, function(){
s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( this.value ) );
});
else
for ( var j in a )
if ( a[j] && a[j].constructor == Array )
jQuery.each( a[j], function(){
s.push( encodeURIComponent(j) + "=" + encodeURIComponent( this ) );
});
else
s.push( encodeURIComponent(j) + "=" + encodeURIComponent( a[j] ) );
return s.join("&").replace(/%20/g, "+");
}
});
jQuery.fn.extend({
show: function(speed,callback){
return speed ?
this.animate({
height: "show", width: "show", opacity: "show"
}, speed, callback) :
this.filter(":hidden").each(function(){
this.style.display = this.oldblock || "";
if ( jQuery.css(this,"display") == "none" ) {
var elem = jQuery("<" + this.tagName + " />").appendTo("body");
this.style.display = elem.css("display");
if (this.style.display == "none")
this.style.display = "block";
elem.remove();
}
}).end();
},
hide: function(speed,callback){
return speed ?
this.animate({
height: "hide", width: "hide", opacity: "hide"
}, speed, callback) :
this.filter(":visible").each(function(){
this.oldblock = this.oldblock || jQuery.css(this,"display");
this.style.display = "none";
}).end();
},
_toggle: jQuery.fn.toggle,
toggle: function( fn, fn2 ){
return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ?
this._toggle( fn, fn2 ) :
fn ?
this.animate({
height: "toggle", width: "toggle", opacity: "toggle"
}, fn, fn2) :
this.each(function(){
jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]();
});
},
slideDown: function(speed,callback){
return this.animate({height: "show"}, speed, callback);
},
slideUp: function(speed,callback){
return this.animate({height: "hide"}, speed, callback);
},
slideToggle: function(speed, callback){
return this.animate({height: "toggle"}, speed, callback);
},
fadeIn: function(speed, callback){
return this.animate({opacity: "show"}, speed, callback);
},
fadeOut: function(speed, callback){
return this.animate({opacity: "hide"}, speed, callback);
},
fadeTo: function(speed,to,callback){
return this.animate({opacity: to}, speed, callback);
},
animate: function( prop, speed, easing, callback ) {
var optall = jQuery.speed(speed, easing, callback);
return this[ optall.queue === false ? "each" : "queue" ](function(){
if ( this.nodeType != 1)
return false;
var opt = jQuery.extend({}, optall);
var hidden = jQuery(this).is(":hidden"), self = this;
for ( var p in prop ) {
if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden )
return jQuery.isFunction(opt.complete) && opt.complete.apply(this);
if ( p == "height" || p == "width" ) {
opt.display = jQuery.css(this, "display");
opt.overflow = this.style.overflow;
}
}
if ( opt.overflow != null )
this.style.overflow = "hidden";
opt.curAnim = jQuery.extend({}, prop);
jQuery.each( prop, function(name, val){
var e = new jQuery.fx( self, opt, name );
if ( /toggle|show|hide/.test(val) )
e[ val == "toggle" ? hidden ? "show" : "hide" : val ]( prop );
else {
var parts = val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),
start = e.cur(true) || 0;
if ( parts ) {
var end = parseFloat(parts[2]),
unit = parts[3] || "px";
if ( unit != "px" ) {
self.style[ name ] = (end || 1) + unit;
start = ((end || 1) / e.cur(true)) * start;
self.style[ name ] = start + unit;
}
if ( parts[1] )
end = ((parts[1] == "-=" ? -1 : 1) * end) + start;
e.custom( start, end, unit );
} else
e.custom( start, val, "" );
}
});
return true;
});
},
queue: function(type, fn){
if ( jQuery.isFunction(type) || ( type && type.constructor == Array )) {
fn = type;
type = "fx";
}
if ( !type || (typeof type == "string" && !fn) )
return queue( this[0], type );
return this.each(function(){
if ( fn.constructor == Array )
queue(this, type, fn);
else {
queue(this, type).push( fn );
if ( queue(this, type).length == 1 )
fn.apply(this);
}
});
},
stop: function(clearQueue, gotoEnd){
var timers = jQuery.timers;
if (clearQueue)
this.queue([]);
this.each(function(){
for ( var i = timers.length - 1; i >= 0; i-- )
if ( timers[i].elem == this ) {
if (gotoEnd)
timers[i](true);
timers.splice(i, 1);
}
});
if (!gotoEnd)
this.dequeue();
return this;
}
});
var queue = function( elem, type, array ) {
if ( !elem )
return undefined;
type = type || "fx";
var q = jQuery.data( elem, type + "queue" );
if ( !q || array )
q = jQuery.data( elem, type + "queue", 
array ? jQuery.makeArray(array) : [] );
return q;
};
jQuery.fn.dequeue = function(type){
type = type || "fx";
return this.each(function(){
var q = queue(this, type);
q.shift();
if ( q.length )
q[0].apply( this );
});
};
jQuery.extend({
speed: function(speed, easing, fn) {
var opt = speed && speed.constructor == Object ? speed : {
complete: fn || !fn && easing || 
jQuery.isFunction( speed ) && speed,
duration: speed,
easing: fn && easing || easing && easing.constructor != Function && easing
};
opt.duration = (opt.duration && opt.duration.constructor == Number ? 
opt.duration : 
{ slow: 600, fast: 200 }[opt.duration]) || 400;
opt.old = opt.complete;
opt.complete = function(){
if ( opt.queue !== false )
jQuery(this).dequeue();
if ( jQuery.isFunction( opt.old ) )
opt.old.apply( this );
};
return opt;
},
easing: {
linear: function( p, n, firstNum, diff ) {
return firstNum + diff * p;
},
swing: function( p, n, firstNum, diff ) {
return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
}
},
timers: [],
timerId: null,
fx: function( elem, options, prop ){
this.options = options;
this.elem = elem;
this.prop = prop;
if ( !options.orig )
options.orig = {};
}
});
jQuery.fx.prototype = {
update: function(){
if ( this.options.step )
this.options.step.apply( this.elem, [ this.now, this ] );
(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
if ( this.prop == "height" || this.prop == "width" )
this.elem.style.display = "block";
},
cur: function(force){
if ( this.elem[this.prop] != null && this.elem.style[this.prop] == null )
return this.elem[ this.prop ];
var r = parseFloat(jQuery.css(this.elem, this.prop, force));
return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;
},
custom: function(from, to, unit){
this.startTime = (new Date()).getTime();
this.start = from;
this.end = to;
this.unit = unit || this.unit || "px";
this.now = this.start;
this.pos = this.state = 0;
this.update();
var self = this;
function t(gotoEnd){
return self.step(gotoEnd);
}
t.elem = this.elem;
jQuery.timers.push(t);
if ( jQuery.timerId == null ) {
jQuery.timerId = setInterval(function(){
var timers = jQuery.timers;
for ( var i = 0; i < timers.length; i++ )
if ( !timers[i]() )
timers.splice(i--, 1);
if ( !timers.length ) {
clearInterval( jQuery.timerId );
jQuery.timerId = null;
}
}, 13);
}
},
show: function(){
this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
this.options.show = true;
this.custom(0, this.cur());
if ( this.prop == "width" || this.prop == "height" )
this.elem.style[this.prop] = "1px";
jQuery(this.elem).show();
},
hide: function(){
this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
this.options.hide = true;
this.custom(this.cur(), 0);
},
step: function(gotoEnd){
var t = (new Date()).getTime();
if ( gotoEnd || t > this.options.duration + this.startTime ) {
this.now = this.end;
this.pos = this.state = 1;
this.update();
this.options.curAnim[ this.prop ] = true;
var done = true;
for ( var i in this.options.curAnim )
if ( this.options.curAnim[i] !== true )
done = false;
if ( done ) {
if ( this.options.display != null ) {
this.elem.style.overflow = this.options.overflow;
this.elem.style.display = this.options.display;
if ( jQuery.css(this.elem, "display") == "none" )
this.elem.style.display = "block";
}
if ( this.options.hide )
this.elem.style.display = "none";
if ( this.options.hide || this.options.show )
for ( var p in this.options.curAnim )
jQuery.attr(this.elem.style, p, this.options.orig[p]);
}
if ( done && jQuery.isFunction( this.options.complete ) )
this.options.complete.apply( this.elem );
return false;
} else {
var n = t - this.startTime;
this.state = n / this.options.duration;
this.pos = jQuery.easing[this.options.easing || (jQuery.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, this.options.duration);
this.now = this.start + ((this.end - this.start) * this.pos);
this.update();
}
return true;
}
};
jQuery.fx.step = {
scrollLeft: function(fx){
fx.elem.scrollLeft = fx.now;
},
scrollTop: function(fx){
fx.elem.scrollTop = fx.now;
},
opacity: function(fx){
jQuery.attr(fx.elem.style, "opacity", fx.now);
},
_default: function(fx){
fx.elem.style[ fx.prop ] = fx.now + fx.unit;
}
};
jQuery.fn.offset = function() {
var left = 0, top = 0, elem = this[0], results;
if ( elem ) with ( jQuery.browser ) {
var parent       = elem.parentNode, 
offsetChild  = elem,
offsetParent = elem.offsetParent, 
doc          = elem.ownerDocument,
safari2      = safari && parseInt(version) < 522 && !/adobeair/i.test(userAgent),
fixed        = jQuery.css(elem, "position") == "fixed";
if ( elem.getBoundingClientRect ) {
var box = elem.getBoundingClientRect();
add(box.left + Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),
box.top  + Math.max(doc.documentElement.scrollTop,  doc.body.scrollTop));
add( -doc.documentElement.clientLeft, -doc.documentElement.clientTop );
} else {
add( elem.offsetLeft, elem.offsetTop );
while ( offsetParent ) {
add( offsetParent.offsetLeft, offsetParent.offsetTop );
if ( mozilla && !/^t(able|d|h)$/i.test(offsetParent.tagName) || safari && !safari2 )
border( offsetParent );
if ( !fixed && jQuery.css(offsetParent, "position") == "fixed" )
fixed = true;
offsetChild  = /^body$/i.test(offsetParent.tagName) ? offsetChild : offsetParent;
offsetParent = offsetParent.offsetParent;
}
while ( parent && parent.tagName && !/^body|html$/i.test(parent.tagName) ) {
if ( !/^inline|table.*$/i.test(jQuery.css(parent, "display")) )
add( -parent.scrollLeft, -parent.scrollTop );
if ( mozilla && jQuery.css(parent, "overflow") != "visible" )
border( parent );
parent = parent.parentNode;
}
if ( (safari2 && (fixed || jQuery.css(offsetChild, "position") == "absolute")) || 
(mozilla && jQuery.css(offsetChild, "position") != "absolute") )
add( -doc.body.offsetLeft, -doc.body.offsetTop );
if ( fixed )
add(Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),
Math.max(doc.documentElement.scrollTop,  doc.body.scrollTop));
}
results = { top: top, left: left };
}
function border(elem) {
add( jQuery.curCSS(elem, "borderLeftWidth", true), jQuery.curCSS(elem, "borderTopWidth", true) );
}
function add(l, t) {
left += parseInt(l) || 0;
top += parseInt(t) || 0;
}
return results;
};
})();
jQuery.extend(jQuery.fn, {
validate: function( options ) {
if (!this.length) {
options && options.debug && window.console && console.warn( "nothing selected, can't validate, returning nothing" );
return;
}
var validator = jQuery.data(this[0], 'validator');
if ( validator ) {
return validator;
}
validator = new jQuery.validator( options, this[0] );
jQuery.data(this[0], 'validator', validator); 
if ( validator.settings.onsubmit ) {
this.find("input.cancel:submit").click(function() {
validator.cancelSubmit = true;
});
this.submit( function( event ) {
if ( validator.settings.debug )
event.preventDefault();
function handle() {
if ( validator.settings.submitHandler ) {
validator.settings.submitHandler.call( validator, validator.currentForm );
return false;
}
return true;
}
if ( validator.cancelSubmit ) {
validator.cancelSubmit = false;
return handle();
}
if ( validator.form() ) {
if ( validator.pendingRequest ) {
validator.formSubmitted = true;
return false;
}
return handle();
} else {
validator.focusInvalid();
return false;
}
});
}
return validator;
},
valid: function() {
if ( jQuery(this[0]).is('form')) {
return this.validate().form();
} else {
var valid = true;
var validator = jQuery(this[0].form).validate();
this.each(function() {
valid = validator.element(this) && valid;
});
return valid;
}
},
rules: function() {
var element = this[0];
var data = jQuery.validator.normalizeRules(
jQuery.extend(
{},
jQuery.validator.metadataRules(element),
jQuery.validator.classRules(element),
jQuery.validator.attributeRules(element),
jQuery.validator.staticRules(element)
), element);
var rules = [];
if (data.required) {
rules.push({method:'required', parameters: data.required});
delete data.required;
}
jQuery.each(data, function(method, value) {
rules.push({
method: method,
parameters: value
});
});
return rules;
},
push: function( t ) {
return this.setArray( this.add(t).get() );
}
});
jQuery.extend(jQuery.expr[":"], {
blank: "!jQuery.trim(a.value)",
filled: "!!jQuery.trim(a.value)",
unchecked: "!a.checked"
});
jQuery.format = function(source, params) {
if ( arguments.length == 1 ) 
return function() {
var args = jQuery.makeArray(arguments);
args.unshift(source);
return jQuery.format.apply( this, args );
};
if ( arguments.length > 2 && params.constructor != Array  ) {
params = jQuery.makeArray(arguments).slice(1);
}
if ( params.constructor != Array ) {
params = [ params ];
}
jQuery.each(params, function(i, n) {
source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
});
return source;
};
jQuery.validator = function( options, form ) {
this.settings = jQuery.extend( {}, jQuery.validator.defaults, options );
this.currentForm = form;
this.init();
};
jQuery.extend(jQuery.validator, {
defaults: {
messages: {},
errorClass: "error",
errorElement: "label",
focusInvalid: true,
errorContainer: jQuery( [] ),
errorLabelContainer: jQuery( [] ),
onsubmit: true,
ignore: [],
onfocusin: function(element) {
this.lastActive = element;
if ( this.settings.focusCleanup && !this.blockFocusCleanup ) {
this.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass );
this.errorsFor(element).hide();
}
},
onfocusout: function(element) {
if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {
this.element(element);
}
},
onkeyup: function(element) {
if ( element.name in this.submitted || element == this.lastElement ) {
this.element(element);
}
},
onclick: function(element) {
if ( element.name in this.submitted )
this.element(element);
},
highlight: function( element, errorClass ) {
jQuery( element ).addClass( errorClass );
},
unhighlight: function( element, errorClass ) {
jQuery( element ).removeClass( errorClass );
}
},
setDefaults: function(settings) {
jQuery.extend( jQuery.validator.defaults, settings );
},
messages: {
required: "This field is required.",
remote: "Please fix this field.",
email: "Please enter a valid email address.",
url: "Please enter a valid URL.",
date: "Please enter a valid date.",
dateISO: "Please enter a valid date (ISO).",
dateDE: "Bitte geben Sie ein gültiges Datum ein.",
number: "Please enter a valid number.",
numberDE: "Bitte geben Sie eine Nummer ein.",
digits: "Please enter only digits",
creditcard: "Please enter a valid credit card.",
equalTo: "Please enter the same value again.",
accept: "Please enter a value with a valid extension.",
maxlength: jQuery.format("Please enter no more than {0} characters."),
maxLength: jQuery.format("Please enter no more than {0} characters."),
minlength: jQuery.format("Please enter at least {0} characters."),
minLength: jQuery.format("Please enter at least {0} characters."),
rangelength: jQuery.format("Please enter a value between {0} and {1} characters long."),
rangeLength: jQuery.format("Please enter a value between {0} and {1} characters long."),
rangeValue: jQuery.format("Please enter a value between {0} and {1}."),
range: jQuery.format("Please enter a value between {0} and {1}."),
maxValue: jQuery.format("Please enter a value less than or equal to {0}."),
max: jQuery.format("Please enter a value less than or equal to {0}."),
minValue: jQuery.format("Please enter a value greater than or equal to {0}."),
min: jQuery.format("Please enter a value greater than or equal to {0}.")
},
autoCreateRanges: false,
prototype: {
init: function() {
this.labelContainer = jQuery(this.settings.errorLabelContainer);
this.errorContext = this.labelContainer.length && this.labelContainer || jQuery(this.currentForm);
this.containers = jQuery(this.settings.errorContainer).add( this.settings.errorLabelContainer );
this.submitted = {};
this.valueCache = {};
this.pendingRequest = 0;
this.pending = {};
this.invalid = {};
this.reset();
function delegate(event) {
var validator = jQuery.data(this[0].form, "validator");
validator.settings["on" + event.type] && validator.settings["on" + event.type].call(validator, this[0] );
}
jQuery(this.currentForm)
.delegate("focusin focusout keyup", ":text, :password, :file, select, textarea", delegate)
.delegate("click", ":radio, :checkbox", delegate);
},
form: function() {
this.prepareForm();
var elements = this.elements();
for ( var i = 0; elements[i]; i++ ) {
this.check( elements[i] );
}
jQuery.extend(this.submitted, this.errorMap);
this.invalid = jQuery.extend({}, this.errorMap);
jQuery(this.currentForm).triggerHandler("invalid-form.validate", [this]);
this.showErrors();
return this.valid();
},
element: function( element ) {
element = this.clean( element );
this.lastElement = element;
this.prepareElement( element );
var result = this.check( element );
if ( result ) {
delete this.invalid[element.name];
} else {
this.invalid[element.name] = true;
}
if ( !this.numberOfInvalids() ) {
this.toHide.push( this.containers );
}
this.showErrors();
return result;
},
showErrors: function(errors) {
if(errors) {
jQuery.extend( this.errorMap, errors );
this.errorList = [];
for ( var name in errors ) {
this.errorList.push({
message: errors[name],
element: this.findByName(name)[0]
});
}
this.successList = jQuery.grep( this.successList, function(element) {
return !(element.name in errors);
});
}
this.settings.showErrors
? this.settings.showErrors.call( this, this.errorMap, this.errorList )
: this.defaultShowErrors();
},
resetForm: function() {
if ( jQuery.fn.resetForm )
jQuery( this.currentForm ).resetForm();
this.prepareForm();
this.hideErrors();
this.elements().removeClass( this.settings.errorClass );
},
numberOfInvalids: function() {
var count = 0;
for ( var i in this.invalid )
count++;
return count;
},
hideErrors: function() {
this.addWrapper( this.toHide ).hide();
},
valid: function() {
return this.size() == 0;
},
size: function() {
return this.errorList.length;
},
focusInvalid: function() {
if( this.settings.focusInvalid ) {
try {
jQuery(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(":visible").focus();
} catch(e) {  }
}
},
findLastActive: function() {
var lastActive = this.lastActive;
return lastActive && jQuery.grep(this.errorList, function(n) {
return n.element.name == lastActive.name;
}).length == 1 && lastActive;
},
elements: function() {
var validator = this;
var rulesCache = {};
return jQuery([]).add(this.currentForm.elements)
.filter("input, select, textarea")
.not(":submit, :reset, [disabled]")
.not( this.settings.ignore )
.filter(function() {
!this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this);
if ( this.name in rulesCache || !jQuery(this).rules().length )
return false;
rulesCache[this.name] = true;
return true;
});
},
clean: function( selector ) {
return jQuery( selector )[0];
},
errors: function() {
return jQuery( this.settings.errorElement + "." + this.settings.errorClass, this.errorContext );
},
reset: function() {
this.successList = [];
this.errorList = [];
this.errorMap = {};
this.toShow = jQuery( [] );
this.toHide = jQuery( [] );
this.formSubmitted = false;
},
prepareForm: function() {
this.reset();
this.toHide = this.errors().push( this.containers );
},
prepareElement: function( element ) {
this.reset();
this.toHide = this.errorsFor( this.clean(element) );
},
check: function( element ) {
element = this.clean( element );
this.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass );
var rules = jQuery(element).rules();
for( var i = 0; rules[i]; i++) {
var rule = rules[i];
try {
var result = jQuery.validator.methods[rule.method].call( this, jQuery.trim(element.value), element, rule.parameters );
if ( result == "dependency-mismatch" )
return;
if ( result == "pending" ) {
this.toHide = this.toHide.not( this.errorsFor(element) );
return;
}
if( !result ) {
this.formatAndAdd( element, rule );
return false;
}
} catch(e) {
this.settings.debug && window.console && console.warn("exception occured when checking element " + element.id
+ ", check the '" + rule.method + "' method");
throw e;
}
}
if ( rules.length )
this.successList.push(element);
return true;
},
customMessage: function( name, method ) {
var m = this.settings.messages[name];
return m && (m.constructor == String
? m
: m[method]);
},
findDefined: function() {
for(var i = 0; i < arguments.length; i++) {
if (arguments[i] !== undefined)
return arguments[i];
}
return undefined;
},
defaultMessage: function( element, method) {
return this.findDefined(
this.customMessage( element.name, method ),
element.title || undefined,
jQuery.validator.messages[method],
"<strong>Warning: No message defined for " + element.name + "</strong>"
);
},
formatAndAdd: function( element, rule ) {
var message = this.defaultMessage( element, rule.method );
if ( typeof message == "function" ) 
message = message.call(this, rule.parameters, element);
this.errorList.push({
message: message,
element: element
});
this.errorMap[element.name] = message;
this.submitted[element.name] = message;
},
addWrapper: function(toToggle) {
if ( this.settings.wrapper )
toToggle.push( toToggle.parents( this.settings.wrapper ) );
return toToggle;
},
defaultShowErrors: function() {
for ( var i = 0; this.errorList[i]; i++ ) {
var error = this.errorList[i];
this.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass );
this.showLabel( error.element, error.message );
}
if( this.errorList.length ) {
this.toShow.push( this.containers );
}
if (this.settings.success) {
for ( var i = 0; this.successList[i]; i++ ) {
this.showLabel( this.successList[i] );
}
}
this.toHide = this.toHide.not( this.toShow );
this.hideErrors();
this.addWrapper( this.toShow ).show();
},
showLabel: function(element, message) {
var label = this.errorsFor( element );
if ( label.length ) {
label.removeClass().addClass( this.settings.errorClass );
label.attr("generated") && label.html(message);
} else {
label = jQuery("<" + this.settings.errorElement + "/>")
.attr({"for":  this.idOrName(element), generated: true})
.addClass(this.settings.errorClass)
.html(message || "");
if ( this.settings.wrapper ) {
label = label.hide().show().wrap("<" + this.settings.wrapper + ">").parent();
}
if ( !this.labelContainer.append(label).length )
this.settings.errorPlacement
? this.settings.errorPlacement(label, jQuery(element) )
: label.insertAfter(element);
}
if ( !message && this.settings.success ) {
label.text("");
typeof this.settings.success == "string"
? label.addClass( this.settings.success )
: this.settings.success( label );
}
this.toShow.push(label);
},
errorsFor: function(element) {
return this.errors().filter("[@for='" + this.idOrName(element) + "']");
},
idOrName: function(element) {
return this.checkable(element) ? element.name : element.id || element.name;
},
rules: function( element ) {
return jQuery(element).rules();
},
checkable: function( element ) {
return /radio|checkbox/i.test(element.type);
},
findByName: function( name ) {
var form = this.currentForm;
return jQuery(document.getElementsByName(name)).map(function(index, element) {
return element.form == form && element || null;
});
},
getLength: function(value, element) {
switch( element.nodeName.toLowerCase() ) {
case 'select':
return jQuery("option:selected", element).length;
case 'input':
if( this.checkable( element) )
return this.findByName(element.name).filter(':checked').length;
}
return value.length;
},
depend: function(param, element) {
return this.dependTypes[typeof param]
? this.dependTypes[typeof param](param, element)
: true;
},
dependTypes: {
"boolean": function(param, element) {
return param;
},
"string": function(param, element) {
return !!jQuery(param, element.form).length;
},
"function": function(param, element) {
return param(element);
}
},
optional: function(element) {
return !jQuery.validator.methods.required.call(this, jQuery.trim(element.value), element) && "dependency-mismatch";
},
startRequest: function(element) {
if (!this.pending[element.name]) {
this.pendingRequest++;
this.pending[element.name] = true;
}
},
stopRequest: function(element, valid) {
this.pendingRequest--;
if (this.pendingRequest < 0)
this.pendingRequest = 0;
delete this.pending[element.name];
if ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) {
jQuery(this.currentForm).submit();
}
},
previousValue: function(element) {
return jQuery.data(element, "previousValue") || jQuery.data(element, "previousValue", previous = {
old: null,
valid: true,
message: this.defaultMessage( element, "remote" )
});
}
},
classRuleSettings: {
required: {required: true},
email: {email: true},
url: {url: true},
date: {date: true},
dateISO: {dateISO: true},
dateDE: {dateDE: true},
number: {number: true},
numberDE: {numberDE: true},
digits: {digits: true},
creditcard: {creditcard: true}
},
addClassRules: function(className, rules) {
className.constructor == String ?
this.classRuleSettings[className] = rules :
jQuery.extend(this.classRuleSettings, className);
},
classRules: function(element) {
var rules = {};
var classes = jQuery(element).attr('class');
classes && jQuery.each(classes.split(' '), function() {
if (this in jQuery.validator.classRuleSettings) {
jQuery.extend(rules, jQuery.validator.classRuleSettings[this]);
}
});
return rules;
},
attributeRules: function(element) {
var rules = {};
var $element = jQuery(element);
for (method in jQuery.validator.methods) {
var value = $element.attr(method);
if (value !== undefined && value !== '') {
rules[method] = value;
}
}
if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {
delete rules.maxlength;
delete rules.maxLength;
}
return rules;
},
metadataRules: function(element) {
if (!jQuery.metadata) return {};
var meta = jQuery.data(element.form, 'validator').settings.meta;
return meta ?
jQuery(element).metadata()[meta] :
jQuery(element).metadata();
},
staticRules: function(element) {
var rules = {};
var validator = jQuery.data(element.form, 'validator');
if (validator.settings.rules) {
rules = jQuery.validator.normalizeRule(validator.settings.rules[element.name]) || {};
}
return rules;
},
normalizeRules: function(rules, element) {
jQuery.each({
minLength: 'minlength',
maxLength: 'maxlength',
rangeLength: 'rangelength',
minValue: 'min',
maxValue: 'max',
rangeValue: 'range'
}, function(dep, curr) {
if (rules[dep]) {
rules[curr] = rules[dep];
delete rules[dep];
}
});
jQuery.each(rules, function(rule, parameter) {
rules[rule] = jQuery.isFunction(parameter) ? parameter(element) : parameter;
});
jQuery.each(['minlength', 'maxlength', 'min', 'max'], function() {
if (rules[this]) {
rules[this] = Number(rules[this]);
}
});
jQuery.each(['rangelength', 'range'], function() {
if (rules[this]) {
rules[this] = [Number(rules[this][0]), Number(rules[this][1])];
}
});
if (jQuery.validator.autoCreateRanges) {
if (rules.min && rules.max) {
rules.range = [rules.min, rules.max];
delete rules.min;
delete rules.max;
}
if (rules.minlength && rules.maxlength) {
rules.rangelength = [rules.minlength, rules.maxlength];
delete rules.minlength;
delete rules.maxlength;
}
}
return rules;
},
normalizeRule: function(data) {
if( typeof data == "string" ) {
var transformed = {};
transformed[data] = true;
data = transformed;
}
return data;
},
addMethod: function(name, method, message) {
jQuery.validator.methods[name] = method;
jQuery.validator.messages[name] = message;
if (method.length < 3) {
jQuery.validator.addClassRules(name, jQuery.validator.normalizeRule(name));
}
},
methods: {
required: function(value, element, param) {
if ( !this.depend(param, element) )
return "dependency-mismatch";
switch( element.nodeName.toLowerCase() ) {
case 'select':
var options = jQuery("option:selected", element);
return options.length > 0 && ( element.type == "select-multiple" || (jQuery.browser.msie && !(options[0].attributes['value'].specified) ? options[0].text : options[0].value).length > 0);
case 'input':
if ( this.checkable(element) )
return this.getLength(value, element) > 0;
default:
return value.length > 0;
}
},
remote: function(value, element, param) {
if ( this.optional(element) )
return "dependency-mismatch";
var previous = this.previousValue(element);
if (!this.settings.messages[element.name] )
this.settings.messages[element.name] = {};
this.settings.messages[element.name].remote = typeof previous.message == "function" ? previous.message(value) : previous.message;
if ( previous.old !== value ) {
previous.old = value;
var validator = this;
this.startRequest(element);
var data = {};
if (typeof param == 'object') {
for (i in param) {
if (i != 'url') {
data[i] = param[i];
}
}
param = param.url;
}
data[element.name] = value;
jQuery.ajax({
url: param,
mode: "abort",
port: "validate" + element.name,
dataType: "json",
data: data,
success: function(response) {
if ( !response ) {
var errors = {};
errors[element.name] =  response || validator.defaultMessage( element, "remote" );
validator.showErrors(errors);
} else {
var submitted = validator.formSubmitted;
validator.prepareElement(element);
validator.formSubmitted = submitted;
validator.successList.push(element);
validator.showErrors();
}
previous.valid = response;
validator.stopRequest(element, response);
}
});
return "pending";
} else if( this.pending[element.name] ) {
return "pending";
}
return previous.valid;
},
minlength: function(value, element, param) {
return this.optional(element) || this.getLength(value, element) >= param;
},
minLength: function(value, element, param) {
return jQuery.validator.methods.minlength.apply(this, arguments);
},
maxlength: function(value, element, param) {
return this.optional(element) || this.getLength(value, element) <= param;
},
maxLength: function(value, element, param) {
return jQuery.validator.methods.maxlength.apply(this, arguments);
},
rangelength: function(value, element, param) {
var length = this.getLength(value, element);
return this.optional(element) || ( length >= param[0] && length <= param[1] );
},
rangeLength: function(value, element, param) {
return jQuery.validator.methods.rangelength.apply(this, arguments);
},
min: function( value, element, param ) {
return this.optional(element) || value >= param;
},
minValue: function() {
return jQuery.validator.methods.min.apply(this, arguments);
},
max: function( value, element, param ) {
return this.optional(element) || value <= param;
},
maxValue: function() {
return jQuery.validator.methods.max.apply(this, arguments);
},
range: function( value, element, param ) {
return this.optional(element) || ( value >= param[0] && value <= param[1] );
},
rangeValue: function() {
return jQuery.validator.methods.range.apply(this, arguments);
},
email: function(value, element) {
return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
},
url: function(value, element) {
return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
},
date: function(value, element) {
return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
},
dateISO: function(value, element) {
return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);
},
dateDE: function(value, element) {
return this.optional(element) || /^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value);
},
number: function(value, element) {
return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
},
numberDE: function(value, element) {
return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);
},
digits: function(value, element) {
return this.optional(element) || /^\d+$/.test(value);
},
creditcard: function(value, element) {
if ( this.optional(element) )
return "dependency-mismatch";
var nCheck = 0,
nDigit = 0,
bEven = false;
value = value.replace(/\D/g, "");
for (n = value.length - 1; n >= 0; n--) {
var cDigit = value.charAt(n);
var nDigit = parseInt(cDigit, 10);
if (bEven) {
if ((nDigit *= 2) > 9)
nDigit -= 9;
}
nCheck += nDigit;
bEven = !bEven;
}
return (nCheck % 10) == 0;
},
accept: function(value, element, param) {
param = typeof param == "string" ? param : "png|jpe?g|gif";
return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i")); 
},
equalTo: function(value, element, param) {
return value == jQuery(param).val();
}
}
});
;(function($) {
var ajax = $.ajax;
var pendingRequests = {};
$.ajax = function(settings) {
settings = jQuery.extend(settings, jQuery.extend({}, jQuery.ajaxSettings, settings));
var port = settings.port;
if (settings.mode == "abort") {
if ( pendingRequests[port] ) {
pendingRequests[port].abort();
}
return pendingRequests[port] = ajax.apply(this, arguments);
}
return ajax.apply(this, arguments);
};
})(jQuery);
;(function($) {
$.extend($.event.special, {
focusin: {
setup: function() {
if ($.browser.msie)
return false;
this.addEventListener("focus", $.event.special.focusin.handler, true);
},
teardown: function() {
if ($.browser.msie)
return false;
this.removeEventListener("focus", $.event.special.focusin.handler, true);
},
handler: function(event) {
var args = Array.prototype.slice.call( arguments, 1 );
args.unshift($.extend($.event.fix(event), { type: "focusin" }));
return $.event.handle.apply(this, args);
}
},
focusout: {
setup: function() {
if ($.browser.msie)
return false;
this.addEventListener("blur", $.event.special.focusout.handler, true);
},
teardown: function() {
if ($.browser.msie)
return false;
this.removeEventListener("blur", $.event.special.focusout.handler, true);
},
handler: function(event) {
var args = Array.prototype.slice.call( arguments, 1 );
args.unshift($.extend($.event.fix(event), { type: "focusout" }));
return $.event.handle.apply(this, args);
}
}
});
$.extend($.fn, {
delegate: function(type, delegate, handler) {
return this.bind(type, function(event) {
var target = $(event.target);
if (target.is(delegate)) {
return handler.apply(target, arguments);
}
});
},
triggerEvent: function(type, target) {
return this.triggerHandler(type, [jQuery.event.fix({ type: type, target: target })]);
}
})
})(jQuery);
(function($) {
$.fn.ajaxSubmit = function(options) {
if (typeof options == 'function')
options = { success: options };
options = $.extend({
url:  this.attr('action') || window.location.toString(),
type: this.attr('method') || 'GET'
}, options || {});
var veto = {};
this.trigger('form-pre-serialize', [this, options, veto]);
if (veto.veto) return this;
var a = this.formToArray(options.semantic);
if (options.data) {
options.extraData = options.data;
for (var n in options.data)
a.push( { name: n, value: options.data[n] } );
}
if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) return this;
this.trigger('form-submit-validate', [a, this, options, veto]);
if (veto.veto) return this;
var q = $.param(a);
if (options.type.toUpperCase() == 'GET') {
options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
options.data = null;  // data is null for 'get'
}
else
options.data = q; // data is the query string for 'post'
var $form = this, callbacks = [];
if (options.resetForm) callbacks.push(function() { $form.resetForm(); });
if (options.clearForm) callbacks.push(function() { $form.clearForm(); });
if (!options.dataType && options.target) {
var oldSuccess = options.success || function(){};
callbacks.push(function(data) {
$(options.target).html(data).each(oldSuccess, arguments);
});
}
else if (options.success)
callbacks.push(options.success);
options.success = function(data, status) {
for (var i=0, max=callbacks.length; i < max; i++)
callbacks[i](data, status, $form);
};
var files = $('input:file', this).fieldValue();
var found = false;
for (var j=0; j < files.length; j++)
if (files[j])
found = true;
if (options.iframe || found) { 
if ($.browser.safari && options.closeKeepAlive)
$.get(options.closeKeepAlive, fileUpload);
else
fileUpload();
}
else
$.ajax(options);
this.trigger('form-submit-notify', [this, options]);
return this;
function fileUpload() {
var form = $form[0];
var opts = $.extend({}, $.ajaxSettings, options);
var id = 'jqFormIO' + (new Date().getTime());
var $io = $('<iframe id="' + id + '" name="' + id + '" />');
var io = $io[0];
var op8 = $.browser.opera && window.opera.version() < 9;
if ($.browser.msie || op8) io.src = 'javascript:false;document.write("");';
$io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
var xhr = { // mock object
responseText: null,
responseXML: null,
status: 0,
statusText: 'n/a',
getAllResponseHeaders: function() {},
getResponseHeader: function() {},
setRequestHeader: function() {}
};
var g = opts.global;
if (g && ! $.active++) $.event.trigger("ajaxStart");
if (g) $.event.trigger("ajaxSend", [xhr, opts]);
var cbInvoked = 0;
var timedOut = 0;
setTimeout(function() {
var t = $form.attr('target'), a = $form.attr('action');
$form.attr({
target:   id,
encoding: 'multipart/form-data',
enctype:  'multipart/form-data',
method:   'POST',
action:   opts.url
});
if (opts.timeout)
setTimeout(function() { timedOut = true; cb(); }, opts.timeout);
var extraInputs = [];
try {
if (options.extraData)
for (var n in options.extraData)
extraInputs.push(
$('<input type="hidden" name="'+n+'" value="'+options.extraData[n]+'" />')
.appendTo(form)[0]);
$io.appendTo('body');
io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);
form.submit();
}
finally {
$form.attr('action', a);
t ? $form.attr('target', t) : $form.removeAttr('target');
$(extraInputs).remove();
}
}, 10);
function cb() {
if (cbInvoked++) return;
io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);
var ok = true;
try {
if (timedOut) throw 'timeout';
var data, doc;
doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
xhr.responseText = doc.body ? doc.body.innerHTML : null;
xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
xhr.getResponseHeader = function(header){
var headers = {'content-type': opts.dataType};
return headers[header];
};
if (opts.dataType == 'json' || opts.dataType == 'script') {
var ta = doc.getElementsByTagName('textarea')[0];
xhr.responseText = ta ? ta.value : xhr.responseText;
}
else if (opts.dataType == 'xml' && !xhr.responseXML && xhr.responseText != null) {
xhr.responseXML = toXml(xhr.responseText);
}
data = $.httpData(xhr, opts.dataType);
}
catch(e){
ok = false;
$.handleError(opts, xhr, 'error', e);
}
if (ok) {
opts.success(data, 'success');
if (g) $.event.trigger("ajaxSuccess", [xhr, opts]);
}
if (g) $.event.trigger("ajaxComplete", [xhr, opts]);
if (g && ! --$.active) $.event.trigger("ajaxStop");
if (opts.complete) opts.complete(xhr, ok ? 'success' : 'error');
setTimeout(function() {
$io.remove();
xhr.responseXML = null;
}, 100);
};
function toXml(s, doc) {
if (window.ActiveXObject) {
doc = new ActiveXObject('Microsoft.XMLDOM');
doc.async = 'false';
doc.loadXML(s);
}
else
doc = (new DOMParser()).parseFromString(s, 'text/xml');
return (doc && doc.documentElement && doc.documentElement.tagName != 'parsererror') ? doc : null;
};
};
};
$.fn.ajaxForm = function(options) {
return this.ajaxFormUnbind().bind('submit.form-plugin',function() {
$(this).ajaxSubmit(options);
return false;
}).each(function() {
$(":submit,input:image", this).bind('click.form-plugin',function(e) {
var $form = this.form;
$form.clk = this;
if (this.type == 'image') {
if (e.offsetX != undefined) {
$form.clk_x = e.offsetX;
$form.clk_y = e.offsetY;
} else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin
var offset = $(this).offset();
$form.clk_x = e.pageX - offset.left;
$form.clk_y = e.pageY - offset.top;
} else {
$form.clk_x = e.pageX - this.offsetLeft;
$form.clk_y = e.pageY - this.offsetTop;
}
}
setTimeout(function() { $form.clk = $form.clk_x = $form.clk_y = null; }, 10);
});
});
};
$.fn.ajaxFormUnbind = function() {
this.unbind('submit.form-plugin');
return this.each(function() {
$(":submit,input:image", this).unbind('click.form-plugin');
});
};
$.fn.formToArray = function(semantic) {
var a = [];
if (this.length == 0) return a;
var form = this[0];
var els = semantic ? form.getElementsByTagName('*') : form.elements;
if (!els) return a;
for(var i=0, max=els.length; i < max; i++) {
var el = els[i];
var n = el.name;
if (!n) continue;
if (semantic && form.clk && el.type == "image") {
if(!el.disabled && form.clk == el)
a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
continue;
}
var v = $.fieldValue(el, true);
if (v && v.constructor == Array) {
for(var j=0, jmax=v.length; j < jmax; j++)
a.push({name: n, value: v[j]});
}
else if (v !== null && typeof v != 'undefined')
a.push({name: n, value: v});
}
if (!semantic && form.clk) {
var inputs = form.getElementsByTagName("input");
for(var i=0, max=inputs.length; i < max; i++) {
var input = inputs[i];
var n = input.name;
if(n && !input.disabled && input.type == "image" && form.clk == input)
a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
}
}
return a;
};
$.fn.formSerialize = function(semantic) {
return $.param(this.formToArray(semantic));
};
$.fn.fieldSerialize = function(successful) {
var a = [];
this.each(function() {
var n = this.name;
if (!n) return;
var v = $.fieldValue(this, successful);
if (v && v.constructor == Array) {
for (var i=0,max=v.length; i < max; i++)
a.push({name: n, value: v[i]});
}
else if (v !== null && typeof v != 'undefined')
a.push({name: this.name, value: v});
});
return $.param(a);
};
$.fn.fieldValue = function(successful) {
for (var val=[], i=0, max=this.length; i < max; i++) {
var el = this[i];
var v = $.fieldValue(el, successful);
if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length))
continue;
v.constructor == Array ? $.merge(val, v) : val.push(v);
}
return val;
};
$.fieldValue = function(el, successful) {
var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
if (typeof successful == 'undefined') successful = true;
if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
(t == 'checkbox' || t == 'radio') && !el.checked ||
(t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
tag == 'select' && el.selectedIndex == -1))
return null;
if (tag == 'select') {
var index = el.selectedIndex;
if (index < 0) return null;
var a = [], ops = el.options;
var one = (t == 'select-one');
var max = (one ? index+1 : ops.length);
for(var i=(one ? index : 0); i < max; i++) {
var op = ops[i];
if (op.selected) {
var v = $.browser.msie && !(op.attributes['value'].specified) ? op.text : op.value;
if (one) return v;
a.push(v);
}
}
return a;
}
return el.value;
};
$.fn.clearForm = function() {
return this.each(function() {
$('input,select,textarea', this).clearFields();
});
};
$.fn.clearFields = $.fn.clearInputs = function() {
return this.each(function() {
var t = this.type, tag = this.tagName.toLowerCase();
if (t == 'text' || t == 'password' || tag == 'textarea')
this.value = '';
else if (t == 'checkbox' || t == 'radio')
this.checked = false;
else if (tag == 'select')
this.selectedIndex = -1;
});
};
$.fn.resetForm = function() {
return this.each(function() {
if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType))
this.reset();
});
};
$.fn.enable = function(b) { 
if (b == undefined) b = true;
return this.each(function() { 
this.disabled = !b 
});
};
$.fn.select = function(select) {
if (select == undefined) select = true;
return this.each(function() { 
var t = this.type;
if (t == 'checkbox' || t == 'radio')
this.checked = select;
else if (this.tagName.toLowerCase() == 'option') {
var $sel = $(this).parent('select');
if (select && $sel[0] && $sel[0].type == 'select-one') {
$sel.find('option').select(false);
}
this.selected = select;
}
});
};
})(jQuery);
jQuery.cookie = function(name, value, options) {
if (typeof value != 'undefined') { // name and value given, set cookie
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(); // use expires attribute, max-age is not supported by IE
}
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 { // only name given, get cookie
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(jQuery){
jQuery.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'], function(i,attr){
jQuery.fx.step[attr] = function(fx){
if ( fx.state == 0 ) {
fx.start = getColor( fx.elem, attr );
fx.end = getRGB( fx.end );
}
fx.elem.style[attr] = "rgb(" + [
Math.max(Math.min( parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0]), 255), 0),
Math.max(Math.min( parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1]), 255), 0),
Math.max(Math.min( parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2]), 255), 0)
].join(",") + ")";
}
});
function getRGB(color) {
var result;
if ( color && color.constructor == Array && color.length == 3 )
return color;
if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
return [parseInt(result[1]), parseInt(result[2]), parseInt(result[3])];
if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55];
if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];
if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];
return colors[jQuery.trim(color).toLowerCase()];
}
function getColor(elem, attr) {
var color;
do {
color = jQuery.curCSS(elem, attr);
if ( color != '' && color != 'transparent' || jQuery.nodeName(elem, "body") )
break; 
attr = "backgroundColor";
} while ( elem = elem.parentNode );
return getRGB(color);
};
var colors = {
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]
};
})(jQuery);
(function($){
$.fn.bgIframe = $.fn.bgiframe = function(s) {
if ( $.browser.msie && /6.0/.test(navigator.userAgent) ) {
s = $.extend({
top     : 'auto', // auto == .currentStyle.borderTopWidth
left    : 'auto', // auto == .currentStyle.borderLeftWidth
width   : 'auto', // auto == offsetWidth
height  : 'auto', // auto == offsetHeight
opacity : true,
src     : 'javascript:false;'
}, s || {});
var prop = function(n){return n&&n.constructor==Number?n+'px':n;},
html = '<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+s.src+'"'+
'style="display:block;position:absolute;z-index:-1;'+
(s.opacity !== false?'filter:Alpha(Opacity=\'0\');':'')+
'top:'+(s.top=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+\'px\')':prop(s.top))+';'+
'left:'+(s.left=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+\'px\')':prop(s.left))+';'+
'width:'+(s.width=='auto'?'expression(this.parentNode.offsetWidth+\'px\')':prop(s.width))+';'+
'height:'+(s.height=='auto'?'expression(this.parentNode.offsetHeight+\'px\')':prop(s.height))+';'+
'"/>';
return this.each(function() {
if ( $('> iframe.bgiframe', this).length == 0 )
this.insertBefore( document.createElement(html), this.firstChild );
});
}
return this;
};
})(jQuery);
var playlists_json = []
$(function() {
playlist_add_small_plus_buttons();
})
function playlist_add_small_plus_buttons() {
$('.addable_to_playlist .add_to_playlist')	
.remove()
add_to_playlist_img =
$('<img />')
.attr('src', _wwwstatic + '/images_new/add_icon.jpg')
.attr('alt', 'قويۇش تىزىملىكىگە قوشۇش')
.attr('title', 'قويۇش تىزىملىكىگە قوشۇش')
.addClass('add_to_playlist')
.hover(
function() { $(this).attr('src', _wwwstatic + '/images_new/add_icon_on.jpg') },
function() { $(this).attr('src', _wwwstatic + '/images_new/add_icon.jpg') }
)
add_to_playlist =
$('<div></div>')
.addClass('add_icon')
.append(add_to_playlist_img)
$('.addable_to_playlist')
.prepend(add_to_playlist)
.unbind()
.hover(
function() {
$('.add_to_playlist', this)
.show()
},
function() {
$('.add_to_playlist', this)
.hide()
}
)
$('.addable_to_playlist .add_to_playlist')
.click(function() {
if ((typeof _userid != 'undefined') && (_userid > 0)) {
obj = $(this).parent().parent();
if (obj.attr('hash')) {
$(this)
.hide()
playlist_add_item_by_hash(obj.attr('hash'), this);
} else {
console.error(obj);
console.error('does not have a hash');
}
} else {
alert('Siz tehi tizimlinip kirmepsiz!');
}
})
.hide()
}
var global_top_override = -40
var global_left_override = 0
function playlist_add_item_by_hash(hash, addable_object, top_override, left_override) {
if (!top_override) top_override = -40
global_top_override = top_override
if (!left_override) left_override = 0
global_left_override = left_override
if (playlists_json.length == 0) {
$.getJSON(
'source/playlist_get_all.php',
{},
function(data) {
playlists_json = data
playlist_add_item_by_hash_callback(hash, addable_object);
}
)
} else {
playlist_add_item_by_hash_callback(hash, addable_object);
}
}
function playlist_add_item_by_hash_callback(hash, addable_object) {
$('.add_to_playlist_feedback').remove();
input = $('<div></div>')
.addClass('playlist_new')
.append('Playlist nou: ')
.append(
$('<input type="text" class="playlist_new_text" />')
.keypress(function(e) {
if (e.keyCode == 13) {
playlist_add_item_by_hash_to(hash, 0, $(this).val())
}
})
)
.append(
$('<input type="button" class="playlist_new_ok" value="Salveaza" />')
.click(function() {
playlist_add_item_by_hash_to(hash, 0, $('input[type=text]', $(this).parent()).val())
})
)
div = $('<div></div>')
.addClass('link_container')
div.append(
$('<div><p>Adauga in playlist</p></div>')
.addClass('playlist_top_bar')
.append(
$('<div>X</div>')
.attr('title', 'Inchide')
.addClass('playlist_close_btn')
.click(function() {
$(this).parent().parent().parent().hide()
})
)
)
.append(input)
div.append	(
$('<div>Playlist-urile mele</div>')
.addClass('playlisturi_top')
)
div_inside = $('<div></div>')
.addClass('playlisturi')
div.append(
div_inside
)
for (i in playlists_json) {
div_inside.append(
$('<a></a>')
.css('display', 'block')
.text(playlists_json[i].title)
.attr('href', 'javascript:;')
.attr('playlist_id', playlists_json[i].id)
.click(function() {
playlist_add_item_by_hash_to(hash, $(this).attr('playlist_id'))
})
)
}
if (playlists_json.length == 0) {
div_inside.append(
$('<div style="padding: 10px; text-align: center">Nu ai nici un playlist. Foloseste casuta de deasupra pentru a crea un playlist nou!</div>')
)
}
$(addable_object).parent()
.append(
$('<div></div>')
.addClass('add_to_playlist_feedback')
)
$('.add_to_playlist_feedback', $(addable_object).parent())
.attr('hash', hash)
.html(div)
.show()
.absolutize()
.css('margin-top', global_top_override + 'px')
.css('margin-left', global_left_override + 'px')
.appendTo('body')
}
function playlist_add_item_by_hash_to(hash, playlist_id, playlist_new_name) {
if ((playlist_id == 0) && (playlist_new_name == '')) {
alert('Scrie numele noului playlist (sau alege dintre cele pe care le-ai creat deja)')
} else {
$('.add_to_playlist_feedback[hash=' + hash + ']')
.html('<img src="' + _wwwstatic + '/images/loader.gif" style="margin: 42px 0px 0px 92px" />')
$.ajax({
url		: 'source/__proxy_update.php',
type	: 'POST',
data	: {
_update		: 'playlist',
_only_result: 1,
action		: 'add',
hash		: hash,
playlist_id	: playlist_id,
playlist_new: playlist_new_name
},
complete: function(a, b, c) {
$('.add_to_playlist_feedback[hash=' + hash + ']')
.html(
$('<div></div>')
.css('padding', '40px 20px 0px 20px')
.css('text-align', 'center')
.text(a.responseText)
)
$('.add_to_playlist_feedback[hash=' + hash + ']')
.fadeOut(2500)
$.getJSON(
'source/playlist_get_all.php',
{},
function(data) {
playlists_json = data
}
)
}
})
}
}
function playlist_delete_item(delete_btn) {
delete_btn = $(delete_btn)
hash = delete_btn.attr('hash')
$.ajax({
url		: 'source/__proxy_update.php',
type	: 'POST',
data	: {
_update		: 'playlist',
_only_result: 1,
action		: 'delete',
hash		: hash,
playlist_id	: current_playlist_id
},
complete: function(o) {
if (o.responseText == 'item deleted ok') {
delete_btn.parent().parent().hide()
} else {
alert(o.responseText)
}
}
})
}
function playlist_create_sortable(playlist_id) {
$('.play_all_list')
.css('cursor', 'move')
$('#playlist_wrap')
.Sortable({
accept		: 'play_all_list',
helperclass	: 'play_all_list_helper',
opacity		: 0.9,
axis		: 'vertically',
onchange	: function() {
serialized = $.SortSerialize('playlist_wrap');
$.ajax({
url		: 'source/__proxy_update.php',
type	: 'POST',
data	: '_update=playlist&action=sort&playlist_id=' + playlist_id + '&' + serialized.hash
})
tmp_next_playlist_number = 1;
$('#playlist_wrap .list_number')
.each(function() {
$(this)
.html(tmp_next_playlist_number + '.');
tmp_next_playlist_number++;
})
}
})
}
function playlist_play_stop() {
if ($.cookie('plplaystop') == 'yes') {
$.cookie('plplaystop', 'no', { path: '/', domain: '.umid.cn'})
} else {
$.cookie('plplaystop', 'yes', { path: '/', domain: '.umid.cn'})
}
$('.plplaystop')
.toggleClass('yes')
}
function playlist_toggle_shuffle() {
if ($.cookie('plshuffle') == 'yes') {
$.cookie('plshuffle', 'no', { path: '/', domain: '.umid.cn'})
$('.playlist_shuffle_off, .playlist_shuffle_on')
.removeClass('playlist_shuffle_on')
.addClass('playlist_shuffle_off')
} else {
$.cookie('plshuffle', 'yes', { path: '/', domain: '.umid.cn'})
$('.playlist_shuffle_off, .playlist_shuffle_on')
.removeClass('playlist_shuffle_off')
.addClass('playlist_shuffle_on')
}
}
function playlist_toggle_autonext() {
$('.playlist_play_on, .playlist_play_off')
.toggleClass('playlist_play_on')
.toggleClass('playlist_play_off')
if (playlist_media_onfinish_was_called) {
if ($('.playlist_play_on, .playlist_play_off').is('.playlist_play_on')) {
playlist_go_next()
}
}
}
function playlist_go_prev() {
if ($.cookie('plshuffle') == 'yes') {
playlist_go_shuffle_next();
} else {
s = $('#playlist_viewfile_list .selected')
if (s.length == 0) { //current file not in playlist
alert('Current file not in playlist')
} else {
if (s.prev().length == 0) { //first item
alert('Ai ajuns la primul fisier')
} else { //advance to prev item
s.prev().addClass('selected')
s.removeClass('selected')
document.location.href = s.prev().attr('href')
}
}
}
}
function playlist_go_next(go_to_first_if_last) {
if ($.cookie('plshuffle') == 'yes') {
playlist_go_shuffle_next();
} else {
s = $('#playlist_viewfile_list .selected')
if (s.length == 0) { //current file not in playlist
alert('Current file not in playlist')
} else {
if (s.next().length == 0) { //last item
if (go_to_first_if_last) {
t = $('#playlist_viewfile_list li')
if (t.length) {
document.location.href = t.attr('href')
} else {
alert('Nu ai fisiere in playlist')
}
} else {
if ($('.playlist_play_on, .playlist_play_off').is('.playlist_play_on')) {
$('.playlist_play_on')
.removeClass('playlist_play_on')
.addClass('playlist_play_off')
} else {
alert('Ai ajuns la ultimul fisier')
}
}
} else { //advance to next item
s.next().addClass('selected')
s.removeClass('selected')
document.location.href = s.next().attr('href')
}
}
}
}
function playlist_go_shuffle_next() {
t = $('#playlist_viewfile_list li')
if (t.length > 0) {
if (t.length == 1) { //same track
} else {
t = $('#playlist_viewfile_list li:not(.selected)')
rnd = Math.floor(Math.random() * t.length)
t = t.eq(rnd)
$('#playlist_viewfile_list li.selected').removeClass('selected')
t.addClass('selected')
$('.playlist_viewfile_content').animate({scrollTop: rnd * 26}, 1)
document.location.href = t.attr('href')
}
} else {
}
}
var playlist_media_onfinish_was_called = false;
function playlist_media_onfinish() {
if ($('.playlist_play_on, .playlist_play_off').is('.playlist_play_on')) {
playlist_go_next();
}
playlist_media_onfinish_was_called = true;
}
function playlist_toggle_favorite(playlist_id) {
$('#playlist_viewfile_favorite_changer [tag=favorite_yes]')
.hide()
$('#playlist_viewfile_favorite_changer [tag=favorite_no]')
.hide()
$('#playlist_viewfile_favorite_changer [tag=loader]')
.show()
$.ajax({
url		: 'source/__proxy_update.php',
type	: 'POST',
data	: {
_update		: 'playlist',
_only_result: 1,
action		: 'favorite',
playlist_id	: playlist_id
},
complete: function(o) {
$('#playlist_viewfile_favorite_changer [tag=loader]')
.hide()
if (o.responseText == 'playlist_favorite_added') {
$('#playlist_viewfile_favorite_changer [tag=favorite_yes]')
.show()
} else if (o.responseText == 'playlist_favorite_deleted') {
$('#playlist_viewfile_favorite_changer [tag=favorite_no]')
.show()
} else {
$('#playlist_viewfile_favorite_changer [tag=favorite_no]')
.show()
alert(o.responseText)
}
}
})
}
jQuery.fn.absolutize = function() {
return this.each(function() {
var element = jQuery(this);
if (element.css('position') == 'absolute') {
}
var offsets = element.offset();
var top = offsets.top;
var left = offsets.left;
var width = element[0].clientWidth;
var height = element[0].clientHeight;
element._originalLeft = left - parseFloat(element.css("left") || 0);
element._originalTop = top - parseFloat(element.css("top") || 0);
element._originalWidth = element.css("width");
element._originalHeight = element.css("height");
element.css("position", "absolute");
element.css("top", top + 'px');
element.css("left", left + 'px');
element.css("width", width + 'px');
element.css("height", height + 'px');
return element;
});
}
var sunt_cu_mausul_pe_bara = false
function bara_init(update_interval) {
$("#hide_footer")
.click(function() {
$("#footer_fixed")
.slideUp()
$("#arata_bara")
.slideDown()
$.cookie('hide_bara', 'true', {expires: 30, path: '/', domain: 'umid.cn'})
})
$("#show_footer")
.click(function() {
$("#arata_bara")
.slideUp()
$("#footer_fixed")
.slideDown()
$.cookie('hide_bara', null, {expires: -30, path: '/', domain: 'umid.cn'})
})
$('.footer_tab_button, .footerbar_title span')
.click(function() {
toggler = $(this).is('.footer_button_on') || $(this).is('span')
$('.footer_tab_holder').hide()
$('.footer_button_on').removeClass('footer_button_on')
if (!toggler) {
holder = $('#' + $(this).attr('id').replace(/_tab_/, '_'))
holder.show()
$(this).addClass('footer_button_on')
loader = $('[tag=loader]', holder)
if (loader.length) {
$('.' + holder.attr('id') + '_content')
.load(
$(loader).attr('href')
)
}
}
if ($(this).is('#footer_tab_notificari')) {
$(this)
.removeClass('footer_button_flashy')
}
})
setInterval(
function() {
if ($('#footer_tab_notificari').is('.footer_button_on')) {
} else if ($.cookie('hide_bara') == 'true') {
} else {
$.ajax({
url: 'source/bara/bara_notificari_count.php?u=' + _username,
complete: function(o, status) {
resp = o.responseText
if (resp == '') {
resp = '0'
}
if ($('#footer_tab_notificari_count').text() != resp) {
$('#footer_tab_notificari_count')
.text(resp) //update number anyway
$('.footer_notificari_content')
.html('<img src="static/images/loader.gif" alt="Loading..." tag="loader" href="source/bara/bara_notificari.php?u=' + _username + '" />')
if (resp == '0') {
$('#footer_tab_notificari')
.removeClass('footer_button_flashy')
$('#footer_tab_notificari_count_holder')
.hide()
} else {
$('#footer_tab_notificari_count_holder')
.show()
$('#footer_tab_notificari').addClass('footer_button_flashy')
setTimeout(function(){$('#footer_tab_notificari').toggleClass('footer_button_flashy')},200)
setTimeout(function(){$('#footer_tab_notificari').toggleClass('footer_button_flashy')},400)
setTimeout(function(){$('#footer_tab_notificari').toggleClass('footer_button_flashy')},600)
setTimeout(function(){$('#footer_tab_notificari').toggleClass('footer_button_flashy')},800)
setTimeout(function(){$('#footer_tab_notificari').toggleClass('footer_button_flashy')},1000)
setTimeout(function(){$('#footer_tab_notificari').toggleClass('footer_button_flashy')},1200)
}
}
}
})
}
},
update_interval * 1000
)
}
function bara_mesaje_reload(with_mass, delete_message_id, page) {
$(delete_message_id ? '#bara_mesaje_sterge_loader_' + delete_message_id : '.footer_mesaje_content')
.html('<img src="static/images/loader.gif" />')
$('.footer_mesaje_content')
.load(
'source/bara/bara_mesaje.php?u=' + _username,
{
with_mass			: with_mass ? 1 : 0,
delete_message_id	: delete_message_id,
page				: page
}
)
}
function bara_notificari_reload(thisul, delete_notification_id, page) {
$(thisul)
.html('<img src="static/images/loader.gif" />')
$('.footer_notificari_content')
.load(
'source/bara/bara_notificari.php?u=' + _username,
{
delete_notification	: delete_notification_id,
page				: page
}
)
}
function browserdetect() {
var agent = navigator.userAgent.toLowerCase();
this.isIE      = agent.indexOf("msie") > -1;
this.ieVer = this.isIE ? /msie\s(\d\.\d)/.exec(agent)[1] : 0;
this.isMoz     = agent.indexOf('firefox') != -1;
this.isSafari  = agent.indexOf('safari') != -1;
this.quirksMode= this.isIE && (!document.compatMode || document.compatMode.indexOf("BackCompat") > -1);
this.isOp      = 'opera' in window;
this.isWebKit  = agent.indexOf('webkit') != -1;
if (this.isIE) {
this.get_style = function(obj, prop) {
if (!(prop in obj.currentStyle)) return "";
var matches = /^([\d.]+)(\w*)/.exec(obj.currentStyle[prop]);
if (!matches) return obj.currentStyle[prop];
if (matches[1] == 0) return '0';
if (matches[2] && matches[2] !== 'px') {
var style = obj.style.left;
var rtStyle = obj.runtimeStyle.left;
obj.runtimeStyle.left = obj.currentStyle.left;
obj.style.left = matches[1] + matches[2];
matches[0] = obj.style.pixelLeft;
obj.style.left = style;
obj.runtimeStyle.left = rtStyle;
}
return matches[0];
};
}
else {
this.get_style = function(obj, prop) {
prop = prop.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
return document.defaultView.getComputedStyle(obj, '').getPropertyValue(prop);
};
}
}
var curvyBrowser = new browserdetect;
if (curvyBrowser.isIE) {
try {
document.execCommand("BackgroundImageCache", false, true);
}
catch(e) {};
}
function curvyCnrSpec(selText) {
this.selectorText = selText;
this.tlR = this.trR = this.blR = this.brR = 0;
this.tlu = this.tru = this.blu = this.bru = "";
this.antiAlias = true; // default true
}
curvyCnrSpec.prototype.setcorner = function(tb, lr, radius, unit) {
if (!tb) { // no corner specified
this.tlR = this.trR = this.blR = this.brR = parseInt(radius);
this.tlu = this.tru = this.blu = this.bru = unit;
}
else { // corner specified
propname = tb.charAt(0) + lr.charAt(0);
this[propname + 'R'] = parseInt(radius);
this[propname + 'u'] = unit;
}
}
curvyCnrSpec.prototype.get = function(prop) {
if (/^(t|b)(l|r)(R|u)$/.test(prop)) return this[prop];
if (/^(t|b)(l|r)Ru$/.test(prop)) {
var pname = prop.charAt(0) + prop.charAt(1);
return this[pname + 'R'] + this[pname + 'u'];
}
if (/^(t|b)Ru?$/.test(prop)) {
var tb = prop.charAt(0);
tb += this[tb + 'lR'] > this[tb + 'rR'] ? 'l' : 'r';
var retval = this[tb + 'R'];
if (prop.length === 3 && prop.charAt(2) === 'u')
retval += this[tb = 'u'];
return retval;
}
throw new Error('Don\'t recognize property ' + prop);
}
curvyCnrSpec.prototype.radiusdiff = function(tb) {
if (tb !== 't' && tb !== 'b') throw new Error("Param must be 't' or 'b'");
return Math.abs(this[tb + 'lR'] - this[tb + 'rR']);
}
curvyCnrSpec.prototype.setfrom = function(obj) {
this.tlu = this.tru = this.blu = this.bru = 'px'; // default to px
if ('tl' in obj) this.tlR = obj.tl.radius;
if ('tr' in obj) this.trR = obj.tr.radius;
if ('bl' in obj) this.blR = obj.bl.radius;
if ('br' in obj) this.brR = obj.br.radius;
if ('antiAlias' in obj) this.antiAlias = obj.antiAlias;
};
curvyCnrSpec.prototype.cloneOn = function(box) { // not needed by IE
var props = ['tl', 'tr', 'bl', 'br'];
var converted = 0;
var i, propu;
for (i in props) if (!isNaN(i)) {
propu = this[props[i] + 'u'];
if (propu !== '' && propu !== 'px') {
converted = new curvyCnrSpec;
break;
}
}
if (!converted)
converted = this; // no need to clone
else {
var propi, propR, save = curvyBrowser.get_style(box, 'left');
for (i in props) if (!isNaN(i)) {
propi = props[i];
propu = this[propi + 'u'];
propR = this[propi + 'R'];
if (propu !== 'px') {
var save = box.style.left;
box.style.left = propR + propu;
propR = box.style.pixelLeft;
box.style.left = save;
}
converted[propi + 'R'] = propR;
converted[propi + 'u'] = 'px';
}
box.style.left = save;
}
return converted;
}
curvyCnrSpec.prototype.radiusSum = function(tb) {
if (tb !== 't' && tb !== 'b') throw new Error("Param must be 't' or 'b'");
return this[tb + 'lR'] + this[tb + 'rR'];
}
curvyCnrSpec.prototype.radiusCount = function(tb) {
var count = 0;
if (this[tb + 'lR']) ++count;
if (this[tb + 'rR']) ++count;
return count;
}
curvyCnrSpec.prototype.cornerNames = function() {
var ret = [];
if (this.tlR) ret.push('tl');
if (this.trR) ret.push('tr');
if (this.blR) ret.push('bl');
if (this.brR) ret.push('br');
return ret;
}
function operasheet(sheetnumber) {
var txt = document.styleSheets.item(sheetnumber).ownerNode.text;
txt = txt.replace(/\/\*(\n|\r|.)*?\*\//g, ''); // strip comments
var pat = new RegExp("^\s*([\\w.#][-\\w.#, ]+)[\\n\\s]*\\{([^}]+border-((top|bottom)-(left|right)-)?radius[^}]*)\\}", "mg");
var matches;
this.rules = [];
while ((matches = pat.exec(txt)) !== null) {
var pat2 = new RegExp("(..)border-((top|bottom)-(left|right)-)?radius:\\s*([\\d.]+)(in|em|px|ex|pt)", "g");
var submatches, cornerspec = new curvyCnrSpec(matches[1]);
while ((submatches = pat2.exec(matches[2])) !== null)
if (submatches[1] !== "z-")
cornerspec.setcorner(submatches[3], submatches[4], submatches[5], submatches[6]);
this.rules.push(cornerspec);
}
}
operasheet.contains_border_radius = function(sheetnumber) {
return /border-((top|bottom)-(left|right)-)?radius/.test(document.styleSheets.item(sheetnumber).ownerNode.text);
}
function curvyCorners() {
var i, j, boxCol, settings, startIndex;
if (typeof arguments[0] !== "object") throw curvyCorners.newError("First parameter of curvyCorners() must be an object.");
if (arguments[0] instanceof curvyCnrSpec) {
settings = arguments[0];
if (!settings.selectorText && typeof arguments[1] === 'string')
settings.selectorText = arguments[1];
}
else {
if (typeof arguments[1] !== "object" && typeof arguments[1] !== "string") throw curvyCorners.newError("Second parameter of curvyCorners() must be an object or a class name.");
j = arguments[1];
if (typeof j !== 'string') j = '';
if (j !== '' && j.charAt(0) !== '.' && 'autoPad' in arguments[0]) j = '.' + j; // for compatibility, prefix with dot
settings = new curvyCnrSpec(j);
settings.setfrom(arguments[0]);
}
if (settings.selectorText) {
startIndex = 0;
var args = settings.selectorText.replace(/\s+$/,'').split(/,\s*/); // handle comma-separated selector list
boxCol = new Array;
function idof(str) {
var ret = str.split('#');
return (ret.length === 2 ? "#" : "") + ret.pop();
}
for (i = 0; i < args.length; ++i) {
var arg = idof(args[i]);
var argbits = arg.split(' ');
switch (arg.charAt(0)) {
case '#' : // id
j = argbits.length === 1 ? arg : argbits[0];
j = document.getElementById(j.substr(1));
if (j === null)
curvyCorners.alert("No object with ID " + arg + " exists yet.\nCall curvyCorners(settings, obj) when it is created.");
else if (argbits.length === 1)
boxCol.push(j);
else
boxCol = boxCol.concat(curvyCorners.getElementsByClass(argbits[1], j));
break;
default :
if (argbits.length === 1)
boxCol = boxCol.concat(curvyCorners.getElementsByClass(arg));
else {
var encloser = curvyCorners.getElementsByClass(argbits[0]);
for (j = 0; j < encloser.length; ++j) {
boxCol = boxCol.concat(curvyCorners.getElementsByClass(argbits[1], encloser));
}
}
}
}
}
else {
startIndex = 1;
boxCol = arguments;
}
for (i = startIndex, j = boxCol.length; i < j; ++i) {
if (boxCol[i] && (!('IEborderRadius' in boxCol[i].style) || boxCol[i].style.IEborderRadius != 'set')) {
if (boxCol[i].className && boxCol[i].className.indexOf('curvyRedraw') !== -1) {
if (typeof curvyCorners.redrawList === 'undefined') curvyCorners.redrawList = new Array;
curvyCorners.redrawList.push({
node : boxCol[i],
spec : settings,
copy : boxCol[i].cloneNode(false)
});
}
boxCol[i].style.IEborderRadius = 'set';
var obj = new curvyObject(settings, boxCol[i]);
obj.applyCorners();
}
}
}
curvyCorners.prototype.applyCornersToAll = function () { // now redundant
curvyCorners.alert('This function is now redundant. Just call curvyCorners(). See documentation.');
};
curvyCorners.redraw = function() {
if (!curvyBrowser.isOp && !curvyBrowser.isIE) return;
if (!curvyCorners.redrawList) throw curvyCorners.newError('curvyCorners.redraw() has nothing to redraw.');
var old_block_value = curvyCorners.bock_redraw;
curvyCorners.block_redraw = true;
for (var i in curvyCorners.redrawList) {
if (isNaN(i)) continue; // in case of added prototype methods
var o = curvyCorners.redrawList[i];
if (!o.node.clientWidth) continue; // don't resize hidden boxes
var newchild = o.copy.cloneNode(false);
for (var contents = o.node.firstChild; contents != null; contents = contents.nextSibling)
if (contents.className === 'autoPadDiv') break;
if (!contents) {
curvyCorners.alert('Couldn\'t find autoPad DIV');
break;
}
o.node.parentNode.replaceChild(newchild, o.node);
while (contents.firstChild) newchild.appendChild(contents.removeChild(contents.firstChild));
o = new curvyObject(o.spec, o.node = newchild);
o.applyCorners();
}
curvyCorners.block_redraw = old_block_value;
}
curvyCorners.adjust = function(obj, prop, newval) {
if (curvyBrowser.isOp || curvyBrowser.isIE) {
if (!curvyCorners.redrawList) throw curvyCorners.newError('curvyCorners.adjust() has nothing to adjust.');
var i, j = curvyCorners.redrawList.length;
for (i = 0; i < j; ++i) if (curvyCorners.redrawList[i].node === obj) break;
if (i === j) throw curvyCorners.newError('Object not redrawable');
obj = curvyCorners.redrawList[i].copy;
}
if (prop.indexOf('.') === -1)
obj[prop] = newval;
else eval('obj.' + prop + "='" + newval + "'");
}
curvyCorners.handleWinResize = function() {
if (!curvyCorners.block_redraw) curvyCorners.redraw();
}
curvyCorners.setWinResize = function(onoff) {
curvyCorners.block_redraw = !onoff;
}
curvyCorners.newError = function(errorMessage) {
return new Error("curvyCorners Error:\n" + errorMessage)
}
curvyCorners.alert = function(errorMessage) {
if (typeof curvyCornersVerbose === 'undefined' || curvyCornersVerbose) alert(errorMessage);
}
function curvyObject() {
var boxDisp;
this.box              = arguments[1];
this.settings         = arguments[0];
this.topContainer = this.bottomContainer = this.shell = boxDisp = null;
var boxWidth = this.box.clientWidth; // browser-independent IE-emulation (NB includes padding)
if (!boxWidth && curvyBrowser.isIE) {
this.box.style.zoom = 1; // can force IE to calculate width
boxWidth = this.box.clientWidth;
}
if (!boxWidth) {
if (!this.box.parentNode) throw this.newError("box has no parent!"); // unlikely...
for (boxDisp = this.box; ; boxDisp = boxDisp.parentNode) {
if (!boxDisp || boxDisp.tagName === 'BODY') { // we've hit the buffers
this.applyCorners = function() {} // make the error benign
curvyCorners.alert(this.errmsg("zero-width box with no accountable parent", "warning"));
return;
}
if (boxDisp.style.display === 'none') break;
}
boxDisp.style.display = 'block'; // display in order to get browser to calculate clientWidth
boxWidth = this.box.clientWidth;
}
if (arguments[0] instanceof curvyCnrSpec)
this.spec = arguments[0].cloneOn(this.box); // convert non-pixel units
else {
this.spec = new curvyCnrSpec('');
this.spec.setfrom(this.settings); // no need for unit conversion, use settings param. directly
}
var borderWidth     = curvyBrowser.get_style(this.box, "borderTopWidth");
var borderWidthB    = curvyBrowser.get_style(this.box, "borderBottomWidth");
var borderWidthL    = curvyBrowser.get_style(this.box, "borderLeftWidth");
var borderWidthR    = curvyBrowser.get_style(this.box, "borderRightWidth");
var borderColour    = curvyBrowser.get_style(this.box, "borderTopColor");
var borderColourB   = curvyBrowser.get_style(this.box, "borderBottomColor");
var borderColourL   = curvyBrowser.get_style(this.box, "borderLeftColor");
var boxColour       = curvyBrowser.get_style(this.box, "backgroundColor");
var backgroundImage = curvyBrowser.get_style(this.box, "backgroundImage");
var backgroundRepeat= curvyBrowser.get_style(this.box, "backgroundRepeat");
if (this.box.currentStyle && this.box.currentStyle.backgroundPositionX) {
var backgroundPosX  = curvyBrowser.get_style(this.box, "backgroundPositionX");
var backgroundPosY  = curvyBrowser.get_style(this.box, "backgroundPositionY");
}
else {
var backgroundPosX = curvyBrowser.get_style(this.box, 'backgroundPosition');
backgroundPosX = backgroundPosX.split(' ');
var backgroundPosY = backgroundPosX[1];
backgroundPosX = backgroundPosX[0];
}
var boxPosition     = curvyBrowser.get_style(this.box, "position");
var topPadding      = curvyBrowser.get_style(this.box, "paddingTop");
var bottomPadding   = curvyBrowser.get_style(this.box, "paddingBottom");
var leftPadding     = curvyBrowser.get_style(this.box, "paddingLeft");
var rightPadding    = curvyBrowser.get_style(this.box, "paddingRight");
var border          = curvyBrowser.get_style(this.box, "border");
filter = curvyBrowser.ieVer > 7 ? curvyBrowser.get_style(this.box, 'filter') : null; // IE8 bug fix
var topMaxRadius    = this.spec.get('tR');
var botMaxRadius    = this.spec.get('bR');
var styleToNPx = function(val) {
if (typeof val === 'number') return val;
if (typeof val !== 'string') throw new Error('unexpected styleToNPx type ' + typeof val);
var matches = /^[-\d.]([a-z]+)$/.exec(val);
if (matches && matches[1] != 'px') throw new Error('Unexpected unit ' + matches[1]);
if (isNaN(val = parseInt(val))) val = 0;
return val;
}
var min0Px = function(val) {
return val <= 0 ? "0" : val + "px";
}
try {
this.borderWidth     = styleToNPx(borderWidth);
this.borderWidthB    = styleToNPx(borderWidthB);
this.borderWidthL    = styleToNPx(borderWidthL);
this.borderWidthR    = styleToNPx(borderWidthR);
this.boxColour       = curvyObject.format_colour(boxColour);
this.topPadding      = styleToNPx(topPadding);
this.bottomPadding   = styleToNPx(bottomPadding);
this.leftPadding     = styleToNPx(leftPadding);
this.rightPadding    = styleToNPx(rightPadding);
this.boxWidth        = boxWidth;
this.boxHeight       = this.box.clientHeight;
this.borderColour    = curvyObject.format_colour(borderColour);
this.borderColourB   = curvyObject.format_colour(borderColourB);
this.borderColourL   = curvyObject.format_colour(borderColourL);
this.borderString    = this.borderWidth + "px" + " solid " + this.borderColour;
this.borderStringB   = this.borderWidthB + "px" + " solid " + this.borderColourB;
this.backgroundImage = ((backgroundImage != "none")? backgroundImage : "");
this.backgroundRepeat= backgroundRepeat;
}
catch(e) {
throw this.newError('getMessage' in e ? e.getMessage() : e.message);
}
var clientHeight = this.boxHeight;
var clientWidth = boxWidth; // save it as it gets trampled on later
if (curvyBrowser.isOp) {
backgroundPosX = styleToNPx(backgroundPosX);
backgroundPosY = styleToNPx(backgroundPosY);
if (backgroundPosX) {
var t = clientWidth + this.borderWidthL + this.borderWidthR;
if (backgroundPosX > t) backgroundPosX = t;
backgroundPosX = (t / backgroundPosX * 100) + '%'; // convert to percentage
}
if (backgroundPosY) {
var t = clientHeight + this.borderWidth + this.borderWidthB;
if (backgroundPosY > t) backgroundPosY = t;
backgroundPosY = (t / backgroundPosY * 100) + '%'; // convert to percentage
}
}
if (curvyBrowser.quirksMode) {
}
else {
this.boxWidth -= this.leftPadding + this.rightPadding;
this.boxHeight -= this.topPadding + this.bottomPadding;
}
this.contentContainer = document.createElement("div");
if (filter) this.contentContainer.style.filter = filter; // IE8 bug fix
while (this.box.firstChild) this.contentContainer.appendChild(this.box.removeChild(this.box.firstChild));
if (boxPosition != "absolute") this.box.style.position = "relative";
this.box.style.padding = '0';
this.box.style.border = this.box.style.backgroundImage = 'none';
this.box.style.backgroundColor = 'transparent';
this.box.style.width   = (clientWidth + this.borderWidthL + this.borderWidthR) + 'px';
this.box.style.height  = (clientHeight + this.borderWidth + this.borderWidthB) + 'px';
var newMainContainer = document.createElement("div");
newMainContainer.style.position = "absolute";
if (filter) newMainContainer.style.filter = filter; // IE8 bug fix
if (curvyBrowser.quirksMode) {
newMainContainer.style.width  = (clientWidth + this.borderWidthL + this.borderWidthR) + 'px';
} else {
newMainContainer.style.width  = clientWidth + 'px';
}
newMainContainer.style.height = min0Px(clientHeight + this.borderWidth + this.borderWidthB - topMaxRadius - botMaxRadius);
newMainContainer.style.padding  = "0";
newMainContainer.style.top    = topMaxRadius + "px";
newMainContainer.style.left   = "0";
if (this.borderWidthL)
newMainContainer.style.borderLeft = this.borderWidthL + "px solid " + this.borderColourL;
if (this.borderWidth && !topMaxRadius)
newMainContainer.style.borderTop = this.borderWidth + "px solid " + this.borderColour;
if (this.borderWidthR)
newMainContainer.style.borderRight = this.borderWidthR + "px solid " + this.borderColourL;
if (this.borderWidthB && !botMaxRadius)
newMainContainer.style.borderBottom = this.borderWidthB + "px solid " + this.borderColourB;
newMainContainer.style.backgroundColor    = boxColour;
newMainContainer.style.backgroundImage    = this.backgroundImage;
newMainContainer.style.backgroundRepeat   = this.backgroundRepeat;
this.shell = this.box.appendChild(newMainContainer);
boxWidth = curvyBrowser.get_style(this.shell, "width");
if (boxWidth === "" || boxWidth === "auto" || boxWidth.indexOf("%") !== -1) throw this.newError('Shell width is ' + boxWidth);
this.boxWidth = (boxWidth != "" && boxWidth != "auto" && boxWidth.indexOf("%") == -1) ? parseInt(boxWidth) : this.shell.clientWidth;
this.applyCorners = function() {
if (this.backgroundObject) {
var bgOffset = function(style, imglen, boxlen) {
if (style === 0) return 0;
var retval;
if (style === 'right' || style === 'bottom') return boxlen - imglen;
if (style === 'center') return (boxlen - imglen) / 2;
if (style.indexOf('%') > 0) return (boxlen - imglen) * 100 / parseInt(style);
return styleToNPx(style);
}
this.backgroundPosX  = bgOffset(backgroundPosX, this.backgroundObject.width, clientWidth);
this.backgroundPosY  = bgOffset(backgroundPosY, this.backgroundObject.height, clientHeight);
}
else if (this.backgroundImage) {
this.backgroundPosX = styleToNPx(backgroundPosX);
this.backgroundPosY = styleToNPx(backgroundPosY);
}
if (topMaxRadius) {
newMainContainer = document.createElement("div");
newMainContainer.style.width = this.boxWidth + "px";
newMainContainer.style.fontSize = "1px";
newMainContainer.style.overflow = "hidden";
newMainContainer.style.position = "absolute";
newMainContainer.style.paddingLeft  = this.borderWidth + "px";
newMainContainer.style.paddingRight = this.borderWidth + "px";
newMainContainer.style.height = topMaxRadius + "px";
newMainContainer.style.top    = -topMaxRadius + "px";
newMainContainer.style.left   = -this.borderWidthL + "px";
this.topContainer = this.shell.appendChild(newMainContainer);
}
if (botMaxRadius) {
var newMainContainer = document.createElement("div");
newMainContainer.style.width = this.boxWidth + "px";
newMainContainer.style.fontSize = "1px";
newMainContainer.style.overflow = "hidden";
newMainContainer.style.position = "absolute";
newMainContainer.style.paddingLeft  = this.borderWidthB + "px";
newMainContainer.style.paddingRight = this.borderWidthB + "px";
newMainContainer.style.height   =  botMaxRadius + "px";
newMainContainer.style.bottom   = -botMaxRadius + "px";
newMainContainer.style.left     = -this.borderWidthL + "px";
this.bottomContainer = this.shell.appendChild(newMainContainer);
}
var corners = this.spec.cornerNames();  // array of available corners
for (var i in corners) if (!isNaN(i)) {
var cc = corners[i];
var specRadius = this.spec[cc + 'R'];
var bwidth, bcolor, borderRadius, borderWidthTB;
if (cc == "tr" || cc == "tl") {
bwidth = this.borderWidth;
bcolor = this.borderColour;
borderWidthTB = this.borderWidth;
} else {
bwidth = this.borderWidthB;
bcolor = this.borderColourB;
borderWidthTB = this.borderWidthB;
}
borderRadius = specRadius - borderWidthTB;
var newCorner = document.createElement("div");
newCorner.style.height = this.spec.get(cc + 'Ru');
newCorner.style.width  = this.spec.get(cc + 'Ru');
newCorner.style.position = "absolute";
newCorner.style.fontSize = "1px";
newCorner.style.overflow = "hidden";
var intx, inty, outsideColour;
var trans = filter ? parseInt(/alpha\(opacity.(\d+)\)/.exec(filter)[1]) : 100; // IE8 bug fix
for (intx = 0; intx < specRadius; ++intx) {
var y1 = (intx + 1 >= borderRadius) ? -1 : Math.floor(Math.sqrt(Math.pow(borderRadius, 2) - Math.pow(intx + 1, 2))) - 1;
if (borderRadius != specRadius) {
var y2 = (intx >= borderRadius) ? -1 : Math.ceil(Math.sqrt(Math.pow(borderRadius, 2) - Math.pow(intx, 2)));
var y3 = (intx + 1 >= specRadius) ? -1 : Math.floor(Math.sqrt(Math.pow(specRadius, 2) - Math.pow((intx+1), 2))) - 1;
}
var y4 = (intx >= specRadius) ? -1 : Math.ceil(Math.sqrt(Math.pow(specRadius, 2) - Math.pow(intx, 2)));
if (y1 > -1) this.drawPixel(intx, 0, this.boxColour, trans, (y1 + 1), newCorner, true, specRadius);
if (borderRadius != specRadius) {
if (this.spec.antiAlias) {
for (inty = y1 + 1; inty < y2; ++inty) {
if (this.backgroundImage != "") {
var borderFract = curvyObject.pixelFraction(intx, inty, borderRadius) * 100;
this.drawPixel(intx, inty, bcolor, trans, 1, newCorner, borderFract >= 30, specRadius);
}
else if (this.boxColour !== 'transparent') {
var pixelcolour = curvyObject.BlendColour(this.boxColour, bcolor, curvyObject.pixelFraction(intx, inty, borderRadius));
this.drawPixel(intx, inty, pixelcolour, trans, 1, newCorner, false, specRadius);
}
else this.drawPixel(intx, inty, bcolor, trans >> 1, 1, newCorner, false, specRadius);
}
if (y3 >= y2) {
if (y2 == -1) y2 = 0;
this.drawPixel(intx, y2, bcolor, trans, (y3 - y2 + 1), newCorner, false, 0);
}
outsideColour = bcolor;  // Set the colour for the outside AA curve
inty = y3;               // start_pos - 1 for y-axis AA pixels
}
else { // no antiAlias
if (y3 > y1) { // NB condition was >=, changed to avoid zero-height divs
this.drawPixel(intx, (y1 + 1), bcolor, trans, (y3 - y1), newCorner, false, 0);
}
}
}
else {
outsideColour = this.boxColour;  // Set the colour for the outside curve
inty = y1;               // start_pos - 1 for y-axis AA pixels
}
if (this.spec.antiAlias) {
while (++inty < y4) {
this.drawPixel(intx, inty, outsideColour, (curvyObject.pixelFraction(intx, inty , specRadius) * trans), 1, newCorner, borderWidthTB <= 0, specRadius);
}
}
}
for (var t = 0, k = newCorner.childNodes.length; t < k; ++t) {
var pixelBar = newCorner.childNodes[t];
var pixelBarTop    = parseInt(pixelBar.style.top);
var pixelBarLeft   = parseInt(pixelBar.style.left);
var pixelBarHeight = parseInt(pixelBar.style.height);
if (cc == "tl" || cc == "bl") {
pixelBar.style.left = (specRadius - pixelBarLeft - 1) + "px"; // Left
}
if (cc == "tr" || cc == "tl"){
pixelBar.style.top =  (specRadius - pixelBarHeight - pixelBarTop) + "px"; // Top
}
pixelBar.style.backgroundRepeat = this.backgroundRepeat;
if (this.backgroundImage) switch(cc) {
case "tr":
pixelBar.style.backgroundPosition = (this.backgroundPosX - this.borderWidthL + specRadius - clientWidth - pixelBarLeft) + "px " + (this.backgroundPosY + pixelBarHeight + pixelBarTop + this.borderWidth - specRadius) + "px";
break;
case "tl":
pixelBar.style.backgroundPosition = (this.backgroundPosX - specRadius + pixelBarLeft + this.borderWidthL) + "px " + (this.backgroundPosY - specRadius + pixelBarHeight + pixelBarTop + this.borderWidth) + "px";
break;
case "bl":
pixelBar.style.backgroundPosition = (this.backgroundPosX - specRadius + pixelBarLeft + 1 + this.borderWidthL) + "px " + (this.backgroundPosY - clientHeight - this.borderWidth + (curvyBrowser.quirksMode ? pixelBarTop : -pixelBarTop) + specRadius) + "px";
break;
case "br":
if (curvyBrowser.quirksMode) {
pixelBar.style.backgroundPosition = (this.backgroundPosX + this.borderWidthL - clientWidth + specRadius - pixelBarLeft) + "px " + (this.backgroundPosY - clientHeight - this.borderWidth + pixelBarTop + specRadius) + "px";
} else {
pixelBar.style.backgroundPosition = (this.backgroundPosX - this.borderWidthL - clientWidth + specRadius - pixelBarLeft) + "px " + (this.backgroundPosY - clientHeight - this.borderWidth + specRadius - pixelBarTop) + "px";
}
}
}
switch (cc) {
case "tl":
newCorner.style.top = newCorner.style.left = "0";
this.topContainer.appendChild(newCorner);
break;
case "tr":
newCorner.style.top = newCorner.style.right = "0";
this.topContainer.appendChild(newCorner);
break;
case "bl":
newCorner.style.bottom = newCorner.style.left = "0";
this.bottomContainer.appendChild(newCorner);
break;
case "br":
newCorner.style.bottom = newCorner.style.right = "0";
this.bottomContainer.appendChild(newCorner);
}
}
var radiusDiff = {
t : this.spec.radiusdiff('t'),
b : this.spec.radiusdiff('b')
};
for (z in radiusDiff) {
if (typeof z === 'function') continue; // for prototype, mootools frameworks
if (!this.spec.get(z + 'R')) continue; // no need if no corners
if (radiusDiff[z]) {
if (this.backgroundImage && this.spec.radiusSum(z) !== radiusDiff[z])
curvyCorners.alert(this.errmsg('Not supported: unequal non-zero top/bottom radii with background image'));
var smallerCornerType = (this.spec[z + "lR"] < this.spec[z + "rR"]) ? z + "l" : z + "r";
var newFiller = document.createElement("div");
newFiller.style.height = radiusDiff[z] + "px";
newFiller.style.width  =  this.spec.get(smallerCornerType + 'Ru');
newFiller.style.position = "absolute";
newFiller.style.fontSize = "1px";
newFiller.style.overflow = "hidden";
newFiller.style.backgroundColor = this.boxColour;
switch (smallerCornerType) {
case "tl":
newFiller.style.bottom =
newFiller.style.left   = "0";
newFiller.style.borderLeft = this.borderString;
this.topContainer.appendChild(newFiller);
break;
case "tr":
newFiller.style.bottom =
newFiller.style.right  = "0";
newFiller.style.borderRight = this.borderString;
this.topContainer.appendChild(newFiller);
break;
case "bl":
newFiller.style.top    =
newFiller.style.left   = "0";
newFiller.style.borderLeft = this.borderStringB;
this.bottomContainer.appendChild(newFiller);
break;
case "br":
newFiller.style.top    =
newFiller.style.right  = "0";
newFiller.style.borderRight = this.borderStringB;
this.bottomContainer.appendChild(newFiller);
}
}
var newFillerBar = document.createElement("div");
if (filter) newFillerBar.style.filter = filter; // IE8 bug fix
newFillerBar.style.position = "relative";
newFillerBar.style.fontSize = "1px";
newFillerBar.style.overflow = "hidden";
newFillerBar.style.width = this.fillerWidth(z);
newFillerBar.style.backgroundColor = this.boxColour;
newFillerBar.style.backgroundImage = this.backgroundImage;
newFillerBar.style.backgroundRepeat= this.backgroundRepeat;
switch (z) {
case "t":
if (this.topContainer) {
if (curvyBrowser.quirksMode) {
newFillerBar.style.height = 100 + topMaxRadius + "px";
} else {
newFillerBar.style.height = 100 + topMaxRadius - this.borderWidth + "px";
}
newFillerBar.style.marginLeft  = this.spec.tlR ? (this.spec.tlR - this.borderWidthL) + "px" : "0";
newFillerBar.style.borderTop   = this.borderString;
if (this.backgroundImage) {
var x_offset = this.spec.tlR ?
(this.backgroundPosX - (topMaxRadius - this.borderWidthL)) + "px " : "0 ";
newFillerBar.style.backgroundPosition  = x_offset + this.backgroundPosY + "px";
this.shell.style.backgroundPosition = this.backgroundPosX + "px " + (this.backgroundPosY - topMaxRadius + this.borderWidthL) + "px";
}
this.topContainer.appendChild(newFillerBar);
}
break;
case "b":
if (this.bottomContainer) {
if (curvyBrowser.quirksMode) {
newFillerBar.style.height     = botMaxRadius + "px";
} else {
newFillerBar.style.height     = botMaxRadius - this.borderWidthB + "px";
}
newFillerBar.style.marginLeft   = this.spec.blR ? (this.spec.blR - this.borderWidthL) + "px" : "0";
newFillerBar.style.borderBottom = this.borderStringB;
if (this.backgroundImage) {
var x_offset = this.spec.blR ?
(this.backgroundPosX + this.borderWidthL - botMaxRadius) + "px " : this.backgroundPosX + "px ";
newFillerBar.style.backgroundPosition = x_offset + (this.backgroundPosY - clientHeight - this.borderWidth + botMaxRadius) + "px";
}
this.bottomContainer.appendChild(newFillerBar);
}
}
}
this.contentContainer.style.position = "absolute";
this.contentContainer.className    = "autoPadDiv";
this.contentContainer.style.left   = this.borderWidthL + "px";
this.contentContainer.style.paddingTop = this.topPadding + "px";
this.contentContainer.style.top = this.borderWidth + "px";
this.contentContainer.style.paddingLeft = this.leftPadding + "px";
this.contentContainer.style.paddingRight = this.rightPadding + "px";
z = clientWidth;
if (!curvyBrowser.quirksMode) z -= this.leftPadding + this.rightPadding;
this.contentContainer.style.width = z + "px";
this.contentContainer.style.textAlign = curvyBrowser.get_style(this.box, 'textAlign');
this.box.style.textAlign = 'left'; // important otherwise layout goes wild
this.box.appendChild(this.contentContainer);
if (boxDisp) boxDisp.style.display = 'none';
}
if (this.backgroundImage) {
backgroundPosX = this.backgroundCheck(backgroundPosX);
backgroundPosY = this.backgroundCheck(backgroundPosY);
if (this.backgroundObject) {
this.backgroundObject.holdingElement = this;
this.dispatch = this.applyCorners;
this.applyCorners = function() {
if (this.backgroundObject.complete)
this.dispatch();
else this.backgroundObject.onload = new Function('curvyObject.dispatch(this.holdingElement);');
}
}
}
}
curvyObject.prototype.backgroundCheck = function(style) {
if (style === 'top' || style === 'left' || parseInt(style) === 0) return 0;
if (!(/^[-\d.]+px$/.test(style))  && !this.backgroundObject) {
this.backgroundObject = new Image;
var imgName = function(str) {
var matches = /url\("?([^'"]+)"?\)/.exec(str);
return (matches ? matches[1] : str);
}
this.backgroundObject.src = imgName(this.backgroundImage);
}
return style;
}
curvyObject.dispatch = function(obj) {
if ('dispatch' in obj)
obj.dispatch();
else throw obj.newError('No dispatch function');
}
curvyObject.prototype.drawPixel = function(intx, inty, colour, transAmount, height, newCorner, image, cornerRadius) {
var pixel = document.createElement("div");
pixel.style.height   = height + "px";
pixel.style.width    = "1px";
pixel.style.position = "absolute";
pixel.style.fontSize = "1px";
pixel.style.overflow = "hidden";
var topMaxRadius = this.spec.get('tR');
pixel.style.backgroundColor = colour;
if (image && this.backgroundImage != "") {
pixel.style.backgroundImage = this.backgroundImage;
pixel.style.backgroundPosition  = "-" + (this.boxWidth - (cornerRadius - intx) + this.borderWidth) + "px -" + ((this.boxHeight + topMaxRadius + inty) - this.borderWidth) + "px";
}
if (transAmount != 100) curvyObject.setOpacity(pixel, transAmount);
pixel.style.top = inty + "px";
pixel.style.left = intx + "px";
newCorner.appendChild(pixel);
}
curvyObject.prototype.fillerWidth = function(tb) {
var bWidth = curvyBrowser.quirksMode ? 0 : this.spec.radiusCount(tb) * this.borderWidthL;
return (this.boxWidth - this.spec.radiusSum(tb) + bWidth) + 'px';
}
curvyObject.prototype.errmsg = function(msg, gravity) {
var extradata = "\ntag: " + this.box.tagName;
if (this.box.id) extradata += "\nid: " + this.box.id;
if (this.box.className) extradata += "\nclass: " + this.box.className;
var parent;
if ((parent = this.box.parentNode) === null)
extradata += "\n(box has no parent)";
else {
extradata += "\nParent tag: " + parent.tagName;
if (parent.id) extradata += "\nParent ID: " + parent.id;
if (parent.className) extradata += "\nParent class: " + parent.className;
}
if (gravity === undefined) gravity = 'warning';
return 'curvyObject ' + gravity + ":\n" + msg + extradata;
}
curvyObject.prototype.newError = function(msg) {
return new Error(this.errmsg(msg, 'exception'));
}
curvyObject.IntToHex = function(strNum) {
var hexdig = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' ];
return hexdig[strNum >>> 4] + '' + hexdig[strNum & 15];
}
curvyObject.BlendColour = function(Col1, Col2, Col1Fraction) {
if (Col1 === 'transparent' || Col2 === 'transparent') throw this.newError('Cannot blend with transparent');
if (Col1.charAt(0) !== '#') {
Col1 = curvyObject.format_colour(Col1);
}
if (Col2.charAt(0) !== '#') {
Col2 = curvyObject.format_colour(Col2);
}
var red1 = parseInt(Col1.substr(1, 2), 16);
var green1 = parseInt(Col1.substr(3, 2), 16);
var blue1 = parseInt(Col1.substr(5, 2), 16);
var red2 = parseInt(Col2.substr(1, 2), 16);
var green2 = parseInt(Col2.substr(3, 2), 16);
var blue2 = parseInt(Col2.substr(5, 2), 16);
if (Col1Fraction > 1 || Col1Fraction < 0) Col1Fraction = 1;
var endRed = Math.round((red1 * Col1Fraction) + (red2 * (1 - Col1Fraction)));
if (endRed > 255) endRed = 255;
if (endRed < 0) endRed = 0;
var endGreen = Math.round((green1 * Col1Fraction) + (green2 * (1 - Col1Fraction)));
if (endGreen > 255) endGreen = 255;
if (endGreen < 0) endGreen = 0;
var endBlue = Math.round((blue1 * Col1Fraction) + (blue2 * (1 - Col1Fraction)));
if (endBlue > 255) endBlue = 255;
if (endBlue < 0) endBlue = 0;
return "#" + curvyObject.IntToHex(endRed) + curvyObject.IntToHex(endGreen)+ curvyObject.IntToHex(endBlue);
}
curvyObject.pixelFraction = function(x, y, r) {
var fraction;
var rsquared = r * r;
var xvalues = new Array(2);
var yvalues = new Array(2);
var point = 0;
var whatsides = "";
var intersect = Math.sqrt(rsquared - Math.pow(x, 2));
if (intersect >= y && intersect < (y + 1)) {
whatsides = "Left";
xvalues[point] = 0;
yvalues[point] = intersect - y;
++point;
}
intersect = Math.sqrt(rsquared - Math.pow(y + 1, 2));
if (intersect >= x && intersect < (x + 1)) {
whatsides += "Top";
xvalues[point] = intersect - x;
yvalues[point] = 1;
++point;
}
intersect = Math.sqrt(rsquared - Math.pow(x + 1, 2));
if (intersect >= y && intersect < (y + 1)) {
whatsides += "Right";
xvalues[point] = 1;
yvalues[point] = intersect - y;
++point;
}
intersect = Math.sqrt(rsquared - Math.pow(y, 2));
if (intersect >= x && intersect < (x + 1)) {
whatsides += "Bottom";
xvalues[point] = intersect - x;
yvalues[point] = 0;
}
switch (whatsides) {
case "LeftRight":
fraction = Math.min(yvalues[0], yvalues[1]) + ((Math.max(yvalues[0], yvalues[1]) - Math.min(yvalues[0], yvalues[1])) / 2);
break;
case "TopRight":
fraction = 1 - (((1 - xvalues[0]) * (1 - yvalues[1])) / 2);
break;
case "TopBottom":
fraction = Math.min(xvalues[0], xvalues[1]) + ((Math.max(xvalues[0], xvalues[1]) - Math.min(xvalues[0], xvalues[1])) / 2);
break;
case "LeftBottom":
fraction = yvalues[0] * xvalues[1] / 2;
break;
default:
fraction = 1;
}
return fraction;
}
curvyObject.rgb2Array = function(rgbColour) {
var rgbValues = rgbColour.substring(4, rgbColour.indexOf(")"));
return rgbValues.split(", ");
}
curvyObject.rgb2Hex = function(rgbColour) {
try {
var rgbArray = curvyObject.rgb2Array(rgbColour);
var red   = parseInt(rgbArray[0]);
var green = parseInt(rgbArray[1]);
var blue  = parseInt(rgbArray[2]);
var hexColour = "#" + curvyObject.IntToHex(red) + curvyObject.IntToHex(green) + curvyObject.IntToHex(blue);
}
catch (e) {
var msg = 'getMessage' in e ? e.getMessage() : e.message;
throw new Error("Error (" + msg + ") converting RGB value to Hex in rgb2Hex");
}
return hexColour;
}
curvyObject.setOpacity = function(obj, opacity) {
opacity = (opacity == 100) ? 99.999 : opacity;
if (curvyBrowser.isSafari && obj.tagName != "IFRAME") {
var rgbArray = curvyObject.rgb2Array(obj.style.backgroundColor);
var red   = parseInt(rgbArray[0]);
var green = parseInt(rgbArray[1]);
var blue  = parseInt(rgbArray[2]);
obj.style.backgroundColor = "rgba(" + red + ", " + green + ", " + blue + ", " + opacity/100 + ")";
}
else if (typeof obj.style.opacity !== "undefined") { // W3C
obj.style.opacity = opacity / 100;
}
else if (typeof obj.style.MozOpacity !== "undefined") { // Older Mozilla
obj.style.MozOpacity = opacity / 100;
}
else if (typeof obj.style.filter != "undefined") { // IE
obj.style.filter = "alpha(opacity=" + opacity + ")";
}
else if (typeof obj.style.KHTMLOpacity != "undefined") { // Older KHTML Based curvyBrowsers
obj.style.KHTMLOpacity = opacity / 100;
}
}
function addEvent(elm, evType, fn, useCapture) {
if (elm.addEventListener) {
elm.addEventListener(evType, fn, useCapture);
return true;
}
if (elm.attachEvent) return elm.attachEvent('on' + evType, fn);
elm['on' + evType] = fn;
return false;
}
curvyObject.getComputedColour = function(colour) {
var d = document.createElement('DIV');
d.style.backgroundColor = colour;
document.body.appendChild(d);
if(window.getComputedStyle) { // Mozilla, Opera, Chrome, Safari
var rtn = document.defaultView.getComputedStyle(d, null).getPropertyValue('background-color');
d.parentNode.removeChild(d);
if(rtn.substr(0, 3) === "rgb") rtn = curvyObject.rgb2Hex(rtn);
return rtn;
}
else { // IE
var rng = document.body.createTextRange();
rng.moveToElementText(d);
rng.execCommand('ForeColor', false, colour);
var iClr = rng.queryCommandValue('ForeColor');
var rgb = "rgb("+(iClr & 0xFF)+", "+((iClr & 0xFF00)>>8)+", "+((iClr & 0xFF0000)>>16)+")";
d.parentNode.removeChild(d);
rng = null;
return curvyObject.rgb2Hex(rgb);
}
}
curvyObject.format_colour = function(colour) {
if (colour != "" && colour != "transparent") {
if (colour.substr(0, 3) === "rgb") {
colour = curvyObject.rgb2Hex(colour);
}
else if (colour.charAt(0) !== '#') {
colour = curvyObject.getComputedColour(colour);
}
else if (colour.length === 4) {
colour = "#" + colour.charAt(1) + colour.charAt(1) + colour.charAt(2) + colour.charAt(2) + colour.charAt(3) + colour.charAt(3);
}
}
return colour;
}
curvyCorners.getElementsByClass = function(searchClass, node) {
var classElements = new Array;
if (node === undefined) node = document;
searchClass = searchClass.split('.'); // see if there's a tag in there
var tag = '*'; // prepare for no tag
if (searchClass.length === 1) {
tag = searchClass[0];
searchClass = false;
}
else {
if (searchClass[0]) tag = searchClass[0];
searchClass = searchClass[1];
}
var i, els, elsLen;
if (tag.charAt(0) === '#') {
els = document.getElementById(tag.substr(1));
if (els) classElements.push(els);
}
else {
els = node.getElementsByTagName(tag);
elsLen = els.length;
if (searchClass) {
var pattern = new RegExp("(^|\\s)" + searchClass + "(\\s|$)");
for (i = 0; i < elsLen; ++i) {
if (pattern.test(els[i].className)) classElements.push(els[i]);
}
}
else for (i = 0; i < elsLen; ++i) classElements.push(els[i]);
}
return classElements;
}
if (curvyBrowser.isMoz || curvyBrowser.isWebKit)
var curvyCornersNoAutoScan = true; // it won't do anything anyway.
else {
curvyCorners.scanStyles = function() {
function units(num) {
var matches = /^[\d.]+(\w+)$/.exec(num);
return matches[1];
}
var t, i, j;
if (curvyBrowser.isIE) {
function procIEStyles(rule) {
var style = rule.style;
if(curvyBrowser.ieVer > 6.0) {
var allR = style['-webkit-border-radius'] || 0;
var tR   = style['-webkit-border-top-right-radius'] || 0;
var tL   = style['-webkit-border-top-left-radius'] || 0;
var bR   = style['-webkit-border-bottom-right-radius'] || 0;
var bL   = style['-webkit-border-bottom-left-radius'] || 0;
}
else {
var allR = style['webkit-border-radius'] || 0;
var tR   = style['webkit-border-top-right-radius'] || 0;
var tL   = style['webkit-border-top-left-radius'] || 0;
var bR   = style['webkit-border-bottom-right-radius'] || 0;
var bL   = style['webkit-border-bottom-left-radius'] || 0;
}
if (allR || tL || tR || bR || bL) {
var settings = new curvyCnrSpec(rule.selectorText);
if (allR)
settings.setcorner(null, null, parseInt(allR), units(allR));
else {
if (tR) settings.setcorner('t', 'r', parseInt(tR), units(tR));
if (tL) settings.setcorner('t', 'l', parseInt(tL), units(tL));
if (bL) settings.setcorner('b', 'l', parseInt(bL), units(bL));
if (bR) settings.setcorner('b', 'r', parseInt(bR), units(bR));
}
curvyCorners(settings);
}
}
for (t = 0; t < document.styleSheets.length; ++t) {
if (document.styleSheets[t].imports) {
for (i = 0; i < document.styleSheets[t].imports.length; ++i)
for (j = 0; j < document.styleSheets[t].imports[i].rules.length; ++j)
procIEStyles(document.styleSheets[t].imports[i].rules[j]);
}
for (i = 0; i < document.styleSheets[t].rules.length; ++i)
procIEStyles(document.styleSheets[t].rules[i]);
}
}
else if (curvyBrowser.isOp) {
for (t = 0; t < document.styleSheets.length; ++t) {
if (operasheet.contains_border_radius(t)) {
j = new operasheet(t);
for (i in j.rules) if (!isNaN(i))
curvyCorners(j.rules[i]);
}
}
}
else curvyCorners.alert('Scanstyles does nothing in Webkit/Firefox');
};
curvyCorners.init = function() {
if (arguments.callee.done) return;
arguments.callee.done = true;
if (curvyBrowser.isWebKit && curvyCorners.init.timer) {
clearInterval(curvyCorners.init.timer);
curvyCorners.init.timer = null;
}
curvyCorners.scanStyles();
};
}
if (typeof curvyCornersNoAutoScan === 'undefined' || curvyCornersNoAutoScan === false) {
if (curvyBrowser.isOp)
document.addEventListener("DOMContentLoaded", curvyCorners.init, false);
else addEvent(window, 'load', curvyCorners.init, false);
}
