﻿Number.prototype.vPrice = function() {
	var conf = Companies.price;
	var str = new String(conf.template);
	var m = this*conf.multi;
	str = str.replace('%s',conf.tag);
	str = str.replace('%p',m.toFixed(2));
	return str;
}

function isInteger (s) {
      var i;

      if (isEmpty(s))
      if (isInteger.arguments.length == 1) return 0;
      else return (isInteger.arguments[1] == true);

      for (i = 0; i < s.length; i++)
      {
         var c = s.charAt(i);

         if (!isDigit(c)) return false;
      }

      return true;
}
   
function isEmpty(s) { return ((s == null) || (s.length == 0)) }
function isDigit (c) { return ((c >= "0") && (c <= "9")) }

function array_push (arguments,array) {
    // http://kevin.vanzonneveld.net
    // *     example 1: array_push(['kevin','van'], 'zonneveld');
    // *     returns 1: 3
 
    var i, argv = arguments, argc = argv.length;
 
    for (i=1; i < argc; i++){
        array[array.length++] = argv[i];
    }
 
    return array.length;
}

var Companies = new Object;
//Companies.sizes = Array('predicted_total','s','m','l','xl','xxl');
Companies.price = new Object;
Companies.priceBreaks = new Array;
Companies.showPrice = 1;
Companies.path = '/order/admin/';

Companies.setupPrice = function(template,tag,multi) {
	this.price.template = template;
	this.price.tag = tag;	
	this.price.multi = multi;
}

Companies.getSizes = function(type) {
	switch(type) {
		case 'Y': return this.sizesYouth; break;
		default: return this.sizes; break;
	}
}

Companies.defineBreak = function(id,min,max,price) {
	var row = [min,max,price];
	Companies.priceBreaks[id-1] = row;	
}

Companies.addToOrder = function(id,confirm) {
	
	if(!confirm) { var confirm = 'false'; }

	var sizesType = $('sizes_type_'+id).value;
	var sizesArr = this.getSizes(sizesType);
	
	var options = document.getElementsByClassName('opt_check',$('order_form'+id));
	var optionsArr = Array();
	acnt = 0;
	for(var i = 0; i < options.length; i++) {		
		if(options[i].checked) { 
			if(options[i].value) { optionsArr[acnt] = options[i].value; acnt++; }
		}
	}
	
	var opt = optionsArr.toString();
	//alert(opt);
	
	var productMin = $('product_min'+id).value;
	var quantity = 0;
	
	for(var i = 0; i < sizesArr.length; i++) {
		var q = eval($('size_'+sizesArr[i]+id).value);
		if(isInteger(q)) { quantity += q; }
	}
	
	if(quantity >= productMin) {
	
		$('order_button'+id).disabled=true;
	
		var fm = $('order_form'+id);
		var s = Form.serialize(fm);
		
		var resp = function(originalRequest) {
			
			var info = originalRequest.responseText.evalJSON();
			if(info.confirmError) {
				alert("You can't add the same product again.");
				/*if(confirm('test')) {
					$('order_button'+id).disabled = false;
					Companies.addToOrder(id,'true');
				} else {
				}*/
			} else {
				$('order_button'+id).disabled = false;
				$('order_button'+id).innerHTML = 'Update order &raquo;';
				Companies.updateStatus(id,info);			
				Companies.response(info.info,id);
			}
		}
		
		var pars = s+'&orders_products__options='+opt+'&orders_products__options_price='+Companies.optionsPrice(id)+'&confirmed='+confirm;
		var args = {method:'post',parameters: pars, onComplete: resp};
		url = Companies.path+'orders_front/addToOrder';
		var orderRequest = new Ajax.Request(url,args);	
		
	} else {
		alert('The minimum order for this product is '+productMin+' pieces.  Please correct your entry to reflect this minimum in order to add this product.');
	}
}

Companies.updateStatus = function(id,info) {
	var q = new Number(info.quantity);
	
	if(q > 0) {
	
		var totalPrice = new Number(info.total);
		totalPrice = totalPrice.vPrice();
	
		html = '<b>'+info.quantity+'</b> items in '+info.options+' sets of options';
		//if(Companies.showPrices == 1) { html += ' ('+totalPrice+')'; }
		$('p_status_icon'+id).src = '/public/images/front/product_inorder.gif';
		Element.show('submit_link'+id+'change');
		Element.hide('submit_link'+id+'add');
	} else {
		html = 'Not in order';
		$('p_status_icon'+id).src = '/public/images/front/product_inorder_na.gif';
		Element.hide('submit_link'+id+'change');
		Element.show('submit_link'+id+'add');
	}
	$('p_status_info'+id).innerHTML = html;
		
	Companies.updateTotal();
}

