/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
 *	Copyright 2007 BOSS Logics, a division of Set Your Site, Inc.
 *	
 *	USE OR MANIPULATION OF THIS CODE IS PROHIBITED WITHOUT EXPRESS WRITTEN PERMISSION.
 *
 * 	Any use of the code written here-in belongs to the developer
 * 	and is hereby the owner.  If used, one must have strict
 * 	approval by the developer of the code written here-in.
 *
 * 	The developer may at anytime change, modify, add, or delete
 * 	any content contained within. 
 *	
 * 	This content may not be used on any server 12outside of the boss32.com maintained 
 *	servers.  Any such use will be considered a copyright infringement and will be 
 *	prosecuted to the full extent of the law.
 *
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 
_fileInputObjects = Array();
function createFileUpload(id, type, val, label, dir, fileName, js_init, js_upd, js_fin, is_batch) {
	var holder = document.createElement('div');
	holder.className = 'fileUpload';

	var height = 25;
	var file_upload_id = _fileInputObjects.length;

	holder.label = addChild(holder, 'div', 'caption', '', label);
	holder.label.style.position = 'relative';
	holder.label.style.zIndex = 1;
	holder.style.height = height+'px';

	var file = '/i/ui/inputs/file/upload.'+(is_batch ? 'batch':'single')+'.swf';
	var src = file+'?dir='+dir+'&fname='+fileName+'&i='+file_upload_id+'&js_init=_fileUploadDispatchInit&js_upd=_fileUploadDispatchUpd&js_fin=_fileUploadDispatchFin&tok='+_tok+'&sid='+_sid;
	src += '&tp='+type;
	var swf = document.createElement('div');
	swf.innerHTML = generateEmbedCode(src, '160', height, 'exactfit');
	addClass(swf, 'swf');
	holder.style.textAlign = 'left';
	holder.align = 'left';
	addClearDv(holder);
	holder.appendChild(swf);
	holder.swf = swf;
	holder.swf.style.marginTop = ((-1*height)+3)+'px';

	_fileInputObjects[file_upload_id] = { 
		'holder':holder, 'labelTxt':label, 
		'dir':dir, 'file_upload_id':file_upload_id, 'id':id, 'fileName':fileName, 
		'js_init':js_init, 'js_upd':js_upd, 'js_fin':js_fin 
	};
	_fileInputObjects[file_upload_id].indx = _fileInputObjects.length;

	var tmpHTML = holder.innerHTML;
	holder.reset = function() {
		holder.innerHTML = tmpHTML;
		holder.label.innerHTML = label;
	}
	return _fileInputObjects[file_upload_id];
}
function batchUpload(label, dir, js_init, js_upd, js_fin) {
	return createFileInput('', '', label, dir, '', js_init, js_upd, js_fin, true);
}

