var isDOM = document.getElementById;function getParentNodeByType(obj, type) {		var pn = obj.parentNode;		if (pn.nodeName == type || pn.nodeName == type.toUpperCase()) {				return pn;			}						return getParentNodeByType(pn, type);	}function getParentByClass(obj, classn) {		if (!obj)			return false;				pn = obj.parentNode;		if (pn && pn.className == classn) {				return pn;			}						return getParentByClass(pn, classn);	}function getParentByAttr(obj, attr, attrval) {		pn = obj.parentNode;		if (pn.getAttribute(attr) == attrval) {				return pn;			}						return getParentNodeByType(pn, type);				}function createElem(t, attrs) {						var elem = document.createElement(t);						for (a in attrs) {				elem.setAttribute(a, attrs[a]);			}			return elem;	}function removeElem(evt) {		return evt.parentNode.removeChild(evt);	}function createTxt(t) {		return document.createTextNode(t);		}	function append(el, ael) {				return el.appendChild(ael);		}function getTarget(e) {			return E.target(e);		}function getByTag(parent, tag) {	return D.Get.tag(parent, tag);	}function getByType(type, par) {	return D.Get.tag(par, tag);	}function getByClass(t, clas, par) {		if(!par)			par = document;					tags = getByTag(par, t);		tl = tags.length;		ta = new Array(0);				for(i=0; i<tl; i++) {				//__DEBUG('getByClass', tags[i]);				if (tags[i].className == clas)					ta.push(tags[i]);			}				return ta;	}function getByAttr(attr, val, parent, tag) {		return D.Get.attr(attr, val, parent, tag);	}function getByName(name) {		return D.Get.name(name);	}function createSelectField(n, opts) {				s = createElem('select', {'name' : n});				for (i=0; i<opts.length; i++) {				o = createElem('option', {'value' : opts[i]});				append(o, createTxt(opts[i]));				append(s, o);			}		return s;		}function getById(id) {		return D.Get.id(id);	}function getByID(id) {		return D.Get.id(id);	}//event attacherfunction attachEvent(obj, func, action) {	if (!(obj && func))		return;	if (!action)		action = 'onclick';			obj[action] = func;		return;}var D = {	append: function(el, ael) {		return DOM.append(el, ael);	},	remove: function (evt) {		return evt.parentNode.removeChild(evt);	},	Make: {		Select: function(n, opts) {			s = createElem('select', {'name' : n});						if ((typeof opts) != 'object') {				for (i=0; i<opts.length; i++) {						o = createElem('option', {'value' : opts[i]});						D.append(o, createTxt(opts[i]));						D.append(s, o);					}			} else {				for (opt in opts) {						o = createElem('option', {'value' : opt});						D.append(o, createTxt(opts[opt]));						D.append(s, o);				}			}			return s;		},		txt: function() {			return document.createTextNode(t);		}	},	Get: {		id: function(id) {			return document.getElementById(id);					},		attr: function(attr, val, parent, tag) {			par = parent ? parent : document;			t = tag ? tag : '*';			tgs = D.Get.tag(par, t);			tgsl = tgs.length;			ta = new Array(0);			for(jk=0; jk<tgsl; jk++) {				if (tgs[jk].getAttribute(attr) == val) {						ta.push(tgs[jk]);					}			}			if (ta.length == 0)				return false;			return ta;					},		name: function(name) {			elems = D.Get.attr('name', name, '', '');			if (elems)				if (elems.length == 1)					return elems[0];			return elems;			},		tag: function(parent, tag) {			if (!parent)				parent = document;				return parent.getElementsByTagName(tag);					},		_class: function(t, clas, par) {				if(!par)					par = document;								tags = D.Get.tag(par, t);				tl = tags.length;				ta = new Array(0);				for(i=0; i<tl; i++) {						//__DEBUG('getByClass', tags[i]);						if (tags[i].className == clas)							ta.push(tags[i]);					}				return ta;		},		Parent: {						attr: function(obj, attr, attrval) {					pn = obj.parentNode;					if (pn.getAttribute(attr) == attrval) {							return pn;						}					return D.Get.Parent.attr(pn, type);			},			type: function(obj, type) {					pn = obj.parentNode;					if (pn.nodeName == type || pn.nodeName == type.toUpperCase()) {							return pn;						}					return D.Get.Parent.type(pn, type);				},			tag: function(obj, type) {				return D.Get.Parent.type(obj, type);			},			_class: function(obj, classn) {					if (!obj)						return false;					pn = obj.parentNode;					if (pn && pn.className == classn) {							return pn;						}					return D.Get.Parent._class(pn, classn);			}								}	},		highLight: function(obj) {		hlobj = obj;		hlnum = 0		hlintrvl = setInterval("this.__highlight()",30);	},	__highlight: function()   {			color_array = ["#FFD100","#FFFFFF","#FFD931","#FEDB43","#FFE260","#FFE675","#FFE987","#FEEDA2","#FFF3BD","#FFF9DD","#FFFFFF",""]		hlobj.style.backgroundColor = color_array[hlnum];		hlnum += 1;		if (hlnum > color_array.length) {				clearInterval(hlintrvl);				hlnum = 0;				hlobj = '';			}	}}var DOM = {	Select: function(n, opts) {		var s = this.elem('select', {'name' : n});				for (opt in opts) {				o = D.Create.elem('option', {'value' : opts[opt]});				D.append(o, D.Create.txt(opt));				D.append(s, o);						}		return s;	},	textField: function(name, value) {		return this.elem("input", {'name': name, 'id': name, 'value': value, 'type': 'text'});	},	New: {		elem: function(name, attrs) {			try {				e = document.createElement(name);				for (a in attrs) {					if (a == 'class') 					 	e.className = attrs[a] 					else if (a == 'name')						e.setAttribute('name', attrs[a]);					else 						e[a] = attrs[a];					}				return e;			} catch (e) {return false}		},		text: function(text) {			try {				return document.createTextNode(text);			} catch(e) { return false }		},		div: function(attrs) {			return DOM.New.elem('div', attrs);		}	},		append: function(par, nodes) {			try {				nodes.each(function(node) {				par.appendChild(node);				})			return par;		} catch(e) {			try {				return par.appendChild(nodes);			} catch(e) {				return false;			}		}	},	prepend: function(parent, newelem, oldelem) {		try {			return parent.insertBefore(newelem, parent.firstChild);		} catch (e) {}	},	Insert: {		before: function() {},		after: function() {}	},	remove: function(o) {		return o.parentNode.removeChild(o);	}}var F = {	serialize: function(form) {		fields = form.elements;		sl = fields.length;		serstr = '';				for(i=0; i<sl; i++) {			val = fields[i].value;						if (fields[i].type == 'checkbox' && !fields[i].checked)				val = '';						if (val != '')				serstr += '&'+fields[i].name +'=' + encodeURI(val);		}		return serstr;			}	}function serializeForm(form) {		return F.serialize(form);	}function getReq() {	return A.__req();}var A = {	__req: function() {		var req = false;	    if(window.XMLHttpRequest) {	        try {	              req = new XMLHttpRequest();	        } catch(e) {	             req = false;	        }	    } else if(window.ActiveXObject) {			try {					req = new ActiveXObject("Msxml2.XMLHTTP");			} catch(e) {					try {						req = new ActiveXObject("Microsoft.XMLHTTP");					} catch(e) {						req = false;					}				}	    }		return req;	},	call: function(url, q, cb, attrs, response_type) {		var ref = location.href;		var contentType = "application/x-www-form-urlencoded; charset=UTF-8";		if (!response_type)			response_type = 'text';					creq = A.__req();			if(!creq) {			var alertbox = getById('alert_') || getById('alert');			if (!alertbox)				alert('Could not establish connection. Please use a newer version of the browser');			else				alertbox.innerHTML = 'Could not establish connection. Please use a newer version of the browser';			return false;		}					creq.onreadystatechange = function () {				this.call = cb;				if (creq.readyState == 4) {					__DEBUG('processingChange', creq.status);										if (creq.status == 200) {						if (creq.responseText.indexOf('html') >= 0) {							location.href='/store/account/login';						} else {							__DEBUG('response', creq.responseText);														r_type = creq.getResponseHeader('RESPONSE_TYPE');																		if (!r_type)								r_type = 'TEXT';														if (r_type == 'JSON')								r = JSON.eval(creq.responseText);							else if(r_type == 'XML')								r = creq.responseXML;							else								r = creq.responseText;													 this.call(r, attrs);							 creq.onreadystatechange = new function() {};						}					} else {						//alert("There was a problem retrieving the Data. " + creq.status);					}				}			};		creq.open("post", url, true);		creq.setRequestHeader("Content-Type", contentType);		creq.setRequestHeader("REFERER", ref);		creq.setRequestHeader("REQUEST_TYPE", 'XMLHTTP');		creq.setRequestHeader("RESPONSE_TYPE", response_type);		creq.send(q);		__DEBUG('sending', q);			}		}function AjaxReq(url, q, cb, attrs, response_type) {	A.call(url, q, cb, attrs, response_type);}var E = {	add: function(obj, evt, func) {		if (!obj)			return;				if (document.addEventListener) {			obj.addEventListener(evt, func, false);		} else if(document.attachEvent) {			obj.attachEvent('on'+evt,func);		}	},	remove: function(obj, evt, func) {		__DEBUG("removeHandler()",obj);		obj.removeEventListener(evt, func, false);	},	target: function(e) {		e = e || window.event;		return e.target || e.srcElement;	},	prevent: function(e) {		if (e.stopPropagation) {   			 e.stopPropagation();  		} else if(e.cancelBubble) {    		e.cancelBubble = true;		} 				if (e.preventDefault) {			e.preventDefault();		} else {			e.returnValue = false;			return false; 		}			}}function attachHandler(obj, evt, func) {		E.add(obj, evt, func);		}	function removeHandler(obj, evt, func) {		E.remove(obj, evt, func);	}	function _pDe(e) {		return E.prevent(e);	}	var JSON = {	eval: function(str) {		var result;		return eval('result = ' + str+';');	}};	var Indicator = {	current: [],	currentClassNames: [],	defaultClass: 'loading',	add: function(obj, classn) {		if (!classn)			classn = this.defaultClass;					obj.className += ' ' + classn;		if (obj) {			this.current.push(obj);			this.currentClassNames.push(classn);		}			},	clear: function(obj, classn) {		if (!classn)			classn = this.defaultClass;					obj.className = obj.className.replace(classn, '');	},	clearAll: function(classn) {		if (!classn)			classn = this.defaultClass;		cl = this.current.length;				for (i=0;i<cl;i++) {			this.current[i].className = this.current[i].className.replace(this.currentClassNames[i], '');		}		this.current = [];		this.currentClassNames = [];	}	};//these are here for backward compatibilityfunction showLoading(obj, classn) {	Indicator.add(obj, classn);}function clearLoading(obj, classn) {	Indicator.clear(obj, classn);}function clearAllLoading(obj, classn) {	Indicator.clearAll(classn);}		PopUp = {	open: function(a, w, h) {		if (!a)			return;				if (!w)			w = 450;				if (!h)			h = 550;				href=a.href;		nwin = window.open(href, 'nwin', "width=" + w +",height="+h+",scrollbars=yes,status=yes,resizable=yes,dependent=yes,alwaysRaised=yes,location=no,menubar=no,toolbar=no");		nwin.focus();		return false;			},	close: function(e) {		window.close();			}			}	