Companies.updateTotal = function() {
	if(Companies.showPrices == 1) {
		var resp = function(originalRequest) {
			$('order_total').innerHTML = originalRequest.responseText;
		}
		var pars = '&foo=true';
		var args = {method:'post',parameters: pars,onComplete: resp};
		var url = Companies.path+'orders_front/total';
		var req = new Ajax.Request(url,args);
	}
}

function toggleCheckbox(id) {
	var el = $(id);
	if(el.checked) {
		el.checked = false;
	} else {
		el.checked = 'checked';
	}
}

Companies.response = function(info,id) {
	if(confirm(info+'\n\n'+'Would you like to add this product with different set of options?\n\nClick OK to add this product again\nClick Cancel to proceed with the order')) {
		Companies.loadOptionsSet(id,'new');
	} else {
		Element.hide('add'+id);
	}
}

Companies.optionsPrice = function(id) {
	var options = document.getElementsByClassName('opt_check',$('order_form'+id));
	var optionsArr = Array();
	var optionsPrice = 0;
	for(var i = 0; i < options.length; i++) {		
		if(options[i].checked) { optionsPrice += options[i].attributes.price.value*1; }
	}
	return optionsPrice*1;
}

Companies.getPriceForBreak = function(amount) {
	var p = Companies.priceBreaks[0][2];
	for(var i = 0; i < Companies.priceBreaks.length; i++) {		
		var min = Companies.priceBreaks[i][0];
		if(amount > min) { p = Companies.priceBreaks[i][2]; }
	}	
	return p;
}

Companies.countPrice = function(id) {
	
	var single_price = ($('price'+id).value*1)+this.optionsPrice(id);
	var sizesType = $('sizes_type_'+id).value;
	var sizesArr = this.getSizes(sizesType);
	
	var quantity = 0;
	
	for(var i = 0; i < sizesArr.length; i++) {
		var q = $('size_'+sizesArr[i]+id).value;
		if(isInteger(q)) { quantity += eval(q); } else { $('size_'+sizesArr[i]+id).value = 0; }
	}
	
	var price = Companies.getPriceForBreak(quantity);
	var total_price = quantity * eval(single_price);
	return total_price.vPrice();
}

Companies.calculatePrice = function(id) {
	
	/*if(Companies.showPrice == 1) {
		var total_price = this.countPrice(id);
		$('total_price'+id).innerHTML = total_price;
	}*/

}

Companies.loadOptionsSet = function(pid,oid) {
	var target = 'optionsSet'+pid;
	var sel = 'optionsSetId'+pid;
	
	if($(sel)) {
		if(!oid) { var value = $(sel).options[$(sel).selectedIndex].value; }
		else { var value = oid; }
	} else {
		if(!oid) { var value = 0; }
		else { var value = oid; }
	}
	
	var resp = function(req) {
		$(target).innerHTML = req.responseText;		
	}

	var pars = "id="+value+"&pid="+pid;
	var args = {method:'post',parameters: pars, onComplete: resp,evalScripts:true};
	url = Companies.path+'orders_front/optionsSet';
	var orderRequest = new Ajax.Updater(target,url,args);
	$(target).innerHTML = Orders.loading;	
}

Companies.deleteOptionsSet = function(pid,oid) {
	var target = 'optionsSet'+pid;
	var sel = 'optionsSetId'+pid;
	if(!oid) { var value = $(sel).options[$(sel).selectedIndex].value; }
	else { var value = oid; }
	
	var resp = function(req) {
		//alert(req.responseText);
		var info = req.responseText.evalJSON();
		Companies.loadOptionsSet(pid,'last');
		Companies.updateStatus(pid,info);
	}

	var pars = "id="+value+"&pid="+pid;
	var args = {method:'post',parameters: pars, onComplete: resp};
	url = Companies.path+'orders_front/deleteOptionsSet';
	var orderRequest = new Ajax.Request(url,args);
	$(target).innerHTML = Orders.loading;
}

var Orders = new Object;
Orders.formmode = 0;
Orders.loading = '<div style="padding-top: 20px; width: padding-bottom: 100px; 680px; text-align: center;">Loading content... Please Wait...<br /><img src="/order/public/images/admin/spinner.gif" />';
Orders.path = Companies.path;

