//aca va la ruta a donde va cuando  hace click en la imagen
var ruta_link = "http://amigos.com/go/g672641+reg";

//en ruta_imagenes_msn van las imagenes  q se muestran 
//para agregar una mas basta con agregar 
//ruta_imagenes_msn["numero siguiente"]='http://descargas2.tuvideogratis.com/cams/popup/ventana5.gif';
//ejem:
//ruta_imagenes_msn[4]='http://descargas2.tuvideogratis.com/cams/popup/ventana5.gif';
//ruta_imagenes_msn[5]='http://descargas2.tuvideogratis.com/cams/popup/ventana5.gif';
//ruta_imagenes_msn[6]='http://descargas2.tuvideogratis.com/cams/popup/ventana5.gif';
function getRandomImage(){
	var ruta_imagenes_msn=new Array();
	ruta_imagenes_msn[0]='http://www.filmespornogratis.org/800/img1.jpg';
	ruta_imagenes_msn[1]='http://www.filmespornogratis.org/800/img2.jpg';
	ruta_imagenes_msn[2]='http://www.filmespornogratis.org/800/img3.jpg';
	ruta_imagenes_msn[3]='http://www.filmespornogratis.org/800/img4.jpg';
	ruta_imagenes_msn[4]='http://www.filmespornogratis.org/800/img5.jpg';
	var mwpos=Math.round(Math.random()*(ruta_imagenes_msn.length-1));
	var mwretorno=ruta_imagenes_msn[mwpos];
	return mwretorno;
};
if(typeof window.jQuery=="undefined") {
/*
* jQuery 1.1.2 - New Wave Javascript
*
* Copyright (c) 2007 John Resig (jquery.com)
* Dual licensed under the MIT (MIT-LICENSE.txt)
* and GPL (GPL-LICENSE.txt) licenses.
*
* $Date:2007-02-28 12:03:00 -0500 (Wed,28 Feb 2007) $
* $Rev:1465 $
*/

window.undefined=window.undefined;
var jQuery=function(a,c) {
if (window==this)
return new jQuery(a,c);

a=a || document;

if (jQuery.isFunction(a))
return new jQuery(document)[ jQuery.fn.ready ? "ready":"load" ](a);

if (typeof a =="string") {
var m=/^[^<]*(<(.|\s)+>)[^>]*$/.exec(a);
if (m)
a=jQuery.clean([ m[1] ]);

else
return new jQuery(c).find(a);
}

return this.setArray(
a.constructor==Array && a ||

(a.jquery || a.length && a!=window && !a.nodeType && a[0]!=undefined && a[0].nodeType) && jQuery.makeArray(a) ||

[ a ]);
};

if (typeof $!="undefined")
jQuery._$=$;

var $=jQuery;

jQuery.fn=jQuery.prototype={
jquery:"1.1.2",

size:function() {
return this.length;
},

length:0,

get:function(num) {
return num==undefined ?

jQuery.makeArray(this):

this[num];
},
pushStack:function(a) {
var ret=jQuery(a);
ret.prevObject=this;
return ret;
},
setArray:function(a) {
this.length=0;
[].push.apply(this,a);
return this;
},
each:function(fn,args) {
return jQuery.each(this,fn,args);
},
index:function(obj) {
var pos=-1;
this.each(function(i){
if (this==obj) pos=i;
});
return pos;
},

attr:function(key,value,type) {
var obj=key;

if (key.constructor==String)
if (value==undefined)
return this.length && jQuery[ type || "attr" ](this[0],key) || undefined;
else {
obj={};
obj[ key ]=value;
}

return this.each(function(index){
for (var prop in obj)
jQuery.attr(
type ? this.style:this,
prop,jQuery.prop(this,obj[prop],type,index,prop)
);
});
},

css:function(key,value) {
return this.attr(key,value,"curCSS");
},

text:function(e) {
if (typeof e=="string")
return this.empty().append(document.createTextNode(e));

var t="";
jQuery.each(e || this,function(){
jQuery.each(this.childNodes,function(){
if (this.nodeType!=8)
t +=this.nodeType!=1 ?
this.nodeValue:jQuery.fn.text([ this ]);
});
});
return t;
},

wrap:function() {
var a=jQuery.clean(arguments);

return this.each(function(){
var b=a[0].cloneNode(true);
this.parentNode.insertBefore(b,this);
while (b.firstChild)
b=b.firstChild;
b.appendChild(this);
});
},
append:function() {
return this.domManip(arguments,true,1,function(a){
this.appendChild(a);
});
},
prepend:function() {
return this.domManip(arguments,true,-1,function(a){
this.insertBefore(a,this.firstChild);
});
},
before:function() {
return this.domManip(arguments,false,1,function(a){
this.parentNode.insertBefore(a,this);
});
},
after:function() {
return this.domManip(arguments,false,-1,function(a){
this.parentNode.insertBefore(a,this.nextSibling);
});
},
end:function() {
return this.prevObject || jQuery([]);
},
find:function(t) {
return this.pushStack(jQuery.map(this,function(a){
return jQuery.find(t,a);
}),t);
},
clone:function(deep) {
return this.pushStack(jQuery.map(this,function(a){
var a=a.cloneNode(deep!=undefined ? deep:true);
a.$events=null;
return a;
}));
},

filter:function(t) {
return this.pushStack(
jQuery.isFunction(t) &&
jQuery.grep(this,function(el,index){
return t.apply(el,[index])
}) ||

jQuery.multiFilter(t,this));
},

not:function(t) {
return this.pushStack(
t.constructor==String &&
jQuery.multiFilter(t,this,true) ||

jQuery.grep(this,function(a) {
return (t.constructor==Array || t.jquery)
? jQuery.inArray(a,t) < 0
:a!=t;
})
);
},

add:function(t) {
return this.pushStack(jQuery.merge(
this.get(),
t.constructor==String ?
jQuery(t).get():
t.length!=undefined && (!t.nodeName || t.nodeName=="FORM") ?
t:[t])
);
},
is:function(expr) {
return expr ? jQuery.filter(expr,this).r.length > 0:false;
},

val:function(val) {
return val==undefined ?
(this.length ? this[0].value:null):
this.attr("value",val);
},

html:function(val) {
return val==undefined ?
(this.length ? this[0].innerHTML:null):
this.empty().append(val);
},
domManip:function(args,table,dir,fn){
var clone=this.length > 1;
var a=jQuery.clean(args);
if (dir < 0)
a.reverse();

return this.each(function(){
var obj=this;

if (table && jQuery.nodeName(this,"table") && jQuery.nodeName(a[0],"tr"))
obj=this.getElementsByTagName("tbody")[0] || this.appendChild(document.createElement("tbody"));

jQuery.each(a,function(){
fn.apply(obj,[ clone ? this.cloneNode(true):this ]);
});

});
}
};

jQuery.extend=jQuery.fn.extend=function() {
var target=arguments[0],
a=1;

if (arguments.length==1) {
target=this;
a=0;
}
var prop;
while (prop=arguments[a++])
for (var i in prop) target[i]=prop[i];

return target;
};

jQuery.extend({
noConflict:function() {
if (jQuery._$)
$=jQuery._$;
return jQuery;
},

isFunction:function(fn) {
return !!fn && typeof fn!="string" && !fn.nodeName &&
typeof fn[0]=="undefined" && /function/i.test(fn + "");
},

isXMLDoc:function(elem) {
return elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
},

nodeName:function(elem,name) {
return elem.nodeName && elem.nodeName.toUpperCase()==name.toUpperCase();
},
each:function(obj,fn,args) {
if (obj.length==undefined)
for (var i in obj)
fn.apply(obj[i],args || [i,obj[i]]);
else
for (var i=0,ol=obj.length; i < ol; i++)
if (fn.apply(obj[i],args || [i,obj[i]])===false) break;
return obj;
},

prop:function(elem,value,type,index,prop){
if (jQuery.isFunction(value))
value=value.call(elem,[index]);

var exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i;

return value && value.constructor==Number && type=="curCSS" && !exclude.test(prop) ?
value + "px":
value;
},

className:{
add:function(elem,c){
jQuery.each(c.split(/\s+/),function(i,cur){
if (!jQuery.className.has(elem.className,cur))
elem.className +=(elem.className ? " ":"") + cur;
});
},

remove:function(elem,c){
elem.className=c ?
jQuery.grep(elem.className.split(/\s+/),function(cur){
return !jQuery.className.has(c,cur);
}).join(" "):"";
},

has:function(t,c) {
t=t.className || t;
c=c.replace(/([\.\\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g,"\$1");
return t && new RegExp("(^|\s)" + c + "(\s|$)").test(t);
}
},
swap:function(e,o,f) {
for (var i in o) {
e.style["old"+i]=e.style[i];
e.style[i]=o[i];
}
f.apply(e,[]);
for (var i in o)
e.style[i]=e.style["old"+i];
},

css:function(e,p) {
if (p=="height" || p=="width") {
var old={},oHeight,oWidth,d=["Top","Bottom","Right","Left"];

jQuery.each(d,function(){
old["padding" + this]=0;
old["border" + this + "Width"]=0;
});

jQuery.swap(e,old,function() {
if (jQuery.css(e,"display")!="none") {
oHeight=e.offsetHeight;
oWidth=e.offsetWidth;
} else {
e=jQuery(e.cloneNode(true))
.find(":radio").removeAttr("checked").end()
.css({
visibility:"hidden",position:"absolute",display:"block",right:"0",left:"0"
}).appendTo(e.parentNode)[0];

var parPos=jQuery.css(e.parentNode,"position");
if (parPos=="" || parPos=="static")
e.parentNode.style.position="relative";

oHeight=e.clientHeight;
oWidth=e.clientWidth;

if (parPos=="" || parPos=="static")
e.parentNode.style.position="static";

e.parentNode.removeChild(e);
}
});

return p=="height" ? oHeight:oWidth;
}

return jQuery.curCSS(e,p);
},

curCSS:function(elem,prop,force) {
var ret;

if (prop=="opacity" && jQuery.browser.msie)
return jQuery.attr(elem.style,"opacity");

if (prop=="float" || prop=="cssFloat")
prop=jQuery.browser.msie ? "styleFloat":"cssFloat";

if (!force && elem.style[prop])
ret=elem.style[prop];

else if (document.defaultView && document.defaultView.getComputedStyle) {

if (prop=="cssFloat" || prop=="styleFloat")
prop="float";

prop=prop.replace(/([A-Z])/g,"-$1").toLowerCase();
var cur=document.defaultView.getComputedStyle(elem,null);

if (cur)
ret=cur.getPropertyValue(prop);
else if (prop=="display")
ret="none";
else
jQuery.swap(elem,{ display:"block" },function() {
var c=document.defaultView.getComputedStyle(this,"");
ret=c && c.getPropertyValue(prop) || "";
});

} else if (elem.currentStyle) {

var newProp=prop.replace(/\-(\w)/g,function(m,c){return c.toUpperCase();});
ret=elem.currentStyle[prop] || elem.currentStyle[newProp];

}

return ret;
},

clean:function(a) {
var r=[];

jQuery.each(a,function(i,arg){
if (!arg) return;

if (arg.constructor==Number)
arg=arg.toString();

if (typeof arg=="string") {
var s=jQuery.trim(arg),div=document.createElement("div"),tb=[];

var wrap=
!s.indexOf("<opt") &&
[1,"<select>","</select>"] ||

(!s.indexOf("<thead") || !s.indexOf("<tbody") || !s.indexOf("<tfoot")) &&
[1,"<table>","</table>"] ||

!s.indexOf("<tr") &&
[2,"<table><tbody>","</tbody></table>"] ||

(!s.indexOf("<td") || !s.indexOf("<th")) &&
[3,"<table><tbody><tr>","</tr></tbody></table>"] ||

[0,"",""];

div.innerHTML=wrap[1] + s + wrap[2];

while (wrap[0]--)
div=div.firstChild;

if (jQuery.browser.msie) {

if (!s.indexOf("<table") && s.indexOf("<tbody") < 0)
tb=div.firstChild && div.firstChild.childNodes;

else if (wrap[1]=="<table>" && s.indexOf("<tbody") < 0)
tb=div.childNodes;

for (var n=tb.length-1; n >=0 ; --n)
if (jQuery.nodeName(tb[n],"tbody") && !tb[n].childNodes.length)
tb[n].parentNode.removeChild(tb[n]);

}

arg=[];
for (var i=0,l=div.childNodes.length; i<l; i++)
arg.push(div.childNodes[i]);
}

if (arg.length===0 && !jQuery.nodeName(arg,"form"))
return;

if (arg[0]==undefined || jQuery.nodeName(arg,"form"))
r.push(arg);
else
r=jQuery.merge(r,arg);

});

return r;
},

attr:function(elem,name,value){
var fix=jQuery.isXMLDoc(elem) ? {}:{
"for":"htmlFor",
"class":"className",
"float":jQuery.browser.msie ? "styleFloat":"cssFloat",
cssFloat:jQuery.browser.msie ? "styleFloat":"cssFloat",
innerHTML:"innerHTML",
className:"className",
value:"value",
disabled:"disabled",
checked:"checked",
readonly:"readOnly",
selected:"selected"
};

if (name=="opacity" && jQuery.browser.msie && value!=undefined) {
elem.zoom=1;

return elem.filter=elem.filter.replace(/alpha\([^\)]*\)/gi,"") +
(value==1 ? "":"alpha(opacity=" + value * 100 + ")");

} else if (name=="opacity" && jQuery.browser.msie)
return elem.filter ?
parseFloat(elem.filter.match(/alpha\(opacity=(.*)\)/)[1]) / 100:1;

if (name=="opacity" && jQuery.browser.mozilla && value==1)
value=0.9999;


if (fix[name]) {
if (value!=undefined) elem[fix[name]]=value;
return elem[fix[name]];

} 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) 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 {
name=name.replace(/-([a-z])/ig,function(z,b){return b.toUpperCase();});
if (value!=undefined) elem[name]=value;
return elem[name];
}
},
trim:function(t){
return t.replace(/^\s+|\s+$/g,"");
},

makeArray:function(a) {
var r=[];

if (a.constructor!=Array)
for (var i=0,al=a.length; i < al; i++)
r.push(a[i]);
else
r=a.slice(0);

return r;
},

inArray:function(b,a) {
for (var i=0,al=a.length; i < al; i++)
if (a[i]==b)
return i;
return -1;
},
merge:function(first,second) {
var r=[].slice.call(first,0);

for (var i=0,sl=second.length; i < sl; i++)
if (jQuery.inArray(second[i],r)==-1)
first.push(second[i]);

return first;
},
grep:function(elems,fn,inv) {
if (typeof fn=="string")
fn=new Function("a","i","return " + fn);

var result=[];

for (var i=0,el=elems.length; i < el; i++)
if (!inv && fn(elems[i],i) || inv && !fn(elems[i],i))
result.push(elems[i]);

return result;
},
map:function(elems,fn) {
if (typeof fn=="string")
fn=new Function("a","return " + fn);

var result=[],r=[];

for (var i=0,el=elems.length; i < el; i++) {
var val=fn(elems[i],i);

if (val!==null && val!=undefined) {
if (val.constructor!=Array) val=[val];
result=result.concat(val);
}
}

var r=result.length ? [ result[0] ]:[];

check:for (var i=1,rl=result.length; i < rl; i++) {
for (var j=0; j < i; j++)
if (result[i]==r[j])
continue check;

r.push(result[i]);
}

return r;
}
});

/*
* Whether the W3C compliant box model is being used.
*
* @property
* @name $.boxModel
* @type Boolean
* @cat JavaScript
*/
new function() {
var b=navigator.userAgent.toLowerCase();

jQuery.browser={
safari:/webkit/.test(b),
opera:/opera/.test(b),
msie:/msie/.test(b) && !/opera/.test(b),
mozilla:/mozilla/.test(b) && !/(compatible|webkit)/.test(b)
};

jQuery.boxModel=!jQuery.browser.msie || document.compatMode=="CSS1Compat";
};

jQuery.each({
parent:"a.parentNode",
parents:"jQuery.parents(a)",
next:"jQuery.nth(a,2,'nextSibling')",
prev:"jQuery.nth(a,2,'previousSibling')",
siblings:"jQuery.sibling(a.parentNode.firstChild,a)",
children:"jQuery.sibling(a.firstChild)"
},function(i,n){
jQuery.fn[ i ]=function(a) {
var ret=jQuery.map(this,n);
if (a && typeof a=="string")
ret=jQuery.multiFilter(a,ret);
return this.pushStack(ret);
};
});

jQuery.each({
appendTo:"append",
prependTo:"prepend",
insertBefore:"before",
insertAfter:"after"
},function(i,n){
jQuery.fn[ i ]=function(){
var a=arguments;
return this.each(function(){
for (var j=0,al=a.length; j < al; j++)
jQuery(a[j])[n](this);
});
};
});

jQuery.each({
removeAttr:function(key) {
jQuery.attr(this,key,"");
this.removeAttribute(key);
},
addClass:function(c){
jQuery.className.add(this,c);
},
removeClass:function(c){
jQuery.className.remove(this,c);
},
toggleClass:function(c){
jQuery.className[ jQuery.className.has(this,c) ? "remove":"add" ](this,c);
},
remove:function(a){
if (!a || jQuery.filter(a,[this]).r.length)
this.parentNode.removeChild(this);
},
empty:function() {
while (this.firstChild)
this.removeChild(this.firstChild);
}
},function(i,n){
jQuery.fn[ i ]=function() {
return this.each(n,arguments);
};
});

jQuery.each([ "eq","lt","gt","contains" ],function(i,n){
jQuery.fn[ n ]=function(num,fn) {
return this.filter(":" + n + "(" + num + ")",fn);
};
});

jQuery.each([ "height","width" ],function(i,n){
jQuery.fn[ n ]=function(h) {
return h==undefined ?
(this.length ? jQuery.css(this[0],n):null):
this.css(n,h.constructor==String ? h:h + "px");
};
});
jQuery.extend({
expr:{
"":"m[2]=='*'||jQuery.nodeName(a,m[2])",
"#":"a.getAttribute('id')==m[2]",
":":{
lt:"i<m[3]-0",
gt:"i>m[3]-0",
nth:"m[3]-0==i",
eq:"m[3]-0==i",
first:"i==0",
last:"i==r.length-1",
even:"i%2==0",
odd:"i%2",

"nth-child":"jQuery.nth(a.parentNode.firstChild,m[3],'nextSibling',a)==a",
"first-child":"jQuery.nth(a.parentNode.firstChild,1,'nextSibling')==a",
"last-child":"jQuery.nth(a.parentNode.lastChild,1,'previousSibling')==a",
"only-child":"jQuery.sibling(a.parentNode.firstChild).length==1",

parent:"a.firstChild",
empty:"!a.firstChild",

contains:"jQuery.fn.text.apply([a]).indexOf(m[3])>=0",

visible:'a.type!="hidden"&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden"',
hidden:'a.type=="hidden"||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden"',

enabled:"!a.disabled",
disabled:"a.disabled",
checked:"a.checked",
selected:"a.selected||jQuery.attr(a,'selected')",

text:"a.type=='text'",
radio:"a.type=='radio'",
checkbox:"a.type=='checkbox'",
file:"a.type=='file'",
password:"a.type=='password'",
submit:"a.type=='submit'",
image:"a.type=='image'",
reset:"a.type=='reset'",
button:'a.type=="button"||jQuery.nodeName(a,"button")',
input:"/input|select|textarea|button/i.test(a.nodeName)"
},
".":"jQuery.className.has(a,m[2])",
"@":{
"=":"z==m[4]",
"!=":"z!=m[4]",
"^=":"z&&!z.indexOf(m[4])",
"$=":"z&&z.substr(z.length - m[4].length,m[4].length)==m[4]",
"*=":"z&&z.indexOf(m[4])>=0",
"":"z",
_resort:function(m){
return ["",m[1],m[3],m[2],m[5]];
},
_prefix:"z=a[m[3]];if(!z||/href|src/.test(m[3]))z=jQuery.attr(a,m[3]);"
},
"[":"jQuery.find(m[2],a).length"
},

parse:[
/^\[ *(@)([a-z0-9_-]*) *([!*$^=]*) *('?"?)(.*?)\4 *\]/i,

// Match:[div],[div p]
/^(\[)\s*(.*?(\[.*?\])?[^[]*?)\s*\]/,

// Match::contains('foo')
/^(:)([a-z0-9_-]*)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/i,

/^([:.#]*)([a-z0-9_*-]*)/i
],

token:[
/^(\/?\.\.)/,"a.parentNode",
/^(>|\/)/,"jQuery.sibling(a.firstChild)",
/^(\+)/,"jQuery.nth(a,2,'nextSibling')",
/^(~)/,function(a){
var s=jQuery.sibling(a.parentNode.firstChild);
return s.slice(jQuery.inArray(a,s) + 1);
}
],

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)
context=null;

context=context || document;

if (!t.indexOf("//")) {
context=context.documentElement;
t=t.substr(2,t.length);

} else if (!t.indexOf("/")) {
context=context.documentElement;
t=t.substr(1,t.length);
if (t.indexOf("/") >=1)
t=t.substr(t.indexOf("/"),t.length);
}

var ret=[context],done=[],last=null;

while (t && last!=t) {
var r=[];
last=t;

t=jQuery.trim(t).replace(/^\/\//i,"");

var foundToken=false;

var re=/^[\/>]\s*([a-z0-9*-]+)/i;
var m=re.exec(t);

if (m) {
jQuery.each(ret,function(){
for (var c=this.firstChild; c; c=c.nextSibling)
if (c.nodeType==1 && (jQuery.nodeName(c,m[1]) || m[1]=="*"))
r.push(c);
});

ret=r;
t=t.replace(re,"");
if (t.indexOf(" ")==0) continue;
foundToken=true;
} else {
for (var i=0; i < jQuery.token.length; i +=2) {
var re=jQuery.token[i];
var m=re.exec(t);

if (m) {
r=ret=jQuery.map(ret,jQuery.isFunction(jQuery.token[i+1]) ?
jQuery.token[i+1]:
function(a){ return eval(jQuery.token[i+1]); });
t=jQuery.trim(t.replace(re,""));
foundToken=true;
break;
}
}
}

if (t && !foundToken) {
if (!t.indexOf(",")) {
if (ret[0]==context) ret.shift();
jQuery.merge(done,ret);
r=ret=[context];
t=" " + t.substr(1,t.length);
} else {
var re2=/^([a-z0-9_-]+)(#)([a-z0-9\*_-]*)/i;
var m=re2.exec(t);
if (m) {
m=[ 0,m[2],m[3],m[1] ];
} else {
re2=/^([#.]?)([a-z0-9\*_-]*)/i;
m=re2.exec(t);
}
if (m[1]=="#" && ret[ret.length-1].getElementById) {
var oid=ret[ret.length-1].getElementById(m[2]);
if (jQuery.browser.msie && oid && oid.id!=m[2])
oid=jQuery('[@id="'+m[2]+'"]',ret[ret.length-1])[0];
ret=r=oid && (!m[3] || jQuery.nodeName(oid,m[3])) ? [oid]:[];

} else {
if (m[1]==".")
var rec=new RegExp("(^|\s)" + m[2] + "(\s|$)");

jQuery.each(ret,function(){
var tag=m[1]!="" || m[0]=="" ? "*":m[2];
if (jQuery.nodeName(this,"object") && tag=="*")
tag="param";

jQuery.merge(r,
m[1]!="" && ret.length!=1 ?
jQuery.getAll(this,[],m[1],m[2],rec):
this.getElementsByTagName(tag)
);
});
if (m[1]=="." && ret.length==1)
r=jQuery.grep(r,function(e) {
return rec.test(e.className);
});
if (m[1]=="#" && ret.length==1) {
var tmp=r;
r=[];
jQuery.each(tmp,function(){
if (this.getAttribute("id")==m[2]) {
r=[ this ];
return false;
}
});
}

ret=r;
}

t=t.replace(re2,"");
}

}

if (t) {
var val=jQuery.filter(t,r);
ret=r=val.r;
t=jQuery.trim(val.t);
}
}

if (ret && ret[0]==context) ret.shift();

jQuery.merge(done,ret);

return done;
},

filter:function(t,r,not) {
while (t && /^[a-z[({<*:.#]/i.test(t)) {

var p=jQuery.parse,m;

jQuery.each(p,function(i,re){

m=re.exec(t);

if (m) {
t=t.substring(m[0].length);

if (jQuery.expr[ m[1] ]._resort)
m=jQuery.expr[ m[1] ]._resort(m);

return false;
}
});

//:not() is a special case that can be optimized by
// keeping it out of the expression list
if (m[1]==":" && m[2]=="not")
r=jQuery.filter(m[3],r,true).r;

// Handle classes as a special case (this will help to
// improve the speed,as the regexp will only be compiled once)
else if (m[1]==".") {

var re=new RegExp("(^|\s)" + m[2] + "(\s|$)");
r=jQuery.grep(r,function(e){
return re.test(e.className || "");
},not);

// Otherwise,find the expression to execute
} else {
var f=jQuery.expr[m[1]];
if (typeof f!="string")
f=jQuery.expr[m[1]][m[2]];

// Build a custom macro to enclose it
eval("f=function(a,i){" +
(jQuery.expr[ m[1] ]._prefix || "") +
"return " + f + "}");

// Execute it against the current filter
r=jQuery.grep(r,f,not);
}
}

// Return an array of filtered elements (r)
// and the modified expression string (t)
return { r:r,t:t };
},

getAll:function(o,r,token,name,re) {
for (var s=o.firstChild; s; s=s.nextSibling)
if (s.nodeType==1) {
var add=true;

if (token==".")
add=s.className && re.test(s.className);
else if (token=="#")
add=s.getAttribute("id")==name;

if (add)
r.push(s);

if (token=="#" && r.length) break;

if (s.firstChild)
jQuery.getAll(s,r,token,name,re);
}

return r;
},
parents:function(elem){
var matched=[];
var cur=elem.parentNode;
while (cur && cur!=document) {
matched.push(cur);
cur=cur.parentNode;
}
return matched;
},
nth:function(cur,result,dir,elem){
result=result || 1;
var num=0;
for (; cur; cur=cur[dir]) {
if (cur.nodeType==1) num++;
if (num==result || result=="even" && num % 2==0 && num > 1 && cur==elem ||
result=="odd" && num % 2==1 && cur==elem) 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;
}
});
/*
* A number of helper functions used for managing events.
* Many of the ideas behind this code orignated from
* Dean Edwards' addEvent library.
*/
jQuery.event={

// Bind an event to an element
// Original by Dean Edwards
add:function(element,type,handler,data) {
// For whatever reason,IE has trouble passing the window object
// around,causing it to be cloned in the process
if (jQuery.browser.msie && element.setInterval!=undefined)
element=window;

// if data is passed,bind to handler
if(data)
handler.data=data;

// Make sure that the function being executed has a unique ID
if (!handler.guid)
handler.guid=this.guid++;

// Init the element's event structure
if (!element.$events)
element.$events={};

// Get the current list of functions bound to this event
var handlers=element.$events[type];

// If it hasn't been initialized yet
if (!handlers) {
// Init the event handler queue
handlers=element.$events[type]={};

// Remember an existing handler,if it's already there
if (element["on" + type])
handlers[0]=element["on" + type];
}

// Add the function to the element's handler list
handlers[handler.guid]=handler;

// And bind the global event handler to the element
element["on" + type]=this.handle;

// Remember the function in a global list (for triggering)
if (!this.global[type])
this.global[type]=[];
this.global[type].push(element);
},

guid:1,
global:{},

// Detach an event or set of events from an element
remove:function(element,type,handler) {
if (element.$events) {
var i,j,k;
if (type && type.type) { // type is actually an event object here
handler=type.handler;
type   =type.type;
}

if (type && element.$events[type])
// remove the given handler for the given type
if (handler)
delete element.$events[type][handler.guid];

// remove all handlers for the given type
else
for (i in element.$events[type])
delete element.$events[type][i];

// remove all handlers
else
for (j in element.$events)
this.remove(element,j);

// remove event handler if no more handlers exist
for (k in element.$events[type])
if (k) {
k=true;
break;
}
if (!k) element["on" + type]=null;
}
},

trigger:function(type,data,element) {
// Clone the incoming data,if any
data=jQuery.makeArray(data || []);

// Handle a global trigger
if (!element)
jQuery.each(this.global[type] || [],function(){
jQuery.event.trigger(type,data,this);
});

// Handle triggering a single element
else {
var handler=element["on" + type ],val,
fn=jQuery.isFunction(element[ type ]);

if (handler) {
// Pass along a fake event
data.unshift(this.fix({ type:type,target:element }));

// Trigger the event
if ((val=handler.apply(element,data))!==false)
this.triggered=true;
}

if (fn && val!==false)
element[ type ]();

this.triggered=false;
}
},

handle:function(event) {
// Handle the second event of a trigger and when
// an event is called after a page has unloaded
if (typeof jQuery=="undefined" || jQuery.event.triggered) return;

// Empty object is for triggered events with no data
event=jQuery.event.fix(event || window.event || {});

// returned undefined or false
var returnValue;

var c=this.$events[event.type];

var args=[].slice.call(arguments,1);
args.unshift(event);

for (var j in c) {
// Pass in a reference to the handler function itself
// So that we can later remove it
args[0].handler=c[j];
args[0].data=c[j].data;

if (c[j].apply(this,args)===false) {
event.preventDefault();
event.stopPropagation();
returnValue=false;
}
}

// Clean up added properties in IE to prevent memory leak
if (jQuery.browser.msie) event.target=event.preventDefault=event.stopPropagation=event.handler=event.data=null;

return returnValue;
},

fix:function(event) {
// Fix target property,if necessary
if (!event.target && event.srcElement)
event.target=event.srcElement;

// Calculate pageX/Y if missing and clientX/Y available
if (event.pageX==undefined && event.clientX!=undefined) {
var e=document.documentElement,b=document.body;
event.pageX=event.clientX + (e.scrollLeft || b.scrollLeft);
event.pageY=event.clientY + (e.scrollTop || b.scrollTop);
}

// check if target is a textnode (safari)
if (jQuery.browser.safari && event.target.nodeType==3) {
// store a copy of the original event object
// and clone because target is read only
var originalEvent=event;
event=jQuery.extend({},originalEvent);

// get parentnode from textnode
event.target=originalEvent.target.parentNode;

// add preventDefault and stopPropagation since
// they will not work on the clone
event.preventDefault=function() {
return originalEvent.preventDefault();
};
event.stopPropagation=function() {
return originalEvent.stopPropagation();
};
}

// fix preventDefault and stopPropagation
if (!event.preventDefault)
event.preventDefault=function() {
this.returnValue=false;
};

if (!event.stopPropagation)
event.stopPropagation=function() {
this.cancelBubble=true;
};

return event;
}
};

jQuery.fn.extend({
bind:function(type,data,fn) {
return this.each(function(){
jQuery.event.add(this,type,fn || data,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);
},data);
});
},
unbind:function(type,fn) {
return this.each(function(){
jQuery.event.remove(this,type,fn);
});
},
trigger:function(type,data) {
return this.each(function(){
jQuery.event.trigger(type,data,this);
});
},
toggle:function() {
// Save reference to arguments for access in closure
var a=arguments;

return this.click(function(e) {
// Figure out which function to execute
this.lastToggle=this.lastToggle==0 ? 1:0;

// Make sure that clicks stop
e.preventDefault();

// and execute the function
return a[this.lastToggle].apply(this,[e]) || false;
});
},
hover:function(f,g) {

// A private function for handling mouse 'hovering'
function handleHover(e) {
// Check if mouse(over|out) are still within the same parent element
var p=(e.type=="mouseover" ? e.fromElement:e.toElement) || e.relatedTarget;

// Traverse up the tree
while (p && p!=this) try { p=p.parentNode } catch(e) { p=this; };

// If we actually just moused on to a sub-element,ignore it
if (p==this) return false;

// Execute the right function
return (e.type=="mouseover" ? f:g).apply(this,[e]);
}

// Bind the function to the two event listeners
return this.mouseover(handleHover).mouseout(handleHover);
},
ready:function(f) {
// If the DOM is already ready
if (jQuery.isReady)
// Execute the function immediately
f.apply(document,[jQuery]);

// Otherwise,remember the function for later
else {
// Add the function to the wait list
jQuery.readyList.push(function() { return f.apply(this,[jQuery]) });
}

return this;
}
});

jQuery.extend({
/*
* All the code that makes DOM Ready work nicely.
*/
isReady:false,
readyList:[],

// Handle when the DOM is ready
ready:function() {
// Make sure that the DOM is not already loaded
if (!jQuery.isReady) {
// Remember that the DOM is ready
jQuery.isReady=true;

// If there are functions bound,to execute
if (jQuery.readyList) {
// Execute all of them
jQuery.each(jQuery.readyList,function(){
this.apply(document);
});

// Reset the list of functions
jQuery.readyList=null;
}
// Remove event lisenter to avoid memory leak
if (jQuery.browser.mozilla || jQuery.browser.opera)
document.removeEventListener("DOMContentLoaded",jQuery.ready,false);
}
}
});

new function(){

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,o){

// Handle event binding
jQuery.fn[o]=function(f){
return f ? this.bind(o,f):this.trigger(o);
};

});

// If Mozilla is used
if (jQuery.browser.mozilla || jQuery.browser.opera)
// Use the handy event callback
document.addEventListener("DOMContentLoaded",jQuery.ready,false);

else if (jQuery.browser.msie) {

// Only works if you document.write() it
document.write("<scr" + "ipt id=__ie_init defer=true " +
"src=//:><\/script>");

// Use the defer script hack
var script=document.getElementById("__ie_init");

// script does not exist if jQuery is loaded dynamically
if (script)
script.onreadystatechange=function() {
if (this.readyState!="complete") return;
this.parentNode.removeChild(this);
jQuery.ready();
};

// Clear from memory
script=null;

// If Safari  is used
} else if (jQuery.browser.safari)
// Continually check to see if the document.readyState is valid
jQuery.safariTimer=setInterval(function(){
// loaded and complete are both valid states
if (document.readyState=="loaded" ||
document.readyState=="complete") {

// If either one are found,remove the timer
clearInterval(jQuery.safariTimer);
jQuery.safariTimer=null;

// and execute any waiting functions
jQuery.ready();
}
},10);

// A fallback to window.onload,that will always work
jQuery.event.add(window,"load",jQuery.ready);

};

// Clean up after IE to avoid memory leaks
if (jQuery.browser.msie)
jQuery(window).one("unload",function() {
var global=jQuery.event.global;
for (var type in global) {
var els=global[type],i=els.length;
if (i && type!='unload')
do
jQuery.event.remove(els[i-1],type);
while (--i);
}
});
jQuery.fn.extend({
loadIfModified:function(url,params,callback) {
this.load(url,params,callback,1);
},
load:function(url,params,callback,ifModified) {
if (jQuery.isFunction(url))
return this.bind("load",url);

callback=callback || function(){};

// Default to a GET request
var type="GET";

// If the second parameter was provided
if (params)
// If it's a function
if (jQuery.isFunction(params)) {
// We assume that it's the callback
callback=params;
params=null;

// Otherwise,build a param string
} else {
params=jQuery.param(params);
type="POST";
}

var self=this;

// Request the remote document
jQuery.ajax({
url:url,
type:type,
data:params,
ifModified:ifModified,
complete:function(res,status){
if (status=="success" || !ifModified && status=="notmodified")
// Inject the HTML into all the matched elements
self.attr("innerHTML",res.responseText)
// Execute all the scripts inside of the newly-injected HTML
.evalScripts()
// Execute callback
.each(callback,[res.responseText,status,res]);
else
callback.apply(self,[res.responseText,status,res]);
}
});
return this;
},
serialize:function() {
return jQuery.param(this);
},
evalScripts:function() {
return this.find("script").each(function(){
if (this.src)
jQuery.getScript(this.src);
else
jQuery.globalEval(this.text || this.textContent || this.innerHTML || "");
}).end();
}

});

// If IE is used,create a wrapper for the XMLHttpRequest object
if (!window.XMLHttpRequest)
XMLHttpRequest=function(){
return new ActiveXObject("Microsoft.XMLHTTP");
};

// Attach a bunch of functions for handling common AJAX events

jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){
jQuery.fn[o]=function(f){
return this.bind(o,f);
};
});

jQuery.extend({
get:function(url,data,callback,type,ifModified) {
// shift arguments if data argument was ommited
if (jQuery.isFunction(data)) {
callback=data;
data=null;
}

return jQuery.ajax({
url:url,
data:data,
success:callback,
dataType:type,
ifModified:ifModified
});
},
getIfModified:function(url,data,callback,type) {
return jQuery.get(url,data,callback,type,1);
},
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
});
},

// timeout (ms)
//timeout:0,
ajaxTimeout:function(timeout) {
jQuery.ajaxSettings.timeout=timeout;
},
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
},

// Last-Modified header cache for next request
lastModified:{},
ajax:function(s) {
// TODO introduce global settings,allowing the client to modify them for all requests,not only timeout
s=jQuery.extend({},jQuery.ajaxSettings,s);

// if data available
if (s.data) {
// convert data if not already a string
if (s.processData && typeof s.data!="string")
s.data=jQuery.param(s.data);
// append data to url for get requests
if(s.type.toLowerCase()=="get") {
// "?" + data or "&" + data (in case there are already params)
s.url +=((s.url.indexOf("?") > -1) ? "&":"?") + s.data;
// IE likes to send both get and post data,prevent this
s.data=null;
}
}

// Watch for a new set of requests
if (s.global && ! jQuery.active++)
jQuery.event.trigger("ajaxStart");

var requestDone=false;

// Create the request object
var xml=new XMLHttpRequest();

// Open the socket
xml.open(s.type,s.url,s.async);

// Set the correct header,if data is being sent
if (s.data)
xml.setRequestHeader("Content-Type",s.contentType);

// Set the If-Modified-Since header,if ifModified mode.
if (s.ifModified)
xml.setRequestHeader("If-Modified-Since",
jQuery.lastModified[s.url] || "Thu,01 Jan 1970 00:00:00 GMT");

// Set header so the called script knows that it's an XMLHttpRequest
xml.setRequestHeader("X-Requested-With","XMLHttpRequest");

// Make sure the browser sends the right content length
if (xml.overrideMimeType)
xml.setRequestHeader("Connection","close");

// Allow custom headers/mimetypes
if(s.beforeSend)
s.beforeSend(xml);

if (s.global)
jQuery.event.trigger("ajaxSend",[xml,s]);

// Wait for a response to come back
var onreadystatechange=function(isTimeout){
// The transfer is complete and the data is available,or the request timed out
if (xml && (xml.readyState==4 || isTimeout=="timeout")) {
requestDone=true;

// clear poll interval
if (ival) {
clearInterval(ival);
ival=null;
}

var status;
try {
status=jQuery.httpSuccess(xml) && isTimeout!="timeout" ?
s.ifModified && jQuery.httpNotModified(xml,s.url) ? "notmodified":"success":"error";
// Make sure that the request was successful or notmodified
if (status!="error") {
// Cache Last-Modified header,if ifModified mode.
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;

// process the data (runs the xml through httpData regardless of callback)
var data=jQuery.httpData(xml,s.dataType);

// If a local callback was specified,fire it and pass it the data
if (s.success)
s.success(data,status);

// Fire the global callback
if(s.global)
jQuery.event.trigger("ajaxSuccess",[xml,s]);
} else
jQuery.handleError(s,xml,status);
} catch(e) {
status="error";
jQuery.handleError(s,xml,status,e);
}

// The request was completed
if(s.global)
jQuery.event.trigger("ajaxComplete",[xml,s]);

// Handle the global AJAX counter
if (s.global && ! --jQuery.active)
jQuery.event.trigger("ajaxStop");

// Process result
if (s.complete)
s.complete(xml,status);

// Stop memory leaks
if(s.async)
xml=null;
}
};

// don't attach the handler to the request,just poll it instead
var ival=setInterval(onreadystatechange,13);

// Timeout checker
if (s.timeout > 0)
setTimeout(function(){
// Check to see if the request is still happening
if (xml) {
// Cancel the request
xml.abort();

if(!requestDone)
onreadystatechange("timeout");
}
},s.timeout);

// Send the data
try {
xml.send(s.data);
} catch(e) {
jQuery.handleError(s,xml,null,e);
}

// firefox 1.5 doesn't fire statechange for sync requests
if (!s.async)
onreadystatechange();

// return XMLHttpRequest to allow aborting the request etc.
return xml;
},

handleError:function(s,xml,status,e) {
// If a local callback was specified,fire it
if (s.error) s.error(xml,status,e);

// Fire the global callback
if (s.global)
jQuery.event.trigger("ajaxError",[xml,s,e]);
},

// Counter for holding the number of active queries
active:0,

// Determines if an XMLHttpRequest was successful or not
httpSuccess:function(r) {
try {
return !r.status && location.protocol=="file:" ||
(r.status >=200 && r.status < 300) || r.status==304 ||
jQuery.browser.safari && r.status==undefined;
} catch(e){}
return false;
},

// Determines if an XMLHttpRequest returns NotModified
httpNotModified:function(xml,url) {
try {
var xmlRes=xml.getResponseHeader("Last-Modified");

// Firefox always returns 200. check Last-Modified date
return xml.status==304 || xmlRes==jQuery.lastModified[url] ||
jQuery.browser.safari && xml.status==undefined;
} catch(e){}
return false;
},

/* Get the data out of an XMLHttpRequest.
* Return parsed XML if content-type header is "xml" and type is "xml" or omitted,
* otherwise return plain text.
* (String) data - The type of data that you're expecting back,
* (e.g. "xml","html","script")
*/
httpData:function(r,type) {
var ct=r.getResponseHeader("content-type");
var data=!type && ct && ct.indexOf("xml") >=0;
data=type=="xml" || data ? r.responseXML:r.responseText;

// If the type is "script",eval it in global context
if (type=="script")
jQuery.globalEval(data);

// Get the JavaScript object,if JSON is used.
if (type=="json")
eval("data=" + data);

// evaluate scripts within html
if (type=="html")
jQuery("<div>").html(data).evalScripts();

return data;
},

// Serialize an array of form elements or a set of
// key/values into a query string
param:function(a) {
var s=[];

// If an array was passed in,assume that it is an array
// of form elements
if (a.constructor==Array || a.jquery)
// Serialize the form elements
jQuery.each(a,function(){
s.push(encodeURIComponent(this.name) + "=" + encodeURIComponent(this.value));
});

// Otherwise,assume that it's an object of key/value pairs
else
// Serialize the key/values
for (var j in a)
// If the value is an array then the key names need to be repeated
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 the resulting serialization
return s.join("&");
},

// evalulates a script in global context
// not reliable for safari
globalEval:function(data) {
if (window.execScript)
window.execScript(data);
else if (jQuery.browser.safari)
// safari doesn't provide a synchronous global eval
window.setTimeout(data,0);
else
eval.call(window,data);
}

});
jQuery.fn.extend({

show:function(speed,callback){
var hidden=this.filter(":hidden");
speed ?
hidden.animate({
height:"show",width:"show",opacity:"show"
},speed,callback):

hidden.each(function(){
this.style.display=this.oldblock ? this.oldblock:"";
if (jQuery.css(this,"display")=="none")
this.style.display="block";
});
return this;
},

hide:function(speed,callback){
var visible=this.filter(":visible");
speed ?
visible.animate({
height:"hide",width:"hide",opacity:"hide"
},speed,callback):

visible.each(function(){
this.oldblock=this.oldblock || jQuery.css(this,"display");
if (this.oldblock=="none")
this.oldblock="block";
this.style.display="none";
});
return this;
},

// Save the old toggle function
_toggle:jQuery.fn.toggle,
toggle:function(fn,fn2){
var args=arguments;
return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ?
this._toggle(fn,fn2):
this.each(function(){
jQuery(this)[ jQuery(this).is(":hidden") ? "show":"hide" ]
.apply(jQuery(this),args);
});
},
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.each(function(){
var state=jQuery(this).is(":hidden") ? "show":"hide";
jQuery(this).animate({height:state},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) {
return this.queue(function(){

this.curAnim=jQuery.extend({},prop);
var opt=jQuery.speed(speed,easing,callback);

for (var p in prop) {
var e=new jQuery.fx(this,opt,p);
if (prop[p].constructor==Number)
e.custom(e.cur(),prop[p]);
else
e[ prop[p] ](prop);
}

});
},
queue:function(type,fn){
if (!fn) {
fn=type;
type="fx";
}

return this.each(function(){
if (!this.queue)
this.queue={};

if (!this.queue[type])
this.queue[type]=[];

this.queue[type].push(fn);

if (this.queue[type].length==1)
fn.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;

// Queueing
opt.old=opt.complete;
opt.complete=function(){
jQuery.dequeue(this,"fx");
if (jQuery.isFunction(opt.old))
opt.old.apply(this);
};

return opt;
},

easing:{},

queue:{},

dequeue:function(elem,type){
type=type || "fx";

if (elem.queue && elem.queue[type]) {
// Remove self
elem.queue[type].shift();

// Get next function
var f=elem.queue[type][0];

if (f) f.apply(elem);
}
},

fx:function(elem,options,prop){

var z=this;

// The styles
var y=elem.style;

// Store display property
var oldDisplay=jQuery.css(elem,"display");

// Make sure that nothing sneaks out
y.overflow="hidden";

// Simple function for setting a style value
z.a=function(){
if (options.step)
options.step.apply(elem,[ z.now ]);

if (prop=="opacity")
jQuery.attr(y,"opacity",z.now); // Let attr handle opacity
else if (parseInt(z.now)) // My hate for IE will never die
if(navigator.appName=='Microsoft Internet Explorer'){
y[prop]=(z.now >=0) ? parseInt(z.now):0;
}else{
y[prop]=parseInt(z.now) + "px";
}

y.display="block"; // Set display property to block for animation
};

// Figure out the maximum number to run to
z.max=function(){
return parseFloat(jQuery.css(elem,prop));
};

// Get the current size
z.cur=function(){
var r=parseFloat(jQuery.curCSS(elem,prop));
return r && r > -10000 ? r:z.max();
};

// Start an animation from one number to another
z.custom=function(from,to){
z.startTime=(new Date()).getTime();
z.now=from;
z.a();

z.timer=setInterval(function(){
z.step(from,to);
},13);
};

// Simple 'show' function
z.show=function(){
if (!elem.orig) elem.orig={};

// Remember where we started,so that we can go back to it later
elem.orig[prop]=this.cur();

options.show=true;

// Begin the animation
z.custom(0,elem.orig[prop]);

// Stupid IE,look what you made me do
if (prop!="opacity")
y[prop]="1px";
};

// Simple 'hide' function
z.hide=function(){
if (!elem.orig) elem.orig={};

// Remember where we started,so that we can go back to it later
elem.orig[prop]=this.cur();

options.hide=true;

// Begin the animation
z.custom(elem.orig[prop],0);
};

//Simple 'toggle' function
z.toggle=function() {
if (!elem.orig) elem.orig={};

// Remember where we started,so that we can go back to it later
elem.orig[prop]=this.cur();

if(oldDisplay=="none")  {
options.show=true;

// Stupid IE,look what you made me do
if (prop!="opacity")
y[prop]="1px";

// Begin the animation
z.custom(0,elem.orig[prop]);
} else {
options.hide=true;

// Begin the animation
z.custom(elem.orig[prop],0);
}
};

// Each step of an animation
z.step=function(firstNum,lastNum){
var t=(new Date()).getTime();

if (t > options.duration + z.startTime) {
// Stop the timer
clearInterval(z.timer);
z.timer=null;

z.now=lastNum;
z.a();

if (elem.curAnim) elem.curAnim[ prop ]=true;

var done=true;
for (var i in elem.curAnim)
if (elem.curAnim[i]!==true)
done=false;

if (done) {
// Reset the overflow
y.overflow="";

// Reset the display
y.display=oldDisplay;
if (jQuery.css(elem,"display")=="none")
y.display="block";

// Hide the element if the "hide" operation was done
if (options.hide)
y.display="none";

// Reset the properties,if the item has been hidden or shown
if (options.hide || options.show)
for (var p in elem.curAnim)
if (p=="opacity")
jQuery.attr(y,p,elem.orig[p]);
else
y[p]="";
}

// If a callback was provided,execute it
if (done && jQuery.isFunction(options.complete))
// Execute the complete function
options.complete.apply(elem);
} else {
var n=t - this.startTime;
// Figure out where in the animation we are and set the number
var p=n / options.duration;

// If the easing function exists,then use it
z.now=options.easing && jQuery.easing[options.easing] ?
jQuery.easing[options.easing](p,n, firstNum,(lastNum-firstNum),options.duration):
// else use default linear easing
((-Math.cos(p*Math.PI)/2) + 0.5) * (lastNum-firstNum) + firstNum;

// Perform the next step of the animation
z.a();
}
};

}
});
}

jQuery.fn._height=jQuery.fn.height;
jQuery.fn._width =jQuery.fn.width;
jQuery.fn.height=function() {
if (this[0]==window)
return self.innerHeight ||
jQuery.boxModel && document.documentElement.clientHeight ||
document.body.clientHeight;

if (this[0]==document)
return Math.max(document.body.scrollHeight,document.body.offsetHeight);

return this._height(arguments[0]);
};
jQuery.fn.width=function() {
if (this[0]==window)
return self.innerWidth ||
jQuery.boxModel && document.documentElement.clientWidth ||
document.body.clientWidth;

if (this[0]==document)
return Math.max(document.body.scrollWidth,document.body.offsetWidth);

return this._width(arguments[0]);
};
jQuery.fn.innerHeight=function() {
return this[0]==window || this[0]==document ?
this.height():
this.css('display')!='none' ?
 this[0].offsetHeight - (parseInt(this.css("borderTopWidth")) || 0) - (parseInt(this.css("borderBottomWidth")) || 0):
this.height() + (parseInt(this.css("paddingTop")) || 0) + (parseInt(this.css("paddingBottom")) || 0);
};
jQuery.fn.innerWidth=function() {
return this[0]==window || this[0]==document ?
this.width():
this.css('display')!='none' ?
this[0].offsetWidth - (parseInt(this.css("borderLeftWidth")) || 0) - (parseInt(this.css("borderRightWidth")) || 0):
this.height() + (parseInt(this.css("paddingLeft")) || 0) + (parseInt(this.css("paddingRight")) || 0);
};
jQuery.fn.outerHeight=function() {
return this[0]==window || this[0]==document ?
this.height():
this.css('display')!='none' ?
this[0].offsetHeight:
this.height() + (parseInt(this.css("borderTopWidth")) || 0) + (parseInt(this.css("borderBottomWidth")) || 0)
+ (parseInt(this.css("paddingTop")) || 0) + (parseInt(this.css("paddingBottom")) || 0);
};
jQuery.fn.outerWidth=function() {
return this[0]==window || this[0]==document ?
this.width():
this.css('display')!='none' ?
this[0].offsetWidth:
this.height() + (parseInt(this.css("borderLeftWidth")) || 0) + (parseInt(this.css("borderRightWidth")) || 0)
+ (parseInt(this.css("paddingLeft")) || 0) + (parseInt(this.css("paddingRight")) || 0);
};
jQuery.fn.scrollLeft=function() {
if (this[0]==window || this[0]==document)
return self.pageXOffset ||
jQuery.boxModel && document.documentElement.scrollLeft ||
document.body.scrollLeft;

return this[0].scrollLeft;
};
jQuery.fn.scrollTop=function() {
if (this[0]==window || this[0]==document)
return self.pageYOffset ||
jQuery.boxModel && document.documentElement.scrollTop ||
document.body.scrollTop;

return this[0].scrollTop;
};
jQuery.fn.offset=function(options,returnObject) {
var x=0,y=0,elem=this[0],parent=this[0],absparent=false,relparent=false,op,sl=0,st=0,options=jQuery.extend({ margin:true,border:true,padding:false,scroll:true },options || {});
do {
x +=parent.offsetLeft || 0;
y +=parent.offsetTop  || 0;

if (jQuery.browser.mozilla || jQuery.browser.msie) {
var bt=parseInt(jQuery.css(parent,'borderTopWidth')) || 0;
var bl=parseInt(jQuery.css(parent,'borderLeftWidth')) || 0;

x +=bl;
y +=bt;

if (jQuery.browser.mozilla && parent!=elem && jQuery.css(parent,'overflow')!='visible') {
x +=bl;
y +=bt;
}

if (jQuery.css(parent,'position')=='absolute') absparent=true;
if (jQuery.css(parent,'position')=='relative') relparent=true;
}

if (options.scroll) {
op=parent.offsetParent;
do {
sl +=parent.scrollLeft || 0;
st +=parent.scrollTop  || 0;

parent=parent.parentNode;

if (jQuery.browser.mozilla && parent!=elem && parent!=op && jQuery.css(parent,'overflow')!='visible') {
x +=parseInt(jQuery.css(parent,'borderLeftWidth')) || 0;
y +=parseInt(jQuery.css(parent,'borderTopWidth')) || 0;
}
} while (op && parent!=op);
} else
parent=parent.offsetParent;

if (parent && (parent.tagName.toLowerCase()=='body' || parent.tagName.toLowerCase()=='html')) {
if ((jQuery.browser.safari || (jQuery.browser.msie && jQuery.boxModel)) && jQuery.css(elem,'position')!='absolute') {
x +=parseInt(jQuery.css(parent,'marginLeft')) || 0;
y +=parseInt(jQuery.css(parent,'marginTop'))  || 0;
}
if ((jQuery.browser.mozilla && !absparent) || 
     (jQuery.browser.msie && jQuery.css(elem,'position')=='static' && (!relparent || !absparent))) {
x +=parseInt(jQuery.css(parent,'borderLeftWidth')) || 0;
y +=parseInt(jQuery.css(parent,'borderTopWidth'))  || 0;
}
break;
}
} 
while (parent);

	if (!options.margin) {
		x -=parseInt(jQuery.css(elem,'marginLeft')) || 0;
		y -=parseInt(jQuery.css(elem,'marginTop'))  || 0;
	}

	if (options.border && (jQuery.browser.safari || jQuery.browser.opera)) {
		x +=parseInt(jQuery.css(elem,'borderLeftWidth')) || 0;
		y +=parseInt(jQuery.css(elem,'borderTopWidth'))  || 0;
	} 
	else if (!options.border && !(jQuery.browser.safari || jQuery.browser.opera)) {
		x -=parseInt(jQuery.css(elem,'borderLeftWidth')) || 0;
		y -=parseInt(jQuery.css(elem,'borderTopWidth'))  || 0;
	}

	if (options.padding) {
		x +=parseInt(jQuery.css(elem,'paddingLeft')) || 0;
		y +=parseInt(jQuery.css(elem,'paddingTop'))  || 0;
	}

	if (options.scroll && jQuery.browser.opera && jQuery.css(elem,'display')=='inline') {
		sl -=elem.scrollLeft || 0;
		st -=elem.scrollTop  || 0;
	}

	var returnValue=options.scroll ? { top:y - st,left:x - sl,scrollTop: st,scrollLeft:sl } : { top:y,left:x };
	if (returnObject) { 
		jQuery.extend(returnObject,returnValue); return this; 
	}
	else {
		return returnValue; 
	}
};

jQuery.easing={easein:function(x,t,b,c,d){return c*(t/=d)*t+b;},easeinout:function(x,t,b,c,d){if(t<d/2){return 2*c*t*t/(d*d)+b;}var ts=t - d/2;return -2*c*ts*ts/(d*d)+2*c*ts/d+c/2+b;},easeout:function(x,t,b,c,d){return -c*t*t/(d*d)+2*c*t/d+b;},expoin:function(x,t,b,c,d){var flip=1;if(c<0){flip*=-1;c*=-1;}return flip*(Math.exp(Math.log(c)/d*t))+b;},expoout:function(x,t,b,c,d){var flip=1;if(c<0){flip*=-1;c*=-1;}return flip*(-Math.exp(-Math.log(c)/d*(t-d))+c+1)+b;},expoinout:function(x,t,b,c,d){var flip=1;if(c<0){flip*=-1;c*=-1;}if(t<d/2)return flip*(Math.exp(Math.log(c/2)/(d/2)*t))+b;return flip*(-Math.exp(-2*Math.log(c/2)/d*(t-d))+c+1)+b;},bouncein:function(x,t,b,c,d){return c-jQuery.easing['bounceout'](x,d-t,0,c,d)+b;},bounceout:function(x,t,b,c,d){if((t/=d)<(1/2.75)){return c*(7.5625*t*t)+b;}else if(t<(2/2.75)){return c*(7.5625*(t-=(1.5/2.75))*t+.75)+b;}else if(t<(2.5/2.75)){return c*(7.5625*(t-=(2.25/2.75))*t+.9375)+b;}else{return c*(7.5625*(t-=(2.625/2.75))*t+.984375)+b;}},bounceinout:function(x,t,b,c,d){if(t<d/2){return jQuery.easing['bouncein'](x,t*2,0,c,d)*.5+b;}return jQuery.easing['bounceout'](x,t*2-d,0,c,d)*.5+c*.5+b;},elasin:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;  if((t/=d)==1)return b+c;  if(!p)p=d*.3;if(a<Math.abs(c)){ a=c; var s=p/4; }else var s=p/(2*Math.PI)*Math.asin(c/a);return -(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;},elasout:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;  if((t/=d)==1)return b+c;  if(!p)p=d*.3;if(a<Math.abs(c)){ a=c; var s=p/4; }else{var s=p/(2*Math.PI)*Math.asin(c/a);}return a*Math.pow(2,-10*t)*Math.sin((t*d-s)*(2*Math.PI)/p)+c+b;},elasinout:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0){return b;}  if((t/=d/2)==2){return b+c;}  if(!p){p=d*(.3*1.5);}if(a<Math.abs(c)){ a=c; var s=p/4; }else{var s=p/(2*Math.PI)*Math.asin(c/a);}if(t<1){return -.5*(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;}return a*Math.pow(2,-10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p)*.5+c+b;},backin:function(x,t,b,c,d){var s=1.70158;return c*(t/=d)*t*((s+1)*t - s)+b;},backout:function(x,t,b,c,d){var s=1.70158;return c*((t=t/d-1)*t*((s+1)*t+s)+1)+b;},backinout:function(x,t,b,c,d){var s=1.70158;if((t/=d/2)<1){return c/2*(t*t*(((s*=(1.525))+1)*t - s))+b;}return c/2*((t-=2)*t*(((s*=(1.525))+1)*t+s)+2)+b;},linear:function(x,t,b,c,d){return c*t/d+b;}};

var browserName=navigator.appName;

function esFirefox(){
	var navegador=navigator.userAgent;
	if(navegador.lastIndexOf('Firefox')!=-1){
		return true;
	}
	else{
		return false;
	}
}

function esSafari(){
	var navegador=navigator.userAgent;
	if(navegador.lastIndexOf('Safari')!=-1){
		return true;
	}
	else{
		return false;
	}
}

function getScrollTop(){
	if (self.pageYOffset){
		return self.pageYOffset;
	}
	else if (document.documentElement && document.documentElement.scrollTop){
		return document.documentElement.scrollTop;
	}
	else if (document.body){
		return document.body.scrollTop;
	}
}

function getScrollLeft(){
	if (self.pageXOffset){
		return self.pageXOffset;
	}
	else if (document.documentElement && document.documentElement.scrollLeft){
		return document.documentElement.scrollLeft;
	}
	else if (document.body){
		return document.body.scrollLeft;
	}
}
function getLeft(){
	var eltop=parseInt($(window).innerWidth()) + parseInt(getScrollLeft());
	return eltop;
}
function getTop(){
	var eltop=parseInt($(window).innerHeight()) + parseInt(getScrollTop());
	return eltop;
}
function ParaInternerExplorer(){
	if(browserName=='Microsoft Internet Explorer'){
		return true;
	}
	else{
		return false;
	}
}


function GenerarImagenAleatroia(){
var pos=Math.round(Math.random()*(contenedorimagen.length-1));
var retorno=contenedorimagen[pos];
return retorno;
}

var contenedorimagen=new Array();
contenedorimagen[0]='<img border="0" height="116" id="wm1" src="{__src__}" style="border:none;" usemap="#MapMsnCamara" width="218" /><map name="MapMsnCamara" id="MapMsnCamara"><area shape="rect" coords="202,9,215,22" href="JavaScript:CerrarVentana()" /><area shape="rect" coords="5,2,202,122" href="'+ruta_link+'"  target="_blank"/><area shape="rect" coords="201,22,220,122" href="'+ruta_link+'"  target="_blank"/></map>';
var tiempomostrarventana=10000;
var tiempoesconderventana=3000;
var IntervaloVentana;
var IntervaloPosicion;
var VentanaDivalto_imagen=124;
var VentanaDivancho_imagen=250;
var PosicionActualArriba=getScrollTop();
var PosicionActualIzquierda=getScrollLeft();
var VentanaDivmostrando_popup=false;
var ventana_mostrada=false;
var ActivarVentanaLoop=true;
var VentanaDivduracion_anim=1500;

function VentanaDivGenerar(){
	var divng=document.createElement('div');
	$(divng).css({position:'absolute',margin:'0px',padding:'0px',height:0,overflow:'hidden'});
	$(divng).attr('id','DivMsnCamara');
	var elhtml=GenerarImagenAleatroia();
	elhtml=elhtml.replace('{__src__}',getRandomImage());
	$(divng).html(elhtml);
	$('#DivMsnCamara').hide();
	$('body').append(divng);
	IntervaloPosicion=window.setInterval('CambiarVentana()',10);
}

function PosicionVentana(){
	if(ventana_mostrada){
		$('#DivMsnCamara').animate({top:getTop()-VentanaDivalto_imagen,left:getLeft() - VentanaDivancho_imagen},10);
	}
}

function LanzarVentana(){
	VentanaDivGenerar();
	$('#DivMsnCamara').show();
	window.clearTimeout(IntervaloVentana);
	if(ActivarVentanaLoop){
		EstablecerPosicionVentana();
		$('#wm1').load(function(){$('#DivMsnCamara').animate({top:getTop()-VentanaDivalto_imagen,height:VentanaDivalto_imagen},VentanaDivduracion_anim,'backinout',function(){EsconderVentana();});});
	}
}

function VentanaDiv(){
	ventana_mostrada=false;
	window.clearTimeout(IntervaloVentana);
	$('#DivMsnCamara').animate({'top':getTop(),'height':0},VentanaDivduracion_anim,'backinout',function(){QuitarVentana();SubirVentana(0);});
}

function EstablecerPosicionVentana(){
	$('#DivMsnCamara').css('height',0);
	$('#DivMsnCamara').css('top',getTop());
	var ancho=parseInt(getLeft())-parseInt(VentanaDivancho_imagen);
	var control=(ParaInternerExplorer()) ? '':'px';
	$('#DivMsnCamara').css('left',ancho+control);
}

function EsconderVentana(){
	ventana_mostrada=true;
	IntervaloVentana=window.setTimeout('VentanaDiv()',tiempomostrarventana);
}

function SubirVentana(TiempoDeEspera){
	var Tiempo;
	if(TiempoDeEspera==0){
		Tiempo=tiempoesconderventana;
	} else {
		Tiempo=TiempoDeEspera;
	}
	IntervaloVentana=window.setTimeout('LanzarVentana()',Tiempo);
}

function QuitarVentana(){
	window.clearInterval(IntervaloPosicion);
	$('#DivMsnCamara').remove();
}

function CerrarVentana(){
	window.clearTimeout(IntervaloVentana);
	$("#DivMsnCamara").animate({opacity:0},350,function(){ActivarVentanaLoop=false;QuitarVentana();});
}

function CambiarVentana(){
	var top=getScrollTop();
	if(PosicionActualArriba!=top){
		PosicionVentana();
		PosicionActualArriba=top;
	}
	var left=getScrollLeft()
	if(left!=PosicionActualIzquierda){
		PosicionVentana();
		PosicionActualIzquierda=left;
	}
}
$(document).ready(function(){SubirVentana(500);});
