﻿/*----------------------------
Methods Template : V1.01 
Company: G.O.L
Author : Le Huu Loc 
Email-chat : Nhatlongag@yahoo.com 
Data modify: 09/28/2008 
Methods working need load this files before:  
    .yahoo.js(YUI)
    .event.js(YUI)
    .connection.js(YUI)
    .get.js(YUI)    
read help about structure file config Page in file Help.txt     
----------------------------*/
if(typeof(Template) == 'undefined') Template = {};
Template={
    ListFileDefault:[
                        "Script/LanguageJS.js",
                        "ClientUtil/JS/YUI/build/tooltip/wz_tooltip.js",
                        "Script/CommonVAN.js",
                        "ClientUtil/Skin/Include/Style2.css",
                        "ClientUtil/Skin/Include/Style.css",
                        "ClientUtil/JS/YUI/build/assets/skins/sam/container.css"
                    ],  // list files need load first
    CacheData:{
        ConfigPage:[],  // Cache config page loaded
        KeyFileLoaded:[], // Cache name file loaded, use check not reload file
        PageControlLoaded:[], // Cache name page loaded, use check not reload page
        CurrentTemplate:'', // use check not reload template. if load new template is all page(control in page) will reload
        PageLoaded:0, //sum page loaded
        FunctionErr:'', // name run functions to err
        FileLoaded:0, // sum file loaded
        MsgLoadingDefault:$get('loadingVAN').innerHTML,
        ShowMsgErr:true,
        Err:false,
        CurrenHeight:document.documentElement.offsetHeight
    }, //Cache template 
    resetCacheData:function() //reset to use when click load  another page
    {
        Template.CacheData.PageLoaded=0; 
        Template.CacheData.FunctionErr=''; 
        Template.CacheData.FileLoaded=0; 
    },
    WhereErr:function(o)
    {
        if(Template.CacheData.ShowMsgErr==true)
        {   
            Template.CacheData.Err=true
            Template.MSG.alert(o)
        }
    },
    QueryString:function(url) // similar Request.QueryString() of code VB, use toLowerCase only 
    {
        if(typeof(url)=='undefined')              
        url=window.location.toString();
        var objReult = {}; 
        if (typeof(url.split('#')[1])!='undefined')
        {
            var StringRequest=url.split('#')[1];
            var ObjectRequest = StringRequest.split('&');          
            for(i=0;i<ObjectRequest.length;i++)
            {
                if(typeof(ObjectRequest[i].split('=')[1])!='undefined')
                {
                    objReult[ObjectRequest[i].toLowerCase().split('=')[0]]=ObjectRequest[i].split('=')[1];
                }             
            }
        }return objReult
    },
    BuildURLRequest: function(url) // build url with get QueryString for parameter before send request to server
    {  
        if (typeof(url.split('?')[1])!='undefined')
        {
            ObjRequest = Template.QueryString();         
            var StringRequest=url.split('?')[1];
            var ObjectRequest = StringRequest.split('&');
            var name=null;
            for(i=0;i<ObjectRequest.length;i++)
            {
                if(typeof(ObjectRequest[i].split('=')[1])!='undefined')
                {
                    Name = ObjectRequest[i].toLowerCase().split('=')[1];
                    if (Name.substring(0,1)=='@')
                    {
                        if(typeof(ObjRequest)=='undefined')
                        url=url.toLowerCase().replace(Name,'');
                        else
                        url=url.toLowerCase().replace(Name,typeof(ObjRequest[Name.substring(1, Name.length)])=='undefined'?'':ObjRequest[Name.substring(1, Name.length)]);                      
                    }                
                }                                 
            }
        }return url
    },
    ReCallFunction:function() // recall function when load all files Success, work only run function err
    { 
        //debugger
        if(Template.CacheData.FunctionErr!='' && Template.CacheData.FileJsLoaded==Setting.prototype.Page.ListFile.length)
        {
            var listFunction=Template.CacheData.FunctionErr.split(';')
            var textErr=''
            for(_templateRunNumber=0;_templateRunNumber<listFunction.length;_templateRunNumber++)
            {
                try
                {  
                    eval(listFunction[_templateRunNumber]);                    
                }
                catch(ex)
                {
                    textErr+="<br>Name Function:"+listFunction[_templateRunNumber]+"<br>"
                    textErr+="Message Err:"+ex.message+"<br>"                    
                }            
            }            
            if(textErr!='')
            Template.WhereErr(textErr)
            Template.CacheData.FunctionErr=''; // delete function err
        }
    },
    LoadFile:function(ListFile)
    {
    onLoadSuccess = function(o) 
    {    
        Template.CacheData.FileJsLoaded++;
        if(Template.CacheData.FunctionErr!='')
        Template.ReCallFunction();
        Template.CacheData.KeyFileLoaded[key]=true;
    }
    var textErrReadfile='';
    for (var i=0;i<ListFile.length;i++)
        {      
            var key = ListFile[i];
            if(typeof(Template.CacheData.KeyFileLoaded[key])=='undefined')
            {
                try
                {
                if(key.split(".")[key.split(".").length-1]=="css")
                    YAHOO.util.Get.css(ListFile[i],{onSuccess: onLoadSuccess,onFailure: onLoadSuccess});
                else            
                    YAHOO.util.Get.script(ListFile[i],{onSuccess: onLoadSuccess,onFailure: onLoadSuccess});      
                }
                catch(ex)
                {
                    textErrReadfile+="<br>load file :"+ListFile[i]+"<br>"
                    textErrReadfile+="Message Err:"+ex.message+"<br>"                    
                }       
            }
            else
            {            
                Template.CacheData.FileJsLoaded++;
                if(Template.CacheData.FunctionErr!='')
                Template.ReCallFunction();
            }
        }
        if(textErrReadfile!='')
        {
            if(textErrReadfile!='')
            Template.WhereErr(textErrReadfile)
            textErrReadfile='';
        }
    },
    Load:function(url,id,Method,callFunction,noHideLoading){       
    var handleSuccess = function(o){      
        Template.CacheData.PageLoaded++;
        try        
        {
            $get(id).innerHTML= o.responseText;
        }
        catch(ex){Template.WhereErr(ex.message)}                    
        if(typeof(callFunction)!='undefined' && callFunction!='')
        {           
            listFunction=callFunction.split(';')           
            for(_templateRunNumber=0;_templateRunNumber<listFunction.length;_templateRunNumber++)
            {
                try
                {                        
                    eval(listFunction[_templateRunNumber]);  
                }
                catch(ex)
                {     
                    Template.CacheData.FunctionErr+=listFunction[_templateRunNumber]+";"
                }
            }            
            if(Template.FunctionErr!='' && Template.CacheData.PageLoaded==Setting.prototype.Page.Listpage.length)
            { 
                    Template.CacheData.FileJsLoaded=0; ///reset for reload file in listfile
                    Template.LoadFile(Setting.prototype.Page.ListFile);              
            }
        }
        if(Template.CacheData.PageLoaded==Setting.prototype.Page.Listpage.length && noHideLoading!=true)
        {           
            Template.MSG.loading.hide(); 
        }       
       
    };
        var handleFail = function(o){
            Template.CacheData.PageLoaded++;  
            if(noHideLoading!=true)              
            Template.MSG.loading.hide();
        };
        var callback ={
           success:handleSuccess,
           failure: handleFail
        };
        
        url=Template.BuildURLRequest(url)
        if (Method=='POST')
        {            
            ArrUrl = url.split('?'); 
            var request = YAHOO.util.Connect.asyncRequest('POST', ArrUrl[0], callback,typeof(ArrUrl[1])=='undefined'?'':ArrUrl[1]);                          
        }
        else
        {
            var request = YAHOO.util.Connect.asyncRequest('GET', url, callback);                  
        }
    },    
    LoadPage:function(ListObject,LoadAll,noHideLoading)
     {
        if(typeof(ListObject)!='undefined')
        {   
            var url="";  
            var ListFileJS=[];
            var Method='POST';     
            var CallFunction='';  
            var CacheData=false;  
            if (typeof(LoadAll)=='undefined')          
            LoadAll=true;               
            for(I=0;I<ListObject.Listpage.length;I++)
            {
                if(typeof(ListObject.Listpage[I].Blank)!='undefined' && ListObject.Listpage[I].Blank)
                {
                    $get(ListObject.Listpage[I].ZONE).innerHTML=""                    
                    Template.CacheData.PageLoaded++;
                }
                else
                {
                    url=ListObject.Listpage[I].PAGE;
                    if (ListObject.Listpage[I].CacheData==false)
                    {
                        var sep=url.indexOf("?")>-1?"&":"?";
                        url += sep + "random=" + Math.random();
                    }                    
                    if (typeof(ListObject.Listpage[I].Method)!='undefined')          
                        Method = ListObject.Listpage[I].Method; 
                    else
                        Method='POST';                
                    if (typeof(ListObject.Listpage[I].CallFunction)!='undefined')          
                        CallFunction = ListObject.Listpage[I].CallFunction;    
                    else
                        CallFunction = '';
                    if (typeof(ListObject.Listpage[I].CacheData)!='undefined' && typeof(Template.CacheData.PageControlLoaded[ListObject.Listpage[I].PAGE])!='undefined')          
                        CacheData = ListObject.Listpage[I].CacheData;
                    else
                        CacheData=false;                            
                    if(LoadAll==true || CacheData==false)
                    {
                        Template.Load(url,ListObject.Listpage[I].ZONE,Method,CallFunction,noHideLoading);
                        Template.CacheData.PageControlLoaded[ListObject.Listpage[I].PAGE]=true;
                    }
                    else
                    {
                        Template.CacheData.PageLoaded++;                    
                        if(noHideLoading!=true && Template.CacheData.PageLoaded==Setting.prototype.Page.Listpage.length)
                        Template.MSG.loading.hide();
                    } 
                }              
            }
             
        }
    },
    LoadTemplate:function(url,id)
    {  
        var handleSuccess = function(o){        
            //load default file                      
            Template.LoadFile(Template.ListFileDefault);        
            $get(id).innerHTML= o.responseText;
            //load sub page                 
            if (o.responseText!='');        
            Template.LoadPage(Setting.prototype.Page,true);
             var ua = window.navigator.userAgent;
                     
            if (ua.indexOf('MSIE') < 0) {
             $get("pageSpace").style.height='1px';
            }
            if (ua.indexOf('Chrome') > 0) {
             $get("pageSpace").style.height='65px';
            }
            
       };
        var handleFail = function(o){
            YAHOO.util.Connect.asyncRequest('GET', 'Template/TemplateDefault.html', callback);
        };
        var callback ={
           success:handleSuccess,
           failure: handleFail
        };
        var request = YAHOO.util.Connect.asyncRequest('GET', url, callback);        
    },    
    AcessDataTemplate:function()
    {
        Template.LoadFile(Setting.prototype.Page.ListFile);
        if(Template.CacheData.CurrentTemplate=='' || Template.CacheData.CurrentTemplate!=String(Setting.prototype.Page.Template))
        {
            Template.CacheData.CurrentTemplate=String(Setting.prototype.Page.Template);
            Template.LoadTemplate(String(Setting.prototype.Page.Template),'page'); 
        }
        else
        {
            Template.LoadPage(Setting.prototype.Page,false);        
        }
    },
    LoadFileConfig:function(PageNeedLoad)
    {      
        onLoadSuccess = function(o) 
        {                
            Template.CacheData.ConfigPage['o'+PageNeedLoad]=Setting.prototype.Page;
            Template.AcessDataTemplate();         
        }  
        onLoadFail =function(o)        
        {          
            WhereErr('Err read file '+ PageNeedLoad);
        }
        if(typeof(Template.CacheData.ConfigPage['o'+PageNeedLoad])=='undefined' || Template.CacheData.ConfigPage['o'+PageNeedLoad]==null)
        {               
            YAHOO.util.Get.script(PageNeedLoad,{onSuccess: onLoadSuccess,onFailure: onLoadFail});                                                      
        }
        else
        {  
            Setting.prototype.Page=Template.CacheData.ConfigPage['o'+PageNeedLoad]
            Template.AcessDataTemplate();           
        }   
    },
    AcessHref:function(url)
    {   
        Template.resetCacheData();
        if(typeof(url)=='undefined')        
            url=window.location.toString();
        else
            Template.MSG.loading.show();
        var PageNeedLoad=''
        if(url=='#')
            return null
        if (typeof(url.split('#')[1])!='undefined' && typeof(Template.QueryString(url).action) !='undefined')
        {   
           PageNeedLoad='Script/ConfigPage/'+Template.QueryString(url).action+'.js';                   
        }
        else{PageNeedLoad='Script/ConfigPage/Index.js'}
        Template.LoadFileConfig(PageNeedLoad);
    },
    location:function(url)
    {    
        Template.CacheData.Err=false;
        window.location.href=url;       
        Template.AcessHref(url)
    },
    AcessRequest:{
        SubmitOnSuccesed:function(){},
        ResultSubmit:null,
        Submit:function(url,Action,objJSon)
        {   
            var handleSuccess = function(o){              
                var obj = Sys.Serialization.JavaScriptSerializer.deserialize(o.responseText)//need fix when not use ScriptManager
                if(obj.ErrorOnserver!=null)
                {   
                    Template.WhereErr(obj.ErrorOnserver)                   
                }
                Template.AcessRequest.ResultSubmit=obj; 
                Template.AcessRequest.SubmitOnSuccesed();       
            };
            var handleFail = function(o){             
                //$get("page").innerHTML=o.responseText       
                Template.AcessRequest.ResultSubmit=null; 
                Template.AcessRequest.SubmitOnSuccesed();     
            };
            var callback ={
               success:handleSuccess,
               failure: handleFail
            };   
           var objPost = "Action="+Action;
           if(typeof(objJSon)!='undefined')
           {   
            for (i=0;i<objJSon.length;i++)
                {
                    objPost+='&JSon'+i+'='+Template.AcessRequest.FixErrYahoo(Sys.Serialization.JavaScriptSerializer.serialize(objJSon[i]))
                }
           } 
           var request = YAHOO.util.Connect.asyncRequest('POST', url, callback,objPost);                  
        },
        FixErrYahoo:function(data)
        { 
            var listdata=""
            listdata=data.split("&")
            if(listdata.length>0)
            {
                for(j=0;j<listdata.length-1;j++)
                {
                    data=data.replace("&","╝")
                }
            }return data
        }        
    },
    MSG:{
        alert:function(msg,width)
        {
            if(typeof(width)!='undefined')
            $get('tableLoading').style.width=width           
            $get('loadingVAN').innerHTML=msg
            $get('buttom').innerHTML="<a href='javascript:Template.MSG.loading.hide()'>Đóng lại</a>"
            if (Template.Loading.loaded==false) {
            Template.Loading.loaded=true;
            Template.Loading.show();
            }           
        },
        alertWithAcessFunction:function(msg,acessFunctionWhenClickYes,width)
        {
            if(typeof(width)!='undefined')
            $get('tableLoading').style.width=width           
            $get('loadingVAN').innerHTML=msg
            $get('buttom').innerHTML=" <a href='javascript:"+acessFunctionWhenClickYes+";Template.MSG.loading.hide()'>Đóng lại</a>"
            if (Template.Loading.loaded==false) {
            Template.Loading.loaded=true;
            Template.Loading.show();
            }           
        },
        alertWithAcessFunctionNoHide:function(msg,acessFunctionWhenClickYes,width)
        {
            if(typeof(width)!='undefined')
            $get('tableLoading').style.width=width           
            $get('loadingVAN').innerHTML=msg
            $get('buttom').innerHTML=" <a href='"+acessFunctionWhenClickYes+"'>Đóng lại</a>"
            if (Template.Loading.loaded==false) {
            Template.Loading.loaded=true;
            Template.Loading.show();
            }           
        },
        Confirm:function(msg,acessFunctionWhenClickYes,width)
        {
            if(typeof(width)!='undefined')
            $get('tableLoading').style.width=width
            $get('loadingVAN').innerHTML=msg
            $get('buttom').innerHTML="<a href='javascript:Template.MSG.loading.hide();'>Đóng lại</a> | "
            $get('buttom').innerHTML+=" <a href='javascript:"+acessFunctionWhenClickYes+";Template.MSG.loading.hide()'>Đồng ý</a>"
            if (Template.Loading.loaded==false) {
            Template.Loading.loaded=true;
            Template.Loading.show();
            }
        },
        loading:{
            show:function()
            {              
                if (Template.Loading.loaded==false) {
                    Template.Loading.loaded=true;
                    $get('loadingVAN').innerHTML=Template.CacheData.MsgLoadingDefault
                    $get('tableLoading').style.width=200
                    Template.Loading.show();
                }
            },
            hide:function(){               
                Template.CacheData.Err=false;
                Template.Loading.hide()
            }   
        }
    },
    ShowCombo:function(show)
    {       
        if(window.navigator.userAgent.split(";")[1]==" MSIE 7.0")
        return
        var par="hidden"
        if(show==true)
            par=""
        var all = document.getElementsByTagName('select');	              
            for (var i = 0, o; o = all[i]; i++) {	
                $get(o.id).style.visibility=par
            }
       
    },
    Loading:
    {     
        loaded:false,
        timershow:false,
        curx:400,
        cury:200,
        win_w:window.innerWidth ? window.innerWidth : document.body.offsetWidth,
        mid_w:0,
        obj:$get('LoadingDiv'),
        show:function()
        {
            if (Template.Loading.timershow) window.clearTimeout(Template.Loading.timershow);
            {
                Template.Loading.timershow=window.setInterval("Template.Loading.nshow()",1);
                Template.ShowCombo(false)
            }
        },
        _hide:function() {
            if (Template.Loading.timershow) window.clearTimeout(Template.Loading.timershow);
            Template.Loading.timershow=window.setInterval("Template.Loading.nhide()",10);
            Template.Loading.loaded=false;
        },
        hide:function()
        {           
            if(Template.Loading.loaded==true && Template.CacheData.Err!=true)
            {
                
                window.setTimeout('Template.Loading._hide()',400)
                window.setTimeout("$get('buttom').innerHTML='';$get('loadingVAN').innerHTML='';$get('tableLoading').style.width=200",400)                      
                Template.ShowCombo(true)
            }
        },
        moveobj:function(obj,x,y) {
            if( obj != null )
            {
                obj.style.left=x + "px";
                obj.style.top=y+ "px";
                Template.Loading.curx=x;
                Template.Loading.cury=y;
            }
        },
        stayMiddle:function() {         
            if (document.documentElement && document.documentElement.scrollTop)
            var pY = document.documentElement.scrollTop;
            else if (document.body)
            var pY = document.body.scrollTop;            
            var newy = Template.Loading.cury+((pY-Template.Loading.cury)/16)+12;
            if( Template.Loading.obj != null)
	            Template.Loading.moveobj(Template.Loading.obj,Template.Loading.curx, newy);
        },
        timershow1:window.setInterval("Template.Loading.stayMiddle()",1),
        nshow:function() { 
            if(Template.Loading.mid_w==0)
            Template.Loading.mid_w=parseInt(this.win_w/2)
            var newx =  Template.Loading.curx+(( Template.Loading.mid_w- Template.Loading.curx)/16)-7;
            Template.Loading.moveobj( Template.Loading.obj, newx,  Template.Loading.cury);
        },
        nhide:function() {           
            var newx = Template.Loading.curx+((0-Template.Loading.curx)/16)-15;
            Template.Loading.moveobj(Template.Loading.obj,newx, Template.Loading.cury);
        }
    },
    _loadingForCombo:function(o,id)
    {
        if($get('__imgloading'+id)==null)
        {
        var img = document.createElement('img');
			img.src = 'clientUtil/Image/clock.gif';			
			img.id='__imgloading'+id;
			img.alt='Đang tải...';
			img.width=20;
			img.height=20;						
			img.style.marginLeft = parseInt(o.offsetWidth)								
			img.style.position = 'absolute';						
			img.style.display='block'						
			o.parentNode.insertBefore(img, o);
		}
		else
		{$get('__imgloading'+id).style.display='block'}
    },
    loadCombo:function(obj)
    {
    
        if(typeof(obj)!='undefined')
        {            
            var handleSuccess = function(o){                                  
                try
                {
                    var objDer=Sys.Serialization.JavaScriptSerializer.deserialize(o.responseText)//need fix when not use ScriptManager
                }
                catch(ex)
                {  
                    $get('__imgloading'+obj.ControlID).style.display="none";
                    Template.WhereErr('Err on server when call ' + obj.url);
                    return
                } 
                var newOptions=null
                var control = $get(obj.ControlID);
                control.options.length=0
                control.options[0] = new Option('','')
                for(i=0;i<objDer.length;i++)
                {                   
                    control.options[control.options.length] = new Option(objDer[i][obj.DataTextField], objDer[i][obj.DataValueField]);           
                }              
                $get('__imgloading'+obj.ControlID).style.display="none"               
           };
            var handleFail = function(o){
                Template.MSG.alert('Err on server when call ' + obj.url)
            };
            var callback ={
               success:handleSuccess,
               failure: handleFail
            };
            Template._loadingForCombo($get(obj.ControlID),obj.ControlID)            
            var request = YAHOO.util.Connect.asyncRequest('POST', obj.url, callback,obj.DataPost);
        }
    },
    CheckLogin:function(){
        var tokens=null;
        if(YAHOO.util.Cookie.get("VANToken")!=null && YAHOO.util.Cookie.get("VANToken")!="VANToken")
        tokens= YAHOO.util.Cookie.get("VANToken") 
        return tokens
    }
}
Template.resetCacheData();  // set data for load first
Template.MSG.loading.show() 
//if(document.all)  //IE only
//{  
    //kiem tra login    
    tokens=Template.CheckLogin()   
    if(Template.QueryString().action=="activeprofile" || tokens!=null || Template.QueryString().action=="register")       
        Template.AcessHref();// load page when pass link or refesh  
    else if(Template.QueryString().action=="activeForgetPass" || tokens!=null)       
        Template.AcessHref();       
    else   
        Template.location("index.aspx#action=index")            
//}
