// ============================================================================================================================================================
// The Calendar
var openedCalendar = null;
var clndrSetDates = new Array();
var clndr_ho, clndr_mn, clndr_wd, clndr_wi, clndr_rc, clndr_ms, clndr_dd, clndr_td, clndr_hd, clndr_mi, clndr_mx, clndr_ti, clndr_hc, clndr_bc, clndr_r1, clndr_r2, clndr_r3, clndr_f1, clndr_f2, clndr_f3;
var i, j;   

//mn - month names
//wd - week names
//hc,bc - barvy
//r1 - day field, r2 - month field, r3 - year field, f - formaty
function clndr(ti, mi, mx, mn, wd, ho, hc, bc, r1, f1, r2, f2, r3, f3) {
	if (openedCalendar && !openedCalendar.closed) {
		openedCalendar.close();
		openedCalendar = null;
	}
	clndr_wi = window.open("about:blank", "clndr_wi", "location=0,menubar=0,resizable=0,scrollbars=1,status=0,toolbar=0,width=196,height=176,left=" + Math.floor((screen.width - 196) / 2) + ",top=" + Math.floor((screen.height - 175) / 2));
	openedCalendar = clndr_wi;
	clndr_ho = new Array();
	clndr_mn = new Array();
	clndr_wd = new Array();
	clndr_ms = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	clndr_dd = new Date();
	clndr_td = new Date();
	clndr_hd = new Date();
	for (i = 0; i < ho.length; i=i+1) {
		if (ho[i].charAt(ho[i].length - 1) == ".") {
			clndr_ho[i] = ho[i].substring(0, ho[i].length - 1);
		} else {
			clndr_ho[i] = ho[i];
		}
	}
	for (i = 0; i < mn.length; i=i+1) {
		if (document.layers) {
			clndr_mn[i] = clndr_as(mn[i]);
		} else {
			clndr_mn[i] = mn[i];
		}
	}
	for (i = 0; i < 7; i=i+1) {
		if (document.layers) {
			clndr_wd[i] = clndr_as(wd[i]);
		} else {
			clndr_wd[i] = wd[i];
		}
	}
	clndr_mi = clndr_mm(mi);
	clndr_mx = clndr_mm(mx);
	clndr_mx.setHours(23);
	clndr_mx.setMinutes(59);
	if (document.layers) {
		clndr_ti = clndr_as(ti);
	} else {
		clndr_ti = ti;
	}
	clndr_hc = hc;
	clndr_bc = bc;
	clndr_r1 = r1;
	clndr_r2 = r2;
	clndr_r3 = r3;
	clndr_f1 = f1;
	clndr_f2 = f2;
	clndr_f3 = f3;
	if (clndrSetDates[clndr_ti]) {
		clndr_td = clndr_mm(clndrSetDates[clndr_ti]);
	}
	clndr_sh();
}
function clndr_sh() {
	var i, pd, bm, yr, ho;
	var wd = clndr_wi.document;
	wd.open();
	wd.write("<html>\n<head>\n");
	if (document.all) {
		wd.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=" + document.charset + "\">\n");
	}
	wd.write("<title>" + clndr_ti + "&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</title>");
	wd.write("<style>\ntd { background-color: " + clndr_bc + "; text-align: center; font-style: normal; font-size: 11px; font-family: Tahoma, Arial, Helvetica, sans-serif; } input, select { font-size: 11px; } .no { color: #cccccc; } .ce { color: #dd0000; } .mi { color: #555555; } a, a:link, a:visited { color: #000000; text-decoration: none; } a:hover { color: #990000; text-decoration: none; } .border { background-color: " + clndr_hc + "; } .head { background-color: " + clndr_hc + "; }");
	wd.write("</style>\n<scr" + "ipt language=javascript>\n");
	wd.write("\nfunction ff(v) { var id='" + clndr_ti + "'; window.opener.clndr_ff(v,id); }");
	wd.write("\nfunction sm(v) { window.opener.clndr_td.setMonth(v); window.opener.clndr_sh(); }");
	wd.write("\nfunction sy(v) { window.opener.clndr_td.setFullYear(v); window.opener.clndr_sh(); }");
	wd.write("</scr" + "ipt>\n");
	wd.write("</head>\n<body topmargin=3 leftmargin=3 marginheight=3 marginwidth=3>");
	wd.write("<CENTER>");
	wd.write("<table id=calendar_table cellpadding=1 cellspacing=0 border=0><tr><td class=border>\n<table width=100% cellpadding=0 cellspacing=0 border=0><tr><td width=20 class=head>");
	if ((clndr_td.getFullYear() > clndr_mi.getFullYear()) || ((clndr_td.getMonth() != 0) && (clndr_td.getFullYear() == clndr_mi.getFullYear()))) {
		wd.write("<a href=\"javascript:sm(" + (clndr_td.getMonth() - 1) + ")\"><b>&lt;</b></a>");
	} else {
		wd.write("<b>&lt;</b>");
	}
	wd.write("</td><td class=head nowrap=nowrap><form><select name=m onchange=\"sm(this[this.selectedIndex].value);\">");
	for (i = 0; i < 12; i=i+1) {
		wd.write("<option value=" + i);
		if (i == (clndr_td.getMonth())) {
			wd.write(" selected ");
		}
		wd.write(">" + clndr_mn[i] + "</option>\n");
	}
	wd.write("</select><select name=r onchange=\"sy(this[this.selectedIndex].value);\">");
	for (i = clndr_mi.getFullYear(); i < (clndr_mx.getFullYear() + 1); i=i+1) {
		wd.write("<option value=" + i);
		if (i == clndr_td.getFullYear()) {
			wd.write(" selected ");
		}
		wd.write(">" + i + "</option>\n");
	}
	wd.write("</select></td></form><td class=head width=20>");
	if ((clndr_td.getFullYear() < clndr_mx.getFullYear()) || ((clndr_td.getMonth() != 11) && (clndr_td.getFullYear() == clndr_mx.getFullYear()))) {
		wd.write("<a href=\"javascript:sm(" + (clndr_td.getMonth() + 1) + ")\"><b>&gt;</b></a>");
	} else {
		wd.write("<b>&gt;</b>");
	}
	wd.write("</td></tr></table><table width=100% cellpadding=2 cellspacing=0 border=0><tr>");
	for (i = 0; i < 6; i=i+1) {
		wd.write("<td width=20><b>" + clndr_wd[i] + "</b></td>");
	}
	wd.write("<td width=20><span class=ce><b>" + clndr_wd[6] + "</b></span></td></tr>\n");
	clndr_td.setDate(1);
	pd = clndr_td.getDay() - 1;
	clndr_rc = 0;
	if (pd == -1) {
		pd = 6;
	}
	bm = clndr_td.getMonth();
	yr = clndr_td.getFullYear();
	if (bm == 0) {
		clndr_td.setMonth(11);
		clndr_td.setFullYear(yr - 1);
		clndr_ol();
	} else {
		clndr_td.setMonth(bm - 1);
	}
	for (i = clndr_ms[clndr_td.getMonth()] - pd + 1; i <= clndr_ms[clndr_td.getMonth()]; i=i+1) {
		clndr_td.setDate(i);
		if (clndr_td.getDay() == 0) {
			ho = "class=ce";
		} else {
			ho = "";
		}
		wd.write("<td>&nbsp</td>");
	}
	clndr_td.setDate(1);
	clndr_td.setMonth(bm);
	clndr_td.setFullYear(yr);
	clndr_ol();
	for (i = 0; i < clndr_ms[(clndr_td.getMonth())]; i=i+1) {
		clndr_td.setDate(i + 1);
		if ((clndr_td.getDay() == 1) && (clndr_td.getDate() != 1)) {
			wd.write("</tr>\n<tr>");
			clndr_rc = clndr_rc + 1;
		} else {
			if ((clndr_td.getDay() == 1) && (clndr_td.getDate() == 1)) {
				wd.write("<tr>");
			}
		}
		if (clndr_td.getDay() == 0) {
			ho = "class=ce";
		} else {
			ho = "";
		}
		for (j = 0; j < clndr_ho.length; j = j+1) {
			if ((clndr_ho[j].substring(0, clndr_ho[j].indexOf(".")) == clndr_td.getDate()) && (clndr_ho[j].substring(clndr_ho[j].indexOf(".") + 1, clndr_ho[j].length) == (clndr_td.getMonth() + 1))) {
				ho = "class=ce";
			}
		}
		if ((clndr_td.getTime() > clndr_mx.getTime()) || (clndr_td.getTime() < clndr_mi.getTime())) {
			wd.write("<td " + ho + "><span class=no>" + clndr_td.getDate() + "</span></td>");
		} else {
			if (ho == "") {
				wd.write("<td><a href=\"javascript:ff('" + clndr_td.getDate() + "." + (clndr_td.getMonth() + 1) + "." + clndr_td.getFullYear() + "')\">" + clndr_td.getDate() + "</a></td>");
			} else {
				wd.write("<td><a href=\"javascript:ff('" + clndr_td.getDate() + "." + (clndr_td.getMonth() + 1) + "." + clndr_td.getFullYear() + "')\"><span class=ce>" + clndr_td.getDate() + "</span></a></td>");
			}
		}
	}
	clndr_td.setDate(1);
	clndr_td.setMonth(bm + 1);
	pd = clndr_td.getDay() - 1;
	if (pd == 0) {
		pd = 20;
	}
	if (pd == -1) {
		pd = 6;
	}
	for (i = 1; i <= (7 - pd); i=i+1) {
		wd.write("<td>&nbsp</td>");
		clndr_td.setDate(i);
		if (clndr_td.getDay() == 0) {
			ho = "class=ce";
		} else {
			ho = "";
		}
	}
	clndr_td.setDate(1);
	clndr_td.setMonth(bm);
	clndr_td.setFullYear(yr);
	clndr_ol();
	if (clndr_rc < 5) {
		wd.write("</tr><tr><td colspan=7>&nbsp;</td>");
	}
	wd.write("</tr></table></td></tr></center></table></body></html>");
	wd.close();
	clndr_wi.focus();
}
function clndr_mm(ta) {
	var td = new Date();
	ta = ta.split(".");
	td.setDate(ta[0]);
	td.setMonth(ta[1] - 1);
	td.setFullYear(ta[2]);
	td.setHours(0);
	td.setMinutes(0);
	return (td);
}
function clndr_ol() {
	var y = clndr_td.getFullYear();
	if (0 == y % 4 && ((y % 100 != 0) || (y % 400 == 0))) {
		clndr_ms[1] = 29;
	} else {
		clndr_ms[1] = 28;
	}
}
function clndr_ff(dt, id) {
	var f, r, fr, d, dd, m, mm, mmm, yy, yyyy;
	clndrSetDates[id] = dt;
	var msn = Array("JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC");
	dt = dt.split(".");
	d = dt[0];
	if (d < 10) {
		dd = "0" + d;
	} else {
		dd = d;
	}
	m = dt[1];
	if (m < 10) {
		mm = "0" + m;
	} else {
		mm = m;
	}
	mmm = msn[m - 1];
	yyyy = dt[2];
	yy = yyyy.substring(2, 4);
	for (i = 1; i <= 3; i=i+1) {
		r = eval("clndr_r" + i);
		f = eval("clndr_f" + i);
		if ((r) && (f != "undefined")) {
			fr = f.replace("dd", dd);
			fr = fr.replace("d", d);
			fr = fr.replace("mmm", mmm);
			fr = fr.replace("mm", mm);
			fr = fr.replace("m", m);
			fr = fr.replace("yyyy", yyyy);
			fr = fr.replace("yy", yy);
			r.value = fr;
		}
	}
	clndr_wi.close();
}
function clndr_as(co) {
	var k;
	var n = "aAaAcCdDeEeEeEiIlLlLnNoOoOoOrRrRsStTuUuUuUyYzZ";
	var o = "\xe1\xc1\xe4\xc4????\xe9\xc9\xeb\xcb??\xed\xcd??????\xf3\xd3\xf4\xd4\xf6\xd6????????\xfa\xda??\xfc\xdc\xfd\xdd??";
	for (k = 0; k < n.length; k = k+1) {
		co = co.replace(o[k], n[k]);
	}
	return (co);
}