Orders.showPrinting = function() {
	var type = Form.Element.getValue('orders__printing');
	switch(type) {
		case 'digital': Element.hide('print_screen'); break;
		case 'screen': Element.show('print_screen'); break;
	}
}

Orders.form = function(o,id) {
	if(this.formmode == 0) {
		var otag = 'form'+o;
		Element.show(otag+'_1'); //Element.show(otag+'_2');
		Element.hide(otag+'_11'); Element.hide(otag+'_12');
		Element.hide(otag+'_21'); Element.hide(otag+'_22');
		Element.hide(otag+'_31'); Element.hide(otag+'_32');
		Element.show(otag+'_'+id+'1'); Element.show(otag+'_'+id+'2');
		this.formmode = 1;
	} else {
		switch(id) {
			case 1: this.addNote(o); break;
			case 2: this.justAsk(o); break;
			case 3: this.confirm(o); break;
		}
	}
}

Orders.formBack = function(o) {
	var otag = 'form'+o;
	this.formmode = 0;
	Element.hide(otag+'_1'); //Element.hide(otag+'_2');
	Element.show(otag+'_11'); Element.show(otag+'_12');
	Element.show(otag+'_21'); Element.show(otag+'_22');
	Element.show(otag+'_31'); Element.show(otag+'_32');
}
	

Orders.confirm = function(id) {

	quantity = $('products_count'+id).value;
	if(quantity > 0) {
		if($('delivery'+id).value) {
		if(confirm("Once You confirm this order, You won't be able to change it. Are You sure?")) {
			var pars = "id="+id+"&delivery="+$('delivery'+id).value+"&notes="+$('notes'+id).value;
			var args = {method:'post',parameters: pars, onComplete: Orders.response};
			url = Companies.path+'orders_front/confirm';
			var orderRequest = new Ajax.Request(url,args);
			$('form_cont'+id).innerHTML = 'Processing order, please wait...';
		}
		} else {
			alert('Please enter Your requested delivery date for this order.');
		}
	} else {
		alert('Please add minimum required amount of products to this order.');
	}

}

Orders.reservation = function(id) {

	quantity = $('products_count'+id).value;
	if(quantity > 0) {
		if($('delivery'+id).value) {
		if(confirm("Are You sure?")) {
			var pars = "id="+id+"&delivery="+$('delivery'+id).value+"&notes="+$('notes'+id).value;
			var args = {method:'post',parameters: pars, onComplete: Orders.response};
			url = Companies.path+'orders_front/confirm';
			var orderRequest = new Ajax.Request(url,args);
			$('form_cont'+id).innerHTML = 'Processing order, please wait...';
		}
		} else {
			alert('Please enter Your requested delivery date for this order.');
		}
	} else {
		alert('Please add minimum required amount of products to this order.');
	}

}

Orders.justAsk = function(id) {

	var resp = function(originalRequest) {
		$('form_cont'+id).innerHTML = 'Your message has been sent, we will contact You soon.';
	}

	var pars = "id="+id+"&notes="+$('notes'+id).value;
	var args = {method:'post',parameters: pars, onComplete: resp};
	url = Companies.path+'orders_front/justAsk';
	var orderRequest = new Ajax.Request(url,args);
	$('form_cont'+id).innerHTML = 'Processing order, please wait...';

}

Orders.addNote = function(id) {

	var resp = function(originalRequest) {
		Orders.contactTab(id,1);
	}

	var pars = "id="+id+"&notes="+$('notes'+id).value;
	var args = {method:'post',parameters: pars, onComplete: resp};
	url = Companies.path+'orders_front/addNote';
	var orderRequest = new Ajax.Request(url,args);
		
	$('form_cont'+id).innerHTML = 'Processing order, please wait...';	

}

Orders.cancel = function(id) {

	var pars = "id="+id;
	var args = {method:'post',parameters: pars, onComplete: Orders.response};
	url = Companies.path+'orders_front/cancel';
	var orderRequest = new Ajax.Request(url,args);	

}

Orders.current = function(id) {

	var pars = "id="+id;
	var args = {method:'post',parameters: pars, onComplete: Orders.currentResponse,evalScripts:true};
	url = Companies.path+'orders_front/current';
	var orderRequest = new Ajax.Request(url,args);	

}

