﻿//################################################################################
//#  purpose: brings activity window into focus, functions for closing window,   #
//#  resizes window for NS (because there is no true "maximize" like IE on a PC) #
//#  CODE CONTAINED ON THIS PAGE ALSO ALLOWS SCOLLABLE TEXT BOXES IN             #
//#  FLASH ACTIVITIES TO RESPOND SCROLL WHEEL OF USER'S MOUSE                    #
//################################################################################
function trueReturn() {return true;}
function falseReturn() {return false;}
//# suppress errors for older browsers:
// window.onerror = trueReturn;

//#  generic object detection:
function objP(o) {return ((typeof o == 'object' && o != null)?1:0) }
function numP(o) {return (typeof o == 'number') }
function strP(o) {return ((typeof o == 'string' && o)?1:0) }
function funcP(o) {return (typeof o == 'function') }

function isFnObj(o) {return (objP(o) || funcP(o)) }


//# QS:

function deserialize(s, paramDelim, nvDelim) {
	var o = new Object();
	var param_arr = s.split(paramDelim);
	for (var i=0; i<param_arr.length; i++) {
		var nv_pair = param_arr[i];
		var nv_arr = nv_pair.split(nvDelim);
		o[nv_arr[0]] = my_unescape(nv_arr[1]);
	}
	return o;
}

function synchronizeObjects(obj1, obj2) {
	for (prop in obj2) {
		obj1[prop] = obj2[prop];
	}
	return obj1;
}
function unionObjects() {
	var o = {};
	for (var i=0; i<arguments.length; i++) {
		var obj = arguments[i];
		for (prop in obj) {
			o[prop] = obj[prop];
		}
	}
	return o;
}

function serialize(obj, paramDelim, nvDelim) {
	var s = "";
	for (prop in obj) {
		var v = obj[prop];
		if (v) {
			s += (s=="")?"":paramDelim;
			s += prop + nvDelim + my_escape(v);
		}
	}
	return s;
}

function getData(key) {
	//alert("key:"+key);
	if (typeof QS_DATA == "object") {
		var v=QS_DATA[key]; 
		return (strP(v)?v:"");
	}
}

function parseQuery(qs) {
	var str=(qs.indexOf('?')==0)?qs.substr(1,qs.length):qs;
	return deserialize(str, "&", "=");

}

/////////////////////////////////////////////////////////////////////////////////////////////////////
//# capability, browser sniff:

function getFlashConnectability() {

	var isNS = (navigator.appName.indexOf('Netscape')>=0)?1:0;
	var isNS6 = (navigator.userAgent.indexOf('Netscape6')>=0)?1:0;
	var isMoz = (isNS && navigator.userAgent.indexOf('Mozilla')>=0)?1:0;
	
	var platform = (typeof navigator=='object' && strP(navigator.platform))?(navigator.platform.toLowerCase()):'';
	var is_win = ((platform.indexOf('win')==-1)?0:1);
	var isMac = !(is_win);

	// (isNS6 && > FLASH6r40 )||
	var cantTalkToFlash = (isNS6 || ((isMac || isNS) && (!isMoz)));
	return !cantTalkToFlash;
}
//#######################################################
//# DHTML, container retreival:

function getObjByID(s, win) {
	var d = (objP(win))? win.document : self.document;
	if (objP(d) ) {
		//var domObj = (!(funcP(d.getElementById)) && objP(d.all))? d.all : d;
		return (funcP(d.getElementById))?d.getElementById(s): (objP(d.all) && objP(d.all[s]))? d.all[s] : d[s];
	} else {
		return '';
	};
}

//#######################################################
//# mouse wheel:

function doOnMouseWheel() {

	//alert("doOnMouseWheel event.wheelDelta: " + event.wheelDelta)
	//var dir = (event.wheelDelta>0)?'up':'down';
	var dir = (event.wheelDelta>0)?'1':'-1';
	//window.defaultStatus = ("document.event.wheelDelta : " + event.wheelDelta )
	doScroll(dir);
}

function doScroll(scrolldirection) {
	setFlashViaJS(EMBEDOBJECT_ID, 'detect_scroll', scrolldirection);
}


//#######################################################
//# control flash embed/object from HTML page:
//# (flashReady can also be false but then set to "true" by the embedded flash movie)
var flashReady = true;

function getFlashObj(id) {
	var w = window;
	var d = w.document;
	var fobj = (funcP(d.getElementById))?d.getElementById(id): (objP(d.all))? d.all[id] : d[id];

	var o = (objP(d.embeds)&&isFnObj(d.embeds[id]))?d.embeds[id]:(isFnObj(fobj))?fobj:w[id];

	return o;

}

function setFlashViaJS(flash_id, name, val) {
	if (flashReady && getFlashConnectability()) {
		var flashObj = getFlashObj(flash_id);
		if (isFnObj(flashObj)) {
			try {
				flashObj.SetVariable(String(name),String(val));
				return true;
			} catch(e) {
			}
		}
	};
	return false;
}


function flashGoLabel(flash_id, label) {
	var w = window;
	var d = w.document;
	var flashObj = getFlashObj(flash_id);

	if (isFnObj(flashObj)) {
		//alert("objP("+flashObj+"):"+objP(flashObj));
		try {
			flashObj.TCallLabel("_root", label);
			return true;
		} catch(e) {
		}
	}
	return false;
}



//#######################################################

function MOZmaximize() {
	if (typeof screen.availWidth == 'number') {
		window.outerWidth=screen.availWidth;
		window.outerHeight=screen.availHeight;
	}
}




