///////////// BasicException Start///////////////////
kr.co.uhsoft.framework.Util.defineClass("kr.co.uhsoft.BasicException",function(message,errorId){
	//this.name="kr.co.uhsoft.BasicException";
	this.name="BasicException";
	this.message=message;
  	this.errorId=errorId;
});

kr.co.uhsoft.BasicException.prototype.setMessage=function(message){
	this.message=message;
};

kr.co.uhsoft.BasicException.prototype.getMessage=function(){
	
	if(this.errorId && messageHolder && messageHolder.isExist("CommonMsg."+this.errorId)){
		return messageHolder.get("CommonMsg."+this.errorId);
	}else{
		return this.message;
	}
};

kr.co.uhsoft.BasicException.prototype.setErrorId=function(errorId){
	this.errorId=errorId;
};

kr.co.uhsoft.BasicException.prototype.getErrorId=function(){
	return this.errorId;
};

///////////// BasicException End///////////////////

/////////// kr.co.uhsoft.Holder Start //////////	
kr.co.uhsoft.framework.Util.defineClass("kr.co.uhsoft.Holder",function(holder){
	this.holder={};
});

kr.co.uhsoft.Holder.prototype.setHolder=function(holder){
	this.holder=holder;
};

kr.co.uhsoft.Holder.prototype.get=function(name,defaultValue){
	if(this.isExist(name)){
		return this.holder[name];
	}else{
		if(typeof defaultValue !== "undefined"){
			return defaultValue;
		}else{
			return undefined;
		}
	}
};

kr.co.uhsoft.Holder.prototype.isExist=function(name){
	if(typeof this.holder[name] !== "undefined"){
		return true;
	}else{
		return false;
	}
};

kr.co.uhsoft.Holder.prototype.add=function(name,value){
	if(typeof value !== "undefined"){
		this.holder[name]=value;
	}
};

kr.co.uhsoft.Holder.prototype.remove=function(name){
	delete this.holder[name];
};

/////////// kr.co.uhsoft.Holder End //////////

/////////// kr.co.uhsoft.DataHolder Start //////////	
kr.co.uhsoft.framework.Util.defineClass("kr.co.uhsoft.DataHolder",function(){
	kr.co.uhsoft.Holder.call(this);
	this.add("method","GET");//POST
	this.add("type","application/json");
	this.add("asyn",true);
	this.add("contentType","application/x-www-form-urlencoded");
	this.add("params",{});
});

kr.co.uhsoft.DataHolder.prototype=new kr.co.uhsoft.Holder();
	
kr.co.uhsoft.DataHolder.prototype.addParam=function(name,value){
	if(!this.isExist("params")){
		this.add("params",{});
	}
	
	this.get("params")[name]=value;
};

kr.co.uhsoft.DataHolder.prototype.getParam=function(name){
	if(this.isExist("params")){
		return this.get("params")[name];
	}

};
	
kr.co.uhsoft.DataHolder.prototype.removeParam=function(name){
	if(this.isExist("params")){
		delete this.get("params")[name];
	}
};
		
kr.co.uhsoft.DataHolder.prototype.setParams=function(params){
	this.add("params",params);
};
	
kr.co.uhsoft.DataHolder.prototype.getParams=function(){
	
	if(!this.isExist("params")){
		return this.add("params",{});
	}
		
	return this.get("params");
};

kr.co.uhsoft.DataHolder.prototype.setUrl=function(str){
	this.add("url",str);
};
		
kr.co.uhsoft.DataHolder.prototype.getUrl=function(){
	return this.get("url");
};
	
kr.co.uhsoft.DataHolder.prototype.setMethod=function(str){
	this.add("method",str);
};
	
kr.co.uhsoft.DataHolder.prototype.getMethod=function(){
	return this.get("method");
};
	 
kr.co.uhsoft.DataHolder.prototype.setType=function(str){
	this.add("type",str);
};
	
kr.co.uhsoft.DataHolder.prototype.getType=function(){
	return this.get("type");
};
	
kr.co.uhsoft.DataHolder.prototype.setAsyn=function(flag){
	this.add("asyn",flag);
};
	
kr.co.uhsoft.DataHolder.prototype.getAsyn=function(){
	return this.get("asyn");
};
	
kr.co.uhsoft.DataHolder.prototype.setContentType=function(ctype){
	this.add("contentType",ctype);
};
	