Orders.add = function() {

	var pars = "";
	var args = {method:'post',parameters: pars, onComplete: Orders.response};
	url = Companies.path+'orders_front/new';
	var orderRequest = new Ajax.Request(url,args);	

}

Orders.details = function(id) {
	this.toggle(id);
}

Orders.toggle = function(id) {
	if($('order'+id).style.display != 'none') {
		$('toggle_icon'+id).src = '/order/public/images/front/folder_close.png';
		$('order_parent'+id).style.borderColor = '#bebebe';
		Element.hide('order'+id);		
	} else {
		$('toggle_icon'+id).src = '/order/public/images/front/folder_open.png';
		$('order_parent'+id).style.borderColor = '#ff5700';
		Element.show('order'+id);
		Orders.productsTab(id);
	}
}

Orders.reload = function() {
	var pars = '';
	var args = {method:'post',parameters: pars, onComplete: Orders.reloadResponse};
	url = Companies.path+'orders_front/reload';
	var orderRequest = new Ajax.Request(url,args);	
}

Orders.reloadResponse = function(originalRequest) {
	$('ordersList').innerHTML = originalRequest.responseText;
}

Orders.currentResponse = function(originalRequest) {
	Orders.details(originalRequest.responseText);
	alert('You have changed Your current order. From now on each product You choose from Place Order page will be added to this order.');
}

Orders.response = function(originalRequest) {
	//alert(originalRequest.responseText);
	Orders.reload();
}

Orders.hideTabs = function(id) {
	Element.hide('tabs'+id+'_tab1'); $('tabs'+id+'_tab1').innerHTML = '';
	Element.hide('tabs'+id+'_tab2'); $('tabs'+id+'_tab2').innerHTML = '';
	Element.hide('tabs'+id+'_tab3'); $('tabs'+id+'_tab3').innerHTML = '';
	Element.hide('tabs'+id+'_tab4'); $('tabs'+id+'_tab4').innerHTML = '';
	Element.hide('tabs'+id+'_tab5'); $('tabs'+id+'_tab5').innerHTML = '';
	$('t1_'+id).className = 'nact';
	$('t2_'+id).className = 'nact';
	$('t3_'+id).className = 'nact';
	$('t4_'+id).className = 'nact';
	$('t5_'+id).className = 'nact';
}

Orders.productsTab = function(id) {
	this.hideTabs(id);
	
	var resp = function(originalRequest) {
		tab.innerHTML = originalRequest.responseText;
		Orders.validate(id);
	}
	
	var pars = 'id='+id;
	var args = {method:'post',parameters: pars,onComplete: resp};
	var url = Companies.path+'orders_front/reloadProducts';
	var tabid = 'tabs'+id+'_tab1';
	var tab = $(tabid);
	Element.show(tab);
	$('t1_'+id).className = 'act';
	var orderRequest = new Ajax.Request(url,args);
	tab.innerHTML = this.loading;
}

Orders.contactTab = function(id,tid) {
	this.hideTabs(id);
	var pars = 'id='+id+'&tid='+tid;
	var args = {method:'post',parameters: pars, evalScripts: true};
	var url = Companies.path+'orders_front/orderContact';
	var tabid = 'tabs'+id+'_tab'+(tid+1);
	var tab = $(tabid);
	Element.show(tab);
	$('t'+(tid+1)+'_'+id).className = 'act';
	var orderRequest = new Ajax.Updater(tab,url,args);
	tab.innerHTML = this.loading;
}

Orders.artApprovalTab = function(id) {
	this.hideTabs(id);
	var pars = 'id='+id;
	var args = {method:'post',parameters: pars, evalScripts: true};
	var url = Companies.path+'orders_front/orderArtApproval';
	var tabid = 'tabs'+id+'_tab'+5;
	var tab = $(tabid);
	Element.show(tab);
	$('t'+(5)+'_'+id).className = 'act';
	var orderRequest = new Ajax.Updater(tab,url,args);
	tab.innerHTML = this.loading;
}

Orders.deleteProducts = function(id,pid) {
	if(confirm('Are You sure?')) {
		var resp = function(originalRequest) {
			Orders.productsTab(id);
		}	
		pars = 'id='+id+'&pid='+pid;
		var args = {method:'post',parameters: pars, onComplete: resp};
		url = Companies.path+'orders_front/deleteProducts';
		var orderRequest = new Ajax.Request(url,args);
	}
}

