
var Prototype={Version:'1.4.0',ScriptFragment:'(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',emptyFunction:function(){},K:function(x){return x}};var Class={create:function(){return function(){this.initialize.apply(this,arguments);}}};var Abstract=new Object();Object.extend=function(destination,source){for(property in source){destination[property]=source[property];}
return destination;};Object.inspect=function(object){try{if(object==undefined)return'undefined';if(object==null)return'null';return object.inspect?object.inspect():object.toString();}catch(e){if(e instanceof RangeError)return'...';throw e;}};Function.prototype.bind=function(){var __method=this,args=$A(arguments),object=args.shift();return function(){return __method.apply(object,args.concat($A(arguments)));}};Function.prototype.bindAsEventListener=function(object){var __method=this,args=$A(arguments),object=args.shift();return function(event){return __method.apply(object,[(event||window.event)].concat(args).concat($A(arguments)));}};Object.extend(Number.prototype,{toColorPart:function(){var digits=this.toString(16);if(this<16)return'0'+digits;return digits;},succ:function(){return this+1;},times:function(iterator){$R(0,this,true).each(iterator);return this;}});var Try={these:function(){var returnValue;for(var i=0;i<arguments.length;i++){var lambda=arguments[i];try{returnValue=lambda();break;}catch(e){}}
return returnValue;}};var PeriodicalExecuter=Class.create();PeriodicalExecuter.prototype={initialize:function(callback,frequency){this.callback=callback;this.frequency=frequency;this.currentlyExecuting=false;this.registerCallback();},registerCallback:function(){setInterval(this.onTimerEvent.bind(this),this.frequency*1000);},onTimerEvent:function(){if(!this.currentlyExecuting){try{this.currentlyExecuting=true;this.callback();}finally{this.currentlyExecuting=false;}}}};function $(){var elements=new Array();for(var i=0;i<arguments.length;i++){var element=arguments[i];if(typeof element=='string')
element=document.getElementById(element);if(arguments.length==1)
return element;elements.push(element);}
return elements;};Object.extend(String.prototype,{stripTags:function(){return this.replace(/<\/?[^>]+>/gi,'');},stripScripts:function(){return this.replace(new RegExp(Prototype.ScriptFragment,'img'),'');},extractScripts:function(){var matchAll=new RegExp(Prototype.ScriptFragment,'img');var matchOne=new RegExp(Prototype.ScriptFragment,'im');return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||['',''])[1];});},evalScripts:function(){return this.extractScripts().map(eval);},escapeHTML:function(){var div=document.createElement('div');var text=document.createTextNode(this);div.appendChild(text);return div.innerHTML;},unescapeHTML:function(){var div=document.createElement('div');div.innerHTML=this.stripTags();return div.childNodes[0]?div.childNodes[0].nodeValue:'';},toQueryParams:function(){var pairs=this.match(/^\??(.*)$/)[1].split('&');return pairs.inject({},function(params,pairString){var pair=pairString.split('=');params[pair[0]]=pair[1];return params;});},toArray:function(){return this.split('');},camelize:function(){var oStringList=this.split('-');if(oStringList.length==1)return oStringList[0];var camelizedString=this.indexOf('-')==0?oStringList[0].charAt(0).toUpperCase()+oStringList[0].substring(1):oStringList[0];for(var i=1,len=oStringList.length;i<len;i++){var s=oStringList[i];camelizedString+=s.charAt(0).toUpperCase()+s.substring(1);}
return camelizedString;},inspect:function(){return"'"+this.replace('\\','\\\\').replace("'",'\\\'')+"'";}});String.prototype.parseQuery=String.prototype.toQueryParams;var $break=new Object();var $continue=new Object();var Enumerable={each:function(iterator){var index=0;try{this._each(function(value){try{iterator(value,index++);}catch(e){if(e!=$continue)throw e;}});}catch(e){if(e!=$break)throw e;}},all:function(iterator){var result=true;this.each(function(value,index){result=result&&!!(iterator||Prototype.K)(value,index);if(!result)throw $break;});return result;},any:function(iterator){var result=true;this.each(function(value,index){if(result=!!(iterator||Prototype.K)(value,index))
throw $break;});return result;},collect:function(iterator){var results=[];this.each(function(value,index){results.push(iterator(value,index));});return results;},detect:function(iterator){var result;this.each(function(value,index){if(iterator(value,index)){result=value;throw $break;}});return result;},findAll:function(iterator){var results=[];this.each(function(value,index){if(iterator(value,index))
results.push(value);});return results;},grep:function(pattern,iterator){var results=[];this.each(function(value,index){var stringValue=value.toString();if(stringValue.match(pattern))
results.push((iterator||Prototype.K)(value,index));})
return results;},include:function(object){var found=false;this.each(function(value){if(value==object){found=true;throw $break;}});return found;},inject:function(memo,iterator){this.each(function(value,index){memo=iterator(memo,value,index);});return memo;},invoke:function(method){var args=$A(arguments).slice(1);return this.collect(function(value){return value[method].apply(value,args);});},max:function(iterator){var result;this.each(function(value,index){value=(iterator||Prototype.K)(value,index);if(value>=(result||value))
result=value;});return result;},min:function(iterator){var result;this.each(function(value,index){value=(iterator||Prototype.K)(value,index);if(value<=(result||value))
result=value;});return result;},partition:function(iterator){var trues=[],falses=[];this.each(function(value,index){((iterator||Prototype.K)(value,index)?trues:falses).push(value);});return[trues,falses];},pluck:function(property){var results=[];this.each(function(value,index){results.push(value[property]);});return results;},reject:function(iterator){var results=[];this.each(function(value,index){if(!iterator(value,index))
results.push(value);});return results;},sortBy:function(iterator){return this.collect(function(value,index){return{value:value,criteria:iterator(value,index)};}).sort(function(left,right){var a=left.criteria,b=right.criteria;return a<b?-1:a>b?1:0;}).pluck('value');},toArray:function(){return this.collect(Prototype.K);},zip:function(){var iterator=Prototype.K,args=$A(arguments);if(typeof args.last()=='function')
iterator=args.pop();var collections=[this].concat(args).map($A);return this.map(function(value,index){iterator(value=collections.pluck(index));return value;});},inspect:function(){return'#<Enumerable:'+this.toArray().inspect()+'>';}};Object.extend(Enumerable,{map:Enumerable.collect,find:Enumerable.detect,select:Enumerable.findAll,member:Enumerable.include,entries:Enumerable.toArray});var $A=Array.from=function(iterable){if(!iterable)return[];if(iterable.toArray){return iterable.toArray();}else{var results=[];for(var i=0;i<iterable.length;i++)
results.push(iterable[i]);return results;}};Object.extend(Array.prototype,Enumerable);Array.prototype._reverse=Array.prototype.reverse;Object.extend(Array.prototype,{_each:function(iterator){for(var i=0;i<this.length;i++)
iterator(this[i]);},clear:function(){this.length=0;return this;},first:function(){return this[0];},last:function(){return this[this.length-1];},compact:function(){return this.select(function(value){return value!=undefined||value!=null;});},flatten:function(){return this.inject([],function(array,value){return array.concat(value.constructor==Array?value.flatten():[value]);});},without:function(){var values=$A(arguments);return this.select(function(value){return!values.include(value);});},indexOf:function(object){for(var i=0;i<this.length;i++)
if(this[i]==object)return i;return-1;},reverse:function(inline){return(inline!==false?this:this.toArray())._reverse();},shift:function(){var result=this[0];for(var i=0;i<this.length-1;i++)
this[i]=this[i+1];this.length--;return result;},inspect:function(){return'['+this.map(Object.inspect).join(', ')+']';}});var Hash={_each:function(iterator){for(key in this){var value=this[key];if(typeof value=='function')continue;var pair=[key,value];pair.key=key;pair.value=value;iterator(pair);}},keys:function(){return this.pluck('key');},values:function(){return this.pluck('value');},merge:function(hash){return $H(hash).inject($H(this),function(mergedHash,pair){mergedHash[pair.key]=pair.value;return mergedHash;});},toQueryString:function(){return this.map(function(pair){return pair.map(encodeURIComponent).join('=');}).join('&');},inspect:function(){return'#<Hash:{'+this.map(function(pair){return pair.map(Object.inspect).join(': ');}).join(', ')+'}>';}};function $H(object){var hash=Object.extend({},object||{});Object.extend(hash,Enumerable);Object.extend(hash,Hash);return hash;};ObjectRange=Class.create();Object.extend(ObjectRange.prototype,Enumerable);Object.extend(ObjectRange.prototype,{initialize:function(start,end,exclusive){this.start=start;this.end=end;this.exclusive=exclusive;},_each:function(iterator){var value=this.start;do{iterator(value);value=value.succ();}while(this.include(value));},include:function(value){if(value<this.start)
return false;if(this.exclusive)
return value<this.end;return value<=this.end;}});var $R=function(start,end,exclusive){return new ObjectRange(start,end,exclusive);};var Ajax={getTransport:function(){return Try.these(function(){return new ActiveXObject('Msxml2.XMLHTTP')},function(){return new ActiveXObject('Microsoft.XMLHTTP')},function(){return new XMLHttpRequest()})||false;},activeRequestCount:0};Ajax.Responders={responders:[],_each:function(iterator){this.responders._each(iterator);},register:function(responderToAdd){if(!this.include(responderToAdd))
this.responders.push(responderToAdd);},unregister:function(responderToRemove){this.responders=this.responders.without(responderToRemove);},dispatch:function(callback,request,transport,json){this.each(function(responder){if(responder[callback]&&typeof responder[callback]=='function'){try{responder[callback].apply(responder,[request,transport,json]);}catch(e){}}});}};Object.extend(Ajax.Responders,Enumerable);Ajax.Responders.register({onCreate:function(){Ajax.activeRequestCount++;},onComplete:function(){Ajax.activeRequestCount--;}});Ajax.Base=function(){};Ajax.Base.prototype={setOptions:function(options){this.options={method:'post',asynchronous:true,parameters:''}
Object.extend(this.options,options||{});},responseIsSuccess:function(){return this.transport.status==undefined||this.transport.status==0||(this.transport.status>=200&&this.transport.status<300);},responseIsFailure:function(){return!this.responseIsSuccess();}};Ajax.Request=Class.create();Ajax.Request.Events=['Uninitialized','Loading','Loaded','Interactive','Complete'];Ajax.Request.prototype=Object.extend(new Ajax.Base(),{initialize:function(url,options){this.transport=Ajax.getTransport();this.setOptions(options);this.request(url);},request:function(url){var parameters=this.options.parameters||'';if(parameters.length>0)parameters+='&_=';try{this.url=url;if(this.options.method=='get'&&parameters.length>0)
this.url+=(this.url.match(/\?/)?'&':'?')+parameters;Ajax.Responders.dispatch('onCreate',this,this.transport);this.transport.open(this.options.method,this.url,this.options.asynchronous);if(this.options.asynchronous){this.transport.onreadystatechange=this.onStateChange.bind(this);setTimeout((function(){this.respondToReadyState(1)}).bind(this),10);}
this.setRequestHeaders();var body=this.options.postBody?this.options.postBody:parameters;this.transport.send(this.options.method=='post'?body:null);}catch(e){this.dispatchException(e);}},setRequestHeaders:function(){var requestHeaders=['X-Requested-With','XMLHttpRequest','X-Prototype-Version',Prototype.Version];if(this.options.method=='post'){requestHeaders.push('Content-type','application/x-www-form-urlencoded');if(this.transport.overrideMimeType)
requestHeaders.push('Connection','close');}
if(this.options.requestHeaders)
requestHeaders.push.apply(requestHeaders,this.options.requestHeaders);for(var i=0;i<requestHeaders.length;i+=2)
this.transport.setRequestHeader(requestHeaders[i],requestHeaders[i+1]);},onStateChange:function(){var readyState=this.transport.readyState;if(readyState!=1)
this.respondToReadyState(this.transport.readyState);},header:function(name){try{return this.transport.getResponseHeader(name);}catch(e){}},evalJSON:function(){try{return eval(this.header('X-JSON'));}catch(e){}},evalResponse:function(){try{return eval(this.transport.responseText);}catch(e){this.dispatchException(e);}},respondToReadyState:function(readyState){var event=Ajax.Request.Events[readyState];var transport=this.transport,json=this.evalJSON();if(event=='Complete'){try{(this.options['on'+this.transport.status]||this.options['on'+(this.responseIsSuccess()?'Success':'Failure')]||Prototype.emptyFunction)(transport,json);}catch(e){this.dispatchException(e);}
if((this.header('Content-type')||'').match(/^text\/javascript/i))
this.evalResponse();}
try{(this.options['on'+event]||Prototype.emptyFunction)(transport,json);Ajax.Responders.dispatch('on'+event,this,transport,json);}catch(e){this.dispatchException(e);}
if(event=='Complete')
this.transport.onreadystatechange=Prototype.emptyFunction;},dispatchException:function(exception){(this.options.onException||Prototype.emptyFunction)(this,exception);Ajax.Responders.dispatch('onException',this,exception);}});Ajax.Updater=Class.create();Object.extend(Object.extend(Ajax.Updater.prototype,Ajax.Request.prototype),{initialize:function(container,url,options){this.containers={success:container.success?$(container.success):$(container),failure:container.failure?$(container.failure):(container.success?null:$(container))}
this.transport=Ajax.getTransport();this.setOptions(options);var onComplete=this.options.onComplete||Prototype.emptyFunction;this.options.onComplete=(function(transport,object){this.updateContent();onComplete(transport,object);}).bind(this);this.request(url);},updateContent:function(){var receiver=this.responseIsSuccess()?this.containers.success:this.containers.failure;var response=this.transport.responseText;if(!this.options.evalScripts)
response=response.stripScripts();if(receiver){if(this.options.insertion){new this.options.insertion(receiver,response);}else{Element.update(receiver,response);}}
if(this.responseIsSuccess()){if(this.onComplete)
setTimeout(this.onComplete.bind(this),10);}}});Ajax.PeriodicalUpdater=Class.create();Ajax.PeriodicalUpdater.prototype=Object.extend(new Ajax.Base(),{initialize:function(container,url,options){this.setOptions(options);this.onComplete=this.options.onComplete;this.frequency=(this.options.frequency||2);this.decay=(this.options.decay||1);this.updater={};this.container=container;this.url=url;this.start();},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent();},stop:function(){this.updater.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments);},updateComplete:function(request){if(this.options.decay){this.decay=(request.responseText==this.lastText?this.decay*this.options.decay:1);this.lastText=request.responseText;}
this.timer=setTimeout(this.onTimerEvent.bind(this),this.decay*this.frequency*1000);},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options);}});document.getElementsByClassName=function(className,parentElement){var children=($(parentElement)||document.body).getElementsByTagName('*');return $A(children).inject([],function(elements,child){if(child.className.match(new RegExp("(^|\\s)"+className+"(\\s|$)")))
elements.push(child);return elements;});};if(!window.Element){var Element=new Object();};Object.extend(Element,{visible:function(element){return $(element).style.display!='none';},toggle:function(){for(var i=0;i<arguments.length;i++){var element=$(arguments[i]);Element[Element.visible(element)?'hide':'show'](element);}},hide:function(){for(var i=0;i<arguments.length;i++){var element=$(arguments[i]);if(!element)return(false);element.style.display='none';}},show:function(){for(var i=0;i<arguments.length;i++){var element=$(arguments[i]);if(!element)return(false);element.style.display='';}},remove:function(element){element=$(element);if(!element)return(false);element.parentNode.removeChild(element);},update:function(element,html){$(element).innerHTML=html.stripScripts();setTimeout(function(){html.evalScripts()},10);},getHeight:function(element){element=$(element);return element.offsetHeight;},classNames:function(element){return new Element.ClassNames(element);},hasClassName:function(element,className){if(!(element=$(element)))return;return Element.classNames(element).include(className);},addClassName:function(element,className){if(!(element=$(element)))return;return Element.classNames(element).add(className);},removeClassName:function(element,className){if(!(element=$(element)))return;return Element.classNames(element).remove(className);},cleanWhitespace:function(element){element=$(element);for(var i=0;i<element.childNodes.length;i++){var node=element.childNodes[i];if(node.nodeType==3&&!/\S/.test(node.nodeValue))
Element.remove(node);}},empty:function(element){return $(element).innerHTML.match(/^\s*$/);},scrollTo:function(element){element=$(element);var x=element.x?element.x:element.offsetLeft,y=element.y?element.y:element.offsetTop;window.scrollTo(x,y);},getStyle:function(element,style){element=$(element);var value=element.style[style.camelize()];if(!value){if(document.defaultView&&document.defaultView.getComputedStyle){var css=document.defaultView.getComputedStyle(element,null);value=css?css.getPropertyValue(style):null;}else if(element.currentStyle){value=element.currentStyle[style.camelize()];}}
if(window.opera&&['left','top','right','bottom'].include(style))
if(Element.getStyle(element,'position')=='static')value='auto';return value=='auto'?null:value;},setStyle:function(element,style){element=$(element);for(name in style)
element.style[name.camelize()]=style[name];},getDimensions:function(element){element=$(element);if(Element.getStyle(element,'display')!='none')
return{width:element.offsetWidth,height:element.offsetHeight};var els=element.style;var originalVisibility=els.visibility;var originalPosition=els.position;els.visibility='hidden';els.position='absolute';els.display='';var originalWidth=element.clientWidth;var originalHeight=element.clientHeight;els.display='none';els.position=originalPosition;els.visibility=originalVisibility;return{width:originalWidth,height:originalHeight};},makePositioned:function(element){element=$(element);var pos=Element.getStyle(element,'position');if(pos=='static'||!pos){element._madePositioned=true;element.style.position='relative';if(window.opera){element.style.top=0;element.style.left=0;}}},undoPositioned:function(element){element=$(element);if(element._madePositioned){element._madePositioned=undefined;element.style.position=element.style.top=element.style.left=element.style.bottom=element.style.right='';}},makeClipping:function(element){element=$(element);if(element._overflow)return;element._overflow=element.style.overflow;if((Element.getStyle(element,'overflow')||'visible')!='hidden')
element.style.overflow='hidden';},undoClipping:function(element){element=$(element);if(element._overflow)return;element.style.overflow=element._overflow;element._overflow=undefined;}});var Toggle=new Object();Toggle.display=Element.toggle;Abstract.Insertion=function(adjacency){this.adjacency=adjacency;};Abstract.Insertion.prototype={initialize:function(element,content){this.element=$(element);this.content=content.stripScripts();if(this.adjacency&&this.element.insertAdjacentHTML){try{this.element.insertAdjacentHTML(this.adjacency,this.content);}catch(e){if(this.element.tagName.toLowerCase()=='tbody'){this.insertContent(this.contentFromAnonymousTable());}else{throw e;}}}else{this.range=this.element.ownerDocument.createRange();if(this.initializeRange)this.initializeRange();this.insertContent([this.range.createContextualFragment(this.content)]);}
setTimeout(function(){content.evalScripts()},10);},contentFromAnonymousTable:function(){var div=document.createElement('div');div.innerHTML='<table><tbody>'+this.content+'</tbody></table>';return $A(div.childNodes[0].childNodes[0].childNodes);}};var Insertion=new Object();Insertion.Before=Class.create();Insertion.Before.prototype=Object.extend(new Abstract.Insertion('beforeBegin'),{initializeRange:function(){this.range.setStartBefore(this.element);},insertContent:function(fragments){fragments.each((function(fragment){this.element.parentNode.insertBefore(fragment,this.element);}).bind(this));}});Insertion.Top=Class.create();Insertion.Top.prototype=Object.extend(new Abstract.Insertion('afterBegin'),{initializeRange:function(){this.range.selectNodeContents(this.element);this.range.collapse(true);},insertContent:function(fragments){fragments.reverse(false).each((function(fragment){this.element.insertBefore(fragment,this.element.firstChild);}).bind(this));}});Insertion.Bottom=Class.create();Insertion.Bottom.prototype=Object.extend(new Abstract.Insertion('beforeEnd'),{initializeRange:function(){this.range.selectNodeContents(this.element);this.range.collapse(this.element);},insertContent:function(fragments){fragments.each((function(fragment){this.element.appendChild(fragment);}).bind(this));}});Insertion.After=Class.create();Insertion.After.prototype=Object.extend(new Abstract.Insertion('afterEnd'),{initializeRange:function(){this.range.setStartAfter(this.element);},insertContent:function(fragments){fragments.each((function(fragment){this.element.parentNode.insertBefore(fragment,this.element.nextSibling);}).bind(this));}});Element.ClassNames=Class.create();Element.ClassNames.prototype={initialize:function(element){this.element=$(element);},_each:function(iterator){this.element.className.split(/\s+/).select(function(name){return name.length>0;})._each(iterator);},set:function(className){this.element.className=className;},add:function(classNameToAdd){if(this.include(classNameToAdd))return;this.set(this.toArray().concat(classNameToAdd).join(' '));},remove:function(classNameToRemove){if(!this.include(classNameToRemove))return;this.set(this.select(function(className){return className!=classNameToRemove;}).join(' '));},toString:function(){return this.toArray().join(' ');}};Object.extend(Element.ClassNames.prototype,Enumerable);var Field={clear:function(){for(var i=0;i<arguments.length;i++)
$(arguments[i]).value='';},focus:function(element){$(element).focus();},present:function(){for(var i=0;i<arguments.length;i++)
if($(arguments[i]).value=='')return false;return true;},select:function(element){$(element).select();},activate:function(element){element=$(element);element.focus();if(element.select)
element.select();}};var Form={serialize:function(form){var elements=Form.getElements($(form));var queryComponents=new Array();for(var i=0;i<elements.length;i++){var queryComponent=Form.Element.serialize(elements[i]);if(queryComponent)
queryComponents.push(queryComponent);}
return queryComponents.join('&');},getElements:function(form){form=$(form);var elements=new Array();for(tagName in Form.Element.Serializers){var tagElements=form.getElementsByTagName(tagName);for(var j=0;j<tagElements.length;j++)
elements.push(tagElements[j]);}
return elements;},getInputs:function(form,typeName,name){form=$(form);var inputs=form.getElementsByTagName('input');if(!typeName&&!name)
return inputs;var matchingInputs=new Array();for(var i=0;i<inputs.length;i++){var input=inputs[i];if((typeName&&input.type!=typeName)||(name&&input.name!=name))
continue;matchingInputs.push(input);}
return matchingInputs;},disable:function(form){var elements=Form.getElements(form);for(var i=0;i<elements.length;i++){var element=elements[i];element.blur();element.disabled='true';}},enable:function(form){var elements=Form.getElements(form);for(var i=0;i<elements.length;i++){var element=elements[i];element.disabled='';}},findFirstElement:function(form){return Form.getElements(form).find(function(element){return element.type!='hidden'&&!element.disabled&&['input','select','textarea'].include(element.tagName.toLowerCase());});},focusFirstElement:function(form){Field.activate(Form.findFirstElement(form));},reset:function(form){$(form).reset();}};Form.Element={serialize:function(element){element=$(element);var method=element.tagName.toLowerCase();var parameter=Form.Element.Serializers[method](element);if(parameter){var key=encodeURIComponent(parameter[0]);if(key.length==0)return;if(parameter[1].constructor!=Array)
parameter[1]=[parameter[1]];return parameter[1].map(function(value){return key+'='+encodeURIComponent(value);}).join('&');}},getValue:function(element){element=$(element);var method=element.tagName.toLowerCase();var parameter=Form.Element.Serializers[method](element);if(parameter)
return parameter[1];}};Form.Element.Serializers={input:function(element){switch(element.type.toLowerCase()){case'submit':case'hidden':case'password':case'text':return Form.Element.Serializers.textarea(element);case'checkbox':case'radio':return Form.Element.Serializers.inputSelector(element);}
return false;},inputSelector:function(element){if(element.checked)
return[element.name,element.value];},textarea:function(element){return[element.name,element.value];},select:function(element){return Form.Element.Serializers[element.type=='select-one'?'selectOne':'selectMany'](element);},selectOne:function(element){var value='',opt,index=element.selectedIndex;if(index>=0){opt=element.options[index];value=opt.value;if(!value&&!('value'in opt))
value=opt.text;}
return[element.name,value];},selectMany:function(element){var value=new Array();for(var i=0;i<element.length;i++){var opt=element.options[i];if(opt.selected){var optValue=opt.value;if(!optValue&&!('value'in opt))
optValue=opt.text;value.push(optValue);}}
return[element.name,value];}};var $F=Form.Element.getValue;Abstract.TimedObserver=function(){}
Abstract.TimedObserver.prototype={initialize:function(element,frequency,callback){this.frequency=frequency;this.element=$(element);this.callback=callback;this.lastValue=this.getValue();this.registerCallback();},registerCallback:function(){setInterval(this.onTimerEvent.bind(this),this.frequency*1000);},onTimerEvent:function(){var value=this.getValue();if(this.lastValue!=value){this.callback(this.element,value);this.lastValue=value;}}};Form.Element.Observer=Class.create();Form.Element.Observer.prototype=Object.extend(new Abstract.TimedObserver(),{getValue:function(){return Form.Element.getValue(this.element);}});Form.Observer=Class.create();Form.Observer.prototype=Object.extend(new Abstract.TimedObserver(),{getValue:function(){return Form.serialize(this.element);}});Abstract.EventObserver=function(){}
Abstract.EventObserver.prototype={initialize:function(element,callback){this.element=$(element);this.callback=callback;this.lastValue=this.getValue();if(this.element.tagName.toLowerCase()=='form')
this.registerFormCallbacks();else
this.registerCallback(this.element);},onElementEvent:function(){var value=this.getValue();if(this.lastValue!=value){this.callback(this.element,value);this.lastValue=value;}},registerFormCallbacks:function(){var elements=Form.getElements(this.element);for(var i=0;i<elements.length;i++)
this.registerCallback(elements[i]);},registerCallback:function(element){if(element.type){switch(element.type.toLowerCase()){case'checkbox':case'radio':Event.observe(element,'click',this.onElementEvent.bind(this));break;case'password':case'text':case'textarea':case'select-one':case'select-multiple':Event.observe(element,'change',this.onElementEvent.bind(this));break;}}}};Form.Element.EventObserver=Class.create();Form.Element.EventObserver.prototype=Object.extend(new Abstract.EventObserver(),{getValue:function(){return Form.Element.getValue(this.element);}});Form.EventObserver=Class.create();Form.EventObserver.prototype=Object.extend(new Abstract.EventObserver(),{getValue:function(){return Form.serialize(this.element);}});if(!window.Event){var Event=new Object();};Object.extend(Event,{KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,element:function(event){return event.target||event.srcElement;},isLeftClick:function(event){return(((event.which)&&(event.which==1))||((event.button)&&(event.button==1)));},pointerX:function(event){return event.pageX||(event.clientX+
(document.documentElement.scrollLeft||document.body.scrollLeft));},pointerY:function(event){return event.pageY||(event.clientY+
(document.documentElement.scrollTop||document.body.scrollTop));},stop:function(event){if(event.preventDefault){event.preventDefault();event.stopPropagation();}else{event.returnValue=false;event.cancelBubble=true;}},findElement:function(event,tagName){var element=Event.element(event);while(element.parentNode&&(!element.tagName||(element.tagName.toUpperCase()!=tagName.toUpperCase())))
element=element.parentNode;return element;},observers:false,_observeAndCache:function(element,name,observer,useCapture){if(!this.observers)this.observers=[];if(element.addEventListener){this.observers.push([element,name,observer,useCapture]);element.addEventListener(name,observer,useCapture);}else if(element.attachEvent){this.observers.push([element,name,observer,useCapture]);element.attachEvent('on'+name,observer);}},unloadCache:function(){if(!Event.observers)return;for(var i=0;i<Event.observers.length;i++){Event.stopObserving.apply(this,Event.observers[i]);Event.observers[i][0]=null;}
Event.observers=false;},observe:function(element,name,observer,useCapture){var element=$(element);useCapture=useCapture||false;if(name=='keypress'&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.attachEvent))
name='keydown';this._observeAndCache(element,name,observer,useCapture);},stopObserving:function(element,name,observer,useCapture){var element=$(element);useCapture=useCapture||false;if(name=='keypress'&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.detachEvent))
name='keydown';if(element.removeEventListener){element.removeEventListener(name,observer,useCapture);}else if(element.detachEvent){element.detachEvent('on'+name,observer);}}});Event.observe(window,'unload',Event.unloadCache,false);var Position={includeScrollOffsets:false,prepare:function(){this.deltaX=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;this.deltaY=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;},realOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.scrollTop||0;valueL+=element.scrollLeft||0;element=element.parentNode;}while(element);return[valueL,valueT];},cumulativeOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;}while(element);return[valueL,valueT];},positionedOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){p=Element.getStyle(element,'position');if(p=='relative'||p=='absolute')break;}}while(element);return[valueL,valueT];},offsetParent:function(element){if(element.offsetParent)return element.offsetParent;if(element==document.body)return element;while((element=element.parentNode)&&element!=document.body)
if(Element.getStyle(element,'position')!='static')
return element;return document.body;},within:function(element,x,y){if(this.includeScrollOffsets)
return this.withinIncludingScrolloffsets(element,x,y);this.xcomp=x;this.ycomp=y;this.offset=this.cumulativeOffset(element);return(y>=this.offset[1]&&y<this.offset[1]+element.offsetHeight&&x>=this.offset[0]&&x<this.offset[0]+element.offsetWidth);},withinIncludingScrolloffsets:function(element,x,y){var offsetcache=this.realOffset(element);this.xcomp=x+offsetcache[0]-this.deltaX;this.ycomp=y+offsetcache[1]-this.deltaY;this.offset=this.cumulativeOffset(element);return(this.ycomp>=this.offset[1]&&this.ycomp<this.offset[1]+element.offsetHeight&&this.xcomp>=this.offset[0]&&this.xcomp<this.offset[0]+element.offsetWidth);},overlap:function(mode,element){if(!mode)return 0;if(mode=='vertical')
return((this.offset[1]+element.offsetHeight)-this.ycomp)/element.offsetHeight;if(mode=='horizontal')
return((this.offset[0]+element.offsetWidth)-this.xcomp)/element.offsetWidth;},clone:function(source,target){source=$(source);target=$(target);target.style.position='absolute';var offsets=this.cumulativeOffset(source);target.style.top=offsets[1]+'px';target.style.left=offsets[0]+'px';target.style.width=source.offsetWidth+'px';target.style.height=source.offsetHeight+'px';},page:function(forElement){var valueT=0,valueL=0;var element=forElement;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body)
if(Element.getStyle(element,'position')=='absolute')break;}while(element=element.offsetParent);element=forElement;do{valueT-=element.scrollTop||0;valueL-=element.scrollLeft||0;}while(element=element.parentNode);return[valueL,valueT];},clone:function(source,target){var options=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},arguments[2]||{})
source=$(source);var p=Position.page(source);target=$(target);var delta=[0,0];var parent=null;if(Element.getStyle(target,'position')=='absolute'){parent=Position.offsetParent(target);delta=Position.page(parent);}
if(parent==document.body){delta[0]-=document.body.offsetLeft;delta[1]-=document.body.offsetTop;}
if(options.setLeft)target.style.left=(p[0]-delta[0]+options.offsetLeft)+'px';if(options.setTop)target.style.top=(p[1]-delta[1]+options.offsetTop)+'px';if(options.setWidth)target.style.width=source.offsetWidth+'px';if(options.setHeight)target.style.height=source.offsetHeight+'px';},absolutize:function(element){element=$(element);if(element.style.position=='absolute')return;Position.prepare();var offsets=Position.positionedOffset(element);var top=offsets[1];var left=offsets[0];var width=element.clientWidth;var height=element.clientHeight;element._originalLeft=left-parseFloat(element.style.left||0);element._originalTop=top-parseFloat(element.style.top||0);element._originalWidth=element.style.width;element._originalHeight=element.style.height;element.style.position='absolute';element.style.top=top+'px';;element.style.left=left+'px';;element.style.width=width+'px';;element.style.height=height+'px';;},relativize:function(element){element=$(element);if(element.style.position=='relative')return;Position.prepare();element.style.position='relative';var top=parseFloat(element.style.top||0)-(element._originalTop||0);var left=parseFloat(element.style.left||0)-(element._originalLeft||0);element.style.top=top+'px';element.style.left=left+'px';element.style.height=element._originalHeight;element.style.width=element._originalWidth;}};if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)){Position.cumulativeOffset=function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body)
if(Element.getStyle(element,'position')=='absolute')break;element=element.offsetParent;}while(element);return[valueL,valueT];}};Ajax.currentRequests={};Ajax.Responders.register({onCreate:function(request){if(request.options.onlyLatestOfClass&&Ajax.currentRequests[request.options.onlyLatestOfClass]){try{Ajax.currentRequests[request.options.onlyLatestOfClass].transport.abort();}catch(e){}}
Ajax.currentRequests[request.options.onlyLatestOfClass]=request;},onComplete:function(request){if(request.options.onlyLatestOfClass){Ajax.currentRequests[request.options.onlyLatestOfClass]=null;}}});
var dyoConfig={diamondsUrl:'dyo/diamond_search_json.php',diamondUrl:'dyo/diamond_properties.php',stylesUrl:'dyo/style_search_json.php',styleUrl:'dyo/style_properties.php',dyamicImagesUrl:'dyo/image.php',stagicImagesUrl:'',sampleImagesUrl:'images/samples/',certImagesUrl:'images/certificates/',saveUrl:'dyo/save.php',loadUrl:'dyo/load_order_json.php',loadingImage:'dyo/loading.gif',shapes:['Round','Princess','Emerald','Asscher','Marquise','Oval','Radiant','Pear','Heart','Cushion'],diamondImage:function(diamond,resolution,options){if(!diamond||!diamond.shape)return;if(!resolution)resolution=dyoTemplate.stage.resolution;if(!options)options={};if(options.imageType)var imageType=options.imageType;else var imageType='png';if(options.headImage)var headImage=options.headImage;else var headImage=false;if(options.bgColor)var bgColor=options.bgColor;else var bgcolor=false;var url=this.dyamicImagesUrl;url+='?res='+resolution+'&type='+imageType+'&ds='+diamond.shape.toLowerCase()+'&w='+diamond.width+'&l='+diamond.length;if(headImage)url+='&dh='+headImage;if(bgColor)url+='&bg='+bgColor;return(url);},certificateImage:function(diamond){if(!diamond||!diamond.shape)return;var url=this.certImagesUrl;if(diamond.vendorId&&diamond.sku){url+=diamond.vendorId+'/';var sku=diamond.sku.replace(/[^a-zA-Z0-9\-_]/g,'_');sku=sku.toUpperCase();url+=sku+'.pdf';}
else url+='sample.jpg';return(url);},styleImage:function(style,resolution,imageType){if(!style.shankImageUrl)return;if(!resolution)resolution=dyoTemplate.stage.resolution;if(!imageType)imageType='png';var url=this.dyamicImagesUrl;url+='?res='+resolution+'&type='+imageType+'&s='+style.shankImageUrl;return(url);},staticImage:function(filename){var url='';if(dyoTemplate&&dyoTemplate.customImagesUrl)url+=dyoTemplate.customImagesUrl;else url+=this.stagicImagesUrl;return(url+filename);},sampleImage:function(filename){var url='';url+=this.sampleImagesUrl;return(url+filename);}};
Accordian={expanded:function(element){element=$(element);return(Element.hasClassName(element,'open'));},expand:function(element){element=$(element);if(this.expanded(element))return(true);Element.addClassName(element,'open');return(true);},contract:function(element){element=$(element);if(!this.expanded(element))return(true);Element.removeClassName(element,'open');return(true);},toggle:function(element){element=$(element);if(this.expanded(element))this.contract(element);else this.expand(element);}};function showCert(url){popup(url,750,500,'resizable=yes,scrollbars=yes');}
function showHelp(url){popup(url,425,475,'resizable=yes,scrollbars=no');}
function toggleSections(){var element=$(arguments[0]);if(element.innerHTML=='Hide'){var display='none';element.innerHTML='Show More Details';element.className='showSection';}
else{var display='';element.innerHTML='Hide';element.className='hideSection';}
for(var t=1;t<arguments.length;t++){var element=$(arguments[t]);element.style.display=display;}}
function popup(url,width,height,options){var opt='width='+width+',height='+height;if(options)opt+=','+options;window.open(url,'dyoPopup',opt);}
function columize(a,count){var cols=[];for(var t=0;t<count;t++)cols[t]=[];for(t=0;t<count;t++){pos=t;while(a[pos]){cols[t].push(a[pos]);pos+=5;}}
return(cols);}
function parseQueryString(){var result={};var query=window.location.search.substring(1);var vars=query.split("&");for(var i=0;i<vars.length;i++){var pair=vars[i].split("=");var key=pair[0];var value=pair[1];result[key]=value;}
return(result);}
function setSelectedStoneId(stoneId){PREFS.set('stones','selected',stoneId);if(stoneId)saveStoneId(stoneId);return(true);}
function getSelectedStoneId(){var stoneId=PREFS.get('stones','selected');if(!stoneId==undefined)return(false);return(stoneId);}
function setSelectedStyleId(styleId,size){PREFS.set('settings','selected',styleId);if(styleId)saveStyleId(styleId,size);return(true);}
function getSelectedStyleId(){var styleId=PREFS.get('settings','selected');if(!styleId==undefined)return(false);return(styleId);}
function setRecentStoneId(stoneId){PREFS.set('stones','recent',stoneId);return(true);}
function getRecentStoneId(){var stoneId=PREFS.get('stones','recent');if(!stoneId==undefined)return(false);return(stoneId);}
function setRecentStyleId(styleId){PREFS.set('settings','recent',styleId);return(true);}
function getRecentStyleId(){var styleId=PREFS.get('settings','recent');if(!styleId==undefined)return(false);return(styleId);}
function updateCombinedItem(styleId,stoneId){if(__REPLACE_STYLE&&__REPLACE_STONE&&__SAVE_RETURN){var combinedTemp=PREFS.get('saved','combined');if(!combinedTemp)combinedTemp=[];var found=false;for(var t=0;t<combinedTemp.length;t++){if(combinedTemp[t].styleId==__REPLACE_STYLE&&combinedTemp[t].stoneId==__REPLACE_STONE){if(styleId)combinedTemp[t].styleId=styleId;if(stoneId)combinedTemp[t].stoneId=stoneId;found=true;}}
if(found){PREFS.set('saved','combined',combinedTemp);}}}
function saveStyleId(styleId,size){var styleIds=PREFS.get('saved','styleIds');if(!styleIds)styleIds=[];var found=false;if(styleIds.indexOf(styleId)==-1){styleIds.push(styleId);found=true;}
if(found){PREFS.set('saved','styleIds',styleIds);if(size)setStyleSize(styleId,size);}
updateCombinedItem(styleId,null);if(__SAVE_RETURN){var url=__SAVE_RETURN+'?style='+styleId;if(__REPLACE_STONE)url+='&stone='+__REPLACE_STONE;location.href=url;}}
function setStyleSize(styleId,size){var sizes=PREFS.get('saved','sizes');if(!sizes)sizes={};if(!styleId)styleId='default';sizes[styleId]=size;if(size)sizes["default"]=size;PREFS.set('saved','sizes',sizes);}
function getStyleSize(styleId){var sizes=PREFS.get('saved','sizes');if(!sizes)return(undefined);if(!styleId)styleId='default';if(sizes[styleId])return(sizes[styleId]);return(undefined);}
function saveStoneId(stoneId){var stoneIds=PREFS.get('saved','stoneIds');if(!stoneIds)stoneIds=[];var found=false;if(stoneIds.indexOf(stoneId)==-1){stoneIds.push(stoneId);found=true;}
if(found){PREFS.set('saved','stoneIds',stoneIds);}
updateCombinedItem(null,stoneId);if(__SAVE_RETURN){var url=__SAVE_RETURN+'?stone='+stoneId;if(__REPLACE_STYLE)url+='&style='+__REPLACE_STYLE;location.href=url;}}
function getSavedStoneIds(){var stoneIds=PREFS.get('saved','stoneIds');if(!stoneIds)stoneIds=[];else{var tempIds=[];for(var t=0;t<stoneIds.length;t++){var stoneId=stoneIds[t];if(stoneId*0==0)tempIds.push(stoneId*1);}
stoneIds=tempIds;}
return(stoneIds);}
function getSavedStyleIds(){var styleIds=PREFS.get('saved','styleIds');if(!styleIds)styleIds=[];else{var tempIds=[];for(var t=0;t<styleIds.length;t++){var styleId=styleIds[t];if(styleId*0==0)tempIds.push(styleId*1);}
styleIds=tempIds;}
return(styleIds);}
function combinedOk(styleId,stoneId){if(!styleId){alert("Please select a setting to go on this customized ring");return(false);}
if(!stoneId){alert("Please select a diamond to go on this customized ring");return(false);}
return(true);}
function saveCombinedIds(styleId,stoneId){if(!combinedOk(styleId,stoneId))return(false);saveStoneId(stoneId);saveStyleId(styleId);var combinedTemp=PREFS.get('saved','combined');if(!combinedTemp)combinedTemp=[];var found=false;for(var t=0;t<combinedTemp.length;t++){if(combinedTemp[t].styleId==styleId&&combinedTemp[t].stoneId==stoneId){found=true;break;}}
if(!found){combinedTemp.push({'styleId':styleId,'stoneId':stoneId});PREFS.set('saved','combined',combinedTemp);}
return(true);}
function purchaseStoneId(stoneId){setSelectedStoneId(stoneId);setSelectedStyleId(null);saveStoneId(stoneId);purchase();}
function purchaseCombinedIds(styleId,stoneId){setSelectedStyleId(styleId);setSelectedStoneId(stoneId);saveStyleId(styleId);saveStoneId(stoneId);purchase();}
var __REPLACE_STONE=null;var __REPLACE_STYLE=null;var __REPLACE_COMBINED=null;var __SAVE_RETURN=null;function checkIncoming(){var vars=parseQueryString();var state=[];var styleId=null;if(vars['style']){styleId=vars['style'];if(styleId*0==0){setSelectedStyleId(styleId);setRecentStyleId(styleId);saveStyleId(styleId);state.push({'type':'style','id':styleId});}
else styleId=null;}
var stoneId=null;if(vars['stone']){stoneId=vars['stone'];if(stoneId*0==0){setSelectedStoneId(stoneId);setRecentStoneId(stoneId);saveStoneId(stoneId);state.push({'type':'stone','id':stoneId});}
else stoneId=null;}
if(state.length>0)PREFS.set('saved','state',state);var size=null;if(vars['size']){var size=vars['size'];if(size*0==0){setStyleSize(styleId,size);}
else size=null;}
var queryPrices=[null,null];var minPrice=null;if(vars['min']){var minPrice=vars['min'];if(minPrice*0==0)queryPrices[0]=minPrice;}
var maxPrice=null;if(vars['max']){var maxPrice=vars['max'];if(maxPrice*0==0)queryPrices[1]=maxPrice;}
if(queryPrices[0]||queryPrices[1])PREFS.set('stones','queryPrice',queryPrices);switch(vars['return']){case'saved':__SAVE_RETURN='saved.php';break;case'stones':__SAVE_RETURN='stones.php';break;case'styles':__SAVE_RETURN='styles.php';break;}
if(__SAVE_RETURN){if(styleId)__REPLACE_STYLE=styleId;if(stoneId)__REPLACE_STONE=stoneId;}}
var FlipBox=Class.create();FlipBox.prototype={initialize:function(element,options){if(!options)options={};this.element=$(element);this.count=options.count||0;this.position=options.position||0;this.formatter=options.formatter||function(count){return(count);};this.baseId=this.element.id;this.orientation=options.orientation||'horiz';this.defaultDelay=options.delay||10;this.defaultStep=options.step||15;this.onClick=options.onClick||null;if(options.items){this.items=options.items;this.count=this.items.length;}
this.flipping=false;this.hoverClass=options.hoverClass||null;this.autoScroll=options.autoScroll||false;this.autoScrollDelay=options.autoScrollDelay||50;this.autoScrollStep=options.autoScrollStep||1;this.autoScrollPause=options.autoScrollPause||0;if(this.autoScroll){this.step=this.autoScrollStep;this.delay=this.autoScrollDelay;}
else{this.step=this.defaultStep;this.delay=this.defaultDelay;}
this.events=[];this.mouseDown=false;this.createDOM();this.animevent=this.animate.bindAsEventListener(this);if(this.autoScroll){this.flipDisplay(1);}},observe:function(element,name,observer,useCapture){Event.observe(element,name,observer,useCapture);this.events.push([element,name,observer,useCapture]);},clearEvents:function(){for(var t=0;t<this.events.length;t++){var event=this.events[t];Event.stopObserving(event[0],event[1],event[2],event[3]);}},createDOM:function(){this.element.style.overflow='hidden';if(Element.getStyle(this.element,'position')!='absolute')this.element.style.position='relative';this.display=this.newDisplay(0);if(this.count>1){this.prevArrow=document.createElement('div');this.prevArrow.id=this.baseId+'_previous';this.prevArrow.className='previousArrow';this.element.appendChild(this.prevArrow);this.observe(this.prevArrow,"mousedown",this.clickPrevious.bindAsEventListener(this));this.observe(this.prevArrow,"mouseup",this.mouseUp.bindAsEventListener(this));this.observe(this.prevArrow,"mouseover",this.mouseover.bindAsEventListener(this));this.observe(this.prevArrow,"mouseout",this.mouseout.bindAsEventListener(this));this.nextArrow=document.createElement('div');this.nextArrow.id=this.baseId+'_next';this.nextArrow.className='nextArrow';this.element.appendChild(this.nextArrow);this.observe(this.nextArrow,"mousedown",this.clickNext.bindAsEventListener(this));this.observe(this.nextArrow,"mouseup",this.mouseUp.bindAsEventListener(this));this.observe(this.nextArrow,"mouseover",this.mouseover.bindAsEventListener(this));this.observe(this.nextArrow,"mouseout",this.mouseout.bindAsEventListener(this));}},mouseUp:function(e){this.mouseDown=false;},clickPrevious:function(e){this.mouseDown=true;this.autoScroll=false;this.delay=this.defaultDelay;this.step=this.defaultStep;this.flipDisplay(-1);},clickNext:function(e){this.mouseDown=true;this.autoScroll=false;this.delay=this.defaultDelay;this.step=this.defaultStep;this.flipDisplay(1);},newDisplay:function(position){var div=document.createElement('div');if(this.display)div.id=this.baseId+'_tempDisplay';else div.id=this.baseId+'_display';div.className='display';div.style.position='absolute';div.style.left='0px';div.style.top='0px';if(this.display){if(this.orientation=='horiz')div.style.left=(this.direction*this.element.clientWidth)+'px';else div.style.top=(this.direction*this.element.clientHeight)+'px';this.element.insertBefore(div,this.display);}
else{this.element.appendChild(div);}
div.innerHTML=this.formatter(position,div,this);if(this.onClick){this.observe(div,"click",this.click.bindAsEventListener(this));}
return(div);},flipDisplay:function(direction){this.flipping=true;if(this.interval){clearInterval(this.interval);if(direction&&this.direction!=direction){var temp=this.display;this.display=this.tempDisplay;this.tempDisplay=temp;this.tempPosition=this.position;temp=undefined;}}
if(direction)this.direction=direction;if(!this.tempDisplay){this.tempPosition=this.position+this.direction;if(this.tempPosition<0)this.tempPosition=this.count-1;if(this.tempPosition>=this.count)this.tempPosition=0;this.tempDisplay=this.newDisplay(this.tempPosition);}
this.interval=setInterval(this.animevent,this.delay);},animate:function(){if(!this.element||!this.element.id||!this.display||!this.display.id){this.destroy();return(false);}
if(this.timeout){clearTimeout(this.timeout);this.timeout=null;}
var tempPos=0;if(this.orientation=='horiz')tempPos=parseInt(this.tempDisplay.style.left);else tempPos=parseInt(this.tempDisplay.style.top);var done=false;if(this.direction==1&&tempPos+(this.direction*-1*this.step)<=0){done=true;}
if(this.direction==-1&&tempPos+(this.direction*-1*this.step)>=0){done=true;}
if(done){this.flipping=false;clearInterval(this.interval);this.interval=null;this.position=this.tempPosition;this.tempPosition=null;this.element.removeChild(this.display);this.display=undefined;this.display=this.tempDisplay;this.display.id=this.baseId+'_display';this.tempDisplay=null;this.display.style.position='absolute';this.display.style.left='0px';this.display.style.top='0px';if(this.mouseDown||this.autoScroll){if(this.autoScroll){this.flipDisplay();}
else this.flipDisplay();}
else this.direction=null;return(false);}
if(this.orientation=='horiz'){this.tempDisplay.style.left=parseInt(this.tempDisplay.style.left)+(this.direction*-1*this.step)+'px';this.display.style.left=parseInt(this.display.style.left)+(this.direction*-1*this.step)+'px';}
else{this.tempDisplay.style.top=parseInt(this.tempDisplay.style.top)+(this.direction*-1*this.step)+'px';this.display.style.top=parseInt(this.display.style.top)+(this.direction*-1*this.step)+'px';}},click:function(e){var element=Event.element(e);while(element.parentNode){if(this.display&&element.id==this.display.id){var position=this.position;}
if(this.tempDisplay&&element.id==this.tempDisplay.id){var position=this.tempPosition;}
element=element.parentNode;}
if(position==undefined)return(false);this.autoScroll=false;if(this.flipping){this.autoScroll=false;this.delay=this.defaultDelay;this.step=this.defaultStep;if(this.position==position){this.flipDisplay(this.direction*-1);}}
this.onClick(position,e,this);Event.stop(e);},mouseover:function(e){var element=Event.element(e);var className='';if(typeof this.hoverClass=='string')className=this.hoverClass;else if(typeof this.hoverClass=='object'&&this.hoverClass.constructor==Array&&element==this.prevArrow)className=this.hoverClass[0];else if(typeof this.hoverClass=='object'&&this.hoverClass.constructor==Array&&element==this.nextArrow)className=this.hoverClass[1];Element.addClassName(element,className);},mouseout:function(e){var element=Event.element(e);var className='';if(typeof this.hoverClass=='string')className=this.hoverClass;else if(typeof this.hoverClass=='object'&&this.hoverClass.constructor==Array&&element==this.prevArrow)className=this.hoverClass[0];else if(typeof this.hoverClass=='object'&&this.hoverClass.constructor==Array&&element==this.nextArrow)className=this.hoverClass[1];Element.removeClassName(element,className);this.mouseDown=false;},destroy:function(){if(this.interval)clearInterval(this.interval);this.interval=null;if(this.timeout)clearTimeout(this.timeout);this.timeout=null;this.clearEvents();}};
var Throb=Class.create();Throb.prototype={initialize:function(element,options){this.element=$(element);if(!this.element)return(false);options=options||{};this.delay=options.delay||100;this.pause=options.pause||200;this.startColor=options.startColor||[0,0,0];this.endColor=options.endColor||[255,255,255];this.steps=options.steps||20;this.border=options.border||true;this.background=options.background||false;this.startEvent=this.startThrobbing.bindAsEventListener(this);this.throbEvent=this.animate.bindAsEventListener(this);this.interval=null;this.timeout=null;this.startThrobbing();},startThrobbing:function(){if(this.interval)return(true);this.step=0;this.red=this.startColor[0];this.green=this.startColor[1];this.blue=this.startColor[2];this.redStep=(this.endColor[0]-this.startColor[0])/this.steps;this.greenStep=(this.endColor[1]-this.startColor[1])/this.steps;this.blueStep=(this.endColor[2]-this.startColor[2])/this.steps;this.interval=setInterval(this.throbEvent,this.delay);},animate:function(){this.step++;this.red+=this.redStep;this.green+=this.greenStep;this.blue+=this.blueStep;var color=this.array2hex([this.red,this.green,this.blue]);this.applyColor(color);if(this.step==this.steps){if(this.interval)clearInterval(this.interval);this.interval=null;var temp=this.startColor;this.startColor=this.endColor;this.endColor=temp;this.timeout=setTimeout(this.startEvent,this.pause);}},halt:function(){if(this.interval)clearInterval(this.interval);if(this.timeout)clearTimeout(this.timeout);this.interval=null;this.timeout=null;if(this.border){Element.setStyle(this.element,{'border-color':''});}
if(this.background){Element.setStyle(this.element,{'background-color':''});}},applyColor:function(color){if(this.border){Element.setStyle(this.element,{'border-color':color});}
if(this.background){Element.setStyle(this.element,{'background-color':color});}},array2hex:function(arr){var r=parseInt(arr[0]);if(r>255)r=255;if(r<0)r=0;r=r.toString(16);var g=parseInt(arr[1]);if(g>255)g=255;if(g<0)g=0;g=g.toString(16);var b=parseInt(arr[2]);if(b>255)b=255;if(b<0)b=0;b=b.toString(16);if(r.length==1)r='0'+r;if(g.length==1)g='0'+g;if(b.length==1)b='0'+b;var color='#'+r+g+b;return(color);}};
var PagedArea=Class.create();PagedArea.prototype={initialize:function(element,options){if(!options)options={};this.element=$(element);if(typeof(options.pageDiv)=="string"){this.pageDIv=new Array(options.pageDiv);}else{this.pageDiv=options.pageDiv||this.element;}
this.formatter=options.formatter||function(id){var div=document.createElement('div');div.innerHTML=id;return(div);};this.pageFormatter=options.pageFormatter||function(itemStart,itemEnd,itemCount,page,pageCount){return('Page '+page+' of '+pageCount);};this.maxPagesShown=options.maxPagesShown||5;this.page=options.page||0;this.totalPages=0;this.onClick=options.onClick||null;this.browseText=options.browseText||false;this.itemsPerPage=options.itemsPerPage||0;if(options.items){this.items=options.items;this.setTotalItems(this.items.length);}
else{this.items=[];this.setTotalItems(options.totalItems||0);}},setTotalItems:function(items){this.totalItems=items;this.totalPages=Math.ceil(this.totalItems/this.itemsPerPage);if(this.page>=this.totalPages)this.page=this.totalPages-1;if(this.page<0)this.page=0;this.drawPage(this.page);},redraw:function(){this.drawPage();},drawPage:function(page){if(page==undefined)page=this.page;if(page==undefined)page=0;this.page=page;this.element.innerHTML='';var startPos=this.itemsPerPage*(this.page);var endPos=startPos+this.itemsPerPage-1;if(endPos>=this.totalItems)endPos=this.totalItems-1;for(var i=0;i<this.pageDiv.length;i++){var pageDivElement=$(this.pageDiv[i]);var html='';html+=this.pageFormatter(startPos,endPos,this.totalItems,this.page,this.totalPages);pageDivElement.innerHTML=html;if(this.page>0){var span=document.createElement('span');span.className='pageLink prevPage';if(this.browseText){span.innerHTML='&lt;Prev';}else{span.innerHTML='&lt;';}
span.onclick=this.clickPage.bindAsEventListener(this,this.page-1);pageDivElement.appendChild(span);}
if(this.totalPages>1){var span=document.createElement('span');span.className='pageLink';if(0==this.page)span.className+=' currentPage';span.innerHTML='1';if(0!=this.page)span.onclick=this.clickPage.bindAsEventListener(this,0);pageDivElement.appendChild(span);var startPage=this.page-Math.floor(this.maxPagesShown/2);if(startPage<1)startPage=1;var endPage=startPage+this.maxPagesShown;if(endPage>=this.totalPages-1)endPage=this.totalPages-1;startPage=endPage-this.maxPagesShown;if(startPage<1)startPage=1;if(startPage!=1){var span=document.createElement('span');span.innerHTML="...";pageDivElement.appendChild(span);}
for(var t=startPage;t<endPage;t++){var span=document.createElement('span');span.className='pageLink';if(t==this.page)span.className+=' currentPage';span.innerHTML=(t+1);if(t!=this.page)Event.observe(span,'click',this.clickPage.bindAsEventListener(this,t));pageDivElement.appendChild(span);}
if(endPage!=this.totalPages-1){var span=document.createElement('span');span.innerHTML="...";pageDivElement.appendChild(span);}
var span=document.createElement('span');span.className='pageLink';if(this.totalPages-1==this.page)span.className+=' currentPage';span.innerHTML=this.totalPages;if(this.totalPages-1!=this.page)Event.observe(span,'click',this.clickPage.bindAsEventListener(this,this.totalPages-1));pageDivElement.appendChild(span);}
if(this.page<this.totalPages-1){var span=document.createElement('span');span.className='pageLink nextPage';if(this.browseText){span.innerHTML='Next&gt;';}else{span.innerHTML='&gt;';}
span.onclick=this.clickPage.bindAsEventListener(this,this.page+1);pageDivElement.appendChild(span);}}
for(itemId=startPos;itemId<=endPos;itemId++){var item=this.formatter(itemId,this.element,this);if(this.onClick){Event.observe(item,'click',this.click.bindAsEventListener(this,itemId));}
this.element.appendChild(item);}},clickPage:function(event,page){this.page=page;this.drawPage();},click:function(event,itemId){var element=Event.element(event);this.onClick(itemId,element,event,this);}};
Array.prototype.______array='______array';var JSON={org:'http://www.JSON.org',copyright:'(c)2005 JSON.org',license:'http://www.crockford.com/JSON/license.html',stringify:function(arg){var c,i,l,s='',v;switch(typeof arg){case'object':if(arg){if(arg.______array=='______array'){for(i=0;i<arg.length;++i){v=this.stringify(arg[i]);if(s){s+=',';}
s+=v;}
return'['+s+']';}else if(typeof arg.toString!='undefined'){for(i in arg){v=arg[i];if(typeof v!='undefined'&&typeof v!='function'){v=this.stringify(v);if(s){s+=',';}
s+=this.stringify(i)+':'+v;}}
return'{'+s+'}';}}
return'null';case'number':return isFinite(arg)?String(arg):'null';case'string':l=arg.length;s='"';for(i=0;i<l;i+=1){c=arg.charAt(i);if(c>=' '){if(c=='\\'||c=='"'){s+='\\';}
s+=c;}else{switch(c){case'\b':s+='\\b';break;case'\f':s+='\\f';break;case'\n':s+='\\n';break;case'\r':s+='\\r';break;case'\t':s+='\\t';break;default:c=c.charCodeAt();s+='\\u00'+Math.floor(c/16).toString(16)+
(c%16).toString(16);}}}
return s+'"';case'boolean':return String(arg);default:return'null';}},parse:function(text){var at=0;var ch=' ';function error(m){throw{name:'JSONError',message:m,at:at-1,text:text};}
function next(){ch=text.charAt(at);at+=1;return ch;}
function white(){while(ch!=''&&ch<=' '){next();}}
function str(){var i,s='',t,u;if(ch=='"'){outer:while(next()){if(ch=='"'){next();return s;}else if(ch=='\\'){switch(next()){case'b':s+='\b';break;case'f':s+='\f';break;case'n':s+='\n';break;case'r':s+='\r';break;case't':s+='\t';break;case'u':u=0;for(i=0;i<4;i+=1){t=parseInt(next(),16);if(!isFinite(t)){break outer;}
u=u*16+t;}
s+=String.fromCharCode(u);break;default:s+=ch;}}else{s+=ch;}}}
error("Bad string");}
function arr(){var a=[];if(ch=='['){next();white();if(ch==']'){next();return a;}
while(ch){a.push(val());white();if(ch==']'){next();return a;}else if(ch!=','){break;}
next();white();}}
error("Bad array");}
function obj(){var k,o={};if(ch=='{'){next();white();if(ch=='}'){next();return o;}
while(ch){k=str();white();if(ch!=':'){break;}
next();o[k]=val();white();if(ch=='}'){next();return o;}else if(ch!=','){break;}
next();white();}}
error("Bad object");}
function num(){var n='',v;if(ch=='-'){n='-';next();}
while(ch>='0'&&ch<='9'){n+=ch;next();}
if(ch=='.'){n+='.';while(next()&&ch>='0'&&ch<='9'){n+=ch;}}
if(ch=='e'||ch=='E'){n+='e';next();if(ch=='-'||ch=='+'){n+=ch;next();}
while(ch>='0'&&ch<='9'){n+=ch;next();}}
v=+n;if(!isFinite(v)){error("Bad number");}else{return v;}}
function word(){switch(ch){case't':if(next()=='r'&&next()=='u'&&next()=='e'){next();return true;}
break;case'f':if(next()=='a'&&next()=='l'&&next()=='s'&&next()=='e'){next();return false;}
break;case'n':if(next()=='u'&&next()=='l'&&next()=='l'){next();return null;}
break;}
error("Syntax error");}
function val(){white();switch(ch){case'{':return obj();case'[':return arr();case'"':return str();case'-':return num();default:return ch>='0'&&ch<='9'?num():word();}}
return val();}};
function createCookie(name,value,days){value=escape(value);if(days){var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));var expires="; expires="+date.toGMTString();}
else var expires="";document.cookie=name+"="+value+expires+"; path=/";}
function readCookie(name){var nameEQ=name+"=";var ca=document.cookie.split(';');for(var i=0;i<ca.length;i++){var c=ca[i];while(c.charAt(0)==' ')c=c.substring(1,c.length);if(c.indexOf(nameEQ)==0)return unescape(c.substring(nameEQ.length,c.length));}
return null;}
function eraseCookie(name){createCookie(name,"",-1);}
var Preferences=Class.create();Preferences.prototype={_prefs:{},initialize:function(){this._prefs=this.load();},load:function(){var prefsPerm=false;var cookie=readCookie('prefs');if(cookie)var prefsPerm=JSON.parse(cookie);if(!prefsPerm)prefsPerm={};var prefsSession=false;var cookie=readCookie('prefs_session');if(cookie)prefsSession=JSON.parse(cookie);if(!prefsSession)prefsSession={};var prefs={settings:prefsSession.settings,stones:prefsSession.stones,saved:prefsPerm.saved,progress:prefsSession.progress,FLV:prefsSession.FLV};return(prefs);},save:function(){var prefsPerm={};prefsPerm['saved']=this._prefs['saved'];var cookie=JSON.stringify(prefsPerm);createCookie('prefs',cookie,30);var prefsSession={settings:this._prefs.settings,stones:this._prefs.stones,FLV:this._prefs.FLV,progress:this._prefs.progress};var cookie=JSON.stringify(prefsSession);createCookie('prefs_session',cookie);var temp=this.load();},set:function(section,name,value){if(!this._prefs[section]||name==undefined)this._prefs[section]={};if(name!==undefined)this._prefs[section][name]=value;this.save();},get:function(section,name){var value=undefined;if(this._prefs[section]!=undefined)value=this._prefs[section][name];return(value);}};var PREFS=new Preferences();
var Diamond=Class.create();Diamond.prototype={diamonds:[],initialize:function(diamondId,data){if(!diamondId)return(false);this.diamondId=diamondId;this.stoneId=diamondId;this.vendorId=null;this.sku=null;this.type='Diamond';this.carat='--';this.color='--';this.clarity='--';this.shape=null;this.cut='--';this.price=null;this.certifyOrg='--';this.certifyNumber='--';this.crown='--';this.culet='--';this.depthPercentage='--';this.tablePercentage='--';this.flourescence='--';this.girdle='--';this.length='-';this.width='-';this.height='-';this.polish='--';this.symmetry='--';this.dropzoneImage=null;this.deliverLoose=null;this.deliverSetting=null;this.loading=true;this.onload=null;this.createFavoriteOnload=false;if(data)this.setProperties(data);else this.loadProperties();},setProperties:function(data){this.vendorId=data['vendor_id'];this.sku=data['sku'];this.carat=data['carat'];this.color=data['color'];this.clarity=data['clarity'];this.shape=data['shape'];this.cut=data['cut'];this.price=data['price'];this.certifyOrg=data['cert_type'];this.certifyNumber=data['cert_number'];this.certifyImage=data['cert_image'];this.crown=data['crown'];this.culet=data['culet'];this.depthPercentage=data['depth_percentage'];this.tablePercentage=data['table_percentage'];this.flourescence=data['flourescence'];this.girdle=data['girdle'];this.length=data['length'];this.width=data['width'];this.height=data['depth'];this.polish=data['polish'];this.symmetry=data['symmetry'];this.deliverLoose=data['deliver_lose'];this.deliverSetting=data['deliver_setting'];this.loading=false;},loadProperties:function(data){if(debug)console.log('loading properties for '+this.diamondId);},getSampleStone:function(shape){var stone=new Diamond(1,{'shape':shape,'carat':0.75});switch(shape){case'Round':stone.width=6.382486;stone.length=6.357182;stone.height=3.957324;break;case'Princess':stone.width=5.403836;stone.length=5.668813;stone.height=3.993737;break;case'Emerald':stone.width=4.957760;stone.length=6.584371;stone.height=3.424812;break;case'Asscher':stone.width=5.478584;stone.length=5.601326;stone.height=3.779438;break;case'Marquise':stone.width=5.233102;stone.length=9.496150;stone.height=3.351248;break;case'Oval':stone.width=5.591456;stone.length=7.518012;stone.height=3.554235;break;case'Radiant':stone.width=5.282130;stone.length=5.886024;stone.height=3.910556;break;case'Pear':stone.width=5.634198;stone.length=8.204440;stone.height=3.574275;break;case'Heart':stone.width=6.916789;stone.length=6.406737;stone.height=3.829895;break;case'Cushion':stone.width=5.542398;stone.length=6.341550;stone.height=3.644532;break;default:return(false);}
return(stone);}};
var SettingRule=Class.create();SettingRule.prototype={initialize:function(setting,data){this.setting=setting;this.shape=data["shape"];this.caratMin=parseFloat(data["min_carat"]);this.caratMax=parseFloat(data["max_carat"]);this.prongCount=parseInt(data["prong_count"]);this.sampleWidth=parseFloat(data["sample_width"]);this.sampleHeight=parseFloat(data["sample_height"]);this.sampleLength=parseFloat(data["sample_length"]);this.sampleCarat=parseFloat(data["sample_carat"]);this.diamondImage=data["stone_image"];setting.addShape(this.shape);},checkRule:function(diamond){if(this.shape&&this.shape!=diamond.shape){if(!this.setting.dropzoneError)this.setting.dropzoneError='Diamond cannot be '+diamond.shape+' shaped';return(false);}
if(this.caratMin&&diamond.carat<this.caratMin){if(!this.setting.dropzoneError)this.setting.dropzoneError=this.shape+' diamonds must be between '+this.caratMin+' and '+this.caratMax+' carats';return(false);}
if(this.caratMax&&diamond.carat>this.caratMax){if(!this.setting.dropzoneError)this.setting.dropzoneError=this.shape+' diamonds must be between '+this.caratMin+' and '+this.caratMax+' carats';return(false);}
this.setting.dropzoneError='';diamond.dropzoneImage=this.diamondImage;return(true);}};var Setting=Class.create();Setting.prototype={initialize:function(style,data){this.type='Setting';this.position=data["position"];this.parentStyle=style;this.centerXmm=data["x"];this.centerYmm=data["y"];this.rotation=data["rotation"];this.pair=data["pair"];this.pairPosition=data["pair_position"];this.uniqueId=Math.round(Math.random()*1000000);this.shapes=[];this.settingPosition=data["position"];if(data["rules"]){this.rules=new Array();for(var t=0;t<data["rules"].length;t++)this.rules[this.rules.length]=new SettingRule(this,data["rules"][t]);}
this.dropzoneError='';},addShape:function(shape){if(this.shapes.indexOf(shape)==-1)this.shapes.push(shape);},getSample:function(shape){for(var t=0;t<this.rules.length;t++){if(this.rules[t].shape==shape){return this.rules[t];}}
return false;},checkRules:function(diamond){this.dropzoneError='';if(this.pair&&!diamond.matchingDiamonds){this.dropzoneError='Position requires a matching pair';return(false);}
if(!this.rules){return(true);}
for(var t=0;t<this.rules.length;t++){if(this.rules[t].checkRule(diamond)){this.dropzoneError='';return(true);}}
return(false);},reposition:function(width_mm,height_mm){if(!width_mm||!height_mm)return(false);if(this.stageElement){var width=Math.round(width_mm*stage.res);var height=Math.round(height_mm*stage.res);Element.show(this.stageElement);this.stageElement.style.display='';this.stageElement.style.width=width+'px';this.stageElement.style.height=height+'px';this.parentStyle.positionElement(this.stageElement,this.centerXmm,this.centerYmm);}
if(this.dropzone)this.parentStyle.positionElement(this.dropzone,this.centerXmm,this.centerYmm);},createDropzone:function(){this.destroyDropzone();this.dropzone=document.createElement('div');this.dropzone.id='style'+this.parentStyle.styleId+'_setting'+this.settingPosition+'_dropzone';this.dropzone.className='dyo_stageDropzone';this.dropzone.setAttribute('settingPosition',this.settingPosition);this.parentStyle.addSettingElement(this.dropzone);Element.setStyle(this.dropzone,{'z-index':500});this.reposition();},destroyDropzone:function(){if(!this.dropzone||!this.dropzone.parentNode)return;this.dropzone.parentNode.removeChild(this.dropzone);this.dropzone=null;},enterStage:function(){var styleWidth=this.parentStyle.styleWidth;var styleHeight=this.parentStyle.styleHeight;this.stageElement=document.createElement('div');this.stageElement.id='style'+this.parentStyle.styleId+'_setting'+this.settingPosition;this.stageElement.className="dyo_stageSetting";this.stageElement.setAttribute('settingPosition',this.settingPosition);Element.hide(this.stageElement);this.parentStyle.addSettingElement(this.stageElement);this.createDropzone();this.reposition(3,3);this.updateProperties();if(dyoTemplate.setting.enterStage)dyoTemplate.setting.enterStage(this,this.stageElement);},updateSummary:function(){stage.updateSummary('setting.updateSummary');},updateDetails:function(){stage.updateDetails('setting.updateDetails');return;if(this.detailsDiv)this.removeDetails();this.detailsDiv=document.createElement('div');this.detailsDiv.className='dyo_stageDetailItem';this.detailsDiv.innerHTML=dyoTemplate.stage.detailSetting(this,this.detailsDiv);this.detailsDiv.id='dyo_stageDetailItem_'+this.settingPosition;this.detailsDiv.setAttribute('settingPos',this.settingPosition);stage.addSettingDetails(this.detailsDiv);this.certDiv=document.createElement('div');this.certDiv.className='dyo_stageDetailItem';this.certDiv.innerHTML=dyoTemplate.stage.detailCertificate(this,this.certDiv);this.certDiv.id='dyo_stageDetailCert_'+this.settingPosition;this.certDiv.setAttribute('settingPos',this.settingPosition);stage.addCertificateDetails(this.certDiv);},removeDetails:function(){if(!this.detailsDiv)return;this.detailsDiv.parentNode.removeChild(this.detailsDiv);this.detailsDiv=null;this.certDiv.parentNode.removeChild(this.certDiv);this.certDiv=null;},exitStage:function(){if(this.diamond)this.diamond.removeFromSetting();this.diamond=null;this.removeDetails();this.destroyDropzone();if(this.stageElement){this.stageElement.parentNode.removeChild(this.stageElement);this.stageElement=null;}
if(this.sampleText){this.sampleText.parentNode.removeChild(this.sampleText);this.sampleText=null;}
if(dyoTemplate.setting.exitStage)dyoTemplate.setting.exitStage(this,this.stageElement);},activateDropzone:function(diamond){var allowed=this.checkRules(diamond);var html=dyoTemplate.stage.dropzone(this,allowed,this.dropzoneError,this.dropzone);this.dropzone.innerHTML=html;Element.show(this.dropzone);if(allowed){}},deactivateDropzone:function(){var html=dyoTemplate.stage.dropzone(this,true,null,this.dropzone);this.dropzone.innerHTML=html;if(this.diamond){Element.hide(this.dropzone);}},updateDiamond:function(){if(!this.diamond)return;Element.setStyle(this.stageElement,{'background-repeat':'no-repeat','background-position':'center'});this.reposition(this.diamond.width,this.diamond.length);var backgroundUrl=dyoConfig.diamondImage(this.diamond,stage.res,{imageType:'png',headImage:this.diamond.dropzoneImage});new BackgroundLoader(this.stageElement,backgroundUrl);},updateProperties:function(){this.updateSummary('setting.updateProperties');this.updateDetails();this.updateDiamond();if(dyoTemplate.setting.update)dyoTemplate.setting.update(this,this.stageElement);},addDiamond:function(newDiamond){if(!newDiamond){return(false);}
if(!newDiamond.diamondId){return(false);}
if(this.diamond&&newDiamond.diamondId==this.diamond.diamondId)return(true);if(newDiamond.loading){newDiamond.onloadPosition=this.position;newDiamond.onload=function(){stage.addDiamond(this,this.onloadPosition);this.onloadPosition=null;};return(true);}
if(!this.checkRules(newDiamond)){var clear=confirm(this.dropzoneError+' for this setting.\nWould you like to remove the current setting?');if(clear){stage.clearStage();stage.addDiamond(newDiamond);}
return(false);}
if(this.stageElement.style.filter)this.stageElement.style.filter='';if(this.diamond&&this.diamond.diamondId!=newDiamond.diamondId)this.diamond.removeFromSetting();this.diamond=newDiamond;this.diamond.addToSetting(this);Element.show(this.stageElement);this.updateProperties();Element.hide(this.dropzone);if(this.parentStyle.styleId==''){if(!this.sampleText){this.sampleText=document.createElement('div');this.sampleText.id='byo_settingSampleText_'+this.settingPosition;this.sampleText.className='byo_settingSampleText';this.stageElement.appendChild(this.sampleText);}
this.sampleText.innerHTML=dyoTemplate.stage.sampleText(this,this.sampleText);}
return(true);},removeDiamond:function(diamond){Element.show(this.dropzone);this.updateProperties();Element.hide(this.stageElement);if(this.sampleText)Element.hide(this.sampleText);this.diamond.removeFromSetting();this.diamond=null;return(true);}};
var Style=Class.create();Style.prototype={initialize:function(styleId,properties){if(!styleId)return;this.type="Style";this.styleId=styleId;this.settings=null;this.stage=null;this.onStage=false;this.type='Style';this.stageDiv=null;this.sizes=undefined;this.selectorDiv=null;this.deliverDate=null;this.loading=true;this.onload=null;if(properties)this.setProperties(properties);else this.loadProperties();},loadProperties:function(){if(debug)console.log('load properties');},setProperties:function(data){this.loading=false;this.styleName=data["name"];this.description=data["description"];this.manufactererSku=data["supplier_sku"];this.sku=data["sku"];this.shankImageUrl=data["headless_image"];this.styleImage=data["style_image"];this.sampleTop=data["top_image"];this.sampleSide=data["side_image"];this.styleType=data["style_type"];this.settingCount=data["setting_count"];this.metal=data["metal_type"];this.color=data["metal_color"];this.sizeable=data["sizeable"];this.sizeableAmount=data["max_resize_amount"];this.msrp=data["MSRP"];this.finish=data["finish"];this.thickness=data["thickness"];this.sidestoneShape=data["sidestone_shape"];this.price=data["retail_price"];this.style=data["style_sub_category"];this.deliverDate=data["deliver_setting"];if(data["sizes"]){this.sizes=data["sizes"];}
else if(!this.sizes)this.sizes=null;this.styleWidth=data["width"];this.styleHeight=data["length"];if(data["settings"]&&!this.settings){this.settings=new Array();var settings=data["settings"];for(var t=0;t<settings.length;t++){var setting=data["settings"][t];var position=setting["position"];this.settings[position]=new Setting(this,setting);if(this.onStage)this.settings[position].enterStage();}}
if(this.onload)this.onload();this.onload=null;},getShapes:function(){if(!this.settings[1])return([]);return(this.settings[1].shapes);},settingProperty:function(propName){if(!this.settings[1])return(undefined);if(!this.settings[1][propName])return(undefined);return(this.settings[1][propName]);}};
var Styles=Class.create();Styles.prototype={initialize:function(load){this.colors=[];this.metals=[];this.metalColors=[];this.metalColorsTemp=[];this.metalProperties={};this.styles=[];this.styleProperties={'solitaires':{'title':'Solitaire'},'fancies':{'title':'Fancy'},'bridals':{'title':'Bridal Set'}};this.onload=false;this.items=[];this.styleIds=[];if(load){this.loaded=false;var url='dyo/style_search_json.php';if(debug)console.log(url);var myAjax=new Ajax.Request(url,{method:'get',onComplete:this.saveData.bind(this)});if(debug)console.log('loading styles');}
else this.loaded=true;},saveData:function(originalRequest){if(debug)console.log('Styles loaded');var data=eval(originalRequest.responseText);var loadCount=0;for(pos in data){if(pos*0!=0)continue;loadCount++;var styleId=data[pos]['style_id'];var style=new Style(styleId,data[pos]);this.addItem(style);}
if(debug)console.log('done loading '+loadCount+' styles');if(this.onload)this.onload(this);this.loaded=true;},addItem:function(item){var metal=item.metal;var metalColor={'metal':item.metal,'color':item.color};var metalColorTemp=item.metal+'|'+item.color;if(this.colors.indexOf(item.color)==-1)this.colors.push(item.color);if(this.metals.indexOf(metal)==-1)this.metals.push(metal);if(this.styles.indexOf(item.style)==-1)this.styles.push(item.style);if(this.metalColorsTemp.indexOf(metalColorTemp)==-1){this.metalColorsTemp.push(metalColorTemp);this.metalColors.push(metalColor);}
var position=this.items.length;this.items[position]=item;this.styleIds[item.styleId]=position;},getItemById:function(id){return(this.items[id]);},getStyleById:function(styleId){var position=this.styleIds[styleId];return(this.items[position]);},getColors:function(){return(this.colors);},getMetals:function(){return(this.metals);},getMetalColors:function(){return(this.metalColors);},getStyles:function(){return(this.styles);},getVariable:function(str){str=str.replace(/[^a-zA-Z0-9]/g,"_");return('_'+str.toLowerCase());},getMetalProperty:function(metal,property){return(metal);return(this.metalProperties[metal][property]);},getStyleProperty:function(style,property){return(style);return(this.styleProperties[style][property]);},filterByColor:function(color){var newStyles=new Styles();for(var t=0;t<this.items.length;t++){if(this.items[t].color==color){newStyles.addItem(this.items[t]);}}
return(newStyles);},filterByColors:function(colors){var newStyles=new Styles();for(var t=0;t<this.items.length;t++){if(colors.indexOf(this.items[t].color)!=-1){newStyles.addItem(this.items[t]);}}
return(newStyles);},filterByMetal:function(metal){var newStyles=new Styles();for(var t=0;t<this.items.length;t++){if(this.items[t].metal==metal){newStyles.addItem(this.items[t]);}}
return(newStyles);},filterByMetals:function(metals){var newStyles=new Styles();for(var t=0;t<this.items.length;t++){if(metals.indexOf(this.items[t].metal)!=-1){newStyles.addItem(this.items[t]);}}
return(newStyles);},filterByStyles:function(styles){var newStyles=new Styles();for(var t=0;t<this.items.length;t++){if(styles.indexOf(this.items[t].style)!=-1){newStyles.addItem(this.items[t]);}}
return(newStyles);},filterByColors:function(colors){var newStyles=new Styles();for(var t=0;t<this.items.length;t++){if(colors.indexOf(this.items[t].color)!=-1){newStyles.addItem(this.items[t]);}}
return(newStyles);},filterByMetalColors:function(metalColors){var newStyles=new Styles();for(var t=0;t<this.items.length;t++){for(var i=0;i<metalColors.length;i++){if(metalColors[i]['metal']==this.items[t].metal&&metalColors[i]['color']==this.items[t].color){newStyles.addItem(this.items[t]);}}}
return(newStyles);},filterByStyle:function(style){var newStyles=new Styles();for(var t=0;t<this.items.length;t++){if(this.items[t].style==style){newStyles.addItem(this.items[t]);}}
return(newStyles);},filterByStone:function(stone){var newStyles=new Styles();for(var t=0;t<this.items.length;t++){var style=this.items[t];if(!style.settings[1]){newStyles.addItem(style);}
else{var success=style.settings[1].checkRules(stone);if(success)newStyles.addItem(style);}}
return(newStyles);}};
var StoneContainer=Class.create();StoneContainer.prototype={initialize:function(){this.ids=[];this.stones={};this.referenceIds={};this.length=0;},addStone:function(stone,referenceId){var stoneId=stone.stoneId;if(this.ids.indexOf(stoneId)!=-1){return(this.ids.indexOf(stoneId));}
this.ids.push(stoneId);this.stones[stoneId]=stone;if(referenceId!=undefined){this.referenceIds[referenceId]=stoneId;}
this.length=this.ids.length;return(this.ids.indexOf(stoneId));},removeStone:function(stone){var position=this.ids.indexOf(stone.stoneId);if(position==-1)return(false);var newIds=[];var newStones=[];for(var t=0;t<this.ids.length;t++){if(debug)console.log(this.ids[t]+' vs '+stone.stoneId);if(this.ids[t]==stone.stoneId)continue;var id=this.ids[t];var tempStone=this.byId(id);newIds.push(id);newStones[tempStone.stoneId]=tempStone;}
this.ids=newIds;this.length=this.ids.length;this.stones=newStones;return(true);},byId:function(stoneId){if(this.stones[stoneId]==undefined)return(false);return(this.stones[stoneId]);},byPosition:function(position){var stoneId=this.ids[position];return(this.byId(stoneId));},byReference:function(referenceId){var stoneId=this.referenceIds[referenceId];return(this.byId(stoneId));},getPosition:function(stone){var stoneId=stone.stoneId;return(this.ids.indexOf(stoneId));},getReferenceId:function(stone){var stoneId=stone.stoneId;for(referenceId in this.referenceIds){var tempStoneId=this.referenceIds[referenceId];if(tempStoneId==stoneId)return(referenceId);}
return(undefined);}};var StyleContainer=Class.create();StyleContainer.prototype={initialize:function(){this.ids=[];this.styles={};this.referenceIds={};this.length=0;},addStyle:function(style,referenceId){var styleId=style.styleId;if(this.ids.indexOf(styleId)!=-1){return(this.ids.indexOf(styleId));}
this.ids.push(styleId);this.styles[styleId]=style;if(referenceId!=undefined){this.referenceIds[referenceId]=styleId;}
this.length=this.ids.length;return(this.ids.indexOf(styleId));},removeStyle:function(style){var position=this.ids.indexOf(style.styleId);if(position==-1)return(false);var newIds=[];var newStyles=[];for(var t=0;t<this.ids.length;t++){if(this.ids[t]==style.styleId)continue;var id=this.ids[t];var tempStyle=this.byId(id);newIds.push(id);newStyles[tempStyle.styleId]=tempStyle;}
this.ids=newIds;this.length=this.ids.length;this.style=newStyles;return(true);},byId:function(styleId){if(!this.styles[styleId])return(false);return(this.styles[styleId]);},byPosition:function(position){var styleId=this.ids[position];return(this.byId(styleId));},byReference:function(referenceId){var styleId=this.referenceIds[referenceId];if(styleId==undefined)return(false);return(this.styles[styleId]);},getPosition:function(style){var styleId=style.styleId;return(this.ids.indexOf(styleId));},getReferenceId:function(style){var styleId=style.styleId;for(referenceId in this.referenceIds){var tempStyleId=this.referenceIds[referenceId];if(tempStyleId==styleId)return(referenceId);}
return(undefined);}};var CombinedContainer=Class.create();CombinedContainer.prototype={initialize:function(){this.combined=[];this.styles={};this.stones={};this.stoneIds=[];this.styleIds=[];this.referenceIds={};this.length=0;},addCombined:function(style,stone,referenceId){if(debug)console.log('add combined '+style.styleId+','+stone.stoneId);if(this.getPosition(style,stone)!=-1){if(debug)console.log('get position found '+this.getPosition(style,stone));return(this.getPosition(style,stone));}
this.combined.push({'styleId':style.styleId,'stoneId':stone.stoneId});if(!this.styles[style.styleId])this.styles[style.styleId]=style;if(!this.stones[stone.stoneId])this.stones[stone.stoneId]=stone;if(referenceId!=undefined){this.referenceIds[referenceId]=position;}
this.length=this.combined.length;if(debug)console.log('after add:');if(debug)console.log('this length is '+this.length);if(debug)console.log('combined length is '+this.combined.length);this.dump();return(this.getPosition(style,stone));},removeCombined:function(style,stone){var position=this.getPosition(style,stone);if(position==-1)return(false);var newCombined=[];var newStyleIds=[];var newStoneIds=[];for(var t=0;t<this.combined.length;t++){var combine=this.combined[t];if(combine.styleId==style.styleId&&combine.stoneId==stone.stoneId){continue;}
newCombined.push(combine);if(newStyleIds.indexOf(combine.styleId)==-1)newStyleIds.push(combine.styleId);if(newStoneIds.indexOf(combine.stoneId)==-1)newStoneIds.push(combine.stoneId);}
this.combined=newCombined;this.styleIds=newStyleIds;this.stoneIds=newStoneIds;var newStyles={};for(var t=0;t<this.styleIds.length;t++){var styleId=this.styleIds[t];var tempStyle=this.styles[styleId];newStyles[styleId]=tempStyle;}
this.styles=newStyles;var newStones={};for(var t=0;t<this.stoneIds.length;t++){var stoneId=this.stoneIds[t];var tempStone=this.stones[stoneId];newStones[stoneId]=tempStone;}
this.stones=newStones;this.length=this.combined.length;if(debug)console.log('after remove:');this.dump();return(true);},byPosition:function(position){if(!this.combined[position])return(false);var combine=this.combined[position];var style=this.styles[combine.styleId];var stone=this.stones[combine.stoneId];var obj={'style':style,'stone':stone};return(obj);},removePosition:function(position){var combined=this.byPosition(position);var success=this.removeCombined(combined.style,combined.stone);if(debug)console.log(success);return(success);},byReference:function(referenceId){var position=this.referenceIds[referenceId];if(position==undefined)return(false);return(this.byPosition[position]);},dump:function(){return(false);for(var t=0;t<this.combined.length;t++){console.log(t+': style '+this.combined[t].styleId+', stone '+this.combined[t].stoneId);}
if(this.combined.length==0)console.log('-: Container is empty');},getPosition:function(style,stone){for(var t=0;t<this.combined.length;t++){var combine=this.combined[t];if(combine.styleId==style.styleId&&combine.stoneId==stone.stoneId){return(t);}}
return(-1);},getReferenceId:function(style,stone){var styleId=stone.styleId;var stoneId=stone.stoneId;for(referenceId in this.referenceIds){var position=this.referenceIds[referenceId];var combined=this.byPosition(position);if(combined.stone.stoneId==stone.stoneId&&combined.style.styleId==style.styleId)return(referenceId);}
return(undefined);},getPositionsByStyle:function(style){var positions=[];for(var t=0;t<this.combined.length;t++){var combine=this.combined[t];if(combine.styleId==style.styleId)positions.push(t);}
if(positions.length<1)return(false);return(positions);},getPositionsByStone:function(stone){var positions=[];for(var t=0;t<this.combined.length;t++){var combine=this.combined[t];if(combine.stoneId==stone.stoneId)positions.push(t);}
if(positions.length<1)return(false);return(positions);},styleById:function(styleId){var style=this.styles[styleId];if(!style)return(false);return(style);},stoneById:function(stoneId){var stone=this.stones[stoneId];if(!stone)return(false);return(stone);}};
function clarityDescription(clarity){switch(clarity){case'FL':return('Flawless');case'IF':return('Internally flawless');case'VVS1':case'VVS2':return('Very, very slightly included');case'VS1':case'VS2':return('Very slightly included');case'SI1':case'SI2':return('Slightly included');case'I1':case'I2':case'I3':return('Included');}
return('');}
function colorDescription(color){switch(color){case'D':case'E':case'F':return('Colorless');case'G':case'H':case'I':return('Near colorless');case'J':case'K':case'L':case'M':return('Faint yellow');case'N':case'O':case'P':case'Q':case'R':case'S':case'T':case'U':case'V':case'W':case'X':case'Y':case'Z':return('Very light to light yellow');}}
function certificateUrl(diamond){if(!diamond||!diamond.shape)return;var url=dyoConfig.certImagesUrl;if(diamond.vendorId&&diamond.certifyImage){url+=diamond.vendorId+'/';var certImage=diamond.certifyImage.replace(/[^a-zA-Z0-9\-_]/g,'_');certImage=certImage.toUpperCase();url+=certImage+'.pdf';}
else url+='sample.jpg';return(url);}
function templateCombined(element,style,stone){element=$(element);var html=element.innerHTML;if(style&&stone)var price=(style.price*1)+(stone.price*1);else if(style)var price=style.price;else if(stone)var price=(stone.price*1);else var price='';html=template(html,'price',addCommas(parseFloat(price).toFixed(2)));var name='???';if(style)name=style.description;else if(stone)name=stone.carat+'ct '+stone.shape;html=template(html,'name',name);var deliver='???';if(style)deliver=style.deliverDate;else if(stone)deliver=stone.deliverLoose;html=template(html,'deliverDate',deliver);if(style){html=template(html,'styleId',style.styleId);html=template(html,'styleManufacturerSku',style.manufactererSku);html=template(html,'styleSku',style.sku);html=template(html,'styleType',style.styleType);html=template(html,'styleMetal',style.metal);html=template(html,'styleColor',style.color);var metalColor=style.metal;if(style.metal!='Platinum')metalColor+=' '+style.color+' Gold';html=template(html,'styleMetalColor',metalColor);html=template(html,'styleMsrp',style.msrp);html=template(html,'styleFinish',style.finish);html=template(html,'styleThickness',style.thickness);html=template(html,'stylePrice',addCommas(parseFloat(style.price).toFixed(2)));html=template(html,'styleStyle',style.style);}
else{html=template(html,'styleId','false');}
if(stone){html=template(html,'stoneId',stone.stoneId);html=template(html,'stoneSku',stone.sku);html=template(html,'stoneCarat',stone.carat);html=template(html,'stoneColor',stone.color);html=template(html,'stoneClarity',stone.clarity);html=template(html,'stoneColorDesc',colorDescription(stone.color));html=template(html,'stoneClarityDesc',clarityDescription(stone.clarity));html=template(html,'stoneShape',stone.shape);html=template(html,'stoneCut',stone.cut);html=template(html,'stonePrice',addCommas(parseFloat(stone.price).toFixed(2)));html=template(html,'stoneCertOrg',stone.certifyOrg);html=template(html,'stoneCertNumber',stone.certifyNumber);html=template(html,'stoneCertImage',stone.certifyImage);html=template(html,'stoneCertUrl',certificateUrl(stone));html=template(html,'stoneCrown',stone.crown);html=template(html,'stoneCulet',stone.culet);html=template(html,'stoneDepthPercentage',stone.depthPercentage);html=template(html,'stoneTablePercentage',stone.tablePercentage);html=template(html,'stoneFluorescence',stone.flourescence);html=template(html,'stoneGirdle',stone.girdle);html=template(html,'stoneLength',stone.length);html=template(html,'stoneWidth',stone.width);html=template(html,'stoneDepth',stone.height);html=template(html,'stonePolish',stone.polish);html=template(html,'stoneSymmetry',stone.symmetry);}
else{html=template(html,'stoneId','false');}
html=template(html,'size',getStyleSize(style.styleId));element.innerHTML=html;}
function templateStyle(element,style,stoneId){element=$(element);var html=element.innerHTML;var image='images/samples/'+style.styleImage;html=template(html,'image',image);html=template(html,'styleId',style.styleId);html=template(html,'name',style.styleName);html=template(html,'description',style.description);html=template(html,'manufacturerSku',style.manufactererSku);html=template(html,'sku',style.sku);html=template(html,'shankImageUrl',style.shankImageUrl);html=template(html,'styleImage',style.styleImage);html=template(html,'sampleTop',style.sampleTop);html=template(html,'sampleSide',style.sampleSide);html=template(html,'styleType',style.styleType);html=template(html,'settingCount',style.settingCount);html=template(html,'metal',style.metal);html=template(html,'color',style.color);var metalColor=style.metal;if(style.metal!='Platinum')metalColor+=' '+style.color+' Gold';html=template(html,'metalColor',metalColor);html=template(html,'sizeable',style.sizeable);html=template(html,'sizeableAmount',style.sizeableAmount);html=template(html,'msrp',parseFloat(style.msrp).toFixed(2));html=template(html,'finish',style.finish);html=template(html,'thickness',style.thickness);html=template(html,'sidestoneShape',style.sidestoneShape);html=template(html,'price',addCommas(parseFloat(style.price).toFixed(2)));html=template(html,'style',style.style);html=template(html,'deliverDate',style.deliverDate);var size=getStyleSize(style.styleId);var sizes=style.sizes;if(!sizes)sizes=[];var options='<select id="style_'+style.styleId+'_sizes">';for(var t=0;t<sizes.length;t++){options+='<option value="'+sizes[t]+'"';if(sizes[t]==size)options+=' selected';options+='>'+sizes[t]+'</option>';}
options+='</select>';html=template(html,'sizeOptions',options);html=template(html,'sizes',sizes.join(","));html=template(html,'size',size);if(!stoneId)stoneId='';html=template(html,'stoneId',stoneId);element.innerHTML=html;}
function templateStone(element,stone,styleId){if(!stone)return(false);element=$(element);var html=element.innerHTML;var image='images/stonethumbs/'+stone.shape.toLowerCase()+'_50x50.png';html=template(html,'image',image);html=template(html,'stoneId',stone.stoneId);html=template(html,'sku',stone.sku);html=template(html,'carat',stone.carat);html=template(html,'color',stone.color);html=template(html,'colorDesc',colorDescription(stone.color).toLowerCase());html=template(html,'clarity',stone.clarity);html=template(html,'clarityDesc',clarityDescription(stone.clarity).toLowerCase());html=template(html,'shape',stone.shape);var measureImage='images/stonedrawings/'+stone.shape.toLowerCase()+'.png';html=template(html,'measureImage',measureImage);html=template(html,'cut',stone.cut);html=template(html,'price',addCommas(parseFloat(stone.price).toFixed(2)));html=template(html,'certOrg',stone.certifyOrg);html=template(html,'certImage',stone.certifyImage);html=template(html,'certNumber',stone.certifyNumber);html=template(html,'certUrl',certificateUrl(stone));html=template(html,'crown',stone.crown);html=template(html,'culet',stone.culet);html=template(html,'depthPercentage',stone.depthPercentage);html=template(html,'tablePercentage',stone.tablePercentage);html=template(html,'fluorescence',stone.flourescence);html=template(html,'girdle',stone.girdle);html=template(html,'length',stone.length);html=template(html,'width',stone.width);html=template(html,'depth',stone.height);html=template(html,'polish',stone.polish);html=template(html,'symmetry',stone.symmetry);html=template(html,'deliverLoose',stone.deliverLoose);html=template(html,'deliverSetting',stone.deliverSetting);if(!styleId)styleId='';html=template(html,'styleId',styleId);element.innerHTML=html;}
function template(html,key,value){var reg=new RegExp('({|%7B)'+key+'(}|%7D)','g');return(html.replace(reg,value));}
var Preview=Class.create();Preview.prototype={stone:null,style:null,initialize:function(element,resolution){this.element=$(element);if(!this.element)return(false);this.baseId=this.element.id;this.resolution=resolution||20;this.stone=null;this.style=null;if(Element.getStyle(this.element,'position')!='absolute'){Element.setStyle(this.element,{'position':'relative'});}
this.styleElement=document.createElement('div');this.styleElement.id=this.baseId+'_style';this.element.appendChild(this.styleElement);this.stoneElement=document.createElement('div');this.stoneElement.id=this.baseId+'_stone';this.element.appendChild(this.stoneElement);},destroy:function(){this.element.removeChild(this.styleElement);this.element.removeChild(this.stoneElement);},setStyle:function(style){if(!style){this.clearStyle();return(false);}
this.style=style;if(this.stone&&!this.findHead(this.stone)){this.clearStyle();return(false);}
return(true);},clearStyle:function(){this.style=null;this.stoneHead=null;},findHead:function(stone){if(debug)console.log('findHead: '+stone.stoneId);this.stoneError=null;if(this.style&&this.style.settings&&this.style.settings[1]){var success=this.style.settings[1].checkRules(stone);if(!success){this.stoneError=this.style.settings[1].dropzoneError;if(debug)console.log('stone dont fit, '+this.style.styleId+' says: '+this.stoneError);return(false);}
this.stoneHead=stone.dropzoneImage;if(debug)console.log('head image is '+this.stoneHead);}
else{this.stoneHead=null;}
return(true);},setStone:function(stone){if(!stone){this.clearStone();return(false);}
if(!this.findHead(stone))return(false);this.stone=stone;return(true);},clearStone:function(){if(this.stone)this.stone.dropzoneImage=null;this.stone=null;this.stoneHead=null;},setStoneSample:function(shape){if(debug)console.log('setStoneSample');var sampleStone=this.style.settings[1].getSample(shape);var stone=new Diamond(1,{'shape':shape,'width':sampleStone.sampleWidth,'length':sampleStone.sampleLength,'height':sampleStone.sampleHeight,'carat':sampleStone.sampleCarat});if(!stone)return(false);this.setStone(stone);if(debug)console.log('set stone: '+this.stone);},drawPreview:function(){var listen=this.drawPreview_forRealz.bindAsEventListener(this);setTimeout(listen,100);},drawPreview_forRealz:function(){if(!this.element)return(false);var width=this.element.clientWidth;var height=this.element.clientHeight;var styleBackground=false;var stoneBackground=false;if(this.style){var styleWidth=this.style.styleWidth*this.resolution;var styleHeight=this.style.styleHeight*this.resolution;var styleLeft=Math.round((width/2)-(styleWidth/2));var styleTop=Math.round((height/2)-(styleHeight/2));styleBackground=dyoConfig.styleImage(this.style,this.resolution,'png');}
if(this.stone&&this.findHead(this.stone)){var stoneWidth=this.stone.width*this.resolution;var stoneHeight=this.stone.length*this.resolution;var stoneLeft=Math.round((width/2)-(stoneWidth/2));var stoneTop=Math.round((height/2)-(stoneHeight/2));if(this.style){var offsetX=this.style.settingProperty('centerXmm')*this.resolution;var offsetY=this.style.settingProperty('centerYmm')*this.resolution;stoneLeft+=offsetX;stoneTop+=offsetY;if(stoneTop<styleTop){var adjustY=Math.round((styleTop-stoneTop)/2);stoneTop+=adjustY;styleTop+=adjustY;}}
var stoneOptions={'imageType':'png'};if(this.stoneHead){stoneOptions['headImage']=this.stoneHead;}
stoneBackground=dyoConfig.diamondImage(this.stone,this.resolution,stoneOptions);}
if(styleBackground){Element.setStyle(this.styleElement,{'position':'absolute','width':styleWidth+'px','height':styleHeight+'px','left':styleLeft+'px','top':styleTop+'px'});if(this.styleElement.style.filter==undefined){Element.setStyle(this.styleElement,{'background-image':'url('+styleBackground+')','background-repeat':'no-repeat','background-position':'center'});}
else{Element.setStyle(this.styleElement,{'background-image':'','filter':'progid:DXImageTransform.Microsoft.AlphaImageLoader (src=\''+styleBackground+'\', sizingMethod=\'image\');'});}}
else{Element.setStyle(this.styleElement,{'background-image':''});if(this.styleElement.style.filter!=undefined){Element.setStyle(this.styleElement,{'filter':''});}}
if(stoneBackground){Element.setStyle(this.stoneElement,{'position':'absolute','width':stoneWidth+'px','height':stoneHeight+'px','left':stoneLeft+'px','top':stoneTop+'px'});if(this.stoneElement.style.filter==undefined){Element.setStyle(this.stoneElement,{'background-image':'url('+stoneBackground+')','background-repeat':'no-repeat','background-position':'center'});}
else{Element.setStyle(this.stoneElement,{'background-image':'','filter':'progid:DXImageTransform.Microsoft.AlphaImageLoader (src=\''+stoneBackground+'\', sizingMethod=\'image\');'});}}
else{Element.setStyle(this.stoneElement,{'background-image':''});if(this.stoneElement.style.filter!=undefined){Element.setStyle(this.stoneElement,{'filter':''});}}}};
var Sticky=Class.create();Sticky.prototype={initialize:function(element,placement,text,options){this.element=$(element);this.placement=placement;this.text=text;var options=options||{};this.timeout=options.timeout;this.className=options.className||'popout';this.vspace=options.vspace||0;this.hspace=options.hspace||0;this.createDom();},createDom:function(){this.popup=document.createElement('div');this.popup.id=this.element.id+'_popup';this.popup.className=this.className+' '+this.placement;this.popup.style.position='absolute';this.popup.innerHTML='<span>'+this.text+'</span>';document.body.appendChild(this.popup);var popupWidth=this.popup.clientWidth;var popupHeight=this.popup.clientHeight;Position.prepare();var pos=Position.cumulativeOffset(this.element);var width=this.element.clientWidth;var height=this.element.clientHeight;var top=0;var left=0;switch(this.placement){case'north':top=pos[1]-popupHeight-this.vspace;left=pos[0]+(width/2)-(popupWidth/2);break;case'northeast':top=pos[1]-popupHeight-this.vspace;left=pos[0]+width+this.hspace;break;case'east':top=pos[1]+(height/2)-(popupHeight/2);left=pos[0]+width+this.hspace;break;case'southeast':top=pos[1]+height+this.vspace;left=pos[0]+width+this.hspace;break;case'south':top=pos[1]+height+this.vspace;left=pos[0]+(width/2)-(popupWidth/2);break;case'southwest':top=pos[1]+height+this.vspace;left=pos[0]-popupWidth-this.hspace;break;case'west':top=pos[1]+(height/2)-(popupHeight/2);left=pos[0]-popupWidth-this.hspace;break;case'northwest':top=pos[1]-popupHeight-this.vspace;left=pos[0]-popupWidth-this.hspace;break;}
this.popup.style.position="absolute";this.popup.style.left=Math.round(left)+'px';this.popup.style.top=Math.round(top)+'px';if(this.timeout)this.timer=setTimeout(this.destroy.bindAsEventListener(this),this.timeout);Event.observe(this.popup,'click',this.destroy.bindAsEventListener(this));},fadeIn:function(){},fadeOut:function(){},destroy:function(){if(this.popup){this.popup.parentNode.removeChild(this.popup);this.popup=null;}
if(this.timer){clearTimeout(this.timer);this.timer=null;}}};
var Shapes={shapes:['Round','Princess','Emerald','Oval','Radiant'],selected:[],init:function(){this.element=document.getElementById('shapesDiv');if(!this.element)return(false);for(var t=0;t<this.shapes.length;t++){var shape=this.shapes[t];this.drawShape(shape);}},drawShape:function(shape){var element=document.createElement('div');element.id='shapes'+shape;this.element.appendChild(element);element.innerHTML=dyoTemplate.diamonds.shapeHTML(shape,element);this.elements[shape]=element;},clickShape:function(shape){if(this.selected.inArray(shape))this.deselectShape(shape);else this.selectShape(shape);},selectShape:function(shape){if(!this.selected.inArray(shape)){dyoTemplate.diamonds.shapeSelected(shape,this.elements[shape]);this.selected.add(shape);Search.refilter();}},deselectShape:function(shape){if(this.selected.inArray(shape)){Element.removeClassName(this.elements[shape],'selected');this.selected.remove(shape);Search.refilter();}}};document.onload=Shapes.init;
if(!Control)var Control={};Control.Slider=Class.create();Control.Slider.prototype={initialize:function(handle,track,options){var slider=this;if(handle instanceof Array){this.handles=handle.collect(function(e){return $(e)});this.handlesAlign=options.handlesAlign;}else{this.handles=[$(handle)];this.handlesAlign=options.handlesAlign||['left'];}
this.track=$(track);this.options=options||{};if(this.options.masks){this.masks=[];this.masks[0]=$(this.options.masks[0]);this.masks[1]=$(this.options.masks[1]);}else this.masks=false;this.axis=this.options.axis||'horizontal';this.increment=this.options.increment||1;this.step=parseInt(this.options.step||'1');this.range=this.options.range||$R(0,1);this.value=0;this.values=this.handles.map(function(){return 0});this.span=$(this.options.span);this.options.startSpan=$(this.options.startSpan||null);this.options.endSpan=$(this.options.endSpan||null);this.restricted=this.options.restricted||false;this.maximum=this.options.maximum||this.range.end;this.minimum=this.options.minimum||this.range.start;this.minSpan=this.options.minSpan||0;this.alignX=parseInt(this.options.alignX||'0');this.alignY=parseInt(this.options.alignY||'0');this.marginY=new Array();this.marginX=new Array();for(var t=0;t<this.handles.length;t++){this.marginY[t]=parseInt(Element.getStyle(this.handles[t],'margin-top')||0);this.marginX[t]=parseInt(Element.getStyle(this.handles[t],'margin-left')||0);}
this.trackLength=this.maximumOffset()-this.minimumOffset();this.handleLength=this.isVertical()?this.handles[0].offsetHeight:this.handles[0].offsetWidth;this.active=false;this.dragging=false;this.disabled=false;this.spanDistance=false;if(this.options.disabled)this.setDisabled();this.allowedValues=this.options.values?this.options.values.sortBy(Prototype.K):false;if(this.allowedValues){this.minimum=this.allowedValues.min();this.maximum=this.allowedValues.max();}
this.eventMouseDown=this.startDrag.bindAsEventListener(this);this.eventMouseUp=this.endDrag.bindAsEventListener(this);this.eventMouseMove=this.update.bindAsEventListener(this);this.setValue(this.options.sliderValue[0],0);this.setValue(this.options.sliderValue[2],2);this.setValue(this.options.sliderValue[1],1);Event.observe(this.track,"mousedown",this.eventMouseDown);Event.observe(document,"mouseup",this.eventMouseUp);this.initialized=true;this.updateStyles(false);},dispose:function(){var slider=this;Event.stopObserving(this.track,"mousedown",this.eventMouseDown);Event.stopObserving(document,"mouseup",this.eventMouseUp);Event.stopObserving(document,"mousemove",this.eventMouseMove);this.handles.each(function(h){Event.stopObserving(h,"mousedown",slider.eventMouseDown);});},setDisabled:function(){this.disabled=true;},setEnabled:function(){this.disabled=false;},getNearestValue:function(value,snap){if(snap&&this.allowedValues){if(value>=this.allowedValues.max())return(this.allowedValues.max());if(value<=this.allowedValues.min())return(this.allowedValues.min());var offset=Math.abs(this.allowedValues[0]-value);var newValue=this.allowedValues[0];this.allowedValues.each(function(v){var currentOffset=Math.abs(v-value);if(currentOffset<=offset){newValue=v;offset=currentOffset;}});return newValue;}
if(value>this.range.end)return this.range.end;if(value<this.range.start)return this.range.start;return value;},maintainMinSpan:function(sliderValue,handleIdx){if(handleIdx==undefined)handleIdx=this.activeHandleIdx;if(handleIdx==undefined)return(false);var before=sliderValue;if(handleIdx==0){if(sliderValue>this.values[2]-this.minSpan){sliderValue=this.getNearestValue(this.values[2]-this.minSpan);}}
if(handleIdx==1){var halfMin=(this.values[2]-this.values[0])/2;if(sliderValue<halfMin){sliderValue=halfMin;}
if(sliderValue>1-halfMin){sliderValue=1-halfMin;}}
if(handleIdx==2){if(sliderValue<this.values[0]+this.minSpan){sliderValue=this.getNearestValue(this.values[0]+this.minSpan);}}
return(sliderValue);},setValue:function(sliderValue,handleIdx,snap){if(!this.active){this.activeHandle=this.handles[handleIdx];this.activeHandleIdx=handleIdx;}
if(handleIdx==undefined)handleIdx=this.activeHandleIdx;if(handleIdx==undefined)return(false);if(this.initialized&&this.restricted){sliderValue=this.maintainMinSpan(sliderValue,handleIdx);}
if(handleIdx==1)sliderValue=this.getNearestValue(sliderValue);else sliderValue=this.getNearestValue(sliderValue,snap);if(sliderValue!=this.values[handleIdx]){this.values[handleIdx]=sliderValue;this.value=this.values[0];this.handles[handleIdx].style[this.isVertical()?'top':'left']=this.translateToPx(sliderValue,handleIdx);}
if(handleIdx==1){if(snap){this.setValue(sliderValue-(this.spanDistance/2),0,true);this.setValue(sliderValue+(this.spanDistance/2),2,true);}
else{this.values[0]=sliderValue-(this.spanDistance/2);this.values[2]=sliderValue+(this.spanDistance/2);this.handles[0].style[this.isVertical()?'top':'left']=this.translateToPx(this.values[0],0);this.handles[2].style[this.isVertical()?'top':'left']=this.translateToPx(this.values[2],2);}}
else{var range=this.values[2]-this.values[0];var middle=this.values[0]+(range/2);this.values[1]=middle;this.handles[1].style[this.isVertical()?'top':'left']=this.translateToPx(this.values[1],1);this.spanDistance=this.values[2]-this.values[0];var minPx=parseInt(this.translateToPx(this.values[0],0));var maxPx=parseInt(this.translateToPx(this.values[2],0));var totalWidth=maxPx-minPx;if(totalWidth>0){var width0=Math.round(totalWidth/2);var width2=totalWidth-width0;this.handles[0].style.width=width0+'px';this.handles[2].style.left=(maxPx-width2)+'px';this.handles[2].style.width=width2+'px';}}
if(this.masks){var mask0Left=0;var mask0Width=this.handles[0].offsetLeft;var mask1Left=this.handles[2].offsetLeft+this.handles[2].clientWidth;var mask1Width=this.track.clientWidth-mask1Left;this.masks[0].style.left=mask0Left+'px';this.masks[0].style.width=mask0Width+'px';this.masks[1].style.left=mask1Left+'px';this.masks[1].style.width=mask1Width+'px';}
if(!this.dragging||!this.event)this.updateFinished();},setValueBy:function(delta,handleIdx){if(handleIdx==undefined)handleIdx=this.activeHandleIdx;if(handleIdx==undefined)return(false);this.setValue(this.values[handleIdx||this.activeHandleIdx||0]+delta,handleIdx||this.activeHandleIdx||0);},translateToPx:function(value,handleIdx){if(handleIdx==undefined)handleIdx=this.activeHandleIdx;if(handleIdx==undefined)return(false);var px=Math.round((this.trackLength/(this.range.end-this.range.start))*(value-this.range.start)+0.01);if(handleIdx==1)px-=Math.round(this.handles[1].offsetWidth/2);if(handleIdx==2)px-=this.handles[2].offsetWidth;return(px+"px");},translateToValue:function(pixelPos,handleIdx){if(handleIdx==undefined)handleIdx=this.activeHandleIdx;if(handleIdx==undefined)return(false);if(handleIdx==1)pixelPos+=Math.round(this.handles[1].offsetWidth/2);if(handleIdx==2)pixelPos+=this.handles[2].offsetWidth;if(pixelPos<0)pixelPos=0;var value=(pixelPos/(this.trackLength)*(this.range.end-this.range.start))+this.range.start;return(value);},getRange:function(range){var v=this.values.sortBy(Prototype.K);range=range||0;return $R(v[range],v[range+1]);},minimumOffset:function(){return(this.isVertical()?this.alignY:this.alignX);},maximumOffset:function(){return(this.isVertical()?this.track.offsetHeight-this.alignY:this.track.offsetWidth-this.alignX);},isVertical:function(){return(this.axis=='vertical');},drawSpans:function(){var left=parseInt(this.handles[0].style.left);if(left*0!=0)return(false);var width=parseInt(this.handles[2].style.left)+this.handles[2].clientWidth-left;if(width*0!=0)return(false);this.span.style.left=left+'px';this.span.style.width=width+'px';},setSpan:function(span,range){if(this.isVertical()){span.style.top=this.translateToPx(range.start);span.style.height=this.translateToPx(range.end-range.start+this.range.start);}else{span.style.left=this.translateToPx(range.start);span.style.width=this.translateToPx(range.end-range.start+this.range.start);}},updateStyles:function(active){if(active)this.handles.each(function(h){Element.addClassName(h,'active')});else this.handles.each(function(h){Element.removeClassName(h,'active')});},startDrag:function(event){if(Event.isLeftClick(event)){if(!this.disabled){this.active=true;var handle=Event.element(event);var pointer=[Event.pointerX(event),Event.pointerY(event)];if(handle==this.track){}else{while((this.handles.indexOf(handle)==-1)&&handle.parentNode)
handle=handle.parentNode;this.activeHandle=handle;this.activeHandleIdx=this.handles.indexOf(this.activeHandle);this.updateStyles(true);var offsets=Position.cumulativeOffset(this.activeHandle);this.offsetX=(pointer[0]-offsets[0]);this.offsetY=(pointer[1]-offsets[1]);Event.observe(document,"mousemove",this.eventMouseMove);}
if(this.initialized&&this.options.onStartDrag)this.options.onStartDrag(event,this);}
Event.stop(event);}},update:function(event){if(this.active){if(!this.dragging)this.dragging=true;this.draw(event);if(navigator.appVersion.indexOf('AppleWebKit')>0)window.scrollBy(0,0);Event.stop(event);}},draw:function(event,snap){var pointer=[Event.pointerX(event),Event.pointerY(event)];var offsets=Position.cumulativeOffset(this.track);pointer[0]-=this.offsetX+offsets[0];pointer[1]-=this.offsetY+offsets[1];this.event=event;this.setValue(this.translateToValue(this.isVertical()?pointer[1]:pointer[0]),undefined,snap);if(this.initialized&&this.options.onSlide)
this.options.onSlide(this.values.length>1?this.values:this.value,this);},endDrag:function(event){if(this.active&&this.dragging){this.draw(event,true);this.finishDrag(event,true);if(this.initialized&&this.options.onEndDrag)this.options.onEndDrag(event,this);Event.stop(event);}
this.active=false;this.dragging=false;Event.stopObserving(document,"mousemove",this.eventMouseMove);this.updateStyles(false);},finishDrag:function(event,success){this.active=false;this.dragging=false;this.updateFinished();},updateFinished:function(){if(this.initialized&&this.options.onChange)
this.options.onChange(this.values.length>1?this.values:this.value,this);this.event=null;this.updateStyles(false);}};