/*
 * jQuery JavaScript Library v1.3.2
 * http://jquery.com/
 *
 * Copyright (c) 2009 John Resig
 * Dual licensed under the MIT and GPL licenses.
 * http://docs.jquery.com/License
 *
 * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
 * Revision: 6246
 */
(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
/*
 * Sizzle CSS Selector Engine - v0.9.3
 *  Copyright 2009, The Dojo Foundation
 *  Released under the MIT, BSD, and GPL Licenses.
 *  More information: http://sizzlejs.com/
 */
(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML='   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},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(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     23 Oct 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
  /************************************/
  /*** F O R M  V A L I D A T I O N ***/
  /************************************/
  
  var badColor = "#eea496";
  var goodColor = "#c4ed82";

  function validateDisplayName(obj, min, max)
  {
	var reg = new RegExp("^([^0-9]){1}([ '0-9a-zA-Z-]+)$");
    if( (!reg.test(obj.val())) ||
      (obj.val().length < min) ||
      (obj.val().length > max) )
    {
      obj.css("background-color", badColor);
    }
    else
    {
      obj.css("background-color", goodColor);
    }
  }
  
  function validateEmail(obj)
  {
    var reg = new RegExp("^[0-9a-zA-Z\+]+@[0-9a-zA-Z]+[\.]{1}[0-9a-zA-Z]+[\.]?[0-9a-zA-Z]+$");
    if(!reg.test(obj.val())) 
    {
      obj.css("background-color", badColor);
    }
    else
    {
      obj.css("background-color", goodColor);
    }
  }
  
  function validateUsername(obj, min, max)
  {
    var reg = new RegExp("^([-_0-9a-zA-Z.]+)$");
    if( (!reg.test(obj.val())) ||
      (obj.val().length > max) ||
      (obj.val().length < min) )
    {
      obj.css("background-color", badColor);
	  return false;
    }
    else
    {
      obj.css("background-color", goodColor);
	  return true;
    }
  }
  
  function validatePassword(obj)
  {
    var reg = new RegExp("((?=.{6,24})(?=.*[0-9])(?=.*[a-zA-Z]))");
    if(!reg.test(obj.val()))
    {
      obj.css("background-color", badColor);
	  return false;
    }
    else
    {
      obj.css("background-color", goodColor);
	  return true;
    }
  }
  
  function validateBirthday(month_obj, day_obj, year_obj)
  {
    var d = new Date();

    if(year_obj.val() > (d.getFullYear()-13))
    {
	  month_obj.css("background-color", badColor);
	  day_obj.css("background-color", badColor);
      year_obj.css("background-color", badColor);
	  return false;
    }
    else
    {
	  month_obj.css("background-color", goodColor);
	  day_obj.css("background-color", goodColor);
      year_obj.css("background-color", goodColor);
	  return true;
    }
  }
  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     24 September 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
  /****************************/
  /*** S E R V E R  V A R S ***/
  /****************************/
    
  var domain = "http://www.glacir.com";
  
  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     7 Jan 2010
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
   function getAllFriendsOnFacebookAndGlacir()
   {
     $("p.fb_button").hide();
     var magic_val = $("input#magic").val();
     $("div#facebook_friends_on_glacir").html(getLoadingBars("Finding Friends...")).fadeIn();
     
    $.ajax({
        type: "POST",
        url: "../php/event_handlers/GlacirUpdateFacebookSession.php",
        data: "action=set",
        success: function (data) {
      
          $.ajax({
            type: "POST",
            url: "../php/event_handlers/GlacirGetAllFriendsOnFacebookAndGlacir.php",
            dataType: "json",
            data: "magic=" + magic_val,
            success: function (data) {
            
              updateFacebookVars(); // since accounts are connected
              
              var friends = data.facebook_and_glacir_users;
              var html = "";
                
              if(friends.length != 0)
              {
                var friends = data.facebook_and_glacir_users;
                var html = "";
                
                html += "<p id=\"fb_intro\">Choose who you want to add to your first degree below. <a id=\"skip_to_next\" href=\"#\">Skip this step</a></p>";
                html += "<p>First-degrees are people that you know (friends, family and co-workers).</p>";
                html += "<button id=\"connect_friends\" type=\"button\"></button>";
                                
                for(var i=0; i<friends.length; i++)
                {
                  html += "<div class=\"person\">";
                  if(friends[i].m_IsFullAccount)
                  {
                    html += "<a target=\"_blank\" href=\"" + friends[i].m_Username+ "\">";
                    html += "<img src=\"" + glacirPicUrl + friends[i].m_Username.charAt(0).toLowerCase() + 
                      "/" + friends[i].m_Username.toLowerCase() + "_thumb" + pictureFormat  +  "\" /></a>";
                    html += "<h3><a target=\"_blank\" href=\"" + friends[i].m_Username+ "\">" + friends[i].m_DisplayName + "</a></h3>";
                  }
                  else
                  {
                    html += "<a target=\"_blank\" href=\"" + friends[i].m_FacebookUID+ "\">";
                    html += "<img src=\""+friends[i].m_PhotoURI+"\" /></a>";
                    html += "<h3><a target=\"_blank\" href=\"" + friends[i].m_FacebookUID + "\">" + friends[i].m_DisplayName + "</a></h3>";
                  }
                  
                  //html += "<p>Current Location: " + friends[i].m_HomeTownLocation.m_City + ", " + 
                  //                                  friends[i].m_HomeTownLocation.m_Region + ", " + 
                  //                                  friends[i].m_HomeTownLocation.m_Country + "</p>";
                  html += "<p><input class=\"add_to_first_checkbox\" id=\""+friends[i].m_ID+"\"" +
                    "type=\"checkbox\" checked /> Add to 1st</p>";
                  html += "</div>";
                }
      
                $("div#facebook_friends_on_glacir").html(html);
                
                $("button#connect_friends").bind("click", function() {
                  getArrayOfCheckedUsers();
                });
                
                $("a#skip_to_next").bind("click", function(e) {
                  e.preventDefault();
                  $("div#facebook_friends_on_glacir").html("<p>You skipped connecting to others.</p>"); 
                  getAllFacebookFriendsNotOnGlacir();
                });
              }
              else
              {
                $("div#facebook_friends_on_glacir").html("<p>You are connected to all of your" +
                  " Facebook friends on Glacir currently.</p>"); 
                getAllFacebookFriendsNotOnGlacir();
              }
            },
            error: function(xhr, error)
            {
              //alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status+"responseText: "+xhr.responseText)
              $("div#facebook_friends_on_glacir").html("<p>Sorry. We are experiencing a high volume of requests right now. Please try again soon.</p>");
            }
          });
          
        }, // end of fb session ajax func
        error: function(data)
        {
          alert("Could not set FB session info.");
        }
      });
   }
   
   function getAllFacebookFriendsNotOnGlacir()
   {
     $("p#fb_intro").fadeOut();
     $("div#facebook_friends_not_on_glacir").html(getLoadingBars("Loading...")).fadeIn();
     var magic_val = $("input#magic").val();
     $.ajax({
        type: "POST",
        dataType: "json",
        url: "../php/event_handlers/GlacirGetAllFriendsOnFacebookAndNotGlacir.php",
        data: "functioncall=array&magic=" + magic_val,
        success: function (data) {
          
          var other_friends = data.facebook_and_not_glacir_users;
          //if(data > 0)
          if(other_friends.length > 0)
          {
            var text = "<p>You have " + other_friends.length + " friends on Facebook we could not find on Glacir. ";
            text += "Import these friends to quickly build your first degree. ";
            text += "<a id=\"connect_help\" href=\"#\">What's this?</a></p>"
            text += "<p><a class=\"connect_link\" href='#'>Import Facebook Friends</a><p>";
            text += "<p>Note: This will not send an invitation to your friends. <a href=\"invite\">Invite</a> them here.</p>";
            $("div#facebook_friends_not_on_glacir").html(text);
            
            $("a#connect_help").bind("click", function() {
              var message = "<p>Glacir allows you to import your Facebook friends into Glacir without sending an invitation to them.</p>";
              message += "When you do this, they are automatically added to your first degree on Glacir and entered into our six ";
              message += "degrees of separation network.  This allows you to grow your 6 degrees of separation quickly, without ";
              message += "having to wait for your facebook friends to join Glacir.";
              loadPopup("What is \"Import Facebook Friends\"", message, 400, 225);
            });
            $("a.connect_link").bind("click", function() {
              createHoldingAccounts(other_friends);
            });
          }
          else
          {
            var text = "<p>You have already imported all of your Facebook friends. <a href=\"invite\">Invite</a> some more!</p>";
            $("div#facebook_friends_not_on_glacir").html(text);
          }
        },
        error: function(data)
        {
          var text = "<p>You have already imported all of your Facebook friend(s). <a href=\"invite\">Invite</a> some more!</p>";
          $("div#facebook_friends_not_on_glacir").html(text);
        }
      });
   }
   
   function getArrayOfCheckedUsers()
   {
     $("div#facebook_friends_on_glacir").fadeOut();
     $("div#facebook_friends_not_on_glacir").html(getLoadingBars("Adding to First Degree... This may take a few minutes.")).fadeIn();
     var checked_array = "";
     var count = 0;
     $("div.person").each(function()
     {
       var checkbox = $(this).find("input.add_to_first_checkbox");
       if(checkbox.is(':checked'))
       {
         checked_array += $(this).children("p").children("input.add_to_first_checkbox").attr("id") + ",";
         count = count + 1;
       }
     });
     if(count > 0)
     {
       connectSelectedUsers(checked_array, count);
     }
     else
     {
       getAllFacebookFriendsNotOnGlacir();
     }
   }
   
   
   function connectSelectedUsers(array, total)
   {
     var magic_val = $("input#magic").val();
     $.ajax({
        type: "POST",
        url: "../php/event_handlers/GlacirBatchAddToFirstDegree.php",
        data: "users="+array+"&magic=" + magic_val,
        success: function (data) {
          if(data == "TRUE")
          {
            var text = "";
            getWhatNowHTML();
            if(total == 1)
            {
              text = "<p>"+total+" person have been added to your first degree!</p>"; 
            }
            else
            {
              text = "<p>"+total+" people have been added to your first degree!</p>";
            }
            $("div#facebook_friends_on_glacir").html(text).fadeIn();
            updateDegreeStatsInSidebar();
            getAllFacebookFriendsNotOnGlacir();
          }
          else
          {
            loadPopup("Could not connect.", data, -1, -1);
            $("div#facebook_friends_on_glacir").html("Please try again later.").fadeIn();
          }
        },
        error: function(data)
        {
          if(total == 1)
          {
            text = "<p>"+total+" person have been added to your first degree!</p>"; 
          }
          else
          {
            text = "<p>"+total+" people have been added to your first degree!</p>";
          }
          $("div#facebook_friends_on_glacir").html(text).fadeIn();
          getAllFacebookFriendsNotOnGlacir();
        }
      });
   }
   
   
   function createHoldingAccounts(hold_accts)
   {
     var magic_val = $("input#magic").val();
     $("div#facebook_friends_on_glacir").fadeOut();
     $("div#facebook_friends_not_on_glacir").html(getLoadingBars("Importing Friends...")).fadeIn();
     
     var i;
     var data_string = "";
     for(i=0; i<hold_accts.length; i++)
     {
       data_string += hold_accts[i].m_FacebookUID + ",";
     }

     $.ajax({
      type: "POST",
      url: "../php/event_handlers/GlacirImportFacebookFriends.php",
      data: "users="+data_string+"&magic=" + magic_val,
      success: function (data) {
        if(data > 0)
        {
          var text = "<p>"+data+" people have been imported into your first degree!</p>";
          $("div#facebook_friends_not_on_glacir").html(text).fadeIn();
        }
        else
        {
          loadPopup("Could not connect.", data, -1, -1);
          $("div#facebook_friends_not_on_glacir").html("Please try again later.").fadeIn();
        }
      },
      error: function(xhr, error)
      {
        alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status+"responseText: "+xhr.responseText)
        $("div#facebook_friends_not_on_glacir").html("Could not connect to Facebook...");
      }
    });
    
   }
   

   function getLoadingBars(message)
   {
     var html = "<p class=\"loading_bars\">";
     html += "<img src=\"/img/ajax/ajax-bars.gif\" /> <span>" + message + "</span>";
     html += "</p>";
     return html;
   }﻿
  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     20 July 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
  /**************************************/
  /*** P O P - U P  F U N C T I O N S ***/
  /**************************************/

  function loadPopup(title, content, width, height)
  {
    $(document).ready( function() 
      {
        var defaultWidth = 300;
        var defaultHeight = 150;
      
        //Get the window height and width  
        var winH = $(window).height();  
        var winW = $(window).width();
        
        //Set the width and height (pixels)
        if(width < 0) 
        {          
          $("div#popup").css("width", defaultWidth+"px");
          $("div#popup").css("left", winW/2-(defaultWidth/2));
        }
        else
        {
          $("div#popup").css("width", width+"px");
          $("div#popup").css("left", winW/2-(width/2));
        }
        if(height < 0)
        {
          $("div#popup").css("height", defaultHeight+"px");
          $("div#popup").css("top",  winH/2-(defaultHeight/2));
        }
        else
        {
          $("div#popup").css("height", height+"px");
          $("div#popup").css("top",  winH/2-(height/2));
        }
        
        if(content == "")
        {
          $("div#popup").html
          (              
            "<div class=\'content\'>" +             
            
              "<h1>" + title + "</h1>" +              
              "<div class=\"loading\"> <img src=\"/img/ajax-loader.gif\"> </div>" +
            
            "</div>"
          );

        }
        else
        {          
          $("div#popup").html
          (
            "<div id=\'close\'><a id=\'close_link\' href=\'#\'>Close</a></div>" +
            
            "<div class=\'content\'>" +             
            
              "<h1>" + title + "</h1>" +              
              "<div>" + content + "</div>" +
            
            "</div>"
          );
        }
                  
        $("div#popup").show();
                  
        $("a#close_link").bind("click", function (e) {  
          //Cancel the link behavior  
          e.preventDefault();  
          $("div#popup").hide();  
        });
        
        $(document).keyup(function(event){
          if (event.keyCode == 27) {
            $("div#popup").hide();
          }          
        });
      }
    );
  }
  
  function hidePopup()
  {
    $("div#popup").fadeOut();
  }
  

  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     7 June 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
  /*********************************************/
  /*** A J A X  E S C A P E  F U N C T I O N ***/
  /*********************************************/

  /*
  function ajax_url_escape(input)
  {
    var encoded = escape(input);
    encoded = encoded.replace("+", "%2B"); // url encode "+"
    encoded = encoded.replace("/", "%2F"); // url encode "/"
    encoded = encoded.replace(".", "%2E"); // url encode "."
    return encoded;
  }
  */
  
  function ajax_url_escape(input)
  {
    var encoded = escape(input);
    encoded = encoded.replace(/\+/g, "%2B"); // url encode "+"
    encoded = encoded.replace("/", "%2F"); // url encode "/"
    encoded = encoded.replace(".", "%2E"); // url encode "."
    return encoded;
  }
  
  function setDocumentTitle(text)
  {
    var title = "Glacir | ";
    document.title = title + text;
  }

  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     7 June 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
  /*************************************/
  /*** L O G I N   F U N C T I O N S ***/
  /*************************************/

  $(document).ready( function()
  {

    // clear the user field
    $("#glacir_login_email").focus( function() {
      $("dl#login dt.hidden").fadeIn(1000);
      if($("#glacir_login_email").val() == "Email/Username") {
        $("#glacir_login_email").val("");
      }
    });
    
    $("#glacir_login_email").blur( function() {
      
      if($("#glacir_login_email").val() == "") {
        $("#glacir_login_email").val("Email/Username");
      }
    });

    
    $("#temp").show();
    $("#glacir_login_password").hide();
    
    $("#temp").focus(function() {
      $("#temp").val("");
      $("#glacir_login_password").val("");
      $("#temp").hide();
      $("#glacir_login_password").show();
      $("#glacir_login_password").focus();
    });
    
    $("#glacir_login_password").blur(function() {
      if($("#glacir_login_password").val() == "") {
        $("#temp").show();
        $("#temp").val("Password");
        $("#glacir_login_password").hide();
      }
    });
    
  });

  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     15 Sept 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
  /********************/
  /*** N A V  B A R ***/
  /********************/
      
  function setActiveButton(username)
  {
    var place = window.location.href;  
    
    var homeURL = domain + "/home";
    var whatIsURL = domain + "/home#what_is";
    var seeMembersURL = domain + "/home#see_members";
    var howWorksURL = domain + "/home#how_it_works";
    
    var glacirURL = domain + "/" + username;
    //var degreesURL  = domain + "/degrees";  ---- DO NOT NEED ANY LONGER
    var settingsURL  = domain + "/settings";
    var basicPrivacyURL  = domain + "/basic-privacy";
    var advancedPrivacyURL  = domain + "/advanced-privacy";
    var accountPrivacyURL  = domain + "/account";
    
    // capture "my degrees" substring to be checked
    var degrees_sub = place.substring((domain.length + 1), (domain.length + 8));
    //alert(domain + " " + (domain.length + 8));
    //alert("#" + degrees_sub + "#");

    // is it the degrees page?
    if(place == glacirURL)
    {
      $("li#my_glacir a").css("background-position", "0 -34px");
    }
    
    // is it the degrees page?
    else if(degrees_sub == "degrees")
    {
      $("li#my_degrees a").css("background-position", "-100px -34px");
    }
    
    // is it the settings page?
    else if( (place == settingsURL) ||
             (place == basicPrivacyURL) ||
             (place == accountPrivacyURL) ||
             (place == advancedPrivacyURL) )
    {
      $("li#my_settings a").css("background-position", "-215px -34px");
    }
    else
    {
    
      if(place == whatIsURL)
      {
        $("li#what_is_glacir a").css("background-position", "0 -34px");
      }
      else if(place == seeMembersURL)
      {
        $("li#see_our_members a").css("background-position", "-142px -34px");
      }
      else if(place == howWorksURL)
      {
        $("li#how_it_all_works a").css("background-position", "-290px -34px");
      }
      else
      {
        if(place == homeURL)
        {
          $("li#what_is_glacir a").css("background-position", "0 -34px");
        }
      }
    }
  }


  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     7 June 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *       UPDATED:     22 Sept 2009, Added controls to move the 
   *                    first step submission to the second step.
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
  /******************************************************/
  /*** P A S S W O R D  R E S E T   F U N C T I O N S ***/
  /******************************************************/
 

  $(document).ready(function()
  {
    
    $("#email_reset_form").submit(function() 
    {
      loadPopup("Sending...", "", 300, 200);
      
      $("#email_reset_form button").attr("disabled", "true");
      
      var email_reset = $("input#email_reset").val();
      var ip = $("input#ip").val();
      
      $.ajax({
        type: "POST",
        url: "../php/event_handlers/GlacirRequestPasswordReset.php",
        data: "email_reset=" + ajax_url_escape(email_reset) +
              "&ip=" + ajax_url_escape(ip)
        ,
        success: function (data) 
        {
          //alert("O"+data.substring(1,7)+"O");
          if(data.substring(1,7) == "Please")
          {
            loadPopup("Password Reset", data, -1, -1);            
            $("input#email_reset").attr("value","");
            $("dt#step2").addClass("current_step");
            $("dt#step1").removeClass("current_step");
            $("form#email_reset_form").toggle();
          }
          else
          {
            loadPopup("Password Reset", data, -1, -1);  
            $("#email_reset_form button").removeAttr("disabled");
          }
        },
        error: function (data)
        {
          hidePopup();
          alert(data);
        }
      });
      return false;
      
    });

      
    $("#password_reset_form").submit(function() 
    {
      loadPopup("Resetting password...", "", 300, 200);
              
      var username = $("input#glacir_username").val();
      var month = $("select#glacir_month").val();
      var day = $("select#glacir_day").val();
      var year = $("select#glacir_year").val();
      var hash = $("input#glacir_hash").val();
      var password = $("input#glacir_password").val();
      var email = $("input#glacir_email").val();
           
      $.ajax({
        type: "POST",
        url: "../php/event_handlers/GlacirSubmitPasswordReset.php",
        data: "glacir_username=" + ajax_url_escape(username) +
              "&glacir_email=" + ajax_url_escape(email) +
              "&glacir_month=" + ajax_url_escape(month) +
              "&glacir_day=" + ajax_url_escape(day) +
              "&glacir_year=" + ajax_url_escape(year) +
              "&glacir_password=" + ajax_url_escape(password) +
              "&glacir_hash=" + ajax_url_escape(hash)
        ,
        success: function (data) {
                      
          if(data.substr(1,4) == "Your")
          {
            loadPopup("Password reset!", data, 300, 200);
            
            $("input#glacir_username").attr("value","");
            $("input#glacir_password").attr("value","");
            $("input#glacir_email").attr("value","");
            $("dt#step3").removeClass("current_step");
            $("#password_reset_form").hide();
            $("dt#step4").addClass("current_step");
          }
          else
          {
            loadPopup("Reset Unsuccessful", data, 300, 200);
          }
        },
        error: function(data)
        {
          alert(data);
        }
      });
      return false;
      
    });
  });

  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     7 June 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
  /**************************************/
  /*** S E A R C H  F U N C T I O N S ***/
  /**************************************/

  $(document).ready( function()
  {
    $("#search_form input").bind("focus", function() 
    {
      if($("#search_form input").val() == "Search")
      {
        $("#search_form input").val("");
      }
    });
    
    $("#search_form input").bind("blur", function() 
    {
      if($("#search_form input").val() == "")
      {
        $("#search_form input").val("Search");
      }
    });
    
    $(document).ready(function(){
      $("#search_form button").hover( function() {
          $(this).css("background-position","0 -32px");
        },
        function() {
          $(this).css("background-position","0 0");
        }
      );
    });

  });

  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     7 June 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
  /***********************************/
  /*** J O I N   F U N C T I O N S ***/
  /***********************************/

  $(document).ready( function() 
  {
    // SET STARTING INFORMATION
    //$("span.join_info_span").hide();
    //$("span#start_info").show();
    
    // DISPLAY NAME EL
    
    $("#register_form input#glacir_display_name").bind("focus", function()
    {
      if($("#register_form input#glacir_display_name").val().toLowerCase() == "name")
      {  
        $("#register_form input#glacir_display_name").val("");
        //$("#register_form input#glacir_display_name").css("color", "#333333");
      }        
      $("p.join_info_span").hide();
      $("p#display_name_info").show();
    });
    
    $("#register_form input#glacir_display_name").bind("blur", function()
    {
      if($("#register_form input#glacir_display_name").val() == "")
      {  
        $("#register_form input#glacir_display_name").val("NAME");
        //$("#register_form input#glacir_display_name").css("color", "#b9b9b9");
      } 
	  $(this).css("background-color", "#fff");
      $("p.join_info_span").hide();
      $("p#start_info").show();
    });
    
    $("#register_form input#glacir_display_name").bind("keyup", function()
    {
      validateDisplayName($(this), 4, 26);
    });
    
    // EMAIL EL
    
    $("#register_form input#glacir_email").bind("focus", function()
    {
      if($("#register_form input#glacir_email").val().toLowerCase() == "email")
      {
        $("#register_form input#glacir_email").val("");
        //$("#register_form input#glacir_email").css("color", "#333333");
      }
      $("p.join_info_span").hide();
      $("p#email_info").show();
    });
    
    $("#register_form input#glacir_email").bind("blur", function()
    {
      if($("#register_form input#glacir_email").val() == "")
      {
        $("#register_form input#glacir_email").val("EMAIL");
        //$("#register_form input#glacir_email").css("color", "#b9b9b9");
      }
	  $(this).css("background-color", "#fff");
      $("p.join_info_span").hide();
      $("p#start_info").show();
    });
    
    $("#register_form input#glacir_email").bind("keyup", function()
    {
      validateEmail($(this));
    });
    
    // USERNAME EL
    
    $("#register_form input#glacir_username").bind("focus", function()
    {
      if($("#register_form input#glacir_username").val().toLowerCase() == "username")
      {
        $("#register_form input#glacir_username").val("");
        //$("#register_form input#glacir_username").css("color", "#333333");
      }
      $("p.join_info_span").hide();
      $("p#username_info").show();
    });
    
    $("#register_form input#glacir_username").bind("blur", function()
    {
      if($("#register_form input#glacir_username").val() == "")
      {
        $("#register_form input#glacir_username").val("USERNAME");
        //$("#register_form input#glacir_username").css("color", "#b9b9b9");
      }
	  $(this).css("background-color", "#fff");
      $("p.join_info_span").hide();
      $("p#start_info").show();
    });
    
    $("#register_form input#glacir_username").bind("keyup", function()
    {
      validateUsername($(this), 5, 26);
    });
    
    // PASSWORD TYPE SWITCHER
    
    $("input#glacir_password_text").bind("focus", function()
    {
      $("input#glacir_password_text").hide();
      $("#register_form input#glacir_password_text").val("");
      $("#register_form input#glacir_password").show();
      $("#register_form input#glacir_password").focus();
      $("p.join_info_span").hide();
      $("p#password_info").show();
      //("#register_form input#glacir_password").css("color", "#333333");
    });
    
    $("input#glacir_password").bind("blur", function()
    {
      if($("#register_form input#glacir_password").val() == "")
      {
        $("#register_form input#glacir_password").hide();
        $("input#glacir_password_text").show();
        $("#register_form input#glacir_password_text").val("PASSWORD");
        //$("#register_form input#glacir_password_text").css("color", "#b9b9b9");
      }        
	  $(this).css("background-color", "#fff");
      $("p.join_info_span").hide();
      $("p#start_info").show();
    });
    
    $("input#glacir_password").bind("focus", function()
    {
      $("p.join_info_span").hide();
      $("p#password_info").show();
      $("#register_form input#glacir_password").css("color", "#333333");
    });
	
	$("input#glacir_password").bind("keyup", function()
    {
      validatePassword($(this));
    });
    
    // BIRTHDAY JS
    
    $("select").bind("mouseover", function() {
      $("p.join_info_span").hide();
      $("p#birthday_info").show();
    });
    
	
    $("select#glacir_month").bind("focus", function()
    {
      $("p.join_info_span").hide();
      $("p#birthday_info").show();
      //$("#register_form select#glacir_month").css("color", "#333333");
    });    
		$("select#glacir_month").bind("change", function()
		{
			validateBirthday($("select#glacir_month"), $("select#glacir_day"), $("select#glacir_year"));
		});
		
    
    $("select#glacir_day").bind("focus", function()
    {
      $("p.join_info_span").hide();
      $("p#birthday_info").show();
      //$("#register_form select#glacir_day").css("color", "#333333");
    });    
		$("select#glacir_day").bind("change", function()
		{
			validateBirthday($("select#glacir_month"), $("select#glacir_day"), $("select#glacir_year"));
		});
    
    
    $("select#glacir_year").bind("focus", function()
    {
      $("p.join_info_span").hide();
      $("p#birthday_info").show();
      //$("#register_form select#glacir_year").css("color", "#333333");
    });    
		$("select#glacir_year").bind("change", function()
		{
			validateBirthday($("select#glacir_month"), $("select#glacir_day"), $("select#glacir_year"));
		});
			
  });


  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     9 August 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
  /***********************************/
  /*** I N V I T E  F U N C T I O N S ***/
  /***********************************/

  $(document).ready( function() 
  {
    $("#to_email_address").focus(function() 
    {
      if($("#to_email_address").val() == "Enter email address...")
      {
        $("#to_email_address").val("");
      }
    });
    
    $("#to_email_address").blur(function() 
    {
      if($("#to_email_address").val() == "")
      {
        $("#to_email_address").val("Enter email address...");
      }
    });
          
    $("#invite_form").submit(function() 
    { 
      loadPopup("Sending invitations...", "", 300, 200);
      
      var magic = $("input#magic").val();
      var to = $("#to_email_address").val();
              
      $.ajax({
            type: "POST",
            url: "../php/event_handlers/GlacirInviteViralEmail.php",
            data: "magic=" + magic +
                  "&to_email_address=" + ajax_url_escape(to),
            success: function (data) 
            {
              if(data == "true")
              {
                loadPopup("Invite Connections", "Your invitations have been sent!", -1, -1);
                $("#to_email_address").val("");
              }
              else
              {
                loadPopup("Invite!", data, -1, -1);
              }
            },
            error: function(xhr, error)
            {
              hidePopup();
              alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status+"responseText: "+xhr.responseText);
            }
      });
      return false;
    });
  });

  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     26 Aug 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
  /***************************************/
  /*** M A R K E R   F U N C T I O N S ***/
  /***************************************/

  $(document).ready( function()
  {      
    $("a#marker_why").click( function(e) {
    
      e.preventDefault();
      
      var text = "<br /><strong>What is this for?</strong>" +
      "<p>Glacir uses this to show users how far their degrees of separation spread" +
      " around the world. It is one of the powerful ways Glacir will show humanity" +
      " how connected we all are.</p>" +
      
      "<strong>Things to Consider</strong>" +
      "<p>Before placing your marker, please carefully consider how comfortable " +
      "you are with providing a detailed position. Glacir recommends placing your " +
      "marker in the general region you currently reside.<p>" +
      
      "<p><em>At any time you can update or change your map marker location on your profile page.</em></p>" + 
      
      "<p><em>Map markers are monitored. Any obvious misplacements will be " +
      "investigated and could lead to your account being suspended.</em></p>";
      
      loadPopup("Why? Learn More.", text, 400, 350);
    });
          
  });

  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     7 June 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
  /*****************************************/
  /*** S I D E B A R   F U N C T I O N S ***/
  /*****************************************/
  
  function getNotification()
  {
  
    $(document).ready(function()
      {
        // get the users information
        $.ajax({
          type: "POST",
          url: "../php/event_handlers/GlacirGetNotifications.php",
          data: "",
          success: function (data) 
          {
            
            if(data == "<dl><dt>None.</dt></dl>")
            {
              $("h2#connection_requests_header").hide();
              $("div#connection_requests").hide();
            }
            else
            {
              $("#connection_requests").html(data);
              $("h2#connection_requests_header").show();
              $("div#connection_requests").show();

              $("#connection_requests dl#request1 dt span").click( function () 
                {                  
                  loadPopup("Processing...", "", 300, 200);
                
                  var requesting_id = $("dl#request1 input#request1_requesting_id").val();
                  var was_request_accepted = ($(this).html() == "Accept") ? 1 : 0;
                  var magic = $("input#magic").val();
                  
                  $.ajax({
                    type: "POST",
                    url: "../php/event_handlers/GlacirAcceptRejectFirstDegreeConnection.php",
                    data: "requesting_id=" + requesting_id +
                          "&was_request_accepted=" + was_request_accepted +
                          "&magic=" + magic
                    ,
                    success: function (data) 
                    {
                      if( (data == "TRUE") && (was_request_accepted) )
                      {
                        loadPopup("Connection created!", "A new first-degree " +
                          "connection has been created!", 300, 200);
                        getNotification();
                        updateDegreeStatsInSidebar();
                        refreshAllEvents();
                      }
                      else if( (data == "TRUE") && (!was_request_accepted) )
                      { 
                        loadPopup("Connection denied", "You denied this connection.", 300, 200);
                        getNotification();
                      }
                      else
                      {
                        loadPopup("Error!", data, 300, 200);
                      }
                    },
                    error: function (data)
                    {
                      hidePopup();
                      alert(data);
                    }
                  });
                }
              );
              
              $("#connection_requests dl#request2 dt span").click( function () 
                {    
                  loadPopup("Processing...", "", 300, 200);
                  
                  var requesting_id = $("dl#request2 input#request2_requesting_id").val();
                  var was_request_accepted = ($(this).html() == "Accept") ? 1 : 0;
                  var magic = $("input#magic").val();
                  
                  $.ajax({
                    type: "POST",
                    url: "../php/event_handlers/GlacirAcceptRejectFirstDegreeConnection.php",
                    data: "requesting_id=" + requesting_id +
                          "&was_request_accepted=" + was_request_accepted +
                          "&magic=" + magic
                    ,
                    success: function (data) 
                    {
                      if( (data == "TRUE") && (was_request_accepted) )
                      {
                        loadPopup("Connection created!", "A new first-degree " +
                          "connection has been created!", 300, 200);
                        getNotification();
                        updateDegreeStatsInSidebar();
                        refreshAllEvents();
                      }
                      else if( (data == "TRUE") && (!was_request_accepted) )
                      { 
                        loadPopup("Connection denied", "You denied this connection.", 300, 200);
                        getNotification();
                      }
                      else
                      {
                        loadPopup("Error!", data, 300, 200);
                      }
                    },
                    error: function (data)
                    {
                      hidePopup();
                      alert(data);
                    }
                  });
                }
              );
               
              $("#connection_requests dl#request3 dt span").click( function () 
                { 
                  loadPopup("Processing...", "", 300, 200);
                  
                  var requesting_id = $("dl#request3 input#request3_requesting_id").val();
                  var was_request_accepted = ($(this).html() == "Accept") ? 1 : 0;
                  var magic = $("input#magic").val();
                  
                  $.ajax({
                    type: "POST",
                    url: "../php/event_handlers/GlacirAcceptRejectFirstDegreeConnection.php",
                    data: "requesting_id=" + requesting_id +
                          "&was_request_accepted=" + was_request_accepted +
                          "&magic=" + magic
                    ,
                    success: function (data) 
                    {
                      if( (data == "TRUE") && (was_request_accepted) )
                      {
                        loadPopup("Connection created!", "A new first-degree " +
                          "connection has been created!", 300, 200);
                        getNotification();
                        updateDegreeStatsInSidebar();
                        refreshAllEvents();
                      }
                      else if( (data == "TRUE") && (!was_request_accepted) )
                      { 
                        loadPopup("Connection denied", "You denied this connection.", 300, 200);
                        getNotification();
                      }
                      else
                      {
                        loadPopup("Error!", data, 300, 200);
                      }
                    },
                    error: function (data)
                    {
                      hidePopup();
                      alert(data);
                    }
                  });
                }
              );
            }    
          }
        }); // end of notifications ajax          
      }
    );
  } // end getNotifications
  
  
  
  function updateDegreeStatsInSidebar()
  {
    $(document).ready( function () {
    
      var total1 = 0;
      var total2 = 0;
      var total3 = 0;
      var total4 = 0;
      var total5 = 0;
      var total6 = 0;
      
      var new1 = 0;
      var new2 = 0;
      var new3 = 0;
      var new4 = 0;
      var new5 = 0;
      var new6 = 0;
      
      var magic_val = $("input#magic").val();
      
      //$.getJSON("../php/event_handlers/GlacirGetDegreeStatsJSON.php", 
      $.getJSON("../php/event_handlers/GlacirGetEventStats.php", 
      { magic: magic_val }, 
      function(json)
      {
        total  = json[0];  
        total1 = json[1];
        total2 = json[2];
        total3 = json[3];
        total4 = json[4];
        total5 = json[5];
        total6 = json[6];

        new1 = json[8];
        new2 = json[9];
        new3 = json[10];
        new4 = json[11];
        new5 = json[12];
        new6 = json[13];
        
        $("div#degree_stats span#all_degree_total").html(total);
        $("div#degree_stats span#first_degree_total").html(total1);
        $("div#degree_stats span#second_degree_total").html(total2);
        $("div#degree_stats span#third_degree_total").html(total3);
        $("div#degree_stats span#fourth_degree_total").html(total4);
        $("div#degree_stats span#fifth_degree_total").html(total5);
        $("div#degree_stats span#sixth_degree_total").html(total6);
        
        if(new1 > 0)
        {
          $("div#degree_stats span#first_degree_new").html("(" + new1 + " new)");
        }
        else
        {
          $("div#degree_stats span#first_degree_new").html("");
        }
        
        if(new2 > 0)
        {
          $("div#degree_stats span#second_degree_new").html("(" + new2 + " new)");
        }
        else
        {
          $("div#degree_stats span#second_degree_new").html("");
        }
        
        if(new3 > 0)
        {
          $("div#degree_stats span#third_degree_new").html("(" + new3 + " new)");
        }
        else
        {
          $("div#degree_stats span#third_degree_new").html("");
        }
        
        if(new4 > 0)
        {
          $("div#degree_stats span#fourth_degree_new").html("(" + new4 + " new)");
        }
        else
        {
          $("div#degree_stats span#fourth_degree_new").html("");
        }
        
        if(new5 > 0)
        {
          $("div#degree_stats span#fifth_degree_new").html("(" + new5 + " new)");
        }
        else
        {
          $("div#degree_stats span#fifth_degree_new").html("");
        }
        
        if(new6 > 0)
        {
          $("div#degree_stats span#sixth_degree_new").html("(" + new6 + " new)");
        }
        else
        {
          $("div#degree_stats span#sixth_degree_new").html("");
        }
      });       
    });
  }


  function getWhatNowHTML()
  {
    var page_id = $("input#page_id").val();
    $.ajax({
			type: "POST",
			url: "../php/event_handlers/GlacirGetNowWhatHTML.php",
      data: "page_id=" + page_id,
      dataType: "html",
      cache: false,
			success: function (data1) 
			{
				$("div#now_what").html(data1);
			},
			error: function (data)
			{
				$("div#now_what img").hide();
			}
		});
  }
  
  function updateFacebookVars()
  {
		var magic_val = $("input#magic").val();
		$.ajax({
			type: "POST",
			url: "../php/event_handlers/GlacirPopulateConnectAndInviteSessionVars.php",
			data: "magic=" + magic_val,
			success: function (data) 
			{
			  getWhatNowHTML();
			},
			error: function (data)
			{
				getWhatNowHTML();
			}
		});
  }  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski, Josh Costello
   *       CREATED:     3 August 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *       UPDATED:     2 Nov 2009 - Refactored the entire file to
   *                      fix event listener problems.
   *                    14 Jan 2010 - Added code for slide rotator.
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
  /*******************************************/
  /*** H O M E  P A G E  F U N C T I O N S ***/
  /*******************************************/
  
  var tabs = [];
  var tabContainers = [];
  var place = window.location.hash;
  var place = window.location.href;
  var homeURL = domain + "/home";
  var what = homeURL + "#what_is";
  var see =  homeURL + "#see_members";
  var how = homeURL + "#how_it_works";
  
  // variables for slides rotator
  var rotate_timer;
  var slides_paused = false;
  var current_slide = 0;
  var rotateSpeed = 5000;
  var fadeInSpeed = 600;
     
  var image1Title = "Facebook Connect is Here!";
  var image2Title = "Follow Us on Facebook and Twitter";
  var image3Title = "Glacir in the News";
  var image4Title = "Coming Soon!";
  var image5Title = "Learn More about Glacir";

  $(document).ready(function() 
  {	
    // 0)
    // Setup rotator
    clearTimeout(rotate_timer); 
    showFirstImage();
    
    $("a#pause_play").click( function(e) {
      e.preventDefault();
      if(slides_paused)
      {
        $(this).html("Pause");
        slides_paused = false;
        resumePlay();
      }
      else
      {
        clearTimeout(rotate_timer);
        $(this).html("Play");
        slides_paused = true;
      }
    });
        
    $("a#showFirstImageLink").click( function(e) {
      e.preventDefault();
      $("div#rotating_controls li").css("background-position", "0 0");
      $(this).parent().css("background-position", "0 -13px");
      showFirstImage();
      clearTimeout(rotate_timer);
      $("a#pause_play").html("Play");
      slides_paused = true;
    });
    $("a#showSecondImageLink").click( function(e) {
      e.preventDefault();
      $("div#rotating_controls li").css("background-position", "0 0");
      $(this).parent().css("background-position", "0 -13px");
      showSecondImage();
      clearTimeout(rotate_timer);
      $("a#pause_play").html("Play");
      slides_paused = true;
    });
    $("a#showThirdImageLink").click( function(e) {
      e.preventDefault();
      $("div#rotating_controls li").css("background-position", "0 0");
      $(this).parent().css("background-position", "0 -13px");
      showThirdImage();
      clearTimeout(rotate_timer);
      $("a#pause_play").html("Play");
      slides_paused = true;
    });
    $("a#showFourthImageLink").click( function(e) {
      e.preventDefault();
      $("div#rotating_controls li").css("background-position", "0 0");
      $(this).parent().css("background-position", "0 -13px");
      showFourthImage();
      clearTimeout(rotate_timer);
      $("a#pause_play").html("Play");
      slides_paused = true;
    });
    $("a#showFifthImageLink").click( function(e) {
      e.preventDefault();
      $("div#rotating_controls li").css("background-position", "0 0");
      $(this).parent().css("background-position", "0 -13px");
      showFifthImage();
      clearTimeout(rotate_timer);
      $("a#pause_play").html("Play");
      slides_paused = true;
    });
        
    // 1) 
    // Collect tab ids    
	
    $("ul.tabs a").each(function () 
    {      
      var thispath = this.pathname.replace(/\//,"");
      var winlocation = window.location.pathname.replace(/\//,"");
          
      if (thispath == winlocation) 
      {      
        tabs.push(this);
        tabContainers.push($(this.hash).get(0));
      }     
	  //alert(this.hash);
    });
	
    
    // 2)
	// If the user is on the home page
	
    if ( (place == homeURL) ||
	     (place == see) ||
		 (place == how) ||
		 (place == what) )
    {
	
      // 2a)
	  // If the user landed on /home, load the default pane
	  
	  if(place == see)
	  {
	    $(tabContainers).hide().filter("#see_members").show();      
	  }
	  else if(place == how)
	  {
	    $(tabContainers).hide().filter("#how_it_works").show();
	  }
	  else
	  {
	    $(tabContainers).hide().filter("#what_is").show();
	  }
	  
	  // 2b)
	  // Setup all ELs for buttons
	  	  
  	  $("a#what_is_glacir_link").click( function(e)
      {
	    e.preventDefault();
        bindHomeELs();
        unbindWhatIsGlacirEL();
		
		$(tabContainers).hide().filter("#what_is").show();
        
        $("li#what_is_glacir a").css("background-position", "0 -34px");
        $("li#how_it_all_works a").css("background-position", "-290px 0");
        $("li#see_our_members a").css("background-position", "-142px 0");          
        return false;
      });
      
      $("a#see_our_members_link").click( function(e)
      {
	    e.preventDefault();
		
        bindHomeELs();
        unbindSeeOurMembersEL();        
        
        map.setUIToDefault();	  
        map.setMapType(G_PHYSICAL_MAP);
        map.removeMapType(G_HYBRID_MAP);
        map.removeMapType(G_NORMAL_MAP);
        map.removeMapType(G_SATELLITE_MAP);
        map.removeMapType(G_PHYSICAL_MAP);        
		
		$(tabContainers).hide().filter("#see_members").show();
          
        $("li#see_our_members a").css("background-position", "-142px -34px");
        $("li#how_it_all_works a").css("background-position", "-290px 0");
        $("li#what_is_glacir a").css("background-position", "0 0");
          
        // load users into map
        loadAllUsersInMap();        
        return false;
      });
      
      $("a#how_it_all_works_link").click( function(e)
      {
	    e.preventDefault();
		
        bindHomeELs();
        unbindHowItWorksEL();
		
		$(tabContainers).hide().filter("#how_it_works").show();
        
        $("li#how_it_all_works a").css("background-position", "-290px -34px");
        $("li#see_our_members a").css("background-position", "-142px 0");
        $("li#what_is_glacir a").css("background-position", "0 0");
        return false;
      });
    }
    
    // user is NOT on the home page
    else
    {	  
      $("li#what_is_glacir a").attr("href", domain + '/home#what_is');
      $("li#see_our_members a").attr("href", domain + '/home#see_members');
      $("li#how_it_all_works a").attr("href", domain + '/home#how_it_works');
      
      bindHomeELs();
    }
  });
  
  function unbindWhatIsGlacirEL() { $("li#what_is_glacir a").unbind("mouseout").unbind("mouseover"); }
  function unbindHowItWorksEL() { $("li#how_it_all_works a").unbind("mouseout").unbind("mouseover"); }
  function unbindSeeOurMembersEL() { $("li#see_our_members a").unbind("mouseout").unbind("mouseover"); }
  
  function bindHomeELs()
  {
    $("li#what_is_glacir a").bind("mouseover", function() {
      $("li#what_is_glacir a").css("background-position", "0 -34px");
    });
    $("li#what_is_glacir a").bind("mouseout", function() {
      $("li#what_is_glacir a").css("background-position", "0 0");
    });
    
    $("li#how_it_all_works a").bind("mouseover", function() {
      $("li#how_it_all_works a").css("background-position", "-290px -34px");
    });
    $("li#how_it_all_works a").bind("mouseout", function() {
      $("li#how_it_all_works a").css("background-position", "-290px 0");
    });

    $("li#see_our_members a").bind("mouseover", function() {
      $("li#see_our_members a").css("background-position", "-142px -34px");
    });
    $("li#see_our_members a").bind("mouseout", function() {
      $("li#see_our_members a").css("background-position", "-142px 0");
    });
  }
  
  
  // ROTATOR FUNCTIONS
  
  function showFirstImage()
  {
	//$("div#rotating_banner").before(" 1,");
	current_slide = 1;
	$("div#rotating_banner img.rotating_slides").hide();
	$("div#rotating_banner img#rotating_image1").css("opacity", "0");
	$("div#rotating_banner img#rotating_image1").show();
	$("div#rotating_banner img#rotating_image1").animate({"opacity":1}, fadeInSpeed, "linear", null);
	clearTimeout(rotate_timer); 
	rotate_timer = setTimeout(eval("showSecondImage"), rotateSpeed);
	$("div#slide_title").html(image1Title);
	$("div#rotating_controls li").css("background-position", "0 0");
  $("a#showFirstImageLink").parent().css("background-position", "0 -13px");
  }
  
  
  function showSecondImage()
  {
	//$("div#rotating_banner").before(" 2,");
	current_slide = 2;
	$("div#rotating_banner img.rotating_slides").hide();
	$("div#rotating_banner img#rotating_image2").css("opacity", "0");
	$("div#rotating_banner img#rotating_image2").show();
	$("div#rotating_banner img#rotating_image2").animate({"opacity":1}, fadeInSpeed, "linear", null);
	clearTimeout(rotate_timer); 
	rotate_timer = setTimeout(eval("showThirdImage"), rotateSpeed);
	$("div#slide_title").html(image2Title);
	$("div#rotating_controls li").css("background-position", "0 0");
  $("a#showSecondImageLink").parent().css("background-position", "0 -13px");
  }
  
  
  function showThirdImage()
  {
	//$("div#rotating_banner").before(" 3,");
	current_slide = 3;
	$("div#rotating_banner img.rotating_slides").hide();
	$("div#rotating_banner img#rotating_image3").css("opacity", "0");
	$("div#rotating_banner img#rotating_image3").show();
	$("div#rotating_banner img#rotating_image3").animate({"opacity":1}, fadeInSpeed, "linear", null);
	clearTimeout(rotate_timer); 
	rotate_timer = setTimeout(eval("showFourthImage"), rotateSpeed);
	$("div#slide_title").html(image3Title);
	$("div#rotating_controls li").css("background-position", "0 0");
  $("a#showThirdImageLink").parent().css("background-position", "0 -13px");
  }
  
  
  function showFourthImage()
  {
	//$("div#rotating_banner").before(" 4,");
	current_slide = 4;
	$("div#rotating_banner img.rotating_slides").hide();
	$("div#rotating_banner img#rotating_image4").css("opacity", "0");
	$("div#rotating_banner img#rotating_image4").show();
	$("div#rotating_banner img#rotating_image4").animate({"opacity":1}, fadeInSpeed, "linear", null);
	clearTimeout(rotate_timer); 
	rotate_timer = setTimeout(eval("showFifthImage"), rotateSpeed);
	$("div#slide_title").html(image4Title);
	$("div#rotating_controls li").css("background-position", "0 0");
  $("a#showFourthImageLink").parent().css("background-position", "0 -13px");
  }
  
  
  function showFifthImage()
  {
	//$("div#rotating_banner").before(" 5,");
	current_slide = 5;
	$("div#rotating_banner img.rotating_slides").hide();
	$("div#rotating_banner img#rotating_image5").css("opacity", "0");
	$("div#rotating_banner img#rotating_image5").show();
	$("div#rotating_banner img#rotating_image5").animate({"opacity":1}, fadeInSpeed, "linear", null);
	clearTimeout(rotate_timer);
	rotate_timer = setTimeout(eval("showFirstImage"), rotateSpeed);
	$("div#slide_title").html(image5Title);
	$("div#rotating_controls li").css("background-position", "0 0");
  $("a#showFifthImageLink").parent().css("background-position", "0 -13px");
  }
  
  function resumePlay()
  {
    switch(current_slide)
    {
      case 1: showFirstImage(); break;
      case 2: showSecondImage(); break;
      case 3: showThirdImage(); break;
      case 4: showFourthImage(); break;
      case 5: showFifthImage(); break;
    }
  }

  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     7 June 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
  /*****************************************/
  /*** P R O F I L E   F U N C T I O N S ***/
  /*****************************************/

  var edit_disabled = 0;


  $(document).ready(function()
  {
  
    $("div#edit a#import_info").bind("click", function(e) {
      e.preventDefault();
      //alert($(this).attr("name"));
      importInfoFromFacebook($(this).attr("name")); 
    });
    
    
    $("div#edit a#edit_profile").bind("click", function() 
    {
      loadPopup("Loading...", "", 300, 200);
      
      var current_loc_id = 0;
      var hometown_loc_id = 0;
      var current_location = "";
      var hometown_location = "";
      
      $.ajax({
        type: "POST",
        url: "../php/event_handlers/GlacirGetProfileUpdateForm.php",
        data: "",
        success: function (data) 
        {
          loadPopup("Update Profile", data, 430, 500);  
          
          // CURRENT LOCATION AUTO-COMPLETE 
          
          $("#new_current_location").bind("keyup", function() 
          { 
            $("#current_results").html("<img src=\"/img/ajax-loader.gif\" />");            
            $("#current_results").css("visibility", "visible");
            var input = $("#new_current_location").val();
                          
            $.getJSON("../php/event_handlers/GlacirGetLocations.php", 
              { q: input }, 
              function(json)
              {
                var html = "<dl>";
                for(var i=0; i<json.location.length; i++)
                {
                  html = html + "<dt><span>" + json.location[i].m_ID + 
                    "</span><em>" + json.location[i].m_City  +
                    ", " + json.location[i].m_Region + ", " + json.location[i].m_Country 
                    + "</em></dt>";
                }
                html = html + "</dl>";
                $("#current_results").html(html);
                
                $("#current_results dt").click( function() 
                  {
                    //alert($(this).find("span").html());
                    $("#new_current_location").val($(this).find("em").html());
                    current_location = $(this).find("em").html();
                    current_loc_id = $(this).find("span").html();
                    $("#current_results").css("visibility", "hidden");
                 });
              }
            );
          });  

          $("#new_current_location").bind("blur", function() 
          {
            //$("#current_results").css("visibility", "hidden");
          });            
          
          // HOMETOWN LOCATION AUTO-COMPLETE
          
          $("#new_hometown_location").bind("keyup", function() 
          { 
            $("#hometown_results").html("<img src=\"/img/ajax-loader.gif\" />");            
            $("#hometown_results").css("visibility", "visible");
            var input = $("#new_hometown_location").val();
                          
            $.getJSON("../php/event_handlers/GlacirGetLocations.php", 
              { q: input }, 
              function(json)
              {
                var html = "<dl>";
                for(var i=0; i<json.location.length; i++)
                {
                  html = html + "<dt><span>" + json.location[i].m_ID + 
                    "</span><em>" + json.location[i].m_City  +
                    ", " + json.location[i].m_Region + ", " + json.location[i].m_Country 
                    + "</em></dt>";
                }
                html = html + "</dl>";
                $("#hometown_results").html(html);
                
                $("#hometown_results dt").click( function() 
                  {
                    //alert($(this).find("span").html());
                    $("#new_hometown_location").val($(this).find("em").html());
                    hometown_location = $(this).find("em").html();
                    hometown_loc_id = $(this).find("span").html();
                    $("#hometown_results").css("visibility", "hidden");
                 });
              }
            );
          });  

          $("#new_hometown_location").bind("blur", function() 
          {
            //$("#hometown_results").css("visibility", "hidden");
          });
          
          // UPDATE USER INFO HANDLER
                     
          $("#update_info_form").submit( function() 
          { 
            var display_name = $("input#new_display_name").val();
            var gender = $("select#glacir_gender").val();
            var dob_day = $("#glacir_day").val();
            var dob_month = $("#glacir_month").val();
            var dob_year = $("#glacir_year").val();              
            var magic = $("#magic").val();
            
            loadPopup("Saving...", "", 300, 200);
            
            $.ajax({
              type: "POST",
              url: "../php/event_handlers/GlacirUpdateUserProfile.php",
              data: "display_name=" + display_name +
                    "&gender=" + gender +
                    "&dob_day=" + dob_day +
                    "&dob_month=" + dob_month +
                    "&dob_year=" + dob_year +
                    "&current_loc_id=" + current_loc_id +
                    "&hometown_loc_id=" + hometown_loc_id +
                    "&magic=" + magic
              ,
              success: function (data) {
                if(data.substring(0,4) == "TRUE")
                {                  
                  loadPopup("Profile Updated", "Your profile was successfully updated!", -1, -1);
                  
                  $("div#username_container span").html(display_name); 
                  
                  $("dt#auth_profile_birthday").html("<label>Birthday </label> " + dob_month + "/"
                    + dob_day + "/" + dob_year); 
                    
                  setDocumentTitle(display_name); // update the <title>
                  
                  
                  if(gender == "male")
                  {
                    $("dt#auth_profile_gender").html("<label>Gender </label> Male"); 
                  }
                  else if(gender == "female")
                  {
                    $("dt#auth_profile_gender").html("<label>Gender </label> Female"); 
                  }
                  else if(gender == "")
                  {
                    $("dt#auth_profile_gender").html("<label>Gender </label> -"); 
                  }
                  
                  if(current_location != "")
                  {
                    $("dt#current_loc").html("<label>Location </label> " + current_location); 
                  }
                  if(hometown_location != "")
                  {
                    $("dt#hometown_loc").html("<label>Hometown </label> " + hometown_location); 
                  }
                }
                else
                {
                  loadPopup("Error!", data, -1, -1);
                }
              },
              error: function (data) {
                alert(data);
              }
            });
            return false;
            
          });
        },
        error: function (xhr, desc, exceptionobj) {
          alert(xhr.responseText);
        }
      });
    });
    
    // INITIATE FIRST-DEGREE CONNECTION
    
    $("a#add_first").bind("click", bindConnectionRequestEL);

    function bindConnectionRequestEL()
    {      
      $("a#add_first").unbind("click");
      
      loadPopup("Making Connection...", "", 300, 200);
      
      var magic = $("input#magic").val();
      var receiving_id = $("input#receiving_id").val();          
      var is_full = $("input#is_full_account").val();
      
      $.ajax({
        type: "POST",
        url: "../php/event_handlers/GlacirInitiateFirstDegreeConnection.php",
        data: "receiving_id=" + receiving_id +
              "&magic=" + magic +
              "&is_full=" + is_full,
        success: function (data) {
          if(data == "TRUE")
          {
            $("a#add_first").hide();
            //$("p#add_vert_line").hide();
            //$("p#add_to_first_container").fadeOut("slow");
            $("p#add_to_first_container").css("background-position", "0 -132px");
            loadPopup("First Degree Requested", 
              "A connection request has been sent. Your " +
              "degrees will be updated once the user has accepted the " +
              "request.", 300, 200);
          }
          else
          {
            loadPopup("Error", 
              "There was a problem in trying to complete your " +
              "request. " + data, 300, 200);
            $("a#add_first").bind("click", bindConnectionRequestEL);
          }
        },
        error: function(data)
        {
          hidePopup();
          alert(data);
          $("a#add_first").bind("click", bindConnectionRequestEL);
        }
      });
    }
    
    // UPDATE PROFILE PICTURE
    
    if($("a#change_picture").length || $("img#auth_pic").length)
    {
      bindUploaderListener("change_picture");
		  bindUploaderListener("auth_pic");
    }
    
    $("div#edit a#change_picture").bind("click", function(e){ e.preventDefault(); });
    $("img#auth_pic").bind("click", function(e) { e.preventDefault(); });   
  });
  
  function setDegreeIndicator(degree)
  {
    if(degree == 0)
    {
      $("p#degree_container").css("background-position", "-294px 0");
    }
    else if(degree == 1)
    {
      $("p#degree_container").css("background-position", "0 0");
    }
    else if(degree == 2)
    {
      $("p#degree_container").css("background-position", "-42px 0");
    }
    else if(degree == 3)
    {
      $("p#degree_container").css("background-position", "-84px 0");
    }
    else if(degree == 4)
    {
      $("p#degree_container").css("background-position", "-126px 0");
    }
    else if(degree == 5)
    {
      $("p#degree_container").css("background-position", "-168px 0");
    }
    else if(degree == 6)
    {
      $("p#degree_container").css("background-position", "-210px 0");
    }
    else if(degree == -1)
    {
      $("p#degree_container").css("background-position", "-252px 0");
    }
    
  }
  
  function bindUploaderListener(html_id)
  {
    var upload_link_html = $("div#edit a#change_picture").html();
    
    new AjaxUpload(html_id, 
		{
			action: '/php/event_handlers/GlacirAjaxPictureUpload.php', 
			autoSubmit: true,
			onComplete: function(file, response) 
			{
			  if($("div#edit a#change_picture").attr("name") == response)
			  {
				  $("img#auth_pic").attr("src", "/user_content/" + response.charAt(0) + "/" + response + ".jpg?dummy=" + Math.floor(Math.random()*10000));
				  $("div#edit a#change_picture").html(upload_link_html);
				}
				else
				{
				  loadPopup("Could not use image", "You must select a .jpg, .gif, or .png less 1.5MB in size.", -1, -1);
				  $("div#edit a#change_picture").html(upload_link_html);
				}
			}, 
			onChange : function(file , ext){
				if (! (ext && /^(jpg|png|jpeg|gif)$/i.test(ext)))
				{
					loadPopup('Invalid file extension', 'You can only use .jpg, .gif, and .png for your picture.', -1, -1);
					return false;
				}
				else
				{
					//$("p").html("Uploading: " + file + "<img src=\"ajax-loader.gif\" />");
					$("div#edit a#change_picture").html("<img src=\"/img/ajax/ajax-bars.gif\" />");
				}
			},
			onSubmit: function(file, extension) {}
		}); // end of ajax upload
  }


  function importInfoFromFacebook(user)
  {
    var saved_html = $("div#edit a#import_info").html();
    $("div#edit a#import_info").html("<img src=\"/img/ajax/ajax-bars.gif\" />");
    
    $.ajax({
        type: "GET",
        url: "../php/event_handlers/GlacirImportFacebookInfo.php",
        data: "",
        success: function (data) {
          if(data == "TRUE")
          {
            //alert(data);
            $("div#edit a#import_info").html(saved_html);
            $("div#edit a#import_info").bind("click", function() {
							importInfoFromFacebook($(this).attr("name"));
						});
						
						$("img#auth_pic").attr("src", "/user_content/" + user.charAt(0).toLowerCase() + "/" + user.toLowerCase() + ".jpg?dummy=" + Math.floor(Math.random()*10000));
						refreshLinks(); // refresh after adding facebook
          }
          else
          {
            loadPopup("Sorry. Could not import Facebook data.", data, -1, -1);
            $("div#edit a#import_info").html(saved_html);
            $("div#edit a#import_info").bind("click", function() {
							importInfoFromFacebook($(this).attr("name"));
						});
          }
        },
        error: function(data)
        {
          hidePopup();
          alert(data);
          $("div#edit a#import_info").html(saved_html);
					$("div#edit a#import_info").bind("click", function() {
						importInfoFromFacebook($(this).attr("name"));
					});
        }
      });
    
  }/**
 * AJAX Upload ( http://valums.com/ajax-upload/ ) 
 * Copyright (c) Andris Valums
 * Licensed under the MIT license ( http://valums.com/mit-license/ )
 * Thanks to Gary Haran, David Mark, Corey Burns and others for contributions 
 */
(function () {
    /* global window */
    /* jslint browser: true, devel: true, undef: true, nomen: true, bitwise: true, regexp: true, newcap: true, immed: true */
    
    /**
     * Wrapper for FireBug's console.log
     */
    function log(){
        if (typeof(console) != 'undefined' && typeof(console.log) == 'function'){            
            Array.prototype.unshift.call(arguments, '[Ajax Upload]');
            console.log( Array.prototype.join.call(arguments, ' '));
        }
    } 

    /**
     * Attaches event to a dom element.
     * @param {Element} el
     * @param type event name
     * @param fn callback This refers to the passed element
     */
    function addEvent(el, type, fn){
        if (el.addEventListener) {
            el.addEventListener(type, fn, false);
        } else if (el.attachEvent) {
            el.attachEvent('on' + type, function(){
                fn.call(el);
	        });
	    } else {
            throw new Error('not supported or DOM not loaded');
        }
    }   
    
    /**
     * Attaches resize event to a window, limiting
     * number of event fired. Fires only when encounteres
     * delay of 100 after series of events.
     * 
     * Some browsers fire event multiple times when resizing
     * http://www.quirksmode.org/dom/events/resize.html
     * 
     * @param fn callback This refers to the passed element
     */
    function addResizeEvent(fn){
        var timeout;
               
	    addEvent(window, 'resize', function(){
            if (timeout){
                clearTimeout(timeout);
            }
            timeout = setTimeout(fn, 100);                        
        });
    }    
    
    // Needs more testing, will be rewriten for next version        
    // getOffset function copied from jQuery lib (http://jquery.com/)
    if (document.documentElement.getBoundingClientRect){
        // Get Offset using getBoundingClientRect
        // http://ejohn.org/blog/getboundingclientrect-is-awesome/
        var getOffset = function(el){
            var box = el.getBoundingClientRect();
            var doc = el.ownerDocument;
            var body = doc.body;
            var docElem = doc.documentElement; // for ie 
            var clientTop = docElem.clientTop || body.clientTop || 0;
            var clientLeft = docElem.clientLeft || body.clientLeft || 0;
             
            // In Internet Explorer 7 getBoundingClientRect property is treated as physical,
            // while others are logical. Make all logical, like in IE8.	
            var zoom = 1;            
            if (body.getBoundingClientRect) {
                var bound = body.getBoundingClientRect();
                zoom = (bound.right - bound.left) / body.clientWidth;
            }
            
            if (zoom > 1) {
                clientTop = 0;
                clientLeft = 0;
            }
            
            var top = box.top / zoom + (window.pageYOffset || docElem && docElem.scrollTop / zoom || body.scrollTop / zoom) - clientTop, left = box.left / zoom + (window.pageXOffset || docElem && docElem.scrollLeft / zoom || body.scrollLeft / zoom) - clientLeft;
            
            return {
                top: top,
                left: left
            };
        };        
    } else {
        // Get offset adding all offsets 
        var getOffset = function(el){
            var top = 0, left = 0;
            do {
                top += el.offsetTop || 0;
                left += el.offsetLeft || 0;
                el = el.offsetParent;
            } while (el);
            
            return {
                left: left,
                top: top
            };
        };
    }
    
    /**
     * Returns left, top, right and bottom properties describing the border-box,
     * in pixels, with the top-left relative to the body
     * @param {Element} el
     * @return {Object} Contains left, top, right,bottom
     */
    function getBox(el){
        var left, right, top, bottom;
        var offset = getOffset(el);
        left = offset.left;
        top = offset.top;
        
        right = left + el.offsetWidth;
        bottom = top + el.offsetHeight;
        
        return {
            left: left,
            right: right,
            top: top,
            bottom: bottom
        };
    }
    
    /**
     * Helper that takes object literal
     * and add all properties to element.style
     * @param {Element} el
     * @param {Object} styles
     */
    function addStyles(el, styles){
        for (var name in styles) {
            if (styles.hasOwnProperty(name)) {
                el.style[name] = styles[name];
            }
        }
    }
        
    /**
     * Function places an absolutely positioned
     * element on top of the specified element
     * copying position and dimentions.
     * @param {Element} from
     * @param {Element} to
     */    
    function copyLayout(from, to){
	    var box = getBox(from);
        
        addStyles(to, {
	        position: 'absolute',                    
	        left : box.left + 'px',
	        top : box.top + 'px',
	        width : from.offsetWidth + 'px',
	        height : from.offsetHeight + 'px'
	    });        
    }

    /**
    * Creates and returns element from html chunk
    * Uses innerHTML to create an element
    */
    var toElement = (function(){
        var div = document.createElement('div');
        return function(html){
            div.innerHTML = html;
            var el = div.firstChild;
            return div.removeChild(el);
        };
    })();
            
    /**
     * Function generates unique id
     * @return unique id 
     */
    var getUID = (function(){
        var id = 0;
        return function(){
            return 'ValumsAjaxUpload' + id++;
        };
    })();        
 
    /**
     * Get file name from path
     * @param {String} file path to file
     * @return filename
     */  
    function fileFromPath(file){
        return file.replace(/.*(\/|\\)/, "");
    }
    
    /**
     * Get file extension lowercase
     * @param {String} file name
     * @return file extenstion
     */    
    function getExt(file){
        return (-1 !== file.indexOf('.')) ? file.replace(/.*[.]/, '') : '';
    }

    function hasClass(el, name){        
        var re = new RegExp('\\b' + name + '\\b');        
        return re.test(el.className);
    }    
    function addClass(el, name){
        if ( ! hasClass(el, name)){   
            el.className += ' ' + name;
        }
    }    
    function removeClass(el, name){
        var re = new RegExp('\\b' + name + '\\b');                
        el.className = el.className.replace(re, '');        
    }
    
    function removeNode(el){
        el.parentNode.removeChild(el);
    }

    /**
     * Easy styling and uploading
     * @constructor
     * @param button An element you want convert to 
     * upload button. Tested dimentions up to 500x500px
     * @param {Object} options See defaults below.
     */
    window.AjaxUpload = function(button, options){
        this._settings = {
            // Location of the server-side upload script
            action: 'upload.php',
            // File upload name
            name: 'userfile',
            // Additional data to send
            data: {},
            // Submit file as soon as it's selected
            autoSubmit: true,
            // The type of data that you're expecting back from the server.
            // html and xml are detected automatically.
            // Only useful when you are using json data as a response.
            // Set to "json" in that case. 
            responseType: false,
            // Class applied to button when mouse is hovered
            hoverClass: 'hover',
            // Class applied to button when AU is disabled
            disabledClass: 'disabled',            
            // When user selects a file, useful with autoSubmit disabled
            // You can return false to cancel upload			
            onChange: function(file, extension){
            },
            // Callback to fire before file is uploaded
            // You can return false to cancel upload
            onSubmit: function(file, extension){
            },
            // Fired when file upload is completed
            // WARNING! DO NOT USE "FALSE" STRING AS A RESPONSE!
            onComplete: function(file, response){
            }
        };
                        
        // Merge the users options with our defaults
        for (var i in options) {
            if (options.hasOwnProperty(i)){
                this._settings[i] = options[i];
            }
        }
                
        // button isn't necessary a dom element
        if (button.jquery){
            // jQuery object was passed
            button = button[0];
        } else if (typeof button == "string") {
            if (/^#.*/.test(button)){
                // If jQuery user passes #elementId don't break it					
                button = button.slice(1);                
            }
            
            button = document.getElementById(button);
        }
        
        if ( ! button || button.nodeType !== 1){
            throw new Error("Please make sure that you're passing a valid element"); 
        }
                
        if ( button.nodeName.toUpperCase() == 'A'){
            // disable link                       
            addEvent(button, 'click', function(e){
                if (e && e.preventDefault){
                    e.preventDefault();
                } else if (window.event){
                    window.event.returnValue = false;
                }
            });
        }
                    
        // DOM element
        this._button = button;        
        // DOM element                 
        this._input = null;
        // If disabled clicking on button won't do anything
        this._disabled = false;
        
        // if the button was disabled before refresh if will remain
        // disabled in FireFox, let's fix it
        this.enable();        
        
        this._rerouteClicks();
    };
    
    // assigning methods to our class
    AjaxUpload.prototype = {
        setData: function(data){
            this._settings.data = data;
        },
        disable: function(){            
            addClass(this._button, this._settings.disabledClass);
            this._disabled = true;
            
            var nodeName = this._button.nodeName.toUpperCase();            
            if (nodeName == 'INPUT' || nodeName == 'BUTTON'){
                this._button.setAttribute('disabled', 'disabled');
            }            
            
            // hide input
            if (this._input){
                // We use visibility instead of display to fix problem with Safari 4
                // The problem is that the value of input doesn't change if it 
                // has display none when user selects a file           
                this._input.parentNode.style.visibility = 'hidden';
            }
        },
        enable: function(){
            removeClass(this._button, this._settings.disabledClass);
            this._button.removeAttribute('disabled');
            this._disabled = false;
            
        },
        /**
         * Creates invisible file input 
         * that will hover above the button
         * <div><input type='file' /></div>
         */
        _createInput: function(){ 
            var self = this;
                        
            var input = document.createElement("input");
            input.setAttribute('type', 'file');
            input.setAttribute('name', this._settings.name);
            
            addStyles(input, {
                'position' : 'absolute',
                // in Opera only 'browse' button
                // is clickable and it is located at
                // the right side of the input
                'right' : 0,
                'margin' : 0,
                'padding' : 0,
                'fontSize' : '480px',                
                'cursor' : 'pointer'
            });            

            var div = document.createElement("div");                        
            addStyles(div, {
                'display' : 'block',
                'position' : 'absolute',
                'overflow' : 'hidden',
                'margin' : 0,
                'padding' : 0,                
                'opacity' : 0,
                // Make sure browse button is in the right side
                // in Internet Explorer
                'direction' : 'ltr',
                //Max zIndex supported by Opera 9.0-9.2
                'zIndex': 2147483583
            });
            
            // Make sure that element opacity exists.
            // Otherwise use IE filter            
            if ( div.style.opacity !== "0") {
                if (typeof(div.filters) == 'undefined'){
                    throw new Error('Opacity not supported by the browser');
                }
                div.style.filter = "alpha(opacity=0)";
            }            
            
            addEvent(input, 'change', function(){
                 
                if ( ! input || input.value === ''){                
                    return;                
                }
                            
                // Get filename from input, required                
                // as some browsers have path instead of it          
                var file = fileFromPath(input.value);
                                
                if (false === self._settings.onChange.call(self, file, getExt(file))){
                    self._clearInput();                
                    return;
                }
                
                // Submit form when value is changed
                if (self._settings.autoSubmit) {
                    self.submit();
                }
            });            

            addEvent(input, 'mouseover', function(){
                addClass(self._button, self._settings.hoverClass);
            });
            
            addEvent(input, 'mouseout', function(){
                removeClass(self._button, self._settings.hoverClass);
                
                // We use visibility instead of display to fix problem with Safari 4
                // The problem is that the value of input doesn't change if it 
                // has display none when user selects a file           
                input.parentNode.style.visibility = 'hidden';

            });   
                        
	        div.appendChild(input);
            document.body.appendChild(div);
              
            this._input = input;
        },
        _clearInput : function(){
            if (!this._input){
                return;
            }            
                             
            // this._input.value = ''; Doesn't work in IE6                               
            removeNode(this._input.parentNode);
            this._input = null;                                                                   
            this._createInput();
            
            removeClass(this._button, this._settings.hoverClass);
        },
        /**
         * Function makes sure that when user clicks upload button,
         * the this._input is clicked instead
         */
        _rerouteClicks: function(){
            var self = this;
            
            // IE will later display 'access denied' error
            // if you use using self._input.click()
            // other browsers just ignore click()

            addEvent(self._button, 'mouseover', function(){
                if (self._disabled){
                    return;
                }
                                
                if ( ! self._input){
	                self._createInput();
                }
                
                var div = self._input.parentNode;                            
                copyLayout(self._button, div);
                div.style.visibility = 'visible';
                                
            });
            
            
            // commented because we now hide input on mouseleave
            /**
             * When the window is resized the elements 
             * can be misaligned if button position depends
             * on window size
             */
            //addResizeEvent(function(){
            //    if (self._input){
            //        copyLayout(self._button, self._input.parentNode);
            //    }
            //});            
                                         
        },
        /**
         * Creates iframe with unique name
         * @return {Element} iframe
         */
        _createIframe: function(){
            // We can't use getTime, because it sometimes return
            // same value in safari :(
            var id = getUID();            
             
            // We can't use following code as the name attribute
            // won't be properly registered in IE6, and new window
            // on form submit will open
            // var iframe = document.createElement('iframe');
            // iframe.setAttribute('name', id);                        
 
            var iframe = toElement('<iframe src="javascript:false;" name="' + id + '" />');
            // src="javascript:false; was added
            // because it possibly removes ie6 prompt 
            // "This page contains both secure and nonsecure items"
            // Anyway, it doesn't do any harm.            
            iframe.setAttribute('id', id);
            
            iframe.style.display = 'none';
            document.body.appendChild(iframe);
            
            return iframe;
        },
        /**
         * Creates form, that will be submitted to iframe
         * @param {Element} iframe Where to submit
         * @return {Element} form
         */
        _createForm: function(iframe){
            var settings = this._settings;
                        
            // We can't use the following code in IE6
            // var form = document.createElement('form');
            // form.setAttribute('method', 'post');
            // form.setAttribute('enctype', 'multipart/form-data');
            // Because in this case file won't be attached to request                    
            var form = toElement('<form method="post" enctype="multipart/form-data"></form>');
                        
            form.setAttribute('action', settings.action);
            form.setAttribute('target', iframe.name);                                   
            form.style.display = 'none';
            document.body.appendChild(form);
            
            // Create hidden input element for each data key
            for (var prop in settings.data) {
                if (settings.data.hasOwnProperty(prop)){
                    var el = document.createElement("input");
                    el.setAttribute('type', 'hidden');
                    el.setAttribute('name', prop);
                    el.setAttribute('value', settings.data[prop]);
                    form.appendChild(el);
                }
            }
            return form;
        },
        /**
         * Gets response from iframe and fires onComplete event when ready
         * @param iframe
         * @param file Filename to use in onComplete callback 
         */
        _getResponse : function(iframe, file){            
            // getting response
            var toDeleteFlag = false, self = this, settings = this._settings;   
               
            addEvent(iframe, 'load', function(){                
                
                if (// For Safari 
                    iframe.src == "javascript:'%3Chtml%3E%3C/html%3E';" ||
                    // For FF, IE
                    iframe.src == "javascript:'<html></html>';"){                                                                        
                        // First time around, do not delete.
                        // We reload to blank page, so that reloading main page
                        // does not re-submit the post.
                        
                        if (toDeleteFlag) {
                            // Fix busy state in FF3
                            setTimeout(function(){
                                removeNode(iframe);
                            }, 0);
                        }
                                                
                        return;
                }
                
                var doc = iframe.contentDocument ? iframe.contentDocument : window.frames[iframe.id].document;
                
                // fixing Opera 9.26,10.00
                if (doc.readyState && doc.readyState != 'complete') {
                   // Opera fires load event multiple times
                   // Even when the DOM is not ready yet
                   // this fix should not affect other browsers
                   return;
                }
                
                // fixing Opera 9.64
                if (doc.body && doc.body.innerHTML == "false") {
                    // In Opera 9.64 event was fired second time
                    // when body.innerHTML changed from false 
                    // to server response approx. after 1 sec
                    return;
                }
                
                var response;
                
                if (doc.XMLDocument) {
                    // response is a xml document Internet Explorer property
                    response = doc.XMLDocument;
                } else if (doc.body){
                    // response is html document or plain text
                    response = doc.body.innerHTML;
                    
                    if (settings.responseType && settings.responseType.toLowerCase() == 'json') {
                        // If the document was sent as 'application/javascript' or
                        // 'text/javascript', then the browser wraps the text in a <pre>
                        // tag and performs html encoding on the contents.  In this case,
                        // we need to pull the original text content from the text node's
                        // nodeValue property to retrieve the unmangled content.
                        // Note that IE6 only understands text/html
                        if (doc.body.firstChild && doc.body.firstChild.nodeName.toUpperCase() == 'PRE') {
                            response = doc.body.firstChild.firstChild.nodeValue;
                        }
                        
                        if (response) {
                            response = eval("(" + response + ")");
                        } else {
                            response = {};
                        }
                    }
                } else {
                    // response is a xml document
                    response = doc;
                }
                
                settings.onComplete.call(self, file, response);
                
                // Reload blank page, so that reloading main page
                // does not re-submit the post. Also, remember to
                // delete the frame
                toDeleteFlag = true;
                
                // Fix IE mixed content issue
                iframe.src = "javascript:'<html></html>';";
            });            
        },        
        /**
         * Upload file contained in this._input
         */
        submit: function(){                        
            var self = this, settings = this._settings;
            
            if ( ! this._input || this._input.value === ''){                
                return;                
            }
                                    
            var file = fileFromPath(this._input.value);
            
            // user returned false to cancel upload
            if (false === settings.onSubmit.call(this, file, getExt(file))){
                this._clearInput();                
                return;
            }
            
            // sending request    
            var iframe = this._createIframe();
            var form = this._createForm(iframe);
            
            // assuming following structure
            // div -> input type='file'
            removeNode(this._input.parentNode);            
            removeClass(self._button, self._settings.hoverClass);
                        
            form.appendChild(this._input);
                        
            form.submit();

            // request set, clean up                
            removeNode(form); form = null;                          
            removeNode(this._input); this._input = null;
            
            // Get response from iframe and fire onComplete event when ready
            this._getResponse(iframe, file);            

            // get ready for next request            
            this._createInput();
        }
    };
})(); 

  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     7 June 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
    
  var allowRefresh = true;
  
  $(document).ready( function() {
  
    // Start auto-refresh function?
    //
    // Only when user is on the /degrees "ALL" page
    var this_place = window.location.href;    
    if(this_place == (domain + "/degrees"))
    {
      setInterval(refreshAllEvents, 30000); // 1 min
    }
    
    // Facebook Share
    //
    $("a#share_to_facebook").fadeIn("slow");
    $("a#share_to_facebook").bind("click", function(e) {
      e.preventDefault();
      var display_name = $(this).attr("name");
      var username = $(this).attr("alt");
      var base_url = $(this).attr("href");
      var num_degrees = $(this).attr("title");
      //alert(display_name + " " + username + " " + base_url + "/img/logo.png " + num_degrees);
      
      var attachment = {'name': display_name + '\'s Six Degrees of Separation', 
			 'href': base_url + '/' + username,
			 'description': display_name + ' has ' + num_degrees + 
			   ' people in their six degrees of separation on Glacir.' + 
			   ' Join Glacir to see how many people you have in your six degrees of separation.',
			 'media': [{'type': 'image',
									'src': base_url + '/img/logo.png',
									'href': base_url + '/' + username
								}]
			 }
      shareToFacebook('', attachment, null);
    });
  
    $("img.globe").each( function() {
      $(this).click( function(e) {
      
        allowRefresh = false; // disable refresh until "Back" is clicked
        
        e.preventDefault();
        var event_id = "event" + $(this).attr("id").substring(3, $(this).attr("id").length);
        
        $("div.events").hide();  // hide all other events
        $("div#pagination").hide(); // hide the page controls
        clearMap();  // clear the map markers
        plotSingleEvent($(this).attr("id").substring(3, $(this).attr("id").length));  // show only that map marker
        $("div#"+event_id).show();  // show the single event
        $("p#degrees_back_button").show();  // show the back button
        
        // add "back" event listener
        $("p#degrees_back_button").click( function(e) {
          e.preventDefault();
          showAllEvents();  // bring back all events
          plotEvents();  // bring back all markers
          allowRefresh = true;
        });
      });
    });
    
    $("div.events").each( function() {
      $(this).hover( 
      function() {
        $(this).next("p").show();
      },
      function() {
        $(this).next("p").hide();
      });
    });
    
  });
   
  function showAllEvents()
  {
    $("div.events").show();  // show all other events
    $("div#pagination").show(); // show the page controls
    $("p#degrees_back_button").hide();  // hide the back button
  }
  
  function refreshAllEvents()
  {
    if(allowRefresh)
    {
      // Alert the user to "updating"
      // ** $("div#events_container").fadeTo(500, 0.5);
      // ** $("p#loading_notification").show();
            
      // Clear pre-existing markers from the map
      eventJSON = new Array();
      
      $.ajax({
        type: "POST",
        url: "../php/event_handlers/GlacirGetUserFeed.php",
        data: "degree=0"
        ,
        success: function (data) {
          
          // Reload degree stats!
          updateDegreeStatsInSidebar();
         
          $("div#events_container").html(data);
          // ** $("div#events_container").fadeTo(500, 1);
          // ** $("p#loading_notification").fadeOut();
          
          $("div.events").each( function() {
            $(this).hover( 
            function() {
              $(this).next("p").show();
            },
            function() {
              $(this).next("p").hide();
            });
          });
          
          $("img.globe").each( function() {
            $(this).click( function(e) {
            
              allowRefresh = false; // disable refresh until "Back" is clicked
              
              e.preventDefault();
              var event_id = "event" + $(this).attr("id").substring(3, $(this).attr("id").length);
              
              $("div.events").hide();  // hide all other events
              $("div#pagination").hide(); // hide the page controls
              clearMap();  // clear the map markers
              plotSingleEvent($(this).attr("id").substring(3, $(this).attr("id").length));  // show only that map marker
              $("div#"+event_id).show();  // show the single event
              $("p#degrees_back_button").show();  // show the back button
              
              // add "back" event listener
              $("p#degrees_back_button").click( function(e) {
                e.preventDefault();
                showAllEvents();  // bring back all events
                plotEvents();  // bring back all markers
                allowRefresh = true;
              });
            });
          });
          
          // Update the map with the most recent markers        
          clearMap();
          plotEvents();
        },
        error: function(data) { }
      });
    }
       
    return true;
    
  }

  function shareToFacebook(msg, attachment, action_link)
  {
    FB.ensureInit(function () {
      FB.Connect.streamPublish('', attachment, action_link);
    });
  }
  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     7 June 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
  /*********************************/
  /*** M A P   F U N C T I O N S ***/
  /*********************************/
  
  
  // Map and global marker vars
	var map = null;   // Declare a Global Map for this user
  var youMarker = null; // draggable marker for authd user
  
  // Links vars
  var glacirURL = domain + "/"; 
	var glacirPicUrl = domain + "/user_content/";
	var pictureFormat = ".jpg";

	// Used to control push pin clustering
	var markerMgr = null;
	var mcOptions = {gridSize: 50, maxZoom: 7};
  
  // Initialize the map markers
  var marker1st = null;
  var marker2nd = null;
  var marker3rd = null;
  var marker4th = null;
  var marker5th = null;
  var marker6th = null;
  
  // Initialize GMarker lat/long array
  var eventJSON = [];

	//
	// Initialize Google Map
	//
	function initMap(userID)
	{
		if (GBrowserIsCompatible()) 
		{
		  //Create a 
		  map = new GMap2(document.getElementById("glacir_user_map"));
      		  
		  map.setCenter(new GLatLng(20, 0), 1);
		  map.setUIToDefault();	  
      map.setMapType(G_PHYSICAL_MAP);
      map.removeMapType(G_HYBRID_MAP);
      map.removeMapType(G_NORMAL_MAP);
      map.removeMapType(G_SATELLITE_MAP);
      map.removeMapType(G_PHYSICAL_MAP);
		  map.addControl(new GMapTypeControl());
      
      // save initial position of map
      map.savePosition();
      
      // First-degree marker
      marker1st = new GIcon(G_DEFAULT_ICON);
      marker1st.image = domain + "/img/map/icons/map_marker_first.png";
      marker1st.shadow = "";
      marker1st.iconSize = new GSize(15, 30);
      
      // Second-degree marker
      marker2nd = new GIcon(G_DEFAULT_ICON);
      marker2nd.image = domain + "/img/map/icons/map_marker_second.png";
      marker2nd.shadow = "";
      marker2nd.iconSize = new GSize(15, 30);
      
      // Third-degree marker
      marker3rd = new GIcon(G_DEFAULT_ICON);
      marker3rd.image = domain + "/img/map/icons/map_marker_third.png";
      marker3rd.shadow = "";
      marker3rd.iconSize = new GSize(15, 30);
      
      // Fourth-degree marker
      marker4th = new GIcon(G_DEFAULT_ICON);
      marker4th.image = domain + "/img/map/icons/map_marker_fourth.png";
      marker4th.shadow = "";
      marker4th.iconSize = new GSize(15, 30);
      
      // Fifth-degree marker
      marker5th = new GIcon(G_DEFAULT_ICON);
      marker5th.image = domain + "/img/map/icons/map_marker_fifth.png";
      marker5th.shadow = "";
      marker5th.iconSize = new GSize(15, 30);
      
      // Sixth-degree marker
      marker6th = new GIcon(G_DEFAULT_ICON);
      marker6th.image = domain + "/img/map/icons/map_marker_sixth.png";
      marker6th.shadow = "";
      marker6th.iconSize = new GSize(15, 30);
            
		}
	}
  
  // Clear all map markers
  function clearMap() { map.clearOverlays(); } 
  
  // Set the page as the degrees page or not
  // IMPORTANT: Only initialized to "true" on degrees.php
  
  function plotEvents()
  {
    for(i=0; i<eventJSON.length; i++)
    {
      switch(eventJSON[i].degree)
      {
        case 1:
          markerOptions = { icon:marker1st };         
          break;
        case 2:
          markerOptions = { icon:marker2nd };
          break;
        case 3:
          markerOptions = { icon:marker3rd };
          break;
        case 4:
          markerOptions = { icon:marker4th };
          break;
        case 5:
          markerOptions = { icon:marker5th };
          break;
        case 6:
          markerOptions = { icon:marker6th };
          break;
      }
        
      //First character of user name is the folder the image is stored in
      var image = glacirPicUrl + eventJSON[i].username.charAt(0).toLowerCase() + 
        "/" + eventJSON[i].username.toLowerCase() + "_thumb" + pictureFormat;

      //User Profile link
      var userLink = glacirURL + eventJSON[i].username;
      
      //Build the Pushpin popup html
      var marker_html = "<div class=\'user_info\'>" +
             "<a href=\'" + userLink + "\'><img src=\'" + image + "\' /></a><br />" +
             "<a class=\'name\' href=\"" + userLink + "\">" + eventJSON[i].display_name + "</a> " +  
             eventJSON[i].degree +"&deg;</div>";
      
      var event_marker = new GMarker(new GLatLng(eventJSON[i].lat, 
      eventJSON[i].lon), markerOptions);
      
      map.addOverlay(event_marker);
      
      event_marker.bindInfoWindowHtml(marker_html);
    }
  }
  
  
  function plotSingleEvent(id)
  {
    switch(eventJSON[id].degree)
    {
      case 1:
        markerOptions = { icon:marker1st };         
        break;
      case 2:
        markerOptions = { icon:marker2nd };
        break;
      case 3:
        markerOptions = { icon:marker3rd };
        break;
      case 4:
        markerOptions = { icon:marker4th };
        break;
      case 5:
        markerOptions = { icon:marker5th };
        break;
      case 6:
        markerOptions = { icon:marker6th };
        break;
    }
    
    //First character of user name is the folder the image is stored in
    var image = glacirPicUrl + eventJSON[id].username.charAt(0).toLowerCase() + 
      "/" + eventJSON[id].username.toLowerCase() + "_thumb" + pictureFormat;

    //User Profile link
    var userLink = glacirURL + eventJSON[id].username;
    
    //Build the Pushpin popup html
    var marker_html = "<div class=\'user_info\'>" +
           "<a href=\'" + userLink + "\'><img src=\'" + image + "\' /></a><br />" +
           "<a class=\'name\' href=\"" + userLink + "\">" + eventJSON[id].display_name + "</a> " +  
           eventJSON[id].degree +"&deg;</div>";
    
    var event_marker = new GMarker(new GLatLng(eventJSON[id].lat, 
    eventJSON[id].lon), markerOptions);
    
    map.addOverlay(event_marker);
    
    event_marker.bindInfoWindowHtml(marker_html);
  }
  
  
  
  // Store a single degree marker on the map
  //
  // IMPORTANT: Only to be used for plotting human connections...not news!
  
  function addEventCoords(username, display_name, lat, lon, degree)
  {        
    var markerJSON = {"username": username, 
                      "display_name": display_name, 
                      "lat": lat, 
                      "lon": lon, 
                      "degree": degree 
                     };
                      
    // Store the markers
    eventJSON.push(markerJSON);
  }
  
  
    // Store a single degree marker on the map
  //
  // IMPORTANT: Only to be used for plotting human connections...not news!
  
  function addFacebookEventCoords(username, display_name, image_path, address, degree)
  {        
    var geocoder = new GClientGeocoder();
    //var user_point;
    geocoder.getLatLng(address,
      function(point) 
      {
        if(point) {
          switch(degree)
          {
            // degree = 0 -> all users
            case 0: break;
            case 1: markerOptions = { icon:marker1st }; break;
            case 2: markerOptions = { icon:marker2nd }; break;
            case 3: markerOptions = { icon:marker3rd }; break;
            case 4: markerOptions = { icon:marker4th }; break;
            case 5: markerOptions = { icon:marker5th }; break;
            case 6: markerOptions = { icon:marker6th }; break;
          }
          var lat = point.y;        
          var lng = point.x;
          var event_marker = new GMarker(new GLatLng(lat,lng), markerOptions);
          //User Profile link
          var userLink = glacirURL + username;
          //Build the Pushpin popup html
          var marker_html = "<div class=\'user_info\'>" +
                 "<a href=\'" + userLink + "\'><img src=\'" + image_path + "\' /></a><br />" +
                 "<a class=\'name\' href=\"" + userLink + "\">" + display_name + "</a> " +  
                 degree +"&deg;</div>";
      
          map.addOverlay(event_marker);
          event_marker.bindInfoWindowHtml(marker_html);
        }
      }
    );
    
  }
  
  
  // Loads the map with markers corresponding to particular events,
  // either connections or news.
  //
  // IMPORTANT: The map must be initialized before calling this function.
  
  function loadEventsInMap(event_type, degree)
  {
    // Display the "Loading..." image
    $("div#glacir_user_map").css("z-index", "-1");
    
    // Clear all the existing pushpins
		if (markerMgr != null) { markerMgr.clearMarkers(); }
    
    // Display user connections on the map
    if( (event_type == "connection") || (event_type == "all") )
    {
      // Determine which degree to display
      switch(degree)
      {
        // degree = 0 -> all users
        case 0: break;
        case 1: markerOptions = { icon:marker1st }; break;
        case 2: markerOptions = { icon:marker2nd }; break;
        case 3: markerOptions = { icon:marker3rd }; break;
        case 4: markerOptions = { icon:marker4th }; break;
        case 5: markerOptions = { icon:marker5th }; break;
        case 6: markerOptions = { icon:marker6th }; break;
      }
      
      // JSON Object Model
      //
      // {
      //   "pushpin": [
      //     {
      //       "m_ID": 0,
      //       "m_Username": "username",
      //       "m_DisplayName": "display name",
      //       "m_Latitude": 0,
      //       "m_Longitude": 0
      //     }
      //   ]
      // }
      //
      //  Data is accessed by the following way:
      //
      //  var id          = json.pushpin[i].m_ID
      //  var username    = json.pushpin[i].m_Username
      //  var displayname = json.pushpin[i].m_DisplayName
      //  var lat         = json.pushpin[i].m_Latitude
      
      //  var long        = json.pushpin[i].m_Longitude
      
      
    } // end user connections...
    
    // Display news connctions on the map
    if( (event_type == "news") || (event_type == "all") )
    {
      /* **** NOT IMPLEMENTED CURRENTLY! **** */
    }
    
    // Remove the "Loading..." image
    $("div#glacir_user_map").css("z-index", "1");
  }
    
    
	function loadDegreeInMap(id, degree)
	{
    // Display the "Loading..." image
    $("div#glacir_user_map").css("z-index", "-1");
    
    var countTitle = "";
    var degreeCountTotal = 0;
  
		// Clear all the existing pushpins
		if (markerMgr != null) 
		{
			markerMgr.clearMarkers();
        }
						
		// Create an array to store all the markers
		var markers = [];

		// Check to make sure we are getting a valid degree
		if( (degree >= 0) && (degree <7) )
		{
      switch(degree)
      {
        case 0:
          markerOptions = { icon:marker1st };          
          setActiveDegreeControl(degree);
          break;
        case 1:
          markerOptions = { icon:marker1st };          
          setActiveDegreeControl(degree);
          break;
        case 2:
          markerOptions = { icon:marker2nd };
          setActiveDegreeControl(degree);
          break;
        case 3:
          markerOptions = { icon:marker3rd };
          setActiveDegreeControl(degree);
          break;
        case 4:
          markerOptions = { icon:marker4th };
          setActiveDegreeControl(degree);
          break;
        case 5:
          markerOptions = { icon:marker5th };
          setActiveDegreeControl(degree);
          break;
        case 6:
          markerOptions = { icon:marker6th };
          setActiveDegreeControl(degree);
          break;
      }
      
			$.ajaxSetup({"async": false});

			//Get the JSON data for this degree
			$.getJSON("../php/event_handlers/GlacirGetUserDegrees.php", 
			{ user: id, degree_num: degree }, 
			function(json)
			{							
        if(degree != 0)
        {
          degreeCountTotal = json.pushpin.length
          for(var i = 0; i<degreeCountTotal; i++)
          {
            if( (json.pushpin[i].m_ID != -1) && ( (json.pushpin[i].m_Latitude != 0.0) && (json.pushpin[i].m_Longitude != 0.0) ) )
            {          
              //Create a new GMarker
              var marker = new GMarker(new GLatLng(json.pushpin[i].m_Latitude , json.pushpin[i].m_Longitude), markerOptions);
              
              //First character of user name is the folder the image is stored in
              var image = glacirPicUrl + json.pushpin[i].m_Username.charAt(0).toLowerCase() + "/" + json.pushpin[i].m_Username.toLowerCase() + "_thumb" + pictureFormat;
      
              //User Profile link
              var userLink = glacirURL + json.pushpin[i].m_Username;
              
              //Build the Pushpin popup html
              var html = "<div class=\'user_info\'>" +
                     "<a href=\'" + userLink + "\'><img src=\'" + image + "\' /></a><br />" +
                     "<a class=\'name\' href=\"" + userLink + "\">" + json.pushpin[i].m_DisplayName + "</a> " +  
                     degree +"&deg;</div>";
      
              //Bind the pushpin data to the marker
              marker.bindInfoWindowHtml(html);
      
              //create a new push pin and add it to the markers array
              markers.push(marker);
            }
          }
        }
          else
          {
            alert("tada!");
          }

        // REMOVED - ZWD 11 Dec 2009
        //
        // display the count for that degree
        //$("div#map_info_container").html(degreeCountTotal + countTitle);
        
			});
      
      
			
			//Adds the markers to the map
			markerMgr = new MarkerClusterer(map, markers, mcOptions);
			
			$.ajaxSetup({"async": true});
			
		}
		else
		{
		  alert("Error in loadDegreestoMap(): Invalid degree parameter!");
		}
    
    // Remove the "Loading..." image
    $("div#glacir_user_map").css("z-index", "1");
	}
  
  //
  // Add a draggable marker to the map
  //
  
  function addDraggableMarker(lat, long)
  {
    //clear all the existing pushpins
    if (markerMgr != null) 
    {
      markerMgr.clearMarkers();
    }
    
    //Set the marker to be draggable
		var markerOps = {draggable: true, icon:marker1st };
    
    //Create a new GMarker
		youMarker = new GMarker(new GLatLng(lat, long), markerOps);
    
    // get closer to the marker if it has been set
    if( (lat != 0) && (long != 0) )
    {
       panAndZoom(new GLatLng(lat, long))
    }
    
    GEvent.addListener(youMarker, "dragstart", function() {
      map.closeInfoWindow();
    });
    
    GEvent.addListener(youMarker, "dragend", function() {
      panAndZoom(this.getLatLng());
      youMarker.openInfoWindowHtml("<h2>Finished?</h2><p>Click <a id=\"save_marker\">SAVE</a> when you are finished!</p>");
      $("a#save_marker").click( function(e) {
        e.preventDefault();
        saveLocation();
      });
    });

    map.addOverlay(youMarker);
    youMarker.openInfoWindowHtml("<h2>Your Current Location</h2><p>Place a marker on the" +
    " map <br />in the general area you currently reside!</p>");
  }
  
  // 
  // Pan and zoom to a new location
  //
  
  function panAndZoom(point)
  {
    if(map.getZoom() <= 10) 
    {
      var nextZoom = map.getZoom() + 3;
    }
    else
    {
      var nextZoom = map.getZoom();
    }
    
    map.setCenter(point, nextZoom);
    map.panTo(point);
  }
  
  // 
  // Save marker position for authenticated user
  //
  
  function saveLocation()
  {
    //map.closeInfoWindow();
    //loadPopup("Saving...", "", 300, 200);
    
    youMarker.openInfoWindowHtml("<h2>Saving...</h2>");
    
    $.ajax({
      type: "POST",
      url: "../php/event_handlers/GlacirSetUserCoords.php",
      data: "lat=" + youMarker.getLatLng().lat() +
            "&long=" + youMarker.getLatLng().lng(),
      success: function (data) {
        if(data = "true")
        {
          youMarker.openInfoWindowHtml("<h2>Location Saved.</h2><p>Next, <a href=\"connect\">connect!</a></p>");
        }
        else
        {
          //loadPopup("Update Location!", data, 300, 200);
        }
      },
      error: function (data) {
        alert(data);
      }
    });  
  }  
  
  // 
  //  The following functions use the $.getJSON jQuery command:
  //    http://docs.jquery.com/Ajax/jQuery.getJSON
  //
  
  // JSON Object Model
  //
  // {
  //   "pushpin": [
  //     {
  //       "m_ID": 0,
  //       "m_Username": "username",
  //       "m_DisplayName": "display name",
  //       "m_Latitude": 0,
  //       "m_Longitude": 0
  //     }
  //   ]
  // }
  //
  //  Data is accessed by the following way:
  //
  //  var id          = json.pushpin[i].m_ID
  //  var username    = json.pushpin[i].m_Username
  //  var displayname = json.pushpin[i].m_DisplayName
  //  var lat         = json.pushpin[i].m_Latitude
  //  var long        = json.pushpin[i].m_Longitude
  //
    
	function loadAllUsersInMap()
	{
    // Display the "Loading..." image
    $("div#glacir_user_map").css("z-index", "-1");
    map.checkResize();
    map.setCenter(new GLatLng(20, 0), 1);
  
		// Clear all the existing pushpins
		if (markerMgr != null) 
		{
			markerMgr.clearMarkers();
    }
						
		// Create an array to store all the markers
		var markers = [];
    
    markerOptions = { icon:marker3rd };

  	$.ajaxSetup({"async": false});

			//Get the JSON data for this degree
			$.getJSON("../php/event_handlers/GlacirGetAllGlacirUserLiteForMap.php", 
			{ }, 
			function(json)
			{							
				for(var i = 0; i<json.pushpin.length; i++)
				{
          if( (json.pushpin[i].m_ID != -1) && ( (json.pushpin[i].m_Latitude != 0.0) && (json.pushpin[i].m_Longitude != 0.0) ) )
          { 
            //Create a new GMarker
            var marker = new GMarker(new GLatLng(json.pushpin[i].m_Latitude , json.pushpin[i].m_Longitude), markerOptions);
            
            //First character of user name is the folder the image is stored in
            var image = glacirPicUrl + json.pushpin[i].m_Username.charAt(0).toLowerCase() + "/" + json.pushpin[i].m_Username.toLowerCase() + "_thumb" + pictureFormat;
    
            //User Profile link
            var userLink = glacirURL + json.pushpin[i].m_Username;
            
            //Build the Pushpin popup html
            var html = "<div class=\'user_info\'>" +
                   "<a href=\'" + userLink + "\'><img src=\'" + image + "\' /></a><br />" +
                   "<a class=\'name\' href=\"" + userLink + "\">" + json.pushpin[i].m_DisplayName + "</a> " +  
                   "</div>";
    
            //Bind the pushpin data to the marker
            marker.bindInfoWindowHtml(html);
    
            //create a new push pin and add it to the markers array
            markers.push(marker);					
          }
				}
			});
			
			//Adds the markers to the map
			markerMgr = new MarkerClusterer(map, markers, mcOptions);
			
			$.ajaxSetup({"async": true});
    
    // Remove the "Loading..." image
    $("div#glacir_user_map").css("z-index", "1");
	}
  
  
  function setActiveDegreeControl(degree)
  {
    // set all links back to normal
    $("li#map_all_deg").css("background-position", "0 0");
    $("li#map_first_deg").css("background-position", "-38px 0");
    $("li#map_second_deg").css("background-position", "-73px 0");
    $("li#map_third_deg").css("background-position", "-108px 0");
    $("li#map_fourth_deg").css("background-position", "-143px 0");
    $("li#map_fifth_deg").css("background-position", "-178px 0");
    $("li#map_sixth_deg").css("background-position", "-212px 0");
    
    // reset all hover effects
    if(degree != 0)
    {
      $("li#map_all_deg").hover( 
        function() { $(this).css("background-position", "0 -12px"); }, 
        function() { $(this).css("background-position", "0 0"); } 
      );
    }
    
    if(degree != 1)
    {
      $("li#map_first_deg").hover( 
        function() { $(this).css("background-position", "-38px -12px"); }, 
        function() { $(this).css("background-position", "-38px 0"); } 
      );
    }
    
    if(degree != 2)
    {
      $("li#map_second_deg").hover( 
        function() { $(this).css("background-position", "-73px -12px"); }, 
        function() { $(this).css("background-position", "-73px 0"); } 
      );
    }
    
    if(degree != 3)
    {
      $("li#map_third_deg").hover( 
        function() { $(this).css("background-position", "-108px -12px"); }, 
        function() { $(this).css("background-position", "-108px 0"); } 
      );
    }
    
    if(degree != 4)
    {
      $("li#map_fourth_deg").hover( 
        function() { $(this).css("background-position", "-143px -12px"); }, 
        function() { $(this).css("background-position", "-143px 0"); } 
      );
    }
    
    if(degree != 5)
    {
      $("li#map_fifth_deg").hover( 
        function() { $(this).css("background-position", "-178px -12px"); }, 
        function() { $(this).css("background-position", "-178px 0"); } 
      );
    }
    
    if(degree != 6)
    {
      $("li#map_sixth_deg").hover( 
        function() { $(this).css("background-position", "-212px -12px"); }, 
        function() { $(this).css("background-position", "-212px 0"); } 
      );
    }
    
    $("div#map_controls li").css("height", "12px");
    $("div#map_controls li").css("margin-top", "10px");
         
  
    if(degree == 0)
    {
      $("li#map_all_deg").css("background-position", "0 -24px");
      $("li#map_all_deg").css("height", "31px");
      $("li#map_all_deg").css("margin", "0px");
    }
    else if(degree == 1)
    {    
      $("li#map_first_deg").css("background-position", "-38px -24px");
      $("li#map_first_deg").css("height", "31px");
      $("li#map_first_deg").css("margin", "0px");
    }
    else if (degree == 2)
    {
      $("li#map_second_deg").css("background-position", "-73px -24px");
      $("li#map_second_deg").css("height", "31px");
      $("li#map_second_deg").css("margin", "0px");
    }
    else if (degree == 3)
    {
      $("li#map_third_deg").css("background-position", "-108px -24px");
      $("li#map_third_deg").css("height", "31px");
      $("li#map_third_deg").css("margin", "0px");
    }
    else if (degree == 4)
    {
      $("li#map_fourth_deg").css("background-position", "-143px -24px");
      $("li#map_fourth_deg").css("height", "31px");
      $("li#map_fourth_deg").css("margin", "0px");
    }
    else if (degree == 5)
    {
      $("li#map_fifth_deg").css("background-position", "-178px -24px");
      $("li#map_fifth_deg").css("height", "31px");
      $("li#map_fifth_deg").css("margin", "0px");
    }
    else if (degree == 6)
    {
      $("li#map_sixth_deg").css("background-position", "-212px -24px");
      $("li#map_sixth_deg").css("height", "31px");
      $("li#map_sixth_deg").css("margin", "0px");
    }
   
  }
  
  
  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     7 October 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
  /*****************************************/
  /*** M Y  L I N K S  F U N C T I O N S ***/
  /*****************************************/
  
  var lockMyLinksUpdate = false;
  var help_visible = 0;
  
  var facebook_valid = false;
  var twitter_valid = false;
  var linkedin_valid = false;
  var flickr_valid = false;
  var myspace_valid = false;
  var blogger_valid = false;
  var youtube_valid = false;
  
  
  $(document).ready( function() 
  {
    bindEditLinksEL();
  });

  function getLinksEditForm()
  {
    $(document).ready( function() 
    {
      loadPopup("Loading...", "", -1, -1);
      
      facebook_valid = false;
      twitter_valid = false;
      linkedin_valid = false;
      flickr_valid = false;
      myspace_valid = false;
      blogger_valid = false;
      youtube_valid = false;
      
      $.ajax({
        type: "POST",
        data: "show_help=0",
        url: "../php/event_handlers/GlacirGetMyLinksEditForm.php",
        success: function (data) {
        
          loadPopup("My Links", data, 400, 410);
          bindInputELs();
          
          $("button#update_mylinks_button").click( function()
          {
            if(!lockMyLinksUpdate)
            {
              updateLinks();
            }
          });
          $("a#mylinks_help_link").click( function(e)
          {
		    e.preventDefault();
            toggleHelp();
          });
        },
        error: function(data)
        {
          hidePopup();
          alert(data);
        }
      });
    });
  }
  
  function updateLinks()
  {
    $(document).ready( function() 
    {
      lockMyLinksUpdate = true;
      
      var facebook_obj = $("input#facebook_link");
      var twitter_obj = $("input#twitter_link");
      var linkedin_obj = $("input#linkedin_link");
      var flickr_obj = $("input#flickr_link");
      var myspace_obj = $("input#myspace_link");
      var blogger_obj = $("input#blogger_link");
      var youtube_obj = $("input#youtube_link");
      
      var facebook_my_link = facebook_obj.val();
      var twitter_my_link = twitter_obj.val();
      var linkedin_my_link = linkedin_obj.val();
      var flickr_my_link = flickr_obj.val()
      var myspace_my_link = myspace_obj.val();
      var blogger_my_link = blogger_obj.val();
      var youtube_my_link = youtube_obj.val();
            
      if(facebook_my_link == "Facebook") { facebook_my_link = ""; facebook_valid = true; }
      else { facebook_valid = checkLinksInput(facebook_obj, "facebook.com"); }
      if(twitter_my_link == "Twitter") { twitter_my_link = ""; twitter_valid = true; }
      else { twitter_valid = checkLinksInput(twitter_obj, "twitter.com"); }
      if(linkedin_my_link == "LinkedIn") { linkedin_my_link = ""; linkedin_valid = true; }
      else { linkedin_valid = checkLinksInput(linkedin_obj, "linkedin.com"); }
      if(flickr_my_link == "Flickr") { flickr_my_link = ""; flickr_valid = true; }
      else { flickr_valid = checkLinksInput(flickr_obj, "flickr.com"); }
      if(myspace_my_link == "MySpace") { myspace_my_link = ""; myspace_valid = true;}
      else { myspace_valid = checkLinksInput(myspace_obj, "myspace.com"); }
      if(blogger_my_link == "Blogger") { blogger_my_link = ""; blogger_valid = true; }
      else { blogger_valid = checkLinksInput(blogger_obj, "blogger.com"); }
      if(youtube_my_link == "YouTube") { youtube_my_link = ""; youtube_valid = true; }
      else { youtube_valid = checkLinksInput(youtube_obj, "youtube.com"); }
      
      var magic = $("#magic").val();
      
      if(facebook_valid && twitter_valid && linkedin_valid &&
         flickr_valid && myspace_valid && blogger_valid &&
         youtube_valid)
      {      
        $.ajax({
          type: "POST",
          data: "facebook_my_link=" + facebook_my_link +
                "&twitter_my_link=" + twitter_my_link +
                "&linkedin_my_link=" + linkedin_my_link +
                "&flickr_my_link=" + flickr_my_link +
                "&myspace_my_link=" + myspace_my_link +
                "&blogger_my_link=" + blogger_my_link +
                "&youtube_my_link=" + youtube_my_link +
                "&magic=" + magic,
          url: "../php/event_handlers/GlacirUpdateMyLinks.php",
          success: function (data) {
            //alert(data);
            hidePopup();
            refreshLinks();
          },
          error: function(data)
          {
            alert(data);
          }
        });
      }
      lockMyLinksUpdate = false;
      
    });
  }
  
  function refreshLinks()
  {
      $.ajax({
        type: "POST",
        data: "",
        url: "../php/event_handlers/GlacirGetMyLinks.php",
        success: function (data) {          
          var temp = data.substring(19);
          var ret = temp.substring(0, temp.lastIndexOf("</div>"));
          $("div#my_links").html(ret);
          bindEditLinksEL();
        },
        error: function(data)
        {
          alert(data);
        }
      }); 
  }
  
  function toggleHelp()
  {
    var links_height = 0;
	
    if(help_visible == 0) { help_visible = 1; }
    else if(help_visible == 1) { help_visible = 0; }
	
	$("a#mylinks_help_link").html("Loading...");
    
    $.ajax({
        type: "POST",
        data: "show_help=" + help_visible,
        url: "../php/event_handlers/GlacirGetMyLinksEditForm.php",
        success: function (data) {
		
		  if(help_visible == 1) { links_height = 350; }
		  else { links_height = 410; }
        
          loadPopup("My Links", data, 400, links_height);
          bindInputELs();
          
          if(help_visible == 1)
          {
            $("button#update_mylinks_button").hide();
			$("a#mylinks_help_link").html("Back");
          }
          else
          {
            $("button#update_mylinks_button").click( function()
            {
              if(!lockMyLinksUpdate)
              {
                updateLinks();
              }
            });
          }
		  $("a#mylinks_help_link").click( function(e)
          {
		    e.preventDefault();
            toggleHelp();
          });
        },
        error: function(data)
        {
          hidePopup();
          alert(data);
        }
      });
  }
  
  function checkLinksInput(obj, match)
  {
    var badColor = "#eea496";
    var goodColor = "#c4ed82";

    if(obj.val().indexOf(match) >= 0)
    {
      obj.css("background-color", goodColor);
      obj.next().hide();
      return true;
    }
    else
    {
	  // perhaps the field is empty
	  if(obj.val() == "")
	  {
	    obj.css("background-color", "#FFF");
        obj.next().hide();
        return true;
	  }
      obj.css("background-color", badColor);
      obj.next().show();
      return false;
    }
  }
  
  function bindEditLinksEL()
  {
    $("a#my_links_edit_link").click( function(e) 
    {
      e.preventDefault();
      getLinksEditForm(); 
    });
  }
  
  function bindInputELs()
  {
    var facebook = $("input#facebook_link");
    var twitter = $("input#twitter_link");
    var linkedin = $("input#linkedin_link");
    var flickr = $("input#flickr_link");
    var myspace = $("input#myspace_link");
    var blogger = $("input#blogger_link");
    var youtube = $("input#youtube_link");
    
    facebook.bind("focus", function() {
      if(facebook.val().toLowerCase() == "facebook") { facebook.val(""); }        
    });    
    facebook.bind("blur", function() {
      if(facebook.val() == "") { facebook.val("Facebook"); } 
      facebook.css("background-color", "#FFF");
    });
    facebook.keyup(function(){ checkLinksInput(facebook, "facebook.com"); });
    
    twitter.bind("focus", function() {
      if(twitter.val().toLowerCase() == "twitter") { twitter.val(""); }        
    });    
    twitter.bind("blur", function() {
      if(twitter.val() == "") { twitter.val("Twitter"); } 
      twitter.css("background-color", "#FFF");
    });
    twitter.keyup(function(){ checkLinksInput(twitter, "twitter.com"); });
    
    linkedin.bind("focus", function() {
      if(linkedin.val().toLowerCase() == "linkedin") { linkedin.val(""); }        
    });    
    linkedin.bind("blur", function() {
      if(linkedin.val() == "") { linkedin.val("LinkedIn"); } 
      linkedin.css("background-color", "#FFF");
    });
    linkedin.keyup(function(){ checkLinksInput(linkedin, "linkedin.com"); });
    
    flickr.bind("focus", function() {
      if(flickr.val().toLowerCase() == "flickr") { flickr.val(""); }        
    });    
    flickr.bind("blur", function() {
      if(flickr.val() == "") { flickr.val("Flickr"); } 
      flickr.css("background-color", "#FFF");
    });
    flickr.keyup(function(){ checkLinksInput(flickr, "flickr.com"); });
    
    myspace.bind("focus", function() {
      if(myspace.val().toLowerCase() == "myspace") { myspace.val(""); }        
    });    
    myspace.bind("blur", function() {
      if(myspace.val() == "") { myspace.val("MySpace"); } 
      myspace.css("background-color", "#FFF");
    });
    myspace.keyup(function(){ checkLinksInput(myspace, "myspace.com"); });
    
    blogger.bind("focus", function() {
      if(blogger.val().toLowerCase() == "blogger") { blogger.val(""); }        
    });    
    blogger.bind("blur", function() {
      if(blogger.val() == "") { blogger.val("Blogger"); } 
      blogger.css("background-color", "#FFF");
    });
    blogger.keyup(function(){ checkLinksInput(blogger, "blogger.com"); });
    
    youtube.bind("focus", function() {
      if(youtube.val().toLowerCase() == "youtube") { youtube.val(""); }        
    });    
    youtube.bind("blur", function() {
      if(youtube.val() == "") { youtube.val("YouTube"); } 
      youtube.css("background-color", "#FFF");
    });
    youtube.keyup(function(){ checkLinksInput(youtube, "youtube.com"); });
    
  }
  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     29 Sept 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
  /**********************************/
  /*** J O B S  F U N C T I O N S ***/
  /**********************************/

  $(document).ready(function() { 
    $("h3.job_title").each(function() {
      $(this).click(function(){
        $(this).next("div.job_description").toggle();
      });
    });
  });


  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     7 June 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *       UPDATES:     29 Jan 2010 - ZWD: Added ability to disassoc.
   *                      a user's FB uid.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
  /******************************************/
  /*** S E T T I N G S  F U N C T I O N S ***/
  /******************************************/

  $(document).ready(function()
  {        
  
    /* *** DISASSOCIATE EXTERNAL ACCOUNTS *** */
    $("a#disassociate_fb").click( function(e) {
      e.preventDefault();      
      disassociateFacebookAccount();
    });
  
    /* *** ACCOUNT *** */
    
    $("#account_form").submit(function() 
    {
      loadPopup("Saving...", "", 300, 200);
      
      var glacir_id = $("input#glacir_id").val();
      var glacir_display_name = $("input#glacir_display_name").val();
      var glacir_username = $("input#glacir_username").val();
      var glacir_email = $("input#glacir_email").val();
      var glacir_password = $("input#glacir_password").val();
      var first_degree_email = $("select#first_degree_email").val();
      var talkbox_email = $("select#talkbox_email").val();
      var allow_user_send_communication = $("select#allow_user_send_communication").val();        
      var magic = $("input#magic").val();
      
      $.ajax({
        type: "POST",
        url: "../php/event_handlers/GlacirUpdateUserAccount.php",
        data: "glacir_id=" + glacir_id +
              "&glacir_display_name=" + glacir_display_name +
              "&glacir_username=" + glacir_username +
              "&glacir_email=" + ajax_url_escape(glacir_email) +
              "&glacir_password=" + glacir_password +
              "&first_degree_email=" + first_degree_email +
              "&talkbox_email=" + talkbox_email +
              "&allow_user_send_communication=" + allow_user_send_communication +
              "&magic=" + magic
        ,
        success: function (data) {
          if(data.substring(0,4) == "Your")
          {
            $("div#user_nav li#my_glacir a").attr("href", glacir_username);
            $("div#logo a").attr("href", glacir_username);
            $("input#glacir_vanity").val("http://www.glacir.com/" + glacir_username);
            loadPopup("Settings Saved!", "Your account information was successfully updated!", -1, -1);
          }
          else
          {
            loadPopup("Error!", data, -1, -1);
          }
        },
        error: function(data) {
          hidePopup();
          alert(data);
        }
      });
      return false;
    });
    
    /* *** BASIC PRIVACY *** */
	
	$("div#basic_privacy a").hover(function(e) {
	  $(this).next().show()}, function() { $(this).next().hide() });
    
    $("div#basic_privacy a").bind("click", function(e) {
      
      var link_href = $(this).attr("href");
      var magic = $("input#magic").val();
      
      if( (link_href == "#private") ||
          (link_href == "#public") ||
          (link_href == "#high") ||
          (link_href == "#medium") )
      { 
        e.preventDefault(); 
        var level = "";
        
        if(link_href == "#private") { level = "private"; }
        else if(link_href == "#public") { level = "public"; }
        else if(link_href == "#high") { level = "high"; }
        else if(link_href == "#medium") { level = "medium"; }
        
        $.ajax({
          type: "POST",
          url: "../php/event_handlers/GlacirSetUserPrivacyLevel.php",
          data: "level=" + level +
                "&magic=" + magic
          ,
          success: function (data) {
            
            if(data.substring(0,4) == "Your")
            {
              loadPopup("Settings Saved!", "Your privacy information was successfully updated!", -1, -1);
              setPrivacyLevel("");
              setPrivacyLevel(level.toUpperCase());
            }
            else
            {
              loadPopup("Error!", data, -1, -1);
            }
          },
          error: function (data) {
            hidePopup();
            alert(data);
          }
        });
        return false;
      }
    });
    
  });
  
  function setPrivacyLevel(level)
  {
    if(level == "PRIVATE")
    {
      $("div#basic_privacy div#private").css("background-position","0 -83px");
    }
    else if(level == "HIGH")
    {
      $("div#basic_privacy div#high").css("background-position","-288px -83px");
    }
    else if(level == "MEDIUM")
    {
      $("div#basic_privacy div#medium").css("background-position","-416px -83px");
    }
    else if(level == "PUBLIC")
    {
      $("div#basic_privacy div#public").css("background-position","-569px -83px");
    }
    else
    {
      $("div#basic_privacy div#private").css("background-position","0 0");
      $("div#basic_privacy div#high").css("background-position","-288px 0");
      $("div#basic_privacy div#medium").css("background-position","-416px 0");
      $("div#basic_privacy div#public").css("background-position","-569px 0");
      $("div#basic_privacy span#is_custom_level").show();
    }
  }
   
  $(document).ready(function ()
  {
  
    /* *** ADVANCED PRIVACY *** */
    
    $("#advanced_privacy_form").submit(function() 
    {
      loadPopup("Saving...", "", 300, 200);
      
      var glacir_id = $("input#glacir_id").val();
      var profile_scope = $("select#profile_scope").val();
      var glacir_searchable = $("select#glacir_searchable").val();
      var glacir_users_view_name = $("select#glacir_users_view_name").val();
      var glacir_users_view_info = $("select#glacir_users_view_info").val();
      var glacir_users_view_contact = $("select#glacir_users_view_contact").val();
      var glacir_users_use_talkbox = $("select#glacir_users_use_talkbox").val();
      var glacir_birth_year = $("select#glacir_birth_year").val();
      var magic = $("input#magic").val();
      
      $.ajax({
        type: "POST",
        url: "../php/event_handlers/GlacirUpdateUserPrivacy.php",
        data: "glacir_id=" + glacir_id +
              "&profile_scope=" + profile_scope +
              "&glacir_searchable=" + glacir_searchable +
              "&glacir_users_view_name=" + glacir_users_view_name +
              "&glacir_users_view_info=" + glacir_users_view_info +
              "&glacir_users_view_contact=" + glacir_users_view_contact +
              "&glacir_birth_year=" + glacir_birth_year +
              "&glacir_users_use_talkbox=" + glacir_users_use_talkbox +
              "&magic=" + magic
        ,
        success: function (data) {
          if(data.substring(0,4) == "Your")
          {
            loadPopup("Settings Saved!", "Your privacy information was successfully updated!", -1, -1);
          }
          else
          {
            loadPopup("Error!", data, -1, -1);
          }
        },
        error: function (data) {
          hidePopup();
          alert(data);
        }
      });
      return false;
    });
    
    $("#account_form input").bind("focus", function()
    {
      //$(this).prev().children("span.small").css("visibility", "visible");
      $(this).prev().children("span.small").css("display", "block");
    });

    $("#account_form input").bind("blur", function()
    {
      //$(this).prev().children("span.small").css("visibility", "hidden");
      $(this).prev().children("span.small").css("display", "none");
    });

    $("#controls select").bind("focus", function()
    {
      //$(this).prev().children("span.small").css("visibility", "visible");
      $(this).prev().children("span.small").css("display", "block");
    });

    $("#controls select").bind("blur", function()
    {
      //$(this).prev().children("span.small").css("visibility", "hidden");
      $(this).prev().children("span.small").css("display", "none");
    });
    
    $("a#block_user").bind("click", function(e)
    {
      e.preventDefault();
      
      var magic = $("input#magic").val();

      var form = "<input id=\"entered_user\" type=\"text\" value=\"Enter a name...\"/>" + 
        "<dl id=\"user_list\"></dl>";
      
      loadPopup("Block a User", form, 300, 400);
      
      $("input#entered_user").bind("keyup", function() {
        
        var input = $("input#entered_user").val();
        var username = $("input#glacir_username").val();
        var magic = $("input#magic").val();
        
        $.ajax({
          type: "POST",
          url: "../php/event_handlers/GlacirGetUsers.php",
          data: "input_string=" + input +
                "&searching_user=" + username +
                "&offset=0" +
                "&number_of_records=10",                  
          success: function (data) {
            $("dl#user_list").html(data);
            
            $("#user_list dt").click( function() 
              {                  
                var block_id = $(this).find("em").html();
                var block_user = $(this).find("span").html();
                
                loadPopup("Blocking...", "", 300, 200);
                
                $.ajax({
                  type: "POST",
                  url: "../php/event_handlers/GlacirBlockUser.php",
                  data: "user_id_to_block=" + block_id +
                        "&magic=" + magic
                  ,
                  success: function (data) {
                    if(data == "TRUE")
                    {
                      loadPopup("Block User", block_user + " has been blocked.", 300, 200);
                      getBlockedUsers();
                    }
                    else
                    {
                      loadPopup("Error", 
                        "There was a problem in trying to complete your " +
                        "request. " + data, 300, 200);
                    }
                  },
                  error: function(data)
                  {
                    hidePopup();
                    alert(data);
                  }
                });
             });
          },
          error: function (data) {
            $("dl#user_list").html(data);
          }
        });
      });
    });
    
    $("dl.input_container dt.blocked a").click( function(e) 
    {
      e.preventDefault();
      
      var unblock_id = $(this).attr("name");
      var unblock_user = $(this).parent().find("span").html();
      var magic = $("input#magic").val();
      
      loadPopup("Unblocking...", "", 300, 200);
      
      $.ajax({
        type: "POST",
        url: "../php/event_handlers/GlacirUnBlockUser.php",
        data: "user_id_to_block=" + unblock_id +
              "&magic=" + magic
        ,
        success: function (data) {
          if(data == "TRUE")
          {
            loadPopup("Unblock User", unblock_user + " has been unblocked!", 300, 200);
            getBlockedUsers();
          }
          else
          {
            loadPopup("Error", 
              "There was a problem in trying to complete your " +
              "request. " + data, 300, 200);
          }
        },
        error: function(data)
        {
          hidePopup();
          alert(data);
        }
      });
      return false;
    }); // end unblock user
          
  });
  
  function getBlockedUsers()
  {
    $(document).ready( function () {
    
      $.ajax({
        type: "GET",
        url: "../php/event_handlers/GlacirGetBlockedUsersHTML.php",
        data: "",
        success: function (data) {
          $("dl.input_container").html(data);
          
          $("dl.input_container dt.blocked a").click( function(e) 
          {
            e.preventDefault();
            
            var unblock_id = $(this).attr("name");
            var unblock_user = $(this).parent().find("span").html();
            var magic = $("input#magic").val();
            
            loadPopup("Unblocking...", "", 300, 200);
            
            $.ajax({
              type: "POST",
              url: "../php/event_handlers/GlacirUnBlockUser.php",
              data: "user_id_to_block=" + unblock_id +
                    "&magic=" + magic
              ,
              success: function (data) {
                if(data == "TRUE")
                {
                  loadPopup("Unblock User", unblock_user + " has been unblocked!", 300, 200);
                  getBlockedUsers();
                }
                else
                {
                  loadPopup("Error", 
                    "There was a problem in trying to complete your " +
                    "request. " + data, 300, 200);
                }
              },
              error: function(data)
              {
                hidePopup();
                alert(data);
              }
            });
            return false;
          }); // end unblock user
          
          $("a#block_user").bind("click", function(e)
          {
            e.preventDefault();
            
            var magic = $("input#magic").val();

            var form = "<input id=\"entered_user\" type=\"text\" value=\"Enter a name...\"/>" + 
              "<dl id=\"user_list\"></dl>";
            
            loadPopup("Block a User", form, 300, 400);
            
            $("input#entered_user").bind("keyup", function() {
              
              var input = $("input#entered_user").val();
              var username = $("input#glacir_username").val();
              var magic = $("input#magic").val();
              
              $.ajax({
                type: "POST",
                url: "../php/event_handlers/GlacirGetUsers.php",
                data: "input_string=" + input +
                      "&searching_user=" + username +
                      "&offset=0" +
                      "&number_of_records=10",                  
                success: function (data) {
                  $("dl#user_list").html(data);
                  
                  $("#user_list dt").click( function() 
                    {                  
                      var block_id = $(this).find("em").html();
                      var block_user = $(this).find("span").html();
                      
                      loadPopup("Blocking...", "", 300, 200);
                      
                      $.ajax({
                        type: "POST",
                        url: "../php/event_handlers/GlacirBlockUser.php",
                        data: "user_id_to_block=" + block_id +
                              "&magic=" + magic
                        ,
                        success: function (data) {
                          if(data == "TRUE")
                          {
                            loadPopup("Block User", block_user + " has been blocked.", 300, 200);
                            getBlockedUsers();
                          }
                          else
                          {
                            loadPopup("Error", 
                              "There was a problem in trying to complete your " +
                              "request. " + data, 300, 200);
                          }
                        },
                        error: function(data)
                        {
                          hidePopup();
                          alert(data);
                        }
                      });
                   });
                },
                error: function (data) {
                  $("dl#user_list").html(data);
                }
              });
            });
          });
        },
        error: function(data)
        {
          alert(data);
        }
      });
      return false;
    
    });
  }
  
  function disassociateFacebookAccount()
  {
    var magic_val = $("input#magic").val();
    
    $.ajax({
        type: "POST",
        url: "../php/event_handlers/GlacirUpdateFacebookSession.php",
        data: "action=unset",
        success: function (data) {
          $.ajax({
            type: "POST",
            url: "../php/event_handlers/GlacirDisassociateGlacirUserLiteWithFacebook.php",
            data: "magic=" + magic_val
            ,
            success: function (data) {
              if(data == "TRUE")
              {
                updateFacebookVars();
                loadPopup("Facebook has been unlinked.", "Your Facebook and Glacir account have been unlinked.", -1, -1);
                $("a#disassociate_fb").unbind("click");
                $("a#disassociate_fb").attr("href", "connect");
                $("a#disassociate_fb").html("Link");
              }
              else
              {
                loadPopup("An error has occurred.", data, -1, -1);
              }
            },
            error: function(data)
            {
              return false;
            }
          });
        }, // end of fb session ajax func
        error: function(data)
        {
          alert("Could not unset FB session information.");
        }
      });
  }

  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     29 Sept 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
  /***********************************************/
  /*** H E L P  C E N T E R  F U N C T I O N S ***/
  /***********************************************/

  $(document).ready(function() { 
    $("div#faqs dt").each(function() {
      $(this).click(function(){
        $(this).next("dd").toggle();
      });
    });
  });


  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     7 June 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
  /******************************************************/
  /*** H E L P  U S  I M P R O V E  F U N C T I O N S ***/
  /******************************************************/
  
  $(document).ready(function()
  {
    $("#improve_glacir_form").submit(function() 
      {
        loadPopup("Sending feedback...", "", 300, 200);
        
        var type = $("input#type").val();
        var browser = $("input#browser").val();
        var os = $("input#os").val();
        var javascript = $("input#javascript").val();
        var cookies = $("input#cookies").val();
        var referring = $("input#referring").val();
        var ip = $("input#ip").val();
        var email = $("input#email").val();
        var feedback = $("textarea#feedback").val();
        
        $.ajax({
          type: "POST",
          url: "../php/event_handlers/GlacirCreateFeedback.php",
          data: "type=" + ajax_url_escape(type) +
                "&browser=" + ajax_url_escape(browser) +
                "&os=" + ajax_url_escape(os) +
                "&javascript=" + ajax_url_escape(javascript) +
                "&cookies=" + ajax_url_escape(cookies) +
                "&ip=" + ajax_url_escape(ip) +
                "&email=" + ajax_url_escape(email) +
                "&feedback=" + ajax_url_escape(feedback) +
                "&referring=" + ajax_url_escape(referring)
          ,
          success: function (data) {
            $("input#email").attr("value","");
            $("textarea#feedback").attr("value","");
            
            loadPopup("Sent!", "Thank you for your assistance.", 300, 200);
          }
        });
        return false;
        
      });
    }); // end of ready()

  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     7 June 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
  
   /*********************************************/
  /*** R E P O R T  B U G  F U N C T I O N S ***/
  /*********************************************/
  
  $(document).ready(function()
  {
    $("#report_bug_form").submit(function() 
      {
        loadPopup("Sending...", "", 300, 200);
        
        var type = $("input#type").val();
        var browser = $("input#browser").val();
        var os = $("input#os").val();
        var javascript = $("input#javascript").val();
        var cookies = $("input#cookies").val();
        var referring = $("input#referring").val();
        var ip = $("input#ip").val();
        var email = $("input#email").val();
        var feedback = $("textarea#feedback").val();
        
        $.ajax({
          type: "POST",
          url: "../php/event_handlers/GlacirCreateFeedback.php",
          data: "type=" + ajax_url_escape(type) +
                "&browser=" + ajax_url_escape(browser) +
                "&os=" + ajax_url_escape(os) +
                "&javascript=" + ajax_url_escape(javascript) +
                "&cookies=" + ajax_url_escape(cookies) +
                "&ip=" + ajax_url_escape(ip) +
                "&email=" + ajax_url_escape(email) +
                "&feedback=" + ajax_url_escape(feedback) +
                "&referring=" + ajax_url_escape(referring)
          ,
          success: function (data) 
          {
            loadPopup("Issue Reported!", data, -1, -1);
            
            $("input#email").attr("value","");
            $("textarea#feedback").attr("value","");
          },
          error: function (data)
          {
            hidePopup();
            alert(data);
          }
        });
        return false;
        
      });
    }); // end of ready()
      

  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     20 Sept 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
  
  /************************************************/
  /*** R E P O R T  A B U S E  F U N C T I O N S ***/
  /*************************************************/
  
  $(document).ready(function()
  {
    $("#report_abuse_form").submit(function() 
      {
        loadPopup("Sending...", "", 300, 200);
        
        var type = $("input#type").val();
        var browser = $("input#browser").val();
        var os = $("input#os").val();
        var javascript = $("input#javascript").val();
        var cookies = $("input#cookies").val();
        var referring = $("input#referring").val();
        var ip = $("input#ip").val();
        var email = $("input#email").val();
        var feedback = $("textarea#feedback").val();
        
        $.ajax({
          type: "POST",
          url: "../php/event_handlers/GlacirCreateFeedback.php",
          data: "type=" + ajax_url_escape(type) +
                "&browser=" + ajax_url_escape(browser) +
                "&os=" + ajax_url_escape(os) +
                "&javascript=" + ajax_url_escape(javascript) +
                "&cookies=" + ajax_url_escape(cookies) +
                "&ip=" + ajax_url_escape(ip) +
                "&email=" + ajax_url_escape(email) +
                "&feedback=" + ajax_url_escape(feedback) +
                "&referring=" + ajax_url_escape(referring)
          ,
          success: function (data) 
          {
            loadPopup("Issue Reported!", data, -1, -1);
            
            $("input#email").attr("value","");
            $("textarea#feedback").attr("value","");
          },
          error: function (data)
          {
            hidePopup();
            alert(data);
          }
        });
        return false;
        
      });
    }); // end of ready()
      

  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     20 Sept 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
  
  /*********************************************/
  /*** C O N T A C T  U S  F U N C T I O N S ***/
  /*********************************************/


  $(document).ready(function()
  {
    $("#contact_us_form").submit(function() 
      {
        loadPopup("Sending...", "", 300, 200);

        var email = $("input#email").val();
        var feedback = $("textarea#feedback").val();
        
        $.ajax({
          type: "POST",
          url: "../php/event_handlers/GlacirSendContactForm.php",
          data: "email=" + ajax_url_escape(email) +
                "&feedback=" + ajax_url_escape(feedback)
          ,
          success: function (data) 
          {
            if(data.substring(0,4) == "TRUE")
            {
              loadPopup("Message Sent.", "We will get back with you in a few hours.", -1, -1);
            
              //$("input#email").attr("value","");
              $("textarea#feedback").attr("value","");
            }
            else
            {
              loadPopup("Message was not sent.", data, -1, -1);
            }
          },
          error: function (data)
          {
            hidePopup();
            alert(data);
          }
        });
        return false;
        
    });
  }); // end of ready()
      
  /* ================================================================
   *
   *                       G L A C I R . C O M
   *
   * ================================================================
   *
   *        AUTHOR:     Zak Dziczkowski
   *       CREATED:     24 September 2009
   *   DESCRIPTION:     This file is a PHP script which is rendered
   *                      as a javascript file. It is included 
   *                      main.php.
   *                      
   *
   *
   * ------------ CONFIDENTIAL AND PROPRIETARY MATERIAL! ------------
   *
   *    This file and its contents are confidential and proprietary
   *    to Glacir, Inc. Use, dissemination, and/or distribution
   *    of this file and/or its information by unauthorized persons
   *    is illegal. Please contact support@glacir.com with any
   *    questions regarding the use or possession of this file.
   *
   * ==============================================================*/
   
  /*****************************************/
  /*** T A L K B O X   F U N C T I O N S ***/
  /*****************************************/

  var message_to_id = -1;
  var g_profile_id;
  var g_message_page = 0;
  var max_height = 0;
  var g_total_messages = 0;

  $(document).ready(function () {
  
    $("a#talkbox_auth").click( function (e) {
      //alert($(this).attr("name"));
      e.preventDefault();
      startTalkBox(1, $(this).attr("name"));
      clearAlerts();
      updateAlertStats(true);
      return false;
    });
    
    $("a#talkbox_other").click( function (e) {
      //alert($(this).attr("name"));
      e.preventDefault();
      message_to_id = $(this).attr("name");
      startTalkBox(0, $(this).attr("name"));
      return false;
    });      
        
  });
  
  
  function startTalkBox(is_auth, profile_id)
  {
    g_profile_id = profile_id;
    
    $(document).ready(function () {
    
      //loadPopup("Loading...", "", -1, -1);
     
      updateTotalMessageCount();
      openTalkBoxWindow(is_auth, 450, 500);
      g_message_page = 0;
      getRecentMessages(profile_id, 0);      
      
    });
  } 
  
  
  function getRecentMessages(id, start)
  {
    $(document).ready(function() {
    
      updateTotalMessageCount();
      
      $.ajax({
        type: "POST",
        data: "id=" + id +
              "&start=" + start,
        url: "../php/event_handlers/GlacirGetRecentMessages.php",
        success: function (data) {
          $("div#recent_messages").hide();
          $("div#recent_messages").html(data);
          $("div#recent_messages").fadeIn();
          
          $("a.remove").each( function () {
            $(this).click( function(e) {
              e.preventDefault();
              var a_this = $(this);
              removeMessage(a_this, $(this).attr("name"),
                $(this).attr("id"));
            });
          });
          
          $("a.reply").each( function () {
            $(this).click( function(e) {
              e.preventDefault();
              var a_this = $(this);
              replyToMessage(a_this);
            });
          });
          
          if( (g_message_page == 0) && (g_total_messages > 10) )
          {
            $("a#advance_messages").show();
            $("a#retreat_messages").hide();
          }
          else if( (g_message_page == 0) && (g_total_messages < 10) )
          {
            $("a#advance_messages").hide();
            $("a#retreat_messages").hide();
          }
          else
          {
            /*
            if((g_message_page + 20) < g_total_messages)
            {
              $("a#advance_messages").show();
            }
            else
            {
              $("a#advance_messages").hide();
            }
            if((g_message_page - 10) >= 0)
            {
              $("a#retreat_messages").show();
            }
            else
            {
              $("a#retreat_messages").hide();
            }
            */
          }
          
        },
        error: function(data)
        {
          alert(data);
        }
      });
    
    });
  }
  
  
  function openTalkBoxWindow(is_auth, width, height)
  {
    $(document).ready( function() 
      {        
        //Get the window height and width  
        var winH = $(window).height();  
        var winW = $(window).width();
        
        max_height = height;
        
        //Set the width and height (pixels)
        $("div#talkbox").css("width", width+"px");
        $("div#talkbox").css("left", winW/2-(width/2));
        if(is_auth)
        {
          $("div#talkbox").css("height", (height-90)+"px");
          $("div#talkbox").css("top",  winH/2-((height-90)/2));
        }
        else
        {
          $("div#talkbox").css("height", height+"px");
          $("div#talkbox").css("top",  winH/2-(height/2));
        }
     
        $("div#talkbox").html
        (
          "<div id=\"talkbox_title\"><a id=\"close_link\" href=\"#\"></a></div>" +
          "<h2 id=\"talkbox_filter_name\">Your Talk! Stream</h2>"+
          "<div id=\"autocomplete_users\"></div>" +
          "<textarea id=\"reply\">Start your Talk! conversation here</textarea>" +
          "<button id=\"send_message_button\"></button>" +
          "<p id=\"counter_container\"><span id=\"ta_counter\">256</span> left</p>" +
          "<p id=\"help_container\"><a id=\"help_link\" href=\"#\">Help</a></p>" +
          "<div id=\"recent_messages\">Loading...</div>" +
          "<p id=\"message_controls\"><a href=\"#\" id=\"retreat_messages\">| Prev 10 |</a>  " +
          "<a href=\"#\" id=\"advance_messages\">| Next 10 |</a></p>"
        );
        
        // for logged in user
        if(is_auth)
        {
          $("textarea#reply").hide();
          $("p#counter_container").hide();
          $("div#talkbox button").hide();
        }
        else
        {
          $("h2#talkbox_filter_name").html("To: " + $("input#talk_name").val() + "<span><a id=\"clear_link\" href=\"#\">(Clear)</a></span>");
          $("a#clear_link").click( function (e) {
            e.preventDefault();
            startTalkBox(1, $("a#talkbox_auth").attr("name"));
            clearAlerts();
            updateAlertStats(true);
            return false;
          });
        } 
          
        $("a#retreat_messages").hide();
        $("div#talkbox").show();
                  
        $("a#close_link").bind("click", function (e) {  
          //Cancel the link behavior  
          e.preventDefault();  
          hideTalkbox();  
        });
        
        $(document).keyup(function(event){
          if (event.keyCode == 27) {
            $("div#talkbox").fadeOut();
          }          
        });
        
        if(g_total_messages < 10)
        {
          $("a#advance_messages").hide();
        }
        
        $("a#advance_messages").click( function() {
          advanceMessages();
          return false;
        });
        
        $("a#retreat_messages").click( function() {
          retreatMessages();
          return false;
        });
                  
        $("input#username_input").bind("focus", function() {
          if($("input#username_input").val() == "Type name of 1st degree here")
          {
            $("input#username_input").val("");
          }
        });
        
        $("input#username_input").bind("blur", function() {
          if($.trim($("input#username_input").val()) == "")
          {
            $("input#username_input").val("Type name of 1st degree here");
          }
        });
        
        $("textarea#reply").bind("focus", function() {
          if($.trim($(this).val()) == "Start your Talk! conversation here")
          {
            $(this).val("");
          }
        });
        
        $("textarea#reply").bind("blur", function() {
          if($.trim($(this).val()) == "")
          {
            $(this).val("Start your Talk! conversation here");
            resetCounter("ta_counter");
          }
        });
        
        $("input#username_input").bind("keyup", function() {
          getDegreeUserAutocomplete($(this).val());
          $("div#autocomplete_users").show();
        });
        
        $("input#username_input").bind("blur", function() {
          $("div#autocomplete_users").fadeOut("fast");
        });
        
                  
        $("button#send_message_button").click( function () {
          var mess = $("textarea#reply").val();
          if(mess != "")
          {
            sendMessage(message_to_id, mess);
          }
        });
        
        $("a#help_link").click( function (e) {
          e.preventDefault();
          loadHelp();
          return false;
        });
        
        bindTaCounter("reply", "ta_counter");
      }
    );
  }
  
  /*
  function getDegreeUserAutocomplete(search_string)
  {
    $(document).ready(function() {
         
      var str;
      str = $.trim(search_string);
      
      if(str != "")
      {
        $("div#autocomplete_users").html("Loading...");
        
        $.ajax({
          type: "POST",
          data: "filter_by_user=" + str,
          url: "../php/event_handlers/GlacirGetDegreesAutocomplete.php",
          success: function (data) {
              $("div#autocomplete_users").html(data);
              
              $("div#autocomplete_users dt").each( function () {
                $(this).click( function() {
                  $("div#recent_messages").html("Loading...");
                  g_message_page = 0;
                  g_profile_id = $(this).find("span").html();
                  message_to_id = g_profile_id;
                  getRecentMessages(g_profile_id, g_message_page);
                  $("div#autocomplete_users").fadeOut("fast");
                  $("textarea#reply").show();
                  $("p#counter_container").show();
                  $("div#talkbox button").show();
                  $("input#username_input").val($(this).find("strong").html());
                  
                  // readjust the height of the window
                  $("div#talkbox").css("height", max_height+"px");
                  $("div#talkbox").css("top",  $(window).height()/2-(max_height/2));
                });
              });
          },
          error: function(data)
          {
            alert(data);
          }
        });
      }
      else
      {
        $("div#autocomplete_users").html("Enter a name to filter messages...");
      }
      
    });
  }
  */
  
  function removeMessage(obj, is_sender, message_id)
  {
    //alert(is_sender + " " + message_id);
    obj.css("color", "#990000");
    obj.css("font-weight", "bold");
    obj.html("Removing...");
    
    $.ajax({
      type: "POST",
      data: "is_sender=" + is_sender +
            "&message_id=" + message_id,
      url: "../php/event_handlers/GlacirRemoveTalkBoxMessage.php",
      success: function (data) {
        if(data == "TRUE")
        {
          getRecentMessages(g_profile_id, g_message_page);
        }
        else
        {
          alert("Message could not be removed:" + data);
        }
      },
      error: function(data)
      {
        alert(data);
      }
    });
    
  }
  
  
  function sendMessage(send_id, message)
  {
    $(document).ready(function() {
        
    if( (message != "Start your Talk! conversation here") &&
      (message != "") )
    {
      $("textarea#reply").val("Sending...").css("color", "#336699").css("font-weight", "bold");
      
      $("button#send_message_button").unbind("click");
    
      $.ajax({
        type: "POST",
        data: "id=" + send_id +
              "&message=" + ajax_url_escape(message),
        url: "../php/event_handlers/GlacirSendTalkBoxMessage.php",
        success: function (data) {
          if(data == "TRUE")
          {
            $("textarea#reply").val("");
            $("textarea#reply").css("color", "#333").css("font-weight", "normal");
            resetCounter("ta_counter");
            getRecentMessages(g_profile_id, 0);
            $("button#send_message_button").click( function () {
              var mess = $("textarea#reply").val();
              if(mess != "")
              {
                sendMessage(message_to_id, mess);
              }
            });
          }
          else
          {
            $("textarea#reply").val(message).css("color", "#333").css("font-weight", "normal");
            $("button#send_message_button").click( function () {
              var mess = $("textarea#reply").val();
              if(mess != "")
              {
                sendMessage(message_to_id, mess);
              }
            });
            alert("Message could not be sent:" + data);
          }
        },
        error: function(data)
        {
          alert(data);
        }
      });
      
    }
    
    });
  } 
  
  function loadHelp()
  {
    $(document).ready(function() {
    
      $("p#help_container").html("<a id=\"help_back_link\" href=\"#\">Back</a>");
      $("a#help_back_link").click( function (e) {
        e.preventDefault();
        closeHelp();
        return false;
      });
      getRecentMessages(-1, g_message_page);
    
    });
  }
  
  function closeHelp()
  {
    $(document).ready(function() {
    
      $("p#help_container").html("<a id=\"help_link\" href=\"#\">Help</a>");
      $("a#help_link").click( function (e) {
        e.preventDefault();
        loadHelp();
        return false;
      });
      getRecentMessages(g_profile_id, g_message_page);
    
    });
  }
  
  function replyToMessage(reply_obj)
  {
    $(document).ready(function() {
    
      var id = reply_obj.attr("id"); 
      var display_name = reply_obj.attr("name");
      
      $("div#recent_messages").html("Loading...");
      
      g_message_page = 0;
      g_profile_id = id;
      message_to_id = g_profile_id;
      $("h2#talkbox_filter_name").html("To: " + display_name + "<span><a id=\"clear_link\" href=\"#\">(Clear)</a></span>");
      $("a#clear_link").click( function (e) {
        e.preventDefault();
        startTalkBox(1, $("a#talkbox_auth").attr("name"));
        clearAlerts();
        updateAlertStats(true);
        return false;
      });
      updateTotalMessageCount();
      getRecentMessages(g_profile_id, g_message_page);
      
      // readjust the height of the window
      $("div#talkbox").css("height", max_height+"px");
      $("div#talkbox").css("top",  $(window).height()/2-(max_height/2));

      $("textarea#reply").show();
      $("p#counter_container").show();
      $("div#talkbox button").show();
      
    });
  }
  
  function updateAlertStats(clear_alerts)
  {
    $(document).ready(function() {
    
      $.ajax({
        type: "POST",
        data: "",
        url: "../php/event_handlers/GlacirUpdateAlertStats.php",
        success: function (data) {
          if(data != "FALSE")
          {
            $("div#talkbox_alerts span#total_messages").html(data); // update the total mess count
            if(clear_alerts)
            {
              $("div#talkbox_alerts span#num_alerts").html("0"); // reset the alert count
            }
          }
          else
          {
            alert("The total message count could not be updated.");
          }
        },
        error: function(data)
        {
          alert(data);
        }
      });
    
    });
  }
  
  function clearAlerts()
  {
    $(document).ready(function() {
    
      $.ajax({
        type: "POST",
        data: "",
        url: "../php/event_handlers/GlacirClearTalkBoxAlerts.php",
        success: function (data) {
          if(data == "TRUE")
          {
            //alert(data);
          }
          else
          {
            alert("User alerts could not be cleared: " + data);
          }
        },
        error: function(data)
        {
          alert(data);
        }
      });
    
    });
  }
  
  
  function updateTotalMessageCount()
  {
    $(document).ready(function() {
    
      $.ajax({
        type: "POST",
        data: "profile_id=" + g_profile_id,
        async: false,
        url: "../php/event_handlers/GlacirGetTalkBoxMessageCount.php",
        success: function (data) {
          if(data.substring(0,3) != "Your")
          {
            //alert(data);
            g_total_messages = data;
          }
          else
          {
            alert("Could not get total message count: " + data);
          }
        },
        error: function(data)
        {
          alert(data);
        }
      });
    
    });
  }
  
  
  function advanceMessages()
  {    
    if((g_message_page + 20) < g_total_messages)
    {
      g_message_page += 10;
      $("a#retreat_messages").show(); 
      $("a#advance_messages").show();
    }
    else
    {
      g_message_page += 10;
      $("a#advance_messages").hide();
      $("a#retreat_messages").show(); 
    }
    //alert(g_message_page + " " + g_total_messages);
    $("div#recent_messages").html("Loading...");
    getRecentMessages(g_profile_id, g_message_page);
  }
  
  
  function retreatMessages()
  {
    if((g_message_page - 20) >= 0)
    {
      g_message_page -= 10;
      $("a#retreat_messages").show(); 
      $("a#advance_messages").show();
    }
    else
    {
      g_message_page -= 10;
      $("a#retreat_messages").hide();
    }
    $("div#recent_messages").html("Loading...");
    getRecentMessages(g_profile_id, g_message_page);
  }
      

  function hideTalkbox()
  {
    $("div#talkbox").fadeOut();
  }  
  
  
  function bindTaCounter(ta_id, counter_id)
  {
    $(document).ready( function() {
      var left = 0;
      var max = 256;
      
      $("textarea#" + ta_id).keyup( function() {
        left = max - $(this).val().length;
        if(left < 0)
        { 
          alert("asdf");
          $("textarea#" + ta_id).val().substring(0, max);
          left = 0;
        }
        $("span#" + counter_id).html(left);
      });
    });
  }
    
  function resetCounter(counter_id)
  {
    $(document).ready( function() {
       $("span#" + counter_id).html("256");
    });
  }
  