function getFlashObjectString(obj_id, flash_url, w, h, flashVars, minversion, bg) {

	var codebase = 'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab' + (minversion==6)? '#version=6,0,0,0':'#version=7,0,0,0';
	var bgcol = (bg)?bg:'#ffffff';
	var s = '';
	
	s += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+codebase+'" width="'+w+'" height="'+h+'" id="'+obj_id+'" align="middle" menu="false">';
	s += '<param name="menu" value="false">';
	s += '<param name="flashVars" value="'+flashVars+'">';
	s += '<param name="allowScriptAccess" value="sameDomain">';
	s += '<param name="movie" value="'+flash_url+'">';
	s += '<param name="quality" value="best">';
	s += '<param name="bgcolor" value="'+bgcol+'">';
	s += '<embed src="'+flash_url+'" flashVars="'+flashVars+'" quality="best" bgcolor="'+bgcol+'" width="'+w+'" height="'+h+'" name="'+obj_id+'" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>';
	s += '</object>';
	
	// alert(str);
	
	return s;
	
}

function getLangDataObj() {
	var o = {};
	o.ar={};
	o.en={};
	o.fr={};
	o.sp={};

	o.ar.title = "تغطية الحياة الوظيفية";
	o.en.title = "Career Capture";
	o.fr.title = "photo de carrière";
	o.sp.title = "captura de profesiones";

	o.ar.msg1 = "ادخل اسمك من فضلك";
	o.en.msg1 = "Please enter your name.";
	o.fr.msg1 = "Saisis ton nom.";
	o.sp.msg1 = "Por favor, ingresa tu nombre.";

	o.ar.msg2 = "يرجى إدخال أسمك الأول فقط";
	o.en.msg2 = "Please enter just your first name.";
	o.fr.msg2 = "Saisis ton prénom seulement.";
	o.sp.msg2 = "Por favor, ingresa sólo tu nombre de pila.";

	o.ar.msg3 = "اسمك أطول مما ينبغي، يرجى تقصيره";
	o.en.msg3 = "Your name is too long, please shorten it.";
	o.fr.msg3 = "Ton nom est trop long. Abrège-le.";
	o.sp.msg3 = "Tu nombre es demasiado largo. Por favor, acórtalo.";


	return o;
}


function getFlashDataObj() {

	var o = {};

	o["ar"]={xml_data:"../xml/git_data_ar_r", font_file:"fonts_ar_reversed_container", loadfonts:unescape("%uFED1%uFEED%uFEAE%uFEA4%uFEE0%uFE8D%20%uFEE1%uFEEE%uFED8%uFEC3 %uFEDE%uFEF4%uFEE4%uFEA4%uFE97"), loaddata:unescape("%uFE95%uFE8E%uFEE7%uFE8E%uFEF4%uFE92%uFEDF%uFE8D%20%uFEDE%uFEF4%uFEE4%uFEA4%uFE97"), loadshell:unescape("%uFED1%uFEFC%uFED0%uFEDF%uFE8D%20%uFEDE%uFEF4%uFEE4%uFEA4%uFE97")};

	o["en"]={xml_data:"../xml/git_data_en"};

	o["fr"]={xml_data:"../xml/git_data_fr", loadfonts:"téléchargement de caractères", loaddata:"téléchargement des données", loadshell:"téléchargement de programme"};

	o["sp"]={xml_data:"../xml/git_data_sp", loadfonts:"cargando fuentes", loaddata:"cargando datos", loadshell:"cargando cápsula"};

	return o;

}

function setTitle() {
	if (!objP(document.lang_data)) {
		document.lang_data = lang_data = getLangDataObj();
	}
	var langcode = document.CUR_LANGUAGE;

	//alert("langcode:"+langcode);
	if (langcode) {
		document.title = lang_data[langcode]["title"];
	}
}

function get_git_flashvars(lang) {
	var d = document;
	if (!objP(document.ccdata)) {
		d.ccdata = getFlashDataObj();
	}
	if (!d.ccdata[lang]) {
		d.ccdata[lang] = {};
	}
	d.ccdata[lang]["language"]=lang;
	d.ccdata[lang]["username"]=getData('username');

	return serialize(d.ccdata[lang],"&","=");
}

function get_GIT_flash_string() {

	var flashvars = get_git_flashvars(document.CUR_LANGUAGE);

	return getFlashObjectString(EMBEDOBJECT_ID, FLASH_PATH, 780, 540, flashvars);

}

function FLASHID_DoFSCommand(arg) {
	//# (command, args)?
	//# allow embedded flash movie to communiate w/ HTML page without using: getURL("javascript:...")
	//# "FLASHID" will become name/id of flash object, as handle that points to this func set in main()
	// alert("FLASHID_DoFSCommand arg: " + arg);
}



//#######################################################
// Flash-specific unicode escaping:

function my_unescape(s) {
	try {
		return decodeURIComponent(s);
	}catch(e) {
		return unescape(s);
	}

}

function my_escape(s) {
	try {
		return encodeURIComponent(s);
	} catch(e) {
		return escape(s);
	}
}

function RE(s) {
	return (new RegExp(s,"gi"));
}

function doHEX(s) {
	return('%x' + s.charCodeAt(0).toString(16));
}

function my_trim(s) {
	while (s.substring(0,1) == ' ') {
		s = s.substring(1,s.length);
	}
	while (s.substring(s.length-1,s.length) == ' ') {
		s = s.substring(0,s.length-1);
	}

	try {
		return s.replace(RE('[<>\/\\"\'\\n\\r]'),"");
	}catch(e) {
		return s;
	}

}


