var Order = function (){
	return {
		cache				: {},
		options				: {	
								'productConfigs':null,
								'productNames':null,
								'formId':null
							},
		currentItem			: 0,
		currentQty			: {'home':1,'pro':1,'upgrade':1},
		init 				: function(product_configs,product_names,form_id){
								Order.options.productConfigs = product_configs;
								Order.options.productNames = product_names;
								Order.options.formId = form_id;
								Order.cache['products'] = {};
								
								var curent_radio = jQuery(":radio[name='radio_product_type'][checked]");
								Order.currentItem = curent_radio.val();
								if (curent_radio.length>0) Order.changeRadioBox(curent_radio);
								
								
								jQuery(":radio[name='radio_product_type_home']").click(function(){
									Order.changeRadioBox(this);
								});
								jQuery(":radio[name='radio_product_type_pro']").click(function(){
									Order.changeRadioBox(this);
								});
								
								
								
								jQuery(":input[name='_qty']").keyup(function(){
									Order.changeQty(this);
								});
								jQuery(":input[name='_qty'],#key_upgrade").focus(function(){
									var prName = this.id.split('_')[1];
									Order.changeFocus(prName);
								});
								jQuery(":input[name='_qty'],#key_upgrade").click(function(){
									var prName = this.id.split('_')[1];
									Order.changeFocus(prName);
								});
								jQuery("a[href$='#submit']").click(function(){
									var prName = this.id.split('_')[1];
									//Order.changeFocus(prName);
									var objSelect = jQuery('#select_product_type_'+prName);
									jQuery('#quota').val(objSelect.val());
									jQuery('#'+Order.options.formId).submit();
								});
								
								jQuery('#'+Order.options.formId).submit(function(){
									return Order.prepareForm();
								});
								
								
								//upgrade license box
								jQuery('#fmUpgradeLicenseSubmit').removeAttr('href');
								
								jQuery("#box_upgrade_licesne_input_key").keyup(function(e){
									//fix activation code mistakes
									if (e.which != 32 && e.which != 13 && e.which != 0 && e.which!=8 &&
										e.which != 37 && e.which != 39 && e.which != 38 && e.which != 40 && //arrows
										e.which != 45 && e.which != 36 && e.which != 33 && e.which != 46 && e.which != 35 && e.which != 34 // insert home pgup delete end pgdown 
										){
										
									
										var value = this.value;
										value = value.replace(/ |\t|\n|,|\.|\/|\?|@|#|$|%|^|&|\*|\(|\)|\-|=|\+/g,'');
										
										value = value.split('-');
										
										value = value.join('');
										
										var j=3,k=1; // steps
										var tmpvalue = '';
										
										for (var i = 0; i<value.length; i++){
											
											tmpvalue = tmpvalue+''+value.charAt(i);
											
											if (i==11) break;
											if (k==j){
												tmpvalue = tmpvalue+'-';
												j++;
												k=0;
											}
											k++;
										}
										this.value = tmpvalue;
										
										jThis = jQuery(this);
										
									}
									if (this.value.split('-').join('').length >= 12){
										jQuery('#fmUpgradeLicenseSubmit').attr('class','upgradeContinueOn').unbind().attr('href','#continue').click(function(){
											jQuery('#fmUpgradeLicense').submit();
											//Order.getUpgradeOptions(this)
										});
									}else{
										jQuery('#fmUpgradeLicenseSubmit').removeAttr('href').attr('class','upgradeContinueOff').unbind();
									}
								});
								
								jQuery("#box_upgrade_licesne_input_key").keyup();
							}, 
		
		changeRadioBox 	   : function(obj){
								//jQuery(":radio[name='radio_product_type']").attr('checked',false);
								
								var value = jQuery(obj).val();
								jQuery(obj).attr('checked',true);
								jQuery(obj).attr('disabled',false);
								if (Order.currentItem!=value){
									Order.currentItem = value;
									//jQuery('.rselect').attr('disabled',true);
									
									var prName = Order.options.productNames[Order.currentItem];
									
									var objSelect = jQuery('#select_product_type_'+prName);
									Order.changeCombo(objSelect);
								}
							},
		_generateOptions	: function(obj){
								var prName = Order.options.productNames[Order.currentItem];
								var key;
								var newOptions = [];
								
								newOptions[newOptions.length] = new Option('Please Select...', '', false, false);
								for(key in obj){
									var qty = Order.currentQty[prName];
									var price = Order.calcPrice( obj[key]['price'], Order.currentQty[prName], Order.currentItem , key);
									newOptions[newOptions.length] = new Option(obj[key]['desc']+' - $'+price, obj[key]['value'], false, false)
								}
								return newOptions;
							},
		changeCombo			: function(objSelect){
								var value = Order.currentItem;
								//if (Order.cache['products'][value]==null || typeof Order.cache['products'][value] == 'undefined'){
									//generate options
									Order.cache['products'][value] = Order._generateOptions(Order.options.productConfigs[Order.currentItem]);
								//}
								//find selected index
								var selectedindex = false;
								for (var i=0; i<objSelect[0].options.length; i++){
									if (objSelect[0].options[i].selected){
										selectedindex = i; break;
									} 
								}
								
								//change combo
								objSelect[0].options.length = 0;
								for (var i=0; i<Order.cache['products'][value].length; i++){
									var newitem_index = objSelect[0].options.length;
									objSelect[0].options[newitem_index] = Order.cache['products'][value][i];
									if (selectedindex==i){
										objSelect[0].options[newitem_index].selected = 1;
									}
								}
							},
		calcPrice			: function(price,qty,pid,key){
								var new_price = 0;
								if (qty<=0) qty =1;
								var main_discount = Order.options.productConfigs[pid][key]['current_discount']?Order.options.productConfigs[pid][key]['current_discount']:Order.options.productConfigs[pid][key]['standard_discount'];
								var discount_type = Order.options.productConfigs[pid][key]['current_discount_type']?Order.options.productConfigs[pid][key]['current_discount_type']:'standart';
								switch (discount_type){
									case 'percent':
											var price_dicounded = (((100-main_discount) * price)/100).toFixed(2);
											new_price = price_dicounded;
											break;
									case 'dollar':
											var price_dicounded = (price - main_discount).toFixed(2);
											new_price = price_dicounded;
											break;
									case 'standart':
				
											if (qty>=1 && qty<3){
				
												var price_dicounded = price;
												new_price = price_dicounded;
											}
											if (qty>=3){
				
												var price_dicounded = (((100-main_discount) * price)/100);
												new_price = price_dicounded;
												new_price = new_price.toFixed(2);
											}
											break;
									default:
											new_price = price;
										break;
										
								}
								new_price = new_price + '';
								if (new_price.split('.')[1]!='undefined' && new_price.split('.')[1].length==1){
									new_price = new_price+''+'0';
								}
								if (new_price.split('.')[1]!='undefined' && new_price.split('.')[1].length==0){
									new_price = new_price+''+'00';
								}
								 
								return new_price;
							},
		changeQty			: function(obj){
								var value = jQuery(obj).val();
								if (value == ''){
									return false;
								}else if (value < 1){
									value = 1;
									jQuery(obj).val(value);
								}else if (value.indexOf('.')!=-1){
									value = Math.round(value);
									jQuery(obj).val(value);
								}
								
								var prName = Order.options.productNames[Order.currentItem];
								var key;
								// just clear cache for old options
								if ((Order.currentQty[prName]<3 && value>=3) || (Order.currentQty[prName]>=3 && value<3)){
									for (key in Order.options.productNames){
										if (Order.options.productNames[key] == prName){
											Order.cache['products'][key] = null;
										}
									}
								}
								Order.currentQty[prName] = value;
								
								// enable combobox and change items
								var objSelect = jQuery('#select_product_type_'+prName);
								Order.changeCombo(objSelect);
							},
		
		changeFocus			: function (prName){
								
								if (Order.options.productNames[Order.currentItem] != prName){
									var key;
									//jQuery('.rselect').attr('disabled',true);
									for (key in Order.options.productNames){
										
										if (Order.options.productNames[key] == prName){
											Order.currentItem = key;
											//jQuery(":radio[name='radio_product_type'][value='"+key+"']").attr('checked',true);
											break;
										}
									}
									//jQuery('#select_product_type_'+prName).attr('disabled',false);
								}
							},
		prepareForm			: function (){
								var prName = Order.options.productNames[Order.currentItem];
								
								var quota = jQuery('#quota').val();
								var qty = jQuery('#qty_'+prName).val();
								if (qty<0) qty = 1;
								if (quota==''){
									alert('Please select product first!');
									return false;
								}
								jQuery("input[name='qty']").val(qty);
								return true;
							}
	}
}();	