kr.co.uhsoft.DataHolder.prototype.getContentType=function(){
	return this.get("contentType");
};
	
kr.co.uhsoft.DataHolder.prototype.setCommand=function(cmd){
	this.add("command",cmd);
};
	
kr.co.uhsoft.DataHolder.prototype.getCommand=function(){
	return this.get("command");
};
	
	
kr.co.uhsoft.DataHolder.prototype.setFocusWidget=function(widget){
	this.add("focusWidget",widget);
};
	
kr.co.uhsoft.DataHolder.prototype.getFocusWidget=function(){
	return this.get("focusWidget");
};
	
kr.co.uhsoft.DataHolder.prototype.setEvent=function(evt){
	this.add("event",evt);
};
		
kr.co.uhsoft.DataHolder.prototype.getEvent=function(){
	return this.get("event");
};	

/////////// kr.co.uhsoft.DataHolder End ///////////////////// 

/////////// kr.co.uhsoft.MessageHolder Start //////////	
kr.co.uhsoft.framework.Util.defineClass("kr.co.uhsoft.MessageHolder",function(){
	kr.co.uhsoft.Holder.call(this);
	this.add("commonCode",{});	
});
kr.co.uhsoft.MessageHolder.prototype=new kr.co.uhsoft.Holder();

kr.co.uhsoft.MessageHolder.prototype.getCommonMsg=function(name){
	if(this.isExist("CommonMsg."+name)){
		return this.get("CommonMsg."+name);
	}else{
		return "";
	}
	
};

kr.co.uhsoft.MessageHolder.prototype.add=function(name,value){
	if(typeof value === "string"){
		value=value.replace("[:", "<");
		value=value.replace(":]", ">");
	}
	kr.co.uhsoft.Holder.prototype.add.call(this,name,value);
};

kr.co.uhsoft.MessageHolder.prototype.addCommonCode=function(name,value){
	if(!this.isExist("commonCode")){
		this.add("commonCode",{});
	}
	
	this.get("commonCode")[name]=value;
};

kr.co.uhsoft.MessageHolder.prototype.getCommonCode=function(name){
	if(typeof name === "undefined"){
		return this.get("commonCode");
	}else if(this.isExist("commonCode") && typeof this.get("commonCode")[name]!== "undefined"){
		return this.holder["commonCode"][name];
	}else{
		return null;
	}
};

kr.co.uhsoft.MessageHolder.prototype.addCommonCodeItem=function(name,title,value,enabled){
	
	var item={};
	item[value]={};
	item[value].title=title;
	item[value].value=value;
	if(typeof enabled === "undefined"){
		item[value].enabled="1";
	}else{
		item[value].enabled=enabled;
	}
	
	if(this.getCommonCode(name)==null){
		this.addCommonCode(name,item);
	}else{
		var code=this.getCommonCode(name);
		code[value]=item[value];
	}
	
};


kr.co.uhsoft.MessageHolder.prototype.removeCommonCode=function(name){
	if(this.isExist("commonCode")){
		delete this.get("commonCode")[name];
	}
	
};


kr.co.uhsoft.MessageHolder.prototype.getCommonCodeList=function(name){
	if(this.isExist("commonCode")){
		var item=this.getCommonCode(name);
		var list=new Array();
		for(name in item){
			
			if(item[name]["enabled"]==null || item[name]["enabled"]=="1"){
				list.push(item[name]);
			}
		}
		
		return list;
	}else{
		return null;
	}
};

kr.co.uhsoft.MessageHolder.prototype.getCommonCodeAllList=function(name){
	if(this.isExist("commonCode")){
		var item=this.getCommonCode(name);
		var list=new Array();
		for(name in item){
			list.push(item[name]);
		}
		
		return list;
	}else{
		return null;
	}
};

kr.co.uhsoft.MessageHolder.prototype.getCommonCodeTitle=function(name,titleName){
	var commonCode=this.getCommonCode(name);
	if(commonCode!=null && commonCode[titleName]){
		return commonCode[titleName].title;
	}else{
		return "";
	}
};

kr.co.uhsoft.MessageHolder.prototype.getCommonCodeValue=function(name,valueName){
	var commonCode=this.getCommonCode(name);
	if(commonCode!=null){
		return commonCode[valueName].value;
	}else{
		return "";
	}
};