function _fileUploadDispatchInit(file_upload_id, fileName) {
	var obj = _fileInputObjects[file_upload_id];
	if(!obj) {
		var tmp = file_upload_id;
		_fileInputObjects[file_upload_id] = _fileInputObjects[_fileInputObjects.length-1];
		_fileInputObjects[file_upload_id].file_upload_id = tmp;
		_fileInputObjects[file_upload_id].indx = _fileInputObjects.length;
	}

	addClass(obj.holder, 'uploading');

	obj.status = 1;
	obj.file = fileName;
	if(obj.js_init) {
		try {
			obj.js_init(_fileInputObjects[file_upload_id]);
		} catch(e) {
			alert('Error during file upload init: '+"\n\n"+e);
		}
	}
}
function _fileUploadDispatchUpd(file_upload_id, fileName, bytes_loaded, bytes_total) {
	var obj = _fileInputObjects[file_upload_id];
	var obj = _fileInputObjects[file_upload_id];
	if(!obj) {
		var tmp = file_upload_id;
		_fileInputObjects[file_upload_id] = _fileInputObjects[_fileInputObjects.length-1];
		_fileInputObjects[file_upload_id].file_upload_id = tmp;
		_fileInputObjects[file_upload_id].indx = _fileInputObjects.length;
	}

	obj.status = 2;
	obj.file = fileName;
	obj.bytes_loaded = bytes_loaded;
	obj.bytes_total = bytes_total;

	if(Math.round(100*bytes_loaded/bytes_total)!=100) {
		obj.holder.label.innerHTML = Math.round(100*bytes_loaded/bytes_total)+'% &nbsp;&nbsp;('+addCommas(Math.round(bytes_total/1000))+'kb)';
	} else {
		obj.holder.label.innerHTML = 'processing upload';
	}

	if(obj.js_upd) {
		try {
			obj.js_upd(_fileInputObjects[file_upload_id]);
		} catch(e) {
			alert('Error during file upload update: '+"\n\n"+e);
		}
	}
}
function _fileUploadDispatchFin(file_upload_id, fileName, success, code) {
	var obj = _fileInputObjects[file_upload_id];
	var obj = _fileInputObjects[file_upload_id];
	if(!obj) {
		//_fileInputObjects[file_upload_id] = new Object();
		//obj = _fileInputObjects[file_upload_id];
		//obj = _fileInputObjects[_fileInputObjects.length-1];
		var tmp = file_upload_id;
		_fileInputObjects[file_upload_id] = _fileInputObjects[_fileInputObjects.length-1];
		_fileInputObjects[file_upload_id].file_upload_id = tmp;
		_fileInputObjects[file_upload_id].indx = _fileInputObjects.length;
	}


	if(obj.holder) {
		removeClass(obj.holder, 'uploading');
		obj.holder.label.innerHTML = obj.labelTxt;
		obj.holder.label.style.zIndex = 1;
		obj.holder.swf.style.zIndex = 2;
	}
	obj.response = code;

	if(success!=1) {
		alert('Error during file upload: '+"\n\n"+code);
		obj.status = -1;
		obj.holder.reset();
	} else {
		obj.status = 0;
		obj.path = parseXML(obj.response, 'path');
		obj.size = parseXML(obj.response, 'sz');
		obj.holder.reset();
	}
	if(obj.js_fin) {
		try {
			obj.js_fin(obj);
		} catch(e) {
			alert('Error during file upload complete: '+"\n\n"+e);
		}
	}
}


