/*
Class:  DateFormat

*/

function DateFormat() {
    
	this.parse = DateFormat_parse;
	this.format = DateFormat_format;
}

function DateFormat_parse ( date, pattern ) {
    return parseInner( date.replace(/\-/g,"/"), pattern.replace(/\-/g,"/") );
}

function DateFormat_format ( date, pattern) {

    var day = date.getDate() <=9 ? ("0"+date.getDate()) : (""+date.getDate()) ;
    var month = (date.getMonth()+1) <=9 ? ("0"+(date.getMonth()+1)) : (""+(date.getMonth()+1)) ;
    
    var year = date.getYear() < 1900 ? date.getYear()+1900 : date.getYear() ;
    
    
    pattern = pattern.replace( "dd", day ); 
    pattern = pattern.replace( "MM", month ); 
    pattern = pattern.replace( "yyyy", year ); 
    pattern = pattern.replace( "yy", year ); 
    return pattern;
	
}

function parseInner( date, pattern ){
    
    var splitdate = date.split("/");
    var splitpattern = pattern.split("/");
    var day;
    var month;
    var year;

    for( var i=0; i < splitpattern.length; i++ ){
        value = parseFloat( splitdate[i] );
        switch( splitpattern[i] ){
            case "dd":
                day = value ;
                break;
            case "MM":
                month = value ;
                break;
            case "yy":
            case "yyyy":
                year = value;
                break;

        }
    }
    
    if( isValidDate( year, month, day ) ){
        return new Date( year, month-1, day );
    }
    else{
        return false;
    }
        

}


function isValidDate(year, month, day ){

    var isValid = false;
    
    switch( month ){
        case 2:
        
            if( isBiciesto( year ) && (day >=1 && day <= 29) )
                isValid = true;
            else if( !isBiciesto( year ) && (day >=1 && day <= 28) )
                isValid = true;
    
            break;
        
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            
            if( day >=1 && day <= 31)
                isValid = true;
    
            break;
        
        case 4:
        case 6:
        case 9:
        case 11:
        
            
            if( day >=1 && day <= 30)
                isValid = true;
    
            break;
        
    }
    

    return isValid;

}


function isBiciesto( year ){
   return year % 4 == 0 && ( year % 100 != 0 || year % 400 == 0 );
}