kr.co.uhsoft.MessageHolder.prototype.getOrderList=function(name){
	
	var msgLines=this.get(name).split("\n");
	var reStr="<ol>";
	for(var i=0;i<msgLines.length;i++){
		reStr+="<li>"+msgLines[i]+"</li>";
	}
	reStr+="</ol>";
	
	return reStr;
	
};

kr.co.uhsoft.MessageHolder.prototype.getUnOrderList=function(name){
	
	var msgLines=this.get(name).split("\n");
	var reStr="<ul>";
	for(var i=0;i<msgLines.length;i++){
		reStr+="<li>"+msgLines[i]+"</li>";
	}
	reStr+="</ul>";
	
	return reStr;
	
};

kr.co.uhsoft.MessageHolder.prototype.getBr=function(name){
	
	var msgLines=this.get(name).split("\n");
	var reStr="";
	for(var i=0;i<msgLines.length;i++){
		reStr+=msgLines[i];
		if(i<msgLines.length-1){
			reStr+="<br />";
		}
	}
	
	return reStr;
	
};


kr.co.uhsoft.MessageHolder.prototype.loadMessage = function(fileName,messageDir,url1,execute) {
	
	var request=kr.co.uhsoft.framework.Util.getXmlHttpRequest();
	
	var url="../../shopadmin/xmlController.jsp";
	if(url1!=null){
		url=url1;
	}
	
	if(messageDir==null && navigator.browserLanguage!=null){
		messageDir=navigator.browserLanguage;
	}else if(messageDir==null && navigator.language!=null){
		messageDir=navigator.language;
	}
	
	var process=function(request){			
    	var dom = request.responseXML;
    	
    	var root=dom.documentElement;
    	var message=root.getElementsByTagName("message").item(0);
    	var name=message.getAttribute("name");
    	messageHolder.add(name,message.getAttribute("title"));
          			
        var items=root.getElementsByTagName("column");
          				
        for(var i=0;i<items.length;i++ ){
        	var item=items.item(i);
        	var columnName=item.getAttribute("name");
        	if(item.firstChild){
        		var msg=item.firstChild.nodeValue.trim();
        		var lines=msg.split("\n");
        		msg="";
        		for(var j=0;j<lines.length;j++){
        			msg+=lines[j].trim();
        			if(j<lines.length-1){
        				msg+="\n";
        			}
        		}
        		messageHolder.add(name+"."+columnName,msg);
        	}else{
        	   	var columnTitle=item.getAttribute("title");
        		messageHolder.add(name+"."+columnName,columnTitle);
        	}
        }
        	
        items=root.getElementsByTagName("commonCode");
        
        if(items.length>0){
        	var codeList=items.item(0).getElementsByTagName("code");
        	for(var i=0;i<codeList.length;i++){
          		
        		var code=codeList[i];
        		var itemList=code.getElementsByTagName("item");
        		var itemListTemp={}
        		for(var j=0;j<itemList.length;j++){
        			var title=itemList[j].getAttribute("title");
        			var value=itemList[j].getAttribute("value");
        			var enabled=itemList[j].getAttribute("enabled");
        			itemListTemp[value]={};
        			itemListTemp[value]["title"]=title;
        			itemListTemp[value]["value"]=value;
        			
        			if(enabled == null){
						itemListTemp[value].enabled="1";
					}else{
						itemListTemp[value].enabled=enabled;
					}
        			
        		}
          			
        		if(itemList.length>0){
        			messageHolder.addCommonCode(name+"."+codeList[i].getAttribute("name"),itemListTemp);
        			
        		}
        	}
        }
        
        if(execute){
        	execute();
        }
          		   
	}//end process
    
    var queryString="?";
	queryString+="command=loadMessage&";
	queryString+="fileName="+fileName+"&";
	if(messageDir!=null){
		queryString+="messageDir="+messageDir;
	}
    
                  
	request.open("GET",url+queryString);
	request.setRequestHeader('Content-Type',
                'application/x-www-form-urlencoded');
    request.onreadystatechange = processRequestChange;
	request.send();		
	
	function processRequestChange() {
    	if (request.readyState == 4) {
        	if (request.status == 200) {
            	process(request);
         	} else {
            	alert("There was a problem retrieving the XML data:\n" + request.statusText);
         	}
    	}
	}
		
};