/* form functions */
function postForm(url, frm, blocking, debug) {
	if(!frm)	frm = document.forms[0];
	if(!checkRequired(frm)) {
		alert('Please fill in required fields.');
		return;
	}
	if(!url) {
		var url = window.location+'';
		url = url.substring(url.lastIndexOf('/')+1, url.lastIndexOf('?'));
	}
	var postStr = getFormFields(frm);
	/*debug*/
	//debug=true;
	if(debug) prompt('',url+'?'+postStr);
	//prompt('',url+'?'+postStr);return;
	/**/

	postRequestObj = false;
	if(window.XMLHttpRequest) { 					// ffox or safari
		postRequestObj = new XMLHttpRequest();
		if (postRequestObj.overrideMimeType) {
			postRequestObj.overrideMimeType('text/xml');
		}
	} else if (window.ActiveXObject) { 				// ie
		try {
			postRequestObj = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				postRequestObj = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}
	if (!postRequestObj) {
		alert('Error processing form.');
		return false;
	}

	postRequestObj.open('POST', url, blocking?false:true);
	postRequestObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	postRequestObj.setRequestHeader("Content-length", postStr);
	postRequestObj.setRequestHeader("Connection", "close");
	postRequestObj.send(postStr);
	if(debug)	alert('Response: '+postRequestObj.responseText);
	if(postRequestObj.responseText) {
		var response = postRequestObj.responseText;
		var errors = parseXML(response, 'errors');
		var hasErrors = errors?true:false;
		var err;
		while(err = parseXML(errors, 'e')) {
			var id = parseXML(err, 'fld');
			var fld = frm[id];
			if(fld && (id!='0')) {
				if(!fld.err)	fld.err = addChild(fld.parentNode, 'div', 'err');
				fld.err.className = 'err';
				fld.err.innerHTML = parseXML(err, 'msg');
				fld.value = '';
				fld.focus();
			} else {
				alert('Error: '+parseXML(err, 'msg'), true, false, 'Error');
			}
			errors = eatXML(errors, 'e');
		}
		loadXMLVals(response, frm, true);
		if(hasErrors)	return false;
		return postRequestObj.responseText;
	}
}
function isEmpty(obj, type) {
	switch(typeof obj) {
		case 'string':
			return obj.length ? false : true;
			break;
		case 'object':
			if(obj.nodeName.toLowerCase()=='form') {
				for(var i in obj.elements) {
					if(obj.elements[i] && obj.elements[i].name && obj.elements[i].type && (obj.elements[i].type.toLowerCase()!='hidden') && (obj.elements[i].value.length>0) && (obj.elements[i].value!=obj.elements[i].alt)) 
						return false;
				}
				return true;
			} else if(obj.nodeName) {
				return obj.innerHTML ? false : true;
			} else {
				return obj.length ? false : true;
			}
			break;
	}
}

function getFormFields(frm) {
	var str = '';
	for(var x=0; x < frm.elements.length; x++) {
		var e = frm.elements[x];
		if(e 
		   && e.type && (e.type!=undefined)
		   && e.name && (e.name!=undefined)
		   && e.value != undefined) {
			if(e.type.toLowerCase() == 'checkbox') {
				e.value = e.checked ? 1 : 0;
			} 
			if(e.err)	e.err.innerHTML = '';
			str += e.name+'='+(e.value!=e.alt?escape(e.value):'')+'&';
		}
	}
	return str;
}
// populate a form using xml
var _reservedFormFields = Array('fn');
function loadXMLVals(xml, form, onlyValues) {
	if(onlyValues==undefined)	onlyValues=false;
	for(var i in form.elements) {
		if(form.elements[i].name) {
			var val = parseXML(xml, form.elements[i].name);
			if(val || !onlyValues) {
				if(_reservedFormFields.indexOf(form.elements[i].name) == -1) {
					form.elements[i].value = val;
					if(form.elements[i].className=='chk')	
						form.elements[i].previousSibling.className = 'chk '+(parseInt(val)?'on':'');
				}
			}
		}
	}
}

function setLoad(obj) {
	if(!obj.loadScreen) {
		obj.loadScreen = addChild(document.body, 'div', 'loadMask');
		addChild(obj.loadScreen, 'div');
		obj.loadScreen.intvl = setInterval(function() { obj.loadScreen.style.height=obj.offsetHeight+'px'; obj.loadScreen.style.width=obj.offsetWidth+'px'; }, 1000);

		obj.loadScreen.style.position = 'absolute';
	}

	obj.loadScreen.style.top = Top(obj)+'px';
	obj.loadScreen.style.left = Left(obj)+'px';
	obj.loadScreen.style.width = obj.offsetWidth+'px';
	obj.loadScreen.style.height = obj.offsetHeight+'px';
	obj.loadScreen.style.display = 'block';
	obj.loadScreen.style.zIndex = '9';
};
function clearLoad(obj) {
	if(obj && obj.loadScreen) {
		obj.loadScreen.style.display = 'none';
		if(obj.loadScreen.intvl)	clearInterval(obj.loadScreen.intvl);
	}
};
function generateEmbedCode(src,w,h, scale) {
	var code = '';
	src = ''+src;
	if(w==undefined) w=500;
	if(h==undefined) h=290;
	w = Math.round(w);
	h = Math.round(h);

	var paramStr = '';
	if(src.indexOf('?')>=0) {
		var paramAry = src.substring(src.indexOf('?')+1).split('&');
		for(var x in paramAry) {
			var tmp = paramAry[x].split('=');
			paramStr += '<param name="'+tmp[0]+'" value="'+escape(tmp[1])+'">';
		}
	}
	var obj = document.createElement('div');
	//var obj = document.createElement('object');
	obj.width = w;
	obj.height = h;
	obj.style.overflow = 'hidden';
	//alert(src);
	obj.innerHTML = '<object clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 width="'+w+'" height="'+h+'" style="position:relative; width:'+w+'px; height:'+h+'px;">'
			+paramStr+'<param name="movie" value="'+src+'" /><param name="wmode" value="transparent">'
			+'<!--[if !IE]>--><object type="application/x-shockwave-flash" data="'+src+'" width="'+w+'" height="'+h+'"><param name="movie" value="'+src+'" /></object><!--<![endif]-->'
			+'<embed src="'+src+'" quality="high" bgcolor="#ffffff" width="'+w+'" height="'+h+'" wmode="transparent" name="movie" align="" type="application/x-shockwave-flash"  pluginspage="http://www.macromedia.com/go/getflashplayer">'
			+'</object>';

	/*
	obj.wmode = "transparent";
	obj.classid = "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000";
	obj.codebase = "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0";
	obj.width = w+'px';
	obj.height = h+'px';
	obj.bgcolor = '#ff0000';
	if(paramStr)  obj.innerHTML = paramStr;
	var params = { 
		'type':'application/x-shockwave-flash', 
		'pluginspage':'http://www.macromedia.com/go/getflashplayer',
		'allowScriptAccess':'sameDomain', 
		'wmode':'transparent',
		'allowFullScreen':'true',
		'quality':'high',
		'scale':scale,
		'src':src,
		'width':w,
		'height':h,
		'bgcolor':'#ffffff'
	}
	for(var i in params)	addParam(obj, i, params[i]);
	var embed = addChild(obj, 'embed');
	for(var i in params)	embed[i] = params[i];
	embed.setAttribute('wmode', 'transparent');
	*/
	return obj.innerHTML;
}
function addParam(rent, name, value) {
	var child = addChild(rent, 'param');
	child.name = name;
	if(value)	child.value = value;
	return child;
}
//=============================== end div functions ================================//
/* string formatting */
function checkRequired(frm) {
	var good2go = true;
	for(var x in frm) {
		if(frm[x] && frm[x].name && frm[x].className) {
			if((frm[x].className.indexOf('req')!=-1) && ((frm[x].value==frm[x].alt) || (frm[x].value.replace(/^\s+|\s+$/g, '') ==''))) {
				frm[x].className = frm[x].className+' warning';
				good2go=false;
			} else	frm[x].className = frm[x].className.replace('warning','');
		}
	}
	return good2go;
}

function share(network, link, label) {
	var url = '';
	switch(network) {
		case 'facebook':
			url = 'http://www.facebook.com/sharer.php?t='+encodeURIComponent(label.replace(/-/g,'%20'))+'&u='+encodeURIComponent(link)+'%26';//+string_generator(5);
			break;
		case 'twitter':
			url = 'http://twitter.com/share?text='+label+' '+encodeURIComponent(link);
			break;
		case 'digg':
			url = 'http://digg.com/submit?url='+link;
			break;
		case 'delicious':
			url = 'http://delicious.com/save?v=5&amp;noui&amp;jump=close&url='+link+'&title='+label.replace(/-/g,' ');
			break;
		case 'myspace':
			url = 'http://www.myspace.com/Modules/PostTo/Pages/?u='+link+'&c='+encodeURIComponent(label.replace(/-/g, ' '));
			break;
		case 'stumbleupon':
			url = 'http://www.stumbleupon.com/submit?url='+encodeURIComponent(link)+'&title='+label;
			break;
	}
	window.open(url, network, 'toolbar=no,width=550,height=550');
        //_gaq.push(['_trackEvent', document.title, 'Share - '+network, label]);

	return false;
}

