Calendar.setup=function(params){function param_default(pname,def){if(typeof params[pname]=="undefined"){params[pname]=def;}};param_default("inputField",null);param_default("displayArea",null);param_default("button",null);param_default("eventName","click");param_default("ifFormat","%Y/%m/%d");param_default("daFormat","%Y/%m/%d");param_default("singleClick",true);param_default("disableFunc",null);param_default("dateStatusFunc",params["disableFunc"]);param_default("dateText",null);param_default("firstDay",null);param_default("align","Br");param_default("range",[1900,2999]);param_default("weekNumbers",true);param_default("flat",null);param_default("flatCallback",null);param_default("onSelect",null);param_default("onClose",null);param_default("onUpdate",null);param_default("date",null);param_default("showsTime",false);param_default("timeFormat","24");param_default("electric",true);param_default("step",2);param_default("position",null);param_default("cache",false);param_default("showOthers",false);param_default("multiple",null);var tmp=["inputField","displayArea","button"];for(var i in tmp){if(typeof params[tmp[i]]=="string"){params[tmp[i]]=document.getElementById(params[tmp[i]]);}}if(!(params.flat||params.multiple||params.inputField||params.displayArea||params.button)){alert("Calendar.setup:\n  Nothing to setup (no fields found).  Please check your code");return false;}function onSelect(cal){var p=cal.params;var update=(cal.dateClicked||p.electric);if(update&&p.inputField){p.inputField.value=cal.date.print(p.ifFormat);if(typeof p.inputField.onchange=="function")p.inputField.onchange();}if(update&&p.displayArea)p.displayArea.innerHTML=cal.date.print(p.daFormat);if(update&&typeof p.onUpdate=="function")p.onUpdate(cal);if(update&&p.flat){if(typeof p.flatCallback=="function")p.flatCallback(cal);}if(update&&p.singleClick&&cal.dateClicked)cal.callCloseHandler();};if(params.flat!=null){if(typeof params.flat=="string")params.flat=document.getElementById(params.flat);if(!params.flat){alert("Calendar.setup:\n  Flat specified but can't find parent.");return false;}var cal=new Calendar(params.firstDay,params.date,params.onSelect||onSelect);cal.showsOtherMonths=params.showOthers;cal.showsTime=params.showsTime;cal.time24=(params.timeFormat=="24");cal.params=params;cal.weekNumbers=params.weekNumbers;cal.setRange(params.range[0],params.range[1]);cal.setDateStatusHandler(params.dateStatusFunc);cal.getDateText=params.dateText;if(params.ifFormat){cal.setDateFormat(params.ifFormat);}if(params.inputField&&typeof params.inputField.value=="string"){cal.parseDate(params.inputField.value);}cal.create(params.flat);cal.show();return false;}var triggerEl=params.button||params.displayArea||params.inputField;triggerEl["on"+params.eventName]=function(){var dateEl=params.inputField||params.displayArea;var dateFmt=params.inputField?params.ifFormat:params.daFormat;var mustCreate=false;var cal=window.calendar;if(dateEl)params.date=Date.parseDate(dateEl.value||dateEl.innerHTML,dateFmt);if(!(cal&&params.cache)){window.calendar=cal=new Calendar(params.firstDay,params.date,params.onSelect||onSelect,params.onClose||function(cal){cal.hide();});cal.showsTime=params.showsTime;cal.time24=(params.timeFormat=="24");cal.weekNumbers=params.weekNumbers;mustCreate=true;}else{if(params.date)cal.setDate(params.date);cal.hide();}if(params.multiple){cal.multiple={};for(var i=params.multiple.length;--i>=0;){var d=params.multiple[i];var ds=d.print("%Y%m%d");cal.multiple[ds]=d;}}cal.showsOtherMonths=params.showOthers;cal.yearStep=params.step;cal.setRange(params.range[0],params.range[1]);cal.params=params;cal.setDateStatusHandler(params.dateStatusFunc);cal.getDateText=params.dateText;cal.setDateFormat(dateFmt);if(mustCreate)cal.create();cal.refresh();if(!params.position)cal.showAtElement(params.button||params.displayArea||params.inputField,params.align);else cal.showAt(params.position[0],params.position[1]);return false;};return cal;};;OptionDependent=Class.create();OptionDependent.prototype={oIds:[],oldV:[],oldO:[],childrenVals:[],indByValue:[],valsByOption:[],optionByValue:[],univValsByOption:[],childOIdsByO:[],previousIds:[],childrenByOption:[],initialize:function(config){this.config=config;this.load();var l=this.oIds.length;for(var i=0;i<l;i++){var ll=this.valsByOption[this.oIds[i]].length;while(ll--){if(this.childrenVals.indexOf(this.valsByOption[this.oIds[i]][ll])==-1){if(!this.univValsByOption[this.oIds[i]])
this.univValsByOption[this.oIds[i]]=[];this.univValsByOption[this.oIds[i]].push(this.valsByOption[this.oIds[i]][ll]);}}
var ids=this.getChildrenOptionIds(this.oIds[i]);if(ids.length>0)
this.childOIdsByO[this.oIds[i]]=ids;}
while(l--)
if(this.childOIdsByO[this.oIds[l]])
this.reloadOptions(this.oIds[l],[],[]);},load:function(){var c=0;$$('.product-custom-option').each(function(element){var optionId=0;element.name.sub(/[0-9]+/,function(match){optionId=parseInt(match[0]);});if(!this.oldO[optionId]){this.oldO[optionId]={};this.oldO[optionId].visible=true;this.valsByOption[optionId]=[];this.oIds.push(optionId);var c=0;}
if(element.type=='radio'||element.type=='checkbox'){if(c==0)
this.oldO[optionId].firstelement=element;if(element.value!=''){var valueId=parseInt(element.value);this.indByValue[valueId]=c;if(this.config[valueId]){if(this.config[valueId][0].length>0){if(!this.childOIdsByO[optionId])
this.childOIdsByO[optionId]=[];this.childOIdsByO[optionId]=this.childOIdsByO[optionId].concat(this.config[valueId][0]);}
if(this.config[valueId][1]){this.childrenVals=this.childrenVals.concat(this.config[valueId][1]);if(!this.childrenByOption[optionId])
this.childrenByOption[optionId]=[];this.childrenByOption[optionId]=this.childrenByOption[optionId].concat(this.config[valueId][1]);}}
this.valsByOption[optionId].push(valueId);this.optionByValue[valueId]=optionId;this.oldV[valueId]={};this.oldV[valueId].element=element;this.oldV[valueId].visible=true;}
if(element.type=='radio'){element.observe('click',this.reloadChildrenTypeRadio.bind(this,optionId,element.value));}else{element.observe('click',this.reloadChildrenTypeCheckbox.bind(this,optionId));}}else if(element.hasClassName('datetime-picker')){if(!this.oldO[optionId].element)
this.oldO[optionId].element=element;}else if(element.type=='select-one'||element.type=='select-multiple'){this.oldO[optionId].element=element;var options=$A(element.options);for(var i=0,len=options.length;i<len;++i){if(options[i].value!=''){var valueId=parseInt(options[i].value);this.indByValue[valueId]=i;if(this.config[valueId]){if(this.config[valueId][0].length>0){if(!this.childOIdsByO[optionId])
this.childOIdsByO[optionId]=[];this.childOIdsByO[optionId]=this.childOIdsByO[optionId].concat(this.config[valueId][0]);}
if(this.config[valueId][1]){this.childrenVals=this.childrenVals.concat(this.config[valueId][1]);if(!this.childrenByOption[optionId])
this.childrenByOption[optionId]=[];this.childrenByOption[optionId]=this.childrenByOption[optionId].concat(this.config[valueId][1]);}}
this.valsByOption[optionId].push(valueId);this.optionByValue[valueId]=optionId;this.oldV[valueId]={};this.oldV[valueId].visible=true;this.oldV[valueId].name=options[i].text;}}
if(element.type=='select-one'){element.observe('change',this.reloadChildrenTypeSelectOne.bind(this,element,optionId));}else{element.observe('change',this.reloadChildrenTypeSelectMultiple.bind(this,element,optionId));}}else{this.oldO[optionId].element=element;}
c++;}.bind(this));},getChildrenOptionIds:function(id){if(this.previousIds[id])
return[];this.previousIds[id]=true;if(!this.childrenByOption[id]&&!this.childOIdsByO[id])
return[];var optionIds=[];if(this.childOIdsByO[id]){this.childOIdsByO[id]=this.uniq(this.childOIdsByO[id]);optionIds=optionIds.concat(this.childOIdsByO[id]);}
if(this.childrenByOption[id]){var ids=this.uniq(this.childrenByOption[id]);var l=ids.length;while(l--)
if(optionIds.indexOf(this.optionByValue[ids[l]])==-1)
optionIds.push(this.optionByValue[ids[l]]);}
var l=optionIds.length;while(l--){var ids=this.getChildrenOptionIds(optionIds[l]);if(ids.length>0){this.childOIdsByO[optionIds[l]]=ids;optionIds=optionIds.concat(ids);}}
return optionIds;},showOption:function(id,element){if(!this.oldO[id].visible){var dd=element.up('dd');dd.show();dd.previous().show();this.oldO[id].visible=true;}},hideOption:function(id){if(this.oldO[id].visible){var element=this.oldO[id].element?this.oldO[id].element:this.oldO[id].firstelement;if(element.hasClassName('datetime-picker')){element.selectedIndex=0;}else if(element.type=='text'||element.type=='textarea'){element.value='';}
var dd=element.up('dd');dd.hide();dd.previous().hide();this.oldO[id].visible=false;}},showValue:function(id,valueId,element){if(element){element.up('li').show();this.showOption(id,element);}else{var ind=this.oldO[id].element.options.length;this.oldO[id].element.options[ind]=new Option(this.oldV[valueId].name,valueId);this.indByValue[valueId]=ind;this.showOption(id,this.oldO[id].element);}
this.oldV[valueId].visible=true;},resetValue:function(id,valueId,element){if(element){if(element.checked)
element.checked=false;}else{var ind=this.indByValue[valueId];if(this.oldO[id].element.options[ind].selected){if(this.oldO[id].element.type=='select-one')
this.oldO[id].element.selectedIndex=0;else
this.oldO[id].element.options[ind].selected=false;}}},hideValue:function(id,valueId,element){this.resetValue(id,valueId,element);if(element){element.up('li').hide();}else{var ind=this.indByValue[valueId];this.oldO[id].element.options[ind]=null;this.indByValue[valueId]=null;}
this.oldV[valueId].visible=false;},reloadValues:function(id,ids){var element=null;var hasHidden=false;var l=this.valsByOption[id].length;for(var i=0;i<l;i++){if(ids.indexOf(this.valsByOption[id][i])!=-1){if(this.oldV[this.valsByOption[id][i]].element)
element=this.oldV[this.valsByOption[id][i]].element;if(!this.oldV[this.valsByOption[id][i]].visible)
this.showValue(id,this.valsByOption[id][i],element);else
this.resetValue(id,this.valsByOption[id][i],element);}}
while(l--){if(ids.indexOf(this.valsByOption[id][l])==-1&&this.oldV[this.valsByOption[id][l]].visible){if(this.oldV[this.valsByOption[id][l]].element)
element=this.oldV[this.valsByOption[id][l]].element;this.hideValue(id,this.valsByOption[id][l],element);hasHidden=true;}}
if(!element&&hasHidden){l=this.oldO[id].element.options.length;for(i=0;i<l;i++)
this.indByValue[this.oldO[id].element.options[i].value]=i;}},reloadOptions:function(id,optionIds,valueIds){var a=[];var l=valueIds.length;while(l--){if(!a[this.optionByValue[valueIds[l]]])
a[this.optionByValue[valueIds[l]]]=[];a[this.optionByValue[valueIds[l]]].push(valueIds[l]);}
l=this.childOIdsByO[id].length;while(l--){if(a[this.childOIdsByO[id][l]]){if(this.univValsByOption[this.childOIdsByO[id][l]])
a[this.childOIdsByO[id][l]]=a[this.childOIdsByO[id][l]].concat(this.univValsByOption[this.childOIdsByO[id][l]]);this.reloadValues(this.childOIdsByO[id][l],a[this.childOIdsByO[id][l]]);}else if(this.univValsByOption[this.childOIdsByO[id][l]]){this.reloadValues(this.childOIdsByO[id][l],this.univValsByOption[this.childOIdsByO[id][l]]);}else if(optionIds.indexOf(this.childOIdsByO[id][l])!=-1){this.showOption(this.childOIdsByO[id][l],this.oldO[this.childOIdsByO[id][l]].element);}else{this.reloadValues(this.childOIdsByO[id][l],[]);this.hideOption(this.childOIdsByO[id][l]);}}},reloadChildrenTypeRadio:function(optionId,valueId){if(this.childOIdsByO[optionId]){if(!this.config[valueId]){this.reloadOptions(optionId,[],[]);}else{this.reloadOptions(optionId,this.config[valueId][0],this.config[valueId][1]);}
opConfig.reloadPrice();}},reloadChildrenTypeCheckbox:function(optionId){if(this.childOIdsByO[optionId]){var optionIds=[];var valueIds=[];var l=this.valsByOption[optionId].length;while(l--){if(this.oldV[this.valsByOption[optionId][l]].element.checked&&this.config[this.valsByOption[optionId][l]]){if(this.config[this.valsByOption[optionId][l]][0].length>0)
optionIds=optionIds.concat(this.config[this.valsByOption[optionId][l]][0]);if(this.config[this.valsByOption[optionId][l]][1].length>0)
valueIds=valueIds.concat(this.config[this.valsByOption[optionId][l]][1]);}}
this.reloadOptions(optionId,this.uniq(optionIds),this.uniq(valueIds));opConfig.reloadPrice();}},reloadChildrenTypeSelectOne:function(element,optionId){var valueId=element.value;if(this.childOIdsByO[optionId]){if(valueId==''||!this.config[valueId]){this.reloadOptions(optionId,[],[]);}else{this.reloadOptions(optionId,this.config[valueId][0],this.config[valueId][1]);}
opConfig.reloadPrice();}},reloadChildrenTypeSelectMultiple:function(element,optionId){if(this.childOIdsByO[optionId]){var options=$A(element.options);var optionIds=[];var valueIds=[];var l=options.length;while(l--){if(options[l].selected&&this.config[options[l].value]){if(this.config[options[l].value][0].length>0)
optionIds=optionIds.concat(this.config[options[l].value][0]);if(this.config[options[l].value][1].length>0)
valueIds=valueIds.concat(this.config[options[l].value][1]);}}
this.reloadOptions(optionId,this.uniq(optionIds),this.uniq(valueIds));opConfig.reloadPrice();}},uniq:function(a){var l=a.length,b=[],c=[];while(l--)
if(c[a[l]]==undefined)b[b.length]=c[a[l]]=a[l];return b;}}