// ============================================================================================================================================================
// AJAX FORM SUPPORT

function ScrollableTable (tableEl, tableHeight, tableWidth) {

    this.initIEengine = function () {

        this.containerEl.style.overflowY = 'auto';
        if (this.tableEl.parentElement.clientHeight - this.tableEl.offsetHeight < 0) {
            this.tableEl.style.width = this.newWidth - this.scrollWidth +'px';
        } else {
            this.containerEl.style.overflowY = 'hidden';
            this.tableEl.style.width = this.newWidth +'px';
        }

        if (this.thead) {
            var trs = this.thead.getElementsByTagName('tr');
            for (x=0; x<trs.length; x++) {
                trs[x].style.position ='relative';
                trs[x].style.setExpression("top",  "this.parentElement.parentElement.parentElement.scrollTop + 'px'");
            }
        }

        if (this.tfoot) {
            var trs = this.tfoot.getElementsByTagName('tr');
            for (x=0; x<trs.length; x++) {
                trs[x].style.position ='relative';
                trs[x].style.setExpression("bottom",  "(this.parentElement.parentElement.offsetHeight - this.parentElement.parentElement.parentElement.clientHeight - this.parentElement.parentElement.parentElement.scrollTop) + 'px'");
            }
        }

        eval("window.attachEvent('onresize', function () { document.getElementById('" + this.tableEl.id + "').style.visibility = 'hidden'; document.getElementById('" + this.tableEl.id + "').style.visibility = 'visible'; } )");
    };


    this.initFFengine = function () {
        this.containerEl.style.overflow = 'hidden';
        this.tableEl.style.width = this.newWidth + 'px';

        var headHeight = (this.thead) ? this.thead.clientHeight : 0;
        var footHeight = (this.tfoot) ? this.tfoot.clientHeight : 0;
        var bodyHeight = this.tbody.clientHeight;
        var trs = this.tbody.getElementsByTagName('tr');
        if (bodyHeight >= (this.newHeight - (headHeight + footHeight))) {
            this.tbody.style.overflow = '-moz-scrollbars-vertical';
            for (x=0; x<trs.length; x++) {
                var tds = trs[x].getElementsByTagName('td');
                tds[tds.length-1].style.paddingRight += this.scrollWidth + 'px';
            }
        } else {
            this.tbody.style.overflow = '-moz-scrollbars-none';
        }

        var cellSpacing = (this.tableEl.offsetHeight - (this.tbody.clientHeight + headHeight + footHeight)) / 4;
        this.tbody.style.height = (this.newHeight - (headHeight + cellSpacing * 2) - (footHeight + cellSpacing * 2)) + 'px';

    };

    this.tableEl = tableEl;
    this.scrollWidth = 16;

    this.originalHeight = this.tableEl.clientHeight;
    this.originalWidth = this.tableEl.clientWidth;

    this.newHeight = parseInt(tableHeight);
    this.newWidth = tableWidth ? parseInt(tableWidth) : this.originalWidth;

    this.tableEl.style.height = 'auto';
    this.tableEl.removeAttribute('height');

    this.containerEl = this.tableEl.parentNode.insertBefore(document.createElement('div'), this.tableEl);
    this.containerEl.appendChild(this.tableEl);
    this.containerEl.style.height = this.newHeight + 'px';
    this.containerEl.style.width = this.newWidth + 'px';


    var thead = this.tableEl.getElementsByTagName('thead');
    this.thead = (thead[0]) ? thead[0] : null;

    var tfoot = this.tableEl.getElementsByTagName('tfoot');
    this.tfoot = (tfoot[0]) ? tfoot[0] : null;

    var tbody = this.tableEl.getElementsByTagName('tbody');
    this.tbody = (tbody[0]) ? tbody[0] : null;

    if (!this.tbody) return;

    if (document.all && document.getElementById && !window.opera) this.initIEengine();
    if (!document.all && document.getElementById && !window.opera) this.initFFengine();

}

