function sq_addEvent(en,f,el){if(!el)el=document;if(el.addEventListener)el.addEventListener(en,f,false);else el.attachEvent('on'+en,f);}
function sq_removeEvent(en,f,el){if(!el)el=document;if(el.removeEventListener)el.removeEventListener(en,f,false);else el.detachEvent('on'+en,f);}
function sq_addOnLoad(f){if(typeof window.addEventListener!='undefined')window.addEventListener('load',f,false);else if(typeof document.addEventListener!='undefined')document.addEventListener('load',f,false);else if(typeof window.attachEvent!='undefined')window.attachEvent('onload',f);return true;}
sq_addEvent('keydown',sq_navigate_); sq_addOnLoad(sq_feedback_check_);
sq_navigate=new Array(); sq_navigate[39]='sq_next'; sq_navigate[37]='sq_prev';
function sq_setNavigate(key,aid){sq_navigate[key]=aid;};
function sq_navigate_(e){e=e||window.event;if(e.ctrlKey){var aid=sq_navigate[e.keyCode?e.keyCode:e.which?e.which:null];if(aid)sq_go(aid);}}
function sq_go(aid){el=document.getElementById(aid);if(el&&el.href)document.location=el.href;}
function sq_preloadImages(imgs,callback,series){var i,img_array=new Array();if(!series)series=0;for(i=0;i<imgs.length;i++){img_array[i]=new Image();if(callback)eval('img_array[i].onload=function(){callback'+'("'+imgs[i]+'",'+series+');}');img_array[i].src=imgs[i];}return true;}
function sq_preloadImagesPrefix(prefix,imgs,callback,series){for(var i=0;i<imgs.length;i++)imgs[i]=prefix+imgs[i];sq_preloadImages(imgs,callback,series);}
function sq_trim(str){var str = str.replace(/^\s\s*/,''),ws=/\s/,i=str.length;while(ws.test(str.charAt(--i)));return str.slice(0,i+1);}
function sq_isCorrectEmail(email){var filter=/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-z0-9-]+)*(\.[a-zA-Z0-9]{2,4})$/;return (filter.test(email));}
function sq_isClass(clsname,cls){var classes=clsname.split(' ');var b=false;for(var i=0;i<classes.length;i++)if(classes[i]==cls){b=true; break;}return b;}
function sq_getIEVersion(){var ua=navigator.userAgent,MSIEOffset=ua.indexOf("MSIE ");if(MSIEOffset==-1){return 0;}else{return parseFloat(ua.substring(MSIEOffset+5,ua.indexOf(";",MSIEOffset)));}}
var sq_ieVersion=sq_getIEVersion(),sq_ie_lte8=(sq_ieVersion>0&&sq_ieVersion<=8);
function sq_preventDefault(e){if(!e)e=window.event;if(e.preventDefault)e.preventDefault();e.returnValue=false;}
function sq_dumpVar(v){var s='';for(var a in v){s+=a+': '+v[a]+'\n'}return s;};
var sq_held=new Array();
function sq_hold(a,check){for(var i=sq_held.length-1;i>=0;i--)if(sq_held[i]==a)return true;if(!check)sq_held.push(a);return false;}
function sq_free(a){for(var i=sq_held.length-1;i>=0;i--)if(sq_held[i]==a)sq_held.splice(i,1);}
var sq_toExecute=new Array();
function sq_empty(a){for(var i in a)return false;return true;}
function sq_executeLast(f,t,a,arg){if(!a)a=f;var r=Math.random();if(!sq_toExecute[a])sq_toExecute[a]=[];sq_toExecute[a][r]=1;setTimeout(function(){sq_executeLast_(f,a,arg,r);},t);}
function sq_executeLast_(f,a,arg,r){if(!sq_toExecute[a]||!sq_toExecute[a][r])return;delete sq_toExecute[a][r];if(sq_empty(sq_toExecute[a])){f(arg);delete sq_toExecute[a];}}
function sq_executeLastCancel(a){delete sq_toExecute[a];}
function sq_getElementsByClassName(className,node,tag){if(!node)node=document;var res=new Array();if(!tag&&node.getElementsByClassName){var els=node.getElementsByClassName(className);for(var i=0;i<els.length;i++)res.push(els[i]);return res;}if(!tag)tag='*';var els=node.getElementsByTagName(tag);var b,i,j,l=els.length,classNames=className.split(' '),patterns=new Array();for(i=0;i<classNames.length;i++)if(classNames[i])patterns.push(new RegExp("(^|\\s)"+classNames[i]+"(\\s|$)"));var pl=patterns.length;for(i=0;i<l;i++){b=true;for(j=0;j<pl;j++)if(!patterns[j].test(els[i].className)){b=false;break;}if(b)res.push(els[i]);}return res;} // Returns Array, not NodeList
function sq_removeClass(node,className){var pattern=new RegExp("(^|\\s)"+className+"(\\s|$)","g");node.className=node.className.replace(pattern,' ');}
function sq_addClass(node,className){sq_removeClass(node,className);node.className+=' '+className;}
function sq_hasClass(node,className){return node&&node.className&&(new RegExp("(^|\\s)"+className+"(\\s|$)")).test(node.className);}
function sq_getCursorPos(e){if(!e)e=window.event;var p=new Array();p.x=e.clientX;p.y=e.clientY;if(document.documentElement.scrollLeft)p.x+=document.documentElement.scrollLeft;else if(document.body.scrollLeft)p.x+=document.body.scrollLeft;if(document.documentElement.scrollTop)p.y+=document.documentElement.scrollTop;else if(document.body.scrollTop)p.y+=document.body.scrollTop;return p;}
function sq_getLeft(el){var res=0;while(el!=null){res+=el.offsetLeft;el=el.offsetParent;}return res;}
function sq_getTop(el){var res=0;while(el!=null){res+=el.offsetTop;el=el.offsetParent;}return res;}
function sq_getDepth(el){var res=0;while(el!=null){res++;el=el.parentNode;}return res;}
function sq_insertBefore(newEl,targetEl){targetEl.parentNode.insertBefore(newEl,targetEl);}
function sq_insertAfter(newEl,targetEl){var p=targetEl.parentNode;if(targetEl.nextSibling)p.insertBefore(newEl,targetEl.nextSibling);else p.appendChild(newEl);}
function sq_removeElement(el){el.parentNode.removeChild(el);};
function sq_firstElementChild(parent){var el=parent.firstChild;if(!el)return null;if(el.tagName)return el;else return sq_nextElementSibling(el);}
function sq_lastElementChild(parent){var el=parent.lastChild;if(el.tagName)return el;else return sq_previousElementSibling(el);}
function sq_nextElementSibling(el){if(typeof el.nextElementSibling!='undefined')return el.nextElementSibling;while(el!=null){el=el.nextSibling;if(el&&el.tagName)return el;}return null;}
function sq_previousElementSibling(el){if(typeof el.previousElementSibling!='undefined')return el.previousElementSibling;while(el!=null){el=el.previousSibling;if(el&&el.tagName)return el;}return null;}
function sq_insertFirstChild(newEl,parent){if(parent.firstChild)parent.insertBefore(newEl,parent.firstChild);else parent.appendChild(newEl);}
function sq_uniqueId(){return String((new Date()).getTime()).replace(/\D/gi,'')+Math.floor(Math.random()*1000000);}
function sq_moveElementContents(from,to,beforeEl){var el=from.firstChild;while(el){if(beforeEl)to.insertBefore(el,beforeEl);else to.appendChild(el);el=from.firstChild;}}
function sq_moveElementContentsFrom(fromEl,to,beforeEl){var el=fromEl;if(fromEl)var el2=fromEl.nextSibling;while(el){if(beforeEl)to.insertBefore(el,beforeEl);else to.appendChild(el);el=el2;if(el2){el2=el2.nextSibling;}}}
function sq_moveElementContentsFromTo(fromEl,toEl,to,beforeEl){var el=fromEl;if(fromEl)var el2=fromEl.nextSibling;while(el&&el!=toEl){if(beforeEl)to.insertBefore(el,beforeEl);else to.appendChild(el);el=el2;if(el2){el2=el2.nextSibling;}}}
function sq_softFloor(x,treshold){if(typeof treshold=='undefined')treshold=0.999;else treshold=1-treshold;var y=Math.floor(x);if(x-y>=treshold)y++;return y;}
function sq_signum(x){return (x>0?1:(x<0?-1:0));}
function sq_getSideOfPlain(point,point0,point1){return sq_signum(point[0]*(point1[1]-point0[1])+point[1]*(point0[0]-point1[0])+point1[0]*point0[1]-point0[0]*point1[1]);}
function sq_rectangleByDiagonal(point0,point1){return new Array(point0,sq_point(point0[0],point1[1]),point1,sq_point(point1[0],point0[1]));};
function sq_insideConvexPolygon(point,polygon)
{	if(polygon.length==0)return false;
	if(polygon.length==1)return (point[0]==polygon[0][0]&&point[1]==polygon[0][1]);
	if(polygon.length==2)return (sq_getSideOfPlain(point,polygon[0],polygon[1])==0);
	var side=0,curside,n=polygon.length,i;
	for(i=0;i<n;i++)
	{		curside=sq_getSideOfPlain(point,polygon[i],polygon[(i+1)%n]);
		if(side==0)side=curside;else
			if(side*curside<0)return false;
	}
	return true;
}
function sq_point(){var res=new Array();for(var i=0;i<arguments.length;i++)res.push(arguments[i]);return res;}
function sq_drawPolygon(polygon,element)             // Naturally doesn't work in IE < 9 (probably in IE 9 as well)
{	var n=polygon.length;	if(n<1)return;
	if(!element)element=document.body;
	var i,minx=polygon[0][0],miny=polygon[0][1],maxx=polygon[0][0],maxy=polygon[0][1];
	for(i=1;i<n;i++)
	{		minx=Math.min(minx,polygon[i][0]);
		miny=Math.min(miny,polygon[i][1]);
		maxx=Math.max(maxx,polygon[i][0]);
		maxy=Math.max(maxy,polygon[i][1]);
	}
	var c=document.createElement('canvas');
	c.style.position='absolute';
	c.style.left=minx+'px';
	c.style.top=miny+'px';
	c.width=(maxx-minx+1);
	c.height=(maxy-miny+1);
	var ctx=c.getContext('2d');
	ctx.beginPath();
	ctx.moveTo(polygon[n-1][0]-minx,polygon[n-1][1]-miny);
		document.title+=' '+(polygon[n-1][0]-minx)+' '+(polygon[n-1][1]-miny);
	for(i=0;i<n;i++)
	{		ctx.lineTo(polygon[i][0]-minx,polygon[i][1]-miny);
		document.title+=' '+(polygon[i][0]-minx)+' '+(polygon[i][1]-miny);
	}
	ctx.closePath();
	ctx.fillStyle = "rgba("+Math.floor(Math.random()*255)+","+Math.floor(Math.random()*255)+","+Math.floor(Math.random()*255)+",0.2)";
	ctx.fill();
	element.appendChild(c);
}