//Singleton Method
function getMessageHolder(){
	if(!window.messageHolder){
		window.messageHolder=new kr.co.uhsoft.MessageHolder();
	}
	
	return window.messageHolder;
}

//create messageHolder
getMessageHolder();

/////////// kr.co.uhsoft.MessageHolder End //////////	

/////////// kr.co.uhsoft.HttpCommand Start //////////
kr.co.uhsoft.framework.Util.defineClass("kr.co.uhsoft.HttpCommand",function(){
	this.beforeListeners = null;
	this.afterListeners = null;
});


kr.co.uhsoft.HttpCommand.prototype.addBeforeListener=function(listener){
	if(this.beforeListeners==null){
		this.beforeListeners=new Array();
	}
	
	if(listener.execute){
		this.beforeListeners.push(listener);	
	}else{
		throw new kr.co.uhsoft.BasicException("error: exectue method is Not Founded");
	}
};

kr.co.uhsoft.HttpCommand.prototype.addAfterListener=function(listener){
	if(this.afterListeners==null){
		this.afterListeners=new Array();
	}
	
	if(listener.execute){
		this.afterListeners.push(listener);	
	}else{
		throw new kr.co.uhsoft.BasicException("error: exectue method is Not Founded");
	}
};

kr.co.uhsoft.HttpCommand.prototype.removeListener=function(listener){
	
	var count=this.beforeListeners.length;
	
	for(var i=0;i<count;i++){
    	if(this.beforeListeners[i]==listener){
      		this.beforeListeners.splice(i,1);
      		return;
    	}
    }
	
	count=this.afterListeners.length;
	
	for(var i=0;i<count;i++){
    	if(this.afterListeners[i]==listener){
      		this.afterListeners.splice(i,1);
      		return;
    	}
    }
};


kr.co.uhsoft.HttpCommand.prototype.execute = function(dataHolder) {
  	throw new kr.co.uhsoft.BasicException("error: exectue method is Not Implemented");
};	
/////////// kr.co.uhsoft.HttpCommand End //////////	


/////////// kr.co.uhsoft.HttpCommandFactory Start //////////
kr.co.uhsoft.framework.Util.defineClass("kr.co.uhsoft.HttpCommandFactory",function(){
	this.commandMap={};
});

kr.co.uhsoft.HttpCommandFactory.prototype.addCommand=function(name,command){
	if(typeof name !== "undefined" && typeof command !== "undefined"){
		if(command.execute){
			this.commandMap[name+"HttpCommand"]=command;
		}else{
			alert(name+" is not founded execute() method");
		}
	}
};

kr.co.uhsoft.HttpCommandFactory.prototype.getCommand=function(name){
	if(typeof this.commandMap[name+"HttpCommand"] !== "undefined" ){
		return this.commandMap[name+"HttpCommand"];
	}else{
		return null;
	}
		
};

kr.co.uhsoft.HttpCommandFactory.prototype.removeCommand=function(name){
	delete this.commandMap[name+"HttpCommand"];	
};


kr.co.uhsoft.HttpCommandFactory.prototype.execute=function(name,dataHolder){
	if(this.getCommand(name)!=null){
		if(this.getCommand(name).execute){
			this.getCommand(name).execute(dataHolder);
		}else{
			alert(name +".execute Method is Not Found");
		}
	}else{
		alert(name +" is Not Found");
	}
	
};

/*Singleton Method
function getCommandFactory(){
	if(!window.commandFactory){
		window.commandFactory=new kr.co.uhsoft.HttpCommandFactory();
	}
	
	return window.commandFactory;
}

//create commandFactory
getCommandFactory();
*/
/////////// kr.co.uhsoft.HttpCommandFactory End //////////

/////////// kr.co.uhsoft.Listener Start //////////
kr.co.uhsoft.framework.Util.defineClass("kr.co.uhsoft.Listener",function(){
	
});

kr.co.uhsoft.Listener.prototype.changed = function(model) {
  	throw new kr.co.uhsoft.BasicException("error: exectue changed is Not Implemented");
};	
/////////// kr.co.uhsoft.Listener End //////////	


/////////// kr.co.uhsoft.AbstractModel Start //////////
kr.co.uhsoft.framework.Util.defineClass("kr.co.uhsoft.AbstractModel",function(){
	this.listeners = new Array();
	
});