function toggleVisibility(id) {
	var e = document.getElementById(id);
	e.style.display = e.style.display == 'block' ? 'none' : 'block';
	return false;
}


function createRequest() {
	if (window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	}
	else if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	}
}		

function calculatePosition(input, attribut) {
	var position = 0;
	
	while (input) {
		position += input[attribut];
		input = input.offsetParent;
	}
	
	return position;
}

var QP = {
	
	ProductSuggest : function(options) {
		var suggestInput = $(options.inputId);
		var results = $('productNameSuggest');
		
		results.style.position = 'absolute';
		
		suggestInput.onkeyup = function() {
			new Ajax.Request('productSuggest.do', {
		  		parameters: {'SEARCH_TYPE': options.suggestType, 'SEARCH': suggestInput.value, 'INCLUDE_ZERO_MEASURES_PRODUCTS': options.zeroMeasures},
		    	method:'get',
		    	onSuccess: function(transport){
		      		results.innerHTML = transport.responseText;
		      		results.style.top = (calculatePosition(suggestInput, 'offsetTop') + suggestInput.offsetHeight) + 'px';
		      		results.style.left = (calculatePosition($("main_content"), 'offsetLeft') + 10) + 'px';
		      		results.style.visibility = 'visible';
		      		
		      		var rows = $('suggest_result_body').getElementsByTagName("tr");
		      		
		      		for (var i = 0; i < rows.length; ++i) {
		      			rows[i].onmouseover = function() {
		      				this.className = "mouse_over";
		      			};
		      			
		      			rows[i].onmouseout = function() {
		      				this.className = "mouse_out";
		      			};
		      			
		      			rows[i].onclick = function() {
		      				hide();
		      				var columns = this.getElementsByTagName("td");
		      				options.productSelected(columns[0].innerHTML, columns[1].innerHTML, columns[2].innerHTML);
		      			};
		      		}
		      		
		      		$('product_suggest_close_button').onclick = function() {
		      			hide();
		      		};
		      		
		      		function hide() {
		      			results.style.visibility = 'hidden';
		      		}
		    	},
		    	onFailure: function(){ alert('Something went wrong...') }
			});
		};
		
		
	}
};