function sq_setCursor(el,cursor)
{	if(window.opera)switch(cursor)
	{
		case 'col-resize':
			cursor='e-resize';
			break;
		case 'row-resize':
			cursor='s-resize';
			break;
	}	el.style.cursor=cursor;
	if(window.opera)
	{
		var div=document.createElement('div');
		div.style.position='absolute';
		div.style.left=sq_getLeft(el)+'px';
		div.style.top=sq_getTop(el)+'px';
		div.style.width=el.offsetWidth+'px';
		div.style.height=el.offsetHeight+'px';
		div.style.overflow='hidden';
		div.style.visibility='hidden';
		document.body.appendChild(div);
		document.body.removeChild(div);
	}
}

function sq_setBg(el,bg){el.style.background=bg;}

function sq_setOpacity(el,opacity)
{	el.style.opacity=opacity;
	if(sq_ie_lte8)
	{		opacity=Math.round(opacity*100);		if(opacity<100)opacity='alpha(opacity='+opacity+')';else opacity='';		el.style.filter=opacity;
		if(sq_ieVersion==8)
		{
 			var divs=el.getElementsByTagName('*');
		    for(var i=0;i<divs.length;i++)if(divs[i].currentStyle.position=='relative'||divs[i].currentStyle.position=='absolute')divs[i].style.filter=opacity;
		    else if(opacity!=''&&divs[i].currentStyle.backgroundImage.match(/^url\(["']?.*\.png["']?\)$/i))
		    {		    	var source=divs[i].currentStyle.backgroundImage.replace(/^url\(["']?/,'').replace(/["']?\)/,'');
		    	divs[i].mod_source=source;		    	divs[i].style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+source+"',sizingMethod='scale')";divs[i].style.background='';
		    	divs[i].style.background='';
		    }else if(opacity==''&&divs[i].mod_source)
		    {		    	divs[i].style.background="url('"+divs[i].mod_source+"')";
		    	divs[i].mod_source='';
		    	divs[i].style.filter='';
		    }
		}
	}
}

function sq_feedback_check()
{
	if((arguments.length>0)&&(arguments[0].tagName=='FORM'))frm=arguments[0];else frm=this.form;
	var els=frm.elements,i,sm=-1,smd=false,clsname='';
	for(i=0;i<els.length;i++)
	{
		if((els[i].type=="text")||(els[i].type=="password")||(els[i].type=="textarea"))
		{
			clsname=els[i].className;
			if(sq_isClass(clsname,'required'))if(sq_trim(els[i].value)=="")smd=true;
			if(sq_isClass(clsname,'email'))
			{
                   if(!sq_isCorrectEmail(els[i].value)){
                   	els[i].style.color='red';
                   	if(sq_isClass(clsname,'email'))smd=true;
                   }else
                   {
                   	els[i].style.color='green';
                   }
   			}
   			if(sq_isClass(clsname,'required_email'))
			{
	                if(!sq_isCorrectEmail(els[i].value)){
	                	els[i].style.color='red';
	                	smd=true;
	                }else
	                {
	                	els[i].style.color='green';
	                }
   			}
		}else if(els[i].type=="submit")sm=i;
	}
	els[sm].disabled=smd;
	return true;
}

function sq_feedback_check_()
{
	var forms=new Array(),tags=document.getElementsByTagName('form'),i,j=0,els;
	for(i=0;i<tags.length;i++)if(sq_isClass(tags[i].className,'feedback'))forms[j++]=tags[i];
	for(i=0;i<forms.length;i++)
	{

		els=forms[i].elements;
		for(j=0;j<els.length;j++)if((els[j].type=="text")||(els[i].type=="password")||(els[j].type=="textarea"))
		{
	        els[j].onkeyup=sq_feedback_check;
		}else if(els[j].type=="submit")els[j].disabled=true;
		sq_feedback_check(forms[i]);
	}
	return true;
}

function sq_animate_wc(condition)
{	if(!condition)arguments[3]=arguments[4]=1;
	var i,s='sq_animate(';
	for(i=1;i<arguments.length;i++){if(i>1)s+=',';s+='arguments['+i+']';}
	s+=');';
	eval(s);
}

function sq_animate_parabolic(v1,v2,t,cur)
{	var t2=t/2,cur2=(cur<t/2?cur*cur*2/t:t-(t-cur)*(t-cur)*2/t);
	return (cur2*v2+(t-cur2)*v1)/t;
}

function sq_animate_linear(v1,v2,t,cur)
{
	return (cur*v2+(t-cur)*v1)/t;
}

var sq_animate_element=new Array(),sq_animate_function_fin=new Array(),sq_animate_function_sim=new Array(),sq_animate_function_anim=new Array(),sq_animate_prop=new Array(),sq_animate_t=new Array(),sq_animate_step=new Array(),sq_animate_cur=new Array(),sq_animate_interval=new Array(),sq_animate_progress=0;
function sq_animate(el,prop,t,step,func_fin,func_sim,func_anim)
{
	var aid=sq_uniqueId();
	if((typeof prop[0]).toLowerCase()=='string')prop=[prop];
	if((typeof el).toLowerCase()=='string')el=document.getElementById(el);
	sq_animate_progress++;
	sq_animate_element[aid]=el;
	var prop2=new Array();
	for(var i=0;i<prop.length;i++)if(prop[i][1]!=prop[i][2])prop2.push(prop[i]);
	if(prop2.length==0){if(func_fin)func_fin();return false;}
	prop=prop2;
	sq_animate_prop[aid]=prop;
	sq_animate_t[aid]=t;
	sq_animate_step[aid]=step;
	if(!func_anim)func_anim=sq_animate_parabolic;
	var start=0;
	if(prop[0].length>3)
		if(prop[0][1]<prop[0][2])
			while(start<t&&func_anim(prop[0][1],prop[0][2],t,start)<prop[0][3])start+=step;
		else if(prop[0][1]>prop[0][2])
			while(start<t&&func_anim(prop[0][1],prop[0][2],t,start)>prop[0][3])start+=step;
	sq_animate_cur[aid]=start;
	if(func_fin)sq_animate_function_fin[aid]=func_fin;else sq_animate_function_fin[aid]=false;
	if(func_sim)sq_animate_function_sim[aid]=func_sim;else sq_animate_function_sim[aid]=false;
	sq_animate_function_anim[aid]=func_anim;
	sq_animate_interval[aid]=setInterval("sq_animate_('"+aid+"')",step);
}

function sq_animate_(aid)
{	var t=sq_animate_t[aid],step=sq_animate_step[aid],cur=sq_animate_cur[aid],ap;
	cur+=step;
	if(cur>t)cur=t;
	sq_animate_cur[aid]=cur;
	for(ap in sq_animate_prop[aid])
	{		var script='';		switch(sq_animate_prop[aid][ap][0])
		{			case 'scrollTop':
			case 'scrollLeft':
				script='%el%.%prop%=Math.round(%val%)';
				break;
			case 'opacity':
				if(sq_ie_lte8)script='sq_setOpacity(%el%,%val%)';
				else script='%el%.style.%prop%=%val%';
				break;
			default:
				script='%el%.style.%prop%=Math.round(%val%)+"px"';
		}
		var value=sq_animate_function_anim[aid](sq_animate_prop[aid][ap][1],sq_animate_prop[aid][ap][2],t,cur);
		eval(script.replace(/%el%/g,'sq_animate_element[aid]').replace(/%prop%/g,sq_animate_prop[aid][ap][0]).replace(/%val%/g,'value'));
	}
	if(sq_animate_function_sim[aid])
		if(!sq_animate_function_sim[aid](sq_animate_element[aid]))
		{			cur=t+1;
			sq_animate_function_fin[aid]=false;
		}
	if(cur>=t)
	{		clearInterval(sq_animate_interval[aid]);
		sq_animate_progress--;
		if(sq_animate_function_fin[aid])sq_animate_function_fin[aid](sq_animate_element[aid]);
		if(sq_animate_progress==0)
		{
			sq_animate_element=new Array();
			sq_animate_function_fin=new Array();
			sq_animate_function_sim=new Array();
			sq_animate_prop=new Array();
			sq_animate_t=new Array();
			sq_animate_step=new Array();
			sq_animate_cur=new Array();
			sq_animate_interval=new Array();
		}
	}
}