kr.co.uhsoft.AbstractModel.prototype.addListener=function(listener){
	if(listener.changed){
		this.listeners.push(listener);	
	}else{
		throw new kr.co.uhsoft.BasicException("error: exectue changed is Not Founded");
	}
};

kr.co.uhsoft.AbstractModel.prototype.removeListener=function(listener){
	
	var count=this.listeners.length;
	if(count<1){
		return;
	}	
	
	for(var i=0;i<count;i++){
    	if(this.listeners[i]==listener){
      		this.listeners.splice(i,1);
      		return;
    	}
    }
};

kr.co.uhsoft.AbstractModel.prototype.notify=function(){
	
	var count=this.listeners.length;
	
	for(var i=0;i<count;i++){
    	this.listeners[i].changed(this);
    }
};

/////////// kr.co.uhsoft.AbstractModel End //////////


/////////// kr.co.uhsoft.LinkHttpCommand Start //////////
kr.co.uhsoft.framework.Util.defineClass("kr.co.uhsoft.LinkHttpCommand",function(){
	var command="cmd";
	var jst="jst";
	this.rootPath="kkk";

});

kr.co.uhsoft.LinkHttpCommand.prototype=new kr.co.uhsoft.HttpCommand();


kr.co.uhsoft.LinkHttpCommand.prototype.execute=function(event){
	if (!event) event = window.event;
    var target = event.target || event.srcElement;
	kr.co.uhsoft.framework.Util.preventDefault(event);	
    var hrefStr="";
	
	if(target.getAttribute("href")){
		hrefStr=target.getAttribute("href");
	}else if(target.getAttribute("action")){
		hrefStr=target.getAttribute("action");
	}
	
	try{ 
		
    	var index = hrefStr.indexOf("?");
    	
    	if(index<0){
    		throw "link";
    	}
    	
    	var params=kr.co.uhsoft.framework.Util.queryParsing(hrefStr.substr(index+1));
    	
		var jsParam= new kr.co.uhsoft.JSParam();
		jsParam.target=target;
		jsParam.query=params;
		if("form"==target.nodeName.toLowerCase()){
			jsParam.formId=target.getAttribute("id");
		}
		
		var manager=managerHolder.get(params["mgr"]);
		
		manager.process(jsParam);
		
		//jsTemplate.execute(jsParam);
		
	}catch(error){
		alert(error);
		document.location.href=hrefStr;
	}
	/*	
    var jsParam=new JSParam();
    jsParam.url=hrefStr.substr(0,index);
    jsParam.queryString=hrefStr.substr(index+1);
    jsParam.content=content;	
    */
};

kr.co.uhsoft.LinkHttpCommand.prototype.register=function(elem){
	
	if("a"==elem.nodeName.toLowerCase()){
    	var hrefStr=elem.getAttribute("href");
		var index = hrefStr.indexOf("mgr");
    	if(index>0){
			kr.co.uhsoft.framework.Util.addEventHandler(elem,"click",this.execute);
    	}
	}else if ("form"==elem.nodeName.toLowerCase()){
    	var hrefStr=elem.getAttribute("action");
		var index = hrefStr.indexOf("mgr");
    	if(index>0){
			kr.co.uhsoft.framework.Util.addEventHandler(elem,"submit",this.execute);
    	}
		
	}
	
    
};

kr.co.uhsoft.LinkHttpCommand.prototype.registerLink=function(elem){
	
	if(elem==null){
		elem=document;
	}else if("a"==elem.nodeName.toLowerCase() || "form"==elem.nodeName.toLowerCase()){
		this.register(elem);
		return;
	}
	
	var linkList=elem.getElementsByTagName("a");
    for(var i=0;i<linkList.length;i++){
    	var src=linkList[i];
    	this.register(src);
    }
	
	linkList=elem.getElementsByTagName("form");
    for(var i=0;i<linkList.length;i++){
    	var src=linkList[i];
    	this.register(src);
    }
	
	
};

//Singleton Method
function getLinkHttpCommand(){
	if(!window.linkHttpCommand){
		window.linkHttpCommand=new kr.co.uhsoft.LinkHttpCommand();
	}
	
	return window.linkHttpCommand;
}

//create commandFactory
getLinkHttpCommand();

/////////// kr.co.uhsoft.LinkHttpCommand End //////////