Orders.editSizes = function(pid) {
	sz = document.getElementsByClassName('products_sizes');
	for(var i = 0; i < sz.length; i++) {
		var el = sz[i];
		Element.hide(el);
	}
	Element.show('products_sizes'+pid);
}

Orders.saveSizes = function(id,pid) {

	var productMin = 6;

	if(this.getTotalAmount(pid) > productMin) {
		var resp = function(originalRequest) {
			Orders.productsTab(id);
		}

		var sizes = Form.serialize('products_sizes_form'+pid);
		var pars = 'id='+id+'&pid='+pid+'&'+sizes;
		var args = {method:'post',parameters: pars, onComplete: resp};
		url = Companies.path+'orders_front/saveProducts';
		var orderRequest = new Ajax.Request(url,args);
		var tabid = 'tabs'+id+'_tab1';
		$(tabid).innerHTML = this.loading;
	} else {
		alert('The minimum order for this product is '+productMin+' pieces.  Please correct your entry to reflect this minimum in order to add this product.');
	}
}

Orders.addProducts = function(id) {
	var resp = function(req) {
		//alert(req.responseText);
		document.location.href = '/order/place_order';
	}
	var pars = "id="+id;
	var args = {method:'post',parameters: pars, onComplete: resp,evalScripts:true};
	url = Companies.path+'orders_front/current';
	var orderRequest = new Ajax.Request(url,args);	
}

Orders.getTotalAmount = function(id) {
	var quantity = 0;
	
	var sizesType = $('sizes_type_'+id).value;
	var sizesArr = Companies.getSizes(sizesType);
	
	for(var i = 0; i < sizesArr.length; i++) {
		var q = eval($('size_'+sizesArr[i]+id).value);
		if(isInteger(q)) { quantity += q; }
	}
	
	return quantity;
}

Orders.validate = function(id) {

	var status = $('valid_status_'+id).value;
	var msg = $('valid_msg_'+id).value;

	if(status == true) {
		Element.show('t4_'+id);
		Element.hide('msg_box'+id);
	} else {
		Element.hide('t4_'+id);
		$('msg_box'+id).innerHTML = msg;
		Element.show('msg_box'+id);
	}
}

Orders.removeOrder = function(id) {
	var resp = function(req) {
		$('ordersList').removeChild($('orderContainer'+id));
		if(req.responseText == 'ok') {
			alert('The order was succesfully deleted.');
		}
	}
	if(confirm('This order will be deleted with all associated information. Once removed, it cannot be restored.\n\n Are You sure?')) {

		var pars = "id="+id;
		var args = {method:'post',parameters: pars, onComplete: resp,evalScripts:true};
		url = Companies.path+'orders_front/remove';
		var orderRequest = new Ajax.Request(url,args);
	
	}
}

var Art = new Object;

Art.submit = function(oid,id,status) {

	var tabid = 'tabs'+oid+'_tab'+5;
	var tab = $(tabid);

	var resp = function(req) {
		tab.innerHTML = req.responseText;
	}

	var pars = "id="+id+"&oid="+oid+"&status="+status;
	var args = {method:'post',parameters: pars, onComplete: resp,evalScripts:true};
	url = Companies.path+'orders_front/orderArtSubmit';
	var orderRequest = new Ajax.Request(url,args);
	
	tab.innerHTML = Orders.loading;

}

Art.confirm = function(oid,id,status) {

	var sec = $('sec_code'+oid).value;
	var sec_val = $('sec_field'+oid).value;
	var error = false;
	var error_txt = '';
	
	if(sec_val != sec) {
		error_txt += 'Please enter security code that mach the code next to the field.\n';
		error = true;
	}	
	if(!$('terms_field'+oid).checked) {
		error_txt += 'Please read and accept the terms.\n';
		error = true;
	}
	if((status == 0)&&($('notes'+oid).value=='')) {
		error_txt += 'Please explain why You did not approve this artwork in the notes field.';
		error = true;
	}
	
	if(!error) {
	
		var tabid = 'tabs'+oid+'_tab'+5;
		var tab = $(tabid);
		
		var resp = function(req) {
			tab.innerHTML = req.responseText;
			//alert(req.responseText);
		}
		
		var pars = Form.serialize('art_approve'+oid);
		var url = '/order/art/ajax.php?action=submit';
		var args = {method:'post',parameters: pars, onComplete: resp,evalScripts:true};
		var orderRequest = new Ajax.Request(url,args);
		tab.innerHTML = Orders.loading;
		
	} else {
		
		alert(error_txt);
		
	}
	
}