QP.util = {
	
	loadImageIn : function(element, url) {
		var image = new Image();
		image.onload = function() {
			element.innerHTML ="";
			element.appendChild(image);
		};
			
		image.src = url;
	},
	
	showSandclockIn : function(element) {
		element.innerHTML = "<img src='img/load.gif'>";
	},
	
	loadRackImageIn : function(element, rackId, width, height) {
		var url = "rackImage;" + new Date().getTime() + "?RACK_ID=" + rackId + "&WIDTH=" + width + "&HEIGHT=" + height;
//		alert('loadRackImageIn URL: ' + url);
		this.loadImageIn(element, url);
	},
	
	loadPlanogramCategoriesIn : function(element, rackId) {
		var url = "rackCategories.do;" + new Date().getTime() + "?RACK_ID=" + rackId;
		var req = createRequest();
		
		req.open("GET", url, true);
		req.onreadystatechange = function() {
			if (req.readyState == 4) {
				element.innerHTML = req.responseText;
			}
		}; 
		req.send(null);
	},
	
	loadSaveChangesButtonIn : function(element) {
		var url = "showSaveRackChangesButton.do;" + new Date().getTime();
		var req = createRequest();
		
		req.open("GET", url, true);
		
//		alert('loadSaveChangesButtonIn URL: ' + url);
		
		req.onreadystatechange = function() {
			if (req.readyState == 4) {
				element.innerHTML = req.responseText;
			}
		}; 
		req.send(null);
	},
	
	getFormAsString : function(formName) {
		//Setup the return String
		returnString ="";
		      
		//Get the form values
		formElements=document.forms[formName].elements;
		      
		//loop through the array, building up the url
		//in the format '/strutsaction.do&name=value'
		for(var i = formElements.length -1 ;i >= 0; i = i - 1){
		      //we escape (encode) each value
		      if(i < formElements.length -1) {
		    	  returnString+="&"
		      }
		      returnString += (formElements[i].name)+"="
		      +(formElements[i].type == "checkbox" ? formElements[i].checked : encodeURIComponent(formElements[i].value));
		}
		       
		//return the values
		return returnString; 
	}
	

	
};









