
// JavaScript Document
//set window.http_host_css and window.http_host in call doc
	

		function chg_ss(theme){
			switch(theme){
				case "good":
					var ss = window.http_host_css+'/templates/abc2.css';
				break;
				case "evil":
					var ss = window.http_host_css+'/templates/abc.css';
				break;
				default:
					var ss = window.http_host_css+'/templates/abc2.css';
				break;
			}			
			//document.styleSheets[0].cssRules[0].cssText = "@import url('"+ss+"');";
			document.getElementById('stylesheet').href = ss;
			window.theme = theme;
		}
		//Response Function
		function ajax_proc_response_ss(r_type,r_data){
			switch(r_type){
				case "xml":
					var r_xml = r_data;
					var status = r_xml.getElementsByTagName("status")[0].childNodes[0].nodeValue;
					if(status!=0){ alert("An error occured saving your selection"); }
				break;
				case "txt":
					var r_txt = r_data;
					alert('r_txt')
				break;
			}
		}
		//Load Status function
		function set_load_status_ss(loading){
			/*
			if(loading){
				document.getElementById("load_ss").innerHTML = "<img src='../img/loading-vsm.gif' /> Loading...";
			}else{
				document.getElementById("load_ss").innerHTML = "";	
			}
			*/
		}
		//No Data function
		function ajax_no_data_ss(){
			alert('No Data')
		}
		//prototype in the functions
		ajax.prototype.ajax_proc_response_ss = ajax_proc_response_ss;
		ajax.prototype.set_load_status_ss = set_load_status_ss;
		ajax.prototype.ajax_no_data_ss = ajax_no_data_ss;
		
		//Function syntax
		//constructor: ajax(params, script_name, s_method, output_format, response_func_name, load_func_name, no_data_func_name)
		//sendrequest: ajax.sendData(params, script_name, s_method, output_format, response_func_name, load_func_name, no_data_func_name)
		
		//define new object
		var ss = new ajax('', window.http_host+'/saveStyleSelectionWrap.php', 'get', 'xml', 'ajax_proc_response_ss', 'set_load_status_ss', 'ajax_no_data_ss');		

		function follower(cur_obj,max_wobble,max_distance,max_speed,retrigger_interval,init_timeout,anti_stutter){
		
			this.max_wobble = (max_wobble) ? max_wobble : 2 ;
			this.max_distance = (max_distance) ? max_distance: 200;
			this.max_speed = (max_speed) ? max_speed : 2;
			this.retrigger_interval = (retrigger_interval) ? retrigger_interval : 100;
			this.init_timeout = (init_timeout) ? init_timeout : 200 ;
			this.anti_stutter = (anti_stutter) ? anti_stutter : 200 ; 
			this.last_x;
			this.last_y;		
			this.cur_x;
			this.cur_y;
			this.cur_obj = document.getElementById(cur_obj);
			this.cur_obj_id = cur_obj;
			
			this.getXY = function(evt){
				//the actual function		
				var img_x;
				var img_y;
				if (!evt.pageX) { // MSIE
					img_x = evt.offsetX;
					img_y = evt.offsetY;
					img_x_raw = evt.clientX
					img_y_raw = evt.clientY	+ document.documentElement.scrollTop			
				}else{ // Netscape, etc.
					img_x = evt.pageX;	
					img_y = evt.pageY;
					img_x_raw = evt.pageX;	
					img_y_raw = evt.pageY;				
					for (var offMark = evt.target; offMark; offMark = offMark.offsetParent) {
						img_x -= offMark.offsetLeft;
					}
					for (var offMark = evt.target; offMark; offMark = offMark.offsetParent) {
						img_y -= offMark.offsetTop;
					}
				}
				var r = Array();
				r['img_x'] = img_x;
				r['img_y'] = img_y;
				r['img_x_raw'] = img_x_raw;
				r['img_y_raw'] = img_y_raw;
				return r;
			}
		
			this.move_obj = function(evt){
				
				if(!this.cur_obj){this.cur_obj = document.getElementById(this.cur_obj_id);}
				
				var p = this.getXY(evt);
				this.last_x = this.cur_x;
				this.last_y = this.cur_y;		
				this.cur_x = p['img_x_raw']+10;
				this.cur_y = p['img_y_raw']+10;
				this.delay_move(this,1);
			}
			
			this.delay_move = function(t,block){
				
				var max_speed = t.max_speed;
				var anti_stutter = t.anti_stutter;
				var retrigger_interval = t.retrigger_interval;
				var init_timeout = t.init_timeout;
				
				// Find the absolute x y movement
				var ym = Math.abs(t.cur_y-t.last_y);
				var xm = Math.abs(t.cur_x-t.last_x);
				// Prevent stutter
				if( ym < anti_stutter && xm < anti_stutter ){
					var xo = t.cur_obj.style.left.substr(0,(t.cur_obj.style.left.length-2)) * 1;
					var yo = t.cur_obj.style.top.substr(0,(t.cur_obj.style.top.length-2)) * 1;
					var yn = Math.round( ((t.cur_y + yo)/2) ) ;
					var xn = Math.round( ((t.cur_x + xo)/2) ) ;
					// Max Speed			
					var xnm = xn-xo;
					var ynm = yn-yo;
					if(Math.abs(xnm) > max_speed){
						xnm = ( Math.max(xnm,0)==0 ) ? -1*max_speed : max_speed ;
						xn = xo + xnm ;
					}
					if(Math.abs(ynm) > max_speed){
						ynm = ( Math.max(ynm,0)==0 ) ? -1*max_speed : max_speed ; 
						yn = yo + ynm ;
					}
					t.delay_move_callback = t.curry(t.delay_move,t);			
					if(yn!=yo || xn!=xo){
						if(!block){
							if(t.cur_x > 18){ t.cur_obj.style.left = xn+"px"; }
							if(t.cur_y > 18){ t.cur_obj.style.top = yn+"px"; }
							delaymove=setTimeout(function(){t.delay_move_callback();},retrigger_interval); // retriggered timeout
						}else{
							delaymove=setTimeout(function(){t.delay_move_callback();},init_timeout); // initial timeout				
						}
					}
				}
			}
			
			this.wobble = function(t,block){
				
				if(!t.cur_obj){t.cur_obj = document.getElementById(t.cur_obj_id);}
				
				var max_wobble = t.max_wobble;
				var max_distance = t.max_distance;
				var max_speed = t.max_speed;
				var retrigger_interval = t.retrigger_interval;
				var init_timeout = t.init_timeout;
				
				var xo = t.cur_obj.style.left.substr(0,(t.cur_obj.style.left.length-2)) * 1;
				var yo = t.cur_obj.style.top.substr(0,(t.cur_obj.style.top.length-2)) * 1;
				var yn = ( yo+Math.floor((Math.random()*max_wobble+0.5)-(max_wobble/2)) );
				var xn = ( xo+Math.floor((Math.random()*max_wobble+0.5)-(max_wobble/2)) );
				var xnm = xn-t.cur_x;
				var ynm = yn-t.cur_y;
				//max distance from mouse
				if(Math.abs(xnm) > max_distance){
					xn = Math.round((xn + t.cur_x) / 2) ;
				}
				if(Math.abs(ynm) > max_distance){
					yn = Math.round((yn + t.cur_y) / 2) ;
				}
				// Max Speed			
				var xnm = xn-xo;
				var ynm = yn-yo;
				if(Math.abs(xnm) > max_speed){
					xnm = ( Math.max(xnm,0)==0 ) ? -1*max_speed : max_speed ;
					xn = xo + xnm ;
				}
				if(Math.abs(ynm) > max_speed){
					ynm = ( Math.max(ynm,0)==0 ) ? -1*max_speed : max_speed ; 
					yn = yo + ynm ;
				}
				t.wobble_callback = t.curry(t.wobble,t);
				if(!block){
					t.cur_obj.style.left = xn+"px";
					t.cur_obj.style.top = yn+"px";
					delaywobble=setTimeout(function(){t.wobble_callback();},retrigger_interval); // retriggered timeout
				}else{
					delaymove=setTimeout(function(){t.wobble_callback();},init_timeout); // initial timeout				
				}
			}
			
			this.find_pos = function(obj) {
				var r = { "x":0 , "y":0 }				
				if (obj.offsetParent) {			
					do {
						r.x += obj.offsetLeft;
						r.y += obj.offsetTop;
					} while (obj = obj.offsetParent);
				}else{
					r.x = obj.offsetLeft;
					r.y = obj.offsetTop;
				}
				return r;	
			}
			
			this.goto = function(x,y,target_elem){
				if(!this.cur_obj){this.cur_obj = document.getElementById(this.cur_obj_id);}				
				x = x * 1;
				y = y * 1;
				var xp = yp = 0;
				if(target_elem){
					var pos = this.find_pos(target_elem);
					xp = pos['x'];
					yp = pos['y'];
				}
				x += xp;
				y += yp;
				this.cur_obj.style.left = x+"px";
				this.cur_obj.style.top = y+"px";
			}			
			
			this.curry = function(method){
				var curried = [];
				for (var i = 1; i < arguments.length; i++) {
					curried.push(arguments[i]);
				}
				return function() {
					var args = [];
					for (var i = 0; i < curried.length; i++) {
						args.push(curried[i]);
					}
					for (var i = 0; i < arguments.length; i++) {
						args.push(arguments[i]);
					}
					return method.apply(null, args);
				}
			}
			
			this.wub = this.curry(this.wobble,this);
			
		}
		function add_e_handler(obj, e, func){
			//test if func exists - prevents problems in IE
			if(typeof func != "undefined"){		
				if(obj.attachEvent){
					obj.attachEvent('on' + e, func);
				}else if(obj.addEventListener){
					obj.addEventListener(e, func, false);
				}else{
					obj['on' + e] = func;
				}
			}
		}
		
		function remove_e_handler(obj, e, func){
			//test if func exists - prevents problems in IE		
			if(typeof func != "undefined"){
				if (obj.detachEvent){
					obj.detachEvent('on' + e, func);
				}else if(obj.removeEventListener){
					obj.removeEventListener(e, func, false);
				}else{
					obj['on' + e] = null;
				}
			}
		}
		function show_follower(x_offset,y_offset,target_elem){
			if(window.follower_on){
				document.getElementById('z1').style.display = "none";
				document.getElementById('z2').style.display = "none";
				document.getElementById('z3').style.display = "none";
				document.getElementById('z4').style.display = "none";
				remove_e_handler(document.body, "mousemove", window.f1w);
				remove_e_handler(document.body, "mousemove", window.f2w);
				remove_e_handler(document.body, "mousemove", window.f3w);
				remove_e_handler(document.body, "mousemove", window.f4w);
				delete(window.f1);
				delete(window.f2);
				delete(window.f3);
				delete(window.f4);
				window.follower_on = false;
			}else{
				document.getElementById('z1').style.display = "block";
				document.getElementById('z2').style.display = "block";
				document.getElementById('z3').style.display = "block";
				document.getElementById('z4').style.display = "block";
				window.f1 = new follower('z1','','','','',100,'');
				window.f2 = new follower('z2','','','','',300,'');
				window.f3 = new follower('z3','','','','',500,'');
				window.f4 = new follower('z4','','','','',700,'');					
				window.f1.wub(1);
				window.f2.wub(1);
				window.f3.wub(1);
				window.f4.wub(1);
				add_e_handler(document.body, "mousemove", window.f1w = function(e) { window.f1.move_obj(e); });
				add_e_handler(document.body, "mousemove", window.f2w = function(e) { window.f2.move_obj(e); });
				add_e_handler(document.body, "mousemove", window.f3w = function(e) { window.f3.move_obj(e); });
				add_e_handler(document.body, "mousemove", window.f4w = function(e) { window.f4.move_obj(e); });
				if(target_elem || x_offset || y_offset){
					window.f1.goto(x_offset,y_offset,target_elem);
					window.f2.goto(x_offset,y_offset,target_elem);
					window.f3.goto(x_offset,y_offset,target_elem);
					window.f4.goto(x_offset,y_offset,target_elem);	
				}				
				window.follower_on = true;
			}	
		}
