// JavaScript Document
//

/*********************************/
/* debug print                   */
/*********************************/
window.trace = function(str){
	//return;
	try{
		console.log(str);
	}catch(e){
		
	}
}



function getElementsByTagAndClass(tag, cls, parent){
	var res = new Array();
	var tags = (parent)?parent.getElementsByTagName(tag):document.getElementsByTagName(tag);
	var len = tags.length;
	for(var i=0; i<len; i++){
		var tmp = tags[i];
		if(tmp.className.indexOf(cls)>-1){
			res.push(tmp);
		}
	}
	
	return res;
}


function isIE(){
	var uagent = navigator.userAgent;
	if(uagent.indexOf("MSIE") != -1) return true;
	return false;
}

function isIE6(){
	var uagent = navigator.userAgent;
	if(uagent.indexOf("MSIE 6.0") != -1) return true;
	return false;
}

function isFirefox(){
	var uagent = navigator.userAgent;
	if (uagent.indexOf("Firefox") != -1) return true;
	return false;
}


function getSwfElement(name) {
	if (isIE()) {
		return window[name];
	}else {
		return document[name];
	}
}


var ResizeManager = {
	callBackArr:new Array(),
	lockFlg:false,
	
	init:function(){
		if(window.addEventListener) window.addEventListener("resize", ResizeManager.execute, true);
		else window.attachEvent("onresize", ResizeManager.execute);
	},
	
	execute:function(){
		var len = ResizeManager.callBackArr.length;
		if(ResizeManager.lockFlg) return;
		ResizeManager.lockFlg = true;
		setTimeout(function(){
			for(var i = 0; i < len; i++){
				var callbacks = ResizeManager.callBackArr[i];
				callbacks.callback.call(callbacks.scope);
			}
			ResizeManager.lockFlg = false;
		},40);
	},
	
	addCallBack:function(func, scope){
		var len = this.callBackArr.length;
		for(var i = 0; i < len; i++){
			var callbacks = ResizeManager.callBackArr[i];
			if(callbacks.callback == func && callbacks.scope == scope) return;
		}
		this.callBackArr.push({callback:func, scope:scope});
	},
	
	removeCallBack:function(func, scope){
		var len = this.callBackArr.length;
		for(var i = 0; i < len; i++){
			if(this.callBackArr[i] == func){
				this.callBackArr.splice(i, 1);
				return;
			}
		}
	}
}


var Observer = {
	lookupTable:new Object(),
	addEventListener:function(event, target, func, listener){
		if(!this.lookupTable[event]){
			this.lookupTable[event] = new Array();
		}
		
		this.lookupTable[event].push({target:target, callBack:func, caller:listener});
	},
	
	removeEventListener:function(event, target, func, listener){
		var elem = this.lookupTable[event];
		if(!elem) return;
		
		var len = elem.length;
		for(var i = 0; i < len; i++){
			if(elem[i]["target"] == target && elem[i]["callBack"] == func){
				elem.splice(i,1);
				break;
			}
		}
		if(elem.length == 0) this.lookupTable[event] = null;
	},
	
	dispatchEvent:function(event, target){
		var elem = this.lookupTable[event];
		if(!elem) return;
		
		var len = elem.length;
		for(var i = 0; i < len; i++){
			if(elem[i]["target"] == target){
				
				elem[i]["callBack"].apply(elem[i]["caller"]);
			}
		}
	}
}


function getParamObject(){
	if(!location || !location.search) return;
	
	var returnObject = {};
	var paramsArr = location.search.replace(/\?/, "").split("&");
	var len = paramsArr.length;
	for(var i = 0; i < len; i++){
		var param = paramsArr[i].split("=");
		var value;
		try{
			value = decodeURIComponent(param[1]);
		}catch(e){
			return null;
		}
		returnObject[param[0]] = value;
	}
	
	return returnObject;
}


function getHTMLUnescapedString(str){
	return str.replace(/&amp;|&lt;|&gt;|&quot;|&nbsp;/g, function(word){
		switch(word){
			case "&amp;":
				return "&";
			case "&lt;":
				return "<";
			case "&gt;":
				return ">";
			case "&quot;":
				return "\"";
			case "&nbsp;":
				return " ";
		}
		return "";
	});
}


function getTagRemovedString(str){
	return getHTMLUnescapedString(str).replace(/<[^>]+>/g, "");
}


function copyArray(arr){
	if(!arr || arr.length == 0) return;
	var len = arr.length;
	var returnArr = new Array();
	for(var i = 0; i < len; i++){
		returnArr.push(arr[i]);
	}
	return returnArr;
}


function copyObject(obj){
	if(!obj) return;
	var returnObj = {}
	for (var key in obj) {
		returnObj[key] = obj[key];
	}
	
	return returnObj;
}

/*
Function.prototype.myBind = function(){
	var self = this;
	var scope = arguments[0];
	var argArr = new Array();
	for(var i = 1; i < arguments.length; i++){
		argArr.push(arguments[i]);
	}
	
	return function(event){
		argArr.unshift(event);
		return self.apply(scope, argArr);
	}
}
*/

